程序员真香定律:我永不加班!困扰了程序员20年的10大难题

简介: 喜欢这篇文章的朋友可以多多收藏、点赞、关注 一条龙~

程序猿最艰巨的任务跟编写代碼没得几个关系。编码是逻辑构思的一种实践,这跟程序猿日常工作中的其他任务比起来相对简单。如果你觉得自身還是1个技术水平普通的程序猿,在你真正的能进入到顶尖高手行列前,请保证你已经战胜了下述晋升的阻碍。

1. 解释你在干什么

解释软件开发过程是1个很艰难的事情。那些非程序猿岗位的人或许了解许多有关编程的事情,但很显然,他们不会编程。对于他们而言,我们的生活只是在一间漆黑的房间内趴到键盘前消耗着咖啡。

你会在你的朋友、亲人和同事中遇上这样的人,他会觉得编码并不是1个合理的岗位。

1

2. 形象的说出软件解决方案

依据某些简短的要求——一般是一知半解的,你需要设计出数据结构,软件架构,代碼算法,通信协议,以及别的任何针对商业问題的解决方法各种构成。并且你必须用某种外行人听的懂的用语将它们表达出来,并需要在要求的時间里提交给客户。

非常少有程序猿能做到这些。

2

3. 评估工期

这是程序猿痛苦的本源。在开发任务没有完成以前,你是絕對没有可能确定完成这个任务需要的時间。或许程序跟之前写的很类似,但环境变了,问題变了,限定条件变了。

工作经验会提供一定的辨别力,但多数的程序猿都习惯于低估问題難度。这其中的缘故是他们只考虑到编码这方面的要素,而忽视了这个任务清单上的其余事务。

应对1个问題可能会有一万种解决方法,一万种写法。接手其他人写的代碼,代表你要花很多的時间在无数的代碼行里探寻,了解当时原作者的基本思路。并且,要是是1个不相信注释和文档的程序猿留下来的半个工程项目,麻烦事就更大了。

3

5. 软件边界的模糊蔓延和让人吐血的奇怪功能需求

尽管敏捷开发方法给软件范围的膨胀提供了一定的预备空间,但这并没有带来任何的功效——特别是在是当你碰到某些由一时兴起的怪念头形成的功能需求。你知道这样做一定会失败。你的团队判断这样做一定会失败。但客户认为不错,而当失败不可避免的出現时,全是你的错,因为是你没有了解他们的真正意图。

4

6. 在缺少优化和过度优化之间找到平衡点

复杂的软件永遠不会作到极致;总会有一些更好的实施方案。你完全可以不停的优化下去,这就是说为啥软件项目从来都没有提早完工的。

而另一面,“这样就行——我之后会优化它的”这类心态也是普遍的。代碼今日好使,但你知道明日可能会出現麻烦或不能用。当然了,你是不需要去修改它的,它将会交给下一个倒霉鬼程序猿。

5

7. 测试你的代码

单元测试你也写了,软件也提交了测试组,但Bug仍旧存有……

软件是复杂的,将会含有成百上千行代碼。系统中或者存有千万的各类交互和逻辑路径;你不可能彻底测试它们。

相似的,软件会在不一样的条件下跟不一样的平台上的不一样的软件交互。你不可能所有的都测到。

学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习C/C++或者为了入行、转行学习C/C++的伙伴可以私信回复小编“学习”领取全套免费C/C++学习资料、视频

写出好的单元测试是一种乏味且艰辛的工作。理想状况下,测试应当在着手开发设计前就早已写好——但你如何向客户解釋为何4个礼拜结束了依然没有能用的软件?

单元测试并不能覆盖每个问题点。在理想的世界里,应该有一个独立的团队来写测试并积极的去发现问题。不幸的是,对大多数项目来说,这样成本太高,时间不够,于是用开发团队来写测试程序。而开发团队潜意识的会避免很多极端的边界情况。

程序员喜欢用符合逻辑的方式处理所有问题。但用户很少是这样的。他们会发现你永远意想不到的问题。

6

8. 写软件文档

给代码写文档是一项费力耗时的工作。很少有程序员擅长这个、喜欢这个的,并且很少有程序员会花时间去读它们。

7

9. 处理IT问题

你每天都在研究技术。你也许是一个HTML或PHP程序员,但你很可能会遇到一些例如硬盘损坏、驱动冲突或软件崩溃的问题。解决这些事情不是你的主要责任,但是,除非你解决了这些问题,否者你将无法继续你的开发工作。

