本文关注的问题是程序员的水平究竟应该按照什么样的不同层级而逐渐提高?或者说,在学习编程的过程中,每一个阶段究竟应当设定什么样的目标才比较合理?本文的内容主要借鉴了周伟明先生的专栏文章《程序员的十层楼》[86]。注意本文讨论的程序员并非指专门写代码的人员,理解为信息技术领域的人员更为合适。
如果把程序员编程水平的修炼比作游戏中的“打怪升级之旅”,那么程序员的水平就会随着不停的“打怪”而不断升级。程序员的水平有哪些等级呢?哈哈,如果人为地将程序员的水平划分为不同的等级,这是非常难的事情,也容易引起争议。不妨用程序员的不同境界来描述,那就更容易让人理解和接受一些。如图 4‑29所示,程序员的成长过程好比一层一层往上不断爬楼的过程,欲穷千里目,更上一层楼,需要坚持不懈地攀登。接下来,让我们看看如何攀登上顶级程序员的最高境界吧。
图 4‑29 顶级程序员的成长之路
1. 第1层 新手
这第1层楼好比平地层,来到平地层是不费吹灰之力的。只要你对编程有兴趣,掌握计算机的基本操作,了解计算机专业的一些基础知识,掌握一两门编程语言,比如C++或者Java等。那么恭喜你,你已经开启了编程修仙的爬楼之旅。
处在这一层的人可以称为新手或者入门者。新手已经能够写点像模像样的代码,心里满满的成就感,脸上挂满了自信。新手往往是在项目总监手下当小兵,听命于人的日子过久了,多多少少总是不甘心的,哪个新手不想往上爬、不想更上一层楼呢? 于是,勇往直前冲向第2层。
2. 第2层 大侠
从第1层爬到第2层相对后面更高的楼层来说,也不算太辛苦。大部分人经过2~3年的努力,都可以爬到第2层。这一层的人,可称为大侠。大侠们的江湖地位明显提升,由于能够随心所欲地写些代码,颇受人尊敬,下面“小兵”也有三五个,出去“打个怪”,再也不用像新手那样单打独斗了。大侠们虽然有些功力,但大部分还是知道自己功力有限,做一些大的软件、实现非常复杂的程序功能还是会遇到难题而磕磕绊绊。所以,大侠还是希望有朝一日能够功力猛进,自己做点大家伙出来,在某个小领域有一席之地,成为所谓的牛人。
大侠要成长为牛人,则必须由第2层爬到第3层。
3. 第3层 牛人
大侠要成为牛人,需要花费的心血可不是一点点,要学的东西太多,比如理解编译器的原理和实现机制,了解操作系统中的内部机制(如内存管理、进程和线程的管理机制),了解处理器的基础知识和代码优化的方法。此外,还需要更深入地学习更多的数据结构与算法,掌握更深入的测试和调试知识以及质量管理和控制的方法,对各种设计方法有更好的理解等。
除了上面说的知识外,大侠们还需要去学习各种经验和技巧。经过此番用心修炼和若干项目的实践,大侠就变成了牛人,能够非常熟练地完成小型或中型项目。
变成牛人意味着地位进一步提升,在圈中已经有一定的知名度。牛人的下一步是要向第4层大牛攀爬。
4. 第4层 大牛
从第3层爬到第4层比前面爬的那几层费劲得多,要成为大牛的话,你必须要能做牛人们做不了的事情,解决牛人们解决不了问题。比如牛人们通常都写不出一个全新的操作系统,也写不出编译器,不懂得TCP/IP协议的底层实现,如果你有能力将其中的任何一个实现得像模像样的话,那么你就从牛人升级为“大牛”了。
要成为“大牛”并不是一件简单的事情,需要付出比牛人们多得多的努力。一般来说,至少要看过200~400本左右的专业书籍并好好掌握它;除此之外,还得经常关注顶级会议、顶级期刊、网络媒体上的各种最新文献及技术。
达到大牛这个级别,意味着你已经爬到了程序员这个圈层的中间层,在编程界已经具有相当资深水平,已经能够独当一面,是公司的技术核心骨干了。
新手、大侠、牛人、大牛这四层的上面是什么呢?下面就来看看第5层。
5. 第5层 专家
如果只懂一些编程的技巧,对一个程序员来说显然是不够的。当解决一个复杂的问题时,很多时候不是写不出代码,而是搞不清楚这个问题背后的原理,这就涉及到建模问题,或者用计算机专业的术语来说就是算法的问题或者“计算”的问题。要想成为一名顶级程序员,如果仅仅只关心编程技巧是不够的。当程序员高手过招时,数学、物理、哲学等理论 层面的问题往往是区分一个程序员功力高低的关键。这玩意就好比是武学中的内功心法,威力无穷。也就是说,程序员基础理论的功底是决定程序员能否进入到这一层的关键。专家级别的程序员理论功底深厚而全面,在算法或者“计算”层面能够做到了如指掌、运用自如。直白点说,专家级别的程序员需要做些基础研究。所谓的基础研究,最主要的内容就是研究非数值“计算”。非数值计算涉及的领域甚广,不仅时下火热的多核计算、云计算等属于非数值计算范畴,就是软件需求、设计、测试、调试、评估、质量控制、软件工程等本质上也属于非数值计算的范畴,甚至芯片硬件设计也同样牵涉到非数值计算。如果一个程序员还没有真正领悟“计算”二字的神圣含义,那么恐怕就没有机会进爬到专家层来。
前面讲到的新手、大侠、牛人、大牛、专家这5个层的程序员的共同点是能对已有的编程技巧或算法运用自如。这好比练功夫时,把人家的招式和内功心法都能够学会并且能够使出来。显然,仅仅做到这些是不够的,否则编程领域就不能产生新的东西、不能够快速发展了。接下来的第6层就涉及到创新的问题。
如果想了解顶级程序员境界的第6~10层,敬请关注本公众号的下一篇文章《顶级程序员的成长之路2》。
关于人工智能中编程能力和技能训练的更多介绍,可以购买《人工智能怎么学》进一步阅读。
图书购买方式
京东:https://item.jd.com/13395339.html
当当:http://product.dangdang.com/29469230.html
天猫:https://detail.tmall.com/item_o.htm?id=687374654836
为了让图书惠及更多的读者,为更多想学习人工智能的人提供帮助,经过向出版社申请,对图书《人工智能怎么学》的部分内容进行改编和连载。图书《人工智能怎么学》的全部内容包含了初级入门、中阶提高以及高级进阶三个级别的内容。连载的内容主要是初级入门级别,适合想对人工智能进行快速和高效入门的读者,对于已有一定的人工智能学习基础,希望进一步进阶或提高的读者,则需要购买图书《人工智能怎么学》,学习中阶提高以及高级进阶的内容。此外,对于学习人工智能感兴趣的读者,也可以加入知识星球《人工智能怎么学》,知识星球是一个构建学习社群的平台,通过加入《人工智能怎么学》的社群,你将获得更多的学习资料和课程信息。
与作者互动和了解更多信息
想跟作者一起学习人工智能和互动,你可以加入如下社群:
知识星球:https://t.zsxq.com/0aLkVg0os
QQ群:600587177
想了解更多关于人工智能学习及实践的内容,请关注如下媒体:
官方网站:https://bigdatamininglab.github.io
官方微信公众号:人工智能怎么学(可扫描下方二维码或者微信搜索“人工智能怎么学”添加关注)
CSDN:https://blog.csdn.net/audyxiao001
参考文献
- Robert C. Martin. 代码整洁之道(第2版)[M]. 韩磊, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2020.
- Herb Sutter, Andrei Alexandrescu. C++编程规范:101条规则、准则与最佳实践[M]. 刘基诚, 译. 北京: 人民邮电出版社, 2016.
- 杨冠宝. 阿里巴巴Java开发手册[M]. 北京: 电子工业出版社, 2020.
- James Gosling et al. The Java Language Specification:Java SE 8 Edition [M]. Upper Saddle River: Addison-Wesley, 2014.
- 老九君. C++的发展简史[EB/OL]. https://www.cnblogs.com/ljxt/p/11636342.html, 2019-10-08.
- 翁惠玉. C++程序设计:思想与方法(第2版)[M]. 北京: 人民邮电出版社, 2012.
- 谭浩强. C++程序设计(第3版)[M]. 北京: 清华大学出版社, 2015.
- Siddhartha Rao. Sams Teach Yourself C++ in One Hour a Day (Eighth Edition) [M]. Boston: Pearson, 2017.
- Bjarne Stroustrup. Programming:Principles and Practice Using C++ (Second Edition) [M]. Crawfordsville: Pearson, 2014.
- Bjarne Stroustrup. C++语言设计和演化[M]. 裘宗燕, 译. 北京: 人民邮电出版社, 2020.
- Stephen Prata. C++ Primer Plus(中文第6版)[M]. 张海龙 等, 译. 北京: 人民邮电出版社, 2020.
- Stanley B. Lippman, Josée Lajoie, Barbara E. Moo. C++ Primer(中文第5版)[M]. 王刚 等, 译. 北京: 电子工业出版社, 2013.
- Stanley B. Lippman. Essential C++(中文版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2013.
- 侯捷. STL源码解析 [M]. 武汉: 华中科技大学出版社, 2015.
- Ivor Horton. C++标准模板库编程实战 [M]. 郭小虎 等, 译. 北京: 清华大学出版社, 2017.
- Brian W. Kernighan, Rob Pike. 程序设计实践 [M]. 裘宗燕, 译. 北京: 机械工业出版社, 2003.
- Bruce Eckel. C++编程思想(两卷合订本)[M]. 刘宗田 等, 译. 北京: 机械工业出版社, 2011.
- Scott Meyers. Effective C++:改善程序与设计的55个具体做法(第3版)[M]. 侯捷, 译. 北京: 电子工业出版社, 2011.
- Scott Meyers. More Effective C++:35个改善编程与设计的有效方法 [M]. 侯捷, 译. 北京: 电子工业出版社, 2020.
- Scott Meyers. Effective STL:50条有效使用STL的经验 [M]. 潘爱民 等, 译. 北京: 电子工业出版社, 2013.
- 陆文周. Qt 5开发及实例(第4版)[M]. 北京: 电子工业出版社, 2019.
- 王维波. Qt 5.9 C++开发指南 [M]. 北京: 人民邮电出版社, 2018.
- 冯振, 郭延宁, 吕跃勇. OpenCV 4快速入门 [M]. 北京: 电子工业出版社, 2020.
- ghscarecrow. Java的发展历程[EB/OL]. https://blog.csdn.net/ghscarecrow/article/details/82318636, 2018-09-02.
- JMCui. Java的发展历程[EB/OL]. https://www.cnblogs.com/jmcui/p/11796303.html, 2019-11-07.
- 明日科技. Java从入门到精通(第5版)[M]. 北京: 清华大学出版社, 2019.
- Kathy Sierra, Bert Bates. Head First Java (Second Edition) [M]. Sebastopol: O’Reilly, 2005.
- Bruce Eckel. Java编程思想(第4版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2007.
- Cay S. Horstmann. Java核心技术 卷I:基础知识(第11版)[M]. 林琪 等, 译. 北京: 机械工业出版社, 2019.
- Cay S. Horstmann. Java核心技术卷Ⅱ:高级特性(第11版)[M]. 陈昊鹏, 译. 北京: 机械工业出版社, 2020.
- Joshua Bloch. Effective Java(中文第3版)[M]. 俞黎敏, 译. 北京: 机械工业出版社, 2019.
- 周志明. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)[M]. 北京: 机械工业出版社, 2019.
- Brian Goetz. Java并发编程实战 [M]. 童云兰 译. 北京: 机械工业出版社, 2012.
- Kamalmeet Singh. Java设计模式及实践 [M]. 张小坤 等, 译. 北京: 机械工业出版社, 2013.
- 明日科技. Java Web从入门到精通(第3版)[M]. 北京: 清华大学出版社, 2019.
- 未来科技. HTML5+CSS3+JavaScript从入门到精通[M]. 北京: 中国水利水电出版社, 2017.
- Elisabeth Robson, Eric Freeman. Head First HTML与CSS(第2版)[M]. 徐阳 等, 译. 北京: 中国电力出版社, 2013.
- Adam Freeman. HTML5权威指南 [M]. 谢廷晟 等, 译. 北京: 人民邮电出版社, 2014.
- Eric A. Meyer, Estelle Weyl . CSS权威指南(第4版)[M]. 安道, 译. 北京: 中国电力出版社, 2019.
- David Flanagan. JavaScript权威指南(第7版)[M]. 李松峰, 译. 北京: 机械工业出版社, 2021.
- 许令波. 深入分析Java Web技术内幕(修订版)[M]. 北京: 电子工业出版社, 2014.
- Nicholas S. Williams. Java Web高级编程 [M]. 王肖峰, 译. 北京: 清华大学出版社, 2015.
- 孙卫琴. Tomcat与Java Web开发技术详解(第3版)[M]. 北京: 电子工业出版社, 2019.
- 郭霖. 第一行代码Android(第3版)[M]. 北京: 人民邮电出版社, 2020.
- 欧阳燊. Android Studio开发实战:从零基础到App上线(第2版)[M]. 北京: 清华大学出版社, 2018.
- Dmitry Jemerov, Svetlana Isakova. Kotlin实战 [M]. 覃宇 等, 译. 北京: 电子工业出版社, 2017.
- Kristin Marsicano, Brian Gardner, Bill Phillips, Chris Stewart. Android编程权威指南(第4版)[M]. 王明发, 译. 北京: 中国工信出版集团, 人民邮电出版社, 2021.
- 刘望舒. Android进阶之光(第2版)[M]. 北京: 电子工业出版社, 2021.
- 邓凡平. 深入理解Android: Java虚拟机ART [M]. 北京: 机械工业出版社, 2019.
- 任玉刚. Android开发艺术探索[M]. 北京: 电子工业出版社, 2015.
- 林学森. 深入理解Android内核设计思想(上、下册)(第2版)[M]. 北京: 人民邮电出版社, 2017.
- 何红辉, 关爱民. Android 源码设计模式解析与实战(第2版)[M]. 北京: 人民邮电出版社, 2017.
- Christian Keur, Aaron Hillegass. iOS编程(第6版)[M]. 王风全, 译. 武汉: 华中科技大学出版社, 2019.
- 张益珲. Swift 4从零到精通iOS开发[M]. 北京: 清华大学出版社, 2019.
- Aaron Hillegass, Mikey Ward. Objective-C编程(第2版)[M]. 王蕾 等, 译. 武汉: 华中科技大学出版社, 2015.
- Matthew Mathias, John Gallagher. Swift编程权威指南(第2版)[M]. 陈晓亮, 译. 北京: 人民邮电出版社, 2017.
- Kazuki Sakamoto, Tomohiko Furumoto. Objective-C高级编程:iOS与OS X多线程和内存管理[M]. 黎华, 译. 北京: 人民邮电出版社, 2013.
- Erica Sadun. iOS Auto Layout开发秘籍(第2版)[M]. 孟立标, 译. 北京: 清华大学出版社, 2015.
- 珲少. iOS性能优化实战[M]. 北京: 电子工业出版社, 2019.
- 罗巍. iOS应用逆向与安全之道[M]. 北京: 机械工业出版社, 2020.
- Gaurav Vaish. 高性能iOS应用开发[M]. 梁士兴 等, 译. 北京: 人民邮电出版社, 2017.
- 刘浩. MATLAB R2020a完全自学一本通 [M]. 北京: 电子工业出版社, 2020.
- 天工在线. MATLAB 2020从入门到精通 [M]. 北京: 中国水利水电出版社, 2020.
- 苗志宏, 马金强. MATLAB面向对象程序设计[M]. 北京: 电子工业出版社, 2014.
- 徐潇, 李远 . MATLAB面向对象编程——从入门到设计模式(第2版)[M]. 北京: 北京航空航天大学出版社, 2017.
- 王文峰 等. MATLAB计算机视觉与机器认知[M]. 北京: 北京航空航天大学, 2017.
- 杨淑莹, 郑清春. 模式识别与智能计算——MATLAB技术实现(第4版)[M]. 北京: 电子工业版社, 2019.
- Eric Matthes. Python编程:从入门到实践(第2版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2020.
- Magnus Lie Hetland. Python基础教程(第3版)[M]. 袁国忠, 译. 北京: 人民邮电出版社, 2018.
- Luciano Ramalho. 流畅的Python [M]. 安道 等, 译. 北京: 人民邮电出版社, 2017.
- Brett Slatkin. Effective Python:编写高质量Python代码的90个有效方法(第2版)[M]. 爱飞翔, 译. 北京: 机械工业出版社, 2021.
- Jan Erik Solem. Python计算机视觉编程[M]. 朱文涛 等, 译. 北京: 人民邮电出版社, 2014.
- Andreas C. Müller. Python机器学习基础教程[M]. 张亮, 译. 北京: 人民邮电出版社, 2018.
- 魏坤. Julia语言程序设计[M]. 北京: 机械工业出版社, 2018.
- 郝林. Julia编程基础(第2版)[M]. 北京: 人民邮电出版社, 2020.
- Ben Lauwens, Allen B. Downey. Think Julia [M]. Sebastopol: O’Reilly, 2019.
- Jalem Raj Rohit. Julia Cookbook [M]. Birmingham: Packt Publishing, 2018.
- Zacharias Voulgaris. Julia数据科学应用 [M]. 陈光欣, 译. 北京: 人民邮电出版社, 2018.
- 朱红庆. Julia机器学习核心编程:人人可用的高性能科学计算[M]. 北京: 电子工业出版社, 2019.
- Norman Matloff. R语言编程艺术[M]. 陈堰平, 译. 北京: 机械工业出版社, 2013.
- Andy Nicholls, Richard Pugh, Aimee Gott. R语言入门经典[M]. 姜佑 等, 译. 北京: 人民邮电出版社, 2018.
- Robert I. Kabacoff. R语言实战(第2版)[M]. 王小宁 等, 译. 北京: 人民邮电出版社, 2016.
- Hadley Wickham. 高级R语言编程指南[M]. 潘文捷 等, 译. 北京: 机械工业出版社, 2020.
- Brett Lantz. 机器学习与R语言(第2版)[M]. 李洪成 等, 译. 北京: 机械工业出版社, 2017.
- 程乾, 刘永, 高博. R语言数据分析与可视化从入门到精通[M]. 北京: 北京大学出版社, 2020.
- 周伟明.程序员的十层楼(一、二、三)[J]. 程序员, 2009(6):134-136; 2009(7):118-120; 2009(8):134-136.
注:本文版权归作者个人所有,如需转载请联系作者,未经授权不得转载。