`

谈谈对程序员的培养

阅读更多

这篇文字是我好久以来的想法,有一些感悟,有一些激烈的言辞,我很自豪我就是一名程序员,我希望给程序员或者前程序员们带来一点启发。也许你认可我的言辞,也许你不屑我的观点,无论如何,欢迎谈谈你的看法。

 

让程序员做更多种类的事

为什么有人说小公司锻炼人?在小公司,条件并不那么齐备,很多事情都需要程序员自己做,自己去澄清需求、自己做设计、自己搭建环境、自己测试,甚至自己上线、自己维护(这件事情在我们团队被称为“自己吃自己狗食”)。

然而到了某些公司,在一些正规的流程下,“人”反而显得不那么重要了:一个完、整的流程被切分成若干环节,程序员只能负责那小小的一环,更严重的是,他们显示出消极和片面的情绪,他们称自己码农,自嘲并且觉得在总做一些低级和毫无技术含量的事情。

 

关于“码农”——这似乎是一件很悲哀的事情,在美国,程序员是一个相当值得尊敬的行业,去年硅谷的技术员工年薪平均已经超过10万美元;在中国,教师的行业起码获得了人们口头上的尊敬(虽然实质上也许并没有获得应有的待遇),而程序员,往往只能看到自己给自己呐喊。

这里没有绝对的对错之分,但我一直在博客中强调软件开发实质是一种创造性的劳动,只是在一个流程严格控制的公司内,这样的创造的火花可能被扼杀,换来的好处是人员的流动中,代价最小化:谁都可以走、谁都可以代替谁,所有问题都被认为只是时间问题……那么,程序员,你的自我价值何在呢?

 

关于测试

我听到很多真实的声音,都在抱怨测试工作乏味、加班辛苦。我认为,国内大部分的测试,其实完全是程序员扭曲的工作形态导致的。

专职的测试人员去做专项测试、整个系统的集成测试等等,我都能理解,但是绝对不应当深入模块内部去测试开发人员的代码,绝对不应该去考虑所谓的代码覆盖率——因为这些,比如白盒测试,本都是程序员自己该完成的事情。程序员自己开发的程序,当然要自己验证功能,很多软件公司在一些项目流程里就是没有专职测试介入测试执行,原因很简单,难道自己拉了稀,让别人给你擦屁股?

另一方面,测试该掌握哪些技能?

我见过许多测试人员,他们抱怨工作总是被轻视,没有说话的分量,但是每天的工作就是了解开发的流程,根据流程完成用例的编写,然后执行那些用例,发现bug并填写bug report。如果一名测试只需要做这些事情,那么确实太没有技术含量了、太没有入门门槛了,太单调乏味了。

测试需要成长,既为自己考虑,也为团队中的程序员考虑。

做一名优秀的测试,除了要有分析能力、辨识能力等等软实力以外,基础技能如通信协议、脚本、编译原理、操作系统等等,亦视情况掌握,只有这样,才能和程序员从并不清晰的需求开始,一起去分析、设计、实现和质量保证、去和上上下下的环节做沟通、论证。微软的测试(SDET)都把算法和编码视为基础要求,敢问国内一些公司的测试人员,有几个敢这么说?

 

让程序员远离浮躁

去看看国内几家知名博客和论坛,多少浮躁的博文和帖子四处乱飞?多少人在骂公司狗血,在自嘲薪水,甚至在人身攻击?

浮躁的心态可能是造成这种现象的罪魁祸首,有一位同事说得好,很多具体的技术都可以学,但是执着的心和对技术的热爱是不容易学得的。

整个社会都在日益浮躁,ITEye本来也是一个有技术深度、氛围浓厚的网站,现在看起来有些鱼龙混杂;微博的流行正验证了社会浮躁的趋势,很多人没有时间和耐心去写完整的文章,但是两三句感慨、甚至一词半句的惊叹却容易得多;程序员像寻找速配男女一样,在这个概念翻飞的时代,茫然地寻找自己应该进入的领域,应该了解的技术,于是,很容易看到许多所谓的架构师和咨询师可以把这些东西讲得海阔天空、天花乱坠,这个概念、那个素语,但是——给他一个具体问题吧,要他写写实际代码吧,你会要了他的命

 

给程序员一点宽松和鼓励

都在说国内的IT环境不如欧美,大量劳动力的富余让人力成本变得无比廉价,能让青年付出卖肾代价以购买大部分配件都“Made In China”的iPhone,中国却只获得了1.8%的利润,这些都让人感叹,为什么中国做不出苹果系列这样的产品?为什么中国始终要给别人套上“廉价劳动力”的帽子?中国的程序员,你们的创造力呢?你们精彩的点子呢?

好吧,我听到有人在说是教育体制的问题。对于程序员的地位的思考有很多,可惜我们不是教育工作者,我们也没有那么大的影响力,不过,在团队中间,我们应当多给予这些脆弱的程序员们一点鼓励,让他们表达出自己的想法,特别是在设计上、实现上的想法,不要嘲笑任何人弱智,不要咒骂评审的代码狗屁,多一点沟通,把眼光放长远一些。

这些能表达出想法的人起码可以证明两点:有思考、有勇气,仅这两点,仅足以让旁观的人鼓掌。

一名优秀的Team Leader,不应该整天陶醉在跟踪项目进度和获取程序员工作反馈上。我们都明白,所谓一张一弛,在工作压力恰当的时候,是最适宜工作的,程序员的工作本来就需要创造性,没有适度宽松的环境,就没有思维的火花。

让程序员自己去布置工作台,给他们创造机会聊聊天,把各个团队、各个角色放到一起说说话,组织分享一些有趣的话题,做一些有意思的研究(最初程序员都很腼腆,得劳烦您多牵线搭桥了),Team Leader的工作,绝不仅仅是说“行”或“不行”

 

程序员的理想

1983年,乔布斯对百事可乐的CEO John Sculley说:“Do you want to sell sugar water for the rest of your life, or do you want to change the world?”(你想卖一辈子糖水,还是改变世界?)。

我们已经不在战火纷飞的年代,有多少程序员还愿意怀抱那些原始的理想,还能说出“做互联网的弄潮儿”、“用技术改变世界”这样的话来?

这个世界执着的人并不多,用这样的理念去吸引程序员的公司,则更少。

 

关于技术

我始终觉得,做软件的公司是需要依赖于技术的,当然国内可以称得上是“技术公司”的并不多,但是,优秀的技术能让程序员脱颖而出,也作为一种谋生的手段,为其觅得不错的回报。

做技术能不能一直有饭吃?我想答案是肯定的,有许多公司声称技术路线可以一直有发展的可行性,但是技术牛人还是转了管理或者一走了之,有一种粗暴但是易行的鉴别技术公司的办法,就是寻找里面又没有40岁,甚至50岁以上还在做实际设计和编码的人(不是那些脱离了具体实现向客户吹嘘的角色)。

世界上有两种最赚钱的人,一种是真正的生产者,他们用自己独一无二的聪慧、灵感和劳动创造了价值;一种是极其老道的投机者,专门从别人口袋里把钱掏出来放到自己口袋里。他们都受人尊敬、受人瞩目,后一种让自己的生活变得更美好,但是前一种,让整个世界更美好。

如果你不能在技术的道路上坚决地走下去,在大部分公司做市场、做管理、做咨询,顺便鄙视一下别的辛苦工作的程序员,那么也可以混得很好——毕竟,生活的解总是有很多种。

 

文章系本人原创,转载请注明出处和作者

 

注:本博客已经迁移到个人站点 http://www.raychase.net/,欢迎大家访问收藏,本ITEye博客在数日后将不再更新。

 

174
16
分享到:
评论
23 楼 qujunxi 2012-03-16  
22 楼 cxh116 2012-03-15  
很赞同博主的观点.

在很多人心底,特别是做企业开发的人,都认为技术不重要,业务才是王道.
软件只要写出来可用就行了.根本不去考虑什么叫整洁可用.

  关于让程序员做更多事,我觉得你说的那些都是必须要知道怎么做的.生产环境不可能完全与开发环境一样.出现了开发环境没有的问题,你得知道线上的环境的情况才好解决.
  自己写的代码,不自己测试,那估计很多炸dan隐藏在程序里.
  需求在纸上考虑的再清楚,在编码的时候,还是有些细节会需要确认的.
  而且像部署,测试,这些应该是自动化的.而不是手动操作的苦力活.

  个人认为:
  侠客们的信念是追求正义,不用下流的手段打败对手.
  程序员的信念是写出稳定的程序,代码整洁可用.
  可是现实大部分是,什么手段不重要,重要的是打败对手.代码质量不重要,重要的是快点拿到钱.

  要写好软件,对于普通人来说,真的很不容易.
  技术的积累,思想的转变,周围的环境.这些都与程序员的成长息息相关.最重要的事,得花很多时间去看书.
21 楼 cxh116 2012-03-15  
很赞同博主的观点.

在很多人心底,特别是做企业开发的人,都认为技术不重要,业务才是王道.
软件只要写出来可用就行了.根本不去考虑什么叫整洁可用.

  关于让程序员做更多事,我觉得你说的那些都是必须要知道怎么做的.生产环境不可能完全与开发环境一样.出现了开发环境没有的问题,你得知道线上的环境的情况才好解决.
  自己写的代码,不自己测试,那估计很多炸***弹隐藏在程序里.
  需求在纸上考虑的再清楚,在编码的时候,还是有些细节会需要确认的.
  而且像部署,测试,这些应该是自动化的.而不是手动操作的苦力活.

  个人认为:
  侠客们的信念是追求正义,不用下流的手段打败对手.
  程序员的信念是写出稳定的程序,代码整洁可用.
  可是现实大部分是,什么手段不重要,重要的是打败对手.代码质量不重要,重要的是快点拿到钱.

  要写好软件,对于普通人来说,真的很不容易.
  技术的积累,思想的转变,周围的环境.这些都与程序员的成长息息相关.最重要的事,得花很多时间去看书.
20 楼 xf_zhanghaidong 2012-03-15  
,,说出来 大部分程序员的心声啊啊
19 楼 lanlei0616 2012-03-15  
听君一席话,胜读十年书
18 楼 stormtoy 2012-03-15  
写的不错 ,我也很热爱程序员这个职业
17 楼 suu 2012-03-15  
jiaoronggui 写道


让程序员远离浮躁,整个社会都浮躁,程序员能独善其身吗?


关于测试,这个比较赞同,其实整个开发都是这样,如果你做的只是coding的工作,还期望的得到别人的尊敬吗?


这是这个行业更加浮躁罢了,每天面对网络,信息量的摄入大.很容易浮躁..
16 楼 dengmawei 2012-03-14  
看了之后,感慨良多,受益匪浅,有思想,有勇气,朝着这个方向努力!
15 楼 lg68730457 2012-03-13  
public static void main
14 楼 轻指飞扬 2012-03-13  
浮躁,想去小公司锻炼。
13 楼 javalinjx 2012-03-12  
说得不错。。偶也要好好培养。。
12 楼 lvjun106 2012-03-12  
不想说什么。只按一个顶字。和楼主共勉
11 楼 该用户名已经存在 2012-03-12  
火哥简直是我生命中的一盏明灯,每次看到你的文章都有自己独特的视角和见解,我想只有一个热爱生活,热爱思考,热爱生命的人才能有如此言辞和胸怀,其实很多方面我感觉和你挺像的,“微博是社会浮躁的体现”,也体现了现在整个社会人内心的孤独和虚荣,很多人类的丑恶和社会现象,都在因为网络的日益发达而暴露无遗。不说这些了,火哥说的很有道理,真是有一点“相处恨短”的遗憾。
10 楼 Mr_lee_2012 2012-03-12  
我感觉,目前的确如楼主所言。我们需要的是重新审视一下软件行业,重新定位。也许,我们更需要一个榜样。一个令人称道的样子。
9 楼 zuishengmengsi1990 2012-03-12  
浮躁,,这个社会太浮躁了。。。
8 楼 Mybeautiful 2012-03-12  
写的很好,关于锻炼人的问题。其实各自都锻炼,只是侧重点不一样而已。
小公司你也许多了很多技术,在技术上有提升。但大公司由于你一般都集中于一点,你会变成某个方面的专家;而且公司内部有很多的专家,有意无意的交谈会带给你一些启示;还有就是大公司的流程本身不是也可以学习锻炼的吗。
7 楼 dicmo 2012-03-12  
雅马哈大野熊 写道
LZ,你好。
我是一名就读本科的大三学生。
很庆幸自己,在大学期间找到了自己所热爱的Coding Work.
我认真的读完了您的每一个文字。
我想对您表达我个人的尊敬吧,
我对编程的热爱远远大于其背后为我带来的效益,
我也因为不愿意报考公务员,走上了编程的道路而和父母关系很僵。

李刚的疯狂JAVA讲义 的封面上那句话:
  疯狂源于梦想  技术成就辉煌。
希望我们能够以此共勉。

在学习JAVA的路上,我看了Spring Strut2 hibernate 等开源框架,
其枯燥让我也产生了你说的那种浮躁。

但是今天,我会觉得我的代码中 会用到线程安全集合 和 弱引用 而觉得自己真的Cool
极了。

一步一步来吧,加油。

用LG讲义java入门的路过
coding your own way!!!
6 楼 雅马哈大野熊 2012-03-11  
LZ,你好。
我是一名就读本科的大三学生。
很庆幸自己,在大学期间找到了自己所热爱的Coding Work.
我认真的读完了您的每一个文字。
我想对您表达我个人的尊敬吧,
我对编程的热爱远远大于其背后为我带来的效益,
我也因为不愿意报考公务员,走上了编程的道路而和父母关系很僵。

李刚的疯狂JAVA讲义 的封面上那句话:
  疯狂源于梦想  技术成就辉煌。
希望我们能够以此共勉。

在学习JAVA的路上,我看了Spring Strut2 hibernate 等开源框架,
其枯燥让我也产生了你说的那种浮躁。

但是今天,我会觉得我的代码中 会用到线程安全集合 和 弱引用 而觉得自己真的Cool
极了。

一步一步来吧,加油。
5 楼 diaoliwei2 2012-03-11  
让程序员远离浮躁

4 楼 lou_0801 2012-03-11  
确实,我们在这样的环境下需要更多的鼓励

相关推荐

    作为程序员的基本素质

    另一方面,也需要培养解决问题的能力,能够在遇到难题时迅速找到解决方案。同时,上进的态度还包括积极面对变化,愿意接受新的工作方式和方法论,如敏捷开发、持续集成等,这些都是提高工作效率的有效手段。 #### ...

    第2章 做好程序员.pdf

    首先,让我们谈谈程序员这一职业本身。作为程序员,我们的主要任务是编写、调试和优化代码,构建高效、稳定的软件系统。这要求我们对编程语言有深入的理解,如C++,它是许多系统级和高性能应用的首选语言。掌握C++...

    程序员成长路线图:从入门到优秀

    ##### 1.2 谈谈程序员的基础知识 对于想要进入编程领域的新人来说,了解必备的基础知识和技能是非常重要的。这不仅能帮助他们在职业生涯初期打下坚实的基础,还能促进长期的职业发展。 **基础知识:** - **计算机...

    程序员职场第一课(技术之外要有灵魂) pdf

    在这个快速发展的数字时代,程序员需要的不仅仅是编程技能,更重要的是培养一种"灵魂",即软技能、沟通能力、团队合作精神、自我管理以及对行业的深度理解。 首先,我们来谈谈技术之外的软技能。软技能涵盖了沟通、...

    程序员需要经常刷题吗-u-boot:U型船

    首先,让我们来谈谈程序员是否需要经常刷题。刷题可以帮助程序员巩固基础知识,提高编程效率,尤其是在面试准备阶段,刷题是快速检验和提升自己技术实力的有效方式。常见的刷题平台如LeetCode、HackerRank等提供了...

    清华万博IT求职宝典(PPT)

    首先,让我们来谈谈“IT职业发展”。在IT行业,职业发展路径通常包括程序员、软件工程师、系统架构师、项目经理、技术主管、CTO(首席技术官)等角色。每个阶段都要求不同的技能和经验积累。例如,从初级程序员到...

    c++语言适合多大的孩子学?.docx

    然而,孩子学习 Scratch 一段时间后,图形化编程语言对他的帮助越来越小,这是因为设计精炼的工具和案例,时间久了容易限制孩子创造力的培养。 因此,对于孩子学习 C++ 语言,我们需要选择合适的入门语言。Python ...

    poj1000-1200部分代码

    C++以其高效、灵活性以及对底层控制的强大能力深受程序员喜爱,尤其在算法竞赛中有着很高的地位。而JAVA则以其简洁的语法、自动内存管理及跨平台特性吸引了很多初学者。在这些源码中,初学者可以学习到如何在实际...

    编程建议,多种资料,适合新手

    因此,在准备面试时,除了学习基础知识,还要多做练习,培养解决问题的实际能力。 总之,这个"编程建议"压缩包文件提供了一个全面的学习路径,从基础的编程理念到高级的技术讨论,再到面试的实战准备。对于每一个...

    数据结构与算法_1.1 编程的灵魂:数据结构+算法_数据结构与算法_数据结构_

    数据结构与算法是编程领域的核心组成部分,它们是程序员掌握高效问题解决能力的关键。在这个主题中,我们将深入...因此,无论你是初学者还是经验丰富的开发者,深入学习数据结构与算法都将对你的职业生涯产生深远影响。

    数据库的应用

    这需要一个数据库来系统地记录和跟踪每个组别的详细信息,如注射的细胞数量、培养条件、手术过程、荧光信号检测以及后续的解剖结果。数据库可以设计成包含以下字段:实验组别、实验动物ID、细胞系、注射时间、肿瘤...

    算法与数据结构教程(C++版)源码唐宁九

    首先,我们来谈谈“算法”。算法是解决问题或完成任务的一系列明确指令,是计算机科学的灵魂。常见的算法包括排序算法(如冒泡排序、插入排序、选择排序、快速排序、归并排序等)、查找算法(如线性查找、二分查找)...

    单元测试里面,进行Junit测试所需的jar包以及SoMonitor测试软件包

    JUnit是一个开源的Java库,它允许程序员编写可重复运行的测试用例。在JUnit中,每个测试用例都是一个独立的Java方法,通常以"test"开头。通过注解(如@Test)来标识这些方法,JUnit框架会自动执行它们并报告结果。...

    北大算法.rar很多经典算法

    这些资源对于学习算法、准备面试或是提升编程能力的程序员来说是极其宝贵的。 首先,我们来谈谈算法的重要性。算法是计算机科学的基础,它是解决问题的精确步骤,用于指导计算机执行特定任务。优秀的算法能够高效地...

    《数据结构与算法分析—Java语言描述》

    首先,我们来谈谈“数据结构”。数据结构是计算机科学中的基石,它研究如何有效地组织、存储和处理数据。常见的数据结构包括数组、链表、栈、队列、树、图等。书中会详细阐述每种数据结构的特点、操作方法以及它们在...

    python 100li.zip_2OC_python 题

    首先,我们来谈谈Python的基本语法。Python以其简洁明了的语法规则著称,如缩进代替大括号表示代码块,以及其易于理解的变量声明和赋值方式。初学者可以通过这些练习熟悉基本的变量类型(如整型、浮点型、字符串、...

    MITx-6.00.2x:MITx的编码练习,问题集和讲座代码

    这些基础元素是所有编程语言的基石,通过反复练习,学生可以加深对编程逻辑的理解,提高解决问题的效率。 问题集的设计旨在检验学生的理解能力和独立思考能力。这些问题可能涵盖算法设计、数据分析、概率统计等多个...

    datastructures-and-algorithms

    这个存储库旨在通过解决实际的编程挑战来帮助开发者加深对这些核心概念的理解。 首先,让我们讨论数据结构。数据结构是组织和管理数据的方式,它影响了数据的访问效率和处理速度。在这个项目中,可能包括了如数组、...

Global site tag (gtag.js) - Google Analytics