ZZ ? ?: 回?做??的十年技?生涯(?文,非??慎入)
元音字母
- 身份
- 用户
- 文章
- 1409
- 星座
- 双子座
- 积分
- 14420
- 等级
- 灵樨(8)
标 题: 回顾做码农的十年技术生涯(长文,非码农慎入)
发信站: 水木社区 (Tue Feb 24 21:42:21 2015), 站内
回顾做码农的十年技术生涯(长文,非码农慎入)
不知不觉,在北京做码农已经十年了。先给个自我评价吧:平凡,普通。在机遇中显得失败,在失败中显得有韧劲。
我不是一个有天赋的码农。记得研究生复试的上机考试,四个题有三个题做不来。其实有个递归题感觉应该能拿下,可能由于紧张,怎么都调试不好,而旁边的那位 哥们早已经做完了所有题。一个小时很快就要过去了,弄得我狗急跳墙,拉着旁边的哥们看了一道题,才涉险过关。现在已经忘掉了那道题了,否则真的很想重新做 一遍,体验当年的我到底有多挫。
研究生的第二年我有幸进入到一个知名外企公司实习(月薪2500),做了整整12个月。我最终没有留下来,因为自己的项目组没有名额,必须去隔壁组去面 试。结果学了一个“so so”的评语。我一辈子都不会忘了这个评语,旁人转达的时候我还傻不拉几的用字典去查是啥意思,这是我一生的耻辱,同时也是我的宝贵财富。
现在回想起来,那时候的确挫。不但是知识上,更要命是能力上。对很多大家很容易能理解的概念,我理解起来却很困难。比如JDK和JVM的关系。用JDK写 的程序需要在JVM上跑,而JDK本身也是需要JVM的,好绕啊。至于JAVA为什么能跨平台,虽然看了很多文章,还是只能泛泛理解。直到有一天知道 linux下和window下需要安装不同版本的虚拟机,这才他妈的恍然大悟。我常常问些很低级很傻逼的问题,脑子里常年充满着疑惑。可见建立在错误的认 知上,整点进步是多么的费劲。(这其实是没有得到一个很好的人指导,可都研究生了,已经没有人手把手教你了)。
尽管没有留下,但是经过这一年的磨练,我的技术着实进步了不少,知识面也扩展了很多,可以说我那时候的水平是领先于大多数同龄人的。但很可惜没有对知识系 统化和理论化,比如我做的是MVC这一套,我当时感觉学会了这套框架已经很了不起了,但我不理解为什么要这么分层,也从来没有想过这么做会有啥好处。所以 呢,没有系统和理论化,为以后的退步埋下了伏笔。
仗着学校背景不错,实习经历不错,我找到了一个很好的国企,不但解决户口,给的钱甚至比实习的公司还高。于是很开心的签了,并停止尝试更多的公司。现在想想算是白白错过了那么多好的正在高速成长的公司的机会。不过当时的眼界就如此,周围的人也如此,还很羡慕呢。
来到国企,我猛然沉浸到另一种文化氛围中:这里人和人之间更亲密,不想外企那么冰冷,这是好的一面。坏的一面就是没有技术氛围,怎么说呢,在外企里你能感 觉到同事之间有明显的技术比拼,你的技术值时时刻刻会像胸牌一样挂在每个人的脑门上。而国企里完全感受不到这些,没有人去评判去关心。所以在外企几乎没有 技术废人,而在国企里有不少技术废人(因为还有些走后门的)。这里的很多感悟是后来跳走之后才感悟到的,当时身在国企当中,是完全感受不到这些的,只觉得 很温暖,很有家的感觉。(后来BAT的同学告诉我,外企对技术的锻炼也不行,这我就不清楚了,没去过没有发言权)
现在回顾起来,正式工作的头四年让我的技术水平低于同龄人。举两个例子记录我当时有多挫:
例子一:我居然忘了c++里栈区是不需要内存释放的,堆区的需要。这些本科就懂,但时间长就忘了。以致于遭到同事的嘲笑(如果多几个这样的嘲笑就好了),于是恶补了一下有关知识。
例子二:组长一次让我用观察者模式重构一下我现在做的系统,我当时压根就没听说过啥是设计模式!不懂怎么下手。后来比我小两岁的一个同事替我完成了。这件事给我很大的触动,让我很汗颜。于是开始学习设计模式。
幸好也有进步的一面,由于开发的项目设计大量的多线程多进程编程,我不知不觉的在这个领域比一般人强。也是一次偶然的机会和一个比我强的人交流技术,发现 他对这块居然不如我。于是我兴趣盎然,进而趁热打铁阅读了更多这方面的文章,让我精通了整个多线程多进程编程,把很多不同的应用场景都归结到我的经验值当 中。通过这个知识点的学习给了我一个重要信心,一个重要提示和一个重要经验。
重要信心:因为这本身就是很难的一个技术点,让我看到我可以做到比别人高一筹,所以给了我信心。
重要提示:学知识要利用煮开水理论。就是说学一个知识点要学透了,要系统化和理论化,这样将来就不会忘。否则学个一知半解,等于没学。
重要经验:这是多年后才感悟到的经验。如果你的知识是在实战中学到的,那是最牢固,最自信的。这和你从网上或书本上学来的不一样,虽然客观上的内容一样,但内化到你血肉里的程度是不一样的。
另一个幸运是因为我终于有了女朋友,结束了单身,有了稳定的性生活(过来人都知道,这东西有了觉得没什么,没有的话觉得很要命)。这让我的精力从相亲转到 了技术上。我终于腾出时间来做了好几个我一直想做的游戏。记得连续两周都开发到晚上11点。这让我的面向对象基本功有了大幅度提高。
可将近4年的不涨工资,让我绝望,和同学的差距越来越大,我发现我活着的轻松感没了!我总不可能因为就守着一个国企的招牌就一辈子落后于人吧?于是开始计 划跳槽。主要就是从网上学习各种基础知识。每天泡论坛,看看别人的提问,一旦发现别人问的问题自己听都没听过,又是一阵恶补。当然自己也积极的问各种简单 的问题。准备了1年,感觉差不多了之后,就四处面试。
因为没有经验,一家小外企要我就屁颠屁颠的去了。后来证明这是很失败的一次跳槽。理由如下:
1:薪水没涨多少。原来有12万,涨到17万。刚跳完,原来的公司也普涨了4万,踏空。
2:干的活有很大一部分是非编程的,很讨厌。
尽管环境不好,但是我依然得到了一些长进:
1:我确信了我是爱编程的,是真爱:虽然编的不好,但一段时间不coding,会特别想coding。恋爱的感觉也莫过于如此吧。
2:锻炼到了英语。
3:依然通过自学,把设计模式再次好好琢磨了一番,提升了不少。让coding和哲学联系了起来,变得更加有趣。我学会了这样理解coding:一个个的 对象,那是一个个的人。它们也希望自己变得漂亮,干的活更轻松,更有效率。而你是创建它们的上帝。你不但负责创造出它们,还负责它们之间的日常沟通的活 动。同时你还有揪出不听话的人(改bug)。
干了一年实在受不了了。接下来的一次跳槽机遇很好,很顺利。是我极其想去的一家外企,结果就真的要我了。薪水也给的不错,26w,很满意。可想而知我当时的狂喜。当时着实处于人生低谷,我太需要一次好机会滋润我。
这里做的产品也是我喜欢的类型。三年下来,有了意外之喜,我不知不觉让自己的技术有了爆发式增长。以前播撒的种子,没有腐烂,反而纷纷发芽了。记得有一阵 子,时不时来个顿悟,一个个的知识点被突破了。之前好久没弄懂的的东西原来这么如此啊。比如类和类的关系,在第一家公司我只知道用继承;第二家公司我了解 到需要组合;第三家公司发现还可以委托。再比如在第一家公司我只懂如何用泛型;在第二家公司知道了泛型的原理;在第三家公司经常编写泛型类给别人用。尤其 是这些框架性的代码写起来特别有成就感,也让我慢慢具备架构师的潜力。
在这家公司带给我很多极具价值的感悟:
1:你技术的高度最主要的是你做的项目的高度决定的,和你平时自学了多少关系不大。也就是说你平日的网上的自学最多提高知识面的广度,而技术的高度主要是由你做的产品的特性决定的。所以有机会去开发一个好的产品是幸运的,需要机遇。好的产品才养人。
2:技术提高并不需要特别的努力。由于平时的工作内容就是最好的提升材料,所以我每天依然只工作四五个小时,却每天能提升一点点。
3:技术是能做一辈子的。很多美国同事就做到白发苍苍,依然是中流砥柱。我想中国想要强盛,同样需要大量这样的工程师吧。
4:技术积累就像一种修行。主要是独自对自己的改善,日积月累的改善。
不知不觉十年就这么飞逝了。回顾这十年,刨去具体的技术知识,比起十年前的我还有如下方面有长足进步:
1:心理层面上,一旦遇到问题,虽然不知道答案,但有信心能解决,不会心慌。首先我有多种方法尝试去解决,如果还解决不了,再想办法work around。不像从前的我,一旦遇到问题,很容易信心崩溃。
2:得到帮助的能力有很大提高(主要是搜索资料和论坛如何提问)
3:解决bug的能力很大提高,尤其是猜测或推理破案的能力有很大提高。
由于工资涨的慢加上技术进步的速度放缓,我又决定要跳了。接下来的目标就是架构师,然后我又不想去互联网,也不想去小公司创业。主要原因是怕太累,我已经 清闲惯了,我怕劳累会伤害做程序员的兴趣,提前透支了做一辈子程序员的激情。我始终想着能愉快的编程,那么每天6个小时的工作量是刚好的,理想的,能坚持 一辈子的。所以我遇到的面试机会并不多,所幸的是能遇到的机会都被我拿住了。然后选了一家我最感兴趣的公司,薪水终于过了我梦寐以求的40w,还能让我带 团队(虽然和互联网的比是低薪,但是对我来说足够了,毕竟有很好的性价比)。
值得一提的这几轮面试挺有意思的,很顺利就通过了。但吊诡的是,没问啥高深的问题,我甚至用的是3年以前的知识储备去回答,我认为3年前的我,照样能搞 定。是否说明简历中的工作9年和6年,这本身的含金量对公司来讲,是很不一样的?或许以前年轻吃了这方面的亏,但这次占了这方面的便宜。希望这个感悟能对 大家有帮助。
在不断的进阶过程中,我同时也喜欢观察周围优秀程序员的特征,并向他们学习,总结如下:
1:没有长期单身的
2:不会大量喝酒(喝酒伤脑啊)
3:耐得住“宅”
4:平时说话会开玩笑,但从不吹牛(可能习惯于精确思维)。
5:字都写的不好(这个纯粹主观之言,不要当真)
还有对自己的总结:虽然我天赋不行,但我有两样比一般人表现的好:
1:这十年发现周围的朋友,越来越多的放弃了编程,或者直接就反问我:你不会一辈子就编程吧?似乎去做领导去管理才是最终的归宿。这个话题太大,这里我只想说:
我正好相反,通过这么多年的磨练,我能一直对我未知的领域保持着兴趣。甚至过了而立之年,这种兴趣还愈发强烈,潜意思里总想把年轻时候的疑惑全部答疑。
那很多人会问我,学编程得苦学一辈子,你能行吗?我是这样做心理准备的:这几年我看电影觉得越来越没意思(包括国外的),很难发现好片。这是因为之前看了 足够多的片,现在每年看个三四部好片就够了。那技术也是一样的,你只要冲到暂时的顶,那么以后你每年只需要怀着好奇的心情学学最新的知识,这其实是很开心 的事情,否则你一辈子写一样的代码也烦啊!对不对?
踏实点说,那能让我做一辈子自己喜欢的事情,还能把它做好,也是当代这个社会对我最好的馈赠吧。人类点燃了计算机的科技树实在是我们这代人的幸运,如此夸张的科技的能在我们这一代普及不是必然的,是太多偶然造成的。所以能身为码农是蛮骄傲的是幸运的。
2:虽然一开始接受新知识新概念的速度不行,但是我的总结能力很强。比如某个知识点被我真正掌握了,我会写日记写故事一样,把理解的过程详细写下来。然后再推理出新的东西。这点和别的相同水平的人的交流中,感觉都没有我总结的好。
可我也有致命弱点:
1:我解决问题的第一感觉不行,经常走偏。记得下围棋的古力说过,他之所以算的比别人快的原因,就是他的第一感觉往往是对的,在正确的路上去演算,当然结果出来的快。
2:我对软件的使用感觉也不行。我骨子里似乎有种东西阻碍我,让我和软件设计格格不入。我的老婆经常取笑我,你为什么连这个操作都不会?这不很显然在这里 去点么?每次都说得我是250似的。我一个做产品的同学也会偶尔拿他设计的样本给我试,说我是很好的用户,如果我都觉得好用,那基本上就是好用了。其实这 种欠缺对我一个开放软件的人来说,是很致命的。
最后记录个写这篇文章的时候冒出的感悟:关于稳定。
这些年的经历告诉我,在北京呢,如果你想追求稳定,你就得必须不停的改变和提升自己,这样你才能保持相对的稳定!
首先从薪水方面说,我从实习期的月薪2500,到刚毕业的年薪10w,到5年后的17w,到6年后的26w,到9年后的40w。这和生活圈的朋友们中的相对值一直是稳定的。换句话说,这十年我并没有相对提高,我只是尽力的保持着相对的稳定。
其次从时运的角度讲,我不停的提升自己,我才能拥有更广的平台,所以我不怕裁员,我相信我有一天会被裁员,但我也相信一旦被裁我也有能力找到另一份工作(先爽几年算几年吧)。这也算是一种新常态的稳定吧。
--
※ 修改:·fafe 于 Feb 25 15:44:25 2015 修改本文·[FROM: 123.125.212.*]
※ 来源:·水木社区 http://newsmth.net·[FROM: 123.125.212.*]