原文:作为程序员的思考与反省

子曰:吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。人生又有几个十年?

距离三十还有7年。7年看似很长但也很短。或许有人说我过早的杞人忧天。

三十岁对于一个程序员来说,是一个警钟。虽然不少博文或者某些国外周刊说,有七八十岁的程序员,也有四五十岁的程序员,做一辈子的程序员没有什么不行。

但是那是国外。国内与国外的情形是不一样的。IT的技术更迭是很快的,你想要不断成

长和强大,就需要不断的学习。作为年轻的我来说,特别是双休的时候,每天可以抽取八个小时的时间来学习。但是呢,

当我结婚生子后呢?我还能有那么多时间专注于学习吗?更多是陪伴自己的家人,教育孩子。

今天我主要说的话题是作为程序员有比写代码更重要的事情、不能仅仅只关注于自己的领域、要有忧患意识、要有理想等。

一、作为程序员有比写代码更重要的事情

那么到底什么是比写代码更重要的事情?

记住,这句话不仅仅对我自己说,也是对同在IT一线奋战的同志们说的:不要把自己看做码农。

记得我在之前的文章说过,写代码是思维运动,而不是体力运动。不要将脑力劳动变成体力劳动。

为什么这么说呢?

现在很多有三年甚至五年及其以上的工作经验的开发人员,但是有这么一个群体,仅仅只是将两年的工作经验或者是一年的工作经验重复到五年或者三年以上再或者更久。

我想这也是为什么有的企业在招聘网站招人有这么一条,拥有和工作年限相称的广度和深度。

如下图美团的Java高级工程师招聘:

美团招聘

或许有人说,这与你说的“作为程序员有比写代码更重要的事情”没有关系吧。

嗯,确实没有关系。但是我只是想强调一点。编码是一项脑力与体力相结合的工作,脑力为主,体力为辅。而不是体力为主,脑力为辅。

下面说说,作为程序员有比写代码更重要的事情。

首先我说说我的想法:

(1)作为程序员不能仅仅只关注于功能实现,还要深刻理解业务,明确一条,技术是实现业务的工具,技术固然重要,业务也一样重要,不要仅仅只关注于技术,而忽略业务;

(2)定期写文档总结,回顾自己在工作中对业务的理解和解决的问题,并将其写成文档或者博文的形式,内部分享或者是在不有损公司的利益情况下,分享给广大的IT朋友们;

(3)沟通,沟通很重要,特别是技术团队内部,不要埋头苦干,各自为战;

(4)锻炼身体,身体是革命的本钱,前段时间的新闻,让我心有余悸,特别作为在一线奋战的IT朋友们,一定要定期锻炼,就算不是跑步的形式,也应该去户外走走,徒步也是一种锻炼的方式,当然了,如果能跑步,或时常上下蹲、俯卧撑、仰卧起坐等等,也是不错的,锻炼身体能让你的大脑更灵活;

(5)要有一颗恒心,回顾我的IT学习生涯,如果不是一颗坚持的恒心,恐怕我和班上一部分同学一样,最后只能转行去做做搬运工、流水线、普通工人或者餐饮的服务员等等,这里我要强调一点,我这么说,并不是歧视这些人,而是要强调一点,想要在一个领域有所成就,必须要有一颗恒心,当然了,机遇也很重要;

(6)要有热情,你可以理解为兴趣,兴趣是最好的老师,要想在一个行业长久的发展下去,兴趣(热情)是很必要的,虽然有一万小时这样的理论,但是你要想有兴趣的长期坚持一件事情超过或者等于一万小时,或者是被动的坚持一件事情一万小时是完全不一样的,曾经选择IT,仅仅只是因为看上工资高,到后来慢慢喜欢上它,因为它就如生活一样,带给我酸、甜、苦、辣、咸;

这里我要反省的是,上面的想法我目前而言并没有完全做到,

谈到(1),当初开发软件时,我仅仅只是抱着功能实现就好,其他一切不管,最后的恶性循环是,不断的出现问题,不断的解决问题,同时呢?也不断的加班。最终的结果,就是因为自己的不负责任、不理解业务造成的。

