5

为什么你写不好一个快速排序? 谈程序员的职业发展

 2 years ago
source link: https://blogread.cn/it/article/6367?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

为什么你写不好一个快速排序? 谈程序员的职业发展

浏览:12490次  出处信息

   我常常在想,当初我若不离开完美,现在肯定也是总监级的title了,收入比现在高一倍不止。但是另一方面,在编码能力上我甚至不如某些刚毕业的本科生。比如,快速排序的算法我很熟悉,就一句话:“随机选一个元素,用它把输入集分成两半,对这两半继续递归,然后将递归得到(已排好序)的结果合并”。但几个月前看算法书的时候自己尝试写了一下快速排序,发现远远是另外一回事。虽然我对这个算法很清楚,但是用C++实现的时候充满了疑惑,写出来的代码BUG很多,调了很久才调对。相反,如果拿这个做面试题去面应届生,我相信对北大清华的学生通过率应该很高,至少过半。那么我比他们多了6-7年的工作经验,这些经验又是什么呢?

   工作经验是人生最容易积攒的财富,只增不减。钱和不动资产,差不多也是如此。所以要想向年轻人炫耀成功项目,牛B的经历,是很容易的事情。在一个很好的平台上,与聪明的人共事,顺水推舟,再加上运气不是太差的话,工作3-5年后,必然会有一个值得吹嘘的项目。比如我就老喜欢说我第一次做游戏就带着人做了梦诛,在线多少万多少万,等等。

   但是呢,对一个程序员来说,最核心的价值是什么?是快速的把想法,变成无bug的正确代码的能力。像前面提到的快速排序,如果需求已经很明确,怎么实现已经很清楚,语言你自己选,工具你随便挑。20分钟内代码写不出来,写不对,那就自己的问题,水平差。

   我之前走了一条弯路,听信软件工程的人说,不要重复造轮子。于是就忽视了这些基础训练。“不要重复造轮子“这句话在公司里是对的,但是在下班后,或是在学校,在自己写代码练手的时候,就绝对是错的。重写那些经典的算法,是绝佳的思维练习。写二分查找的时候,需要根据区间的长度是奇数还是偶数,判断结果是大于还是小于,分成2x2=4种情况考虑,然后再想怎么缩减重复代码。写快速排序的时候,除了实现基本功能外,若是能考虑下比较时发生的相等的情况如何处理,又能把执行效率提升不少。

   看你想要什么。若是想挣更多的钱,谋求更高的职位(无论技术岗还是管理岗),那么这些都和上述无关。在我现在的公司,每个程序员唯一的出路就是当架构师。这和你能不能写好快速排序没有关系,能看懂牛人写的代码,偶尔做做bug fix或者加个小模块就wonderful了!这就是我牢骚的关键点,随着地位、荣誉、薪水的提升,却逐渐忘却了作为一个程序员,最最基本、最最重要的技能是什么。医生可不像我们这样。即便那医生已经50-60岁了,即便已经是科主任了,依然要做手术主刀。一个手术一不留神做败了,半生积攒的声誉尽毁。

   于是我最近常在反复问自己,通过6年全职工作,我的编码能力有了多少提升?除了更喜欢用大括号把local variable局限在block level,除了更喜欢一心编码时被别人或自己打断,有什么显著、可量化的提升吗?若没有,为什么没有?

   我的职业梦想是,当我说自己是一个程序员的时候,熟悉我的人愿用excellent这个词来形容我。我在傲剑上班时,老板总喜欢说,你们要用自己的实际能力,去赢得同行的尊重。所以我要是下班后多花点时间去coding,总会达成我的愿望吧!

建议继续学习:

  1. 对职业发展问题的终极回答    (阅读:2367)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK