初级。可以独立完成自身的目标,留下的坑显著降低,问题处理能力明显增强,对设计方案有一定的感受。在这个阶段,在常见架构的应用上,早已并没有太大难题,可以完全了解业务和方案设计,并能迅速落地式。此阶段,进一步提升撸码能力,学习培训常见难题的解决方法,编码的出现显著扩大,变成team中干活儿的主力军。
千阳ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
高端。对设计方案拥有较为深层次的了解,可以独立完成模块设计(常见:类图、流程表、时序图、ER图等);对技术性的了解也进一步加强,掌握新技术的高端使用方法(线程同步、高并发、锁、sql索引、缓存文件、MQ、查找等);可以熟练使用程序设计模式,并解决实际问题(builder、template、pipeline等)。这一阶段,进一步提升技术性的深层,塑造处理极端化难题的能力。这时,工作重点是从撸码变化为模块设计,每日任务拆卸,问题排查。变成team中处理开发设计难题的主力军。
客观性评定自身,如今处在岗位哪些阶段,技术水平怎样、沟通交流能力怎样、工作经验怎样?根据个人情况,挑选适合自己的职业发展方向,拟订升阶方案;不管哪一种途径,您都能通过多与身旁高手沟通交流、科学研究高手博主共享的实操干货知识、学技术及管理方法有关升阶书本等,将集中学习 项目实践结合在一起,锲而不舍,最后完成高薪职位总体目标。或许许多要想添加IT计算机语言学习培训得人要说,计算机语言许多都是昙花一现,爆火一阵子就不会受到互联网技术销售市场的喜爱了!那样,针对java编程语言表达,你能彻底消除这一担心的想法,java编程语言表达拥有很弱的活力,就当前市面上绝大多数金融机构、电信网、证劵、电商、智慧政务等系统软件都已选用Java EE服务平台搭建,或是已经逐步衔接到选用Java EE服务平台来搭建。
千锋成都市教学区创立至今已有三年时间,像java编程语言表达一样,千锋成都市教学区也拥有自身充沛的活力,持续向公司运输高品质IT优秀人才。千锋成都市Java课程培训一直在持续产品研发升级,力求可以让千锋的课程内容紧靠互联网的发展时尚潮流,致力于更深层化的课程内容。更是这类持续求进、求进的自主创新,使千锋学生大学毕业就可在短时间学生就业而且得到行业内较强的薪资,更改一大学毕业就下岗的难堪局势。
简介: 什么是低代码?我们为什么需要低代码?低代码会让程序员失业吗?本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。
什么是低代码
“Low-Code”是什么?如果你是第一次听说,没准也会跟我当年从老板口中听到这个词后的内心戏一样:啥?“Low-Code”?“Code”是指代码我知道,但这个“Low”字是啥意思?不会是老板发现我最近赶工写的代码很丑很“Low”吧... 想多了,老板怎么可能亲自review代码呢。那难道是指,“Low-level programming”里的“Low”?老板终于发现让我等编程奇才整天堆Java业务代码太浪费,要派我去闭关写一个高性能C语言网络库... 显然也不是,老板哪能有这技术情怀呢。那到底是什么意思?作为一名搜商比情商还高的程序员,能问Google的绝不会问老板。于是我一顿操作后,不假思索地点开了第一条搜索结果:Low-code development platform。
Wikipedia定义
从Wiki的这段定义中,我们可以提炼出几个关键信息:
• 低代码开发平台(LCDP)本身也是一种软件,它为开发者提供了一个创建应用软件的开发环境。看到“开发环境”几个字是不是很亲切?对于程序员而言,低代码开发平台的性质与IDEA、VS等代码IDE(集成开发环境)几乎一样,都是服务于开发者的生产力工具。
• 与传统代码IDE不同的是,低代码开发平台提供的是更高维和易用的可视化IDE。大多数情况下,开发者并不需要使用传统的手写代码方式进行编程,而是可以通过图形化拖拽、参数配置等更高效的方式完成开发工作。
Forrester定义
顺着Wiki的描述还能发现,原来“Low-Code”一词早在2014年就由Forrester提出了,它对低代码开发平台的始祖级定义是这样的:
请点击输入图片描述
相比Wiki的版本,这个定义更偏向于阐明低代码所带来的核心价值:
• 低代码开发平台能够实现业务应用的快速交付。也就是说,不只是像传统开发平台一样“能”开发应用而已,低代码开发平台的重点是开发应用更“快”。更重要的是,这个快的程度是颠覆性的:根据Forrester在2016年的调研,大部分公司反馈低代码平台帮助他们把开发效率提升了5-10倍。而且我们有理由相信,随着低代码技术、产品和行业的不断成熟,这个提升倍数还能继续上涨。
• 低代码开发平台能够降低业务应用的开发成本。一方面,低代码开发在软件全生命周期流程上的投入都要更低(代码编写更少、环境设置和部署成本也更简单);另一方面,低代码开发还显著降低了开发人员的使用门槛,非专业开发者经过简单的IT基础培训就能快速上岗,既能充分调动和利用企业现有的各方面人力资源,也能大幅降低对昂贵专业开发者资源的依赖。
低代码核心能力
基于上述的定义和分析,不难总结出如下这3条低代码开发平台的核心能力:
请点击输入图片描述
• 全栈可视化编程:可视化包含两层含义,一个是编辑时支持的点选、拖拽和配置操作,另一个是编辑完成后所及即所得(WYSIWYG)的预览效果。传统代码IDE也支持部分可视化能力(如早年Visual Studio的MFC/WPF),但低代码更强调的是全栈、端到端的可视化编程,覆盖一个完整应用开发所涉及的各个技术层面(界面/数据/逻辑)。
• 全生命周期管理:作为一站式的应用开发平台,低代码支持应用的完整生命周期管理,即从设计阶段开始(有些平台还支持更前置的项目与需求管理),历经开发、构建、测试和部署,一直到上线后的各种运维(e.g. 监控报警、应用上下线)和运营(e.g. 数据报表、用户反馈)。
• 低代码扩展能力:使用低代码开发时,大部分情况下仍离不开代码,因此平台必须能支持在必要时通过少量的代码对应用各层次进行灵活扩展,比如添加自定义组件、修改主题CSS样式、定制逻辑流动作等。一些可能的需求场景包括:UI样式定制、遗留代码复用、专用的加密算法、非标系统集成。
不只是少写代码
回到最初那个直击心灵的小白问题:Low-Code中的“Low”,到底是啥意思?答案已经显而易见:既不是指抽象程度很低(相反,低代码开发方式的抽象程度要比传统编程语言高一个level),也不是指代码很low(也相反,低代码所生成的代码一般都经过精心维护和反复测试,整体质量强于大部分手写代码),而是单纯的“少写代码” —— 只在少数需要的情况下才手写代码,其他大部分时候都能用可视化等非代码方式解决。
再往深一点儿看,低代码不只是少写代码而已:代码写得少,bug也就越少(正所谓“少做少错”),因此开发环节的两大支柱性工作“赶需求”和“修bug”就都少了;要测的代码少了,那么测试用例也可以少写不少;除了开发阶段以外,平台还覆盖了后续的应用构建、部署和管理,因此运维操作也更少了(Low-Code → Low-Ops)。
然而,少并不是最终目的:如果单纯只是想达到少的效果,砍需求减人力、降低质量要求也是一样的。低代码背后的哲学,是少即是多(Less is More),或者更准确说是多快好省(Do More with Less) —— 能力更多、上线更快、质量更好,成本还更省,深刻践行了阿里“既要,又要,还要”的价值观精髓。
请点击输入图片描述
平台的职责与挑战
上面说的是低代码给开发者提供的能力与吸引力,那么作为服务的提供方与应用的承载者,低代码开发平台自身应该承担怎样的职责,其中又会遇到多大的挑战?是否就一定要如阿里云所主张的那样,“把复杂留给自己,把简单留给别人”?虽然这句话听起来很深明大义,但不知道大家有没有想过,为什么我们一定要抱着复杂不放,平白无故给自己找事?就不能直接干掉复杂,也给咱阿里云自己的员工留点简单吗?是工作太容易就体现不出来KPI价值了,还是家里的饭菜不如公司的夜宵香?
冥思苦想许久后,我从热力学第一定律中找到了答案:开发一个应用的总复杂度是恒定的,只能转移而不可能凭空消失。要想让开发者做的更少,安心享受简单的快乐,那么平台方就得做的更多,默默承担尽可能多的复杂度。就像一个满身腱子肉的杂技男演员,四平八稳地托举着在高处旋转与跳跃的女搭档;上面的人显得越轻盈越毫不费力,下面的人就得越稳重越用尽全力。当然,不是说上面的女演员就很轻松没压力,只是他们各自的分工不同,所承担的复杂度也不一样。
根据《人月神话》作者Fred Brooks的划分,软件开发的复杂度可以划分为本质复杂度(Essential complexity )和偶然复杂度(Accidental complexity)。前者是解决问题时固有的最小复杂度,跟你用什么样的工具、经验是否丰富、架构好不好等都无关,而后者就是除此之外在实际开发过程中引入的复杂度。通常来说,本质复杂度与业务要解决的特定问题域强相关,因此这里我把它称为更好理解的“业务复杂度”;这部分复杂度不是任何开发方法或工具能解决的,包括低代码。而偶然复杂度一般与开发阶段的技术细节强相关,因此我也相应把它称为“技术复杂度”;而这一部分复杂度,恰好就是低代码所擅长且适合解决的。
为开发者尽可能屏蔽底层技术细节、减少不必要的技术复杂度,并支撑其更好地应对业务复杂度(满足灵活通用的业务场景需求),这是身为一个低代码开发平台所应该尽到的核心职责。
请点击输入图片描述
在尽到上述职责的同时,低代码开发平台作为一个面向开发者的产品,还需要致力于为开发者提供简单直观的极致开发体验。这背后除了巨大的工作量,还得能在“强大”和“易用”这两个很难两全其美的矛盾点之间,努力找到一个符合自己产品定位与目标客户需求的平衡点 —— 这也许是设计一个通用低代码开发平台所面临的最大挑战。
三、低代码相关概念对比
纯代码(Pro-Code / Custom-Code)
“纯代码”可能算是我杜撰的一个词,更常见的说法是专业代码(Pro-Code)或定制代码(Custom-Code);但意思都一样,就是指传统的以代码为中心(Code-Centric)的开发模式。之所以我选择用“纯代码”,是因为如果用“专业代码”会显得似乎低代码就不专业了一样,而用“定制代码”又容易让人误解成低代码无法支持定制的自定义代码。
当然,更准确的称谓我认为是“高代码”(与低代码恰好对应,只是名字太难听,被我嫌弃了...),因为即便是使用传统的代码IDE,有些开发工作也支持(甚至更适合)以非代码方式完成,比如:iOS端开发时使用的SwiftUI界面设计器、服务端开发数据库应用时使用的PowerDesigner建模工具。不过这部分可视化工作在传统开发模式下只是起辅助作用,最后通常也是生成开发者可直接修改的代码;开发者仍然是以代码为中心来开展主要工作。
低代码与纯代码之间的关系,其实跟视频和文章之间很像:
低代码就像是现代的“视频”,大部分内容都由直观易理解、表达能力强的图片组成,因此更容易被大众所接受。但与此同时,视频也不是死板得只能有图片,完全可以添加少量文字(如字幕、标注)来弥补图片表达不够精确的问题。BTW,关于“图”和“文字”之间的辩证关系,可以进一步参考《架构制图:工具与方法论》[1]这篇文章中的相关描述。
纯代码则更像是传统的“文章”,虽然很久以来都一直是信息传播的唯一媒介,但自从视频技术诞生以及相应软硬件基础设施的普及以来,便逐渐开始被抢走了风头。如今,视频已成为大部分人获取信息的主要渠道(从电视电影到B站抖音),而经常读书读文章的人却越来越少。但不可否认的是,文章依然有它存在的意义和受众(不然我也不会费这劲敲这么多字了),即使“市场份额”一直在被挤压,但永远会有它立足的空间。
请点击输入图片描述
如果按上面这种类比关系推导,低代码未来也会遵循与视频类似的发展轨迹,超越纯代码成为主流开发模式。Gartner的预测也表达了相同的观点:到2024年,所有应用程序开发活动当中的65%将通过低代码的方式完成,同时75%的大型企业将使用至少四种低代码开发工具进行应用开发。
但同样地,就像是视频永远无法取代文章一样,低代码也永远无法彻底取代纯代码开发方式。未来低代码和纯代码方式将以互补的形态长期共存,各自在其所适合的业务场景中发光发热。在后面的“低代码业务场景”章节,会详细列出哪些场景在现阶段更适合用低代码模式开发。
零代码(Zero-Code / No-Code)
从分类的完备性角度来看,有“纯代码”自然也应该有完全相反的“零代码”(也称为“无代码”)。零代码就是完全不需要写代码的应用开发平台,但这并不代表零代码就比低代码更高级和先进,它只是做了一个更极端的选择而已:彻底拥抱简单的图形可视化,完全消灭复杂的文本代码。选择背后的原因是,零代码开发平台期望能尽可能降低应用开发门槛,让人人都能成为开发者(注意:开发 ≠ 写代码),包括完全不懂代码的业务分析师、用户运营,甚至是产品经理(不懂装懂可不算懂)。
即便是专业开发者,在技术分工越来越精细的趋势下(前端/后端/算法/SRE/数据分析..),也很难招到一个能独立开发和维护整套复杂应用的全栈工程师。但零代码可以改变这一切:无论是Java和JavaScript傻傻分不清楚的技术小白,还是精通深度学习但没时间学习Web开发的算法大牛,都可以通过零代码实现自己的技术梦或全栈梦。“改变世界的idea已有,就差一个程序员了”,这句玩笑话或许真的可以成真;哦不,甚至都用不着程序员,有idea的人自己就能上。
请点击输入图片描述
当然,所有选择都要付出代价,零代码也不例外。完全抛弃代码的代价,就是平台能力与灵活性受限:
• 一方面,可视化编辑器的表达能力远不及图灵完备的通用编程语言,不引入代码根本没法实现灵活的定制与扩展(当然,理论上也可以做成Scrach/Blockly那样的图形编程语言,但那样不过是换一种形式在手写代码而已)。
• 另一方面,由于目标受众是非专业开发人员,平台能支持的操作会更趋于“傻瓜化”(e.g. 页面只支持大块业务组件的简单堆叠,不支持细粒度原子组件和灵活的CSS布局定义),同时也只会透出相对“亲民化”的模型和概念(e.g. 使用“表格”表示数据,而不是用“数据库”),无法支撑强大专业的底层开发原语和编程理念。
请点击输入图片描述
虽然零代码与狭义上的低代码有着上述明显差异,但从广义上来说,零代码可以当作低代码的一个子集。Gartner在其相关调研报告中,就是将“No Code”划在了范围更广的低代码应用平台“LCAP”(Low-Code Application Platform)中。而当前市面上很多通用的低代码开发平台,也都兼具一定程度的零代码能力;比如低代码领域领头羊Mendix,既提供了简单易用的零代码Web IDE - Mendix Studio,也包括一个功能更强大的低代码桌面IDE - Mendix Studio Pro。
HpaPaaS(高生产力应用PaaS)
上文提到,“Low-Code”一词是拜Forrester所赐。作为同样是国际知名调研机构(a.k.a 造词小能手)的Gartner,显然不会轻易在这场可能决定低代码领域江湖地位的新概念作词大赛中认输,于是也于2017年发明了“HpaPaaS”(High-productivity application Platform as a Service)这个听上去更高大上的缩写词。
按照Gartner的定义,HpaPaaS是一种支持声明式、模型驱动设计和一键部署的平台,提供了云上的快速应用开发(RAD)、部署和运行特性;这显然与低代码的定义如出一辙。但事实证明,名字起得太专业并不见得是好事,“HpaPaas”最终还是败给了起源更早、更接地气也更顺口的“Low-Code”:从2019年开始,Gartner在其相关调研报告中也开始全面采用“Low-Code”一词(如LCAP),亲手为“HpaPaaS”打上了 @deprecated 印记。
请点击输入图片描述
图源:What’s the difference between SaaS / IaaS / PaaS / aPaaS / HpaPaaS?
值得补充的是,“HpaPaaS“这个词也并非横空出世,而是传承自更早之前Gartner提出的“aPaaS”,它俩之间的关系是:HpaPaaS只是aPaaS的一个子类;除了HpaPaaS这种通过低代码实现的高生产力应用开发平台以外,aPaaS还包括面向纯代码的传统应用开发平台(High-control aPaaS,即可控度更高的纯代码开发方式)。
不值得但就想八卦一下的是,“aPaaS”这个词也非凭空捏造,而是与云计算的兴起渊源颇深。相信各位云道中人都已猜到,aPaaS与IaaS/PaaS/SaaS这些云计算远古概念是一脉相承的:aPaaS介于PaaS和SaaS之间,相比PaaS提供的服务更偏应用,但又不像SaaS一样提供现成的软件服务(更详细的说明可参考配图来源文章)。
四、为什么需要低代码
低代码是什么可能并没那么重要,毕竟在这个信息爆炸的世界,永远不缺少新奇而又短命的事物。大部分所谓的新技术都只是昙花一现:出现了,被看到了;大部分人“哦”了一声,已阅但表示不感兴趣;小部分人惊叹于它的奇思妙想,激动地点了个赞后,回过头来该用什么还是什么。真正决定新技术是否能转化为新生产力的,永远不是技术本身有多么优秀和华丽,而是它是否真的被需要,即:为什么需要低代码?如果用不同的主语填充上面这个问句(冷知识:这叫做“延迟主语初始化”),可以更全面地看待这个问题:
为什么「市场」需要低代码?
在这个大爷大妈都满嘴“互联网+”和“数字化转型”的时代,企业越来越需要通过应用(App)来改善企业内部的信息流转、强化与客户之间的触点连接。然而,诞生还不太久的IT信息时代,也正面临着与我国社会主义初级阶段类似的供需关系矛盾:落后的软件开发生产力跟不上人民日益增长的业务需求。
请点击输入图片描述
Gartner预测,到2021年应用开发需求的市场增长将至少超过企业IT交付能力的5倍。面对如此巨大的IT缺口,如果没有一种革命性的“新生产力”体系,很难想象仅凭现有传统技术体系的发展延续就能彻底解决问题。而低代码技术正是带着这样的使命而降临,期望通过以下几个方面彻底革新应用开发生产力,拯救差一点就要迈入水深火热的IT世界:
提效降本 质量保障
虽然软件行业一直在高速发展,新的语言、框架和工具层出不穷,但作为从业者我们不得不承认:软件开发仍处于手工作坊阶段,效率低、人力成本高、质量不可控。项目延期交付已成为行业常态,而瓶颈几乎总是开发人员(对机器能解决的问题都不是问题);优秀的开发人才永远是稀缺资源,还贼贵;软件质量缺陷始终无法收敛,线上故障频发资损不断。
相比而言,传统制造业经过几百年工业革命的发展,大部分早已摆脱了对“人”的强依赖:从原料输入到制品输出,中间是各种精密仪器和自动化流水线的稳定支撑,真正实现生产的标准化和规模化。虽然信息化号称是人类的第三次工业革命,但以软件行业目前的状况,远远还没到达成熟的“工业化”阶段。
所以,亲爱的程序员朋友,当你与前端联调了一上午接口,又与产品撕逼了一下午需求,再与自己的bug抗争了一整晚,好不容易遁入梦乡又被一连串报警短信吵醒时,是否有抬头对着星空憧憬过:“I have a dream... that one day,软件开发也能像工业制品一样,批量流水化生产,稳定高效没烦恼。” 事到如今,不管你有没有意识到,这个憧憬正在慢慢变成现实。
请点击输入图片描述
是的,低代码正在将应用软件开发过程工业化:每个低代码开发平台都是一个技术密集型的应用工厂,所有项目相关人员都在同一条产线内紧密协作。开发主力不再是熟知for循环一百种写法的技术Geek,而是一群心怀想法业务sense十足的应用Maker。借助应用工厂中各种成熟的基础设施、现成的标准零件、自动化的装配流水线,开发者只需要专注于最核心的业务价值即可。即便是碰到非标需求,也可以随时自己动手,用最灵活的手工定制(代码)方式来解决各种边角问题。
扩大应用开发劳动力
通过让大部分开发工作可以仅通过简单的拖拽与配置完成,低代码(包括零代码)显著降低了使用者门槛,让企业能够充分利用前面所提到的平民开发者资源。部分纯零代码需求场景下,低代码还能让业务人员实现自助式(self-service)应用交付,既解决了传统IT交付模式下的任务堆积(backlog)问题,避免稀缺的专业开发资源被大量简单、重复性的应用开发需求所侵占,也能让业务人员真正按自己的想法去实现应用,摆脱交由他人开发时不可避免的桎梏。
请点击输入图片描述
至此,应用开发能力不再是少数专业开发者的专利和特权,且今后所需要的技能门槛与拥有成本也会越来越低,真正实现所谓的“技术民主化”(democratization of technology)。
加强开发过程的沟通协作
多方调查结果显示,软件项目失败的最主要原因之一就是缺乏沟通(poor communication)。传统开发模式下,业务、产品、设计、开发、测试与运维人员各司其职,且各有一套领域内的工具和语言,长久以来很容易形成一个个“竖井”(silos),让跨职能的沟通变得困难而低效。这也是为什么当前热门的敏捷开发和DevOps都在强调沟通(前者是协同Biz与Dev,而后者是协同Dev和Ops),而经典的DDD领域驱动设计也主张通过“统一语言”来减少业务与技术人员之间的沟通不一致。
请点击输入图片描述
有了低代码后,这一状况将得到根本改善:上述各角色都可以在同一个低代码开发平台上紧密协作(甚至可以是同一个人),这种全新的协作模式不仅打破了职能竖井,还能通过统一的可视化语言和单一的应用表示(页面/数据/逻辑),轻松对齐项目各方对应用形态和项目进度的理解,实现更终极的敏捷开发模式,以及在传统DevOps基础之上更进一步的BizDevOps[2]。
统一开发平台下的聚合效应
低代码尝试将所有与应用开发相关活动都收敛到同一个平台(one platform)上后,将会产生更多方面的聚合效应与规模收益:
• 人员聚合:除了上一点所提到的各职能角色紧密协作以外,人员聚合到统一的低代码开发平台进行作业后,还能促进整个项目流程的标准化、规范化和统一化。
• 应用聚合:一方面,新应用的架构设计、资产复用、相互调用变得更容易;另一方面,各应用的数据都天然互通,同时平台外数据也能通过集成能力进行打通,彻底消除企业的数据孤岛问题。
• 生态聚合:当低代码开发平台聚合了足够多的开发者和应用后,将形成一个巨大的、连接一切、有无限想象力的生态体系,彻底放飞低代码的价值。
关于“程序员是不是吃青春饭”的话题讨论由来已久,对于那些即将或已经步入中年的程序员来说,似乎不转管理岗或进阶高层就会被富有活力的年轻程序员替代。但是舒适圈呆久了再想着转行或重头再来,似乎青春已走远,勇气也被封尘。好比当下大火的数据分析岗位,很多小白或零基础的转行从业者数不胜数,但总有些顶级的软件开发者,不愿意从事管理岗位或转行寻求新的出路,仍然活跃在一线写着代码。你知道的都有哪些?
美国劳动力的中值年龄是 42 岁,而 Stack Overflow 的一项有关年龄的调查表明,40 岁之后的开发人员只占开发人员总数的 13%。那么其他人到哪里去了?他们被解雇了或者上升到管理岗位了吗?软件开发对于过了 40 岁的人来说,是不是就意味着终结?
本文罗列了 10 位年龄超过 40 岁的老程序员们的故事,他们都是顶级的软件开发者,拒绝从事管理岗位,仍然活跃在开发一线,将编程作为生活收入的主要来源。
Rob Fletcher,Netflix(Los Gatos,CA)的高级软件工程师,45岁
专长:Web 开发、测试驱动开发、敏捷软件开发、Grails、Groovy、Spock 以及 AngularJS。
我已经写了 16 年的代码,做了几年独立承包商之后,在 42 岁那年加入 Netflix,成为一名高级工程师。
我每天都写代码。目前最喜欢的语言是 Kotlin。我想学习 Go 语言,平常用得比较多的是 Java、Scala 和 Groovy。我一直在学习新的东西,哪怕是很小的事情。我知道自己会是一个糟糕的管理者,所以我压根没有想往管理方向发展。
很多事情取决于你的态度。不要成为厌恶新技术的老技术人,也不要嘲笑那些正在使用新技术的人。在进行技术选型时,你的经验应该成为决策的基础。如果选择了老技术,那是因为它们正好适合当前的需求,而不是因为要保护你那积攒了多年却即将过时的专业知识,也不是因为害怕那些后进者带着 Node.js 和 Go 语言来抢夺你的工作。
Ebbe Kristensen,Prevas A/S(Denmark)的高级软件设计师,62岁
专长:开发实时嵌入式软件、软件配置管理、构建测试用例(系统测试和单元测试)。在实时嵌入式系统、Linux 和 Windows(包括。NET)方面有丰富的写作和文档经验,擅长 C、C++、Python、C# 和 Pascal。
我在 1980 年获得了一个电力系统的电子工程学士学位,从我的第一份工作开始,我就以开发软件作为我的谋生手段。因为专业学位的问题,我花了将近一年的时间才找到第一份工作。但从那个时候开始,我一直是一名软件工程师。
我几乎天天写代码,不处理任何与管理相关的任务。事实上,在很早之前我就意识到,我在管理方面没有什么竞争力。
作为一名程序员,我很喜欢这个角色,我也很胜任这份工作。如果让我做一名管理者,肯定会有大麻烦,而且我一点也不享受管理工作。
我的同事里只有两个人年纪比我大,其他的(包括上司们)都是比我年轻。我的直线经理不到 40 岁,而他是我见过的最好的管理者之一。我在 58 岁那年得到了这份工作,不过我并不是年纪最大的雇员,有两个同事年纪比我还大,尽管如此,他们还是被公司录用了。
有时候,你几天甚至几周都不会学进去什么东西,而有时候几个小时学进去的东西就可以把之前 “损失” 的时间弥补回来。重要的是,你总是想方设法地去学习,时刻准备着,等待机会的出现。
John Brothers,MakeBuild(Atlanta,GA)的高级软件架构师,47岁
专长:企业架构和开发、敏捷教练、数据可视化软件。信用卡处理、IT 服务和移动应用开发。
我喜欢解决问题,而且我喜欢寻找新的方式来解决问题。正因为如此,我似乎具备了与时俱进的技能。
我最近正在使用 Node.js 开发一个项目,之前也用过 Hadoop、NoSQL,开发过 Android 应用,也写过 Go 语言代码,还熟悉 jQuery 和 Bootstrap 的各种特性。
我也关注 Java 的最新动态,还有 Spring、JMS、REST、JSON 和 JPA,以及其他相关的技术。
我也适当关注技术生态系统的其他部分。在过去的几年,我使用了 IntelliJ、Eclipse、Sublime、Emacs 和 Vi 这些开发工具,我很喜欢使用这些工具来解决各种问题。我一开始使用的是 CVS,后来学习了 Subversion,最近在学习 Git。我也有 AWS 相关的经验。我还是一个获得认证的 Scrum Master、产品经理和开发者。我写过很多自动化单元测试(在构建一个系统时,以测试驱动开发是我最喜欢的挑战之一)。
我不害怕学习新东西。我使用 Ruby on Rails/Grails 开发 Web 应用,使用 Perl、PHP 和 Python 开发应用解决业务问题。我也有 SOAP 和 AOP 的相关经验。
我尝试着要成为一名全栈的开发者。我熟悉 Unix,经常编写 shell 脚本。我喜欢部署应用、服务器和工具,不管是为了开发还是为了生产。我熟悉 SQL 和 NoSQL,并且知道它们各自的优缺点。我了解 TCP/IP,我知道路由、DHCP 和各种代理的基础知识。我构建过 MVC 应用、消息驱动的应用、EJB 和基于 Spring 的服务。我也做过前端的 JavaScript 和 CSS 开发。我并不想成为一个可以拿奖的 UX 开发者,但最起码可以完成基本的功能。
我计划再干 21 年。如果我们从 Web 开发转向基于 D-ware 服务器的开发,我或许会落后;如果函数式编程最终一统天下,我或许会落后。不过真到了那个时候,我仍然心存希望。
Roger Whitcomb,Actian 公司(Palo Alto,CA)的软件架构师和软件工程师,60岁
专长:C、C++、Java
在我准备成为一名律师的时候,我才开始学习计算机科学(如果你可以想象这是怎样的一种情况)……现在,我通过编写大量具有良好文档化和功能性的 Java 代码来获得我的生活收入(起码现阶段是这样的)。
在 Windows 3.0 时代(大约是在 1986 年前后,我也记不太清楚了)我就开始在 Windows 上做开发。大约是在 10 年前,我转到 Mac 上,之后就没有再回到 Windows 上。我感觉自己就是一个使用 MacBook Pro 工作的极客……使用 C、C++、Java 和 Swift 进行开发……
我最近的一份工作需要从头设计一整个系统,这也是我第一次做这样的事情。我现在要跟上 Web 和移动开发的速度有点吃力,但离 “垂暮” 还很远,尽管我已经 60 岁了。过去我也获得一些 “管理者” 相关的工作,不过我都拒绝了,我还是更愿意选择编程工作……
不过,我也知道,我的一些与我年纪相仿(或者年纪更大)但已下岗的同事在找工作时遇到了麻烦(“是因为经验太丰富了吗”),所以我知道人们是怎么看待那些过了一把年纪的人,认为他们没有未来。但是,我认为最关键的是,你要为你的雇主持续地创造价值。
我目前是 Apache 软件基金会 Pivot 项目的 PMC 主席。作为一名 Java 开发人员(Java 相关项目的提交者),我希望 Java 会永生。最起码不要出现更好的语言,要我把所有的代码都移植过去……
Scott Gartner,Silverback Learning Solutions(Boise,ID)的高级软件工程师,50多岁
专长:框架、解析器、建模、图形、数据库子系统的设计和实现,数据库设计(SQL、DML、DDL 和 LINQ)、xml 设计、单点登录方案(SSO)、互联网应用、Windows 应用和动画。
我已经做了 34 年的程序员,而我的简历只要一张纸就可以装下。所有超过 5 年的技术在简历上都只是一笔带过。我有第二张简历,上面列出了所有我用过的编程语言和开发工具、数据库、动画系统,等等。这样,大家可以更容易了解我。我只在被问到的时候才会拿出第二张简历。
在大公司里(至少对于我来说),老程序员一般都想转到管理层,这也是很常见的一种现象。我一直面临着类似的选择,但我不擅长管理,我只喜欢成为一名程序员或架构师。
我发现我的记忆力大不如前,也没办法记住大型系统的全部模型。不过,我发现我那些丰富的经验变得越来越有价值。
我们不得不承认我们的整个职业生涯必须不断地接收训练成长,世事变化得太快,如果止步不前,终将被淘汰。
每两年我就会学习一种新的编程语言,有一些是我自己想学的,不过大部分是因为技术发展的需要(也有的是因为新工作的要求)。这样很有趣。目前我在学习数据仓库(OLAP)、ETL 处理、Star Schemas 和 Cubes。
Brian Bowman,SAS(Cary,NC)的首席软件工程师,56岁
专长:专利文件系统或数据库的内部组件、持久化数据结构、目录和索引搜索技术、服务器管理、DASD IO 驱动、机器码生成或跨架构的代码转换、对象持久化、客户端与服务器端的接口、多租户、分布式缓存,以及大规模的授权系统(实施、管理和日志)。目前在 SAS Viya 平台上做 Cloud Analytics Service 方面的研究、设计和编程工作。
我目前团队成员的平均年龄为 50 岁,而且每一位成员都有超过 20 年的系统软件开发经验。
我和我的同事们花了很多时间在编码、调试、测试和解答系统架构问题上面。有些同事还涉及硬件技术评估、在大会上呈献演讲,以及为开源社区贡献力量,等等。
在过去两年,我一直是某软件公司精英团队的成员之一,这个公司有很多非常出色的工程师,很多都有高级的计算机和应用数学等专业的学位。在那之前,我在一个小型的团队里工作了超过 10 年的时间,我们从无到有设计开发了一个多线程的元数据对象集群服务器。
团队里与我的关系最为密切的同事比我大 5 到 6 岁。在那期间,我获得了 4 项美国国家专利……那些都是在我 40 岁之后获得的。
只要我还能做出有意义的贡献,我就会一直工作下去。我多次给我的职业生涯充电,从最早的学习和研究,到后来的工作岗位的需要。这是我的本性,也是激励我持续进步的动力。
我不认为现今的技术只能让我干到 70 岁。我的职业生涯从 1983 年开始,我通过四项主要的计算机技能生存下来:
· 汇编语言级别的大型机系统编程。
· 基于 C 语言的多主机平台的可移植编程,包括桌面、中型 Unix 网络、小型机的后续产品(如 VAX),以及大型机。
· 多层集群服务器环境,由后端的多线程 C 以及处于中间层满足高可用要求的 Java 组成,主要面向 Windows 服务器和 Unix 环境,也包括 Linux。
· 基于多线程 C 的大规模并行网格计算,满足虚拟的无限伸缩。
虽然我所拥有的这些技能可以干到退休,但在未来的几年,我还会将我的专业知识领域扩展到机器学习方面。
或许在 10 年之后,对普通程序员的需求会大幅下降。如果一个人真的喜欢计算机技术,但是在编程方面达不到更高的水平,那么可以考虑成为一名经验丰富的系统管理员。他们总有很多工作要做,比如配置、部署和维护系统。
Alec Cawley,DisplayLink(Palo Alto,California)的首席软件研究员,60多岁
专长:嵌入式、多线程、多进程、驱动、通信栈、C/C++、Java、Python、硬件。软件架构师 / 工程师,特别是在与硬件紧密接触的软件系统,与硬件工程师一起工作,最大化发挥软件和硬件的效能。
在我 62 岁的时候,我已经是公司里年纪最大的开发者了,其他人大都是 40 多岁或 50 出头。
我最年轻的同事应该是 20 多岁,他们与我有 35 年的年纪差别,不过这不是问题。
我们要拥抱技术。现在的世界与我的职业生涯刚开始的时候(穿孔纸带时期的 Fortran)已经很不一样了,而变化仍然在持续。但反过来说,需要解决的问题总是很相似的,无非就是如何将人类的需求转成计算机可以做的事情,以及如何避免犯错、如何找出不可避免所犯下的错误。编程语言、开发环境、工具套件、API 等东西只是解决问题的手段,我们只是在需要它们的时候才去学习如何使用它们。
我是从穿孔纸带开始的。即使是到了磁盘文件时代,我仍然是最早从行式打印机里读取程序的人。后来就有了普通文本编辑器。现在我使用具有语法高亮功能的 IDE。
我认为,在 10 到 20 年的时间里,仍然需要软件开发人员。在我看来,软件开发者的工作就是把客户的需求转换成计算机执行的指令,而这样的工作是不可或缺的。这个世界总是需要一些高手,他们在计算机方面比普通人懂得更多,并且掌握了大量与工具相关的知识(软件包、API、接口,等等)。
在选择公司方面,我是幸运的。我的大部分时间都花在了软件开发上,而且总能做一些以前没有做过的事情。软件开发里总有一些重复性的工作,我可以想象得出那样做是很无聊的。不过,如果你总是在做新的东西,那就不会无聊了。
我所在的嵌入式领域似乎比应用程序更加能够扛住潮流的冲刷。应用程序每几年就会有新的东西出现,有些几乎是昙花一现,有些会持续一段时间,经历巅峰,然后逝去。而嵌入式一直保持坚挺,以 C 语言为基础,再融合一点 C++。另一方面,硬件也在持续发生变化,这让事情变得更加有趣。
Victor Volkman,Proquest(Ann Arbor,MI)的高级软件工程师,54岁
专长:编程方面擅长 Python、Linux、C/C++、.NET,数据库方面精通 MS Access、MySQL 和所有基于 SQL 的环境,还有 TCP/IP、企业系统自动化和分布式计算方面的经验。
架构与管理是两道平行线。在超过 250 人的公司里,技术人员一般都会有这两条路可以走。
你喜欢你正在做的事情吗?如果是,那么就继续做下去。为了一点薪水而放弃你所喜欢的事情,整天摆弄会议和邮件,这样会让你得不偿失。
每过两年,游戏规则就会发生变化。不过不用为此感到苦恼。花 3 到 4 天时间学习新的编程环境,然后用它们来支持业务。在过去的 30 年,我几乎每 4 年就要学习新的东西。我所在的团队有 6 个人,年龄从 48 岁到 56 岁。我们经历了 3 到 8 次的技术更新。
以下是我的职业概览:
· 从使用 C 和汇编语言编写 MS-DOS 代码开始
· 学习使用 C++ 和 MFC 开发 Windows 应用程序
· 学习使用 Unix Perl 开发基于 CGI-BIN 的 Web 应用
· 学习 C#
· 学习 Java 和 JSP
· 学习智能手机开发:iOS/Android/Blackberry
· 回到 Unix,开始使用 Python
· AWS 开发(EC2、RDS、SQS,等等)
Kurt Guntheroth,软件工程师,50多岁
专长:Windows、Linux/Unix、嵌入式;算法设计、C++、C、多线程和分布式、电信、安全、套接字编程、标准委员会成员、产品计划和概念落地;TQM、ISO 9000、敏捷开发和传统开发方法论。
软件开发仍然是一个年轻的领域,工具和技术仍然在发生快速的变化。如果软件开发人员不能持续地更新他们的技能,在不到 20 年的时间里,他们就会过时。所以,一个 40 岁的老程序员很快就会发现自己已经无法胜任工作,而且前途堪忧。
好的开发人员会持续学习,直到他们退休,比如 Ken Thompsons 和 Bjarne Stroustrups。不过,我们大多数人(特别是 40 岁左右的)最终都会意识到,我们并不能成为行业的大神。
C++ 变化很大,每几年就会有新版本出现,并且包含了全新的特性,我从来没有停止过学习。也就是说,我已经成为了一个非常有经验的 C++ 开发者,拥有超过 20 年的全职系统编程经验。如果有人要我给自己的经验打分,从 1 分到 10 分,那么毫无疑问,我会给打自己 9 分,因为比我更了解 C++ 的人只有那些写书的人。后来,我写了一本有关 C++ 优化的书。
编程是一件很容易的事情。你告诉它们做什么,它们就做什么。它们是可以信赖的,也是可靠的。对于代码来说,无所谓好日子,也无所谓糟糕的日子,它们存在的意义就是在你与它们发生交互的时候。代码可能会是难啃的骨头,它们要求对细节的重度关注和相当程度的脑力付出。
人类与代码完全不一样,人类狡猾、变化多端,而且不可能充当工具使用。你不能直接告诉他们做什么,你要去影响他们,这样他们才会做你需要他们做的事情。他们不会直接对你的输入做出响应,而是间接地对你的鼓励或者你所提供的一些奖励物品做出响应。虽然人类对奖惩很敏感,但如果只是通过这种方式来管理人类并不会奏效。管理应该要像与家人、朋友和同伴互动一样。如果你喜欢与人打交道,那么你就会喜欢上管理。如果你不喜欢与人打交道,那么你就不会成为一个成功的管理者。
薪水高的管理者比薪水高的程序员赚得更多,不过他们需要有很多名校的学历背景,拥有良好的人际网络和政治同盟,也需要有一定程度的冷酷无情来震慑大部分人。而编程不需要这种冷酷无情,这也就是编程很好的一个方面。编程是关于创新,而不是操纵。
所以,你要问问自己,你更喜欢哪一种交互模式,是代码的确定性和优雅,还是人类的友情和领导力?喜欢代码完全没有问题,那些高级架构师和 CTO 也能赚很多钱。
James Grenning,软件顾问,60多岁
专长:面向对象软件设计、测试驱动开发(C、C++、Java、C#)、嵌入式软件、重构、极限编程、Scrum、敏捷开发、发布计划、增量计划。C 和 C++ 单元测试框架 CppUTest 的主要贡献者之一。嵌入式系统大会和敏捷大会的演讲人。Agile Manifesto 的初始作者之一。
保持学习。我 62 岁了还在编程,我喜欢编程。
我会花一些时间在管理上,这对我来说是很重要的。不过我还是决定把编程和软件设计作为我的最爱。在我从管理上学了一些东西之后,我决定还是回到我最喜欢的软件开发上。
为了保证你的价值,你要确保 40 年的经验是不重复的。我们生活在一个快速变化的世界,不仅仅是技术,也包括我们如何构建软件。
把东西做出来固然是好,但那样还远远不够。你还要让产品和代码更有用,能存活更长的时间。你要知道如何成为团队的一员。要想让职业生涯长久、成功,同时能赚到钱,只是把东西做出来是远远不够的。
小编也想说两句:
其实人生在世,面临众多的选择,不要被外界的言论所干扰,好好做自己就行。一切都会水到渠成,一切都会柳暗花明。我们只需要做好的——待到我年老色衰,躺在病床上,回望过去,我的嘴角是上扬的,我的内心是无憾的,我的人生是完整的!
剑未配妥,出门已是江湖;酒尚余温,入口不识乾坤。愿您历尽千帆,归来仍是少年;岁月已走远,我心仍少年!