作为大龄程序员,你如何持续的保持自己的竞争优势

2022-10-03 07:35:19 +08:00
 mascteen

Table of Contents

  1. 作为大龄程序员,你如何持续的保持自己的竞争优势
    1. 作为一个成熟的程序员
    2. 我们还很年轻
    3. 从来都不要按套路出牌
    4. 写代码是一种生活方式
    5. 活到老学到老
    6. 发展出自己的科技树
    7. 说了这么多最后还是要回到多写代码
  2. 写在后面

作为大龄程序员,你如何持续的保持自己的竞争优势

老兵永远不死,他们只会调零。

–英国民谣

在中国的科技公司有一个奇怪的现象,就是 35 岁成了这些公司程序员的一个分水岭,35 岁以上就面临辞退,失业,找工作难,生活压力大等问题。

首先能造成这一现象的一定是有一定的卖方市场,只有源源不断的新鲜人才挤入这个行业,卖方才能噬无忌惮的越俎代庖把老兵给过滤掉。其次不平等的雇佣关系,这在中国是一个普遍现象,员工永远处于弱势的一方,这在你与公司对簿时你几乎不可能有什么胜算,面对这种情况时你也只能小心冀冀尽量保护好自己,这在文明世界是无法想象的,因为我们人类文明发展了几千年确还是处在弱肉强食的从林规则中,前人所做的努力似乎化为了泡影。再次是混乱的市场关系,面对这个新兴的行业,很多人都想往里面挤,当然也有大环境不好的原因,也就造成了人才市场的水平高低不一,如果一个公司的人力资源系统不专业可能造成蛇吞大象的现象,双方都不清楚对方的需求,结果都在浪费对方的时间。

中国公司能如此吃人血馒头有一部份是毫无顾忌的环境,还有对利益无下限的追求。他们还有对解雇 35 岁人才做出解释说是没有什么能力,工资又高,吃空饷,到一定年龄没有升职等,这些解释让人难以至信, 因为中国公司是强势一方,然后又做出如此强势的解释,这属于是流氓了是。如此的环境造就的公司一个个都是吸血鬼,只会吸取先进技术所带来的好处,未对开源<sup>1</sup>社区有任何的贡献,中国市场至今能拿的出手的开源项目寥寥无几,很多大型公司基本都依赖于国际上著名的开源软件,没有任何自己的东西,在国际上不管是技术还是名声都没有任何竞争力,甚至还输出焦虑<sup>2</sup>。

在如此环境下的开发者门自然也是向金钱看齐,不会去专研所谓的技术,很多技术停留于表面的运用,不会去深究里面所运用到的知识,这样的结果就是他们的可替代性太强了,因为你没有去深耕一些领域导致的结果就是别人在你的岗位上看看文档熟练下流程就可以轻易上手了,不需要太多的经验和磨练,而这是不可能让自己保持竞争力的。我们之所以喜欢写代码是因为他带给我们乐趣,我们操纵一切然后得到我们想要的结果,他能对我们的操作做出即时的反馈,他就像是一个永远着摸不透的玩具,时时吸引着我们继续探索,而不是变为一个单一的工具,每天重复着同样的劳动,消耗着我们的精神。而那些计算机的先驱们可都是对计算机充满热情的,而正是这份热情激励着他们不断的去挖掘各种可能,肯尼斯·汤普森<sup>3</sup>曾说过:

我一直着迷于逻辑问题,甚至在小学时,我就开始研究二进制的算术问题了,诸如此类的。只是因为我对此充满着着迷。

作为一个成熟的程序员

不要再存在不切实际的幻想:开发出一个软件然后大火成为百万富翁。时代已经不一样了,现在的人已经被各种软件占据自身的时间了,很难再有软件能迅速吸睛并且长久持续下去。我们应该踏踏实实做好自己的工作,把自己的服务越做越好,等哪一天你的服务市面上最好且没有可替代的竟争对手时,你的成功就是自然而然的事情了,不需要你去苦苦追求,而这一天到来时你只需要平静的面对他就可以了,你只需要做好手头的工作,日益精进自己的技术,挣好一份工资就行了。

