程序员的自我修养
上QQ阅读APP看书,第一时间看更新

五、程序员的烦恼

自从写了博客,便时常能收到一些年轻程序员或编程爱好者们的来信,讲述的也大多是他们在各自职业发展中遇到的困惑,以及诸如如何学习编程之类的问题。我虽极不愿被当作人生导师(自知没有资格),却也不希望草草回复而辜负了读者们对于自己的那份信任。因此,我便会尽可能站在一个过来人、一个匠人及一个朋友的角度尝试为他们提供一些愚见。而对于下面这些常见的问题,我倒希望更多的读者一起来修正我的回答,并给那些有着同样问题的年轻朋友们以更全面的意见和解答。

1.是否还应该留在一线城市

很多人问过我类似问题,他们往往都有着共同的特点,年轻,多为20世纪90年代或80年代末出生,非常勤勉——无论是在工作中还是对自己的要求上,曾经满怀信心,认为靠自己的努力能够在这些一线城市站稳脚跟,打出一片天地来。此外,还有一个共同点是,都没有房,与男女朋友同住或和朋友合租。

我曾非常肯定地告诉他们,应该坚持留在一线城市,因为这里有最好的资源,无论是硬件还是软件方面,一线城市都汇聚了最优秀的基础设施和人才。这里有最适合程序员成长的环境和氛围,无论是软件园还是创业园,这里总是充满着挑战和机会,在这里你更容易获得优秀的视野和与你同样出色的伙伴。当然你未来的家庭、子女也都将能够享受到这些优秀的资源。还有一点不得不提的是,一旦离开,你将很难再回来,因为在很多HR看来,这种没有延续性的工作状态,代表了不稳定,以及潜在的能力风险。

但今天我的这一想法发生了改变,这源于我的一位同事也问了我同样的问题。他1988年出生,是公司通过校招录用的,到现在也已经工作了六七个年头了。我从没想到过他会有离开的想法,因为他确实非常优秀,他是同时进入公司的那批校招员工中的佼佼者,每次加薪也总是能够排在最高的一档。但就是在我看来如此优秀的年轻人,却也无法抵挡房价高涨这一事实所带来的冲击,而考虑离开上海去一个二线城市发展。

这件事让我颇为感慨,也让我对自己原来的想法产生了动摇。相信凭借我这位同事的能力,以及目前的发展趋势,应该还是能在这座大城市中买房的,他可能需要贷一大笔款在城市的郊县买一间小房,然后再一步一步由小换大,由远换近,而当他完成这些时,他可能发现自己的孩子又会挣扎在无房的困境中,而此时的他可能已经无力奋斗了。就像他反问我的,如果结果是这样,他的一生为了房子而做的努力是否真的值得呢?

他的问题让我感到有些惭愧,过去我所给出的建议更多只是从程序员个人发展的角度给出的,但程序员归根结底还是社会中的人,他们同样必须面对这些社会问题。而在我看来房地产这几年的发展就像是一场游戏,中央政府、地方政府、开发商、炒房客、普通百姓都参与其中,房价的上涨使很多人从中得到了好处,国家的GDP得到了保障,地方政府的债务得到了缓解,投机客成了首批实现财务自由的群体,但更多人却成了房奴,甚至我们还看到了社会上出现的隐性阶级:有房阶级与无房阶级。然而,随着游戏的深入,买房的风险正在变得越来越大,当那些既得利益者试图通过卖房将这些风险转嫁到你身上时,或许真的应该好好考虑一下了。

对于这个问题,我是无法给出正确答案的。买房本身并不会给你带来持久的快乐,因为当你买完房后,你会欠一大笔债,需要用几十年才能还清;当你终于把欠款还清时,你又会觉得这套房子太小,已经不够一家人住,需要换一套更大的房子。你不会得到快乐,因为这些客观条件(钱财、房子)总是无法与你的主观期望相符。相反地,如果买房能够给你的家庭带来更稳定的生活,为孩子提供更好的成长环境,而这一切都能为你的生活赋予意义,并让你感到更加快乐的话,那你还是应该更坚定地留下,而非选择离开。