不幸的是,对于IT圈外的人来说,程序员应该是软硬件都精通的人。当他们遇到了问题,他们自己不花时间就解决,直接会找你。不论是遇到什么问题:你是用计算机的,你一定知道如何将预算表导入Sage,如何配置Oracle,或为何在他们的黑莓手机上发不出邮件。

当然了,这些打搅绝对不能成为你完不成工作的理由,也没有报酬,不是吗?

8

10. 处理人的问题

上面的这些难题都可以总结为“人的问题”。很少有外行人会去建议1个飞行员如何开飞机或建议一个电器工程师如何布线。但很多人却会兴致勃勃的勇敢的建议如何开发软件。

我相信对于这些人没有什么好办法。你需要接受这样的事实:这世界上有一半的智商是低于平均水平的!

9
.
.
.

如有侵权,请联系删除

目录
相关文章
|
缓存 算法
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
07、Netty学习笔记—(聊天业务优化:参数调优)(二)
|
缓存 Ubuntu Linux
LXC (Linux 虚拟环境)简单介绍
LXC是Linux containers的简称,操作系统级别的虚拟化技术。它可以在操作系统层次上为进程提供的虚拟的执行环境。一个虚拟的执行环境被称为一个容器(container)。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。
1561 0
LXC (Linux 虚拟环境)简单介绍
|
传感器 数据采集 存储
在环境治理领域,污染治理系统工程旨在通过系统的方法来解决环境污染问题。这通常包括污染源的识别、污染物的监测、治理技术的选择、治理效果的评估等多个环节。
在环境治理领域,污染治理系统工程旨在通过系统的方法来解决环境污染问题。这通常包括污染源的识别、污染物的监测、治理技术的选择、治理效果的评估等多个环节。
|
数据采集 JavaScript 前端开发
Puppeteer-py:Python 中的无头浏览器自动化
Puppeteer-py:Python 中的无头浏览器自动化
|
人工智能 搜索推荐 UED
还没排上SearchGPT?比Perplexity更好用的国产开源平替了解一下?
【8月更文挑战第24天】近日发布的一项研究成果提出了一种革新性的信息检索系统——MindSearch,该系统通过模仿人脑思维方式,有效解决了传统信息检索方法面对复杂查询时的不足。MindSearch利用多代理框架,将用户查询拆解成子问题逐步扩展查询图谱,实现复杂查询的精准定位;通过多层次信息检索,整合不同网页中的相关数据,提高信息提取的准确率;并且能高效处理大规模网页,3分钟内即可检索300多个网页。实验显示,MindSearch不仅提升了响应的深度与广度,还在封闭及开放式问答中表现出色,更符合用户的偏好。不过,MindSearch仍面临查询意图理解、噪音处理及可扩展性等方面的挑战。
228 4
|
机器学习/深度学习 算法
XGBoost中正则化的9个超参数
本文探讨了XGBoost中多种正则化方法及其重要性,旨在通过防止过拟合来提升模型性能。文章首先强调了XGBoost作为一种高效算法在机器学习任务中的应用价值,并指出正则化对于缓解过拟合问题的关键作用,具体包括降低模型复杂度、改善泛化能力和防止模型过度适应训练数据。随后,文章详细介绍了四种正则化方法:减少估计器数量(如使用`early_stopping_rounds`)、使用更简单的树(如调整`gamma`和`max_depth`)、采样(如设置`subsample`和`colsample`)以及收缩(如调节`learning_rate`, `lambda`和`alpha`)。
435 0
XGBoost中正则化的9个超参数
|
Java 数据库 Spring
Spring Bean、Java Bean和对象的区别与联系
Spring Bean、Java Bean和对象的区别与联系
720 0
|
Java 关系型数据库 MySQL
Spring Boot事务配置管理
主要总结了 Spring Boot 中如何使用事务,只要使用 @Transactional 注解即可使用,非常简单方便。除此之外,重点总结了三个在实际项目中可能遇到的坑点,这非常有意义,因为事务这东西不出问题还好,出了问题比较难以排查,所以总结的这三点注意事项,希望能帮助到开发中的朋友。
|
SQL Oracle 关系型数据库
关系型数据库Oracle设置 RMAN 环境:
【7月更文挑战第25天】
278 2
|
存储 分布式计算 Hadoop
Hadoop 运行的三种模式
【8月更文挑战第31天】
1228 0