最近看到阮一峰的《全能程序员 vs 特长程序员》提到观点,结合自身经历,发表一点不同的看法。
-
“软件行业"全能程序员"的出路,明显不如"特长程序员"”
-
"全能程序员"在这个行业是不受待见的,被视为"万金油"。
什么是全能程序员?全能程序员怎么来的?
一个程序员,如果长期在某一领域工作,可能会发现原有的知识不够用,这时候需要学习新的知识,恰好你乐意去学习,你也能挤出活创造时间和机会,然后你就去学习并掌握了,你运用学习到知识,在使用的过程中你逐步发现他们的原理,了解新知识与旧知识的联系和异同,久而久之,你掌握的新知识越来越多,能解决的问题越来越多,虽然随着时间的迁移许多新知识也变成了旧知识,但是在别人眼里,你成了他们眼中各方面问题都能解决的“全能程序员”。所以:
-
全能程序员的定义应该是:在某一领域,能够解决大多数别人不能解决问题,而不是看似都懂实际则浅尝辄止。
-
全能程序员是怎么来的:全能程序员是遇到问题后不断追根究底,在别人已经停止研究情况下,仍然不断学习和探索,直到到最终解决问题或者找到问题的最优解,在这个过程中不断积累成长起来的。
全能程序员的优势
-
成为全能程序员是很多职位的最佳途径,如:CTO, devops, 架构师
-
更好的解决问题的办法:如果将程序员比做木工,在全能手里,永远不止有锤子,全能程序员不可能只会干钉钉子的活,他们抛光会用狍子,打眼会用锉子,电锯和电转也是最先掌握的
-
最快找到问题的解决办法:他们清楚整件事情的来龙去脉和原理,找问题不用开IDE,在心里就能完成DEBUG和需求分析,开IDE只是为了验证和最终解决问题
-
最高效的解决问题方式:他们从架构上,组织上找到最有效率的协作方法,他们明白每多一道沟通就是浪费
-
最节省资源:好比电脑CPU没在空耗,老板付一份工资找了一个需要几个人干的活
全能程序员的缺陷
-
个人的精力是有限的,你不能一个解决所有问题,你仍然需要一个靠谱的团队,电脑可以不休息人需要休息
-
思维切换需要时间,电脑可以多任务人往往不可以
-
你个人的能力会被其他人平均,老板可能愿意付你2倍工资,往往没法付你10倍工资,即使你是10倍程序员
-
你需要付出的比别人多,除非你乐意,否则没法坚持
全能程序员/全能非程序员的现实例子
全能非程序员的例子:
- 毛泽东不仅会打仗,诗的气势普通人恐怕也很难达到;
- 本杰明富兰克林不仅能当好总统还会发明创造;
- 达芬奇不仅能画好蛋;
- 马斯克创Paypal、造车、造火箭和造星链。。。
全能程序员的例子:
- 几乎所有编程语言发明者都精通其他一门到多门语言
- 合格的devops或者架构师都精通一门语言+数据库+非关系存储+linux+分布式
事情的本质
- Python、C++是全能的,PHP、Go、R、Lisp是特长的,他们都是成功的
- 罗技、格力专注成功,联想、华为、小米、通用不那么专注也很成功
- 马云不会编程能带领阿里成为技术性领先的公司,马化腾、王兴、张小龙搞技术的也不会因此管理和产品能力就差一点
总结:全能和特长本不矛盾,各阶段选取合理的发展方向。作为技术人学习好英语,掌握几门编程语言、几种数据库、学习下devops,学习管理、产品和运营,先成为一个领域专家,然后架构师,CTO,再自己创立公司,仍然不失为一条明确的路径。