
总结一些做程序员的好处,与广大程序员共勉,也给想从事或正在从事这一行业的小伙伴们以信心。每天都是新的开始很少有一个行业可以像程序员这样,每天都能学习新的东西。总是和同事聊起,说编程太有意思了,每天工作的内容和上一天都有不同,每天都能整点新玩意,自己凭兴趣学或者工作需要不得不学。而且现在新的编程语言经常在被发明,新的编程技术在被创造,新的科技又给了程序员无限的进步空间,什么无人机,物联网,3D打印,VR,AR,自动化,等等。"数风流人物,还看今朝"。历练出耿直,坚韧不拔的品格曾经我以为与活生生的动物打交道是很有意思的(小时候想做生物学家),但是没想到与一板一眼的机器打交道也是挺不错。我们的电脑永远忠诚,永远高效,永远真实,说一是一,绝不说零(因为电脑只认得0和1)。因此,长期对着呆萌可爱不说谎的电脑,怎么会不打造出同样呆萌,天真,无邪,正义的攻城狮呢?要说永不言弃的品格,那面对经常失败的程序,你肯定会练就的。需求大于供给,不怕失业程序员的市场不容易饱和,小到银行,大到国防部,都须要有程序员任职,负责网页,软件,等等。而且这个时代可以说是程序员的showtime(“出风头之时”),现在的智能产品,哪一个不需要内嵌代码。在各国,程序员总是比较容易找工作,而且相对高薪。除了正式工作,还可以选择技术创业,或者做做项目,接点私活,赚些外快。不容易得老年痴呆要说头脑经过特殊训练的人群,程序员可以算其中之一。要知道,用编程语言来实现东西,思维的模式和一般是不一样的,因此编程可以开启我们大脑另一部分的潜能。只要编程学得好,那什么玩游戏,比如Dota什么的,那不是信手拈来,根本不需要动用多少脑细胞。而且经过Vim,Emacs这样的编辑器练手之后,对于快捷键极为熟练,你让我玩Dota之类的需要手速的游戏,分分钟记住里面英雄的快捷键,要我再用鼠标点技能,简直是不能忍。会编程之后,你会发现以前有些比较难的事情,现在“天空飘来五个字,都不是事儿”。所以,程序员大脑经常得到充分锻炼,患老年痴呆的概率大大下降。当然了,"青年痴呆"还是有可能的记忆力,英语水平,打字速度,都有提升看了N多编程书籍,你好意思说自己记忆力没提升?编程里经常要用到英语词汇,而且好的编程资料都是英语写的,因此编程可以帮我们提高英语水平。打字速度,自然不用说,以前不会盲打的我,现在手机上输入文字都飞快。多一项生活技能谁家电脑不行了,手机,平板出了问题,网络连不上,机器不会配置,等等,还不得找你。在异地,不是问题,远程协助啊。当他们用“敬仰之情如滔滔江水连绵不绝”的眼神45度仰视你的时候,是不是觉得做程序员真的无限美好呢?专一,不胡来,有耐心因为长期面对电脑,培养了专一,单纯的品格,每天处理那么多程序,找那么多bug,耐心也是够够的。北大青鸟认为程序员较少会花心乱来,毕竟写一天程序,到了家里,最宝贝的就是另一半啦。一个程序员所要经历的步骤?全球编程界巨星,让我们一起致敬他们的卓越才华!</开启新的一周,让我们沉浸在编程殿堂的光辉之中,邂逅这十二位顶尖程序员,他们的名字仿佛是编程世界的璀璨星辰。他们是:Stack Overflow之王 Jon Skeet</,C#编程领域的权威,他的代码就像艺术,每行都诠释着规范的力量。Codeforces神童 Gennady Korotkevich</,TopCoder的常胜将军,天才的代名词,编程大赛的传奇人物。Linux之父 Linus Torvalds</,多项荣誉加冕,他的贡献让操作系统领域熠熠生辉。谷歌搜索索引的守护者 Jeff Dean</,数据挖掘的革新者,他的成就见证了搜索引擎的崛起。游戏界的莫扎特 John Carmack</,《Doom》的缔造者,每一次按键都是一次技术的革新。Free Software的先驱 Richard Stallman</,Emacs和GCC的创作者,GNU项目的灵魂人物,推动着开源精神的传播。Petr Mitrechev</: 奥林匹克金牌得主,编程界的偶像,黑客杯赛和TopCoder的双料冠军。Fabrice Bellard</: QEMU和FFmpeg的开发者,C语言混乱代码大赛的冠军,创造力的象征。Doug Cutting</: Lucene和Hadoop的奠基者,Apache主席,全文检索和大数据开源的开创者。Donald Knuth</: 《计算机程序设计艺术》作者,TeX的发明者,零错误软件的创造者,奖项无数。Unix之父 Ken Thompson</: Unix和B语言的创始人,ACM竞赛赢家,世界公认的杰出程序员。编程全才 Adam D'Angelo</: Quora创始人,Facebook前CTO,ACM竞赛得主,他的智慧横跨多个领域。他们的故事不仅仅是代码和成就,更是对创新、坚持与热爱的诠释。下期,我们将继续探索更多的IT技术与学习资源,期待与您共同学习成长。想做程序员,要些什么条件程序员应具备的12种能力 毕业四年来,感觉自己也是从一名不合格的程序员一步步走过来的。回头反思一下,合格的程序员有很多标准和要求,下面是我总结的一个合格程序员应该具备的12种能力。中国软件行业的崛起,靠的是合格的程序员。任何华丽的管理制度都不能保证软件项目的成功交付,合格的程序员就是有力的保证,是项目成功的基础。写下这些,是为了给刚刚进入程序员这个职业的新同学们一点参考。我一直以为,当程序员是很辛苦的,如果不是真正的喜欢,很难坚持下去。如果真的不喜欢这个职业,也该尊重这个职业,尊重自己,赶紧改行。1 编程语言能力不用多说,作为合格的程序员,精通一门语言是必须的。这种精通,不是说看了一本《24小时精通XXX》,抄了几个程序就能说精通的,要靠长时间的积累和浸*。2编码能力我曾经看多很多程序员写的代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首字母的。就像一个菜市场,杂乱无比,估计10天后,他自己都无法看的懂。遵守编码规范,是一个程序员最基本的要求,可悲的是,很多程序员根本没有意识到这个问题的严重性。随意堆砌网上搜来的代码,根本不管可读性和可维护性,只要能实现功能就行了,心想做完这个项目,就拍拍屁股走人了,缺少最基本的职责素养。我经常把代码必须成程序员的孩子,你就是是孩子他爹,孩子他妈,是有感情的。对你自己的孩子,你能不仔细呵护吗?你是称职的父母吗?这是我编写的一个Java编码规范,供大家参考,这里可以下载/gurudkjavaeyecom/blog/111734另外一个就是注释,要注意不是为了注释而注释。对类,以说明职责为主;对方法,以说明意图为主;对方法体,以说明实现思路为主。对于大段大段的代码,要分段,使用空行隔开,并使用行内注释进行说明。思维的条理性,写代码之前,先简单计划一下,用自然语言把流程写下来,用于整理实现思路。不要看了需求或设计之后,马上就敲代码了,敲完代码马上就debug。花点时间思考,敲代码只是最后一个很简单的工作,不要把自己变成一个代码打字员,编写边想,写了删,删了写。安安静静把实现过程想清楚,在脑子里先实现一遍。再去敲代码,水到渠成。3面向对象思维能力如今,多数编程语言都是面向对象的编程语言。而这些面向对象的编程语言的共同的精髓就是面向对象的思想。掌握这些比面向对象语言本身更重要,比如对继承,多态,重载的理解。对面向对象基本原则的理解,比如开闭原则,接口隔离原则,单一职责原则等。在此基础上,应该掌握常用的设计模式,比如工厂模式,策略模式,观察者模式,模板方法模式,命令模式等等。我面试过很多程序员,没有一个能说得上几句的。4利用工具能力工欲善其事,必先利其器。有了趁手的家伙,工作效率可以提升数倍。你编程序,有没有选择一个很好的IDE,以前听说编程高手都用记事本写程序,我觉得那是一种自虐。就像以前看到的一篇文章,说一帮户外旅行爱好者,出去旅游,背了重重的旅行包,里面装着什么压缩饼干等快速食品。他们宁可就着矿泉水啃压缩饼干,也不肯去1里路都不到的快餐店,农家菜馆吃饭。工具是为目的服务的,好用,提高效率就行,形式无所谓。另外一个常用的工具就是日记本,好听点可以称为知识管理工具,我用的是myBase,感觉非常好用,在之前,我的所有的片段内容都是记录的单独的文本文件里的,非常不好找,管理也很混乱。经常上互联网,看到好多好的资料想保存下来,作为日后查看之用一开始,我用的是firefox自带的书签,但是自己分类太累,多了之后不便于查找,很麻烦。后来用了得乐书签(delicious)的firefox插件,非常方便,现在成为了我必备的一个工具。还有一个最重要的工具就是搜索引擎了,我装了google forfirefox插件,感觉不错,还有英文翻译功能。按照我同事的说法,内事用baidu,外事用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单元测试能力没有单元测试的代码,只能说是半成品。因为没有什么能证明你的代码是可以运行的。测试驱动开发是一个非常好的敏捷过程的最佳实践。单元测试还可以作为回归测试,在修改代码时,起到警戒线标志的作用。是否具有单元测试的意识是区分程序员是否合格的重要标准。写不写单元测试是区分平庸程序员和优秀程序员的重要标杆。12DRYDRY是一种原则,就是Don't RepeatYourself出自《程序员修炼之道-从小工到专家》。这条原则可以用到很多地方,比如你经常要编译,打包,部署应用程序,供集成测试用。每次你都在重复你自己,写一个自动化脚本(比如用ant,批处理命令)来将这些工作自动化,以提高效率。还有一个就是我们经常在不同的地方切换IP,如果每次手工做,也非常浪费时间,写一个bat命令可以解决,找一个小工具也可以解决。 编码时,对代码的copy复用也是在重复你自己,虽然拷贝过程很爽,但是维护一致性就要付出巨大的工作量,特别是将来维护的人不是你的时候,使用代码生成工具可以解决这个问题。类似的例子太多了,如果你发现你经常做一些重复的工作,就要警惕了,是否违背了这个原则,想一些办法将他们自动化。程序员几年后都去做什么了1、 程序员意味着要编程序。(如果你仅仅想得到一份高薪水的工作,喝喝咖啡就等老板发薪水,我奉劝你还是另找一份更合适的工作,譬如练摊,真的,兄弟,这份工作不适合你)2、你是学文的还是学理的,编程序也许需要浪漫,但更需要逻辑和严谨。(说坦白点就是,在你没有找到乐趣以前,它很枯燥)3、你有对新技术追求的热情吗?你有刨根问底的探索精神吗?(热情绝对是最重要的!你仔细思考一下自己的性格适合当程序员吗?)4、当程序员决不是什么好差事,时刻需要学习,需要思考。(直到你成为那个可以引导别人去学习和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)5、程序员的未来很迷茫。(但我认为关键看你自己!我希望你是一个有追求的人,不仅仅是混碗饭吃。因为真正的乐趣在于创造;如果你能改变软件业的历史,那才是英雄;不想成为Bill Gates,不想成为Dennis Ritchie和 Bjarne Stroustrup,我会说你没有追求。有个关于程序员未来的笑话,也许你还没听过,你该听一听,摘抄如下:一个程序员对自己的未来很迷茫,于是去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”上帝说“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的”于是他去问Lippman。Lippman说“程序员的未来就是驾驭程序员”这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”上帝说“我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的”于是他去问Gates。Gates说“程序员的未来就是榨取程序员”这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”上帝说“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的”于是他去问侯捷。侯捷说“程序员的未来就是诱惑程序员”这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”上帝摇摇头“唉,我的孩子,你还是别当程序员了”)6、当程序员还是很有乐趣的。(当你学到新知识时,当你有新的思想见解时,当你有新的产品问世时,和知己探讨你的成果时…我问你,觉得这些是乐趣吗?)7、当程序员不易也不难。(世间事有难易乎?为之…;不为…。你有决心和信心吗?)8、你真的要当程序员?是你自己的想法?9、你舍得花钱买书吗?(读好书绝对是学习编程的最佳捷径。你一定会说,现在电脑书籍真他XX的贵,没法子,谁让知识和技术在人家的脑袋,在人家的书里呢;等你写书时可以把价格定低一点,记着还有好多没钱但想买书的兄弟很困难呀。要舍得买书,买好书,不好的的书不如不读,其害大于其益,关于买什么书,你可以问高手或看候捷的书评;准备一个小本子记录你想买的书的名字,逛书店时看看,如果好就买下,记住要读,别光买不看。) 10、我告诉你,程序就是:任何有目的的、预想好的动作序列,它是一种软件。11、编程序就是编写程序。12、你想好了吗?(如果你想好了还是决定要当程序员,可以继续往下读;否则,你可以继续寻找别的出路了。)合格的程序员应该具备什么样的优秀品质xjs99465 :你好我也是搞程序的! 看了下面的程序员何去何从,你就会明白我们程序员将何去何从!同样是搞网络游戏,史玉柱向陈天桥请教之后把盛大的整个团队挖了过来,而雷军在向丁磊请教完之后却选择了自己开发游戏引擎,从头做起。 不同的性格和文化面对同样的机遇,却走上了迥异的道路。金山这个程序员主导的企业的命运就是中国程序员命运的缩影。 雷军在1992年的金山招聘广告词写道:求伯君的今天就是我们的明天。而这个明天,让雷军一等就等了近16年,而且他已经不再是一个程序员了,和他一样命运的程序员在金山还有997名,现在主管网络游戏的副总裁邹涛和烈火工作室的策划总监宋亮是其中的代表。邹涛从程序员走上领导岗位之后感觉做的工作有些虚,因为再没有一个程序是自己亲自写的了。而宋亮经历了从写软件到做游戏策划的一个转型,他总结自己在金山的十年的时候,还是会说自己的想法依然很简单,因为自己程序员的出身。 虽然是程序员出身,但是毫不影响他们在转型后的工作岗位上干得更出色。《魔兽世界》公测时,雷军玩得很疯狂,连续熬夜几个月,瘦了几斤。下副本,打装备;还财大气粗,花大价钱买魔兽金币,搞到在游戏区中人缘特好,个个都喊他“老大”。而邹涛走马上任之后,就把东风日产的骊威、骐达两款新车融到了《春秋Q传》里,开了网络游戏和汽车行业异业合作的先河。 市场部经理许晓辉告诉我,他们市场部的3个人在写一本关于金山的书,会在年底推出,按照畅销书的做法来做,而不是像一般的企业传记。在采访邹涛的时候我见到了这本书的书稿,《风雨金山》的名字印在第一页上。而这本书他们也会自己来完成,不借助任何外力。 这就是金山公司,不管是不是程序员,身上都流淌着一种程序员的精神。 金山上市之后,雷军感觉到最大的变化是内部的士气高涨了,虽然在金山工作了十年的宋亮认为已经没有什么兴奋的感觉了,甚至比不上第一次拿到期权时兴奋。 而金山的上市,雷军认为给了中国的程序员一个希望:坚持下去是可以成功的。这或许就是金山上市对中国软件行业的一个真实、深远的影响。程序员考试(初级) 有了解的吗? 使用一种特殊的编程语言、编程很牛,单单靠这个并不能说一名程序员/开发者就是优秀程序员/开发者。 快速发展的开发环境使得这个行业比我今天看到的任何一个行业都要发展迅速,这既有积极的一面也有消极的一面:今天的程序员/开发者有很多编程语言、开发工具和开发平台可选,但是建立一个安全、可扩展的环境却变得难了很多;硬件和软件正日新月异地变得更加复杂,但现在学习新技术比过去要难太多了。 以下是优秀程序员应当具备的品质: 语言和工具(Languages and Tools:) 任何程序员/开发者需要具备的第一个技能就是,能够用编程语言工作并会使用与之相关的主要开发工具,包括:工具、IDEs, web 框架, messaging APIs。 程序设计方法(Programming Paradigm:) 举例来说,很好地理解面向对象,这对使用强制式语言(Imperative Language也称过程式语言)写出可维护的代码至关重要。在企业开发中你会遇到各种不同的问题,理解多种程序设计方法并知道何时使用,将使这些问题迎刃而解。 领域专长的知识(Domain Specific Knowledge:) 如果想编写系统来解决特定领域内的问题,那么拥有该领域的专长知识将非常重要。 尽管许多这样的知识是由项目的商业分析员(Business Analyst)来获悉,但如果开发者也能获取,那么跟用户的交流将会更加容易,而且更能够理解他们的专业词汇。 人际关系(People Skills:) 软件开发中最重要的技能之一就是能够与其他开发者一起高效工作同事、质量/商业分析员(Quality/Business Analysts),客户,用户,很多很多……如果你能够很好地处理这些关系,那么成功的大路也离你不远矣。 解决问题(Problem Solving:) 有能力解决那些没有明显解决方法的问题,这一点在软件开发中很重要。当把你的应用配置到JBoss或者通过一个测试找到一个棘手bug的时候,理智地编程将成为调试一个类路径(class path)问题。 沟通能力(Good Communication skills:) 在软件世界中,人们通常认为好的沟通能力就是流利地说话,事实上这远不是。这指的是:你能够多么有效地与其他人交流。作为一名优秀的开发者,你应当能够很好地表达你的想法,很好地听,以及很好地掌控你与他人沟通的过程。 读书(Read Books:) 读大量书将了解很多不同的技术,读书使你对一种技术有了快速、直接的视角。通常你应当选择知名学者的书,他们推崇实践和用技术解决问题的多种方法。在这个过程中,你将学到很多并逐渐形成自己的方法。没准哪天你也就能出书了呢。首先说明,以下观点,纯属个人意见。我个人认为,考证不如多实践,如果你考的证有足够的权威性,那可以考,如果是市面上一些杂七杂八的证,建议放弃,白花钱。这点你可以多去招聘会看看,问问,看看人家需要什么人才,在这里我可以断言:98%的公司,要的是工作经验,所以一些证件在他们眼里什么都不是,毕竟大多数公司要的是能干活的人,不是要一些理论家。证考过了,不代表你能适应工作,如果你在软件公司工作过,这点你会有体会(可以问问在软件公司工作过的人)。下来说一下学习的问题。学习有很多种方法:自学,问人,百度,谷歌,论坛,发帖,这些都是一些不错的学习方法,可能一开始你不太习惯发帖,或者看论坛,其实这里你不但可以学到知识,还可以交一些志同道合的朋友,为你以后的学习,问题,工作,打下了良好的基础。多看看相关的帖子,论坛,看看别人提的问题,自己是否能够解决,如果解决不了,说明自己也有这方面的问题,可以试图解决,这个解决问题的经验是很值钱的,中间有你思考、寻求帮助、解决问题的一些方法、思路,对你以后工作解决问题会有很大的帮助。最后在说明一下,多实践,多练习,试图和别人合作做一些真实的项目,相信一些问题,会不知不觉中解决,疑问可能提高一个档次,不再为生存发愁。