Published on

程序员的成长秘籍

Authors
  • avatar
    Name
    青雲
    Twitter

最近,有年轻的朋友向我咨询:“什么是成长性的工作?” 我仔细琢磨后,觉得这个问题挺有意思,就想和朋友们分享下我的一些想法。

一、成长的多面性

首先,我们要明确一点,对于我们程序员来说,什么是成长?

成长阶段

从一个前端开发者的职业生涯来看,我们通常会经历几个成长阶段。起初,在学校中学习计算机基础和编程语言,做出一些简单的前端项目,这是入门阶段。参加工作后,开始参与实际项目的开发,把所学知识运用到生产中,实现了从理论到实践的关键转变。

随后,随着工作量的增加和项目的深入,我们开始更多地关注于编程技能的积累和应用,比如深入研究 JavaScript 的高级特性、CSS 高级技巧以及各种前端框架,比如 React、Vue 或 Angular,进而处于专注于语言和框架层面上的提升阶段。之后,我们可能会开始反思自己的代码编写方式,逐渐从只注重功能实现转向更加关心代码的质量、可维护性和性能优化,开始采用模块化、组件化开发,利用设计模式解决常见的前端问题。

进一步地,当我们积累了丰富的项目开发经验后,开始涉足公共库函数和工具的编写,实现代码与功能的复用,从而逐渐上升到框架或库的设计和开发阶段。随着项目经验的持续增加,开发者会自然地进入 “手中无剑,心中有剑” 的阶段。在这个阶段,开发者不再受特定技术或工具的局限,能够依据项目需求灵活选择或创造解决方案。

此时,新的技术学习与问题解决都不再困难,进入到 “无招胜有招” 的境界,能够从根本上理解问题的原理并找到解决方案。每一个问题都转变为思路问题,解决方式更加多样且灵活。这不仅需要丰富的技术知识储备,更重要的是对前端领域有深刻的理解和洞察,以及对未来技术趋势的敏锐感知。

随着时间的推移,我们可能会开始关注整个前端项目的架构设计,不仅是单页应用、服务器端渲染的技术选型,更包括构建系统、状态管理方案、前后端分离架构等,提出解决方案以适应不断变化的需求,进入到“软件架构”层次。

在理想的高级阶段,一个前端开发者可能已经具备了足够的知识和经验,可以全局考虑和设计大型前端项目的架构,从页面性能优化到数据的高效处理,再到用户体验的流畅度,甚至能够负责领导前端团队,帮助其他同学成长。

架构师的转变

要实现从前端开发者到前端架构师的转变,扎实的编程基础与深入理解前端技术固然重要,但更为关键的是对业务知识的不断学习。对业务的深刻理解同样不可或缺,只有深入了解业务流程和用户需求,才能更好地将技术与实际业务相结合,进而开发出真正具有价值的软件产品。

例如,在电商项目中,架构师如果不了解电商的业务流程,如商品展示、购物车管理、订单处理等环节,就无法设计出高效且符合用户习惯的页面交互。如果不理解用户对于快速加载商品图片、流畅的购物流程以及安全支付的需求,那么所开发的前端界面可能会存在诸多问题,影响用户体验和业务的顺利开展。

在这个转变过程中,提高沟通协调能力至关重要。良好的沟通协调能力可以帮助我们与不同岗位的人员进行高效的交流与合作。与产品经理沟通时,能够准确理解业务需求并提出合理的技术实现方案;与设计团队协作时,可以更好地将设计理念转化为实际的前端界面;与后端开发人员配合时,能确保前后端交互的顺畅与高效。同时,在团队内部,沟通协调能力有助于组织技术讨论、解决技术难题,提升团队的整体战斗力。

此外,前端架构师还需要了解上下游的技术栈和架构,从全局的视角理解业务,从而找到技术增长点。比如,通过了解服务端架构,前端架构师可以更好地优化前端与服务端的交互方式,提高数据传输效率和系统性能。通过持续的实践、学习和总结,前端开发者才能跨越从优秀前端开发者到架构师之间的鸿沟,并始终遵循合适原则、简单原则、可持续发展原则,做出最佳的技术选型和架构设计。

二、工作中成长

工作是用劳动报酬交换时间,公司没有义务考虑每个人的成长,所谓“成长性的工作”并不存在。

从本质上来说,工作确实是一种交换行为。公司的首要目标通常是实现自身的利益最大化,而非专注于员工的个人成长。虽然有些公司可能会提供一些培训和发展机会,但这往往是出于公司的整体利益考虑,而非纯粹为了员工的成长。

根据一些调查数据显示,大约只有 30%的公司会为员工提供系统的职业发展规划和培训机会。这意味着大部分员工需要自己在工作中寻找成长的机会。

