04技术变化那么快,程序员如何做到不被淘汰?|学习笔记

简介: 快速学习04技术变化那么快,程序员如何做到不被淘汰?

开发者学堂课程如何成为技术大牛?04技术变化那么快,程序员如何做到不被淘汰?学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1240/detail/18423


技术变化那么快,程序员如何做到不被淘汰?

 

内容介绍:

一、程序员的迷茫及其原因

二、业务技术与软件系统的价值链

三、如何不被淘汰


本节的主题是技术变化那么快,程序员如何做到不被淘汰?


一、程序员的迷茫及其原因

在浩大的软件世界里作为一名普通程序员显得十分渺小甚至会感到迷茫,大家内心崇拜技术却也对日新月异的技术抱有深深的恐惧。
有时候会思考,难道在技术领域内不断紧跟新潮,不断提升技能就是我的价值所在吗?那么我是技术的主人,还是技术的奴隶?人之所以迷茫,往往是找不到工作生活的重心感受不到工作或生活的价值。那么什么是价值呢?说大一点就是我改变了世界小一点就是我的所作所为改善了某些问题。如果不清楚自己的行为目标价值三者的关系。那么又何来重心?又如何能分得清重要性与优先级呢?
程序员的迷茫不仅仅是面对技术繁杂的无力感,更多的是由长期埋没于软件世界浩大的分工体系中,无法看清从业务到软件架构的价值链条无法清楚定位自己在分工体系的位置处理不好自身与技术业务的关系所致。很多程序员打心底不喜欢业务。这一点我曾经也经历过我更宁愿从事框架工具技术组建研究的相关事情。有个朋友经常吐槽我说你天天加班加点写了那么多代码然后有改变什么吗?
还不是写出了一堆垃圾。仔细想想很多时候业务在我们脑海中存留的只是逻辑和流程我们丢失的是对业务场景的感受对用户痛点的体会对业务发展的思考,而这些都是与价值紧密相关的部分。我们很自然地用战术的勤快掩盖战略的懒惰那么这样的后果就是把自己限死在流水线的工位上阉割了自己能够发现业务价值的能力而过多关注新技术对职场竞争力的价值。这也就是我们面对繁杂技术而产生技术,学习焦虑症的根本原因。


二、业务技术与软件系统的价值链
1.业务

什么是业务呢?就是指某种有目的的工作或工作项目。业务的目的就是解决人类社会与吃喝住行息息相关的领域问题包括物质的需求和精神的需求,使开展业务活动的主体和受众都能得到利益。通俗地讲,业务就是用户的痛点,是业务提供方比如公司的盈利点

2.技术
技术则是解决问题的工具和手段。比如为了解决用户随时随地购物的业务问题时,程序员利用 web 技术构建电子商务 APP 。而当需求升级为帮助用户快速选购商品时,程序员会利用数据算法等技术手段,
构建推荐引擎。技术如果脱离了业务,那么技术应用就无法很好地落地。技术的研究也将失去场景和方向。而业务脱离了技术,那么业务的开展就变得极其昂贵和低效。所以回过头来,想自己没日没夜写了那么多的代码,从而构建起来的软件系统。它的价值何在呢?说白了,就是为了解决业务问题。所以当你所从事的工作内容并不能为解决业务问题带来多大帮助的时候你应该要及时作出调整。
3.价值所在