2.小公司做的事情太繁杂了

现在很多创业公司如雨后春笋般不断冒出来,而越来越多年轻的程序员也走入了这些公司工作。他们中的很多人都有这样的烦恼:工作内容过于繁杂,要处理各种各样与开发无关的事情,还要与包括客户在内的各种各样的人打交道,这让他们无法专心钻研技术,对未来也很迷茫。

虽然大部分程序员都会向往BAT这样的大型软件公司,但我想说,公司就像是围城,外面的人拼了命想进去,而在里面的人却都想逃出来。几乎所有公司的员工都会抱怨自己的工作是多么无聊(可能Google除外),而只有正确的心态才是解决之道。

我时常会说“杂事不杂”,虽然看着被很多与技术无关的事务缠身,但它们对你来说同样具有意义。你从中可能获得沟通能力、管理能力、建立更广的人脉,在企业内部建立影响力,等等,之所以今天你能成为公司的骨干不也正是因为你干了这些杂事吗?如果你能认同这一点,那就不应该总是把时间花在抱怨这些杂事上,而是考虑如何更有效地处理它们。比如,你需要负担很多培训工作,那何不建立一个更好的内部学习平台,让培训对象能够进行自学呢?你需要反复向用户解释系统的使用方法,那何不完善系统的使用说明,让用户更愿意先自己去解决问题呢?你不应该总是陷入在那些处理杂事的循环往复之中,跳出来,创造更好的方式去解决它们才是应对之策。

3.创业公司中的危机感

在过去的这个互联网寒冬中,很多创业公司纷纷倒下,而还在那些创业公司中工作的程序员们也会不自觉地增添一份紧张和焦虑,特别是在公司长时间没有起色的情况下,很多人在考虑是否应该换一份工作。当然,如果公司真的看不到一点希望,而你又不是创始成员的话,那么选择离开无可厚非。但参与创业的过程对你来说仍会是一份宝贵的经历,是你应该加倍珍惜的。无论成功与否,经历一次完整的创业都将让你受益匪浅。你将学到很多在大公司仅仅做一颗螺丝钉所学不到的东西。虽然在此过程中,你一定会有挫败感、焦虑,但或许坚持一下就会看到曙光。

另外一点我想说的是,创业的过程将让你获得不同的眼光。创业大多是在一个新的领域中进行的,你不应仅仅专注于公司所使用的那些技术,而更需要通过深入理解这个新的领域,去获得不同的视角和眼光,因为它们也会在未来成为你的核心竞争力。

4.技术单一,想学习更多

很多程序员在工作中使用的技术都非常单一,比如,只用一种语言来写代码,只写前端或后端的功能。他们很希望能够学习诸如游戏开发、VR开发等新的技术。

我总是很鼓励身边的程序员们去涉猎不同的技术甚至领域,但前提是你必须首先对某一门技术做到精通。技术是需要深耕的,深入学习一门主流的开发技术,并不断提升编程思维,比对很多技术栈都浅尝辄止要好很多。因此,如果精力有限不妨先学好一门技术,你会发现之后再去学习其他技术会变得容易许多,因为它们之间往往都是相通的。

5.我想自学编程,应该学习哪一门语言

“编程语言的种类太多了,如果我没有任何基础,应该学习哪一门编程语言呢?”我很高兴看到越来越多的人,甚至那些与软件行业毫无关系的人都开始学习编程。虽然我认为他们中的大部分人,不会成为编程方面的专家,但通过编程,他们仍然能够有很大的收获,因为这将给他们带来一种新的思维方式,从而在各自的行业和领域中获得成功。

