怎么成为一个优秀的程序员,而不是一个优秀的码农?

9 条评论

分享

默认排序按时间排序

98 个回答

3844赞同反对,不会显示你的姓名
萧井陌 微信公众号:炼瓜研究所 技术社区 …
3844 人赞同

优秀的程序员会告诉你打根基的重要性,会劝你在厚积薄发前要隐忍。

优秀的码农会告诉你学啥底层、啥啥啥一拖就好了,学了python还要啥自行车啊,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?成为高手有很多种方法汇编是个屁啊?

+++基础的分割线+++

列举几个我认为比较重要的根基并附入门书

编程语言,《程序设计语言-实践之路》《concepts of programming languages》

计算机通用知识,《csapp》

算法、数据结构,《算法导论》

程序设计、结构,没有书推荐

软件工程,这个词大家理解不同,我以为,《人月》《代码大全》《the pragmatic programmer》《sicp》、讲测试讲重构的都是软件工程,其实上面设计模式也是软件工程,哈哈

这些书,初时读来感觉全无作用,而且要读多次才能体会其中意味,所以叫它根基也是十分合适,你根基越深才能爬得越高嘛。

+++方向的分割线+++

啥是优秀程序员?

记者和很多网民说熊猫烧香作者是高手

公司里你出什么bug他都能告诉你原因用什么软件有问题他都能回答你的你就觉得是高手

有人说徒手做产品的全栈才是高手

各语言的作者都是高手

有不写代码,扔出一个restful论文的

还有人说高德纳是神,他如果是神,那他那些代码一定是在考验我们,嗯

。。。。

上面这些的确都算是高手,我琢磨着前两年被开掉的moto公司员工里肯定也有做功能机的高手和写廉价板驱动的高手

你想自己选自己的方向还是被人忽悠方向?

我的想法是自己都尝试玩玩,然后做自己喜欢的方向。当然,程序员的生态金字塔是上面做工具、基础设施给下面人用来给普通人编程序,所以你选方向可以参考一下这个金字塔模型

+++爬坑的分割线+++

方向定下,然后就是做事了,一大误区就是 【追求最好的东西】,于是非得弄清楚:

  • php是最好的语言吗?
  • OpenGL比directx差吗?
  • 程序员要先学数学吗?
  • 最好的c语言书是谭浩强写的吗?
  • 放屁要先脱裤子吗?
  • linux发行版那么多该选哪个?
  • 某大牛说IDE不如编辑器
  • 听说黑客都是用记事本写程序的
  • C#是升调记号应该读csharp而java不应念 [加wa(轻声)]
  • 。。。

如果你是一个*nix世界的玩家的话,你应该知道有一个jargon来上面的毛病,叫yak-shaving,我以前提过几次yak-shaving,但是很多人看不懂,它的字面意思是Any seemingly pointless activity which is actually necessary to solve a problem which solves a problem which, several levels of recursion later, solves the real problem you're working on.

但一般都引申其意使用它,我这里举例一下:

你本来要打开软件写一个helloworld,软件提示你升级,你点了升级,提示你xx库不够新,然后你更新xx库,提示你要升级yy驱动,然后你升级yy驱动,系统告诉你要编译这个驱动,你必须下载s.f版本的编译器和库,你更新编译器,系统说s.f版本编译器必须在e.n系统上运行,然后你就升级系统了,几个小时过去,你发现系统升级导致了几个软件损坏,然后你更新那些软件,去找解决问题的方法,不知不觉到了半夜,你累成了狗,却发现问题还有一大堆,而helloworld也没写成。。。。

这些问题我都遇到过,我的建议是挑一本大牛说的书就是了,看会了其他也会了。当然,如果你不幸不认识大牛(都上知乎了只要会搜索这种事情不可能发生),或者单纯好奇——就像我当年那样的话,那就每种都试试,不过有的答案你自己知道就好,像是编辑器emacs比vim更好,写程序ide比编辑器更好这种话,你是不应该乱说出来的。

对了,像是不同范式的编程语言、不同的开发环境是应该尝试体验一下的,不过这种建议书上都写了,我这里说显得有些废话了。

所以说,不能被无关的东西弄偏了目标,要专注,坚持。

等你学深了一门语言,就算是学另一们其他范式的语言也不会太难,你学会了opengl,dx也就看看就能写了。

你看看武侠小说里,段誉就是一个傻逼,仗着有时发出有时发不出的脉冲波和绕圈圈就能快跑直线的bug技就加上一门佛学能独步武林最终迎娶了白富美,出任了CEO,走向了人生巅峰,乔峰永远是一招降龙十八掌,更夸张。而慕容复文武双才,基本精通天下武学,每天读书4时辰练功4时辰,论用功谁能和他比啊。。。可到了30多岁还是一事无成,pk连段誉这种新手都搞不过,最后被人抢了老婆,就是因为方向不对,而且太不专注了。

