本文来自stackexchange.com的问答:
gydorah:
我是一个29岁的程序员。
随着时间的推移,我注意到的一点是,我不再像刚开始工作时那样朝气蓬勃、意气风发和精力充沛。
随着年龄的增长,对我的工作要求越来越高,每天都需要学习新的东西,随着时间的推移,我的大脑开始变得不如从前。但最重要的是,我比以往任何时候都需要更多的睡眠。作为开发人员工作变得更加困难。虽然我还可以解决这个问题,但对我的职业前景还是有些怀疑。
对我来说,比较多的建议是开始寻求人性化的(技术性不那么强)工作,比如管理或指导。这方面的一个大问题是,我没有这些职位所需的社交能力,也就是说无法处理广泛的社交活动。即使我具备这样的能力,我还是会觉得管理非常无聊,更糟糕的是,政治。事实上,我的内向性格是我开始写代码的主要原因,对技术的热爱,解决问题和面对挑战也是重要的,但只排第二。
也有人经常建议,我应该转到不那么热门的项目,不需要在最一线,但问题是,我真的不想最终陷入死胡同,如果我被解雇或仅仅只想换工作,我的简历上会出现很大的履历缺陷。我不想失去职业竞争力。
我想问问大家:
我在职业生涯的选择上是否太固执、理想主义或者太不成熟?难道我不得不放手吗?
在未来一段时期,我能否继续把编程作为我的主要收入来源?
30岁以上的程序员有哪些方式可以保持活跃在技术岗位上,而不必转向人道主义(管理性)的方向?
bubba:
几个月后我将年满70岁,但我现在还会写一些代码。虽然不是很多,但是也有不少。
我的经验是,最新技术通常只是暂时性的,从智力上讲,通常并不那么困难。计算机科学和数学的基础知识不会很快改变。
经验为你提供了新手没有的东西:对公司软件系统的深入了解,对公司业务目标的洞察力,对客户和竞争对手的熟悉度,对行业的了解,观点,平衡。可以说,它们比掌握最新技术的能力更有价值。
在某些方面,你的学习能力会随着年龄的增长而下降(尽管可能直到40岁或50岁)。另一方面,学习变得容易了,因为你拥有大量的先验知识基础,为理解新知识打下了良好的基础。
而且,正如其他人所说,一个曾经遇到过两次(或类似问题)的人解决这个问题的速度比以前从未见过的人要快得多。
因此,如果你喜欢写代码,请继续写代码,继续学习并且不要烦恼。
Ash:
你的经验将弥补速度的下降。
作为30多岁的软件开发人员,我也注意到你提到的在30多岁时谈到的速度下降。它发生在生活的各个方面,而不仅仅是开发。过去需要几天的房屋翻新工程需要花费数周的时间。彻夜party越来越难,当然通宵编程也不太有效。
我非常清楚自己的速度越来越慢,并且害怕每次性能评估。我甚至开始购买Modafinal来帮助提高生产力,但是在几个月后,它的影响越来越不明显。
但是,我的表业绩审查一直很好。对这个情况我的猜测是,我以前见过很多东西,而根据经验,我能够更快地完成一些事情。
第一次看到一类错误,需要几天的时间才能解决,第二次需要几个小时。现在,同样的错误,如果幸运的话,我可以在几分钟内修复它。生产率的提高弥补了其他需要花费更长时间的任务。
我还建议:
做一些非工作的编程,或者为您的雇主做一些非正式的研发。帮助打破工作的单调,当需要在某个新项目上进行输入时,如果您对该领域进行了一些探索并且有经验可以做出贡献,那么你可以看起来很棒很天才。
在您的业余时间做一些非编码但仍然很有创意的事情。几年前,我进入了3D打印领域,而在那之前的几年里,我一直在玩杂技。帮助保持大脑的活力。
如果您担心自己的技能无关紧要,请考虑当今正在构建的系统所需的维护工作,例如Covid19导致对COBOL程序员的需求增加。
bethlakshmi:
我喜欢 @bubba 的回答,但是我认为还可以添加一些实用的东西。
在未来一段时期,我能否继续把编程作为我的主要收入来源?
是的。我认识不少人,他们的主要工作(自己选择的)是编写代码,直到他们想退休。仅在受到启发时才担任编码较少/非编码的角色。
我在职业生涯的选择上是否太固执、理想主义或者太不成熟?难道我不得不放手吗?
请记住,在具备一定的资历水平的情况下,你会对团队产生很大的影响,因此你需要一定程度的沟通技巧。
它不一定是管理,但你可能需要能够通过设计文档进行交流,而这些文档是其他软件工程师(架构师、技术经理、主管、副总裁等)以外的人阅读的,或者是其他工程师的高级的导师,他们可以利用你的智慧。
这仍然是软技能的发展,在某个时候,至少没有一些你贡献且可以借鉴的技能将成为一个职业限制因素——即使你最大的优势仍然是编写代码。很多时候,这也会被冠以“领导”的烙印,而不是管理。
我之所以这样说,是因为我看到许多30岁以下的人在不晋升到其他更高级别的职位时感到沮丧。这通常是因为期望已从奖励在单独技术工作中获得的能力,转变为通过使用卓越的技术能力提升人员水平而为团队、团队或者部门提供的价值。如果你希望在不发展软技能的情况下获得晋升,那么这可能需要更成熟的观点。我不一定能确定你是否认同我的观点。
而且,有些人具有一定的资历,但目标却不想更高。不是每个人都想成为首席工程师——但是他们可以继续工作!他们的薪水仍然很高,如果你喜欢工作的话,那么你是否在乎自己的头衔?我确实看到有人继续担任特定的角色,却没有承担更多的工作和责任,因为他们在自己的位置干得开心。
30岁以上的程序员有哪些方式可以保持活跃在在技术岗位上,而不必转向人道主义(管理性)的方向?
像 @bubba 和 @ash 说的——一定要从你的经验中学习。你已经拥有并且将继续获取行业中的一些模式和学习经验,这些模式对于如何以更有效,低风险的方式进行此工作是很好的参考。正如两位大佬所说——聘请经验更丰富的工程师,因为他们从(痛苦的)经验中学到了经验。确保你继续关注工作结果并进行回顾,以不断寻找改进的方法。
不要拘泥于特定的技术,去跟随并学习你发现的有趣和有意义的技术。追求有趣和有意义的工作和项目。我发现随着年龄的增长,我们会变得有点愤世嫉俗。不断寻找令你渴望和兴奋的工作。并寻找适合你风格并且富有合作精神的团队。动力来自内在,因此要养成动力。这就是为在当前和未来进行额外工作提供精力的原因。
一定要有节奏。虽然公司会很喜欢要求你加班加点,可以说不加以限制但会确保你的表现符合预期。但要有生活,找个生活伴侣,在工作之外做出承诺。这些都是合理的,大多数同龄人都会这样做。在我看来,重要的不是你在工作之外有什么样的生活方式,而是你有一个工作之外的生活。我想很多20多岁的人没有意识到这一点。
如果你实在是精疲力竭,而且头脑完全不愿意学习——你的标准年龄是30岁,那是“我们随着年龄的增长会越来越慢”的标准——不是为了做妈妈,每天去问“你睡得足够吗?你吃好了吗 ?你看医生了吗 ?”。也许你的日常工作有点混乱,我不会说我们永远不会放慢脚步,但是我认为保持头脑的学习和适应能力的持续时间是没有上限的。身心是存在关系的,这意味着拥有健康的身体可以使思想健康,而年龄越大,越重要。因此,要通过正确对待自己的身体来正确对待自己的思想。
Justozauras:
学习那些有长期价值且不会经常改变的基础性东西——停止学习框架。如果一家公司有自己的产品,就要获取相关领域知识和业务洞察力,以便有更广阔的前景。软技能仍然很重要,即使你想继续作为开发人员;
别忘了好好度假(旅行)来充电,远离默守陈规的生活;
临时切换日常活动,每天抽出时间远离工作——去散步或运动;
养成习惯和规律来查看博客、了解技术趋势;
你会问“我在近期和未来的主要收入来源”和“在技术行业保持稳定”,在目前的市场上,如果你只想维持下去很容易,但如果你有些志气的话,要求就更高。
Mike Robinson:
"继续往前!" 但是,也要充分认识到环境的变化。
在我们这个行业的80年代、90年代和“uh-ohs”时期,“我们几乎都是靠自己”,因为“我们当时不得不使用的计算机几乎无法自行解决问题!”
然后……越来越多的人开始加入进来。但是,即使如此,一大堆“奇妙的新事物和意想不到的东西”开始出现——例如,“实用(!)开源!”(突然间,“在任何应用程序中,正在使用的开源代码行数”成倍增加)
但是:“乘风破浪吧,骚年!” 现在仍然有很多客户/老板,他们比以往任何时候都更需要我们。只要盯紧球,你永远不会没有工作,直到你的球!#%Q@%@?* ...
Kevin:
我快要满40岁了。我一直都有这种感觉:脑子里有淤泥,在那里我感觉自己比以前慢。我曾经这么快,那么敏捷...现在看起来我像在深水里奔跑。
想知道为什么我不为此感到难过吗?并非所有的工作和产出都是相等的。
最简单的方式来说明这一点,就是看一个快速和敏捷的新手开发人员在做什么——而不是帮助他们。
他们可能会大量地产出……但这并不都是相等的。他们可能会花10个小时想出一个非常酷的方式来向用户显示数据。你会花10秒说,“哦,是的,JQuery会帮我们解决这个问题的。”
他们可能会花10个小时在一个项目上工作,结果不得不重做大部分工作,因为他们设计它的时候考虑得不够完善。他们可能会花10个小时写一些运行太慢的东西,因为它与数据库的交互不好。
我能做的事情有很多,一个新的开发人员需要很长时间,或者根本不能有效地完成。因此我的大脑慢一点也没关系——我正在做的“慢”的工作比一个快速但天真的同事快速而低价值的工作更有价值。
Hiroshi AKIYAMA:
你可以通过大量重构代码为晦涩难懂的语言来巩固自己的地位。
当我2017年出国带薪实习(员工交流和培训计划)时,我与合作的团队广泛使用了Haskell,Elixir和Rust。这明显很特别,因为公司的其余部分服务端几乎完全用C++和Python,很少将C#用于公司内部的桌面程序。原因是一支由经验丰富的高级程序员组成的小团队,他们希望延长自己的职业生涯。我正在考虑我是不是也得采用同样的招式。
user13436576:
关于随着年龄的增长而坚持下去,我建议的一件事是去糖(大多数加工食品中所含的糖)。我父亲摆脱了所有糖分,现在50多岁了,能量比20岁时更充足。
糖还会对你的睡眠产生负面影响,阻止你进入深度睡眠,从而使你无法获得所需的良好的夜间清爽睡眠。
你可以查看加利福尼亚大学的糖科学系,以了解有关此方面的更多信息。
我希望这对你有帮助!
jmm:
你不是一个人!
正如你可能看到的,我们中的许多人都处于(或曾经)同样的处境。我现在35岁了,有时候我也有同感。不过,我也有信心,因为很多很多老问题看起来都很熟悉。你的经验会有回报的,我保证。
关注基础!
正如其他人所说,理解基本原理总是更重要的。例如,Angular之类的框架(或者React这样的库)可能还不到10年,而OO设计已经超过50年了(任何人的整个职业生涯都是如此)。试着确保不断提高你的编程能力,而不是学习最新的看起来酷东西。
练习!
我也试着经常练习一些算法问题(比如HackerRank、Codility)。它们很有趣,你总能学到新的东西,他们让你保持水平,你可以应对一些具有挑战性的招聘。
挑战自我!
我是一个Java后端工程师,所以我不喜欢再学习Java、Spring或Hibernate。这明显是一个明智的选择(别误会,其实我确实有很多东西要学),但是,我更愿意学习一些我在上班时间不做的事情。
也许是移动开发,或者是前端,甚至是用户体验。这可能会让你觉得进步更难,但当你突然想出办法时,感觉会非常棒。
所以,我觉得我们很安全。当然,你仍然需要变得更专业,在一些额外的能力上下功夫(也许学习另一门人类语言可以帮助你,如果这是你想要的),并不断增长你的专业经验。
注意:有时,有职位空缺
在这里只举一个例子。比如Python,但我敢打赌,它完全适用于JS。如果你了解最新的工具,不要感到沮丧。正如其他人所说,它可能仍会被替换。
享受过程!
也许你喜欢你所做的事,但是待错了位置。对应我的上一点应该是你的安全区——如果出现问题,你仍然可以寻找新的地方。
工作、学习、生活平衡可能是最重要的建议,记住要有其他爱好或兴趣。我们大多数人每天约有50%的时间盯着屏幕,锻炼,外出活动等一定会帮助你不那么疲惫。
Michael Durrant:
终身学习
每个月在这些事情上花时间
看书
学习新语言
进一步了解你已经使用的语言
学习新工具
学习新方法
参加物理或虚拟会议
从事个人项目
同时拥有生活,家庭,爱好和社交,嘿嘿,没人说这很容易!
经验的主要“陷阱”是,你最开始成为“高级”,那是因为你已经成为该技术的专家。问题是——技术不会永远坚挺下去。了解新技术,你会OK的。
供参考:我曾经是一名BASIC程序员,虽然表现不错,但是在学习COBOL时不得不重新开始,但是最终我成长得还不错,后来我不得不学习Oracle,虽然很艰难,但是我仍然变得更好了更成熟了。现在,也继续学习使用Javascript(ES6)和React。
如果你喜欢这门手艺,你就继续学习它,你会被未来所需要。
不用担心速度问题。现代方法不需要它曾经提供帮助的那种速度。现在,知道正确的方法比编写大量代码更重要。
不要太关心睡觉的事。在长时间学习时,我确实会感到困倦,但这只是意味着大脑因新输入而超负荷,需要休息(实际上是逾期未交)。一旦将该短期的化学反应刻入长期记忆后,短期暂存就会清除,我可以继续学习。直到一定程度,然后才需要真正的睡眠。
Dave Sherohman:
别扯这些陈词滥调,你应该更聪明,而不是更努力。
你所写的问题给我的感觉是,你将编程视为主要是关于知识的广度以及无数小时的狂热投入。我几乎可以听到你说“要通宵学习最新的热门新工具!”
但这就是问题:最后,知识的深度远不止广度。我逼近50岁,我无法告诉你自从我上一次关心 “新热点” 或“处于前沿” 以来已经有几十年了,但这至少不会妨碍我的职业,因为我了解足够深的基础知识,以至于当我需要使用一种新工具时,我很快上手。我不会成为这个工具的高手,但是我能用它完成我需要做的事情。
现在,我不再全职编程。我已经过渡到75%的系统管理,25%的开发,因为我更喜欢处理各种小型的,非常规的任务,而不是长期专注于单个大型项目。即便如此,尽管编程不再是我的主要重点,但丰富的知识和经验足以使同事在编程问题或调试任务上需要帮助时,第一个想到的就是我。
因为,即使我不知道他们使用的特定工具或语言,他们也知道我会立即发现解决方案,或者至少会发现解决方案的途径。
ron rothman:
不要将职业与工作混淆。
你的工作是(相对)短期状态;你的职业生涯是漫长的。作为一名30多岁的程序员,我向你保证,许多软件专业人员在这个个年纪都有成功的,有意义的职业。
你所在的团队有时会有所作为。考虑与公司、团队一起找到更有价值的编程工作,使其更适合你当前的需求。
我是29岁的程序员
为了帮助你进行校准:你才刚刚进入职业中期。29即使在软件开发方面也不算老。根据Stack Overflow开发人员调查,有53%的软件专业人员年龄在30岁或以上。
即使你已经很棒,你仍然需要学习很多东西,还有很大的发展空间,最重要的是,还有很多 为同行和雇主的利益而积累经验并随后加以利用的经验。
如果你找到了一个解决软件难题的团队(例如,某个大规模的问题),那么你可能会发现自己像在刚接触编程时一样开始重新享受工作。
我不像刚开始时那样朝气蓬勃、意气风发和精力充沛。
你可能从事的是错误的工作,而不是错误的职业。在我的职业生涯中,我有各种各样的经验,我对任何特定工作的满意度在很大程度上取决于具体情况:我的老板、队友、这项工作有多有趣等等。
对于我的情况,通常的建议是开始寻找更多的人相关工作,例如管理或领导。
与十年或两年前相比,今天的建议已经不那么普遍(适用)了。像Google这样的软件巨头从根本上改变了软件工程师的职业道路选择。
现在,你可以上升到很高的级别(在某些“开明”的组织中——并非全部),而无需转到管理方向。
经常有人建议,我应该转到不太热的项目,这些项目不需要处于前沿。
对于你来说,这听起来像是一个糟糕的建议。你显然想对自己的工作感到兴奋;你现在还不是。也许有一个团队正在做的事情会让您兴奋,并且由志同道合的同事(从最好的意义上来说)组成的团队与你合作得很好?
jamesqf:
我的建议是(直到我30多岁时才开始编程):不要把重点放在跟上语言和开发方法的新风尚,而是着重于实际解决问题。你可能必须学习新知识以应对某些新的问题领域,但这是不一样的。
nvoigt:
对待30岁的方式应该和对待25岁的方式是相同的:
对你的领域感兴趣;
阅读书籍,观看教程,参加会议;
永远不要满足于你一直在做的事情。
我想我可以对律师,厨师或农民说同样的话。它确实不是专门针对软件工程的。
经验将极大地促进您获得新知识。基本概念不变,学习一种新语言仅意味着您必须了解该语言如何处理相同的概念。理想情况下,每次学习新事物时,你都可以节省时间,因为新事物使事情变得更容易。
就就业能力而言,这很大程度上取决于你所在的国家。如果雇主正在寻找最合适的人选,那么你绝对可以继续职业生涯并蓬勃发展。如果你所在国家或者地区的雇主只需要具有最少编程知识的活人,一遍又一遍地生产出低质量的软件,那么你会陷入麻烦。
我想说的是,如果你生活在西方社会中,公司雇用开发人员来开发公司自己的产品,那么你绝对可以将软件开发视为可以给你带来美好生活的工作,直到你退休为止(假设你对此感兴趣)。
如果你生活在一个将软件开发视为将年轻,廉价,低薪水且服从的劳动力租给另一家(最好是西方的,富裕的公司)快速赚钱的机会的国家,那么你肯定会有半衰期。因为他们的业务模型中不需要年长,经验更丰富,价格更高的人员。
Lawnmower Man:
转变你的关注点
我希望刚毕业的大学生关注的事情包括基本必要的方面,例如格式,简洁的样式,功能的正确性,单元测试以及在功能和类级别上全面理解代码。
他们仍然要学习干活以外的知识,因为帮助他们注意提高质量的东西都是好的。这也意味着他们在实施项目时通常需要更多的指导。我对设计提出了很多建议,而且无论如何,高级工程师通常都会进行设计。
对于下一个级别,我希望工程师能够编写可靠封装的健壮的代码单元,并与系统的其他部分很好地交互。
他们的重点应该是如何确保应用程序中的多个单元良好地交互而不会导致拉胯。因此,其设计范围应扩大以符合这些期望。他们主要编写应用程序代码,但是可以在有监督的情况下安全地更新共享库。
我希望“高级”工程师能够掌握整个服务的必要细节(不一定是整个应用程序,例如OS或主要的独立桌面应用程序)。他们应该了解代码从功能级别到服务启动和依赖级别的工作方式。仅给出一组需求(当然,我主要是在SOA /微服务环境中),他们应该能够从头开始设计和构建服务。
拥有将近10年行业经验的人应该是专家。按照最常见的标准,你至少应是“高级”工程师。那么还剩下什么呢?好吧,一切。
可以做,干。不能做,教。
当然,这句话通常用于体育和教练,但是这里有一个真理。如果你觉得自己精疲力尽,可以花一些时间进行指导。如果你的所有同事,包括新来的初级工程师,如果它们比你了解的更多,那么显然你学习的并不多。到那时,你应该认真考虑切换到项目或者程序又作者产品管理。如果你不是比大多数同行更专业的专家,将很难保持相关性。
如果你的组织雇用实习生,请主动带领他。指导性地编程、做代码审查,不要只是批判和教学。从你最了解的代码领域开始,在这些领域中您最有信心,并且可以分享最多的价值。然后扩展到你所不了解但仍比大多数团队拥有更多经验的领域。即使您的组织没有实习生,总会有初级程序员在寻找导师。请求你的领导让你带一个。
除了了解最新的编程语言范例或流行框架之外,还有更重要的事情。那就是规则。
设计原则、代码质量、测试、文档,你所做的这些事情可能是团队中其他人没有的。花一些时间向整个团队介绍为什么你认为这些事情很重要。这些不是你可以通过读书或参加黑客马拉松可以学习到的东西。他们是通过多年的经验和反复试验中学到的教训。分享这些知识,它也会在你自己的脑海中成长。不要只告诉他们道理,还有分享你的故事和经验,解释这就是你一直以来积累的价值。
变强,或者回家
回到原来的话题,更强的工程师会对满足一两个服务不满意,他们会考虑大局。
系统的架构应该存在哪些服务?依赖项是干净的还是应该重构?由于功能欠佳的代码维护和对技术债务的不健康接受,功能是合理分配还是成为Rube Goldberg机器?
有人将此阶段称为“架构师”。我不喜欢这个称呼,因为我个人认为每个工程师有时都应该戴上架构师的帽子。我认为,无论谁设计系统的顶级体系结构,都应该积极参与该系统的构建和实施。
无论如何,此级别不需要专注于编码的细节。实际上,这种关注可能适得其反。当架构师告诉他们如何实现一些高级设计的细节时,如果他们是刚毕业的大学毕业生,别嘲笑他们。如果你的脚步变慢了,请继续向上。
你的大脑虽然已经饱和了(这就是为什么很难在其中填充更多知识),但这是一种资产,而不是一种责任。这意味着你需要把获得的所有知识投入工作。
希望你一直关注并吸收了系统的高级体系结构。希望你可以确定其优势和劣势,并指导团队进行重构或将来进行改进以产生最大的价值。如果你可以利用积累的知识来在更高层次上工作,那么你会发现,通过阅读StackOverflow或最新的编程语言宣言,你已经学到了一些不容易掌握的知识。
当你开始职业生涯时,您必须专注于软件工程的策略。一旦掌握了策略,就该采取策略。当然,许多工程师处于高级职位,只是选择工作和生活之间的平衡,使他们能够专注于他们真正关心的事情,同时继续使用代码来支付账单。如果这使你满意,此策略也没有错。
话虽这么说,像架构师这样的职位是政治性的,与隐藏在角落里的处理需求相比,确实涉及更多的人际互动。但是通常,你可以控制这在多大程度上是必要的,并通过弄清楚如何在避免冲突的情况下提供价值来塑造自己的命运。
有时这可能意味着放弃竞争对手愿意与你抗衡的想法。如果你退缩而不是站稳脚跟,就可以避免不愉快的互动,但是你也将失去一些直立的立场,除非你可以通过在无争议的领域用真正出色的工作来弥补这一点。
此外,架构师不能仅仅忽略新技术趋势。你仍然需要睁大眼睛,让自己了解最新的框架、库、语言和趋势。你只是不需要沉迷于它们的细节。你需要学习足够的知识,以了解它们的优缺点:看到它们所做出的取舍。
最终,您了解到在阳光下没有什么新鲜事,并且工程学中的一切都归结为一系列不同的取舍。随着技术领域的变化,某些产品比其他产品具有更好的价值,你需要看到并认识到这一点。
但是,没有绝对的“更好”和“更差”。这与你现在拥有的以及即将出现的一切有关。
总结:
归根结底,你的职业就是您的职业,不多也不少。多一些或少一些编码,具体取决于你可以如何并希望如何为团队和公司带来价值。
弄清你的个人长处和兴趣所在,并专注于利用这些优势,而不是试图使自己适应人力资源和管理层所喜欢应用到机器齿轮上的小螺丝。
为你想去的地方写理想的职位描述,去参与一种可以最大程度发挥你的价值的产品。然后,通过将更多的时间花在重要的事情上,而将更少的时间花在无关紧要的事情上,努力将自己的职位变成这份工作。你不需要权限即可执行此操作。你只需要使其工作即可。
原文地址
https://workplace.stackexchange.com/questions/163614/how-to-stay-relevant-as-programmer-in-long-term
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721