中国软件开发工程师之痛
在近期的一次会议上,有高层谈到之前在中国觉得自己做得很牛,但与美国同行接触后却发现与人家存在很大的差距,这一点我在外企工作时也有过同样的体会。真正与外国同行接触后才会知道什么是差距,在这篇文章中我从软件开发工程师的角度以“痛点”的形式来谈一谈我所认为的差距。
技能之痛
相当数量的软件开发工程师(后面简称为工程师)认为除了与编码相关的内容外,其他技能都不重要。在这种意识的引导下,很容易出现的一个普遍现象是技术能力不错,但开发能力却不行。这种现象的另一种表现是:单干可以,合作不行。
技术能力是指个体对某些技术知识掌握的深度和广度,而开发能力除了包含技术能力外,还涵盖个体在项目运作过程中所需掌握的其他能力。
高效的团队一定离不开通过知识管理将个体所掌握的知识通过分享而沉淀下来。分享途径无外乎通过一定形式的文字和(或)图,这就要求工程师掌握使用象Word、PowerPoint、Excel、Visio(和UML)这类工具的基本能力,并具备良好的写作与表达能力。表面看来这种能力与编码能力无关,因而也得不到工程师的普遍重视,也因此成了一个痛点。其实,写作与表达能力与编程水平息息相关,因为它们都在考验我们的逻辑思维和概念能力。忽视掌握必要工具软件的工程师难道以为编程语言是知识分享的万能工具?
个体具备良好的沟通能力是项目顺利运作的基石。不良沟通表现为:工程师在团队合作中更多采用被动询问而非主动汇报、不会辩论、对于他人指出的错误表现得“自尊”和狡辩而非感谢或承认、对于被邀请的各类审查活动(如设计审查、代码审查、文档审查)不是积极响应而需别人催促。在团队中,如果技术管理者不能很好地引导,个体沟通能力的缺乏很容易在团队中引发“一言堂”或“无政府主义”问题,工作效率低下则是必然。
专业精神之痛
不少工程师对于自己的职业缺乏精神上的追求,工作起来不求专业,只求“代码能工作就行”。这类工程师容易将经验与资历等同,以为工作年份越长就越有经验,实则不然。工作年份越长资历是越老,但如果专业水准没有在过程中不断提高的话,所获得的经验很可能趋零。
什么是专业?专业是指我们应以业内所广泛达成的共识去从事软件开发活动。这里的“业内”并非只指“国内的”,而是指“国际的”;“专业”也并非单指技术内容(比如,编程语言、算法等),还包含软件项目运作中的其他各个方面(比如,开发方法、建模工具、流程、质量保证手段等)。要做到专业做事一定离不开不断地学习,只有这样才能了解行业的动向。
软件行业虽然没有“银弹”,但仍存在不少有效改善开发质量与效率的方法。只有抱着专业做事的态度去工作,我们才有可能去实践这些方法,并在实践过程中思考这些方法的内涵与不足,进而为自己的工作量体裁衣。千万不要认为“反正业内没有银弹,我要去学那么多方法干什么?”
强调专业做事的根本目的,是使我们的做事方法更科学。与我所了解的美国、俄罗斯这些国家的工程师相比,我国工程师的专业化还有很长的路要走。
速度之痛
除非你完全认可中国近些年以GDP为导向的经济发展策略,否则很可能得反思一下软件行业所鼓吹的“唯快不破”策略,尤其是互联网领域。
在商业环境中,“快”能获得很多竞争优势,这毋庸置疑。工程师的价值虽得(最终)体现在商业产品上,但千万不要忘记了我们始终是一名工程师,在实现商业价值的道路上不断提高自己的专业水准无论如何都不应被忘记。工程师始终要明白,公司的发展与自身的职业发展并非完全统一。如果在公司的发展过程中我们的专业水准并没有“水涨船高”,那除了说明我们在吃老本外,还表明我们很可能是在“拖后腿”。在这种情形下,即使公司蒸蒸日上地给我们发薪水,但从个体职业发展的角度说来,公司发展其实与我们“一毛钱关系都没有”。我想不致于有人认为自己以后只会在这一家公司干吧!如果真是那样想,你能保公司几十年存在?届时万一得无奈地离开公司,单薄的专业水准又如何在人才市场与他人竞争?
对“唯快不破”的误解所带来的不良后果是,有些工程师为了快速实现软件功能而忽略了专业精神。他们一味地为了速度而筑下高额的“技术债”,甚至在“速度”的幌子下过得心安理得。
如果将“唯快不破”改为“唯效率与质量不破”或许更不容易形成误解。一说到“快”,给人的感觉往往是投入更多的时间就能达成目的,容易让人忽视做事的方法与效率。与之不同的是,强调效率需要我们考量投入时间的产出比,且暗示做事的方法只有对路才能获得效率;强调质量则提醒我们尽量别做“豆腐渣”之事,而这隐含的内容是我们必须专业做事,即使欠下了“技术债”它也时刻提醒着我们那是一定要还的。
软件行业的长期被动加班成为了速度之痛的一个缩影,它让不少工程师过着有工作没生活的日子。软件行业要避免偶尔、短期的加班是不可能的,但长期的被动加班绝对是个问题。不重视效率与质量的“勤劳”除了是在浪费外,更是一种透支将来的短视行为。
视野之痛
视野之痛体现在工程师在从事技术工作时,忽视了解国外的发展状况。他们因为不知道同质开源项目的存在而走上“重新发明轮子”的道路,甚至发明出“三角形的轮子”;也因为对英文资料缺乏阅读的耐心而不去了解相关国际标准、订阅开源项目的mailing list和专业网站的newsletters等。
狭窄的视野很容易让人自满,以为软件开发就是那么简单,最后导致成长慢、意识与技能“不入流”。
以我的经验来看,工程师如果不能很好地阅读英文资料则要达到高技术水平实在很难,视野狭窄也恐成必然。另外,编程活动中的命名环节其实对我们的英语水准提出了一定的要求,不然很容易动名词不分而写出只有自己容易读懂的程序,或常出现命名时找不到合适的单词去精确表达程序意图。
持续发展之痛
以上各痛点的最终结果又给我们带来了持续发展之痛。其表现为:少有人会在项目中通过文档提升开发效率;鲜有人会持续改善软件的设计质量;大部分人只关注短期完成工作,而忽视短期行为所带来的高额隐性成本。
持续发展之痛使得工程师很难轻装上阵,工作精力过多花费在重复、低级的琐事上,而非用于学习和思考。最终结果是将工作变成了“青春饭”,辛苦但却看不到美好的未来。
所有痛点可以归结为意识的陈旧,或虽有意识却无力于将其转变为能力!(注:意识是一种行为,而非能力)
当然,这些“痛”与我国的社会大环境有着紧密的联系。但无论是怎样的环境,总有人做得出色,或许他们身上有我们所没有的内容。是什么?只有自己去想、去悟,成长之痛! 即使大环境好了、大家都很“专业”,职场的“金字塔”总是摆在那的。谁能向上走?走多远?全靠个人,没有shortcut!只不过每个人都平等地拥有向上走的机会与权力!
流氓本色!
我现在手中的代码,原来是有十几个老外码农整出来的。现在只有我和另一个新手在干,还作得好好的,而且这还不是我们工作内容的全部。
??? ????? ??
流氓本色!
近代因为战争才发现原来自己很挫,认识到了自己过去一部分观点的不适应时代,所以现在基本不会有什么人把科技称之为“奇巧淫技”了,多少有了一部分进步,未来不知道。
但是国家本身还是一个玩弄权术的国家,这点是完全可以看出来的,都不需要上升到国家的层次,其实西工大本身就说明了问题,在瓜大玩弄权术还是最重要的。
有时候图快的原因一方面是 “差不多” 就行,胡适的文章 “差不多先生” 上个世纪初就写出来了。
另一方面是因为有些行业的一部分产品在国内属于劳动密集型,这种情况下,当然图快了,因为所有东西都有别人做好了。
一些做组装的地方,还能如何呢?
如果希望做的很高端,当然要追求“细节”,不过,也要看环境是否允许。
写这篇文章的人,看他呆的地方吧,有些地方文档很齐全。
铁匠那边应该比LZ所说的情况好多了。传统IT好些的地方应该是很重视流程文档合作的。
LZ的这篇文章,把题目中的“软件开发”换成 “机械”,“工艺”等等等等,我觉得都是成立的。这不是某一个行业的问题。
还有一个就是语言,印度在IT的某些方面比中国先进,也是沾了英语的光,现在流行的技术先进的技术,文档资料还基本上是英语的,这也制约了大部分英语不好的IT人员。
再补充一点:GFW绝对是制约中国IT业发展的重要因素之一!
早睡早起身体好!
早睡早起身体好!
大部分的人毕业后的工资,租个房后,就所剩无几了,只好拼租。当年回龙观那几百块钱的房子,已经成为了一个历史了。
??? ????? ??
所谓“低才高就”,简单点就是说行业需求缺口很大,但真正“合格”(按楼主要求,简单点归结能开发懂英语会沟通的程序员)的人才没有那么多,且IT各细分行业对人才的要求不是严格一致,故而为大量“简单码农”的存在提供了客观合理性。
从这个社会的经济运行、分工与酬劳分配层面看来,x人的社会中y人来做程序员的活,这y人全部都是合格的复合型人才也罢,还是少量合格人员+大量简单码农的组合也罢,其整体从社会中获得的分配大致是固定不变的。换句话说,假设“上帝之手”把y个程序员中z个“简单码农”全部换成合格的、优秀的人才,由于这y个程序员中的总体酬劳还是一样的,那么这y个程序员照样会出现层次分化,照样会有z个优秀人才拿着之前z个“简单码农”的工资。这样一想,岂不是更加痛不欲生?
故而,对于现在觉得自己“痛不欲生”的“简单码农”而言,一方面应该感到庆幸:行业发展不够发达使得一部分低端工作岗位仍然可以比较容易的得到;一方面应该有危机感:IT业越发展,被优秀人才替换出当前的低端岗位的可能性越大,“求向隅而安”终究不可得。
综上,在快速进化的行业中,不断提升自己才是王道。
Honey badger don't give a shit.
早睡早起身体好!
挣点钱,开个羊汤馆。
1.逃避不是解决办法,畏惧无济于事,正视缺点,拔出自己手中的剑,为犁开路!
2.如果一件事情你有了100%的把握再去做,你连入局的机会都没有了,有50%把握去做也许还有一半的机会,有30%把把握就可以干。人生就像赌场,不下赌注,永远不会成功!
北大教授健康讲座(看完后保证你能多活十年)http://v.youku.com/v_show/id_XMTIxNzM3MTY=.html
中国的大环境就是这样,粗放型的,就好像我天天给国外代工就能挣着钱,那我干嘛非要费老了劲去开发自己的技术和品牌。
但我觉得肯定不能一直这样下去,迟早要把水平提上去,但都是被逼的,不提高自己的硬实力以后肯定要被淘汰的。
我只想变得更强,仅此而已
每个sprint2周,10个工作日,理论上80个小时,实际大概9点半到6点,除去中午1.5小时吃饭休息,总共70小时
每周weekly meeting(team) 1h,每个sprint总共2h
每周weekly meeting(project) 1h, 总共2h
每周和PD/PM的sprint meeting 1h,总共2h
每周English training 1h,总共2h
每周Technical seminar/life discussion(team内部) 1.5h, 总共3h
每天daily scrum 15min, 总共2.5h
sprint planning 0.5h
每周fruit time 0.5h,总共1h
每天email阅读,撰写,至少0.5h,总共5h
Monthly funtime 3h,平均1.5h
季度all hands 3h,平均0.5h
季度team building 3h,平均0.5h
Training(Internal/External),平均每月半天,每个sprint2h
2+2+2+2+3+2.5+0.5+1+5+1.5+0.5+0.5+2=24.5
每个sprint在项目上的工作时间也就是70-24.5=45.5小时,加上总会时不时晚点走,有时早点到,平均下来每天5小时在开发上
开发工作分为两大类:user story和defect,不管是新功能还是修defect,讨论是少不了的。user story主要和PD/PM交流,后者和QA的交流多些。大的user story,开会也少不了。对外的交流,要建立在自己研究的基础上,研究也要花时间的。
代码写好之后,在本地基本调通后,要保证提交的质量,更真实的测试要花时间,新机器(拷贝VM),安装卸载软件,拷贝patch,测试功能,甚至跑跑automation
提交的多了,会有很多风险,尤其在release前几个月(根据产品大小),Code review经常也是必须的,代码细节往往也要推敲,经常也得花个半天时间吧
这样下来,每天写代码的时间真没多少,量也多不到哪去
不过我感觉写代码的时间一般不会太多的,如果你一天到晚光写,那一天的产能不是100行,而是1万行。大部分的时间还是花在思考上,写成最终的代码所用的时间可能就是一两个小时。
??? ????? ??
2. 最讲究流程的,往往是最没含量的外包, CMMI之流, 自己骗自己用的
3. 国内Top级别的公司,技术水平还是不错的, 在世界范围内,都是不错的.
4. 大学里还是教授些基础知识为好, 紧跟潮流,什么流行教什么, 那是蓝翔技校, 北大青鸟关注的东西.
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
压力少,钱当然也没有互联网那么多
早睡早起身体好!
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
哎,工作之后,不想学习,不想写代码,给自己定的任务也经常不能完成。
不同类型的工作需要大脑工作在不同的频率上,越是对创造性、对知识的深广度要求高的工作,越是需要大脑处于宁静放松的状态,此时大脑以alpha波为主,所以我们可以看到牛逼的公司,比如谷歌,都会刻意营造一种轻松的工作氛围,反之,国内的很多哈皮公司,把人当骡子使,以为节奏越快,公司越赚,实际上员工的总体效率却极其低下,最后是双输的结果。
南无阿弥陀佛!
就西工大来说,记得当初很多老师会在嘴上强调数学重要,可没一个人能说出数学对计算机到底有个什么用!从授课上也是,简单说计算机大体分成偏硬件需要掌握一些电子电器的部分和由计算数学衍生出的计算模型两部分,做网络、嵌入式需要更多前者知识,但国内本科阶段的内容基本属于后者,可后者最核心、基础的理论计算机或者计算数学课程国内99%的学校完全就没开设!并不是开玩笑,国内大部分认真听完课的学生到毕业都不一定说出图灵机是个什么,学完离散数学甚至不知道悖论对计算机的影响、对稍微复杂的图论也是无从下手;还有最让我个人诟病的算法,完全被当成背诵单词一类的科目来授课!严格说起来类似解决简单递归方程、indicator random variable、哈希函数之类的数学问题高中知识就足够了,可国内历来传统都是只关注应用,对背后的数学根据毫不关心,造成大多数人对计算机的理解真的很肤浅,还有我个人认为非常有用的数学逻辑、数论和一些证明、推导方法也被无情的忽视了。现在想想当年老师竟然会提出做一个跨语言消除一些实时错误的项目,最后学生加设各样条件老师不满意学生很委屈不欢而散,不客气的说,这样的项目从计算机教授嘴里提出真是笑话……
另一方面一些相对“没用”的课数量过多,比如各种电路,各种语言,各种新技术等等等等……首先,国外顶尖高校甚至就没有专门对计算机学生开设的语言类课程(通常只会有一门稀奇古怪的语言引导入门,习惯计算机用语,仅此而已),很多被国人看的津津乐道的国外名校教程不过是夏季赚钱课程的录像!其次,太多相对无用的电子电器方向课程,并且这些课程和计算机的联系老师自己也绕的云里雾里。当然国内在特定领域作的不错,比如软件工程,可计算机后面跟的是science而不是engineering,这样发展永远是盲目跟风,所以这么多年来只有“半个”华人姚智期拿过图灵奖
公司方面国内这么多市值超高的公司也没做出过什么真正有用的成果,反观国外各大公司招人清一色的各式算法题目,有的甚至变成了数学考试,公司内部更多人力是投入研究而不是做实际产品,而国内it公司产品线之多和繁杂真的有些惊人,仔细想想谷歌这么多年有过多少产品,也许还比不过腾讯一年的出品吧!
流氓本色!
这个学科发展太快了,大部分计算机学科的老人们觉得他们要培养的学生并还如几十年前一样,为计算中心编写高性能科学计算的程序,为航天飞机设计可以无限容错的操作系统,在研究院为埋头寻找编程语言的银弹。iphone开发是干什么的?html5,别逗了我们了,这不是小学生也能干的事么?
不过也有实用派的人再斗争,如宝玉说的,国外一些知名大学也跟随潮流引入了很多(大量的)开发导向的选修课程(不光面对计算机学生)。
国内也有这方面思考,所以各高校软件学院都起来了,但是真的教学上有什么区别呢?
也许开办一个为了培养码农的专业确实难登大雅之堂,但是既然开了那就做点改变,像现在,最后软件学院出来的学生和计算机学院出来的一个样,完全成了一个收费的幌子。
但是让计算机专业做改变确实不容易,计算机本科不做专业细分,传统课程太多了,数学类的,AI类的,硬件类的,软件类的,每一类又分为好多。
比如数学,除了高数,线代,概率这些工程必修,还要学一门离散。
AI:除了传统的AI课程,还有现在的统计学习(模式识别机器学习)。
硬件类:组成,低级语言,电路
软件类:这个更多,但是大多都跟开发没关。编译原理,操作系统,程序语言(一门过程式一门OO的),软件工程(太概念化了)。
我们学校的的计算机学院还算比较工程化,但不是面向软件开发的工程化,所以信号系统这些课也要学。
这些都讲完,还有多少时间安排别的课。
不过不安排是最好的,假如真的学校开始这类面向开发的课程,也讲不好的。白白浪费大家时间。
分割线
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回复本主题:
文章说的很有道理哈,编程之外还有很多重要的事,那些才是晋升之路的关键啊。不过我还是愿意痛下去。:D
算了,争来争去没意义,像宝玉哥那样当个稳拿最重要
Honey badger don't give a shit.
早睡早起身体好!
程序狗的一生:22岁进外包公司,每天coding到3点,近视了;25岁进IT公司任高级工程师,天天坐着成了胖子,患前列腺炎;28岁进互联网公司担任架构师,贷款买房,同年秃顶;33岁成为CTO,熬出一身病,同年还完房贷;35岁带领创业公司上市前期发现癌症晚期,挂了,同年,老婆带着孩子房子改嫁。
流氓本色!
生,一个月就能把被C++不伦不类的OO抛开,进入领导发邮件奚落,erlang的实际应用开发。一年之后,就能在核心产品组成为主力,定制erlang的底层运行环境。不得不说,智商决定了技术成长。
可惜此人太过于自傲,最后和公司所有人闹翻,转投竞争对手公司,还得意洋洋地给原部门,不得不说,情商决定了职业前景。
后来呢?后来老东家大怒,通过手段得到其私自带走公司成果的证据
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
智商决定了技术成长
情商决定了职业前景
流氓本色!
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
流氓本色!
任何职业,情商是前景的最大要素。盯着技术谈职业前景,极片面
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
早睡早起身体好!
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
早睡早起身体好!
如果真的没有成果,就不可能有这个市值,除非其它所有人都傻逼,就你天才。
我们非常需要iphone,在大陆,月薪10w以下都可以谈(我12年实习时候公司就月薪8w急聘ios开发了),不包含其它股票期权。
开发一个优秀的iphone程序,可能是给若干亿人用的,你搞个航天飞机,就给那么点人用,说实话,并不需要在某一个方向上很牛的技术,如果有,那只能是因为这个技术方向很窄,只有在航天飞机用,其他地方都用不了,所以没人研究,显得你先进,其实只是人类社会并不急需这个罢了。
只有人类急需的东西,大家才会不断投入,同时也会有各种人才进入,去把它越做越好。这个难度不是在某个实验室搞搞自己的小东西所能比拟的,因为0.001的错误,在10亿人次的量级上,都会被放大,所以互联网所需要的技术和技术深度,在某种意义上,是你举出的例子中无法比拟的。
这几个领域比拟,如果一定要选择,iphone恰恰是最不能由小学生开发的,其它几个反而可以。因为即使这些小众领域错了,影响的量级小太多。