再过几天,我们将再次投入工作岗位,迎接新的一年。这是制定成长目标和规划的绝佳时刻。今天,让我们一起探讨在新的一年中如何成为一名更出色的软件工程师。
随着时间的推移,软件工程领域似乎总是处于不断的变化之中。然而,对于2024年,有人可能会说,不要期待太多的变化。确实,生成式AI的概念风头正劲,但它仍然处于一个相对不成熟和缺乏监管的阶段,对于开发者的日常工作来说,它的影响可能并不像想象中那样深远。因此,2024年对于软件工程师来说,可能更多的是对2023年工作模式的重复。但这并不意味着我们不需要每年都提醒自己注意个人成长和技术进步的方向。以下是我在2024年将要更加关注的几个方面,也许你也应该考虑一下。
务实的关注点分离:代码与交流的艺术
在软件工程的世界里,无论是编写代码还是进行交流,"关注点分离"的原则都至关重要。这不仅仅是一种编程范式,更是一种高效沟通和工作的方法。
首先,谈到代码编写,关注点分离意味着我们需要将不同的功能和责任区分开来,避免将太多的功能或逻辑混合在一起。这样做的目的是为了提高代码的可维护性和可读性。在日常开发中,我们应该不断地改进代码库,同时注意不要过度抽象化,因为这可能会增加代码的复杂度。的确,"意大利面代码"(即结构混乱、缺乏组织的代码)偶尔会出现,有时是因为我们自己的疏忽,有时则是不可避免的。关键是要知道何时进行重构。在软件开发的商业现实中,有时候推进新功能的需求比让代码"更美观"更为迫切。在这种情况下,良好的回归测试可以为我们提供安心,即使代码可能需要一些关爱和整理。
在交流方面,保持话题的专注同样重要。作为软件工程师,我们可能对各种话题都有自己的看法,但这并不意味着每个人(或任何人)都需要听到我们对用户体验、设计等非专业领域的看法。确实,你可能认为亮黄色是应用程序中最不想看到的颜色,但最终,有专门的设计师和产品负责人负责这些决策。我们的任务是专注于解决工程挑战。这样不仅效率更高,而且减少了不必要的干扰。
通过实践关注点分离,无论是在代码还是交流中,都能显著提高工作的效率和质量。这需要我们在日常工作中不断地练习和提醒自己,将其作为一个重要的职业发展方向。记住,作为软件工程师,我们的核心价值在于解决问题和创造价值,而这正是通过专注和高效的工作方式实现的。
不要一味的追求新技术
每年都有大量新的框架和库如雨后春笋般涌现,但并不意味着我们需要关注它们每一个。作为技术人,我们要有的不仅是追新的热情,更需要有甄别的智慧。
对于那些刚刚出现的技术,虽然它们的Alpha、Beta乃至首个正式版本可能看起来很有吸引力,但它们更多的是对耐心和抗压能力的考验。因为在版本迭代中不断调整和处理bug,可能会让人耗费大量的时间和精力,而不一定能够带来真正的学习收获。因此,我的建议是等待库和框架成熟稳定之后再去考虑是否采用。让那些“寻求刺激”的开发者们去体验这个过程中的“成长的烦恼”吧,他们可能还乐在其中呢。
同样的,也没有必要因为新潮流而轻易放弃现有的技术。无论是PHP,还是IF语句,亦或是switch...case结构,它们都有自己存在的价值和适用场景。网络上那些以“停止”开始的文章,大多数时候都是一些夸张的说法,你大可不必理会。记住,即便是过时的技术,比如在80年代中期还广泛使用的穿孔卡片,或是现已64岁高龄的COBOL语言,它们至今仍在使用中,就如同汇编语言一样,虽然在Tiobe指数上排名第10,却仍然比Rust或Swift更受欢迎。
每种编程语言都有它的黄金时代,有些在我的有生之年既流行过又黯淡过。比如,Ruby在10年前远比现在流行,但这并不意味着它已经“死亡”,只是它的受欢迎程度在下降。我认为,我们现在可能正处于TypeScript的衰退初期,当然,这也许是一个更有争议的话题。
在选择技术时,我们不仅要考虑它的流行程度,更要考虑它是否适合我们的项目需求。技术的选型应该基于项目的实际情况、团队的技术栈以及长期的维护成本。选择适合的,而不是仅仅因为它新而新。
通过这种审慎的态度,我们可以在技术的海洋中稳健航行,不被波涛吞没,也不错过可能的顺风。让我们做一个明智的技术探索者,而不仅仅是一个盲目的追随者。
思考编码之外的软件价值
随着你的职业生涯的发展,你会发现,软件远远不止是代码那么简单。代码确实有趣,它能在细节层面解决问题,但所有这些细节层面的解决方案也需要在整体上有意义,而不仅仅是代码本身。作为一名成熟的开发者,你必须学会在工作中考虑成本,尤其是在当今这个公司越来越不愿意在工程时尚上浪费金钱的时代。
不管我们是否愿意承认,我们写的每一行代码都有其成本。我们选择的语言或技术栈、分支策略、项目构建方式、持续集成的运行时间、我们的部署节奏和策略,以及我们如何使用特性开关,这些都会产生广泛的影响,从工程资源管理的效率到公司或产品的成功与否。
在当今的软件开发中,高层次的思考已经成为一个不可或缺的能力。这意味着你需要从更宏观的角度来考虑你的工作,理解它在商业和技术上的含义。每一个技术决策都不应该仅仅基于技术的好坏,而应该基于它能否带来商业价值,能否提高团队效率,以及能否在预算内完成。
比如,选择一个流行的语言或框架,不仅仅因为它新或者酷,而是因为它有着丰富的库、广泛的社区支持、良好的性能,并且能够降低开发和维护成本。选择一个部署策略,不仅仅因为它是行业最佳实践,而是因为它能够提高部署的稳定性,减少出错的机会,最终带来更高的用户满意度。
因此,作为一名有经验的开发者,你需要不断地提升自己的商业意识和系统思考能力。在每天的编码工作中,不断地问自己:“这样做的商业逻辑是什么?成本如何?有没有更高效的方法?”通过这样的高层次思考,你将能够更好地为公司创造价值,同时也为自己的职业生涯加分。
学习一门新语言
在技术的世界里,学习新的编程语言不应仅仅是为了追随潮流,更应该是为了开阔视野,深化理解。我在2023年并没有急于学习新的编程语言,这是一个深思熟虑的决定。然而,我一直在关注Rust,从2018年起就对它保持了一定的了解。虽然我还没有急着在项目中采用它,但我认为Rust已经足够成熟,值得我投入时间去学习。我一直对多用途的语言感兴趣,并且阅读了无数关于Rust在实际应用中成功案例的文章。
对你来说,可以考虑任何一个你感兴趣的语言,它不一定是一种新语言。我承认,我对Rust的独特之处感到好奇,比对任何其他语言都要多。我知道它将教会我在其他语言中从未见过的东西。这也是你应该寻找的——一个关于编程的不同视角,一门新语言,往往能够让你在已经熟练掌握的语言上成为一个更好的程序员。
学习一门新的编程语言,如Rust,不仅仅是为了学习它的语法或编写几个小项目,更重要的是理解它的设计哲学,掌握它解决问题的新方式。这不仅能够提升你的技术能力,还能够让你在面对其他技术问题时,能够有更多的解决思路和方法。
在这个快速发展的时代,我们每个人都应该成为终身学习者。不管是深入研究一个多年的老语言,还是探索一个兴起的新星,每一种语言都能够带给我们新的知识和体验。因此,不妨设定一个目标,每年学习一门你感兴趣的编程语言,不为别的,只为打开一扇通往新世界的门。
与团队一起共同成长
在大多数情况下,我们都在团队中工作,这种环境为我们提供了无数的好处,但同时也带来了许多责任。团队的美妙之处在于,当你遇到困难时,你知道有人会支持你;你的同事们也会伸出援手——毕竟这是工作的一部分。然而,这也意味着你需要在他们需要时回报这种帮助。不要成为那个只索取不给予的人。无论你是否愿意,团队工作本身就具有一种交易性质,即使是无意识的。当你总是准备好帮助团队中的其他成员时,他们也会更愿意回馈给你。
很多人认为,在科技公司中,同事之间的友情是在啤酒和披萨,或是桌足球游戏中建立起来的。我有不同的看法。真正的友情,是在共同解决问题、朝着同一个方向努力、真诚关心那些在挣扎中的人时诞生的,它甚至包括在最高级成员不知所措时给予他们支持。说实话,那些与我共饮啤酒、吃披萨或一起打桌足球的人的名字,我可能已经记不清了,但我会永远记得那些在我需要时伸出援手的人,那些关心我是否能够应对压力的人,以及那些向我求助以解决令他们头疼问题的人。
在我们的职业生涯中,与团队成员共渡难关,共同寻找解决方案的时刻,往往比其他任何时刻都更让人铭记。在团队中,我们互相支持,不仅是为了完成工作,更是为了共同成长和进步。一个优秀的团队成员,既是求助者,也是帮助者。他们知道,团队的力量在于每个成员的贡献和互相支持。
因此,珍惜在团队中一起度过的每一个挑战,这些经历会成为你职业道路上宝贵的财富。在这个过程中,不仅仅是技术能力得到提升,团队协作和人际关系的能力也同样在成长。记住,真正的团队精神不仅仅在于成功,更在于在面对挑战时,我们能够团结一致,一起前进。
善待自己:软件工程师的心理自护
外界常有这样的误解:软件工程师的生活轻松愉快,整天只是轻轻敲敲键盘。但实际情况远非如此简单。根据Yerbo在2022年发布的《职业倦怠指数》报告,有两成IT专业人士经历了职业倦怠。而且,个人贡献者的倦怠率通常高于管理者。我强烈推荐大家阅读这份报告,它不仅洞察深刻,还可能帮助你或你的同事及早察觉倦怠的早期症状。
https://report.yerbo.co/
当然,预防职业倦怠的方法有很多,但并不是每个人都能应用这些方法。无论如何,我的建议是,开始学会善待自己。不要质疑自己的能力和技巧,向你信任的团队中的资深成员寻求建议(理想情况下,你应该能信任整个团队),在团队回顾会议上提出对你重要的问题,通过交流解决问题,记住没有任何工作值得牺牲你的幸福和健康。
作为软件工程师,我们需要对待代码的严谨,同样要用在对待自己的身心上。认识到压力和挑战是工作的一部分,但同时要有意识地为自己创造一个健康、平衡的工作环境。这可能意味着设定工作界限,定期休息,培养兴趣爱好,或是与信任的人分享你的感受。
我们应该鼓励在职场中开展更多关于心理健康的对话,建立一个支持性的环境,在其中,寻求帮助被视为一种力量而非弱点。通过建立这样的文化,我们不仅能够帮助自己,也能够支持那些可能在默默忍受的同事。
善待自己并不意味着放弃追求卓越,而是要以一种更健康、更可持续的方式去追求。当我们开始关注自己的心理和情绪需求时,我们不仅能提高工作效率,还能在职业生涯中走得更远,更好地享受技术带来的乐趣和成就感。
在自由中成长:不必做的事和软件工程师的本质
作为2024年的软件工程师,你不必做以下这些事情来证明你的能力。如果你想做,或者这些事情能给你带来快乐,那当然没问题。但请记住,这些都不是成为一名出色软件工程师的必要条件。你的闲暇时光完全属于你自己。
你不需要为开源项目做贡献。别误会,很多开源项目都非常棒,尤其是当你使用这些库或框架时,你可能会觉得自己应该“回馈”社区。但这并不是一个必须的义务。不需要在GitHub上展示你有无数的项目,或者你一年365天中有366天在提交代码(讽刺意味)。这不是软件工程的全部。至今我还没有遇到一家公司在面试中关心我的GitHub个人资料,或者我在业余时间参与了哪些项目。如果你是一个刚毕业的学生,这可能有点用;否则,可以忘记这件事。
你也不需要撰写开发相关的文章或博客。当然,我自己就是通过写作来表达自己,但写作从来都不是成为一名优秀软件工程师的必要条件。它只是众多技能中的一项。写作可能会为我在未来打开不同的大门,而且的确,教授别人有时也能帮助你自己提升,但还有许多其他的非正式方式可以做到这一点,比如和同事进行结对编程。
在LinkedIn上经常或者不断地发帖也同样不是一个要求。我不否认这有助于提高能见度,但这从来都不是成为一名优秀软件工程师的必要条件。社交媒体的存在不是软件工程的一项技能。
与同事一起去酒吧也不是必须的。偶尔这么做是很好的,你可能会很享受,但将工作生活和个人生活分开是完全专业的。对某些人来说,与许多其他人在公共场合相处可能非常令人生畏,而其他人可能根本就没有时间。如果你没有时间,或者更喜欢在家里的沙发上,旁边是你的吉娃娃或斯芬克斯猫,享受披萨和啤酒,那也完全可以。最后,请记住,成为一名优秀的软件工程师不是以代码行数来衡量的。
结束
在软件工程的职业道路上,最重要的是找到自己的节奏,理解并坚持自己的价值观。不是所有的潮流都值得追随,不是所有的"必须做的事情"都符合每个人的职业发展。重要的是要找到使你保持热情、持续学习和成长的方式。这样,不仅能够在技术上取得成功,还能在职业生涯中保持幸福感和健康。