谈到(2),定期写文档总结,的确,这个非常有必要,之前我说过,人的大脑容量是有限的,当然了,也不能忽略一些大脑容量超常的人,不过毕竟那些是少数人,所以,作为大多数的人来说,无论是工作中还是学习中,定期总结和回顾是很有必要的,比如,我们Java团队在与安卓团队对接时,有些接口相关的请求url、请求参数、响应参数,时常因为彼此不记得翻代码找半天,这一点双方都有自己的责任,作为Java研发团队中的一员,我们的责任是没有及时记录,以至于找的时候花费很多不必要的时间。虽然说,接口写文档是一件麻烦的事情,但是用一个叫Swagger的工具是可以完全实现自动化的,这个工作是我的,还是因为我的不负责任,没有管它放任自如,我还是要反省自己。

谈到(3),沟通很重要,我发现在实际开发中,bug出现的概率高的原因,除了我们没有深刻的理解业务之外,还有就是沟通,我们沟通太少了,以至于时常因为这个那个浪费很多不必要的时间。曾经的我,之所以选择了IT,是因为我不喜欢和人打交道,仅仅只想着,“鸡犬相闻,老死不相往来”,,最好是大家各自干各的,都不管彼此。事实证明我是错的,每个人对每一块的业务模块,理解是不一样的,有的理解深,有的理解浅,通过沟通可以彼此互补,技术也是如此。在软件开发整个流程,无论是曾经的瀑布模型,现在的逆向瀑布模型,还是现在的敏捷模型,软件的成功因素,不仅仅取决于业务的前景和好的商业模型,更取决于整个团队的良好协作,本质上可以理解为沟通二字。

谈到(4),还有一点我遗漏了,那就是少熬夜和不熬夜,现在我很年轻才23岁,记得在上家公司工作的时候,经常是2点到3点才睡,那段时间也是没有办法的事情,因为我所面临的,不仅仅是生存上的危机,还有来自很多外部的压力,包括我什么都不会,一切从头来过和一些其他因素等。当我解决了生存危机后,感觉身体其实也没有什么,有段时间,我确实有点堕落了,享乐主义的思想逐渐占据了我的大脑,熬夜看一些没有营养的电子书(什么修仙、霸道总裁等等)或者是看看娱乐电影等等。但是后来被一个人无情的打击下,我逐渐醒悟。

前面说的,或许与少熬夜和锻炼身体没有关系,但是我觉得享乐主义的思想是造成熬夜及其很少或者不锻炼身体的原因之一。

谈到(5),要有一颗恒心,我同广大的朋友们,都一样,没有深厚的背景关系,也没有富裕的家庭。有人说,这个世界上充满着不公平。在我看来,借用《深度思维》中的某句话所说的那样,这个世界有两个东西是公平的,一个是大脑思想和时间。虽说现在少年得志的人不少,比如前段时间受邀参加某个酒会,遇到不少年轻有为的CEO等。但是那只是少数人。更多的平凡人,其实也可以成功。只不过需要沉得下心,并不断坚持的去做一件事情,可以是兴趣爱好,也可以是职业。这个时代既是物价飞涨的时代,也是充满机遇的时代。有人通过自己的兴趣爱好而获得成功,也有的通过专注与职业而获得机遇取得了成功。成功并不是偶然的,也有其必然的因素。

谈到(6),热情或者是兴趣,热情对我来说也可以等同于兴趣。对一件事情十分有兴趣,就会不断有动力去做。作为IT界中的一员,IT的技术不断更迭,你想不落后,不仅仅只是靠挤时间去学,而且也要有兴趣,有热情去做。不然毫无兴趣的去做一件事情,效率不高,也浪费时间。很多人总说,没有时间去学习,包括我自己也说过很多次,其实那都是借口,因为自己不想去做,也不愿意去做,更没有兴趣去做,何谈热情去做呢?

二、不要仅仅只关注自己的领域

不要仅仅只关注自己的领域,为什么要这样的说呢?

原因有如下几个方面?

(1)容易陷入偏狭,一叶而障目;

(2)我们需要了解业务领域的知识(比如做金融相关的开发,需要了解和熟悉金融的,做区块链的,需要了解区块链相关的知识等等),同时也不能仅仅为了业务而去学,平常也要有意识的去拓展自己的知识领域,就我而言,我对理财、文学、产品、物联网等感兴趣,我就会去看看相关的书籍和资料;

(3)借用吴军先生的《见识》所说的那样,你能走多远,取决于你的见识;

其实这三个原因归纳下来,可以用一句话表示,那就是眼界的深度与广度,不仅仅决定你的职业发展,同时也决定了你的未来。

