写给职场新人|从迷茫到屡获殊荣的技术人成长之路
1.锚定方向:学生生涯的一次探险
如果用一个词语概括我的本科阶段,那大概就是“迷茫”。大三前,我一直在寻找自己的热情所在,自动化专业课程内容太过理论,在个人层面没法落地。恰巧在大三Python Programming这门课中,花几个小时就能开发一个软件,并被很多人使用,这对于一个结果导向型的人来说是件非常有成就感的事情,这件事也坚定了我转计算机的信念。在那之后便开始了自学,通过较为高效的自学方法论,在自学一年后便顺利拿到大厂的实习offer。
“自学”这件事贯穿了我的学生生涯,或许是这种不甘现状的心境需要我去摄取外界的知识,这也逐步锻炼了我的自学能力。在自学计算机的过程中,先是筑基期,通过书籍、技术博客、视频的方式快速学习理论基础,在筑基3个月后便开始结合实践学习。前期学的比较杂,最先接触的是Python,然后又学了C和Java,涉猎的方向有爬虫、网络攻防、前端,后端等,并且每个方向都伴有相关的落地项目。
后来考虑到缺乏在工业界或标准流程的场景中工作的经历,于是主动邮件联系Python Programming这门课的教授,申请为他在实验室的工作帮忙。教授听说我出于兴趣愿意来帮忙非常开心,起初给了我一些数据处理类的工作,主要是在Jupyter Note里写Python脚本处理数据集,例如数据清洗、结构化,可视化等等。由于每次任务都快速且高效交付,教授后续也让我参与了核心的网络协议项目,这是我编程能力突飞猛进的一段时间。
到了大四毕设,我自然也选择了计算机相关的课题。与导师沟通后敲定了“基于点云的3D动态手势识别算法”这一方向,这是一个极具挑战但又令人激动的选题。当时英国疫情严重,同学纷纷申请远程毕设,中国的同学更是跑路回国,我再三犹豫下决定“反向跑毒”,成为了实验室唯一的一个本科生。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-04-01-17-536QVXwJteAOUqBYe.png)
英国的冬天总是天黑的很早,又天亮的很晚,每天去实验室前都可以在家欣赏一场日出,每次顶着夜色走回家的路上都不止一次感受到了科研人的孤独感。在实验室的闲暇时间会和隔壁的学长们一起聊一聊他们科研的难题和生活的琐事,也带来了一些稀薄的慰藉。算得上是一段可遇不可求的难忘经历。
毕设的方向是偏算法类的,意在把学术界现有的点云识别模型复现并优化。看到实验室资源实在丰富,我主动跟导师提出了加入engineering相关的内容。最终完成了程序开发、算法优化、模型训练、部署,机器人控制系统开发的全流程。先是自学C++,开发了一个通过Kinect摄像头录制点云的程序,配有各种点云过滤功能(已在Github开源),再用这套程序录制了一个点云手势数据集,又在学术界较为知名的PointNet网络的基础上做了优化,将点云目标升维,配合多帧融合,实现了由3D图像识别到3D视频识别的转换,最后又自学了ROS操作系统,控制机器人电机转动,将模型部署到机器人最终实现了手势操控。最终成功发表了论文并拿到了全系第一的成绩。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-04-01-17-39PedvreahWv6DJ539.png)
2.华丽转身:职场新人的野蛮生长
2.1 角色定位:后端开发是一种艺术
入职后,本以为工作内容基本以写代码为主,但实际发现需要将大部分的时间放在需求评审、设计、联调、代码评审、测试等环节上。这些是公司内必不可少的环节,也是和个人开发者明显的区别。我很快便适应了这种模式,同时也让我重新审视了后端开发工程师这个岗位。
后端开发不仅仅是编码的技术行为,它更是一种将复杂业务需求转化为可靠、高效系统解决方案的艺术。在完成系统功能的同时需要兼顾复用性、稳定性、可拓展性等因素,这些能力也是区别普通后端开发工程师和优秀后端开发工程师的关键因素。这也就是大家常说的“要有架构思维”。何为架构?百度词条是这样解释的:“架构是人们对一个结构内的元素及元素间关系的一种主观映射的产物”,既然是主观映射,那也就意味着不同的人可能会对不同结构有不同的架构理解。这个“结构”可以是一个系统,那就应该由架构师这个岗位定义系统的高层结构,包括软件组件、组建间关系以及它们与环境交互的方式。但这个“结构”同样可以是我们的项目、需求,乃至于每一行代码,所以我们每个人都应该承担自己的架构职责。
2.2 角色延展:生活不只有酸汤饺子
从业务开发到研究类开发的状态切换是我最难忘的一段经历。随着AIGC的兴起,架构组需要研发资源来帮助做AI相关方向的探索。我凭借过往经历和自学能力成功获得工作交换的机会。在架构组工作期间我提出了较多创新性的建议,并且得到资源支持并逐一落地取得了极佳的效果。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-04-01-15-49MKjtxigBUozAhrK.png)
DevBooster的第一张架构图
新技术的探索道路总是崎岖的,团队从一开始对GPT一无所知,到后来研究简单的Prompt Engineering理论、开源产品、AI Agent范式,再到现在提出了自己的大模型技术架构,并落地了众多AI提效工具。
我们正式推出的第一款产品是自动化单元测试生成插件DevBooser,意在帮助研发提升开发效率,并降低测试成本,保障线上质量。为了推广产品,我们举行了一场大部门内部的“单测挑战赛”,参赛队伍使用插件生成单测,并统计合并到master分支上的单测代码行数,同时开放提示词微调入口,让全员都可以参与大模型的“微调”。我负责单测大赛的全流程,包括赛前的开发,给Tech Leader们宣讲赛事细节及系统接入方式,还有赛后的数据统计。最终,在一个月的时间内,帮助内部数十个核心应用提升了数百万行单测代码,同时每人日均新增代码行数远高于行业标准,极大的提升了研发的效率。
完成这一切的团队起初只有四名成员,2位架构师和2位研发。这种扁平化的团队层级关系也给了我一个新人更大的发挥空间,在每次激烈的技术讨论中,我的想法都会收到重视并获得资源支持,使我的达能力和创新能力得到了极大的锻炼。同时,我们身兼数职,除了研发之外还担任产品、运营、UI,无数次跳脱出自己的职能边界和认知边界去解决问题,同时我们也很享受这个过程。
就像都梁在《血色浪漫》里有段描述陕北农民的文字:
钟跃民惊讶地发现,在如此贫困恶劣的生存状态下,村民们却很少愁眉苦脸, 他们始终很乐观,他们最喜欢谈论的话题是饮食男女。在饮食方面,由于他们没见 过更好的食品,所以坚持认为酸汤饺子和油泼辣子是天下最美味的食品,如果有人提出世上还有很多更好吃的东西,那大家会一致认为此人太没见过世面,这驴日的八成是没吃过酸汤饺子,才在这儿胡咧咧.
正如酸汤饺子不一定是顶级美食一样,后端开发也不是最牛逼的工作。任何一个优秀的项目都需要不同的角色共同完成。如果仅仅将自己局限在程序员这一角色,长此以往未免会有坐井观天的狭隘。作为开发者,我们既可以向上探索, 去分析用户痛点、挖掘业务价值, 又可以向下延伸, 去参与测试编写、产品发布和运维监控等工作。通过不断扩展自己的能力边界,我们能更全面地掌握产品知识,从而在开发者的道路上走得更远。
3.自我迭代:优秀后端的制胜法宝
3.1 终身学习
程序员被裹挟在技术演进的洪流中,往往感到身不由己。作为程序员,不但要非常扎实的掌握基础知识,还需要具备快速适应新技术的能力,以及一种积极主动、永不停息的学习态度,而后者可能更重要。
培养终身学习的能力看似简单,但对于习惯了应试教育的我们来说并不容易。应试教育最终的考核指标是分数,所有不能提高分数的行为都不被视为学习,即使是可以提高创造力的行为。长期规训的结果是,这种长期的教育方式让许多人对“学习”这个概念的看法变得狭隘。即使新技术的出现减少了我们对学习的抗拒,我们仍需努力摆脱旧有的学习习惯,重新塑造自己的终身学习能力。这一步是最困难的,不仅要去掌握抽象层次更高的认识论、符号学、数学建模,批判性思维等内容,还要克服长期养成的习惯。但十多年的应试规训对一个人的影响太深远,很难在一朝一夕改变。每当我们想学习时,就会条件反射式的等待别人的教授,别人的总结,很少思考知识到底是怎么来的。例如很多人意识到要学习使用ChatGPT时脑中闪过的第一件事,就是找本书或买个课,这或许可以让我们快速上手,但了解原理和摸索的过程恰恰是让我们不断自我反馈和思考的过程,也是培养学习能力的过程。
读书是缓解此类焦躁心理的途径之一,建议每天抽出半个小时到一个小时来读书,周末可以多读一些。读书之外,还可以在线学习一些教程,比如Coursera和edX等,研发同学可以多参与到开源项目的建设中,学习外界的优秀编程思想和产品思维。
3.2 技术分享
将一个创意、复杂概念或者想法简洁而准确的描述出来是一个非常重要的能力。技术分享不仅仅是将知识传递给他人,更是对自己所学知识的一次重构和巩固。在准备分享的过程中,技术人不得不将知识点系统化、条理化,这本身就是对所掌握知识的一次深度梳理。同时,为了能够清晰地表达自己的观点,通常需要对知识点进行更深入的研究,这更是加深了对技术的理解和掌握。定期分享还可以促进团队内的知识交流和思想碰撞,并打造个人影响力。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-04-03-10-31eK3blYegyAuVdKZ.png)
3.3 work hard, play hard
职场新人在忙碌的大厂工作中应该寻找并保持个人成长和内心充实,同时对工作之外的宏大目标应抱有期望,比如个人兴趣的追求、身心健康、社交和个人生活的丰富。就我个人而言,我喜欢音乐,每次弹钢琴或吉他都可以让我放松心情,开阔思路。涉猎不同的领域也是对人广度的一种拓宽,可以帮助我们成为更好的开发者,毕竟架构能力和解决复杂问题的能力来源于知识的深度和广度,只凭所谓的“编程”知识解决不了世界抽象的问题。当然,play hard的最终目的是实现工作与生活的平衡,并找到工作之外的意义和价值。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-04-01-22-44AwHy10qUB10xBFjV7.jpg)
4.技术反思:挑战与机遇并存的时代
AI的发展引发了对后端架构复杂性的重新审视。这一转变同时带来了挑战与机遇,后端开发者必须不断学习新的编程范式和工具,以适应智能化的发展趋势,寻求在AI辅助下的创新工作模式。
然而在工作中会发现一些现象,人们会下意识对于新技术如AI产生抗拒心理,这种心理可能来源于害怕被取代,又或是对新技术的不信任。这种抗拒体现在,人们会专门将ChatGPT用于其最不擅长的领域,突出其缺点或用最顶尖的标准突出其不足。很明显,目的就是要否定它,有种“锤子无用,因为他没有手灵活”的感觉,然而,很多人却害怕错了对象,把矛头指向了ChatGPT这样的一个工具。可工具无法取代人,只有会用工具的人取代不会工具的人,即使没有这一轮AI技术的爆发,这种“取代现象”也会随着其他新工具的出现而出现,也不会因为人们的害怕和抵触而消退。
所以暂且放下永恒正确却于事无补的悲观主义,拥抱工具的革命或许将要引发的工业革命。积极思考随之而来的社会生产力与生产关系的质变,并做出快速响应。要知道,这可以是最好的年代,也可能是最坏的年代。The days are long but the decades are short.