现阶段,应该没有哪一个职业比程序员更加强调学习的了。看看市场上针对程序员的培训领域有多火爆,就能看出来程序员对于能力提升的需求有多强烈了。
对于一名优秀的程序员来讲,学习和思考是贯穿整个职业生涯的事情。尤其是在当下日新月异的人工智能时代,越来越多的程序员重视自己的技能的提升。
菜鸟学院随机采访了部分业内人群:“对于程序员来说,什么能力才最重要?什么才是程序员的核心竞争力?”,被采访者无一例外都是奋斗在一线的程序员,然而他们的回答五花八门,整理出来后有以下几种:
代码整洁有注释,一眼看过去让人很舒服;
测试阶段零 Bug,减少返工;
环境搭建 -API 串联 - 功能研发 - 模块测试 - 应用部署 - 服务上线等一条龙;
软件行业技术升级太快,必须具备极强的学习能力;
有平台技术架构的设计能力;
沟通及团队协作能力;
光脑子好使,身体也要好,要不然 996 怎么扛;
......
总结一下,可以归纳为快速学习能力、架构能力及抽象思考这三个能力被大多数程序员认同。
1 、快速学习能力:太难了,学不动了
计算机领域内的技术更迭速度加快,企业业务变更更加频繁,对于程序员的技能要求也越来越多。
在计算机软件开发领域,几乎每天都有新技术诞生,每几年就会进行一次大的技术潮流变换。从最早的烟囱式架构到分布式再到微服务,从瀑布式到敏捷开发与 DevOps,从传统 IDC 到全面上云,从大量的重复性工作被机器学习所取代,巨大数据体量的场景引发了大数据技术的革命,数据从离线分析到线上分析再到实时分析......
太多的技术在不断更新,因此终身学习就成为了很多技术人的信仰。这也是程序员与其它行业相比之下差异最大的地方。程序员是绝对不能故步自封的,稍微落后一点可能就是落后于竞争对手、落后于你的同事、落后于那些刚毕业的小年轻们。在工作和生活压力不断上涨的现在,前有工作后有家庭的程序员,学习成本的提高也就意味着学习时间被进一步压缩,对学习效率的要求也就越来越高。
这也是为什么在 2019 年,程序员所说的最多的一句话就是“我可太南了,真的学不动了”。
2 、架构能力:这和我敲代码有什么关系?
在这个技术迭代日新月异的时代,“乱拳打死老师傅”已经不再稀奇。
相信有不少的开发者会有这样的想法,“架构设计是架构师应该考虑的东西,程序员只是负责将其中部分的功能实现而已”。当然如果你只是把自己定位成初级执行层面的程序员,那这么理解的确没错。但是在实际的工作中,你不可能永远只用一种语言,也不可能永远只做初级的执行工作。
举一个例子,如果只专注于一种语言,那所遇到的问题模式很可能就会限制在这种语言相关的领域内。比如你只会使用 C 语言,对于手头所出现的问题,是绝对不可能想出一种面向对象的解决思路,因为 C 语言不提供这样的语言特征;同样如果你的技术都集中的 Java 上,那对所有问题的解决思路都会沿着面向对象的方向,即便是过程式编程对于解决问题会更优的情况下也同样如此。这也证明了如果你的技能储备不够丰富,那么所能解决问题的能力相应的也会被削弱。
因此,系统化的思维和架构能力也被视为程序员的综合能力。作为一名有经验的程序员,其对于架构的理解,将能够极大拓宽其对于业务、功能、价值以及实现方式的理解。架构的本质是管理复杂性,架构对于敲代码来说是一套完全不同的理念。架构能力并非是一项具体的能力,而是由多个能力整合而成的对于系统、业务、架构的理解能力,其它能力越强大,架构能力也就越强。
3、 抽象思考能力,抽象什么?
抽象能力怎么强调都不为过,因为决定你能力强弱的不是编程语言,而是自身的编程能力。
随着业务越来越复杂、需求越来越多、交付频率越来越快,程序总是在扩展和重构之间徘徊,这一点相信大家都会认同。但对于程序员来说,要做的就是把人的想法通过电脑的二进制表现出来。众所周知程序员是一个十分耗费脑力的职业,在编写程序时离不开各种各样的数据结构与算法,经常需要面对各种复杂的业务和逻辑。如果抽象能力不强,就很难降低问题的复杂程度,无法把具体变成概念,导致编程能力也很难有质的提高。
说了这么多,什么是抽象能力?抽象能力就意味着比较高的开发效率,同时更重要的是,不会因为抽象而降低研发的效能。面对纷繁复杂、眼花缭乱的技术类型以及越来越快的交付效率,我们程序员完全不用手忙脚乱。掌握了框架层面的抽象能力后,改善自己的复用习惯,学会了一个之后,其它的都是水到渠成。
就像为什么现在高校的计算机系都会开通 C 课程?一方面它最具有代表性,另一方面它也最难,学会了 C ,其它的编程语言虽然都有不同,但也可以很快上手,这就是抽象能力所带来的改变。
我们知道,绝大多数新技术其实都脱胎于一些既有的技术体系。如果能够建立起自己的技术思维体系,掌握这些新技术背后的思想和原理,在面对新技术时就可以快速把握它的本质特征与思路方法,并快速推导出是如何实现的。而这一能力,就被称为程序员的抽象能力。
在抽象推导的过程中,需要程序员深入理解业务并逐渐优化系统设计。正是在这样逐渐抽象的过程中,一些抽象能力极强的程序员开发出了一系列方便大多数程序员应用的开发框架、中间件等等。也正是这些东西,帮助他们能够更加高效的“偷懒”,从而完成在代码质量和效率上的飞跃。
现阶段,对于框架的理解能力以及将流程、模式抽象为框架的能力,正在越来越重要。因为对于企业来说,一款成功的框架不仅能够提升效率,且能够使所设计的应用在可用性、可扩展性、可靠性等方面获得“低保”,至少确保不会出大问题。现阶段程序员所要做很大一部分工作就是如何在固有框架的基础上来完善自身的产品性能。
4 、也许,学会利用框架来高效“偷懒”才是研发效率提升的关键因素
没有什么功能是无法实现的,如果网上的开源框架不行,就自己写一个更好的。
上面这句话是很多技术大牛的口头禅。这群技术大牛,或者说站在金字塔上层的开发者,他们都非常善于创造偷懒的机会,他们能够寻找一切提高效率的工具,必要时还可以通过编写自动化脚本、发明新的工具来改善日常的工作效率,让自己的工作变得更高效。在一次次对于效率提高的思考中,其对于架构和框架的抽象能力也在不断得到加强。
作为程序员,不得不承认当前所做的 80% 的功能在市场上都能找到类似的参考。也就是说,你现在所做的东西,很多都已经被程序员前辈所实现过了。那么既然已经有了现成的模板可用,我们就完全可以在巨人的肩膀上进行迭代与创新,把时间和精力都集中在特有的功能实现上。
今天几乎每一名程序员都明白要避免重复造轮子的事情,那么如何才能避免重复造轮子,如何提高平常工作中的研发效率呢?我们可以得出结论,在技术洪流面前,程序员应该更加专注在能力的抽象层面上。
因此,我们就需要向这个方向去努力。在 2019 年底,从整合自身所掌握的开发能力开始,对这一年中的经验与教训进行升级、归纳、抽象以及迭代,以帮助自己能够在未来更好的复用以及迭代自身的技术体系。
那么具体到方式上,有怎样的形式和途径来体现出我们的抽象能力呢?如何加速我们的开发效率?有怎样的途径来有效的整合、抽象我们这一年中技术成长呢?
最直接的方式,就需要我们将平常所积累的、重复的、可复用价值高的代码部分整合起来,使用我们解决方式的逻辑,把这一部分的功能模块化、体系化,形成可复用价值。但在此之前,工欲善其事必先利其器,要做这些东西,我们程序员也要有一件称手的兵器和平台才行。这个兵器,要具备能够协助程序员将自身能力整合起来、要能够快速提升程序员开发效率、要能降低程序员的日常学习成本等......
看起来似乎很难,因为作为兵器,要不就像枪一样长、要不就像剑一样锋利、要不就像流星锤一样能砸碎一切,很难做到三者兼备。
24岁的程序员,似乎已经看到了30岁后的自己
我们不愿过着那种一眼看到头的人生,然而现实情况却似乎已经把未来摆在了我们的眼前。本期视频从初入社会、30 岁以及 40 岁这三个程序员的人生阶段,去全方位地描述程序员职业现状和关键挑战。
24岁的程序员,似乎已经看到了30岁后的自己
都说考上公务员后在机关事业单位,每天都做着差不多重复的工作,似乎从刚入职的那天起就能看到自己的退休时的样子。这样的工作好无聊,没有挑战性,就是要趁着年轻才要去做一些有意思的事情。
因此我们从老家不远万里来到北京、上海、深圳,为的就是做一份在家里面做不的工作。
我们如愿以偿的做了程序员、当上了工程师,拿到了别人眼中的高薪,满怀希望的认为自己可以在这座城市站稳脚跟,也曾天真的认为未来一片大好。
一年后,你对这个行业,对你的职业还抱有很大的希望,认为自己可以在这条路上走好远。
两年后,开始逐渐认识到这个行业竞争的残酷,你现在所坐的工位,背后可能有三位求职者在惦记着。
三年后,开始发现这个行业发展得太快,知识迭代速度也快得吓人,稍微懈怠一点就有可能跟不上行业发展的脚步,每天都处于工作和充电这两点之间。
五年后,你开始为自己转型做储备,是继续做技术,还是真的要转行,这是一道摆在眼前的现实问题。
十年后,你还会在这座城市吗?
关于人生的思考以及对于职业生涯的判断,处于不同阶段下的人,因为阅历的不同,因为身边的影响因素不同,自然而然会产生不同的看法。刚走出校园的程序员与 30 岁左右的程序员以及 40 岁左右的程序员,他们当下所处的不同阶段,也许就是我们已经经历过、正在经历或将要经历的东西。
当你初出茅庐的时候可以没有顾虑放手去干;但当你有了家庭后,任何一个在当初看来都十分容易的选择题,在这一刻都会变得无比纠结。
我们都知道,程序员这条路很难,不仅要承受来自社会上的各种“默认的”标签,要有强大的思维能力来应对各种奇葩的需求,要有健康的身体来应对经常的加班,还要承受着外行人想象不到的压力。
因为我们热爱这个职业,热爱我们手中的键盘,热爱那一行行经过我们大脑深思熟虑后所呈现出来的代码。我们要对自己负责,趁自己还年轻,更要加把劲往上拼一把。
不是为了别人,而是为了让自己在这个行业,能够更长久地走下去。
最后,我们想对那些刚入职的程序员小伙来说,把基本功打好比什么事情都重要;对 30 岁左右的程序员来说,把家庭照顾好比什么事情都重要;对 40 岁左右的程序员来说,很羡慕你,能把自己的爱好坚持到现在。
时光如白驹过隙,转眼间这一年马上就要过去了,年初定的目标实现了么?
现在的你,应该怎么做?