程序员是怎样练成的?

翻译 2014年01月13日 16:21:16

        一些人认为,掌握一门计算机语言,会编写几行代码并且能够让这些代码在计算机上运行起来的人,就可以称为程序员。事实上,软件行业里,要成为真正意义上的程序员,对得起 programmer 这个称号,还是要花费一番功夫的。

        在成为程序员的道路上,要经历四个坎坷,让我们用四个境界来标明他们。 

        第一境界,就是前面所说的,掌握一门或者几门编程语言,会模仿例子来实现程序代码,并且让代码在计算机系统中运行起来。达到这个境界人,还不能算是真正意义上的程序员,而仅仅是掌握了一种或者几种工具的工匠,他们中的熟练者能够快速模仿现成的例子,以实现自己或者用户需要的软件模块。

        非常遗憾,许多 “程序员”仅仅达到第一个境界,他们根据手中的文档和参考资料,通过“模仿”来完成工作,他们实现的程序只是无数个前人已经实现过的代码的翻版组合,虽然其中的熟练者以快速高效率完成任务著称,然而他们的作品中毫无新意,日复一日地重复代码,罕有任何可以称之为“创新”的东西。第一境界的特质是对语言工具的掌握,在这个境界的高手,会强调自己对语言如何如何熟练,因此这个境界可以用“知器”来表示。

        第二境界里,我们要学习的是分解问题和推理的技巧,学会用逻辑的语言来精确地表达一个命题。在这个境界里,软件工作者掌握的是一种分析具体事物的方法,他们不再一味地模仿,而是开始对一个又一个具体问题思考并尝试用自己的方法来更好地解决。 在这个层次里的“程序员”开始关注解决问题的思路,并且关注分析和推理的数学技巧,他们中的优秀者熟知各种算法善用各种各样的命题推理来分析并解决问题。他们同样善于借鉴前人的例子,但是往往能够根据问题的特点进行有效的改进,并且能够在尝试改进的过程中得到创新的成就感和新的经验。在这个层次里的人,对语言工具的认识比第一境界更加深刻,他们是真正知道如何利用手中语言工具的特点更好地解决问题的人。但是他们并不强调自己对于语言如何熟悉,也不再热衷于宣扬掌握如何如何多的语言,在他们眼里,语言仅仅是一种工具而已,真正重要的是分析问题的方法。 第二境界的特质是对具体问题的分析,在这个境界的高手,往往善于从具体问题中分析出合理有效的解决方法。因此这个境界用“格物”来表示。 

        第二境界里有真正对如何用程序来解决问题经验丰富的人,这些人能够出色地胜任编码工作,因此我们称他们为 Coder,或者初级程序员。

        第三境界里,我们要学习的是抽象思维和找出事物表象后面的规律。在这个境界里,软件工作者不再针对一件一件具体的事物来分析,而是尝试理解事物表象下的本质。在这个层次里的人,开始关注事物的共性,并且逐渐掌握归纳和总结的方法。“模式”开始出现在他们的头脑里。

        “设计模式”是软件领域的“三十六计”,是经过抽象总结而归纳出来的真正的思想精华。第三个境界的软件工作者开始接触并且理解“模式”,学会灵活运用模式和抽象思维来解决“某一类”问题。与表象相比,他们更关注的事物的本质,他们的代码里充满思想和对事物规律的深刻认识,他们熟知各种类型问题的特点和解决技巧。对事物本质规律的认识使他们不再依赖于语言工具,任何一种熟悉或者陌生的程序设计语言在他们的手中都能够发挥到极致,完美地解决问题。 

          第三境界的特质是对事物本质规律的认识,在这个境界的高手,往往能够快速地抽象出问题的本质,从而用最合适的方法来解决问题。这个境界我用“明理”来表示。 达到第三境界的程序员,是天生的设计师,他们对问题本质的领悟能力帮助他们用优美简洁代码来解决问题,他们的代码中充满设计思想。他们是真正能够享受到程序设计的艺术魅力并且充满成就感的一群人。 前面说到了三个境界,层层深入,并且第三个境界的程序员已经当之无愧地成为软件领域的专家领袖,然而,“程序员”是否只有以上三个境界了呢?答案是否定的。在这三个境界之上,依然存在有——

        第三境界程序员中的极优秀者,并不满足于专家的地位和高薪,他们开始向第四境界艰难地前进。第四境界是程序设计领域的最高境界,要达到这个境界,只需要掌握一样东西,然而这个东西并不是寻常之物,而是许多人穷尽一生也无法得到的,这个世界最为深邃的秘密。 

        自古以来,有这样一群僧人,他们遵守戒律,不吃肉,不喝酒,整日诵经念佛,而与其他和尚不同的
是,他们往往几十年坐着不动,甚至有的鞭打折磨自己的身体,痛苦不堪却依然故我。 
有这样一群习武者,经过多年磨练,武艺已十分高强,但他们却更为努力地练习,坚持不辍。 
有这样一群读书人,他们有的已经学富五车,甚至功成名就,却依然日夜苦读,不论寒暑。 
他们并不是精神错乱,平白无故给自己找麻烦的白痴,如此苦心苦行,只是为了寻找一样东西。 
传说这个世界上存在着一种神奇的东西,它无影无形,却又无处不在,轻若无物,却又重如泰山,如
果能够获知这样东西,就能够了解这个世界上的所有的奥秘,看透所有伪装,通晓所有知识,天下万物皆
可归于掌握! 
这并不是传说,而是客观存在的事实。 
            引自《明朝的那些事儿》 作者:当年明月

        这样的东西,叫做“ ”。

静寂虚无中有奥秘,不静不动,乃程序之源,无以名之,故曰:程序设计之道。若道至大,则操作系
统至大;若操作系统至大,编译程序亦然;若编译程序至大,应用程序亦复如是。是以用者大悦,世之和
谐存焉。 
                ——杰弗瑞.詹姆士

所谓道,是天下所有规律的总和,是最根本的法则,只要能够了解道,就可以明了世间所有的一切。 掌握了“道”的程序员,才是真正的程序设计大师,能够创作出流芳百世的作品。 然而怎样才能“悟道”,我并不知道,也无法描述,因为“道”实在不是一个能够轻易得到和理解东西。 对第四境界的程序员来说,“思想”已经不再是很重要的东西,因为他们对程序本质的理解已经超越了问题本身,在他们的代码里,有的只是自然,现实和虚幻的边界都已经模糊,一个完美自治的系统在刹那间诞生,却仿佛从亘古时刻起便存在着运动着,从简单而质朴的规律中涵盖着世间万物的本质。因此,这个境界,我称之为“成道”。 因此摆在我们面前的道路也是从“知器”、“格物”、“明理”到“成道”的艰难过程,像程序员一样地思考,扎扎实实地向着更高的层次迈进,才是正确的学习方法。只要坚持不懈,迟早有一天,你会成为巨人。 






程序员是怎么炼成的

现在,像达内、华清远见、国嵌、北大青鸟、传播智客等等IT培训机构很多,为尚未毕业的大学生、毕业了一时找不到工作的大学生、工作后想转行的再就业者提供了一个掌握新技能的机会,通过三个月或半年或更久的培训,...
  • u011467537
  • u011467537
  • 2015年12月17日 21:07
  • 561

通过「刻意练习」,你才能成为顶尖的程序员

作家格拉德威尔在《异类》一书中指出: 人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。 他将此称为「一万小时定律」。 ...
  • laokdidiao
  • laokdidiao
  • 2016年05月18日 12:37
  • 729

程序员是怎样练成的?

一些人认为,掌握一门计算机语言,会编写几行代码并且能够让这些代码在计算机上运行起来的人,就可以称为程序员。事实上,软件行业里,要成为真正意义上的程序员,对得起 programmer 这个称号,还是要花...
  • zsj470785068
  • zsj470785068
  • 2017年02月18日 19:45
  • 107

高手是怎样练成的

高手是怎样练成的 分类: C++感悟与资料整理 2012-03-13 19:15 261人阅读 评论(0) 收藏 举报 [html] view plainc...
  • angelxf
  • angelxf
  • 2013年01月14日 10:47
  • 524

面霸可以练成,程序员如何成功面试

一、概述 “你的优势是什么?”面试中应该最长接触的一句话了,多年前我觉得这个问题很无聊,现在我经常这么问面试者,因为我真的想知道他的优势是什么,能给公司带来什么。面试其实可以当成一场聊天和谈判,...
  • kwame211
  • kwame211
  • 2018年01月14日 19:03
  • 25

技术大牛的练成

首先声明,我不是Expert,但我发现很多有成就的技术大牛,很多都在30岁左右,这类人,一般都是23岁左右毕业,工作两年后,开始从事自己感兴趣的细分行业。 打个比方吧,这位牛人23岁毕业,做了两...
  • meimonkey
  • meimonkey
  • 2014年10月16日 16:04
  • 295

主程序员的练成:IP、DNS和CDN

目录(?)[+] 有段时间我面试程序员时,喜欢问这个问题:局域网IP有哪些IP段?由这个问题再追问NAT(网络地址转换)。 为什么不是每个设备一个公网IP? 先说个关于QQ的...
  • u012377333
  • u012377333
  • 2014年11月13日 19:49
  • 1201

高手是怎样练成的

[html] view plaincopyprint?             高手成长的六个阶段      程序员怎样才能达到编程的最高境界?最高境界绝对不是你去编...
  • u014707579
  • u014707579
  • 2014年04月17日 20:46
  • 409

教你怎样成为C++高手

1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》(C++编程思想,翻译的非常差); 3.看《The C++ Program...
  • hellokandy
  • hellokandy
  • 2016年10月24日 11:07
  • 482

Python高手是如何练成的

本文是从 How to become a proficient Python programmer 这篇文章翻译而来。 本文是从 How to become a prof...
  • gaoxin12345679
  • gaoxin12345679
  • 2013年12月30日 01:27
  • 403
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序员是怎样练成的?
举报原因:
原因补充:

(最多只允许输入30个字)