在一封与TechRepublic会员交流的邮件当中,他提到了面向程序员的博客、文章及杂志分红两类:面向初学者类("hello world"这种类型的教程)以及面向专家类(MSDN杂志)。这个观点很好,有关程序员如何从初级跃升到中级的信息极少。如下是为了实现这种转变须要你去作的10件事。程序员
其实你学的是哪一门语言并无关系,可是学习另外一门语言(无论你已经了解多少种语言)将把你打造为更好的程序员。能学会一门与你平常使用的语言风格迥异的语言则更佳。打个比方,若是你是C#程序员,学习VB.NET或者Java对你的帮助就没有学习Ruby或者Groovy大。正则表达式
我说"学另外一门语言"的意思是要真正学会它。学习一门语言包括三个领域的知识:语法、内置操做符和库,以及"如何使用"。前面两个简单;我认为一名有经验的程序员,根据语言的不一样,能在半小时到几小时内掌握足以维护代码的语法知识。操做符和库只不过是知识逐步积累的过程,你何时想清楚要了解什么了,再去查阅参考材料也不迟。只有第三项,"如何使用它"-要花上你几个月的时间去跟这门语言打交道,真正的奇迹就在此发生。我建议用这门语言的风格去作一个适合该语言的项目。数据库
真正学会了另外一门语言以后,我敢保证你的程序员水平必定会日新月异。编程
做为一名好的程序员,不只仅是技能的问题了,而是你寻找信息的技巧,这个趋势愈来愈明显。对大部分人而言,仅仅输入"现代语言及开发框架",这都是泛泛之谈,记不住多少的。所以,你完成工做的能力一般取决于你的检索能力。不幸的是,了解到如何找到准确而高质量的信息可不只仅是跑到TechRepublic来找答案,或者在你选好的搜索引擎上敲几个字那么简单。多线程
"技术(Techniques)"、"手段(tactics)"和"策略(strategies)"看起来是一回事,实际上并不是如此。你须要学会的技术是掌握你喜好的搜索引擎的高级搜索系统;你须要了解诸如布尔操做符,如何过滤结果(像"非"关键字,域限制等等),关键字的词序扮演什么角色,等等。一句话,RTFM(Read The Fucking Manual,读那些他妈的手册)吧。框架
你应该学会这些手段,诸如如何接近特定的搜索,以及了解本身实际上想查些什么。查错误很容易—只需查出错代码便可—可是许多搜索的关键字选择要困可贵多。数据库设计
至于策略,你须要学会的东西,包括像应该使用哪一种搜索引擎(提示:普通的搜索引擎不必定就是最佳选择),使用普通搜索引擎前应该访问哪一个网站,甚至是应该到哪一个论坛去寻求帮助,等等。函数
教别人始终是学习一切东西的最好方法之一。相对而言,因为你在开发领域仍是个新手,认为本身没什么可教给人家的,这能够理解。但这毫无心义。记住,你所学到的一切都是你从别人或别处学到的;所以请尝试一下,成为另一我的要请教的"别人"。天天尽可能花一点时间试着回答TechRepublic上的问题,其余网站的亦可。读读其余会员的回答,你也能够学到不少东西。工具
研究代表,要成为一名"专家",须要花费10年,或者10000到20000小时的刻意练习时间。真的好久。还有,成为专家不尽然就是执行10年一样的任务;一般这意味着要在特定领域内执行普遍的任务。须要花费大量的时间和精力才能成为"专家";作几年程序员是不够的。想在30岁左右成为一名高级软件开发工程师?要么尽早接受教育/培训,要么你得愿意在闲暇时间进行大量的工做、阅读和练习。我从高中开始编程,还牺牲了许多休息时间去跟踪行业发展、学习新技能等等。结果,我得到中级和高级程序员的时间就比个人大部分同事都要早得多,随着时间的推移,这些就转化成为不少的金钱。学习
是时候开诚布公了:也许初级程序员了解的东西还不足以说出作某件事情有一种最好的方式。尊重朋友或者权威的观点是好的,但直到你更有经验以前,不要把他们的观点说成是你本身的。很简单,若是你所了解的不足以让你独立地找出这些东西来,你又怎么会认为你知道哪一位"专家"是对的呢?话是难听了点,不过请相信我;因为受某些愚蠢建议的蛊惑,或者追随某些根本不知道本身在说些什么的所谓专家,白白把本身的职业生涯耽搁了几年,这样毛头小伙程序员,我见过多了。这一点有一个很好的例子,就是面向对象结构的滥用。好比说,许多初级者读了一些有关面向对象的信息后,忽然间,他们那简单的应用程序的类图看起来就像埃菲尔铁塔同样了。
成为一名中级程序员,很大一部分是要在代码里面体现出一些所擅长的概念。就我而言,是多线程/并行性,是正则表达式,以及如何对动态语言进行变化(后两个在我离Perl渐行渐远后开始退化)。这是如何发生的?多线程和并行处理是由于我读了相关文章,以为它看起来颇有趣,而后再本身把它弄清楚了;而后我就一直使用这些技术来写应用。我作过一件工做,是用Perl写的,里面运用了大量的正则表达式。我也用一个过程引擎模板和内置数据库系统写过我本身的电子商务引擎;那时我几乎花了2年时间在这上面。
找到真正令你着迷的东西。也许是图像处理,也许是数据库设计,等等。即使你是一个入门级的程序员,也要尝试一下成为某一本身所关注领域的专家。这会让你至关快速地进入到中级水平,一旦你到了那个水平,你的专家之路也走到一半了。
写出"Hello World",跟理解那些字是如何显示到屏幕上的是两码事。经过学习支撑你所从事的工做的"基础/底层工做(groundwork)",你会变得更加在行。为何?由于你会理解事物为什么会以这种方式运做,当东西坏了就能知道是哪里的问题,等等。经过掌握工做的底层机制,你变会得更出色。
若是你是Web程序员,读读HTTP RFC和HTML规范。若是你使用代码生成器,好好看看它生成的代码;若是你使用数据库工具,看看它生成的底层SQL语句,不一而足。
在工做中看看高级程序员写的代码,而后问一问事情是如何以某种特别的方式完成的,为何?可能的话看看开源的项目。甚至即便其余程序员没有最好的编程习惯,你也会学到许多编程经验。固然,要当心别学到坏习惯。个人意思是说不要生搬硬套人家的东西;你要能领会到哪些是能行的通的,哪些是有道理的,而后再模仿人家。
愚蠢的变量名,糟糕的缩进习惯以及其余一些凌乱的迹象就是一个没有经验的程序员的最好标记。一个程序员在学会如何编程时,却常常没有被传授到那些不那么有趣的细节,像代码格式编排。甚至尽管学习这些东西并不会令你的代码更好,也不会令你成为更好的程序员,它也会确保你不被同事视为入门级的程序员。甚至即便某人是高级程序员,若是他的变量是以他那97只猫的名字来命名,或者其函数叫作"doSomething()"的,他们看起来也不像是知道本身在干什么的人。并且会令其代码在过程当中更难以维护。
想要痴迷于单调乏味的工做?痛恨工做吧。要想升级为中级程序员可不只仅是为了拿到不断增加的工资不达目的誓不罢休,而是要真正享受工做。若是你不喜欢本身的工做,且仍是初级程序员,你怎么会认为成为中级或高级程序员状况就会有所好转呢?换工做或改职业吧。反过来讲,若是你喜好所从事的工做,那就好!只要你坚持下去,我保证你能成为一名更好的程序员。(Justin James)