所以求多不如求专,深度到了,再花20%的时间去扩展一下广度即可。

+++重要的分割线+++

以上东西你都做好了,要花个2年时间的样子,对于学生来说,如果你有一个好的学校背景,人生可以就此扬帆起步了

但这不是终点,俗话说人靠衣装,美靠包装。包装是门学问,这里的包装不是让你西装领带亮皮鞋黑丝套裙白衬衫整一个营销狗hr的造型,是说专业技能上的包装。

为什么这是最重要的部分呢?因为别人一般不和你说这么多,尤其是懂得包装的人,更不会传你这些不传之秘啦。。。。。

包装自己的第一步是提高实力

没有实力的包装那是空中楼阁,只能靠每天日常搞外包的忽悠架构大数据云计算过活,明眼人也能看出来,所以纯属作秀,没有意义。

在某个领域(编译器、虚拟机、开发架构、前端。。。)成为专家(专家的定义嘛,,我的理解是能在简历里写精通)后,包装的实力就算具备了。

包装的第二步是定位

提到美国会有一大堆人跳出来说是人类的希望民主的大救星,提到google就是最纯的技术公司不作恶、软件业的翘楚开发界的标杆、心美人美白莲花。。。哪怕你列举google卖假药、恶意打压yelp、挟持web标准等等等等这些事,他们也会说百度更差(咦这不5角钱常用的语句吗怎么被民主进步人士盗取了?。。。),可我根本没提到百度好吗。。。

这全是包装造成的,所以包装的巨大威力,以此可窥之。

google是搜索引擎,百度难道也说自己是搜索引擎?不,百度说自己是最懂中文的搜索引擎。。。哈哈哈,你别笑,这的确很管用,就像google说自己不作恶是好女孩一样。

程序员的包装定位,无非稀缺和独特这两点。物以稀为贵,稀缺就是要做到不可替代,这很好理解,比如你知道世界第一高峰是珠穆朗玛峰,如果没看过禅师精选集你很难知道第二高峰是乔戈里峰,但文青特别偏好乞力马扎罗山,不爬不跟你结婚,为啥?独特性嘛。。。我不跟你比高,我和你比文化底蕴,于是就赢了。

由于你有实力,所以你应该尽量把自己的实力包装成稀缺属性,你是专家嘛。。然后你实力多,应该把独特的实力包装出来,避免和他人共同曝光,以免被人压在身下。

我说一个我朋友包装自己的故事,他进公司接手了一个项目,已经是被隔壁组开发了3,4个月的一个软件,其实这软件2个月也能做好的,但是隔壁人忙而且也不上心,不熟悉这个技术,加上又不是自己的老板,所以做事拖沓了那么久才做好。他接手后一刻没闲,晚上带回家也做,做到半夜,10天做成,然后整个公司的人都知道他的名字了,他也就立稳脚跟了。

这个包装的主题是,技术实力强,开发速度快。

包装的第三步是推广

推广就是让人知道你做得好,强化你的个人品牌,可以用博客、知乎、mailing-list、github等,通过写文章、参加线下聚会演讲、回答问题、帮助他人等方法。这个用好了是门学问,用不好就是装逼,不展开了。。。

记住不要匿名,匿名你基本啥也得不到

有人明明技术实力强,但是由于没有包装好,或被埋没了才能,或被贴上了各种不应该有的标签,或被人偏见看待。比如 赵劼 的c#和 vczh 的微软标签

有人明明实力一般,但是善于鼓动小白,包装得好,所以有一批忠实粉丝,这种人我都不太敢说名字了,呵呵。。

所以优秀的程序员应该善用包装啊

+++结尾的分割线+++

上面说了那么多,但是坚持做来需要不少推动力,有人能考上清华,但是也能在大学堕落,有人能取得成绩,但是也会固步自封。。

要想优秀,得有巨大的推动力,你为啥想成为优秀的程序员?你的推动力是什么?

好比,我们说,嫖娼是有巨大道德压力、金钱压力和风险的事情,为啥知乎上那么多嫖客乐此不疲并努力给自己洗脑合理化这件事呢?因为在他们的眼中嫖娼是最有趣的事情、是不吃饭不睡觉也不能不做的事情、是不做就活着没劲的事,有了这种死也要死在床上的精神,还怕什么呢?

这就是推动力

编辑于 2014-10-21 129 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利 收起

104赞同反对,不会显示你的姓名
子柳 重度网瘾患者,尚未放弃治疗
104 人赞同

我见到的优秀的程序员多数是“随着一个迅速发展的企业一起迅速成长起来的”。学校里教不了多少东西,一味看书也无法理解复杂的场景,唯有在实践中锻炼,不停的解决问题。在企业发展中不掉队,最好是走在队伍前面。(很多掉队的转做PM了)
发布于 2015-08-26 21 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