开发可以像音乐家、艺术家、医生一样成为一个长久的职业,你可以做 10 年 20 年或者一辈子,一份有挑战性的工作需要一位经验丰富的工程师,而你的经验越多就越能胜任这份工作。而一位后辈的成长也需要一位前辈的开点和指导,软件是主要依靠自身探索和自学的行业,大家也非常乐意去分享经验解决问题,所以一份具体的有建设性的建议也将是让人受益匪浅的,可以说是“听君一席话胜读十年书”。所以你要清楚这并不是什么青春饭行业,我们应对自己的前景有明确的认知,而技术从来都是与大众审美格格不入的,他只有使用的多寡之分没有好坏之分。

不要再去争论语言的使用,每个语言都有他自身的使用环境,只要你自身技术基础好学什么语言对你来说都不是什么难事,语言只是手段不是目地。也不要固执于某个技术,技术都是会更新换代的或者被其他技术取代的,而我们自身的成长不能绑定在某个技术上而做为长期的依靠。我们需要的是靠自己的努力多去学习,以及在这条漫长道路上不让我们迷路的指路灯,例如程序员修炼之道-从小工到专家,并顺应技术的进步与时代的变迁,养成良好的习惯减少不必要的失误。

我们还很年轻

软件行业是一个如此年轻的行业,以至于发展到现在还不到 100 年的时间,在这段时间里诞生了许多无可比拟的大公司,虽然他的起源要追溯到几百年前,但是现代软件行业的兴起应该是从第一个高阶语言 FORTRAN 开始的,至今也就 65 年,已经接近现代语言甚至更抽象一点的语言 LISP 、Algol 、COBOL 至今也就 63 年左右。也就是在 60 年代出生的人他们就见证了整个技术行业发展的历程,从第一台电脑到便携手机,从第一封邮件到联通世界的互联网,从实验室到科技公司占领世界等等,他们都亲自见证了这一切。

艾伦.凯<sup>4</sup>面向对象编程语言的发明者,应该是目前能找到的这个行业资历最老的人了吧,59 岁,他在 35 年前的用户图形界面展示<sup>5</sup>让人印象深刻。作为对比的是音乐界最老的大提琴大师马友友<sup>6</sup>,1955 出生 4 岁开始练琴,如今已经 66 岁了,另一个是吉尼斯最老职业音乐人保持者卡斯帕.马龙<sup>7</sup>至今已有 80 高龄了。也就是说这些音乐大师比真正的软件行业历史还长。

当你想去学习一门技术的时候,不要有是否会过时这种想法,技术总是变化的但是你得到的经验和从中学到的思想是可以伴随着你的。我记得自己看 SICP<sup>8</sup>这门课程时,他带给我的振撼前所未有像是发现了新大陆,我没想到一门语言还能这样神奇,后面我再看其他语言时基本没带给我任何新意都是新瓶装旧酒。所以关键并不在于你选择了什么技术,很多技术都是有一定共性的,而是你用这个技术做了多少事。在实际工作运用 中学习技术,更多的去动手操作他。一味的追随潮流什么火就学什么的结果就是你很难形成自己的技术优势,被潮流托着走。

我们还需要更多的向其他领域学习,当DALL-E 2能学会绘画并获得了艺术奖之后,我意识到我们还有很多可以做,我们是否还能作音乐,作艺术设计,做预测做证明等,我们做为一个年轻的行业还有很多需要向其他领域学习,这些领域都是发展了上千年的了。

从来都不要按套路出牌

软件行业是实操性很强的行业,相对于传统行业的师父领进门修行靠个人我们是不修行的而是真接实操。与其思考这行代码如何运行,运行后会不会有 BUG ,有 BUG 怎么修复等问题,你应该直接把代码写出来并运行它。每时每刻都有技术的轮番更替,你很难按既定的路线循规导矩的学下来,你要做的是看中哪个技术,然后直接动手去尝试,不要说等到适当时宜时再去学习或尝试他,因为学习一门技术最好的时间是十年前其次是现在。让自己尝试不同的技术或领域,如今的环境是不可能一个技术通吃所有功能的,与其花 40 年精通一个技术领域,不如用 10 年时间学习 4 种不同的技术领域,因为技术是螺旋形结构他们之间是共同进步相互促进的,而不是木桶效应。

