程序员必看!从菜鸟到专家你要这么做,8年互联网老兵爆肝总结

news/2024/10/14 19:46:14

“互联网行业工作8年多,在国内Top互联网大厂B(ytedance)AT中的两家待过。喜欢研究计算机基础原理,有移动端全栈(包括Android & iOS & 鸿蒙等)开发经验,对逆向和网络安全有一定经验。”

不管是在校大学生,还是初入职场的菜鸟,抑或是在互联网行业打拼多年的老码农,相信这篇文章都能对你有所帮助。这是我工作多年以来总结的经验,都是亲身经历的,只有自己经历过的才会有切身的体会,没有花拳绣腿,没有虚头巴脑的东西。

虽然工作多年,依然对这个行业充满敬畏,深知持续在这个行业发展的不易。从初出茅庐不怕虎的愣头青,到棱角磨去、锋芒不在、按部就班的工作,经历了很多,心态也变化了很多。

不管如何,都希望自己不忘初心,砥砺前行。苍穹不负少年意,岁月不枉赶路人。

回归主题,下面我会根据自己的经验,说一下程序员如何成长,如何面对激烈的竞争环境和行业日新月异的技术革新,保持自己的竞争力,在这个行业长久的发展下去。

从大的方面来看,主要有三点:硬实力、软素质和打造个人影响力。下面我一一介绍。

  1. 硬实力

硬实力即工程师编码解决问题的能力,是对我们的基础要求,是立命之本。硬实力包括不限于:技术栈、编程语言、技术方案设计、代码架构设计、编码实现、单元测试、CR、性能优化、代码重构、问题定位、计算机底层原理、工具使用、技术规划等。

1.1 享受编程的乐趣,不断提升编码能力

兴趣是最好的老师,只有热爱才是最长久的告白。我相信每个选择互联网研发的同学,都是热爱编程、享受编程的。不管工作多久,这份初心都希望能保持不变;对于还没有工作的在校生,选择这个行业最重要的因素也是你是否热爱编程。

明确自己的技术栈,不断深耕。互联网研发岗位也有很多工种,包括:前端、服务端、移动端(Android & iOS & 鸿蒙 & 跨平台)、机器学习、大数据、大模型、人工智能、安全、测试、运维等等。不同的工种有自己的技术栈,工作前几年一定要在自己的领域深耕下去,保证自己有一个专长。我的经验是当你对一个领域研究很深入后,学习其它的知识很容易触类旁通,举一反三。相反,什么都会,什么都不精,履历是很难有亮点的。

另外,对于编程语言,不同的技术栈都有适合的语言,语言只是我们解决问题的工具,没有绝对的好坏之分,不同的场景选择不同的语言。随着新技术的不断发展,语言也在不断升级迭代,会有很多新的特性,在开发效率、安全性、性能等方面都会提升,还是需要积极学习,主动拥抱。

比如,移动端Android的Kotlin(对比java),以及iOS的swift(对比OC),都是更好的编程语言选择,支持了非常多的新语言特性。近几年,Rust 语言以其高安全性、高性能、跨平台等优势,已连续多年被评为程序员最受欢迎的编程语言,在一些底层系统开发、跨平台开发中展露头角,非常值得学习。

互联网行业新技术层出不穷,发展很快,我们不能一直待在自己的舒适区。要不断学习、多尝试、积极拥抱变化、拥抱新技术。

1.2 重视技术方案

作为一个研发工程师,每天最重要的事情就是实现需求。保证一个需求顺利交付最关键的是技术方案,一个技术选型合理、考虑周全的技术方案才能保证需求顺利落地。从我个人的经验来看,很多时候技术方案的设计环节占用的人力成本超过了50%,有了完整的技术方案,开发过程会非常顺畅。

技术方案是研发工程师展示自己技术实力和技术素养最好的方式之一。

优秀的工程师,不仅仅满足实现需求功能,他们也关注程序的效率、质量、可读性、可维护性、可扩展性、成本、监控告警、容错降级等。这些都需要在技术方案设计阶段考虑和呈现。

1.3 做好研发日常工作

工程师不仅仅是写完代码就完了,写好代码只是工作中的一部分。研发日常还包括很多其它环节,也同样重要。包括编码、单测、CR、灰度、数据监控、线上问题处理等。

1.3.1 编码实现

重视代码质量。傻瓜都能写出计算机理解的代码,唯有能写出人类容易理解的代码的,才是优秀的工程师。一定要重视代码规范和质量,保证架构设计合理。不要仅仅停留在实现功能的层面。

重视防御式编程。对于各种边界、性能、稳定性、兼容性等影响要准确评估,避免带入线上问题。重要的变更要有线上降级止损的手段。