但如果要问我应该学习哪一门语言,我却很难给出唯一的准确答案,或许你可以看看我写的文章“自学编程之前,你需要知道这些”,里面提到了基于不同目标和应用场景下,如何选择你的第一门编程语言。但如果你真的没有任何思路,只是希望你学的这门编程语言能够有用,我的建议是JavaScript,因为它看起来是唯一可能在未来所有领域内得到应用的编程语言,从我们的移动设备,到传统的Web应用,再到服务器端开发甚至是硬件编程,它几乎无处不在。

6.大专学历,能进大公司吗?

我在几个不同类型的世界500强企业工作过,因此我知道,几乎所有大公司都有学历要求,全日制本科几乎成了所有内部职位的最低要求,所以学历上的缺失确实会成为你进入大公司的障碍。但并不能把这看似不合理的要求全都怪在HR头上,因为他们对编程知之甚少,所以需要明确的筛选机制来为IT部门提供合适的人选,而学历就成了那必不可少的门槛之一。

当然也有一些我所知道的例外情况:

•通过内部员工的推荐。

•通过外包公司进入后,再转为内部员工。

•努力成为某一领域的专家,或者建立个人影响力。

如果你还是一名大专在读学生,那么我希望你不要过早焦虑,尝试问问自己除了学历之外还有什么让你能够脱颖而出的东西?是否有自己的个人项目?是否为知名的开源项目贡献过代码,甚至只是参与编写文档?是否通过写博客阐述过自己的独到观点,并得到大家的认可?在哪家公司实习过?这些都可能抓住雇主的眼球,从而弥补你在学历上的不足。

7.非计算机专业学生,未来想从事软件开发

近几年随着互联网的发展,程序员似乎成为了一个热门职业,它常常与高薪联系在一起。而有一些非计算机专业的学生也希望通过自学编程,未来从事软件开发的工作。

首先,如果你只是为了所谓的高薪,而改变专业的话,你可能需要更加慎重,因为相较科班出身的应届生来说,非计算机相关专业的学生去竞争同样的程序员岗位,会更困难一些,而进入那些知名公司的难度也就更高。而更重要的是,如果不是出于兴趣的话,你也很难学好编程。

当然,如果你已认清了自己的方向,那我的建议是,把某一门编程语言的基础打牢,然后尽可能地做出一些实际的项目。比如,选择应用比较广的Java语言,然后结合Android的开发做一些小的APP应用,并将它们放到自己的GitHub里。有机会的话去初创公司实习,即使一开始没有工资,但能学到很多实践经验。相信那样在毕业时,你就能具备不错的竞争力,因为我们在挑选应届生时,往往更喜欢那些基础牢固、具备优秀思维能力,并且乐于动手的年轻人。

8.总是熬夜,睡眠不足

我知道很多程序员都会熬夜,睡得很晚,凌晨一二点几乎是家常便饭。有些是因为加班,有些是因为钻研和学习技术,还有些则是因为游戏、追剧或其他兴趣爱好。程序员应该有自己的兴趣爱好,可以是不断学习,也可以是游戏娱乐,我并不认为每个人都应该非常严苛地对待自己,去规定自己该做什么不该做什么,你需要学会的是如何处理好兴趣爱好与休息之间的关系。对于每个人来说睡眠都非常重要,通过牺牲睡眠来获得一两个小时的时间,到头来只会是恶性循环,得不偿失。合理安排时间,提升效率,11点前睡觉,是我的建议。我没有设什么闹钟,因为它已经成为了我的生物钟,到了这个点就会犯困想去睡觉。而这能保证我有充足的睡眠,并更有效率地投入到第二天的工作中。

程序员和普通人一样也会在工作和生活中遇到各种不同的问题,有一些是因为他们尚未成熟,没有达到宏远的眼界和豁达的胸襟,而另一些则多是闲愁,因不够充实而平添烦恼。没有人能够代替他们,就像我们编程一样,最终需要用自己的智慧去解决这些问题。