首先,将自己希望学习的新技术或理念应用到实际项目中是一个有效的成长策略。比如说,在日常开发中,我们可以尝试引入最新的前端框架或者利用现代JavaScript 特性来优化代码,这不仅能提升个人技术水平,还可能为团队引入新的视角和解决方案。通过这种方式,我们能在实际工作中锻炼技能,同时也助于保持对前端技术的热情和好奇心。

面对具有挑战性的任务时,主动承担起来同样非常关键。无论是参与复杂交互的实现、性能优化,还是承担起项目的架构设计等关键角色,这些挑战性工作都能有效地推动我们走出舒适区,激发潜力,加深对技术的理解,并提升问题解决能力。例如,在遇到性能瓶颈时,深入研究页面渲染原理,采用更高效的数据结构或算法,不仅能解决眼前问题,还将积累宝贵的经验。

此外,技术交流对于前端开发者的成长也是极为重要的。无论是在团队内部举办的技术分享会,还是参与社区的线上线下讨论,都是宝贵的学习机会。通过分享自己的项目经验、学习他人的解决方案,不仅能够拓宽技术视野,还能培养跨团队合作和沟通能力。例如,通过参与开源项目,可以接触到行业内更广泛的编码规范和设计思想,这对提升代码质量与工程实践有着显著的帮助。

通过借助公司这个平台,我们可以在完成日常工作任务的同时,不断地提升自己的技术能力、拓宽视野,并为公司创造更多的价值,实现“双赢”结果。

三、把握业余时间

真正决定职业生涯可以走多远的,往往是工作之外的业余时间,我们可以用来提升个人综合实力,也可以去探索职业的第二曲线。

自我提升

  1. 深入学习技术理论和实践:可以通过阅读专业书籍如《JavaScript高级程序设计》、《你不知道的JavaScript》、《React设计原理》、《Vue.js设计与实现》、《深入理解TypeScript》、《深入浅出Node.js》、《重构:改善既有代码的设计》、《前端架构师:基础建设与架构设计思想》等来系统地学习理论知识。

  2. 关注前沿技术论文和行业趋势: 前端领域快速迭代,关注最新技术动向是必要的。可通过参与前端技术社区和论坛如MDN、Stack Overflow、GitHub等来学习前沿技术,并和其他开发者交流思想、分享经验。

  3. 参与开源项目: 对前端开发者来说,参与开源项目不仅能够提升代码质量和编程技巧,还能学习到当下流行的前端技术栈、框架、工具,以及先进的代码规范和项目管理经验。

  4. 提升软技能: 除了硬实力的提升,沟通能力、团队合作和项目管理能力的提升也十分重要。通过阅读相关书籍或参与培训,如《高效能人士的七个习惯》,可以有效提升这些能力。

探索第二曲线

  1. 做自媒体: 将个人的技术经验和对某个领域的理解通过博客、播客、短视频等分享给更广泛的人群,不仅有助于打造个人品牌,还能够吸引志同道合的人。选择适合的平台和内容定位,注重文章呈现和用户互动,逐步建立个人影响力。在创作技巧方面,内容要面向受众群体,标题要吸引人,采用三段式标题效果更好。文章逻辑可以采用“前言-重点预览-分论点-结语”的结构,排版要做到图文并茂,分级标题让读者直观地看清楚逻辑。

  2. 独立开发项目: 对于准备全职做个人开发的程序员来说,在职期间最好已经做了业余准备,有自己的个人作品上线,这样在全职做个人开发时底气会更足。同时,要结识已经走在前面的“前辈”,了解市场规则,了解商业变现,提升市场洞察力及产品规划能力。可以先制定一个“走一遍试试”的计划,通过一个小型项目走一遍产品研发、上架、变现的流程,为大型项目积累经验。

  3. 尝试新的领域: 除了编程,尝试开展新业务,比如投资开个小店(开店前可以看看 B 站沈帅波的开小店全劝退系列视频🐶),或者参与技术咨询,用自己的专业知识为企业或个人提供技术咨询服务(前提是要在某个领域有个人影响力,这点需要做好第一步)。这些尝试虽然与编程技术无关,但可以拓展自己的视野和经验,锻炼市场感知和运营能力,为未来发展提供更多的选择。

结语

最后,回答开头的那个问题:什么是成长性的工作?

成长性的工作难以有一个确切的定义,因为它对于每个人而言可能都有所不同。然而,成长却是个人的事情。在任何工作中,都存在成长的机会,需要我们敏锐地察觉并积极地把握这些机会。

无论做什么,在我们成长过程中,最关键的是要保持好奇心和学习热情,勇于尝试和挑战新事物。