重视单元测试。代码逻辑尽量用单元测试覆盖,如果发现单测不好写,大概率是代码架构不合理。只要有开发经验的工程师,一定会有深刻的体会,解决线上bug付出的成本要远远高于QA测试阶段发现的bug。一定要更前置的发现问题,而单测无疑是最好的手段之一,或者没有之一。

用代码说话。Talk is cheap,show me the code。

重视CR。CR 不仅仅是帮别人发现问题,更是团队成员之间互相交流、互相学习提升的好机会。CR和单测一样,都对提升代码质量非常有帮助,这也是我个人职业生涯非常深刻的体会。

1.3.2 上线灰度

原则上,任何功能变更都要有降级回滚的能力,避免线上出现问题不能止损。处理过线上事故的工程师才会有切身体会!!!

重视数据指标,用数据说话,不自嗨,不猜测,不管是业务指标,还是性能指标,都要做到用数据分析。Talk is cheap, show me the data。

重要的指标一定要配置监控告警,监控告警是及时发现线上问题最有效的手段。

1.3.3 线上问题

俗话说得好,没有经历过 P0 的研发不是好研发,研发不是在解决 P0,就是在搞出 P0 的路上。在事故中成长,从失败中复盘,是研发同学不断精进、追求极致的必由之路。当然,我们要做的就是不断提升自身技术水平,规范开发流程,尽量避免线上问题,出现了线上问题也要有能力解决。

再优秀的程序员,也不能保证不会出bug。处理线上问题成本非常高,对自己的绩效考核、个人以及团队口碑都会有很不好的影响。也见过一些非常优秀的研发工程师因为一次事故,对自己的职业生涯造成了很大的影响,令人非常惋惜。

不断提升定位问题,解决问题的能力,没有捷径。多读多写代码,多解决问题,多请教高手,善用工具,多总结复盘是提升问题排查能力的主要手段。

1.4 重视计算机底层原理

一个程序员对计算机底层原理的理解,决定了他职业生涯的上限。

不管什么工种,不管什么技术栈,作为一个程序员,底层原理一定要重视。包括不限于:编译原理、内存、多线程、crash分析、网络、安全、算法、数据库、设计模式等等。

基础知识非常重要,尤其是在定位疑难杂症、解决棘手问题时。这是拉开编程专家与一般程序员距离的地方。

这些问题你能回答好吗?

一段代码从书写到编译运行起来,经历了哪些阶段?

TCP 三次握手原理是什么,为什么不能是2次或者4次?

HTTPS更安全的原理是什么?

多线程使用过程中容易出现哪些问题,如何规避?程序在内存中是怎么分布的?

静态库和动态库的区别?

等等

1.5 善用工具,提升效率

工欲善其事,必先善其器。

开发过程中,我们要使用到各种工具,善用各种工具,对我们开发提效非常重要。包括不限于:IDE、Git、CI/CD、GPT、命令行、脚本、网络抓包、开源工具等。不断优化我们研发流程,提升效率,才能让我们把宝贵的时间放到更重要的事情上。

好的工程师非常懒惰,TA这么做一定是为未来的工作提升效率。如果一件事情不断地重复做,一定要考虑用自动化手段解决,这才是工程师思维。

  1. 软素质

一个优秀的研发工程师不仅表现在技术硬实力方面,TA的软素质也同样重要。重要的软素质包括不限于:沟通协作、项目管理、工作汇报、文档书写、流程规范、用户思维等。

2.1 重视沟通协作

在互联网公司中,有很多工种,包括不限于:RD(前端、客户端、服务端、算法等)、PM、UX、QA、DB、PMO等。每一个需求都会涉及各方的合作,才能顺利落地,这其中沟通协作是必不可少的,对工程师而言也非常重要。工程师时刻要牢记,写代码不是工作的全部,不能只关注代码。要关注做事的整体流程,对项目需求有很好的把控,才能更进一步。

在项目开发过程中,程序员往往不是孤立地工作,而是需要与团队中的其他成员紧密合作。良好的沟通协作能够促进不同团队之间的合作和理解,保证项目顺利开展和交付。

沟通的方式非常多,IM聊天、会议、文档等,不管什么沟通方式,都是在表达。个人经验,表达最重要的就是:准确、简洁、清晰。

  • 善用肯定的陈述句,避免可能、大概、估计等模糊词汇。
  • 用词精炼准确,避免过度修饰、避免黑话、冗余啰嗦。
  • 组织条理、结构化思维、善于用图(表)。

2.2 重视文档书写