141赞同反对,不会显示你的姓名
知乎用户 less is more
141 人赞同

思考需求设计六小时,动手码字测试两小时。

如果工作时间是八小时。

发布于 2015-08-21 22 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

766赞同反对,不会显示你的姓名
李运华 10年软件开发,Java、C/C++、Linux、MySQ…
766 人赞同

那些一上来就数学、算法、人工智能、编译原理。。。。。。balabala的答主,你们现在回去大学考试,微积分、图论、编译原理等学科,能考80分以上么?你们有自己实现过B-tree算法么?你们有自己实现过linux tcp协议栈么?

我敢打赌99.99%的人都不敢拍着胸脯说自己能做到,所以不分领域不分场景,上来就算法、数学很重要的都是耍流氓!!!

程序员是一个很宽泛的统称,嵌入式程序员也是程序员、ios程序员也是程序员、linux内核开发也是程序员、Oracle开发也是程序员、应用服务开发也是程序员,试图以一个标准来统一这些程序员的优秀特征,就是耍流氓!!

比如说:嵌入式程序员对系统内核、数学、汇编可能就要求较高,但是对于和用户沟通交流的沟通力、理解力要求就不那么高,因为嵌入式更多都是和底层打交道;而像我这种应用服务开发程序员,更多是和用户打交道,内核和数学理解基本原理即可(知道什么时候用Map,什么时候用List就可),汇编完全就挨不着边,但对于和用户(包括外部用户、内部用户例如产品、测试等)交流时的沟通力、理解力要求很高。你数学拿国际奥赛金牌、linux内核源码度过三遍?。。。。。。然并卵,没有理解客户的需求,你做的再牛,最终都是错的,都是垃圾!

即使我非常推崇的《UNIX编程艺术》一书中,很多原理其实也只是适合某些场景,并不是放之四海皆准。例如其中一条原则“清晰性”,就不适合PHP内核这种开发场景,PHP内核中的Hash函数的循环,是写了7 ~8 条重复的语句,以达到高性能。

所以世界上根本没有具体统一的优秀成员的标准,如果真要给出一个标准,那我就只能给出一个比较抽象的标准了:
1)充分了解你所在的行业的特点和要求,并全力去满足
千万别做着嵌入式,却按照应用服务开发的标准去要求自己

2)不断学习和提升,而不是满足于完成目前的工作
码农满足于完成目前的工作,优秀程序员时刻准备着将来更有挑战力的工作

3)能够动用一切方法和手段,去解决你所在行业遇到的疑难杂症
完成需求和解决问题对人的综合素质要求相差不止10倍。例如,线上服务器响应慢,一个很简单的现象,但可能原因太多了:服务器负载高、磁盘慢、没内存了、数据库慢查询、数据库磁盘坏了、程序死循环、jvm fgc、网络抖动、黑客攻击、流量暴涨(例如秒杀活动)。。。。。。在这么多可能原因中快速定位真正的原因,和写1000行代码的要求完全不一样

===============2015.08.27补充=====================
有的评论的同学可能对我的回答有误解,或者说我还没有表述清楚,这里再补充一下:
1)我不是说数学、算法一定不重要,我是说要看行业和领域
数学和算法在大数据分析、图像识别、内核开发等领域非常重要,其实不能说重要还是不重要,在这些领域,数学和算法是基本要求,这个都不懂,那基本上就玩不转,连码农都没得当。

但数学、算法在应用服务开发领域,在APP开发领域就不会有那么高的要求。当然没有那么高的要求 != 完全没有要求,理解问题的时候不要走极端

2)我不是说基础不重要,我是说不同行业和方向基础要求不一样
打篮球、踢足球、打台球、扔铁饼、110米栏。。。。。。哪个都对基础要求很高,但乔丹不会按照110米栏的要求去加强基础,丁俊晖也不会按照梅西的要求来提升基础。
假如有人问”优秀的运动员和普通的运动员差异在哪里?“,你会说:速度、力量、敏捷、耐力这些指标么?

3)有人说国内面试都这样,所以这些很重要
我只能说这是国内的现象(或者国外也一样吧,免得有人吹毛求疵),但并不认为这就是正确的,面试的内容如果和工作无关,吃亏在后头,我就吃过亏,面试的时候对答如流,入职后发现完全不满足工作要求