我给自己的建议,也给他人的建议如下:

(1)多多阅读,特别是对工作时间长,休息时间短的朋友们来说,阅读是获取知识的最佳途径之一,阅读不同的书籍,你可以领略不同人的思想或者是不同的行业,也可以是你自己的不同感受,说句惭愧的,我也有很久没有看书了,只是最近觉得,我不能仅仅只关注代码和学习新的框架或是深度研究现有的框架原理等等,还得去了解这个世界不一样的东西或者是这个世界不一样的地方;

(2)沟通,不能仅仅只阅读而不沟通,沟通能提高你的表达能力,同时通过沟通,也能学习对方的看待问题的方式及其获取对方领域的知识(当然了,沟通也没有坏处),特别是广大的IT同胞们,如果表达能力不行的话,找女朋友不好找啊,每次朋友圈看着秀恩爱的那群家伙们,心中总是有种莫名的愤怒,哈哈,稍微幽默下;

再贴个图:

拉勾网

阅读和沟通,不仅仅使你能扩大自己的知识领域的广度,还能给你遇到问题时,会有很多的解决问题的思路和方式。这里也要提到积累也很重要。

上图中有四个红色标记处,前两个,你觉得你没有想过的积累,你觉得你能够胜任吗?或许可以试一试。这个世界上,没有你想做而做不到的。关键是前面说到过的恒心。长久的阅读积累和沟通和技术的沉淀,总会给你带来意向不到的惊喜和机会。

三、要有忧患意识

居安而思危。不要仅仅只满足与安逸的环境下,有一点我要反省我自己,有段时间我确实有点放任自如了,觉得自己身处现在的岗位,就有些得意忘形。

人工智能的发展是非常的迅速,编码以后也会被机器人取代的。这个可能是未来的趋势之一。先不说这个,再说近的,现在的培训机构层出不穷。培养了大批的软件开发工程师,同时现在的大学生,专科的、本科的、研究生或者博士越来越多,你还觉得你所处环境很好吗?这句话是对我自己的说的。“我们不要仅仅只满足于现在,还有着眼于未来“,这句话人人都知道。但没有几个人做到?我想这也是贫富差距的原因之一。

下面我要说出我自己的想法,同时也是给我自己的建议,广大的朋友可以参考:

(1)要有职业规划;

(2)要培养自己的核心竞争力;

(3)既不要妄自菲薄,也不要骄傲自满;

(4)实事求是;

谈到(1),Java开发工程师的职业规范一般为如下:

初级开发工程师->中级开发工程师->高级开发工程师->架构师/项目经理->技术总监->CTO

同时也可以变成这样

初级开发工程师->中级开发工程师->高级开发工程师->产品经理->产品总监

还可以变成这样

初级开发工程师->中级开发工程师->高级开发工程师->技术合伙人(参与创业)

职业规划,意味着你知道自己的下一步想做什么,有个目标总比没目标强。很多人说自己迷茫,包括我自己也一样。其实一点都比迷茫,只不过是为了逃避自己的责任罢了。

比如我,记得有段时间,经理想让我做TeamLeader,但是我当时畏惧了,因为我怕同事们不配合我,同时也怕自己万一搞砸了失去这份工作怎么办,还怕自己因为对于别人代码不熟和业务不理解被嘲笑等担忧。这些担心固然有一定的道理,但是换个角度来看,同事们不一定会不配合你,只要你做事负责任,搞砸了也不可怕,最重要的是你努力去做,不熟悉和不理解,可以通过熟悉和理解(尝试通过与同事及其领导沟通来达到理解业务的目的等等)。在这里我想强调一点,缺乏勇气去尝试,意味着你一辈子只能默默无闻,其实归根到底就是因为不想担责任,缺乏责任感。

在工作中,我想每个人都会遇到这样的场景或者是这样的人,比如某某人和某某人一起工作,突然某某人被领导提拔,而那个人觉得自己工作能力不错,为什么提拔的不是他(她),而是他(她)呢?很多人,包括我自己遇到一些问题和事情,最先想的不是如何解决,而是如何推卸责任。这一点,我真的要很反思。再比如恋爱中的情侣们,当在一起的一段时间里,男方总会以自己的想法为由,大男子主义,往往忽略的女方,最后分手了,总是说,为什么会这样,不是我的错。往往总是从自己的角度上看,而不换位思考。无论是工作中,领导总会给员工们升职的机会,或者你在追求某某人时,某某人总会给你的机会,只不过每次你都错过了,任何事情看似偶然,实则必然。