让自己做的事带有目地性,做这个事或写这行代码能给你带来什么好处,是物质上的还是精神上的都行,都没有的话就不要轻易去做了。写这个软件能给我带来不错的收入,或者他对我技术精进有一些帮助等,想想你能从中获得什么? 或者当你陷入一种枯燥的工作中,这个工作已经不能带给你什么了,那是时候考虑换一个工作或者去度个假了,我们需要让自己做的事有意义。

开发并不存在等级制度,所谓等级只是外面的人造出来用于匹配工资用的。我们已经有了憨实的基础,有可能在任何时候为了某个需求去学习某个技术,所以没有所谓等级来定义我们的情况的。我们也都随时都在学习进步,也在不断的尝试并吸取教训经验,我们不能让自己停滞不前。

写代码是一种生活方式

把写代码当成生活的一部份,像洗澡、化妆、吃饭、写日记一样平常,避免去制定目标然后去实现目标,特别是长远的目标,然后制定详细计划如何一步步的实现目标,完全没必要,首先我们不清楚在这个过程中会有哪些不可抗事情发生,其次这么做也大大了限制我们的能动性和可周旋的余地,然后是没有人能够预测未来会发生什么,而你的目标到那时又能带给你多大的价值呢。我们需要做的就是做好当下的事情,未来不可测的事就未来再说。

把学习也作为生活的一部份,每天搜索引擎找资料,StackOverflow 找答案都是一个学习的过程,他人能回答出你不知道问题就值得我们学习。写代码是没有任何门槛的,你现在打开浏览器打开CodePen就可以真接写代码。当你如此日常的日复一日这样做,10 年 20 年之后你也将惊叹于生活的游刃有余,和自己用代码创造出来的东西。也培养一下其他方面的爱好,例如弹弹吉他玩玩音乐也是一个不错的选择,可以作为生活的调味剂。

把工作和职业分开,做开发可以跟音乐家,艺术家一样可以成为你职业生涯的一部份,可以成为你生活的一部份,就像现代大部份人那样,没事刷刷抖音看看电视,空闲时写写代码也是一件有趣的事。做开发也可以找到好的工作,你可以用他挣取一份不错的工资。有些人不喜欢一些工作,可能是因为 996<sup>9</sup>也可能是因为枯燥无味复杂代码等,但是他不会停止写代码,不是说工作没做了就不写代码了,写代码从来都不是枯燥无味的,工作才是。我们在学习过程中也注意区分工作与职业,有些建议在工作中很有用,但是可能对自己的职业没有任何帮助,例如把客户的需求放在第一位、用什么技术不重要产品好才重要等,这些建议在工作中没有问题,但是我们不要把这些建议代入自己的生活中,还可能对自己的职业造成误会。

活到老学到老

你不必做到一鸣惊人,在技术领域要做到被众人所熟知除了能力,还要天时地利人和,像现在还在世的艾伦.凯因为发明了面向对象编程语言而被推崇,而他那个时候做出的东西确实让人很惊艳,现在语言基本都有这个功能了,但这毕竟是少数。我们不要因为自己没有进入这个行业足够早而不如他们优秀而懊恼,这个行业还是満足 1 千小时定律<sup>10</sup>的,只要你练习的足够久满足这个条件你也可以成为专家,那些比你早几年写代码的人也比就你多几年经验而已。没有所谓的自己太老了不适合进入这个行业了,从来没有这样的说法以后也不会有,你只需打开网页开始写代码。

