赞
踩
作者:阿诺,有删改
John Z. Sonmez是一位来自硅谷的杰出程序员,2016年他出版了《软技能:代码之外的生存指南》一书。这本书在中国翻译出版之后,引起了国内广大程序员的热烈讨论。
许多人从那本书中发现,原来程序员们可以在事业上有更多的选择,从书中也学习到了很多提升效率,精进技术能力与管理水平的方法。
如今,John推出了他的新作《软技能2:软件开发者职业生涯指南》。这本书则将焦点放在了程序员的职业发展之路上,John以自己的经历与体会告诉大家,如何突破职业瓶颈不断进取。
一名程序员把代码写好,这是最基本的职业要求。但如果想要在软件开发的职业道路上走得更远,仅写好代码却又是不够的。幸好,John把那些除了写代码还需要学会的内容,都放进了《软技能2:软件开发者职业生涯指南》之中。
对于身处任何一个阶段的程序员来说,这本书都是一个福音。当对职业发展感到迷茫的时候,不妨拿起这本书来翻一翻,兴许就能找到突破口了。
废话不多说,程序员要学会的第一件事当然就是写代码,看看《软技能2》是如何指导新人学习写代码的吧!
无论是在校大学生还是编程爱好者,一定都接触并使用过至少一种编程语言了。不管起步多么Low,起码是学会了基本的语法,知道顺序、选择、循环语句是怎么回事。不过,到了实际工作中,需要达到怎样的编程水平呢?
编程语言只是一种工具,它能实现编程者利用计算机完成一项任务的意图。决定编程水平的不仅是对编程语言的熟悉程度,还包括算法与数据结构能力。像算法与数据结构这样的基础课程却是要必须先学好的。
计算机本质上就是一台资源有限的运算机器,程序员要做的是如何最大化地使用这些资源达成目标——先学会准确地判断问题类型,然后评估实现的复杂度,这包括时间复杂度与空间复杂度,最后选取最合适的算法来解决问题。
数据结构则是对建模能力很好的培养。所谓建模能力,就是能够很好地将现实问题,投射到计算机的运算空间,通过有限步的计算将问题加以解决。这决定了一名程序员掌控系统规模的能力,如果一个系统在开始时规划建模不合理,那么其复杂度就会随着规模的扩张而线性增长,最后系统在错综复杂的细节里崩溃。
所以,在学会使用编程工具之后,一定不要高兴太早,还要花大量的时间学习算法与数据结构知识。这样才能为接下来的学习打好基础。
练好了基本功,接下来就是要为工作具备动手能力了。《软技能2》建议在学习一项技术的时候,不要仅满足于会用,而要寻找到一个实际的需求去应用这项技术。
Charles Deluvio 拍摄,来源:Unsplash
对于在校大学生来说,编程语言的课堂作业一般都会要求实现一个具体的应用。大学生们要重视这种实践性的作业,不要觉得“做这个能有什么用?” 而不去认真对待。因为编程能力是需要耐心和毅力才能培养出来的,不是说寄希望于进了公司会有人来教会自己。
至于更有追求一些的话,那则可以从自己感兴趣的领域出发,去学习研究新技术。例如,作者John最早学习编程的动力,是想给自己开发游戏玩。当然,他后来才知道开发一款游戏和玩游戏根本不是一码事,但兴趣已经支撑着他学会了不少技能。
“做中学”是一个很好的理念,它可以让学习者将精力集中在最有用的点上。一门编程语言没有必要掌握到100%的程度才去动手实践,在Jonh看来,当掌握了编程语言20%最核心的部分时,就可以开展实际工作了。
因为只有动手走起来,才会关注到怎样通过编程去解决问题。例如,如何设计UI以采集数据;使用何种数据库存储数据;遇到性能问题时,如何优化算法提高效率。如果不是将做一个有实用功能的程序作为目标,恐怕连调试器都有可能不知道该如何使用。这便是做中学的意义与价值所在。
在这个过程中,学习者已经能够使用开发工具,实现简单功能的程序了。更深入一些的,应该还会使用框架,接触到设计模式的知识了。
到了这一步,已经可以去挑战一下,看看能不能找到一份软件开发的工作了。
开始找工作的第一步当然是给自己制作一份光鲜的简历。尽管作为一名新人来说,不可能有多么丰富的经验,但在简历上依然可以表现出自己的亮点。John的建议很有意思,他认为求职者不要自己写简历,而是交给专业的简历写作者。
写简历有一个重要的原则,就是一定要诚实可信,不能夸张到全是水份。因为有经验的面试官两三个问题就能探出虚实来,那时候吃亏的还是求职者自己。但简历内容也不必一五一十好的坏的全写出来,要突出表现出自己的亮点,这些可以是做过的实践、资格认证、性格特点、兴趣爱好等。说白了就是要学会夸自己,还要在事实的范围以内。
当简历有幸被HR选中,接下来就要坐到面试官的前面了。面试过程一般分为笔试与面谈,笔试好说,现在互联网上有海量的题可以去刷。面谈才是一场面试中的重头戏,说它占了七分甚至八分的比重都不为过。
有一点要注意的是,求职者在面谈环节不必要去过分“表演”。每个人的性格都不相同,如果要拧着自己去弥补性格中的另一面,则多少有些得不偿失。例如,一个平常内向少语的人,非得表现得外向健谈,估计反而会给人不伦不类的感觉。所以,做真实的自己就可以,真诚自信才更容易打动面试官。
说到找软件开发的工作,不能不提到市面上林林总总的编程培训班。John在书中提到在美国也有这种形式,就是编程训练营,这是那些非专业人士很好的选择。但中国的国情显然不同,美国的大学里计算机教育水平高,学生动手能力也强。但中国的大学里教学注重基础理论,实用性不强,导致很多专业的大学生毕业后也会选择花钱去报一个编程培训班。
我无意去比较编程培训班哪家强,但只要不是太坑的,基本上都会做到三件事。第一是在短时间内高强度地让学员完成一个项目;第二是会给学员大量刷面试题;第三则是传授面试中的各种套路及应对之策。
如果本身是有一定基础的学员,通过编程培训班强化一下,这对他来说是一次值得付出的投入。但如果本身专业功课没有学好,指望编程培训班突击两三个月就脱胎换骨,这是不现实的。
所以,一位有志于要投身程序员事业的新人,最好还是抛掉幻想,从基本功开始修练,将这看作一场十年甚至二十年的艰苦历程。
成为一名职业程序员,仅是走出了第一步。相信大家都在网上看到过讨论,就是35岁以后的程序员要何去何从。程序员到了35岁就会被这个世界抛弃吗?好在《软技能2》告诉了我们程序员的精进之路。
有一种我们都见过的程序员:说技术,他不好不赖;说业绩,又没有什么亮点。总是看到他在很多项目里出入,就像万精油一样四处被使用。加薪晋级又总是跟这样的人无缘,看似做了不少事,混得却像可有可无一样。问题出在哪里?
问题就是职业素养不过关。这样的程序员有个共通之处,就是不喜欢承担责任,安排什么活就干什么。就算要干还必须是很具体的活,如果任务定得大一些,他们就会找各处理由推托。久而久之,他能接到的也就是各种具体而繁琐的工作,这对于个人成长来说显然没有助益。
所以,程序员要有承担责任的意识。我们要站在比本职工作更高一级的角度来思考。书中John建议程序员要以比本职位高两级的方式来着装,这也暗含了思维也要站到更高一层的道理。说白了,程序员最好能充分地意识到自己所做的工作,在公司的业务中起到的是什么作用。
其次,还需要做到重视自己的承诺,答应的事情是一定要做到的。责任承担下来了,最后不了了之,这个结果更坏。承担责任不是信口开河,而是在自己的能力边界上刚好突破一些。每次都挑战一下自己,累积下来的成功就很可观了。
培养职业素养,就从勇于担责,言出必行做起吧。
从瀑布式过程到敏捷开发,不管软件工程理论怎么演化,实际工作中自动化已经是无可争议的趋势。这些自动化工作包括开发管理、测试管理、持续集成与部署。可以说,不具备自动化思维的程序员,犹如还处在蛮荒时代一样,做什么事都靠着自己的蛮力去完成。辛苦自不必说,效率也被别人甩下几条街,到头来怎么被淘汰的都不知道。
在这里,程序员的技能就必须要扩充了,真的不能只将程序员的工作定义为单纯地写代码。就从开发管理说起,现在一般的公司都会有源码管理服务,例如git、svn等。程序员们在完成一天的开发工作之后,就会将自己的代码签入源码管理服务中。这在以前可能就万事大吉,可以下班回家浪去了。
但要做到持续集成,则需要部署一套自动化的构建系统,当任何一段代码被签入时都会触发一次构建活动。这就要求程序员在开发时就要把事情做完,包括编译通过、自测完成。那么问题来了,编译好说,只要编译器不报错就行,自测怎么做?John给出的建议是程序员要编写完善的单元测试。
为什么要强调程序员一定要有自动化思维,重点就在这里了。我们都知道要做单元测试的重要性,但偏偏实际工作中总有各种借口和理由不去完成它。例如工期太紧,项目着急上线等等,最后匆忙写就的代码上线就出各种问题,程序员们只好熬夜打疲劳战调bug,硬生生又让工作回到了刀耕火种的时代。
单元测试还只是最基本的自动化测试场景,在其上还能构建出组件测试、系统测试、集成测试等。系统部署工作也是一样,在自动化思维指引下,devops这个概念就是赋予了程序员更多的运维职责。
从这些可以看出,以后开发、测试、运维工作的界限会越来越模糊。在各种工具和服务的协助下,程序员们的工作效率会变得越来越高,软件产品的质量也会更有保障。其实很多公司都已经有这样的系统和服务,程序员们也遵守着公司的规定在做,但如果能主动思考清楚其意义所在,明显比只是被动执行要强得多。
自动化思维可以说是程序员成长之路上的火箭助推器。
到这里,程序员已经是一名非常棒的职业人了。但John告诉我们,程序员们还可以上到更高的台阶。他自己就是一个鲜活的例子,他通过在线课程影响了千百万的程序员,写作出书指导程序员职业发展之路,并且自己也实现了财富自由。下面我们就来看下John的做法和建议。
John最为推崇的一个建议就是程序员们要创建属于自己的博客,这个目的就是为了打造个人品牌。
创建个人博客和打造品牌之间有什么关系?John对此的回答是,我们要想具备影响力,给他人传播价值是最好的方式。当自身的价值被认可,也就是品牌被树立起来的时刻了。而程序员结合自己的技术专长,写作有价值的文章,是再自然不过的途径了。
John坦承,他的工作与生活是在博客上的写作之后发生了重大的转变。他从一个默默无闻的职业程序员,转而成为一名明星咨询师,帮助了众多的程序员们。用John自己的话来说,这就是一个名利双收的过程。
当然,这样的成就也绝非一夕之功。John的态度很简单,从一开始就是单纯地希望帮助到身边的人。他在做这件事之前完全没有想过,坚持写作能让他在财务上有多少收获。只是后来他的文章被更多的人看到并学习,他才意识到自己原来已经有了这么大的影响力。
所以,想要在人生之路上更上一层楼的程序员们,赶紧打开自己久未更新的博客,写下新的篇章吧!
诚如John在书中所言,如果这本书只看一章,他会建议读者就看第39章“等量齐观:工作与生活的平衡之道”。
在John对生活和工作的观点看来,追求工作和生活对半开式的平等这是不可能的。一个人如果想要这样的平衡,可能工作的时候惦记着家里,在家里却又操心着没完成的工作,结果哪件事都没做好。
John的建议是改变对工作和生活的看法,不要将这两者看作是二元对立的关系,将工作也看作是生活的一部分。这并非鼓励抛家不顾的工作狂式的精神,而是在一个阶段内做好一件事情。这可以是专注地完成工作,也可以是全身心地投入到家庭的活动中去。总之在选择做一件事时,就不要将其他事情放在心上,而是将它放在日程表上。
程序员们在事业上不断进取时,也必然会遇到这个问题,就是家庭生活也需要自己的存在。首先认识到工作和生活从来就不是平衡的,这是解开心结的第一步。接下来就是和家人充分的沟通,制定工作和家庭活动的计划日程表,过好每一天的生活。
千万不要怀抱着“我拼命工作都是为了这个家”的想法,只把给家庭带来经济利益放在第一位,却忽略了家庭成员的感受。说一句大实话,工作上真不会少了谁就转不开的。另外就是钱也是永远赚不完的,而陪伴家人的时间一旦失去了,则是再也回不来的。
John希望我们思考清楚,并且努力去做到的,就是一个厉害的程序员,总是主动地在选择自己想要的生活。
程序员们不论上升到哪个阶段,都要不断地学习,保持旺盛的好奇心,培养对技术与市场的敏锐洞察力。在软件开发这个职业上,想必怎么强调学习的重要性都不为过。不过很多程序员会搞错学习的重点。
有的程序员会将学习定义为工作上遇到搞不定的任务,就去搜索一下,有现成的代码拿来就用就好。如果是复杂一点的框架,那就花时间学习一下再用到工作中吧。不能否认这也是学习的一种,但它对于个人的成长来说几乎无用。
因为这样还是在个人的知识边界之内,就好像绕着一个环形的跑道不停地在跑,始终在重复着手头上那些事。只有不断地去突破边界,才能看到更加广阔的世界。到了那个时候,程序员们会发现,35岁这个话题不过是个伪命题而已。
最难的事情还就在于通过学习的方式突破自己。一份忙碌的工作,每月按时发放的薪水,会给人一种安全感,但这种感觉是虚幻的。因为互联网行业竞争太激烈,没有哪家公司可以说自己是绝对安全的。身处这个行业中的程序员们就更要看清楚这一点。
所以,工作再忙,程序员们也要挤出时间来为自己的长远将来做打算。学习的领域可以扩展到许多方面,例如领导力、内在成长、演讲技能、写作技能等。这些事情可能在当前看起来无甚影响,但在将来一定会产生不可思议的结果。
不要再说“等我有空了一定去学XXX”,现在就站起来去学习吧!
《软技能2》整本书看下来,可以说John再次给程序员们奉献了一场认知的盛宴。John就他自己所知的内容,对程序员在职业发展上做了详细的指导。从无经验的新人如何起步,到职场老鸟如何让自己扬名立万,都是满满的干货。
诚然,道理都是简单的,John苦口婆心地说了这么多,终究还是要个人自己去体验并实践的。其实在软件开发的职业这条道路上,没有什么捷径可走,甚至可能比别的行业还要更辛苦一些,竞争也更激烈一些。
但这也是软件开发工作的迷人之处,它能让人体会到创造的乐趣,通过许多人都在使用的软件或者服务,开发者获得了无以伦比的成就感。John以自己的经历告诉我们,一位程序员可以达到怎样的层次。更重要的是,他认为任何一位程序员其实都能做到这些。
真心希望看到此文的程序员们都能在职业之路上不断前进,拥有自己想要的生活!
[美]约翰·森梅兹(John Sonmez)
本书是《软技能:代码之外的生存指南》一书作者的新作,主要围绕软件开发从业者职业生涯的发展历程,描述软件开发者在职场中需要具备的各种“软技能”—如何入行成为软件开发者,如何学会第一门编程语言,如何写求职简历,如何准备面试,如何选择工作岗位,如何选择技术方向,如何拓展技术技能,如何与团队和领导融洽相处,如何以著书立说方式为自己在业界赢得赞誉,等等。
本书适合各层次的软件开发者阅读。尽管本书名义上是专门写给软件开发者的,但实际上这也是一本关于管理个人职业生涯以及如何获得成功的书,对软件开发行业的各类从业者做好职业发展规划都很有帮助。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。