==========2015.08.31补充===============
还是有人没有很好的理解我的意思,我给个实例吧,看看所谓的“基础”到底有多少层。
我以最广泛的java为例吧,因为java使用范围最广,几乎每个程序员或多或少都会了解一些。
1)掌握java的基本语法和公共库,能够完成最简单的基本业务开发
2)熟练掌握java的高级用法:nio、多线程等,能够完成较为复杂的业务开发
3)掌握jvm的基本原理,能够进行jvm调优
4)掌握java虚拟机的原理
5)掌握java虚拟机的原理,并能够开发基于虚拟机的编程语言,例如scala等
6)熟悉hotspot的源码
7)熟悉hotspot的源码,能够开发hotspot功能
8)能够优化或者重构hotspot代码
9)熟练掌握编译原理
10)熟练掌握编译原理的数学知识
11)能够使用flex和bison开发编程语言
12)能够开发和优化flex和bison
。。。。。。
20)能够将编程语言翻译成汇编
21)能够将汇编翻译为机器码(包括X86、spark等cpu)
。。。。。。
30)熟悉cpu架构
。。。。。。。。

那些不区分场景,不区分行业,上来就告诉别人数学和算法很重要,或者说基础很重要的人,请按照以上的描述来对应自己的“基础”,看看你的基础到底能够达到什么程度。

================2015.09.04补充========================
正好看到知乎的一个问题:你碰到过的最难调的 Bug 是什么样的? - 互联网
那些说基础牛逼的大神做啥都牛逼、数学和算法好就能秒杀一切、高斯林来做ios app开发分分钟钟秒杀其他人。。。。。。等等的各位,请看看上面这个知乎问答吧,里面有各行各业各个领域的回答

编辑于 2015-09-04 93 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

3赞同反对,不会显示你的姓名
fantiny 码农
3 人赞同

  • 个人职业技能水平(就是大家强调的程序员基本功——数据结构,算法,设计等)
  • 专精的深入方向(能够为自己站稳脚跟打下坚实的基础)
  • 软件专业职业素质(就是软件工程那一套的基本工作方法和配套效率工具)
  • 一般职业素质(就是如何和人沟通合作这一套)
  • 不断提高的能力(适应行业快速变化和适应未来发展)

最关键最重要一点:不要像我一样自称码农

编辑于 2015-08-27 3 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 申请转载

2赞同反对,不会显示你的姓名
知乎用户 Do something cool.
2 人赞同

ABC & JCI
Always be coding. 
Just code it.
分享一个quora的链接:David Byttow's answer to Computer Programming: How do you keep your programming skills sharp?
编辑于 2013-12-10 2 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

3赞同反对,不会显示你的姓名
杜一 摄影/ 生活/ 互联网
3 人赞同

榜样的力量是无穷的,作为一个程序员一定要是一个有理想的程序员,一个有梦想的程序员。不要认为自己非常糟糕,技术不怎样、能力糟糕,每天为了生存而不是生活敲着无穷无尽的代码。但小人物也可以有大大的梦想,可以自嘲但不能自苦,每个人的成功都不是天成,我们且暂时在别人的成功中畅想,然后编织自己的充实人生。看,这几个程序员大牛:

计算机之父艾伦·麦席森·图灵

艾伦·麦席森·图灵 (Alan Mathison Turing),英国数学家、逻辑学家,计算机之父、人工智能之父。他是计算机逻辑的奠基者,在《论计算机及其在判定问题的应用》论文中,用图灵机替代了哥德尔的以通用算术为基础的形式语言。许多人工智能的方法也源自于他,他提出了人工智能的重要衡量标准“图灵测试”。如今,为纪念他而命名的“图灵奖”已是计算机界的最高荣誉,这应该是对这个计算机领域传奇人物最崇高的缅怀。

Hadoop之父Doug Cutting

Doug Cutting是Lucene、Nutch 、Hadoop等项目的发起人,他把高深莫测的搜索技术形成产品,还打造了目前在云计算和大数据领域里如日中天的Hadoop,在这个大数据时代,我们每个人都间接用过他的作品。他研发的Lucene是第一个提供全文文本搜索的开源函数库,让搜索引擎被更多人使用成为可能。Google为支持自家的搜索引擎开发的两个软件平台GFS(Google File System)和MapReduce为Hadoop的诞生奠定了条件,其中,GFS用于存储不同设备所产生的海量数据,MapReduce运行在GFS之上,负责分布式大规模数据。后来,Doug Cutting又在Yahoo!完善了Hadoop。

Amazon AWS推动者Werner Vogels

对于Amazon云计算平台AWS(Amazon Web Services),稍微了解互联网的人都不会陌生,它在云计算领域的地位如今依然不可撼动,AWS 对Dropbox、Instagram、Quora等等互联网成功平台的贡献不容忽视,并且让那些源源不断的创业团队受益,有想法的小团队也能通过AWS低价获得世界级的运营服务,负担得起用户迅速增长的压力。而Werner Vogels是Amazon的CTO,也是AWS主架构师之一。2000年左右,服务于Reliable Network Solutions公司的Werner Vogels已是顶级的分布系统专家,2004年加入Amazon开始负责Amazon全球的架构设计,以及包括云计算在内的技术创新,在2008年成为AWS架构师之一。

