‘壹’ 程序员是如何度过地铁上的一个小时的
之前在深圳上班,每天地铁加公交一小时十分左右。说实话,挺累的,尤其是早上,地铁人多,好多时候我都挤不上去,而且地铁里的空调实在是太冷了,总是容易被吹得生病,身上到处痛。
‘贰’ 为什么年纪大的程序员都转行了
我不确定多大年纪才算是“年纪大”。我今年43岁仍然做程序员。
从九几年开始进入这一行,中间也曾自己做过传统业行,也做IT行业不同岗位做过,在程序员的晋升通道中也做过研发总监,可这些,都没法带给自己那种写代码得到的乐趣。,最终还是又回到程序员岗位。
在中国,愿意一直写代码的人,并不多,这是事实,但我的看法是,这并不是因为年纪的原因,也不是因为竞争的原因,而主要是【中国式职业规划】和【IT企业的生存压力】的带来的。
中国式职业规划
现在很多培训机构、很多企业,都在谈职业规划。
企业告诉你:我们这个岗位的晋升通道是这样的,巴拉巴拉巴拉……
这意思就是说,你来做这岗位吧,做若干年,你就可以在这个通道上往上爬一层……
那么好了,不管这个晋升通道是什么样的,你一开始是程序员,爬几步后肯定就不是了。
培训机构告诉你:要有职业规划,要有人生规划。
在我看来,这是洗脑:他们的人生规划的核心是"努力挣钱,然后去过幸福的日子",然后根据这个再推出相应的职业规划:努力工作->获取更高的职位->挣更多的钱->更努力工作……
如果信奉了这些,那么,当一个程序员接近个人能力的瓶颈或者职业、行业的瓶颈时,感受到那种突破的压力,他就会考虑转换岗位以寻求更容易突破的方向。而遇到这类瓶颈的程序员,估计多数就是所谓的”年纪大“的范围了。
中国经济正处在高增速阶段,这导致每个家庭、每个人需要不断提高自己的收入水平以保持与之同步,这一方面导致这种将”钱“作为核心词汇的人生规划大有市场,另一方面,也使中国企业的生存压力高于其它国家。
IT企业的生存压力
世界的变化正在加速,在IT这个行业尤其显着。
对企业来说,速度就是利润,就是生存的机会。早些年流行的一句话”快鱼吃慢鱼“把这个道理形容得十分形象。所有行业上,竞争都是越来越激烈,IT企业只会更甚。
二十年前,一个软件开发公司可以花三到五年来打磨一个产品;十年前,这个时间只有一年;而现在,更是缩短到几个月。
IT行业对开发速度的要求越来越高,这种速度是的提升,主要是从三个方面实现的:增加人手、优化开发流程、压榨人力。前两者对于一个具体的IT企业来说,在没有业务变化的前提下,都是有明显的极限的,所以,最终,还是落到第三个手段上:压榨人力。
在你以为996就是程序员世界的现实时,真正的现实是:在996之外,你还得保持随时待命的状态:电话保持通畅、微信常开什么的只是小儿科,网上随手搜搜就能搜到程序员深夜在马路边、地铁上改代码的消息。这种对工作时间的压榨,在其它职业上是很少见的。所以,程序员的工作压力之大,也是少见的。
基于这两个主要原因,程序员,尤其在中国,年轻化相对于其它行业是十分明显的。
但是,当摆脱了经济压力后,大部分人还是会想寻找一个自己喜欢的工作或事业去投入自己的精力与时间的,这时,如果对coder是真爱,还是会再次回到这个岗位上的。只是,在经济快速增长阶段,企业与这类人在工作时间方面的冲突难以调和,所以,这类人就比较少见了。
随着经济增速放缓,会有更多的大龄程序员活跃在代码界的。
‘叁’ 程序员每天都要写代码,大家是怎么对待这个
哈哈,作为程序员基本上都是天天与代码打交道的,可能有的人不喜欢,但是如果你选择这行的话,应该是看中了他某一方面的优势,我觉得会代码也是一件了不起的事情,起码在小白看来你们是很牛逼的嘛。
希望可以帮到您,谢谢!
‘肆’ 一个程序员所要经历的步骤
程序员应具备的12种能力
毕业四年来,感觉自己也是从一名不合格的程序员一步步走过来的。回头反思一下,合格的程序员有很多标准和要求,下面是我总结的一个合格程序员应该具备的12种能力。中国软件行业的崛起,靠的是合格的程序员。任何华丽的管理制度都不能保证软件项目的成功交付,合格的程序员就是有力的保证,是项目成功的基础。写下这些,是为了给刚刚进入程序员这个职业的新同学们一点参考。我一直以为,当程序员是很辛苦的,如果不是真正的喜欢,很难坚持下去。如果真的不喜欢这个职业,也该尊重这个职业,尊重自己,赶紧改行。
1. 编程语言能力
不用多说,作为合格的程序员,精通一门语言是必须的。这种精通,不是说看了一本《24小时精通XXX》,抄了几个程序就能说精通的,要靠长时间的积累和浸淫。
2.编码能力
我曾经看多很多程序员写的代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首字母的。就像一个菜市场,杂乱无比,估计10天后,他自己都无法看的懂。遵守编码规范,是一个程序员最基本的要求,可悲的是,很多程序员根本没有意识到这个问题的严重性。随意堆砌网上搜来的代码,根本不管可读性和可维护性,只要能实现功能就行了,心想做完这个项目,就拍拍屁股走人了,缺少最基本的职责素养。我经常把代码必须成程序员的孩子,你就是是孩子他爹,孩子他妈,是有感情的。对你自己的孩子,你能不仔细呵护吗?你是称职的父母吗?这是我编写的一个Java编码规范,供大家参考,这里可以下载http://gurudk.javaeye.com/blog/111734
另外一个就是注释,要注意不是为了注释而注释。对类,以说明职责为主;对方法,以说明意图为主;对方法体,以说明实现思路为主。对于大段大段的代码,要分段,使用空行隔开,并使用行内注释进行说明。
思维的条理性,写代码之前,先简单计划一下,用自然语言把流程写下来,用于整理实现思路。不要看了需求或设计之后,马上就敲代码了,敲完代码马上就debug。花点时间思考,敲代码只是最后一个很简单的工作,不要把自己变成一个代码打字员,编写边想,写了删,删了写。安安静静把实现过程想清楚,在脑子里先实现一遍。再去敲代码,水到渠成。
3.面向对象思维能力
如今,多数编程语言都是面向对象的编程语言。而这些面向对象的编程语言的共同的精髓就是面向对象的思想。掌握这些比面向对象语言本身更重要,比如对继承,多态,重载的理解。对面向对象基本原则的理解,比如开闭原则,接口隔离原则,单一职责原则等。在此基础上,应该掌握常用的设计模式,比如工厂模式,策略模式,观察者模式,模板方法模式,命令模式等等。我面试过很多程序员,没有一个能说得上几句的。
4.利用工具能力
工欲善其事,必先利其器。有了趁手的家伙,工作效率可以提升数倍。你编程序,有没有选择一个很好的IDE,以前听说编程高手都用记事本写程序,我觉得那是一种自虐。就像以前看到的一篇文章,说一帮户外旅行爱好者,出去旅游,背了重重的旅行包,里面装着什么压缩饼干等快速食品。他们宁可就着矿泉水啃压缩饼干,也不肯去1里路都不到的快餐店,农家菜馆吃饭。工具是为目的服务的,好用,提高效率就行,形式无所谓。
另外一个常用的工具就是日记本,好听点可以称为知识管理工具,我用的是myBase,感觉非常好用,在之前,我的所有的片段内容都是记录的单独的文本文件里的,非常不好找,管理也很混乱。
经常上互联网,看到好多好的资料想保存下来,作为日后查看之用.一开始,我用的是firefox自带的书签,但是自己分类太累,多了之后不便于查找,很麻烦。后来用了得乐书签(del.icio.us)的firefox插件,非常方便,现在成为了我必备的一个工具。
还有一个最重要的工具就是搜索引擎了,我装了google forfirefox插件,感觉不错,还有英文翻译功能。按照我同事的说法,内事用,外事用google。很多技术资料都是英文的,用google搜索效率高一些。搜索引擎用好了,就等于打开了一扇通向知识宝库的门,使用搜索引擎,关键字选择很重要。
经常去浏览大牛的blog,逐个网站访问很麻烦,去看了又可能没有更新,可以借助于RSS订阅工具,我是用iGoogle桌面工具,每天早上花半个小时扫一下,大牛的最新文章尽收眼底了。
5. 英语能力
新的技术资料都是英文的,英语国家的IT技术走在我们前面至少10年(这是我自己估计的数字,可能正在缩小)。就连印度,一个连基础设施建设都不太完善的国家,因为其英语基础较好,其在软件外包领域的发展也非常迅猛,远远超过了我们。学英语,首先是有信心,其次就是花时间。多阅读英文资料,使用金山词霸,google的firefox插件等工具配合,贵在坚持。
6.学习能力
在IT也混饭吃不容易,整个环境进化的太快,你不学习,就等于落后了。学习要有针对性,别今天学ruby,明天学python,后天php的。首先要认清自己的目标,自己短期目标是什么,1年后,3年后,5年后的目标是什么。结合这些目标,确定自己的学习计划,人的精力毕竟是有限的。当然,多掌握几门编程语言也是好的,可以扩充自己的知识面,重要的是为自己的目标服务。
要想系统的学习一门技术或工具,看书是最好的方法。看完后,然后上网找相关资料,进行深入学习。学习要抓紧一切可以利用的时间,比如电脑启动要花1分多钟,旁边放一本书,可以看上几页了。公交车上,地铁上也可以看。
当然,不能只学习技术,要经常联系自己的软技能,比如沟通能力,表达能力。你可以把自己学到的东西,解释给自己的同事听,既加深了理解,又增进了同事之间的交流。学习的最高境界就是你能够把学到的东西解释给别人听,这才说明你理解了。在学习心理学上,称之为构成主义。
我学一样东西,总是先上网了解有没有相关书籍,如果想学,就买一本或者去图书馆找相关的书来读。我买的书,家里快放不下了(到目前位置,我买了1万多块的书)。我多半是把目录看完,了解这本书讲解的主要内容,然后需要的时候,我就可以立即补充它进入到我的知识结构。每个人可能都有自己的学习方法,意识到学习的重要,并能够根据需要补充自己的知识,这种能力更重要。
7.创造能力
普遍认为,东方人模仿能力很强,但创造能力差。我见过很多这样的程序员,经常说,“这个只能这么解决了,我想不出有什么别的方法。”可能他根本都没想过别的方法,或者懒得去想。对任何一个问题,找出两种以上的解决办法都是非常容易的,简单的google一下,可能就是数十种。悲哀的是,有些程序员经常止步于自己构建的狭小领地之内。对待客户也是这种态度,不是积极的帮助客户解决问题,而是推脱这只是唯一解决方案。
打破这一思维定势的首先的一个办法就是在面临一个问题时,首先想到的是“没有不可能”,或是“一切皆有可能”,前面那个是阿迪的广告语,后面是李宁的。只有这样去想,才能寻找解决问题的别的出路,即使最后我们试了很多种办法,还是只有着一种解决方案,但我们在这种寻找解决方案的过程中,常常会产生很多好的想法,这样才会使我们真正深刻思考一个问题。建议大家看一看《水平思考》这本书,他提供了一些进行创造性思考的方法和工具。
但我认为,坚持认为存在另一种解决方案的信念是第一位的,方法和工具都是其次。
8.文档能力
也许有人会质疑,程序员跟写文档有什么关系。大家开源软件也用过不少,看看Spring,hibernate,Struts等最流行的开源软件的文档就知道,他么的tutorial,他们的getstarted,他们的reference文档写的多么的易懂。其实写代码也相当于写文档,只不过用的是编程语言。同样,写文档,用自然语言,也相当于写程序,简单明了,清晰易懂,这样的“程序”谁看谁舒服。同样,对于想进阶到设计师或者需求分析员角色的程序员,文档能力更是非常重要。
word是一个最实用的工具,很多程序员,多级编号都不会用,索引目录也不知道如何生成,更别灵活应用样式了。很多排版都是所谓的dirty work。垃圾样式一大堆。其实,静下心来,稍微学习一下,就能写出一篇格式漂亮的文档。
9.抽象能力
抽象能力是认识事物从现象到本质的能力。如果你只是停留在“见山是山,见水是水”的层次,客户说什么,你就做什么,设计怎么做,你就怎么实现,从来不过问为什么,也不去想他是满足了用户哪些方面的需求呢。这样可能只解决了表面的问题,可能会引起返工。认识到本质,才能让你的程序具备更大的灵活性和可扩展性。在做企业应用软件开发中,抽象能力体现为对问题域的理解能力,对领域模型的抽象。合理的抽象也是代码重构的前提,每一次重构,都是向更好的抽象迈进了一步。
10.代码评审能力
代码评审和单元测试是保证代码质量的两种常用手段之一。代码评审能力,说明了你的审美标准,知道什么是好的,什么是不好的,什么是优雅的代码,什么是糟糕的代码,你才能让自己做的更好。
11.单元测试能力
没有单元测试的代码,只能说是半成品。因为没有什么能证明你的代码是可以运行的。测试驱动开发是一个非常好的敏捷过程的最佳实践。单元测试还可以作为回归测试,在修改代码时,起到警戒线标志的作用。是否具有单元测试的意识是区分程序员是否合格的重要标准。写不写单元测试是区分平庸程序员和优秀程序员的重要标杆。
12.DRY
DRY是一种原则,就是Don't RepeatYourself.出自《程序员修炼之道-从小工到专家》。这条原则可以用到很多地方,比如你经常要编译,打包,部署应用程序,供集成测试用。每次你都在重复你自己,写一个自动化脚本(比如用ant,批处理命令)来将这些工作自动化,以提高效率。
还有一个就是我们经常在不同的地方切换IP,如果每次手工做,也非常浪费时间,写一个bat命令可以解决,找一个小工具也可以解决。
编码时,对代码的复用也是在重复你自己,虽然拷贝过程很爽,但是维护一致性就要付出巨大的工作量,特别是将来维护的人不是你的时候,使用代码生成工具可以解决这个问题。类似的例子太多了,如果你发现你经常做一些重复的工作,就要警惕了,是否违背了这个原则,想一些办法将他们自动化。
‘伍’ 程序员在写代码的时候,为什么要在代码旁边写汉字
通常写代码的时候思如泉涌,一下逻辑通了就突突突的写,完全停不下来,但是激情释放过后呢,一开始跑代码有可能就会遇见问题,如果遇见问题了那么就只能回去重新梳理,但是如果没有注释的情况下许多东西能难一秒理解,并且很难懂一些关键节点,所以用我们熟悉的汉字标注一下就更容易理解了,理解了这些东西之后能更快处理问题,也方便日后升级改造时更快的处理,如果没有注释那可能几个月之后你就会忘记这里的含义,重新修改的时候就会困难重重。
‘陆’ 台湾一公司停电后程序员用纸笔手写代码,程序员平时的工作有多辛苦
有一家公司停电之后,程序员用纸笔手写代码,程序员平时工作比较辛苦。在新项目上线时要24小时蹲守在旁边,有很多公司在把项目完成之后,在公司旁边设立房间,让程序员们在房间内休息,有任何问题都可以找到程序员。有的时候程序员会因为一个字母写错,而让全组的人花几个小时去寻找。做这项工作除了要严谨之外,也要有相当的耐心,非常费脑力,那么就让我们具体了解一下吧!
总之,可能公司的项目已经接近了尾声,只需要进行一些补充即可,他们才会用手写的方式。如此努力的工作态度,也是年轻人的学习榜样。
‘柒’ 程序员不懂英语该怎么编程
做个程序员,英语对编程重要吗?这个问题在各种平台曾无数次被我们讨论过。
有不少源代码的网站,就拿github来说,英语若是一窍不通,那简直是没法看。
当然,有些人认为,英语在编程中并不是最主要的,工作中能用到英文的地方,无非就是查阅英文文档。
就像上面提到的会在上下班、地铁上编程实战闯关,这有点类似于玩游戏刷副本,进度会自动保存在那里。
当你可以通关的时候,也表示你对编程代码已经掌握到了一定的程度。如果再刷一些名企的面试真题,相当于是锦上添花,基本上可以试水人才市场了。
‘捌’ 什么是程序员什么是代码
程序员所写的代码,是为某一特定程序或某一个应用程序所制定的编码和内部测试的组织实施,使此应用或程序应能够在程序员编写的代码中,实现各种功能。程序员(英文Programmer)是从事程序开发、程序维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、中级程序员、高级程序员(现为软件设计师)、系统分析员,系统架构师,测试工程师六大类。代码又臭又长
我见过最长的方法是5000多行,那段代码没人敢动,只敢往下加 if else,每次需要改这段代码的开发都战战兢兢,生怕出现什么莫名其妙的bug。java 可是一门面向对象的语言,一个方法里面有5000多行可以说是很可恶的事情了。我想一开始代码长度可能没这么夸张,是什么导致这种结果的?一个是当初写这段代码的人本身写的是直来直去的方法,一堆if else ;后面迭代的开发,面对这么长的代码瞬间失去了从头读到尾的耐心,直接继续在后面加 if else 迭代,最后这个方法就变成了一个缝合怪一样的玩意。
好的 sql 可以很大程度上简化代码的复杂程度,但是太过复杂sql 本身就会给后来的开发人员造成阅读困难,结果又是变成一条无人敢动的祖传代码,我想这应该是不少公司极度抵制存储过程的原因之一。当然不少银行应用开发还是大量使用存储过程,存储过程有用武之地的,但是一个又臭又长的存储过程就等着变成祖传代码吧。当年我见到一个60多个join的sql,看到第一眼就惊为天人从此难以忘怀,当然那段sql也成了没人敢去动的代码了。
代码逻辑不明
代码逻辑不明所以是我们开发很容易去犯的毛病,是一个不致命却烦人的毛病。在代码上的体现是,逻辑判断写的比较反人类各种双重否定是肯定,不把你绕晕不罢休。或者是写起代码来东一榔头西一棒槌,让人不知道你想干嘛。导致这个的原因有可能是开发人员在需求理解上出现偏差,做到后面发现不对劲,再回去改又不大可能了,只能硬着头皮往下写,结果就是代码弯弯绕绕;还有很重要的锅是在产品经理,任意变更需求,想一出是一出,开发人员无奈只能跟着想一出写一出。还用可能是开发人员方法或者类命名太艺术了,什么四川方言拼音这种没有十年脑血栓想不出的命名咱就不说了。就说那种国产凌凌漆式的无厘头命名——这看上去是个刮胡刀实际上是个吹风机,就这种不知道让人说什么好。
规划代码的核心思想
吐槽了一堆代码规范问题,接下来我们说说如何去规范我们的代码以及如何做到就算开发人员更换了,或者项目转手给他人了,仍然可以让后面的开发可以无碍的去阅读代码修改代码。当然各个公司/团队都有自己的一套代码规范,比如项目的结构、代码命名风格、代码格式等等。不同团队有不同的风格,但核心思想是大同小异的。接下来我就我个人的开发经验来分享一下一些代码规范的思想。
‘玖’ 地铁有程序员吗
高薪的IT行业是众多年轻人的职业梦想,然而,一旦身入其中却发觉没有想象中那么美好。被称为IT蓝领的编程员,工作强度大,像个编码“机器”;技术更新换代快,饭碗不稳定。随着年龄的增长,IT编程员该何去何从。做IT的搞不好就被挨踢。你提这个问题就理解你是才搞程序没多久。等你真正进入这个行业几年之后你就知道自己的职业生涯的道路了,建议从一下几点发展:出路一:向IT培训师转型出路二:向IT营销转型出路三:向项目管理努力程序员到底何去何从,就得看自己的眼光、胆识和机遇了祝你在IT行业上有很好的发展,为中国的软件行业多做贡献!
‘拾’ 看很多程序员天天码代码,到底在写什么啊
写代码其实就是使用代码语言将人们需要的功能实现。