软件蚕食一切,未来属于程序员。所以人人都想当程序员。但是并不是每个人都能当好程序员。在你做出决定前还是先看看自己能不能当好程序员吧。
要记住的是,编程不是什么精英才能干的事情。
这个行业永远都缺人。所以除非你一点都不喜欢编程,或者也没有准备好看在钱的份上忍住这种不喜欢,否则都可以来编程。
优秀程序员的几个表现:
1、先进行实验是他们的本能反应
编译器和运行环境通常能比人更快地解释一个问题。一个优秀的程序猿在拿着问题去向别人寻求帮助之前,会自己试试看并判断方法是否有用,而不是直接找一个高级程序员问“我这么做有用吗?”。
2、对待代码和设计不要情绪化
代码就像纸巾:它有用你就用,没用了就扔掉。几乎我们所有人都认为代码复用( code-reuse )很重要,尽管确实如此,但是这也不意味着要像养孩子那样去对待代码。代码没有感觉也不会在乎,它们会像法兰克斯坦( Frankenstein )怪物那样攻击你。代码只是一堆字节,是一种责任( liability )。
3、对编程有激情
很多程序员干这一行只是为了挣钱,如果有更好的职业,他们会毫不犹豫的辞掉程序员的工作。而优秀的程序员热爱编程,喜欢钻研代码中的问题,他们感到能指挥电脑来帮助人们和自己解决现实生活中的问题是一种神奇的能力。当遇到问题无法解决时,他们会茶不思、饭不想,无法入睡。
4、君子善假于物
优秀的程序员知道如何能更高效的完成任务,如何更能有效的解决问题。当遇到问题时,不钻牛角尖,善于利用外部工具解决自己的问题,特别是能熟练应用搜索引擎。初级的程序员只会使用百度和百度知道搜索问题,而高级的程序员/优秀程序员使用谷歌和Stack Overflow或者MSDN forums这类网站寻找更优秀的答案。
5、不仅关心技术方面的知识,同时关注非技术方面的知识
不称职的程序员喜欢临时抱佛脚,只有在需要的时候才去学习。而优秀的程序员会去主动学习各种相关知识,对各种知识来源都有一种开放的心态,而不会象有的人那样固步自封。 而且,并不只局限在跟职业相关的技术类知识,同时他也会学习任何感到有趣的知识,比如沟通技巧等。
糟糕程序员的几个表现:
1、无法对代码进行推理
对代码进行推理意味着能跟随代码的执行路径(“在脑子里运行程序”),同时清楚地知道代码执行的目标。
2、补救措施
程序猿可以通过实践来克服这个缺点,如果 IDE 自带的调试器能单步调试,就把它作为助手使用。比如说在 Visual Studio 里,这就意味着要在问题区域的起始处打上断点,然后按下‘ F11 ’单步调试,查看变量的值(变化前后都要查看),直到你明白了代码正在做什么。如果你的目标环境不具备这种特性,那就找一个拥有这种特性的环境去实践。
这么做的目的是,让你做到不再需要调试器就能在脑子里跟随代码的流程,而且有足够的耐心去思考代码正在对整个程序的状态做什么。这么做的好处就是能够识别出冗余且无用的代码,而且不需要从头执行整个路径就能在当前代码中找出 bug。
3、难以理解语言的编程模型
面向对象编程( Object Oriented Programming )就是一种语言模型,正如函数式编程( Functional programming )或声明式编程( Declarative programming )一样。它们每一个都和过程式或命令式编程有着显著不同,就像过程式编程明显不同于汇编或基于 GOTO 的编程。此外,虽然有很多语言都跟随同一个主流编程模型(如面向对象的编程),但它们都只介绍自己的改进,例如递推式构造列表( list comprehensions )、泛型( generics )、鸭式分类( duck-typing )等等。
4、不使用版本控制
版本控制确实是一个非常有用的技术。它不仅可以跟踪解决方案中的每个文件,存储整个历史,还可以区分不同的版本到分支,知道什么时间是谁改变了什么(并且如果提交的信息足够详细,还可以知道原因)。
5、使用糟糕的变量名
知道将variable1和variable2作为变量名有什么问题吗?变量应该根据它们做什么或者它们包含什么来命名。对了,Visual Studio有一些强大的重构工具,可以相对容易的让它们回到井然有序的状态。
6、重复代码
非常推崇《Pragmatic Programmer》(《程序员修炼之道》)这本书,上面推荐的第一个秘诀就是不要重复代码。上面要求无论如何都不得重复代码,在我看来过于极端了。如果相同的代码需要重复4次,那么可以为这段代码创建一个函数,这将极大地改善你的代码。