那么软件系统又是如何体现它自身的价值呢?在我看来,有如下几个方面的体现。
(1)业务领域与功能。比如支付宝立足支付领域而推出的转账收款功能等比如人工智能自动驾驶系统等服务能力这就好比火车站购票窗口评判它的服务能力的标准就是能够同时处理多少用户的购票业务能不能在指定时间内完成购票业务能不能在7×8小时持续工作?对应到软件系统领域,则表现为以下三个方面。系统正确性程序能够正确表述业务流程,没有 bug 可用性可以7×24小时×365不间歇工作大规模高并发高吞吐量。互联网公司正是借助大规模的软件系统,承载着繁多的业务功能使其拥有巨大的服务能力并借助互联网技术突破了空间限制。高效低廉解决了业务问题创造了丰厚的利润这是人肉所不可比拟的。理解了这一层面的概念,就可以清除这个价值链条。公司依靠软件系统提供业务服务而创造价值程序员则是通过构建并持续演进软件系统服务能力以及业务功能支撑公司业务发展,从而创造价值。有了这个价值链条,就可以反思自己的工作学习,对软件系统的服务能力提升起到了多大的推动作用。可以反思自己的工作学习是否切实在解领域的业务问题还是只是做一些意义不大的重复性工作。例如,前两天面试了一个候选人,他的工作是从事票务系统开发。他说自己在研究  linux 内核与汇编语言。我就问他 linux 内核汇编语言的学习对你的工作产生了哪些帮助?能否举一个例子。他哑口无言,我内心就觉得这样一个热爱学习的好苗子正迷茫找不到重心正在做一件浪费精力的事情。正确的学习方式应该是,将学习与具体业务场景结合起来和公司通过软件系统开展业务服务而创造价值程序员通过提升软件系统服务能力创造价值这一链条串接起来从对这些价值产生帮助的程度去思考优先级。学习本身没有错,错的往往就是那颗初心。现在再来看高并发分布式相关的知识会发现并不是因为这些知识比较高比较时髦很多公司有需求才值得学习而是他们对价值链条有着实实在在的贡献。

(2)价值驱动的架构。一谈到软件系统,人们免不了想起架构这件事来。之所以在这里谈及架构,是因为每一个程序员本质都是软件架构体系中的一份子。我们可能深埋于体系流水线之中,感受不到位置和价值。但如果站在架构这一高度去看这些问题,将会非常透彻。那么架构究竟是什么?和上述的价值链又有什么关系呢?什么是架构?在我看来,软件架构就是将人员技术等资源组织起来,以解决业务问题支撑业务增长的一种活动。可能比较抽象,大家可以从架构师的一些具体工作任务来理解这句话含义。

组织业务架构师通过探索和研究业务领域的知识,构建自身看待业务的世界观。会基于这种认识差分业务生命周期确立业务边界构建出了一套解决特定业务问题的领域模型并且确认模型之间领域之间的关系与协作方式完成了对业务领域内的要素的组织工作。

组织技术为了能在计算机世界中运作人类社会的业务模型。架构师需要选用计算机世界中合适的框架中间件编程语言网络协议等技术工具。依据之前设计方案组织起来,形成一套软件系统方案在我看来,软件系统就像是一种技术组织。即技术组件技术手段依据某种逻辑被组织起来了。这些技术工具被确定了职责有了明确分工并以实现业务功能为目标结合在了一起。比如 rpc 框架或消息队列被用于内部系统之间的通信服务,就如同信使一般而数据库则负责记录结果,它更像是一名书记员。

组织人员。为了能够实现利用软件系统解决业务问题的目标架构师还需要关注软件系统的构建过程。他以实现软件系统为号召,从公司组织中聚集一批软件工程师并将这些人员按不同工种不同职责不同系统进行组织确定这些人员之间的协作方式并关注这个组织系统是否运作良好。比如沟通是否顺畅,产出是否达到要求,能否按时间完成的。

组织全局对外输出。架构师的首要目标是解决业务问题,推动业务增长。所以他非常关心软件的运行状况因为只有在软件系统运行起来后才能对外提供服务才能在用户访问的过程中解决业务问题。架构师需要关注运行过程中产生的数据。比如业务成功率系统运行资源占用数据用户反馈信息业务增长情况等这些信息将会帮助架构师制定下一步架构目标和方向。所以软件架构不仅仅只是选用什么框架,选用什么技术组建这么简单。它贯穿了对人的组织对技术的组织对业务的组织并将这三种组织以解决业务问题这一目标有机地结合在了一起。很多面试的候选人在被问及他所开发的系统采用什么架构的问题,只会罗列出一些技术组件技术框架等技术要素。这样看来,其根本没有理清架构的深层含义。也有一些架构师只专注对底层技术的研究,以为打造一个卓越的系统,是非常厉害的事情。可是他忽略了软件系统的价值,是以解决业务问题的能力支撑业务增长的能力为衡量标准。所以最后生产出了很多对组织,对业务没有帮助的系统。