这三位都是计算机领域的大神,也许终其我们一生都无法企及,他们分别因为超凡的创造力、顶级的成功技术、扬名天下的项目而被我们熟知,他们也许不纠结于代码、不在源源不断的bug里死去活来,但他们都是成功的程序员,值得我们默默仰慕。海明威说:这个世界不美,但值得我们去奋斗。汲取正能量,让我们的生活每一天都有不同。

部分内容摘自DevStore,如涉及内容侵权请@我

发布于 2015-02-02 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

99赞同反对,不会显示你的姓名
Hanyu Liu 会写点代码
99 人赞同

优秀码农,干活,凶猛的干活;优秀程序员,发现问题,解决问题。
仅此而已。

好的程序员的基本要求(我认为):
1. 学好数学:高等数学,线性代数,离散数学,算法,图论(可选),数值方法(可选),优化方法(可选),计算理论(可选);
2. 打好基础:操作系统,编译原理,汇编语言,数据库原理,计算机网络,密码学,人工智能;
3. 多动手:至少用面向对象语言(C++/Java)写5万行;脚本语言(Perl,Ruby)写5千行;至少在工作中正确实践5种设计模式;维护过10万行代码的系统;参与过一次大项目的重构(或设计);
4. 多交流: 至少做过3个新人的mentor;参与需求分析和项目计划的制定;独立领导过项目的开发进度;能建立在团队里的威信(人品和技术两方面);

1和2是一个人在学生时代该干的,本科四年足够了;工作后干3和4,一般2年也能有所心得,最好能理论联系实际,做到融会贯通举一反三。而且要放下“唯代码独尊”的优越感,能正确定义开发的目标,并不断提醒自己这个目标。到此为止,优秀的程序员应该可以出炉了。

有些人可能不同意我的定义,但我认为,优秀的程序员不只是能写多好的代码,而是能独立解决问题(理论加经验),带领团队一起最大限度的实现需求(沟通能力)。代码只是其中的冰山一角啊。在实践中,“高效又优美”并不一定是好程序员,因为程序员的一个通病就是追求“代码完美”,耽误工期是常有的事,项目经理往往也没办法。优秀程序员则能正确做出取舍,做出“deliverable”的产品。优先的干的漂亮,不优先的不钻牛角尖。毕竟人的精力是有限的,在有限的时间里,做出最好的产品,还是很有讲究的。更进一步,好的程序员还要能防微杜渐,通过有效的沟通,了解团队的走向,并在必要的时候提醒团队,甚至挺身“填坑”。

PS. 当然,我不是否认代码的重要性,代码能力很重要。但再优美的代码,如果不能“deliverable”,那它又有什么意义?公司给你一个项目,让你找一百万个文件中的重复文件,你可以用一个开发周期来做一个超完美的hash function,效率高,碰撞率低...但你这函数不是“deliverable”的,因为他还不能“找一百万个文件中的重复文件”。这样的程序员真的优秀么?我认为不是,因为他不分主次。

发布于 2013-12-10 16 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

5赞同反对,不会显示你的姓名
陈满砚 程序员里吉他弹得最好的, 吉他手里程序写…
5 人赞同

这个问题有主观和客观因素
客观因素是,公司想你成为一个好的程序员么?还是他们只是单纯的希望你去执行而已?比如outsourcing,或者说公司内部的outsoucring?
又或者说,你有足够的room去成为一个优秀的程序员么?比如公司有榜样么?公司给你时间去思考么?等等
主观因素,你想成为好程序员么?你能牺牲多少打游戏的时间来学习?你有足够的天赋么?

如果以上都是positive,恭喜你,其实你不用做什么特别的,这本来就是一个水到渠成的事情

发布于 2015-08-29 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

254赞同反对,不会显示你的姓名
vczh 《C++Primer 5th》强势审校
254 人赞同

不要浮躁,好好造轮子。我的老板总是跟我说,年轻人不要总是在乎钱,等到你到那个岁数了,自然就有了。后面的你只需要谈一个肯跟你结婚的时候还租房子的人就好了(其实这一点都不难,这种妹纸满大街都是)
发布于 2013-12-10 98 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

5赞同反对,不会显示你的姓名
吕磊 每一个单身的人得砍头
5 人赞同

人类和猿类的区别从使用工具开始
发布于 2014-09-13 1 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

19赞同反对,不会显示你的姓名
王雷 程序员、创业者 - 戎码一生
19 人赞同

做个程序员并不难,但是少年,你知道代价吗?

你熟悉各种语言 但你从早到晚不发一言
你精通面向对象 然而你可能还没有对象
你懂前端后端移动端 但是还是在搬砖
你了解各种框架各种库 逛街只知优衣库

Github一片绿 眼睛周围两圈黑
Bug修好笑开颜 颈椎腰椎肩周炎
Code提交十万行 存款不值半间房
系统重构大挪移 卧室只有十平米
程序简洁精炼 人是大腹便便
网站日活百千万 头发脱落一多半

