工作六年感悟 (1):程序员的选择

工作六年感悟 (1):程序员的选择

前言

很多年前,刚刚从大学毕业的时候,很多公司来校招。其中最烂俗的一个面试问题是:“你希望你之后三到五年的发展是什么?”。我当时的标准回答是(原话):“成为在某一方面能够独当一面的技术专家“。后来经历了几家不同的公司,换了不同的方向,才知道这个真是一个很难的问题。因为兵无常势,什么东西都是在不断的变化,一早的时候看好的东西可能会被淘汰。

(几乎)没有人能够看准技术的下一个方向,因为这个问题实在是太难了,能够做到这一点的你就成为了技术界的巴菲特了。比如说01年加入Google,07年加入Facebook,00年加入阿里巴巴。做到这一点的人肯定有资本也有眼光去做风险投资,就算不做风险投资那么财务自由也是妥妥的。

现在毕业六年,从北京到上海到硅谷,从国内互联网公司外企,看到了公司好的地方和坏的地方,这里只是根据自己的经历写一些大方向选择建议,仅供参考。

哪种编程语言?

语言是每个程序员做出的第一个选择,经常能够看到各种讨论说这个语言NB那个语言SB,其实每个流行语言本身都没有什么问题,因为它们都是来自一群超级大牛的努力。绝大部分的语言之争都是来自于懒惰不愿意去学习新的语言而已,不过那么作为学习的时候,什么语言最重要呢?

我的建议是:

对于你想做的方向,看看哪个语言有最多的成功的项目就是了。比如说你想做前端,就学JS,参考Angular.js/React.js,如果想做大数据,就学Java,参考Hadoop。对于一些语言如果只是看起来简单好用但是没有什么成功的项目的支撑,那么对不起了会这种语言的平均工资肯定上不去,因为能给出好价钱的公司不太会用这种语言。

另外建议至少会一种脚本语言,比如说 Python/Bash 之类的,能够让你在开发的时候事半功倍。

金钱还是兴趣?

是选择可能让你挣到更多钱的方向呢,还是选择一个自己更加喜欢的方向?

游戏一直是伴随着我学习的朋友,尤其是暴雪的游戏,玩了六年的星际/CS,玩了三年的魔兽,玩了八年的Dota(1/2)。 在大学的时候,做了一些3D游戏的项目,了解关于3D游戏引擎和游戏AI的知识,所以在大学毕业的时候,希望自己未来的事业是能够参与一些NB的游戏,比如说GTA、使命召唤之类的。

校招的时候投了好多公司的游戏岗位,比如说腾讯、网易、还有当时很火的Popcap。为了准备校招,我还装上了好几个网游体验了一下(我不玩网游)。这些游戏低龄化的设计和对人民币玩家的趋之如骛让我感觉自己未来要做的事情是精心设计一套系统然后吸引未成年人上钩,这种感受让我对国内这个行业产生了彻底的怀疑,除开一些独角兽级别的团队(比如说Minecraft、Supercell)能够在游戏性和赚钱中双丰收,其他大部分的网游,特别是手游,都是披着游戏外衣的吸血工具。

游戏行业最大的吸引是薪资,当时市场上最好的薪资待遇,基本上是游戏公司给出来的。当时内心里面很纠结,到底要不要为了五斗米折腰呢?后来看到了云计算、数据挖掘这个方向,对于里面的技术非常感兴趣,也觉得这个方向能够真真正正的改变我们的生活。所以在拿到了某云计算公司的Offer后(比游戏公司能给出的低不少),毫不犹豫的放弃了游戏这个方向。

回头看来,自己当时的选择真的很对,每天上班做着自己不喜欢的事情只是一种煎熬,不管是做什么,只有兴趣才能成为自己正常的动力。而且从长期来看,带着兴趣工作能够让你对这一块的技术迅速的了解,未来增加的收益可以弥补掉当前亏的那一部分,也不会觉得工作那么辛苦,毕竟工作时间占了你除掉睡觉时间的一半多。

开源还是闭源?

首先看看平台是开源还是闭源。比如说做数据库开发的是选择Oracle还是MySQL,做服务器开发的是选择Windows还是Linux。在现在这个时代稍有实力的企业都会选择成熟的开源产品而不会选择闭源软件,因为用了闭源软件等于把自己给锁在里面了。

然后对于你正在做的这个项目,如果它是一个开源项目的话,争取能够为它做出一些贡献,如果能够为成熟的开源项目作出贡献可以让你的简历加分不少。另外一个明显的好处是,如果项目开源的协议是Apache或者MIT之类的话,你跳槽之后也可以没有任何顾虑的用之前的代码了。所以有机会的话,说服老板把你正在做的项目开源吧!

参考一篇文章:《开源软件正在蚕食这个世界》。另外连微软都在拥抱开源了,你还在等什么呢?

值得说一下,只是把项目源代码放到Github,没有用户的反馈,没有其他开发者的参与,没有版本发布的项目不是一个合格的开源项目。还有回复邮箱才给代码的行为跟种子回复可见是一样的恶劣!

工作还是生活?

这个是很难平衡的一个地方,整日加班会让你过度疲劳,很难有时间去思考。要知道好的方向的好的代码都需要在大脑比较轻松的状态下得到。过于关心生活容易让人死于安乐,过了几年市场变化之后一裁员就发现自己已经很难找工作了。

个人觉得一个重要的标准是来自于,加班的动机是什么?是老板画了大饼后打的鸡血,是老板不喜欢员工早点回家,还是因为自己真正喜欢做这个事情。如果只是因为老板画的大饼(比如说期权),如果一旦没有实现很容易会心理失衡。如果是老板不喜欢员工早点回家,你最好还是换一家公司吧。

如果加班不是出自于自己内心对技术的热爱,还是最好少加班,因为你在牺牲自己的家庭的生活、精力来做自己不喜欢的事情,完全是得不偿失的行为。

总结

个人最重要的是,在碰到任何选择的时候都要自己独立的思考,随大流的意见往往是最差的意见(参考《乌合之众》)。多给自己时间去思考,用开放的态度去看待自己碰到的事情。那么这样的选择往往是不错的。

4 5 收藏 7 评论

关于作者:LeftNotEasy

Apache Hadoop Committer @ Hortonworks 个人主页 · 我的文章 · 12 ·  

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 想想自己当年也是梦想着能成为技术专家

  • 逗笔開發女 java软件攻城狮 2016/08/16

    楼主说的很有道理!对于刚毕业的我们,也是一路从“你希望你之后三到五年的发展是什么?”一路问过来的,但是程序员的道路是迷茫笼统的,进了公司之后跟自己原先去计划的方向又是不一样的!曾经我也是为了游戏一行的高薪去的,然而后面才发现自己经受不住高薪行的压力,也没有处理大数据的兴趣。不得不因此停下来思考,后面花费了好长一段时间才解开这个心结换了家公司,是感兴趣的方向。但生活因此又安逸了太多,希望我在这安逸的环境中可以自己跟着兴趣去找到更大的目标。

  • liuruo1996   2016/08/16

    我现在也在梦想……

  • vital   2016/08/17

    你工作六年的感悟真不怎么样…

  • 虚心接受,感谢分享~~~

  • Yufei_Yan Student 2016/08/26

    楼主是hadoop的committer,毫无疑问是big data方面的大牛...

    楼主能否写一个大数据方面从零开始,到进阶的经验分享,以及需要了解和掌握哪些相关技术...

  • JamesXie 软件工程师 2016/12/09

    想自己当年也是梦想着能成为技术专家,现在发现自己弄的太杂,都不深入,

跳到底部
返回顶部