(3)成本与收益。正如之前所说,软件系统只有在运行的时候才能创造价值,也就是说软件系统能否7×24小时×365天稳定的工作关系到公司的收益水平。所以开发团队对生产环境的发布总是小心翼翼对解决生产环境的问题,总是加班加点而软件系统的成本则体现在软件构建过程。这时候就能理解那些工程技术,如项目管理敏捷开发单元测试持续集成持续构建版本管理等的价值了。们有的是保证软件系统正确性,有的是为了降低沟通成本有的是为了提升开发效率的但总的来说就是为了降低软件的构建成本。所以在提升系统服务能力,创造更多业务收益的同时,降低构件成本也是一种提升收益的有效手段。作为一名软件工程师,我们往往处在软件构建过程体系中的某个环节我们可以基于成本与收益的关系去思考自己每一项技能的价值。学习新的有价值的技能甚至在工作中基于成本与收益的考量,选择合适的技术。比如在逻辑不大,发生变化的地方,没有必要去做过多的设计应用各种花俏的设计模式等浪费时间这样我们才能成为技术的主人。
(4)架构目标需要适应业务的发展。架构的目标就是为了支撑业务增长提升软件系统的服务能力。但是在实际情况中却要作出很多取舍。比如对初创团队而言,其产品是否解决业务问题,这一设想还没得到确认就立即去构造一个高性能高可用的分布式系统,这样的架构目标远超出业务发展的需求,而最后的结果就是浪费大量人力物力却得不到任何起色。架构师需要审时度势,仔细衡量正确性大规模可用性三者的关系。比如今年业务蓬勃发展,日均订单300万基于对未来的可能预测,明年可能有3000万的订单。那么架构师应该要着重考虑大规模和可用性而且每一点提升的程度也需要架构师衡量把握。比如可用性要达到两个九还是三个。回顾以往的工作,很多时候就是因为没有确立架构目标,导致浪费了组织很多资源。比如在之前的创业团队中,由于本人有一定的代码洁癖,经常会花费很多时间和同事计较代码质量。这样本可以更快上线的功能,却需要被延迟。当时过度追求正确性的行为是与创业团队快速验证想法的业务需求不匹配的。另外一点比较深刻的案例则是在本人担任一个技术团队负责人的时候,在一次述职报告的时候, leader 我对接下来团队工作有什么计划?当时说了一堆什么改进代码质量每天晨会任务透明化建立迭代机制等等然后就被各种批驳一通。当时团队基本以外包人员为主,人员水平较差开发出来的金融系统也是千疮百孔而这条业务线最重要的业务价值则是按计划实现潜在投资方的需求,争取拉到投资所以不久 leader 就召集测试架构的相关人员与我这边一同梳理对核心功能的测试工作将研发测试上线的流程自动化。当时并不理解这样做核心价值是什么。但回过头来看,这样的工作方式恰好符合了业务发展的需求。既确保系统是符合设计需求的保证系统达到可接受的正确性,也为后续能够快速前进打下基础最重要的是为企业降低了构建成本。所以程序员想要工作出业绩必须认清楚系统背后的业务价值。按价值去梳理工作优先级,而不是像我一般过度纠结细节,追求技术理想化。

 

三、如何不被淘汰

1.成也分工,败也分工

正如在程序员的迷茫那章节提到的程序员的迷茫因为长期埋没于软件世界的浩大的分工体系中,无法看清从业务到软件架构的价值链条无法清楚定位自己在分工体系的位置处理不好自身与技术业务的关系所致所以在这里谈谈分工。架构师为了使软件系统更好的服务业务,必然将软件系统生命周期进行拆分。比如分出开发生命周期测试生命周期用户访问生命周期软件运维生命周期并根据不同的生命周期划分出不同的职责与角色。比如开发人员负责开发周期负责完成软件研发测试人员负责对开发人员交付的成果进行测试等于是就形成了分工。一旦分工形成,每一个分工组织都会有自己的价值追求。架构师关注的顶层的价值及软件系统能否支撑业务增长分工的形式碎到各个组织中,分工是具有其价值的。它使得复杂昂贵任务可以被简单并行可替换的流水线方式解决。但久而久之,价值碎片化的问题就出现了。比如测试人员只关注找出更多问题;开发人员只关注快速开发更多的系统;运维人员只关注保障系统稳定。三者之间常常都只站在自己的立场去要求对方怎么做,没有人再关注整体价值。产生诸多矛盾,增加软件实施成本。而身处流水线中的一员,又因为困扰于重复性工作迷茫于工作的意义,甚至感觉自己作为人的创意与灵感都被扼杀了。所以我的朋友吐槽我,说你写了那么多代码,然后并没有怎么样是非常有道理的。那是因为我只关注着作为流水工人的价值要求,看不到生态链最顶端的价值。仔细想想,那些团队领导、精英领袖,哪一个不是为着更广大的价值所负责?比如项目经理,只需要关心自身项目的商业价值;而公司CEO则关心公司的范畴内所有业务的总体商业值。所以关注的价值越大,且职位也就越高。这些高层领导者们把控着整体的价值链条,及时纠正底层分工组织的价值目标与整体价值目标出现偏差的问题。

2.从价值出发,找寻学习与工作的新思路

迷茫能引发思考,架构则塑造了视野,而价值则是我们之所以存活、之所以工作的逻辑起点,基于这样一种价值思维,对我们的学习和工作又可以有哪些启示呢?

(1)明确自身的业务相关主体。找出你工作协作关系网内的业务方和客户方,这样就可以从客户方中找到离你最近的业务价值点。从你的业务方中挖掘更多的资源,甚至你可以按这个思路顺着网络向上或向下挖掘价值链条,整合更多的上下游资源以实现更大的价值。

(2)向前一步为更大的价值负责。不要因为自己是开发人员,就不去关注软件运维,不要因为只是测试就不关注软件开发。因为你关注的越多,你越能看清全局的价值目标。如果只关注一亩三分地,那么注定这辈子只能困守在这一亩三分地里,成为一名流水线上焦虑致死的码农。试着转变思维,从架构师的角度思考价值问题。看看能否将技术贯穿到业务,到用户,到最终的价值去。之前我的朋友说过要把产品经理提到运营位置去,把程序员踢到产品经理位置去,这样才是正确做事方式。这句话也是类似的意思。向前一步才能懂得怎么做得更好。

(3)向架构师一样思考,用价值找寻重心。人的迷茫是因为找不到重心而价值的意义在于引导我们思考做哪些事情才能实现价值。先做哪些事情会比后做哪些事情,更能创造收益。向架构师那样全局性思考,把遇到问题进行拆分,把学习到的事物串联起来,努力构成完整的价值链条。

(4)学会连接构件体系。前几天看到一篇文章对今日头条的产品形态极尽批判之词。指责他的智能算法,将人类封死在自己的喜好之中;将人类社会进一步碎片化,这似乎很有道理。有趣的是,互联网将我们连接着广袤的世界,却也把我们封闭在独属于自己的小世界里。依旧是我的那位朋友,他说他的最大价值在于连接,也就是将不同的人连接在一起。有趣的事情可能就会即将发生,或许算法的天性就是顺从于银河,但人最终想理解这个世界,还是需要依靠自身的行动与不同人之间建立联系,这也是一种摆脱流水线限制的有效方式。另外,我们自身也是某种事物连接的产物,比如架构师,他是业务、技术、管理连接在一起的一种产物。所以我们应当树立自身的知识体系,以吸收融合新知识,将孤立的概念连接起来,形成自身的价值链条。比如这篇文章将我从事技术开发经验与对架构的理解,以及自身过往经历结合起来,这也是一种内在的体系梳理。

相关文章
|
3月前
|
Java 开发者
跟上时代热点,打造高质量代码
本文探讨了Java编程中的风格与规范,强调了命名规范、代码格式和注释的重要性。合理的命名应反映变量、方法和类的功能,如使用`CustomerService`而非模糊的简称。代码格式上,建议每层缩进四个空格,并在逻辑块间留空行以提升可读性。恰当地添加注释有助于解释代码逻辑,而避免魔法值和减少重复代码则能进一步增强代码质量与可维护性,如通过提取公共方法。遵循这些最佳实践,将使代码更易于理解与维护,促进团队合作并推动项目长远发展。
37 0
|
4月前
|
缓存 自然语言处理 Java
浅析JAVA日志中的性能实践与原理解释问题之减少看得见的业务开销问题如何解决
浅析JAVA日志中的性能实践与原理解释问题之减少看得见的业务开销问题如何解决
|
6月前
|
算法 安全 数据安全/隐私保护
深入探究一个长期隐藏的底层bug的学习报告
在软件开发的过程中,底层bug往往像一颗定时炸弹,随时可能引发严重的问题。本文将分享我在开发过程中遇到的一个长期未被发现的底层bug,以及我如何逐步排查并最终解决这个问题的全过程。通过这次排查,我深刻认识到了代码规范性的重要性。一个不规范的代码修改,虽然短期内可能不会引起问题,但长期累积下来,可能会引发灾难性的后果。此外,我也意识到了底层模块的通用性和风险意识的重要性。在解决一个问题的同时,应该审视是否有相似的问题存在,以避免未来的风险。
126 3
|
6月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
113 0
|
Cloud Native Go Python
当面试遇到难题:解决棘手问题的三大策略
当面试遇到难题:解决棘手问题的三大策略
178 0
|
数据可视化 Oracle 搜索推荐
程序员最终会被自己开发的轮子所淘汰吗?
程序员最终会被自己开发的轮子所淘汰吗?
118 0
|
缓存 前端开发 NoSQL
程序员该知道大型网站架构的发展历程吗?如何有效地增加服务器?
前面介绍了大型网站的业务需求和大致的工作原理,但是不能简单地理解为只要增加服务器就能把一个网站变成一个能应对大量用户的网站。 通过增加服务器来达到支持更多的用户是大型网站架构的目的。 本节简要介绍大型网站架构的发展,并介绍大型网站架构如何有效地增加服务器。 本节介绍的技术点只要了解即可,后续章节会有更详细的说明。 大型网站系统的内部是复杂的,一般是多种网站架构的混合(包括静态网站、动态网站和B/S架构网站等)。
|
缓存 负载均衡 算法
一对一源码开发,减少用户焦虑的三大优化要点
一对一源码开发,减少用户焦虑的三大优化要点
|
应用服务中间件 数据库 缓存
系统性能提升优先法宝|缓存应用实践
缓存是系统性能提升优先法宝,在互联网应用系统中,屡试不爽。网上有很多资料介绍缓存理论及使用策略,本文就不再涉及了,今天简单将缓存做个归类,重点分享以前在实际业务中碰到场景以及如何使用。
1798 0
|
运维 架构师 测试技术
技术变化那么快,程序员如何做到不被淘汰?
阿里妹导读:写了这么多年的代码,你是否曾经有过这样的迷茫和困惑——技术发展日新月异,奋力追赶的我们,究竟是技术的主人还是技术的奴隶?今天,我们邀请到了蚂蚁金服的技术专家空融,一起来聊聊技术人的软件世界观。
4082 0