作为实操性很强的行业,关键不在于你学到了什么而是你做了什么,在学习软件这块只进行理论设计方面的学习没有动手操作,到最后做出来肯定都是错误的,在做的过程中学习就是最好的学习方法。例如先写上一段代码,然后发现这段代码无法运行,说明你的语言基础溥弱,那就多花点时间去学习这个语言的语法。之后该代码运行成功了,但是运行终端各种报错,说明关于代码格式与样式你没做好,那就花点时间看代码美化方面的书,例如程序设计实践。现在代码运行的很好,但是当我加入更多功能之后,我发现自己代码杂乱无章,没有任何可看性,且重复、累赘、全局变量代码很多,这时候就是你的设计模式不好,花点时间看看关于设计模式方面的书如设计模式-可复用面向对象软件的基础。当运用设计模式解决当前问题之后,你发现自己的代码运行平均时间比较慢,那你就可以看看重构-改善既有代码的设计了。这个时候这个代码就很好看了,然后我们可以进入下一阶段的学习了。然后一直重复这样的过程,构建-发现错误-学习知识-修复错误,他的好处是让你一直重复学习操作这个过程,能把你学习的知识立即运用到实践中。

我们需要注意学习方法,我们在向其他发展了几千年的领域学习时,不仅仅是他们的成果,更是他们的教育理念,因为音乐艺术都是追求完美的行业,所以他们着重熟能生巧,一首曲子一个鸡蛋在这个行业重复几百次几千次的练习都是家常便饭。可是在软件行业盛行不要重复造轮子的风气,我们想把重复的工作交给计算机来做,我们专注于新功能的开发。可是这样并不利于我们的学习,我们可以像其他领域一样,重复的造轮子研究代码并解决其中产生的问题,我们不要被一些偏见影响,像是重复造轮子或者像是有人说已经有现成包可以解决你这个问题你只要使用它就可以了等,短期看这是个不错的建议,但是我们希望你能尽量自己去解决这些问题,只有这样我们才能进步,按照自己的想法去解决问题去学习才可能做到无可取代。

发展出自己的科技树

我们都是从新手开始的,我们都是从学校、网络、博客、书本上学习这个行业的基本技能,但是这些都是工作需要的基本知识,没有什么可骄傲的,或者有的人再多几年的工作经验,但这也仅仅只是工作水平的区分,还做不到声名鹤立。我们想做到独一无二还需要有自己的贡献,有自己的名声或品牌。你可以在自己善长的领域分析细节,深度解析自己使用的技术或者自己分析的领域能够大火并且源源不断的有资金流入,例如比特币火起来之前你有一篇博客分析比特币的技术总结和区块链安全,那你就能迅速积累起自己的名声。你也可以在开源项目上做贡献来获得地位,例如现在的Kubernetes,如果你之前有参与这个项目,那你现在就可以提前退休,当一个技术咨询就够了。

你可以学一些其他领域技能,这样可以帮助你更能胜任一些专业领域的工作,例如你学过金融相关的专业,那么在做金融系统相关开发时,你就有一定的专业优势,对于需求的把控与理解也更加的得心应手,也能洞悉该领域的发展方向更好的服务于产品。

我们都曾被问起工资的问题,例如”高级程序员工资开多少比较合适”、“我是有 15 年工作经验的程序员工资应该开多少比较合适”..。这种问题外行不懂问问就算了,如何你是经验丰富的工程师也问这种问题就很滑稽了,因为首先资深工程师都有自己的善长的领域,没有说两个有 15 年工作经验的工程师的技能树是相同的,所以你用一个标准去衡量两个完全不同领域的资深工程师是不可取的。其次能问出这个问题说明你对自己经营的领域不够了解,这就很难让人相信你经验的真实性了。更妥当的说法应该是”我在该领域有 15 年的从业经验,是否应该主导这个项目的开发”,而如果你刚好符合他们的人选,那么接下来他们应该问的是“在你这 15 年的从业生涯中你都做过什么?”。

