码农,为什么你工作10年了还是码农?

2019-07-07  本文已影响0人  SunnyZhang的IT世界
臧克家在其诗中说:“有的人活着,他已经死了;有的人死了,他还活着。” 在IT行业有这么一种现象,有的人工作十几年了,仍然是一线程序员,每天还是做着编码和解决Bug的工作。在技术积累上与工作两三年的程序员毫无差异。而有的人工作才三五年,却已经具备架构师的能力。 图1 勤奋工作

同样为人,却有非常大的差异。有些人确定差异在智商,在家境,在机遇。但是如果我们分析一下,前面这些隐私这的能够觉得一个人吗?可能会有影响,但并非绝对吧。我们看看清华北大的生源就清楚了,来自贫困地区和贫困家庭的生源占了不小的比例。

个体的能力差异在哪

那二者的差异在哪里?本号以为差异在思考问题的方式。思维决定行为,行为决定结果。正是因为他们的思维方式的差异,才导致了结果有如此之大的差异。先看看普通人的思维方式,他们通常处于焦虑和没有深度思考的状态。记得刚毕业的时候,大家讨论的最多的问题是程序员30后怎么办?而今天大家讨论的最多的问题是程序员35岁之后该怎么办。他们只知道焦虑,却不考虑问题的根源和解决问题的方法。

如果我们深入思考一下就会发现。诚然,在行业内可能确实存在一些公司有年龄歧视的问题。但是,他们歧视的本质其实并非年龄,而是能力,或者说你所具备能力的不足。举个极端的例子,你觉得吴恩达或者陆奇会失业吗?你可能会反驳道:“那些人都是行业领袖,怎么会失业呢,我们普通人怎么可能达到那个层次!”但是我们要知道,能养得起吴恩达和陆奇的公司也不多。世界上还有数以万计的普通中小公司存在。结论很清楚,大部分IT企业在人才选用方面首先要考虑的问题肯定是能力问题,也就是其能力能否胜任其岗位要求。当然,这个能力要求自然是要与其年龄有一定的匹配度,一个工作十几年的人还只会基本的开发和调试,相信大部分公司都不会考虑。

思维方式是根因,然后就是行动了。有些人也在非常刻苦的学习,但收效甚微。有些人天天在加班,工作时间比其他人每天多出两三个小时。但是,个人能力方面并没有明显的优势,甚至还不如某些不加班的同时,绩效方便也是不尽如人意。因此,这里说的行动并不是简单的努力,而是有方法的努力。一万小时是成功的必要条件,但并不是充分必要条件。

图2 勤奋工作

有些人觉得可能是智商的原因吧。其实本号认为智商并非最主要的原因。有些人可能不以为然,觉得人的智商是有差距的。不可能每个人都能成为吴恩达和李飞飞这样的人。智商有差距不假,但智商的差距并不能导致结果差异如此之大。正如安德斯·艾利克森在《刻意练习》中所描述的那样,通过有方法有目的的练习(刻意练习),一个普通人记忆随机数字的能力可以从七八位提升到数百位。估计对于记忆数百位随机数字的事情,大多数人的第一反应是觉得不可能,或者是天才。实际试验的结果并不是这样,而是告诉我们,通过刻意的联系就可以做到。作者统计了小提琴等普通人认为需要天分领域的数据发现,越是优秀的人在相关领域投入的练习时间越多。也就是说,天赋的影响因素有多大不清楚,但即使你是天才,也是需要投入大量练习才行的。

构建自己的知识体系

如果大家认可前面的内容,那就继续后面的内容。本号以为作为技术人最主要的是构建自己的知识体系(大厦)。这里的知识体系不仅仅是技术知识,还包括很多非技术知识和能力。第一,要将自己的专业知识构建成体系;也就是由点串成线,由线织成面,再由面构成体;第二则是要提升自己的可迁移的能力(更多细节请参考《远见》)。

我们先说可迁移的能力,比如解决问题的能力。大家觉得自己这方面的能力如何?我们举一个简单的例子,假设你所维护的系统代码很大,有一个Bug是内存泄漏的Bug。泄漏的量大概在每天6-9MB的样子,业务是在线业务。现在领导让你尽快(比如3天内)解决这个问题,你怎么解决?

如果对于一个解决问题不佳的程序员,可能就埋头开始干了。先用工具检测,然后走查代码,或者问同事。解决可能是3天到了,问题还没有任何头绪。

如果稍微有点经验的同学都比较清楚,内存泄漏问题解决难度是比较大的。虽然有一些内存泄漏检测工具,但对于复杂的系统这些工具有的时候很难起到作用。由于代码规模比较大,很难一下子定位内存泄漏的具体位置。因此,如果说尽快解决问题几乎是不太可能的事情。

如果我们再分析一下呢?每天泄漏6-9MB,似乎泄漏的量并不太大。然后再考虑一下,具体的业务是否为7*24小时的。因为大部分业务其实晚上,特别是凌晨后基本上没什么人访问。那我们是不是可以每个一周在凌晨三四点重启一下业务就行?这时,它就可以调查这些事情,然后跟领导讨论解决方案的可行性。如果这种方式可以,那他就可以不用着急了,可以先写一个重启脚本把问题解决,然后再分析内存泄漏的根因。

所以说,有的时候问题并不是你看到的问题,这种能力是很重要的。

再回到技术知识体系上来。有些同学工作十几年了,网络相关的代码也写了不少。但仅仅停留在socket接口的调用,却不知道什么是select和epoll。这说明什么问题?这部分很清楚,我们就不介绍了。

为此,本号希望构建一个关于计算机后端技术的知识体系,这样一方面可以方便大家梳理自己的知识体系,另外一方面也是为了更加方便的查漏补缺,了解自己知识的不足。整个知识体系的总图如下图所示。由于篇幅的问题,这里面只是最主要的内容,点击里面的超级链接(参考图中 数据结构与算法 后面的符号)可以进入下一级脑图。最终每个知识点会有一篇文章详细的介绍相关内容。

图3 知识体系
现在您看到的仅仅是初版,后续我们会不断的充实完善。在这个知识大厦中并没有非常高深的知识,而大多数都是非常基础的知识,比如算法、操作系统、数据库和网络等等。但是本号期望的是能够将这些普通的知识构建成为一个网络,并能够将这些知识用于实践。孔子说:“学而时习之,不亦说乎”,是啊,如果能够学习这些知识,并在自己日常开发实践中使用,那将是非常开心的事情

点击链接需要原图,本文中脑图原图获取方法,请关注本号后私信: 知识体系

上一篇下一篇

猜你喜欢

热点阅读