优秀的工程师对自己的作品足够尊重,作品包括不限于:技术方案、代码、文档、产品等。其中技术方案、代码前面提过了,这里重点说一下文档书写。
为什么文档书写重要呢?因为不管是需求文档、技术方案、技术分享、会议材料、成果汇报、晋升答辩、面试简历等等,都算是文档书写。作为一个优秀的工程师,不仅要代码写的好,也要很好的展示和呈现出来。优秀的文档和优秀的代码一样重要。

这里重点强调一下职级晋升答辩。一般互联网公司每年都会有晋升的机会,都需要答辩,答辩的材料是你过去一两年的工作产出。即便相同的工作内容,不同的表达方式,呈现出来的效果可能差别很大,也在一定程度上会影响答辩结果,大家一定要重视。

2.3 重视流程规范

每个公司都有自己的开发和交付流程,我们要做的就是遵守流程并不断优化流程,让自动化代替人工重复的工作,不断提升我们的开发效率。

另外,还要强调一些非常重要的规范,前面也介绍过,因为太重要了,这里再提一下。开发过程中一定要重视单元测试、开发自测、CR、监控告警、容错降级手段、核心逻辑添加log等,做好防御式编程,避免踩红线。一次不必要的失误,在工程师职业生涯中可能是灾难性的。

  1. 打造个人影响力

当你在一个领域有一定经验和沉淀之后,就可以考虑对外输出一些知识,不断的打造个人影响力,视野不在局限在一个团队、一个公司,而是有了行业视角,不仅让你的技术水平得到进一步的突破,也能让你得到更多的行业机会。
一件事情,如果说自己明白了,通常只理解了50%;如果能给别人讲明白,那才是100%理解了。费曼学习法的核心是:透过“教学”或“分享”的形式,对知识做到更好的理解和记忆。只有当你能把一个知识快速、轻松、逻辑清晰的表达出来的时候,才代表你真的懂了。

做过技术分享的同学都会有这个感受,技术分享往往收获最大的就是自己。

除了技术分享,写博客、参与开源、参加行业会议、开设课程等等都是提升我们个人影响力很好的方式。

最后,还忘了最重要的一点,要保持健康,多锻炼身体,劳逸结合,少加班,身体是革命的本钱。
与君共勉,知行合一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71578.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

CTF 的基础知识 题型 Trick总结

idk.references: 1 2 web php 语法基础 references: 1 php 脚本的基本格式: <?php //coding here ?>php 代码同样以 ; 结尾。 php 文件的后缀名大多是 php ,也有诸如 php5 php4 phps 之类,如果普通的后缀名被拦截不妨试试其他的。 php 变量用 $ 来定义,大小写敏感…

微服务03 微服务sentinel, springcloudgateway

6 Sentinel 6.1 Sentinel 介绍和工作机制 6.1.1 微服务流量治理组件介绍 随着微服务的流行,服务和服务之间的调用导致服务的稳定性问题变得越来越重要。 雪崩问题: 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,即雪崩。 解决雪崩问题的常见方式有…

Web刷题之polarctf靶场(3)

1. 干正则 打开靶场发现是简单的php代码审计, 先构造id=a[0]=www.polarctf.com, 由于要ping两次, 所以先构造cmd=|ls <?php error_reporting(0); if (empty($_GET[id])) {show_source(__FILE__);die(); } else {include flag.php;$a = "www.baidu.com";$result =…

题解:P2315 [HNOI2005] 数三角形

Problem Link [HNOI2005] 数三角形 题意 输入一个大三角形的各个边存在情况,输出里面有多少个正三角形。 Solution 简单暴力即可,用 \(4\) 个数组维护每条边能延伸的最大长度,然后逐个判断三角形是否可行即可。如图,l_upper 维护左端点向上(即 $\ell_{BA} $),l_lower 维…

梳理好本职工作之项目管理

项目整个里程碑,每个阶段应该输出什么

微服务01 ZooKeeper, Kafka

1.4 微服务 1.4.6 Spring Cloud JAVA 微服务技术 Dubbo是2014年之前阿里退出的分布式系统的技术(不属于微服务)。现在主流是 Spring Cloud Spring Cloud官网地址: https://spring.io/projects/spring-cloud 官网上实现方法有很多种,目前主流是阿里巴巴实现的方法Spring Boot…

Swarm 框架登场:OpenAI 第 3 阶段「敲门砖」;马斯克的 Teslabot 实际有人远程操控丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

[2024领航杯] Pwn方向题解 babyheap

[2024领航杯] Pwn方向题解 babyheap 前言: 当然这个比赛我没有参加,是江苏省的一个比赛,附件是XiDP师傅在比赛结束之后发给我的,最近事情有点多,当时搁置了一天,昨天下午想起来这个事情,才开始看题目,XiDP师傅说是2.35版本的libc,确实高版本libc的却棘手,我经验太浅了…