还有我们不能吊死在一棵树下,不要死抓着一个技术不放,技术是多样性的,我们人也总是充满好奇的,我们更应该去尝试不同的技术,吃老本从来都是不可持续的,也限制了我们看待问题的视角,在我们做项目遇到问题时我们应该多方面想办法去解决它,死抠一种技术是没有出路的。看待问题的视角这个很重要,软件行业不仅仅只是技术,更是使用技术的人,我们更多的是与人打交道而不是与机器打交道,所以我们更要尝试沟通,沟通的好能解决很多问题。在技术方面,不同的技术也能教我们不同的思考方式,例如如果使用 Haskell 语言可以帮助我们了解函数式编程思想,所以放开思维尝试不同的技术。

说了这么多最后还是要回到多写代码

学一门语言实际上就像学下棋一样简单,你可以在很短的时间内把象棋的所有规则教给别人,但是你要驾驭这些规则,并且通过熟练的运用规则成为象棋大师是很难的。

–Harold Abelson(SICP)

大道理大家也都听过很多了,积少成多,积水成渊等等,但是还是要再次强调软件行业是实操性很强的行业,任何的意见和建议都是建立在你去做了的基础上的,当你的项目无法落地时,任何的建议都是空谈。

写在后面

  1. 分享最近阅读的书籍清单(一)
  2. 分享最近阅读的书籍清单(二)
  3. 分享最近阅读的书籍清单(三)
  4. 如何面对 35 岁
  5. 分享最近阅读的书籍清单(四)
  6. 为什么你应该学习多种语言及哪里可以学到他们
  7. 本文地址
  8. 如果喜欢该文章欢迎 Star 我的github
  9. 捐助我的游戏,支持我的创作
  10. 社区更新地址
  11. 邮箱: tiglapiles@gmail.com

Footnotes

<sup>1</sup> 开源软件维基百科

<sup>2</sup> 某音在英国推行 996 结果招集体抵抗

<sup>3</sup> Kenneth Lane Thompson (生于 1943 年 2 月 4 日)是美国计算机科学的先驱。Thompson 的大部分职业生涯都在贝尔实验室工作,在那里他设计并实现了最初的 Unix 操作系统。

