如何成为程序员中的顶尖高手?

如何成为程序员中的顶尖高手?

昨天看到知乎上的一个很有意思的问题:马云在创业初期是如何招聘到多隆这样的牛人的?

下面的回答观点比较一致,

因为是事成就人
而不是人成就事

深以为然。

Linus在写Linux的时候,只是赫尔辛基大学的一个普通学生,他是写了Linux才名满天下的,不是先名满天下才写的Linux(当然Git是另外一个故事了):

Linus宣告Linux诞生的帖子

好笑的是,他发出这个帖子的时候似乎不是特别有信心,特别强调“只是一个爱好,不会像GNU那样庞大和专业”。当然,之后的事情我们都知道了,时至今日,这个星球上96%的Web服务器、79%的智能手机上面跑的就是他的这个“爱好”(数据源自Wiki)。

这个帖子现在还可以看到,戳这里

换句话说,顶尖高手是做了一些常人做不到的事情,在这个过程中磨练成了顶尖高手;不是先成为顶尖高手,才做了常人做不到的事情(张无忌不算)。在成为顶尖高手之前,他们很可能和你我一样,都是茫茫人海中的无名之辈——毕竟,谁一生下来就什么都会呢。

作为一个水货程序员,关于「如何成为程序员中的顶尖高手」这么一个吓死人的话题,我有些想法斗胆分享一下。

能力只有在解决问题的时候才能提高,解决的问题越多越难,能力的提高就越快。

如果在这个过程中还有额外的“学习”和“思考”的加成,那么能力的提高会更加迅速。

在内网的标签上,他被称为神,这不是恭维,在所有工程师眼中,他就是个神。多隆做事一个人能顶一个团队,比如说写一个文件系统,别人很可能是一个项目组,甚至一个公司在做,而他从头到尾都是一个人,在很短的时间内就完成了。从03年到07年,淘宝搜索引擎就是他一个人在写,一个人在维护,而且这还不是他全部的工作,另外他还做了其他很多事情。

用脚趾头想都能想到多隆在后面解决了多少问题。这个回答提到:

几个月前他在实现一个复杂的功能,有一天他一来公司,就跟我说“昨晚凌晨四点想到了实现方式,现在来试试看”

如果你没有为一个问题苦思冥想夜不能寐,不要说自己曾经努力过。

很多人听到这里,会立刻激动地表示,自己的工作非常机械无聊,就是每天重复地编写业务代码,没有机会接触和解决高深的问题——比如高并发大数据微服务。

如果你说你的工作中没有机会接触和解决问题,think twice。我说的“问题”不仅仅包括外人看上去非常光鲜亮丽的“问题”——千万用户亿万成交,还包括所有你在日常工作中遇到的问题,比如:

  • 你发现你的开发过程中总是需要重复复制-稍微改吧改吧-粘贴这个过程
    • 你有没有去尝试阅读并实践《重构》?
    • 你有没有尝试去自己发布一个公用的库?JCenter/Maven Central都是免费的。
  • 你发现你每次修改完代码要抄起Postman点来点去
    • 你有没有尝试去编写一个集成测试,代替手工的劳动?
  • 你发现你碰到了很多奇奇怪怪你搞不明白的问题,只能一次次地尝试每个搜索结果中提到的解决方案,期望其中的某一个好使。
    • 你有没有尝试过去阅读相关的书籍,查阅相关文档?

如果你还嫌不够,这个星球上大把的开源项目,数不清的问题等你去解决,你去看过没有?试着去解决没有?(扩展阅读:《跳出弱鸡循环2》

上述的所有问题,在解决过程中都有无数的知识可供学习,你愿意去做么?在我的观察中,绝大多数人是懒得去查看和解决这些问题的,能用自己最舒服的方式(甚至宁愿加班)完成工作,就万事大吉啦。

虽然是一个水货程序员,我仍然不止一次地感受到“解决问题”对个人能力带来的巨大提升。

  • 许多年前在淘宝的时候,在解决一个内部报表系统的问题的时候,学习了ANTLR和多线程的诸多原理和实践,直到现在都受用不尽。
  • 在陆陆续续解决Maven的包冲突的过程中,深入学习了Maven的各种知识。
  • 加入远程团队之后,在解决团队问题的过程中,锻炼出了各种Git的骚操作的能力。
  • 在升级Java 9/10/11的过程中,深入学习了JPMS。
  • 在解决OOM的过程中,学习了JVM和GC的知识。

所以,如果你的工作一帆风顺,没有或很少遇到问题,就是一个非常危险的信号——这代表你的能力正在原地踏步甚至退步。技术是一个用进废退的过程。

没有遇到问题?那就找问题去解决啊:去体验新技术,去找开源项目修bug,去升级依赖包,去升级JDK,去胡作非为,去作死。

有一点是肯定的:如果没有问题可以解决,是成不了顶尖高手的。

好了,你今天遇到的问题,是打算正面刚,还是认怂绕道走?


扩展阅读:

让我们一起来解决问题吧!:)

发布于 2019-09-20

文章被以下专栏收录