大家好,我是鱼皮。在很多人眼里,程序员是一类高薪、“高危” 的职业。他们穿着格子衫、顶着一碗超帅的光头,能修电脑、能黑网站、简直无所不能。。。
但直到我自己当上程序员,才发现其实很多都是对程序员的误解。除了外行的误解外,还有很多来自于程序员同行的误解。今天这篇文章呢,我想结合自己的学习 / 工作经历和感悟,分享下我对这些误解的看法,当然也希望给程序员朋友们一些实质性的建议和启发。
作为达不到平均的一方,我觉得这句话伤害不大,侮辱性极强。
程序员平均薪资可能的确稍微高了一点点,但是年薪百万真的是幸存者偏差了,真的极少数程序员(尤其是只凭技术的程序员)能做到这个地步。如果你拿我和小马哥去平均,那我还人均千万、人均上亿呢对吧?
之前很多同学看我视频都吐槽说:“你为什么还有头发,你个菜鸡!”
我觉得这句话伤害不大,侮辱性极强,如果发量代表水平的话我应该比在座的大多数同学都要浓密才对。
所以有没有种可能,是因为太菜,需求做不出来、Bug 改不完,所以才经常熬夜加班、精神压力极大,导致头发熬没了呢?
咳咳,别骂了别骂了,是我本人了。
我觉得这个要分情况。拿我自己来说,我一般在 2 种情况下敲键盘比较快:
所以有没有种可能,程序员的手速是通过摸鱼、怼产品、重复劳动、或者是平时打游戏打得多而提升的呢?
不过毕竟要经常敲代码,所以程序员的手速通常都不慢。
我记得我之前不怎么加班的时候,就有同学在我视频下评论:你为什么不加班?
这个问题直接把我问懵了,好像我真的觉得自己应该加班,不加班是罪过。
我想说其实程序员也是有个人时间的。至于为什么程序员经常会加班呢?我觉得主要是以下几点:
对不起,我觉得这个并不是误解。。这是真的!
以前我遇到过一些莫名其妙的 Bug 就死扣到底,但后来我就学聪明了,先重启一下编辑器、重启下软件,说不定就好了。因为 Bug 不一定是你造成的,可能真的是编辑器的 Bug。
大家就理解为电脑死机后,重启一下就又能开机了。原理应该是差不多的(将程序置于初始化状态)?
有很多程序员是这么认为的,觉得工作中也用不到自己写算法,用个现成的函数、类库,或者上网抄一段就能搞定对吧?
但事实上,有些时候并不是你用不到算法,而是你缺了一些知识,根本想不到可以用算法去更好地解决问题。比如同样是存储和查找 20 万 个单词,没学过算法,用数组也能存、也能顺序查找,但是时空间都存在浪费;那如果你知道前缀树或者其他数据结构,就可以大幅节省存储空间、提升查找效率。
我觉得自己学的知识越多,反而会越觉得基础才是最重要的。因为上层的技术不断发展、不断迭代和淘汰,但是底层原理、编程思想、基本功一般是不会变的。
当然也有同学问是不是前端就不用学数据结构和算法了呢?只能这么说,这一块在前端面试的比重的确不大,时间紧大家可以优先以技术框架学习为主,但是有空了还是要好好补一下基础。
我觉得这句话对一半,应该是追求 特定条件下 的最优解。
没有工作经验的同学会觉得程序就要完美、看见你程序有 bug 了、写的不好看了、前人留屎山代码了,多少都会嫌弃。
其实真实工作下,我们没办法把程序写到完美,往往是空间和时间的权衡,比如 HashMap
,用内存换查找效率;或者人力成本和资源的权衡,比如花钱买现成的服务、节省开发时间;再或者是需求和实现的权衡,比如天天都让你做紧急需求,你还有空去优化架构、有空去追求极致的性能么?对不对,代码屎山就是这么来的。
所以这里就要求我们在写代码之前先做调研设计,多思考几种方案、权衡利弊,然后从中选择相对的最优解。同时也希望对别人写的代码多一些包容,把你放在别人的场景下,你未必能做得更好。
在学校的时候,我的确是这么认为的,当时经常跟舍友吹牛逼说我今天又写了多少行代码。但现在仔细回想一下,绝大多数可能都是复制粘贴、增删改查。
进了公司后我才发现,真正写代码的时间很少,像前期的需求评审、跟产品 Battle 啊、方案设计、技术选型啊、沟通、资源协调更重要,也往往更花时间。在你想清楚要不要写代码、怎么写代码后,再去写代码,那时你会发现只不过是一种翻译工具而已。
而且就我观察下来,一般职级越高、工资越高、能力越强的人,写的代码反而越少。并不是他们写不出来,而是他们已经写的太多了、已经有了很多经验、更懂得去利用工具来脱离重复的工作,比如写个自动化脚本、重复代码生成工具之类的。
还有一方面原因是公司需要他们去做更重要的事情,从底层的执行慢慢转变为上层的决策,比如刚刚说的方案设计、或者系统架构。大佬定了个框架,写个 Demo,剩下的就交给我们小码农对吧。
所以代码量是无法真正权衡水平的,在做需求时多去思考更合理的解决方案、写代码时尽量避免重复劳动,才是我们要追求的,
我觉得这个误解和上一个很像啊,如果你觉得程序员的工作就是写代码,写的多、写得快就是强者,那你就真的把自己当成码农了。
我觉得衡量优秀程序员的标准绝不止有技术,比如问题的解决能力,同一件事,你完成的比别人快比别人好;比如业务理解能力,给你一个需求,很快就能判断它是否合理、梳理清楚流程;比如沟通能力,你能够很好地维护用户、组员、同事、跨部门合作者的关系,从杂乱的消息中提取出有效信息;比如产品思维,你能给出更好的建议来推动产品发展;比如管理能力,善于组织成员、推动团队发展。再比如分享表达能力,能把自己学会的东西清晰地讲出来、让别人也能理解,我觉得很酷的事情,也是我一直做分享的原因。