不是每一个写代码的都是程序员。这里,我把程序员定义为以编程为生的人。我认为世界上存在四类程序员:(计算机)科学家、码农、专家和工匠。下面我一一介绍自己的观点。
(计算机)科学家
与其说他们是程序员,不如说他们是数学家。他们发明了各种理论、算法和术语,教科书上那冗长的证明和计算也出自他们之手,其他的程序员都或多或少受益于他们的成果。有时,他们的一篇论文能改变整个业界的思维方式,但他们通常不会也不喜欢把那惊世骇俗的理论商业化。相比之下,他们更喜欢沉浸在科学的象牙塔里,自得其乐,好不快活。
他们是程序员中最不经常写程序的人,甚至有一些大师一辈子都没写过程序,你也许认为这违反了我们开头对程序员的定义,可谁说编程非要用键盘呢?
码农
这个词汇来自网络上程序员的自嘲。但在这里,我把他定义为软件的主体实现者。正如农民工兄弟一样,他们是软件大厦的实际缔造者,他们通常熟悉或精通一到两门语言,在现有的架构下进行开发。
他们是程序员中的蓝领,干着某种程度上的体力活,但这并不是什么坏事,事情总要有人做,并且编程的自由行赋予了码农很大的创造和学习空间。如果承认自己是个码农并乐于所从事的工作,那也是件极其美好的事,可问题在于很多人并不是自己愿意做码农,而是被迫成为了码农,他们本应是音乐家、运动员或者是商人,可因为种种原因成为了码农,干着他们认为枯燥且重复的体力活,所以他们不开心,这种状态下工作身心俱疲,也就是他们最容易发出程序员吃青春饭,三十岁以后还写程序没出息,应该转管理之类的蠢话。
可当他们真的成为了管理者,通常情况下,只有极少部分人找到了自己喜欢做的事,其他大部分码农仍将继续他们的抱怨。综上,码农是程序员中占比最大的群体,他们的可塑性最高,有刚学习编程的中学生,有刚参加工作的毕业生,也有工作多年仍乐于战斗在第一线的资深工程师;作为码农,首先要承认自己的身份,然后找到自己的兴趣与方向,或者乐于做一辈子码农,或者准备向其他三类程序员转换,再或者换个行业,追寻自己最初的梦想。
专家
他们在软件行业中摸爬滚打多年,见多识广且精于一个或多个领域。他们在公司里通常被称之为高级程序员,架构师或是CTO,他们通常设计软件大厦的结构,然后安排码农去实现,或者自己写一些核心代码。
他们经验丰富,具有技术前瞻性,能够未雨绸缪,提前做出反应以应对软件大厦腐朽的趋势和业界的技术变化。他们性格单纯,喜欢自己的工作,且薪水不菲,通过阅读科学家的论文来保持与时代共同进步。软件行业很特殊,对于制造业,杰出者与平庸者带来的结果差距通常只有一到两倍,可在软件行业恐怕用千万倍形容都不为过。
所以专家是公司的宝贝,任何一家公司都要不懈余力去争取或培养专家;同时,成为专家通常也是很多码农的终极梦想。因此,如果你是一位专家,请接受我致以的崇高敬意。
工匠
他们是很特殊的程序员,与其他程序员关心技术本身相比,他们更关注实现的结果,他们是把科学家论文商业化的实践者。对他们而言,重要的不是技术本身,而是利用技术创造卓越的产品。
因此,你很难用前端、后台、DBA、安全工程师定义他们,为了创造伟大的产品,他们愿意学习任何技术,有些浅尝而止,有些因为需要或兴趣而精通无比。他们通常具有叛逆精神,本能地抵制权威,喜欢挑战某个领域的领导者,具有传统意义的黑客精神。他们对自己和别人都极其严格,具有很强的控制欲,喜欢插手编程之外与产品有关的事物,如设计、UI、市场等等;因为他们不希望因为某个环节的失误而降低了产品的影响力,虽然他们并不总是对的。
他们喜欢编程,但编程通常并不占据生活的全部,他们一定会有一些与大众眼中程序员气质不符的爱好,如吹笛子,打剑道,玩音乐,绘画,种地,旅行等等。他们特立独行,性格倔强,工作疯狂,只愿和优秀的人合作。
因为如此种种,在一般的企业中,工匠很难共事,他们总会觉得自己的才华受到了限制,周围的人跟不上他的节奏;他们在某种意义上是公司的不稳定因素,要么是天使,要么是魔鬼;绝大部分的企业不需要工匠,但对伟大或立志伟大的企业而言,工匠比专家还重要,专家可以把现有的产品做到行业领先,但工匠可以创造新的产品从而改变游戏规则。因为适合工匠的企业如此至少,他们中的有些人选择自己创办一个。
写在最后
以上是我个人对程序员的分类,(计算机)科学家、码农、专家、工匠;每一个程序员依据技术能力,性格习惯一定会找到自己的类型,但通常或多或少都会具有其他类型的气质,有工匠气质的科学家,喜欢与码农并将作战的专家等等。
我以前以为自己想做科学家,后来发现不是,工作后成为一名码农,那会立志做专家,后来渐渐的发现自己和周围的同事不一样,那些专家的生活也不是我想要的,消沉了一段时间,偶然发现有一类工匠的程序员,那或许是我想成为的人,然后,生活、工作又恢复了激情,于是便根据自己的阅读、经验写了这篇文章。
对于每一位程序员,重要的不是你现在属于哪种类型的程序员,而是找到你希望成为的那种程序员,并为之努力。每一位程序员,都会有自己的精彩。
相关推荐
1. **编程语言基础**:讲解至少一种或多种编程语言的基础语法,如C、C++、Java或Python,包括变量、数据类型、运算符、流程控制(条件语句、循环语句)、函数、数组、字符串等基本概念。 2. **算法与数据结构**:...
《程序员面试宝典》是一本全面涵盖程序员面试过程...通过阅读《程序员面试宝典》和《第三章 三种考试(电子)》,程序员可以系统地准备面试,提高自己的竞争力,并在求职过程中展现出扎实的专业知识和良好的综合素质。
C++黑马程序员学习资料,附赠《InterviewGuide第四版By阿秀》、《LeetCode刷题手册》、《背包问题九讲》、《算法图解》pdf版本,三个基础课程文档手册及三个实验项目,由简到繁分别为《通讯录管理系统》、《职工管理...
二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六进制(Hexadecimal)是计算机科学中最常见的四种进制。程序员计算器能够帮助用户方便地进行这些进制之间的转换,例如将一个十进制数转换成二进制或十六...
”这句话反映了程序员群体中的一种普遍现象:不同的编程语言会有各自的拥趸者。PHP作为一种广泛应用于Web开发的语言,在其支持者眼中具有很多优点: - **易于上手**:PHP语法简洁,入门门槛较低。 - **广泛的社区...
这个压缩包包括了PHP、JavaScript、CSS和Perl四种语言的中文手册,帮助程序员快速查找和理解相关技术。 PHP中文手册(chm版)是PHP程序员的重要参考资源,它详细介绍了PHP语言的各种语法、函数、类库以及错误处理等...
2. C/C++/Java/Python等至少一种编程语言的基本语法,包括变量、数据类型、运算符、流程控制语句等。 3. 函数的定义与调用,模块化编程思想,类与对象的概念。 四、软件工程 1. 软件生命周期:需求分析、设计、编码...
初级程序员考试会涵盖至少一种主流编程语言,例如C、C++、Java或Python。考生需要熟悉这些语言的基本语法,包括变量定义、数据类型、运算符、控制结构(如if语句、循环)、函数定义与调用等。对于面向对象的语言,还...
JAVA语言提供了两种不同的类型:引用类型和原始类型(或内置类型)。int是JAVA的原始数据类型,而Integer是JAVA为int提供的封装类。JAVA为每个原始类型提供了封装类。 4. 异常处理 异常表示程序运行过程中可能出现...
Java中有两种类型的变量:实例变量和局部变量。实例变量是属于对象的成员变量,用于存储对象的状态。局部变量是方法内部的变量,用于存储临时数据。Java中的方法可以是静态的,也可以是实例方法。静态方法属于类,而...
二十一、HR经理的四种常用面试技法:详细介绍了HR经理在面试过程中常用的四种面试技法。 二十二、被HR快速否决的9种求职者:列举了HR在初筛简历时会快速排除的九种求职者类型。 二十三、人事经理30秒看一份简历:...
学习这部分内容,考生需要掌握变量、数据类型、运算符、流程控制、函数、类与对象等基本概念,以及面向对象编程的思想。 三、数据结构与算法 数据结构包括数组、链表、栈、队列、树、图等,是解决问题的关键工具。...
初级程序员需要掌握至少一种编程语言,如C、C++、Java或Python等。了解基本语法、控制结构(如if语句、循环)、函数的使用、变量和数据类型、运算符以及异常处理机制是必不可少的。此外,对面向对象编程的理解,如类...
5. 其他高级语言:虽然本文主要讨论了上述四种语言,但还有其他如FORTRAN、C、Python、JavaScript等同样重要的编程语言。每种语言都有其特定的用途和优势,掌握多种语言能够拓宽程序员的技术视野,提高解决问题的...
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int 是 Java 的原始数据类型,Integer 是 Java 为 int 提供的封装类。Java 为每个原始类型提供了封装类。 4. String 和 StringBuffer 的区别 Java ...
库有两种类型:静态库和动态库。 静态库是指将目标文件静态链接到可执行文件中的库文件。静态库的优点是生成的可执行文件具有良好的性能和安全性,但缺点是生成的可执行文件较大。 动态库是指将目标文件动态链接到...
文章提到了几种不同的程序员类型,包括那些自学成才的程序员,他们在资源匮乏的环境下依然能够迅速成长起来,并且成为团队中的佼佼者。 #### 二、成为程序员的标准 关于什么样的人可以被称为程序员,文章中给出了...