为了编程,这些代价你都愿意承受,那恭喜你,已经成功了一半。

汝能持否?

发布于 2015-08-23 9 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 申请转载

5赞同反对,不会显示你的姓名
张翼德 为祖国健康吐槽五十年
5 人赞同

请题主先定义下列概念:

程序员
码农
优秀的程序员
优秀的码农

然后……这个问题还有必要回答吗?

发布于 2014-09-16 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

15赞同反对,不会显示你的姓名
在好
15 人赞同

程序人生的寂静欢喜

标题起得太大咯,是在故作老成么?

“程序人生的寂静欢喜”——怎么看都感觉像是某位已故计算机大师的墓志铭,可却偏偏被一个菜得抠脚的毛头小子拿来当做人生寄语——也是日了狗了!

人都没生过,谈什么人生!?

莫怪我,我偏要“奢谈”一下!

一.记叙

一开始我是拒绝的!因为我根本就不喜欢写程序。

打高中数理化就不好,什么排列组合、圆锥曲线、电磁场中一带电粒子、水溶液中的水解电离,困扰我有如梦魇。

高考时,祖坟上冒出一缕青烟,数学创历史新高考了88,理综破有史记录考了200,数据不仅太美太感人,而且大吉大利、元亨利贞!终于,我以总分522分考上了一所梦寐以求的2本就读于计算机科学与技术1202班——命中犯2!

可是对于编程其实我是拒绝的——大一花了一年的时间来研究心理学,大二花了一年的时间来研究哲学,大三花了一年的时间来研究中医——结果,《离散数学》挂了,《数字逻辑》挂了,《数据结构》挂了,《编译原理》挂了——恨不得自挂东南枝!

人在做天在看,出来混总是要还的!曾坚信“天生我才必有用”,“我辈岂是蓬蒿人”;曾笃定“心所愿力毕至”,“有志者事竟成”;曾夙愿“天授其赋必赐其福”,“好风凭借力,送我上青云”。可是,一个冷峻若紫电青霜的问题劈面而来:不写程序又能干嘛呢?

然而我根本就不会写程序!试想,一个打字只能用到右手食指、左手食指和左手无名指的人,敲代码时是多么捉急!试想,一个高数补考考了19分,满脑子宏大叙事的理科弱智,写程序时是多么脑洞大开!

后来去公司实习,遇到的第一个项目就是要使用ESFramework通信框架,当我第一眼看到了开发手册上的如下句子时,我就知道,春天不会再来了!

客户端通过调用ESPlus.Application.Basic.Passive.IBasicOutter接口对应的方法以及预定其相关的事件,就可以完成基础功能或得到相关状态改变通知。我们可以从 ESPlus.Rapid.IRapidPassiveEngine暴露的BasicOutter属性来获取IBasicOutter引用。

接口、预定、事件、暴露、属性、引用,你们一个一个来,我还大概能明白,你们群起而攻之,我便委地如泥了!

重载的Query方法(带有CallbackHandler参数的)在发送请求信息后,不会阻塞而继续向下执行,而框架在收到对应的回复信息时,会回调CallbackHandler委托指向的方法。由于调用线程与回复回调的线程不是同一个线程,所以称这种机制为回复异步调用。

再当我看到“重载”、看到“阻塞”时,我彻底愤怒了!而紧接着映入眼帘的“委托”、“回调”更使我出离愤怒!最后“线程”、“异步”更令我万念俱灭,心如死灰!

从此,我便以一种菜得抠脚的姿态狼狈不堪地行走在险象环生的程序世界里。莫非是寒更雨歇,葬花天气,猎猎北风袭单衣;荒原寂寂,远听猿啼,近看寒鸦起;鬼影幢幢,步步惊心,不知今夕何夕。

好多次我都想,别瞎费劲了,你不是写程序的料!真正适合写程序的人根本就不可能是这个样子!

于是乎放弃。可是不写程序又能干嘛呢?好歹读了四年大学,何况拉弓没有回头箭。还是要顶风逆水雄心在,不负人民养育情!

终于,苦水的浸泡痛彻了肌肤,磨练了身心,同时也浇灌出了涅槃之花!

某天我突然发现,那些原本看来佶屈聱牙的技术文档如今看来却直白如话,那些原本晦涩难懂的语法如今却能够熟练运用,那些原本看都看不懂的源码如今也能够在自己指下流淌,实习之前我连循环语句都写不对,如今却也能用ESFrameworkOMCS等框架开发出像样的网络通信应用。

二.议论

更重要的是,从当初的不喜欢、不擅长、不自信,到而今能够怀揣着一颗欢喜之心来写程序,能够以乐在其中的心绪来开启自己的程序人生,这不仅是我收获到的莫大财富,更是我把握住的莫大幸福!

