软件工程师|如何摆脱商品化工作,打造自己的流水线?
软件工程师在职业生涯中常陷入这样一种境遇:总是进行软件的维护,而不是开发新的产品。
这篇文章概述了为什么大公司通常给工程师的薪水很低,甚至提供无报酬的工作;为那些希望摆脱商品型开发者角色的工程师提供了一些建议。
你是如何变成一件商品的?
在工业革命期间,人们开始从事流水线工作。
在流水线上,工人们的角色有限。流水线作为一种富有弹性、稳定的生产工具,每一位工人的角色定位都非常明确,可以很容易地被取代,就像商品一样。
对于工人而言,成为一件商品,自然是一种不愉快的体验。但是那时候没有好的替代品,不能简单地放弃流水线,自己干。
工人的生活是痛苦的,但是整个社会在快速地进步中,因为工业家们能够利用商品化的工人实现更多可预见的产出。
这样一种生产方式一直持续到信息时代。
早期的计算机系统操作起来很困难。个人是肯定不行的。完成一些重要的任务需要一个团队密切合作才能成功。
现在,计算机系统操作起来就非常容易。单个工程师就能开发一些生活方式的业务。一个小小的团队就可以开发像WhatsApp这样的产品。不再单单是那些管理流水线的工业家,每一个人的影响力变得更大。
大多数软件工程师在职业生涯中就像流水线上的商品化工人一样,做一些自己不喜欢但是大公司需要的任务。对于工程师而言,如果想要摆脱薪酬微薄的机器生活,那就要建立自己的流水线。
建立自己的流水线
20年前,一家大型软件企业所使用的工具要比你能买到的任何东西复杂的多很多。
亚马逊网络服务将服务器配置和管理的费用从一台机器50,000美元变为完全免费,这极佳地促生了像Dropbox、Trello和Slack这样一系列优质免费的软件。个人可以组合利用各种廉价的工具,效率得到了极大地提高。
SaaS工具之间相互结合,可以组建成更为先进高效的工具。云计算推动了公共软件的巨大进步,不管是个人还是小团队都可以开发技术堆栈,而且有时候比大公司的还要高效。
大公司要紧密地与自己的工具耦合,以至于无法有效地利用这种快速复合软件的高质优势。抛开大公司,你自己一个人可以很自由地组合配对各种工具,只要你觉得合适就成。
软件工具作为生产工具,就像20世纪工业家的流水线一样,其连接方式如今变得非常分散。
事实上,整个经济都已经变得分散化。不仅仅是生产方式,包括分配、支付以及获得领域专长等每一个方面都变得分散,以至于大型集权企业的优势,现在个人和小团队也可以获得。
在过去,一个软件工程师团队需要一个办公场所一起办公,而现在完全可以不用这样。Docker、TopTal和Hashicorp(还有我们程序员客栈)利用一些协作工具都已经开始远程办公了。
远程办公的企业对透明度和交流要求高一些,远程的员工必须记录已完成的工作作为审查——这对于完成工作的员工而言并不难。
在大型公司,工程师因为要和项目经理以及业务拓展人员接触交流,工作效率大大降低。
小公司的好处就是工程师必须要对全局有所了解,包括业务、设计、销售以及产品开发等。Fred George的Programmer Anarchy理论将此发挥到了极致。
“每天一开始的日常例会中,程序员就选定自己的工作。”
“没有项目经理、迭代经理、测试人员...所有在职业环境中软件开发管理的条条框框统统都没有。这一切是建立在形式和规则制约了创造力和生产效率的基础上。”
“没有经理迫使程序员工作,程序员以自我管理的“混乱”形式对每个项目的成功完全负责。”
Programmer Anarchy的成功表明工程师具有更大的作用,工程师的角色可以将其它的各个角色纳入其中。
如今软件工具更为好用,软件工程师的行为得到了更为广泛的理解,Programmer Anarchy的理论也变得适用。工程师不必花太多的时间写样板文件代码,剩下的时间就可以用来思考如何将产品做得更好,产出更大的商业价值。
单个工程师有着很大的影响力,远比以前要大很多。一个小团队,其影响力可以说是巨大的。
如何建立自己的流水线
如果你一个人或者和一个团队一起开办一家公司,最为经典的建议就是“制造一些人们需要的东西”或者“活在未来,开发一些有趣的东西”。
在开发产品的头脑风暴阶段,这是个很好的建议。但是很多工程师从来没有画过产品原型,整个职业生涯都是在做维护,根本想象不出该如何将一个想法转变为一件有用的产品。
如果你的职业生涯大部分是在大公司度过的,那么你可能因为依赖内部模具和工作流程而变“残废”。如果你想从头到尾开发一款产品,你必须投入一些时间到堆栈的每个领域才行。
你要学习画原型,从零开始开发一个新的项目,相比技术性的挑战,这更是一次情感和心理的旅行。
我们会记住开发软件中的所有快乐,不管是开发一款简单的游戏还是一个计算机类app。为什么我们以前曾停止开发新的产品?因为我们在企业的软件工作让软件维护变成了日常的思想。
如果你已经辞掉了企业的工作,你可以话一两个月的时间技术再造。你可能也存了一些钱,参加一次编程培训也是值得的。
哪怕你有计算机科学学位,参加编程培训也完全可以的,大学里学习理论,培训教授操作,而且在培训中还可以学习到独立开发项目的技巧和必要流程。
不管是参加培训还是自己学习,技术再造的过程会让你摆脱过去软件维护工程师的悲惨生活,重新发现创新的乐趣,甚至或许会第一眼就深爱上编程。
这意味要离开那些厚重的工业化语言,比如Java和C#,深入到一些能够快速制作原型的工具语言中,比如React和NodeJS,或者Ruby。
作为工程师,如果喜欢数据科学和机器学习,可以花时间学习下TensorFlow或者Spark——网上有数不尽的教程。
经过足够多的练习后,开发自己的软件变得容易很多,下面的问题就是开发什么软件了。
开发什么软件
在获得了新的技能,学会了画原型之后,构思新的产品想法就变得更为简单了,你不需要有任何自我怀疑,担心不能带这款产品上市。
关于头脑风暴,人们已经写过很多了。Paul Graham的文章和以像《精实创业》(The Lean Startup)这样的书都是很有用的指导,帮助你构思出一个能赚钱的想法。
在大公司时间久了,构思新鲜想法的能力就会变弱。作为一名程序员,要试图构思出新想法的话,很容易变得沮丧,想想周围似乎什么都已经创造出来了。
克服这种精神猥琐的策略之一就是去看看外边巨大的市场,太大了,就算全世界的程序员同时去捕捉这么大的市场,也很难做到。
机器学习+X
如果你想开发一项软件业务,但是不知道从哪开始的话,“机器学习+X”是最为保险的思路之一。就像未来主义者Kevin Kelly所说的那样,“很容易就能预知接下来10,000创业公司的商业计划:X+AI”。
每一家企业都需要机器学习应用软件,就像在90年代每一家企业都需要网站一样。同时,大多数开发者对机器学习有所担心,因为机器学习听起来挺吓人的。
当开发者尝试了机器学习工具之后,他们会发现scikit-learn就像Ruby on Rails网页开发一样舒服。
即使你是开发一款没人需要的机器学习产品,为了开发这款产品,你也要学习机器学习。如果你第一款产品失败了,在你下一款机器学习产品中也有可能用到你这次的代码。
硬件
硬件是另一个充满机会的领域。像机器学习一样,硬件听起来比硬还要难听。
物联网对于硬件开发新人而言是个好地方。各大主要的云提供商和芯片厂商都在物联网领域投入了大量资金。巨头企业相互竞争,提供了最好的物联网平台,开发者个体可以坐享竞争的福利。
与开发者相比,其它一切都是便宜的。想通用、亚马逊和微软这样的大企业正努力获取市场份额,他们非常愿意为笼络开发者支付高额的薪资。
物联网用户多为工厂、农场、车间和其它的工业企业,他们有着巨额的资金,正变得更懂科技,更愿意做一些新型硬件的试验。
不管你开发什么产品,每一家企业的软件工工程师都应该牢记这样一个趋势:供应方的云计算和需求方的小型设备(比如手机)是让你受益的最大经济力量。
物联网需要一些新型独特的应用,云计算意味着这些应用可以很便宜地提供给用户,用户也非常愿意为此付费。
这一趋势将在一定程度上影响着你要从事的各个行业。
在发展中国家,人们对独特的智能手机app的需求要比发达国家的更为强烈,因为发展中国家的用户常常没有笔记本或台式电脑。唯一的电脑就是智能手机。
现在,许多发展中国家连通性很差,这使得他们的需求与发达国家的大为不同。这些地方的技术人才远远没到饱和状态,所以对于那些希望研究当地市场,了解客户痛点的人们而言,这些地方是非常成熟的场所。
有很多其它的新型的领域——零工经济、VR、Docker等等。在深入研究了其中的某一个领域之后,就能够清晰地知晓在接下来几年里会有多大的科技增长量,有多少人置身于这一领域。
最难的地方在于要知道你应该开发一个东西。一旦你内心意识到这一事实,获得了原型设计的必要技能,开发的过程就成为了一次有趣的探索,哪怕是你一路都失败了。
开发一款新的产品,最难的部分在于做“决定”,决定要开发一款新产品,坚定不移地走下去!
总之,作为一名工程师,如果想要摆脱商品化的工作,建立自己的流水线是一个不错的选择:学习一种新的技能,选定一个领域,利用如今发达的科技,开发一个自己的产品,在一片时机成熟的地域实践下去。