接下来,我希望自己不仅仅要有明确的行动去实现职业规划中的目标,还希望自己在人际交往中,无论是团队,还是追求某人或者和某人在一起,都要尽可能的换位思考。

谈到(2),要有自己的核心竞争力?

记得看过一篇文章中说过,随着IT的门槛相对而言,越来越低,开发人员越来越多,伴随着质量普遍不是特别高,我知道我说这句话,会有不少人喷我。但是事实就是这样,开发人员流动性很强,跳槽更是普遍,写代码不规范(除了一些大中公司有一定的代码规范约束,其他中小公司一般没有什么规范,全靠自觉,包括我自己代码也写的是乱七八糟,不过意识到这一点后,我尝试着让自己的代码可读性变好,改进自己的代码,业界中Java开发的代码规范,我觉得阿里巴巴的Java开发守则值得参考),仅仅只是关注用技术实现业务,很少深入理解业务,觉得理不理解业务不关自己的事情。

看下图,我列举的几个招聘网站上的例子:

图一:https://raw.githubusercontent.com/AWhiteMouse/files/master/imgs/20191012194103.png

招聘

图二:

招聘

通过图一和图二,我只想表明两个观点:

第一、程序员的核心竞争力,不仅仅来自技术上的积累,还来自业务,技术是实现业务的工具,业务是用来赚钱,没有业务,技术也毫无用场;

第二、随着现在程序员越来越多,你要想不被淘汰,你要有意识的培养自己在某个领域的深度,可以是技术,比如分布式的研究,存储等,也可以是业务,尽管你的技术不是非常牛逼,但是你对业务的深度理解,有助于进入业务对口公司;

记得看过阿里的某位技术人的文章,提到过,你对业务架构的价值领会的深度与广度决定你身处的位置。在这里还是要强调一点,程序员不能仅仅只关注技术,而忽略业务。如果你还想更进一步,业务是必须的。

总而言之,程序员的出路可以有很多,你可以选择到30岁以后或者不到30岁去培训机构当老师,还可以自主创业(当然了创业有风险),还可以一直专注某项技术成为领域专家,也可以进阶到管理层面。

出路有很多,关键是出路是否长远。这个需要自己深度思考。

谈到(3),既不要妄自菲薄,也不要骄傲自满。很多人,也包括我自己看到比自己强的人,会有点自卑,同时也伴随着嫉妒。如果要说怎么解决?答案是有很多解决方案。你可以选择去向比自己厉害的人学习,也可以选择给自己定一个小小目标,然后慢慢实现一个有一个,当然了,还可以选择无视(不过你觉得你能无视吗,我是不能,嫉妒也不能解决问题,解决问题的最佳方式是面对问题,这就好像人与人之间交际的过程中遇到问题时,问题并不是拖着解决的,而是通过面对解决的。骄傲自满更是要不得,不要觉得老子天下第一,世界上比你强的人多的是,我曾经也因为自己写过某段程序,而别人没有写出来而沾沾自喜。到最后发现那些都是屁,没什么好沾沾自喜的或是狂妄。我觉得还需要学习很多。未来还有很长,但是也不是那么很长,我希望自己能够虚心而不自大,乐于助人,乐于助人在于彼此提高。

谈到(4),实事求是很重要,不要给自己定一个难以实现的目标,那样既不现实,也会挫伤自信心。就像《深度思维》的作者说过,既然不能少年得志,那么大器晚成也是很不错的。

我还想强调一点,成长比金钱更重要,特别是对于工作年限不长的朋友们,当眼前的工资足以解决自己的温饱时。有不少IT朋友们,是因为发现无法在这家公司获得更多的成长时离职,也有是工资给的不到位,还有的是觉得太累的。不过我最想给自己的一句话是,在一家公司觉得自己有很大的成长空间时,可以暂时忽略来自外部的巨大诱惑,好好专注自己的领域,提高自己。

这篇文章我一直想写,但是每次落笔时,无法进行下去,因为难以静心。其实这次写也是难以静心,但是写的过程中逐渐使我的心慢慢静下来,同时思绪也打开了很多,即给自己看,又给广大的IT朋友们或者是即将进入IT界的大学生们看。