<sup>4</sup> Alan Curtis Kay (生于 1940 年 5 月 17 日是美国计算机科学家。他被选为美国艺术与科学院院士、美国国家工程院院士和皇家艺术学会院士。他最出名的是他在面向对象编程和窗口图形用户界面(GUI)设计方面的开创性工作。2003 年获得图灵奖。

<sup>5</sup> Alan Kay: Doing with Images Makes Symbols (Full Version)

<sup>6</sup> 馬友友维基百科

<sup>7</sup> Kasper "Stranger" Malone wiki

<sup>8</sup> MIT CS6.001

<sup>9</sup> 9 点上班 9 点下班一周工作 6 天

<sup>10</sup> 只要你练习超过 1 千小时你就可以成为这方面的专家

3342 次点击
所在节点    程序员
18 条回复
imzcg2
2022-10-03 08:14:22 +08:00
?? 第一句话就读不下去了,"首先能造成这一现象的一定是有一定的卖方市场" 难道不是买方市场???
imzcg2
2022-10-03 08:15:13 +08:00
买方市场亦称“买主市场”。“卖方市场”的对称。指商品供过于求,卖主之间竞争激烈,买主处于主动地位的市场。市场商品供给量超过需求量,卖者降低销售条件,想方设法将自己的商品销售出去,以致廉价抛售商品,这对买方十分有利,对商品有充分地选择余地,引起市场商品价格下降。这种竞争不仅表现在价格上,而且表现在质量、花色、式样、功能、服务、交货期、包装等方面。

来自百度百科 https://baike.baidu.com/item/%E4%B9%B0%E6%96%B9%E5%B8%82%E5%9C%BA
pengtdyd
2022-10-03 10:46:02 +08:00
为什么国内会有 35 岁这个说法,因为国内 99%都是应用开发,几乎没有底层,有些更是套壳换皮。例如:数据库,操作系统,内核,浏览器,框架,编程语言,更缺少基础技术研究,这些在国外都是很大龄的程序员才去做的事情。国内的企业更喜欢赚快钱,选择年轻的员工更容易实现这一目标,应用层面的技术也更容易被抄袭,被模仿,这也促使内卷的产生。
JohnBull
2022-10-03 11:05:03 +08:00
多大算大龄? 50 岁算吗?
xxxx668899
2022-10-03 11:17:40 +08:00
"作为大龄程序员,你如何持续的保持自己的竞争优势"

很简单,学好英文,潤出中国。
bthulu
2022-10-03 12:13:47 +08:00
要价低一点, 干活多一点, 拼命卷一卷
mascteen
2022-10-03 12:23:19 +08:00
@imzcg2 🥲
mascteen
2022-10-03 12:24:56 +08:00
@pengtdyd 这个角度不错
mascteen
2022-10-03 12:25:47 +08:00
@bthulu 卷不动了卷不动了
mascteen
2022-10-03 12:27:57 +08:00
@JohnBull 算吧,或者从事这行业三四十年
mascteen
2022-10-03 12:30:28 +08:00
@xxxx668899 可以有不过咱们切入点不同
xiaotianhu
2022-10-03 13:23:18 +08:00
嗨,感觉这篇文章,从文风到内容,都像是那种商业化运营的公众号
为了写而写,把市面上一些大路观点拿过来组合一下,水一篇文章,也没什么自己独特的思考内容,没有独特的观察角度,没什么新意的感觉。
听君一席话,如听一席话。感觉很空。

比如开篇就说到:"因为你没有去深耕一些领域导致的结果就是别人在你的岗位上看看文档熟练下流程就可以轻易上手了,不需要太多的经验和磨练,而这是不可能让自己保持竞争力的。"

就是说,作为程序员,应该深耕一门技术,做到有深度,才能不可替代。
这就是一句看似正确的废话,因为后面你也说了:
"还有我们不能吊死在一棵树下,不要死抓着一个技术不放,技术是多样性的,我们人也总是充满好奇的,我们更应该去尝试不同的技术"

一个人,又要有深度,又要『不能死抓着一个技术不放』,要怎么做呢?我深入研究了 delphi 成为了专家,结果不一定会好。不死抓着技术不放,出来一个新技术,rust 看看 fluter 看看,最后又很可能做不到『有深度』,毕竟有几个人有那么多精力呢。而且这件事最考验人的其实是『判断力』,既要选对方向,还要投入精力去研究,都对了才有可能。而怎么选方向又是个大学问,真能选好方向炒股其实赚钱可能更快一点呢,当然这又是另一个话题了。

而且人的可替代性,是现代化的重要的一个话题。从微服务到中央厨房的餐包模式,都是要降低人的存在感,让每个人都可替代,这样对企业才是最好最赚钱的。如果一家餐饮店的成功取决于大厨,这个大厨一离职餐厅就要倒闭,资本怎么会让这样不可复制的模式做大呢?所以大部分的技术都要做到标准化,可拔插,把大厨干掉做成快餐,这样人才的培养也就可以做到通用性更强,你不行了替换成本很低。这就变成了一个标准化的供应链,你的称呼叫『人力资源』,而不是『人』。
所以你要做的是与整个资本主义体制对抗,分析一下这个我觉得才是更深层次更有意义的一个角度,毕竟你要知道,到底是什么让你的可替代性很强,才是对抗的第一步,不是吗。
f1ynnv2
2022-10-03 16:36:48 +08:00
@xiaotianhu 你的发言确实比楼主有深度多了。赞一个。
mascteen
2022-10-03 18:16:44 +08:00
@xiaotianhu 首先谢谢你的观点,我个人能力比较有限所以有很多不足的地方,关于文章你说的没错确实是参考了一些地方,借鉴参考没什么问题,只是我拿过用之后没有有较
mascteen
2022-10-03 18:55:52 +08:00
@mascteen 没有很好的利用起来
mascteen
2022-10-04 22:34:53 +08:00
zilongzixue
2022-10-14 15:07:55 +08:00
没啥用,程序员在国内就是耗材,不然也不会有那么多卖课的贩卖焦虑了
huangcw
2023-01-07 20:43:19 +08:00
@pengtdyd 分析的角度不错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX