(转)程序员四种境界

程序员四种境界

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

第一境界,就是前面所说的,掌握一门或者几门编程语言,会模仿例子来实现程序代码,并且让代码在计算机系统中运行起来。达到这个境界人,还不能算是真正意义上的程序员,而仅仅是掌握了一种或者几种工具的工匠,他们中的熟练者能够快速模仿现成的例子,以实现自己或者用户需要的软件模块。 非常遗憾,许多 “程序员”仅仅达到第一个境界,他们根据手中的文档和参考资料,通过“模仿”来完成工作,他们实现的程序只是无数个前人已经实现过的代码的翻版组合,虽然其中的熟练者以快速高效率完成任务著称,然而他们的作品中毫无新意,日复一日地重复代码,罕有任何可以称之为“创新”的东西。

第一境界的特质是对语言工具的掌握,在这个境界的高手,会强调自己对语言如何如何熟练,因此这个境界可以用“知器”来表示。

第二境界里,我们要学习的是分解问题和推理的技巧,学会用逻辑的语言来精确地表达一个命题。在这个境界里,软件工作者掌握的是一种分析具体事物的方法,他们不再一味地模仿,而是开始对一个又一个具体问题思考并尝试用自己的方法来更好地解决。

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

第二境界的特质是对具体问题的分析,在这个境界的高手,往往善于从具体问题中分析出合理有效的解决方法。因此这个境界用“格物”来表示。

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

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

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

第三境界的特质是对事物本质规律的认识,在这个境界的高手,往往能够快速地抽象出问题的本质,从而用最合适的方法来解决问题。这个境界我用“明理”来表示。

达到第三境界的程序员,是天生的设计师,他们对问题本质的领悟能力帮助他们用优美简洁代码来解决问题,他们的代码中充满设计思想。他们是真正能够享受到程序设计的艺术魅力并且充满成就感的一群人。

第三境界里的程序员真正当得起Programmer称号,他们在外人眼里看起来是天生的设计师、艺术家和技术牛人,他们是为软件创作而生的。

前面说到了三个境界,层层深入,并且第三个境界的程序员已经当之无愧地成为软件领域的专家领袖,然而,“程序员”是否只有以上三个境界了呢?答案是否定的。在这三个境界之上,依然存在有——

第四个境界

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

自古以来,有这样一群僧人,他们遵守戒律,不吃肉,不喝酒,整日诵经念佛,而与其他和尚不同的是,他们往往几十年坐着不动,甚至有的鞭打折磨自己的身体,痛苦不堪却依然故我。

有这样一群习武者,经过多年磨练,武艺已十分高强,但他们却更为努力地练习,坚持不辍。

有这样一群读书人,他们有的已经学富五车,甚至功成名就,却依然日夜苦读,不论寒暑。

他们并不是精神错乱,平白无故给自己找麻烦的白痴,如此苦心苦行,只是为了寻找一样东西。

传说这个世界上存在着一种神奇的东西,它无影无形,却又无处不在,轻若无物,却又重如泰山,如果能够获知这样东西,就能够了解这个世界上的所有的奥秘,看透所有伪装,通晓所有知识,天下万物皆可归于掌握!

这并不是传说,而是客观存在的事实。

这样的东西,叫做“道”。

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

——杰弗瑞.詹姆士

所谓道,是天下所有规律的总和,是最根本的法则,只要能够了解道,就可以明了世间所有的一切。

掌握了“道”的程序员,才是真正的程序设计大师,能够创作出流芳百世的作品。

然而怎样才能“悟道”,我并不知道,也无法描述,因为“道”实在不是一个能够轻易得到和理解的东西。

对第四境界的程序员来说,“思想”已经不再是很重要的东西,因为他们对程序本质的理解已经超越了问题本身,在他们的代码里,有的只是自然,现实和虚幻的边界都已经模糊,一个完美自治的系统在刹那间诞生,却仿佛从亘古时刻起便存在着、运动着,从简单而质朴的规律中涵盖着世间万物的本质。因此,这个境界,我称之为“成道”。

时间: 2024-10-21 09:09:18

(转)程序员四种境界的相关文章

从软件部署看运维的四种境界

首先,博文的名字很难取啊,叫什么都感觉不太对,这里就暂定这样吧.不可否认这里有点哗众取宠的动机,不谈境界总感觉格局不够大哈. 中国哲学家冯友兰先生说过,人生有四种境界:自然境界.功利境界.道德境界.天地境界.经过长期的部署安装软件服务,感觉最近手熟多了,通过实践可以得出一些方法,方法总结起来 就可以组成一套方法论了,但作为国人,还是用格局,境界之类的词更有亲切感. 不多说废话了,下面上干货.(我所理解的干货,也可能不是,牛人请忽略) 下面通过具体的安装redis这个小软件来说明问题,我分别附上四

腾讯首席架构师:Java程序员四个阶段成长路线,少走弯路

有这么一位Java大牛 他是前 Oracle 首席工程师,负责过北京Java核心类库.国际化.分发服务等技术团队的组建.大家都知道,Java 就是 Oracle 公司的,他对Java的理解会与众不同.他把Java程序员的成长路线划分为新手.高级新手.胜任者.精通者和专家,让大家少走弯路.创一个小群,供大家学习交流聊天如果有对学JAVA方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学JAVA能够持之以恒JAVA爱好群,如果你想要学好JAVA最好加入一个组织

【小白的CFD之旅】15 四种境界

天气不错,小白一大早就起床了,吃过早餐就往奔实验室而去.路上碰到了同去实验室的小牛师兄. "小白,这么早啊",小牛师兄老远就发现了小白,打招呼道. "早啊,牛师兄,刚吃完饭呢",小白说. "对了,牛师兄,你觉得CFD怎样才算学好了呢?",小白问道. "按我个人的观点,可以把一个人的能力划分为四个阶段:无意识无能力.有意识无能力.有意识我能力及无意识有能力,怎么说呢,我给你说几个真实案例吧",于是牛师兄就给小白举了几个例子. 牛

编程能力的四种境界

人类心理学研究中的一个基础支撑科目就是分析人的潜意识和意识. 弗洛伊德是最早的一位能够清楚的认定和描述我们的心理活动“领域”的人. 在他这著名的一生的早期,他就指出我们的意识里分“潜意识”,“前意识”,“意识”.如 果我们想能清楚他们分别跟我们的思想.感觉.认知.判断和动机(这这些在我们每天的生活,职业生活中都是关键因素)有什么关联,我们可以把我们自己描述成 一个冰山. 冰山的尖端,唯一能从水面看到的一部分,可以当作是我们的的意识. 它是有逻辑.有组织的,我们可以控制它,但这部分很小. 这庞大的

Android-完全退出当前应用程序的四种方法

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A.在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法. 1. Dalvik VM的本地方法 android.os.Process.killProcess(android.os.Process.myPid())    //获取PID   System.exit(0);   //常规java.c#的标准退出法,返回值为0代表正常退出 2. 任务管理器方

黑马程序员-Foundation-几种常用方法(三)

------- IOS培训.android培训.java培训.期待与您交流! ---------- Foundation中最常用的类 NSString.NSArray.NSSet.NSDictionary .NSDate 和基类NSobject NSString(不可变) 子类   NSMutableString(可变) NSArray         子类   NSMutableArray NSSet           子类   NSMutableSet NSDictionary    子类

未来,什么样的程序员才是不可替代的?

一个足球评论员可能并不会踢足球,却并不妨碍在解说比赛时对某某球星的技艺评头论足.同样我也绝不敢以高明的程序员自居,而只是以类似足球评论员的角度来阐述我对程序员的理解.这样,大家也许就不以我为鄙薄狂妄了.这是我必须首先声明的. 什么是程序员按照Wikipedia的定义,程序员又称为计算机程序员(Computer Programmer).开发者(Developer).编码者(Coder)或计算机工程师(Computer Engineer),和网络上广泛流传的码农或程序猿同义.我无意于也不能够为程序员

【转】从框架看PHP的五种境界及各自的薪资待遇

无意中看到这篇文章,有些触动,作为博客开篇,用来激励自己. 原文地址:点击打开 在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文纯粹个人的看法.你可以认为我无知也好,或者装逼也好,请不要试着在任何情况下,随便发起言语的攻击,这只是我个人的一些经验而已,你可以选择赞成或不赞成,也可以选择看与不看. 还有本人基本对这些框架中的大部分都用的时间比较长,绝对不是随便出个Hello World!就在这里评论,曾任某某底层本土公司的技术

北京尚学堂带你“重新”认识程序员

谈谈程序员 什么是程序员 程序员又称为计算机程序员(Computer Programmer).开发者(Developer).编码者(Coder)或计算机工程师(Computer Engineer),和网络上广泛流传的码农或程序猿同义. 程序员是彻头彻尾的脑力工作者(Mind Worker),怠于思考者绝对不能成为好的程序员.有鉴于此,类Programmer天生的就应该是Thinker的子类.就程序员所使用的思考技巧而言,Thinker的具体内涵包括逻辑(Logic)和数学(Mathematics