在很多人眼里,程序员是一类高薪、“高危” 的职业。他们穿着格子衫、顶着一碗超帅的光头,能修电脑、能黑网站、简直无所不能。
但直到我自己当上程序员,才发现其实很多都是对程序员的误解。除了外行的误解外,还有很多来自于程序员同行的误解。
今天我就结合自己的学习 / 工作经历和感悟,分享下我对这些误解的看法,当然也希望给程序员朋友们一些实质性的建议和启发。

外行的误解

1. 程序员为啥工资那么高?人均年薪百万?

作为达不到平均的一方,我觉得这句话伤害不大,侮辱性极强。
程序员平均薪资可能的确稍微高了一点点,但是年薪百万真的是幸存者偏差了,真的极少数程序员(尤其是只凭技术的程序员)能做到这个地步。如果你拿我和小马哥去平均,那我还人均千万、人均上亿呢,对吧?

2. 发量代表水平?

之前很多同学看我都吐槽说:“你为什么还有头发,你个菜鸡!”
我觉得,如果发量代表水平的话,我应该比在座的大多数同学都要浓密才对。
所以有没有种可能,是因为太菜,需求做不出来,Bug 改不完,所以才经常熬夜加班,精神压力极大,导致头发熬没了呢?
咳咳,别骂了别骂了,是我本人了。

3. 感觉程序员的手速都很快?

我觉得这个要分情况。拿我自己来说,我一般在 2 种情况下敲键盘比较快:
  1. 要么是在写贼简单的、不用动脑的重复代码(比如增删改查);
  2. 要么就是在回消息聊天。
所以有没有种可能,程序员的手速是通过摸鱼、怼产品、重复劳动、或者是平时打游戏打得多而提升的呢?
不过毕竟要经常敲代码,所以程序员的手速通常都不慢。

4. 程序员都是 996 吗?

我记得我之前不怎么加班的时候,就有人经常问我:你为什么不加班?
这个问题直接把我问懵了,好像我真的觉得自己应该加班,不加班是罪过。
我想说其实程序员也是有个人时间的。至于为什么程序员经常会加班呢?我觉得主要是以下几点:
  1. 首先是我们的程序代码是越写越多的,写得越多,系统越复杂,Bug 就越多。就拿我自己来说,刚做项目一周的时候,就那几行代码,Bug 也好查。但现在项目做了一年多了,用户也多了,很多陈年老 Bug 慢慢被发现了,而且经常牵一发而动全身。
  2. 第 2 点是程序员对排期的错误估算。我发现一个有趣的事情,需求是做不完的,你需求做得越快,新需求来得就越快;而且我们很多时候只考虑了做需求的时间,没有考虑改 Bug 的时间。但现实却有可能是改 Bug 的时间比开发的时间还要长。所以可能的话,还是别把需求排太满,预留一部分时间改 Bug。
  3. 当然还有很多其他因素,比如不会拒绝需求、不会跟产品 Battle、缺乏经验、写的系统不利于维护、或者身边的人都很卷你不好意思走等等。总之加班是由很多方面决定的。

5. 重启可以解决 Bug?!

对不起,我觉得这个并不是误解。。。这是真的!
以前我遇到过一些莫名其妙的 Bug 就死扣到底,但后来我就学聪明了,先重启一下编辑器、重启下软件,说不定就好了。因为 Bug 不一定是你造成的,可能真的是编辑器的 Bug。
大家就理解为电脑死机后,重启一下就又能开机了。原理应该是差不多的(将程序置于初始化状态)?

同行的误解

1. 算法和数据结构不重要?

有很多程序员是这么认为的,觉得工作中也用不到自己写算法,用个现成的函数、类库,或者上网抄一段就能搞定对吧?
但事实上,有些时候并不是你用不到算法,而是你缺了一些知识,根本想不到可以用算法去更好地解决问题。比如同样是存储和查找 20 万 个单词,没学过算法,用数组也能存、也能顺序查找,但是时间空间都存在浪费;那如果你知道前缀树或者其他数据结构,就可以大幅节省存储空间、提升查找效率。
我觉得自己学的知识越多,反而会越觉得基础才是最重要的。因为上层的技术不断发展、不断迭代和淘汰,但是底层原理、编程思想、基本功一般是不会变的。
当然也有同学问是不是前端就不用学数据结构和算法了呢?只能这么说,这一块在前端面试的比重的确不大,时间紧大家可以优先以技术框架学习为主,但是有空了还是要好好补一下基础。

2. 写程序应当追求完美?

我觉得这句话对一半,应该是追求 特定条件下 的最优解。
没有工作经验的同学会觉得程序就要完美,看见你程序有 Bug 了、写得不好看了、前人留屎山代码了,多少都会嫌弃。
其实真实工作下,我们没办法把程序写到完美,往往是空间和时间的权衡,比如 HashMap ,用内存换查找效率;或者人力成本和资源的权衡,比如花钱买现成的服务,节省开发时间;再或者是需求和实现的权衡,比如天天都让你做紧急需求,你还有空去优化架构、有空去追求极致的性能么?对不对,代码屎山就是这么来的。
所以这里就要求我们在写代码之前先做调研设计,多思考几种方案,权衡利弊,然后从中选择相对的最优解。同时也希望对别人写的代码多一些包容,把你放在别人的场景下,你未必能做得更好。

3. 代码量等于水平?

在学校的时候,我的确是这么认为的,当时经常跟舍友吹牛逼说我今天又写了多少行代码。但现在仔细回想一下,绝大多数可能都是复制粘贴、增删改查。
进了公司后我才发现,真正写代码的时间很少,像前期的需求评审、跟产品 Battle、方案设计、技术选型、沟通、资源协调更重要,也往往更花时间。在你想清楚要不要写代码、怎么写代码后,再去写代码,那时你会发现只不过是一种翻译工具而已。
而且就我观察下来,一般职级越高、工资越高、能力越强的人,写的代码反而越少。并不是他们写不出来,而是他们已经写得太多了、已经有了很多经验、更懂得去利用工具来脱离重复的工作,比如写个自动化脚本、重复代码生成工具之类的。
还有一方面原因是公司需要他们去做更重要的事情,从底层的执行慢慢转变为上层的决策,比如刚刚说的方案设计、或者系统架构。大佬定了个框架,写个 Demo,剩下的就交给我们小码农对吧。
所以代码量是无法真正权衡水平的,在做需求时多去思考更合理的解决方案、写代码时尽量避免重复劳动,才是我们要追求的。

4. 技术决定程序员的水平?

我觉得这个误解和上一个很像啊,如果你觉得程序员的工作就是写代码,写得多、写得快就是强者,那你就真的把自己当成码农了。
我觉得衡量优秀程序员的标准绝不止有技术,比如问题的解决能力,同一件事,你完成得比别人快比别人好;比如业务理解能力,给你一个需求,很快就能判断它是否合理、梳理清楚流程;比如沟通能力,你能够很好地维护用户、组员、同事、跨部门合作者的关系,从杂乱的消息中提取出有效信息;比如产品思维,你能给出更好的建议来推动产品发展;比如管理能力,善于组织成员、推动团队发展;再比如分享表达能力,能把自己学会的东西清晰地讲出来、让别人也能理解,我觉得是一件很酷的事情。
- EOF -
推荐阅读点击标题可跳转
关注「程序员的那些事」加星标,不错过圈内事
点赞和在看就是最大的支持❤️
继续阅读
阅读原文