网站总结
最代码已经上线问答功能,大家多问多答,共同营造良好的互动氛围。
另外广告点击很少,也希望大家可以多点击下和自己相关的广告以帮助网站得到一部分运营费用。
资讯精选
一个优秀的程序员是如何炼成的?问一下自己这个问题会很有意思。这能让你好好思考一下软件开发的过程。拿它来问一下同事也不错,这能引起一些关于如何一起协作的很有意思的讨论。下面是我认为成为一名优秀的程序员所必需的5个技能。
1. 问题分解
编程讲的是如何解决问题。但在你开始写代码之前,你需要清楚如何解决问题。一个好的程序员应该得拥有这样的技能,他能将问题分解成子问题,直到每 个子问题都可以很轻松地进行解决。不过要找到一个解决问题的方式可不是件简单的事。好的程序员能够很好的对问题进行建模,这样写出来的程序很容易能看懂, 很容易实现及测试。
我所见识过的一些复杂的程序,它们之所以这么复杂,部分原因是由于它的实现并不适合对应的问题。这导致代码很难理解。我很同意Bernie Cosell关于问题建模方面的看法:
“很少有程序天生就是复杂的。如果你看到一段非常晦涩的代码——你无法理解它到底要做什么——这通常就意味着它的实现非常糟糕。这个时候不要撸起衣袖就开始修改代码,而是应该退一步,好好地重新思考一下 。当你把整个问题都想透了,你会发现问题其实很简单。“
2. 场景分析
好的开发人员应当能够考虑到程序的不同场景。这不仅是指程序的逻辑,同样还有的是可能会发生的内外部的事件。要想考虑到业务逻辑的不同路径,你可 能会提出这样的问题:如果这个参数为空的话会怎样?如果这些条件都不为真的话呢 ?这个方法是线程安全的吗?为了弄清楚程序到底需要解决哪类的问题,你可能会问自己:如果队列为空的话怎么办?或者这个请求没有响应?如果这个服务器重启 的时候,别的服务器也在重启该怎么办
好的程序员应该会问自己:什么情况下它会出现问题?也就是说,他们能够像测试人员一样看待问题。反过来 ,没有经验的程序员通常只考虑程序主逻辑——也就是当所有事情都如预期时的正常的控制流程。不过一旦发生了异常情况,程序必须得能够应对它。
3. 命名
程序编写涉及到许多命名的问题:类,方法以及变量。如果做得好的话,程序应当是自文档型的,也就是说通过读源码就能很清晰地理解程序的意图。自文 档型代码的一个结果就是方法通常会更短,而不是使用很长的方法,这是因为小的方法,你才可以有更多的地方来赋予一些有意义的名字。
好的名字可比想像中的要困难得多。我喜欢Phil Karlton说的这段话:”计算机科学里只有两件难事:缓存失效以及命名“。命名之所以这么难是由于你得清楚每个名字都代表着什么。有的时候事情并不会 那么明朗 ,只有开发到达一定程度的时候才会清楚。也就是说,重命名和命名一样非常重要。
好的命名同样也包括你所提出的概念以及这些概念到底叫什么。如果仔细地思考过这点的话,不同名字的概念应当是始终一致的(在程序中,不管是和程序员还是非程序员讨论业务领域时都用的是相同的概念),这样写程序就会非常容易。
4. 一致性
或许写程序里面最大的挑战就是管理的复杂性了。一致性是对抗复杂性的一种方式。它让我们看到了问题的固有模式,让我们可以推论出东西该如何命名, 使用以及处理,这在一定程度上减少了复杂性。达到一致性之后, 我们不用再费精力去记住异常情况以及随机的变动。我们可以聚焦于问题的本质复杂度,而不是偶然复杂度。
一致性是非常重要的。它包括变量名及分组,方法命名,模块的划分,目录结构,GUI,错误处理,日志,文档,等等。比如说,如果有一些变量是关联 的并且出现在一起,那么就应当始终按照同样的顺序来使用它们。这样的话,如果漏掉了一个或者将它们搞混了就能够很容易发现。对于某个操作而言,如果它在某 个地方是叫做delete,那么就不要在另一个地方把它称为remove——要坚持使用同样的名字。 Steve McConnell在代码大全中关于准确地使用反义词有一些不错的建议。比如说,begin和end是反义词,同样的还有start和stop。不要混合 不同分组的词语(比如begin和stop)。
修改程序可能会导致不一致。草率的程序员是不会注意到他们添加的代码是不是与现有的代码一致的。好的程序员会确保每一个细节都是正确的。他们知道一致性对于减少复杂性有多么重要。
5. 学习
作为一名软件开发人员,你需要不停地学习。在增加一个新特性之前,你必须知道它是要做什么。在往一个现有的程序中增加代码之前,你通常都要学习现 有的代码是做什么的,这样才能正确地实现新功能。你还得了解周边的系统 ,这样才能正确地和它们进行交互。快速的学习能力可以让你成为一名高效的开发人员。
更有甚者,由于软件工程领域的发展速度实在是太快了,会不断地涌现出许多 新的语言,工具,技术以及框架。这是把双刃剑。Fred Brooks把学习看作是一种娱乐。学习新东西,乐在其中矣。这也意味着程序员的生活永远不会枯燥。
结论
上面讲的都是一些比较通用的技能——它们并不特定于某个语言,框架或者技术。如果你具备了这些技能,你可以快速地学习一门新语言或者一个新工具,并用它们编写出优秀的软件。更重要的是,由于它们具备通用性的本质,即使多年过后也仍不会过时。
7月9日抵达北京,来到了这个充满梦想的城市。
来之前我曾一度担心,会不会不适应这里的天气,这里的饮食还有出行。而父母更多的担忧则是我孤身前往这么远的地方,会不会遇上各种各样的问题,儿行千里母担忧,来之前母亲就反复叮嘱,从长沙到北京的路上也是隔不了多久就收到一条短信。
4月底,我有幸进入了腾讯的复试,离我梦想的地方仅差一步之遥,面试官说如果到第二天上午还没收到通知,就说明被淘汰了,那一晚,月光正好,而我,却在梦想与现实之间徘徊。到第二天上午10点,我在微信上面得知了自己没有通过的消息,瞬间心情跌入谷底,生活总是一下子把你捧到很高的地方,然后让你重重的摔下去。
后 来我仔细分析,发现了几个细节的严重失误,首先,由于第一天面试和第二天面试的面试官是一样的,自然就放松了警惕,第一天我进门是先向考官打招呼,等到考 官说让我就坐的时候才把书包放下,而第二天则是先进去把书包放下了再向考官打的招呼。对于有一个问题的回答也没有直接切入重点,而是回答了很多侧面的东 西。我想,更多的时候,就问题A,你应该先回答问题本身,再延伸到相关的问题B,C,D......而我却恰恰走向了相反的方向,这种发散性的思维对于处理技术问题倒是不错的,而放在人事关系的处理上面却是一个败笔。
而现在,我来到了这个离深圳2372公里的城市,却是另外一种心情,我想,如果我真的这么“轻易”的就达到了自己的梦想,我继续向前的动力恐怕也不会这么强,就像我经常说的:“年轻嘛,就应该受点挫折”。
这里没有想象中的雾霾,没有想象中的那份喧嚣与嘈杂,可能是因为我来到的这个区,也可能是因为此时的心情早已不一样。这里的每个人都很好,非常友善,而且我也从平常聊天中得知,这里的几个人之前都有着高大上的工作经历,这也让我更加兴奋,因为能从他们身上学到许多东西。
上班的第二天,我就被安排去了中国人寿的总部帮人部署服务器(听上去似乎有些高端O(∩_∩)O~),走在金融大街的路上,感觉自己的屌丝气质尽显无疑,或许是几次的面试经历让我应对的比较从容,但谁也没想到的是,我在公司演练了七八遍的部署工作,本以为能够在半小时之后轻轻松松完成,到了这里却怎么也完成不了,经过一上午的折腾,最终才发现是PC机 的环境适配问题,我当时手心可是直冒冷汗。向用户说明情况之后我们约好了下一次的时间,而昨天,我也比较顺利的完成了最终的部署工作,不过我还是犯了一个 错误,没有仔细的检查各项功能是否完整,虽然最终在“前辈”的帮助下解决了问题,但这无疑也是给我敲了一个警钟,人总是在犯错中成长。
我总是想象着能够把一些有意思的瞬间都记录下来,就像我在长沙开往北京的火车上偶遇了中讯集团某项目经理的岳母一样,她还给我留了名片。但我这话匣子一打开,要说的东西就太多了。
大 三这一年的暑假就像整个大学生涯的分水岭一样,经过了这三年的磨砺,有些人变得更加坚强,有些人却因此而倒下,有些人始终朝着梦想的方向前进,有些人则处 在人生的十字路口徘徊,有些人因为生活的压力而疯狂,有些人则面对收获的喜悦而微笑。生活每天都在变化,但不变的是,你现在的生活状态将会决定你以后的人 生。
未 来还有很多精彩在等待着我们,现在看着自己以前的记录突然间觉得是多么的宝贵,因为处在硬件上面的东西可能会消失,就像我前几天为了测试系统而格掉了电脑 上面的所有东西一样(系统是自动安装脚本,会自动格式化硬盘),两年来写的十几万行代码,一瞬间就从我的眼皮子底下消失了,还好我有备份,不过始终不安 全。所以我给的建议是多作记录,说不定哪天就能够用得上。
重新开始,向生活致敬,未来,掌握在我们年轻人的手里......
最近发起了最代码的推广活动,希望每个支持zuidaima的都可以帮忙推广下,活动地址:最代码推广活动,有你参与更牛币。
最代码每周都很精彩,有你会更精彩,请访问http://www.zuidaima.com。欢迎转载分享该文章, 欢迎推荐给身边的小伙伴们
欢迎关注最代码的官方微信账号zuidaima,最代码官方新浪微博:http://weibo.com/zuidaima,最代码官方腾讯微博:http://t.qq.com/zuidaima
欢迎转载该文章并提供出处。
淘宝店铺:http://www.zuidaima.com/taobao.htm
博客地址:http://www.zuidaima.com/blog/1920231606176768.htm