程序员的五个阶段
从懵懂、会用、会看、会写到会想,程序员的成长大致要跨过这五个阶段。多数人停在“会用”,而更要紧的是,这些阶段会倒退。
- #thoughts
- #career
- #engineering
懵懂
刚开始学习编程,或者刚接触一种新技术的时候,会有种雾里看花的感觉,似懂非懂,就算记住了也不会用。要突破这个阶段,方法就是练习:通过各种项目让自己熟练起来,做到任何一个不太难的业务需求都能快速想到解决方案,并且动手实现出来。
会用
通过 Google、Stack Overflow、各种专业社区和文章,自己慢慢会发现一个更大的世界,并对这个世界里的各种技术产生兴趣。理解一个简单的新技术不再是自己的瓶颈,能驾驭的工具、组件、库、设计模式、算法和语言越来越多,也会主动去扩大自己的视野,试着在项目里用上各种新东西。引入一项新技术开始变成一件让人非常兴奋的事,最终能做到快速地吸收并理解一项新技术的用法,也知道什么时候该用什么技术。
会看
出于某些机缘,比如遇到了一个比较难以解决的 bug,开始深入阅读某种日常用到的技术的内部原理,从而发现更多自己所不知道的东西,并开始对各种技术背后的实现产生兴趣。慢慢建立起一个相对完备的知识体系,对某个领域的所有相关技术都能如数家珍地讲出来。也是在这个阶段,第一次开始有一种“时间不够用”的无力感,面对浩如繁星的开源/闭源代码量深深感觉到自己的渺小,越来越不愿意去轻易重造一个轮子,真正懂得怎么去评估一个开源技术的好坏。
会写
突然有一天,在钻研某种技术的时候发现一种突破性的思路,并且通过谨慎调研后发现确实有实现出来的必要,于是就将大量的时间投入到实现理想的过程中去,并且主动用各种技术来提升自己的工作效率,最终拿出来的成果确实如预计一般站在了业界的最前沿。
这里的“会写”,和简历上随手写下的“精通 xxx”不是一回事,指的是能拿出真正站在业界最前沿的东西。
会想
当自己已经站在了业界这个领域的最前沿,除了继续动手实现最核心的代码,还找到了未来三年的发展方向,并且第一次勇敢地自我否定,抛弃自己原先的想法。
总结
如果长期不写代码一定会让自己的水平下降,如果长期只做当前级别以下的事情也可能会退化。绝对不是说“会想”了就可以每天冥想、指点江山,自己不动手就很容易被后来者超越并且开始固步自封,从“会想”变成自以为是,退化到之前的阶段。
我认为自己目前一直停留在“会写”的阶段,甚至有可能已经退化到了“会看”阶段,距离“会想”还非常的远。
非常多的程序员停留在“会用”的阶段,满足于能够解决问题,还没能看得更深更远。在“会用”的阶段很容易产生一种无所不能的错觉,觉得已经没什么功能实现不了,开始重复造一些并不怎么好的轮子,造轮子之前甚至都没有去仔细研究过业界最先进的技术实现细节,如果一直处在这种错觉之中,基本上就很难再成长了。其实这种现象在大公司中也常出现,很多程序员仅止步于写代码的初级阶段,还是非常可惜的。
在进入“会看”之后会有一段非常长的痛苦期,这段时间里会非常感觉一个人的渺小,既没有时间去穷尽所有技术细节,也没有能力去找到前人没有尝试过的突破性创新,简直是一种煎熬。有不少业界大牛就停留在这个阶段,迷失在各种细节之中,成为一个知识丰富但缺乏创造力的人。