胡适先生的名言:“怕什么真理无穷,进一寸有一寸的欢喜。”真理无穷并不可怕,因为我们在每一寸的前进中始终获得欢喜。编程之路并非坦途,我们也并非天赋异禀,然而那个最幸福的人,并非是玩转代码的编程高手,也并非是亿万家资的IT精英,而是那个在流年中始终以欢喜之心书写代码,又通过书写代码恒久再获欢喜之人!

常言道:“男怕入错行,女怕嫁错郎”。嫁郎要嫁有情郎——有情饮水饱,无情龙肉都无味!入行也是一样。入了所爱之行,举手投足皆得欢喜;入了所憎之行,坐卧立行尽是苦悲!嫁郎的幸福不在于嫁郎所获得的富贵荣华,其根本在于郎本身。那些通过嫁郎以获取外在利益的女子,她们充其量只是获得了生意上的成功,而根本没有获得婚姻本身的幸福,而这何尝不是一种买椟还珠?同样,那些以工作作为纯粹手段的人,他们也从来没有获得过工作本身的幸福快乐。

由此看来,我想恐怕对于绝大多数的程序员而言——你不是真正的快乐!

所有程序员恐怕可以粗略的划分为这五种状态:

1.不爱,但是迫于生计

2.无感,反正亦步亦趋

3.热爱,但却身心俱疲

4.狂热,打了鸡血一般

5.欢喜,毕竟乐在其中

你是属于哪一种呢?

如果要我来选,我一定会选5,因为唯其如此才能获得程序人生的个中真昧,才能拥有彼此交融的内在完满。而其他的几种状态在不同程度上都是残缺的。

也许我们写程序总是不可避免的为了各种外在的目的,但是写程序时的那份小确幸的欢喜,却始终是我们精神飞鸟的栖息地。 正如孔子赞颜回——子曰∶“贤哉回也,一箪食,一瓢饮,在陋巷,人不堪其忧,回也不改其乐 。贤哉回也!”

罢笔时风烟俱净,但愿自己刚刚开启的程序人生能够无关风月,寂静欢喜。

编辑于 2015-08-27 7 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

2赞同反对,不会显示你的姓名
码丐 四袋码丐
2 人赞同

码农只是程序员的一种谦称,或者自嘲。很多优秀的程序员都自称码农。
发布于 2014-09-14 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

3赞同反对,不会显示你的姓名
姚峰 不是程序的缔造者,只是程序的搬运工
3 人赞同

私以为程序员是用代码去解决问题优化流程的。而码农只是一味的去追求写代码写代码。程序员是写得了代码并且说人话的。。。让人去明白他们做了什么的。而码农只能和码农交流。哈哈哈。所以说与提高码力相辅相成的是分析问题的能力以及沟通能力。还在努力成为一个优秀的程序员。
发布于 2015-08-27 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

9赞同反对,不会显示你的姓名
断指鹤 豆瓣新书《绝命笔记》,欢迎来读
9 人赞同

码农不过是程序员自黑的一个称呼而已,程序员=码农了,难道题主觉得不是?难度题主觉得程序员是做的技术活,码农是做的体力活?
以自身的写程序经历来说,每天工作有几种状态:最开心的一天——没做多少活,学了很多新东西,弄懂了某个知识点;较开心的一天——做了很多活,但收获也很多;无聊的一天——没做多少活,不知该做啥,导致一天下来,啥也没学到;苦闷的一天——忙了一天,全是重复的、不用动脑的活,啥收获也没有;
第一种工作状态,或者是第二种状态是否就是题主口中的程序员的一天,最后一种就是码农的一天?
我可以很肯定的说,这种状态不由员工来定,尤其是刚入门的底层员工,已经升级到高级工程师或者是架构的人另说,但想要晋升到高级工程师或者架构,你还必须经历底层员工这步,再加上你自身聪明好学,再加上工作时间和经验的积累。
发布于 2014-09-13 1 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

1赞同反对,不会显示你的姓名
张华 沉默的大多数
1 人赞同

首先承认自己是个码农
发布于 2015-08-26 4 条评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

0赞同反对,不会显示你的姓名
知乎用户 天气好热
类似于工程师与技工(技术工人)的区别吧。
发布于 2016-07-12 添加评论 感谢

分享

收藏 • 没有帮助 • 举报 • 作者保留权利

4赞同反对,不会显示你的姓名
飞龙 Creative Common
4 人赞同

用api,也同时弄清楚其原理。复用别人的代码,同时也能独立思考。通过封装和调用来复用代码,而不是复制粘贴。

【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?相关推荐

  1. python程序员幽默段子_谁说码农不懂幽默?只有程序员才看得懂的段子

    程序员干的工作很枯燥,他们需要段子来消遣,其实他们也很幽默,很风趣的.程序员作为高智商.高收入.高压力群体,经常会有各种自嘲,而且还天生携带段子手基因.不信看看下面这些段子,一般人哪能懂!谁说程序员无 ...

  2. python和java段子_python程序员幽默段子_谁说码农不懂幽默?只有程序员才看得懂的段子...

    程序员干的工作很枯燥,他们需要段子来消遣,其实他们也很幽默,很风趣的.程序员作为高智商.高收入.高压力群体,经常会有各种自嘲,而且还天生携带段子手基因.不信看看下面这些段子,一般人哪能懂!谁说程序员无 ...

  3. 程序员也分三六九等,顶级码农水平,肝一辈子也没用

    物以类聚,人以群分,在一切以技术和贡献说话的码界,更是如此.不知道从什么时候开始,程序员就有了等级的划分.有趣的是,80%的程序员只做出了20%贡献,很符合二八定律.干着农民工的活,肝一辈子的代码,依 ...

  4. 2021全球程序员收入报告!字节高级码农年薪274万元排第5

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看 报道 ...

  5. 某大厂程序员吐槽:在北京当码农,不敢结婚不敢生娃,真是注孤生!

    在北京大厂当程序员,年薪几十万甚至上百万,听起来还挺不错的.但生活如人饮水,冷暖自知,身在其中的人未必会这么觉得. 一位程序员发帖吐槽:在北京当码农真的是能一眼望到头!在大厂年包几十万.上百万,慢慢能 ...

  6. 程序员如何避免「温水煮码农」

    大家一定都有过这样一个阶段:感觉自己掌握的知识技能基本上可以胜任当前的工作,而一段时间内又不会有更难更高级的任务落在你头上.这个阶段会比你每天被工作为难的加班加点学习的时候要舒服的多,但是除了工作的熟 ...

  7. 如何成为一个优秀的程序员

    本文给出了十五个评定软件开发人员的标准,可以帮助程序员朋友从一个好的程序员成为一个优秀的程序员,和大家共飨! 怎样评定一名软件开发人员?这是一个颇为奇怪的问题.现在已经有了很多的理论和形式来做这件事, ...

  8. 我算是优秀的程序员吗?

    介绍 我已经工作5年之久,但我还纠结于是不是优秀的程序员,怎样做优秀的程序员这些问题当中. 心态 我经常问自己,我算是优秀的程序员吗? 有的时候我觉得自己是优秀的程序员,什么时候呢? 当我解决问题的时 ...

  9. 关于程序员的那些事——一个五年程序员的总结

    一晃,做了五年多的程序员了,感觉自己应该是程序员大军中比较典型的一个,班科生毕业,直接加入了软件开发的行列,先是小公司,然后大公司,走了一条典型的程序员的路线. 虽然我不是大牛,但是感觉在我这样普通程 ...

最新文章

  1. app图标圆角角度_?APP图标造型分析
  2. 【笔记】mybatis的sqlSession和Mapper详解
  3. 从零开始学习docker(十一)介绍Docker Compose yml文件介绍
  4. Spring 全局异常捕获
  5. Android-support-v4源码查看
  6. 新浪的动态策略灰度发布系统:ABTestingGateway
  7. 《深度学习笔记》——训练加速篇
  8. shell之文本过滤(awk)(转)
  9. 前向算法(Forward Algorithm)
  10. DevComponents.AdvTree 相关笔记
  11. aucc2018插件_Voxengo音频插件合集2018最新版
  12. 前端计算机英语单词,解决文件命名,变量命名头皮发麻,单词超多1700个前端专属单词,css常用命名单词【起名字太烦了全背下来内卷吧小伙伴大前端时代来临了】
  13. node.js 执行JS文件连接数据库报错
  14. Hyperic HQ简介
  15. 成功申请美国研究生的10大潜规则
  16. 博客系统与CSDN博客
  17. 关于“部分便笺的元数据已被损坏,已将其恢复为默认值”的处理办法研究
  18. android 2048 动画,大杀器Bodymovin和Lottie:把AE动画转换成HTML5/Android/iOS原生动画
  19. Multimodal Learing with Deep Boltzmann Machines
  20. 记录一次FTP登录500 OOPS:cannot change directory解决方案

热门文章

  1. POJ 2195 Going Home / HDU 1533(最小费用最大流模板)
  2. 在 Java EE 组件中使用 Camel Routes
  3. 【基础】华为设备默认路由和静态路由配置实战
  4. zabbix 2.0.6监控cisco交换机 2950 2960s 3560G
  5. 运维太忙?那是你还没掌握 Ansible !
  6. html 文字只设计一段颜色,html – sphinx,reassuredtext:为单个字设置颜色
  7. MybatisPlus性能分析插件
  8. Nginx限流-速率实现
  9. flume高可用-balance-测试运行
  10. 字节输入流一次读取一个字节的原理