本书是一本为程序员提供成长指导的图书。它涵盖了程序员职业生涯需要面对的多种问题,并给出了实用的解决方案。本书共分为8章,第1、2 章作为一个整体模块,帮助读者从客观的角度重新认识程序员这个职业,然后阐述了技术为什么是程序员成长的根基;第3~5章作为一个整体模块,带领读者以程序员的身份融入职场,帮助读者树立项目全局观,了解如何做到本色做人、角色做事,以及如何在程序员岗位上可持续发展;第6~8章作为一个整体模块,帮助读者了解程序员的职业发展,以及培养多听多想、打开格局的思维能力和自驱力。
本书适合想要从事或刚从事程序员职业的新手和准新手,以及在职业发展中遭遇瓶颈的程序员阅读。
这是一本资深程序员的职场告白,提供实用的编程技巧和职业发展指导,让你在程序员的道路上走得更远、更稳;其特色在于职场晋升与职业发展、团队协作与沟通、程序员灯塔助力学习与创新。作者全网技术博文阅读量超200万。
本书是一本为程序员提供成长指导的图书,涵盖程序员在职业生涯中需要面对的多种问题,并给出实用的解决方案。本书不仅为初学者提供了基础知识,还为经验丰富的程序员提供了新的思考方向。通过阅读本书,读者能够更好地掌握程序员的技能,并在职业生涯中取得更大的成功。
本书共分为8章,分别介绍如下。
第1章先导:重新认识程序员这个职业
第1章是先导篇。很多人想做程序员,首要原因是其高额的薪资。然而,在高薪的背后,也有许多鲜为人知的压力。程序员岗位是一个高竞争、高压力、高淘汰的岗位,有着鲜明的岗位特点。外界对程序员有不少刻板的印象,比如不修边幅少言木讷之类。而实际上,程序员的生活也是丰富多彩的。你是否真正走进过他们的日常生活?是否了解他们的关注点?本章带领读者打破固有认知,重新开始建立对程序员的印象,重新认识程序员这个职业。
第2章入门:技术是成长的根基
第2章是技术入门篇。如果想在未来从事程序员职业,那么应该从基础技术入手,学习一门基础的编程语言和计算机通用技术。构建知识体系也非常重要,读者可以不用一次构建完成,但绝不能不做这项工作。
第3章经验:树立项目全局观
第3章是经验篇,旨在帮助程序员快速融入规范的软件开发项目中。在工作中,程序员时刻面对的就是软件开发项目。程序员是项目中非常重要的角色,一定要有全局意识,能推进流程、突破关键问题。本章将深入探讨程序员的代码开发工作,深入学习代码管理、文档管理、IDE等。本章最后将探讨敏捷开发,它是热门的、科学的软件开发方法。
第4章职业:本色做人、角色做事
第4章是职业篇。作为一个专业领域的职场角色,程序员有自己准确的定位和职责范围。专业程序员,应有专业的工作态度;在处理人际关系方面,应有高情商的表现;对于空闲时间的处理,也应充实和有意义。
第5章进阶:程序员的可持续发展
第5章是进阶篇,从软技能角度探讨程序员如何可持续发展,具体内容包括:如何实现代码规范、可以参考的优秀编程原则、如何通过自动化来实践规范、如何提高代码的可读性、怎样理解源码即设计、如何做代码的审查工作,以及如何落地代码的单元测试等。
第6章升职:程序员的职业发展
第6章是升职篇。在职场中,成长的一个重要标志是升职和加薪,这是客观上对个人能力的肯定。程序员的职业发展同样遵循这个规律。是在技术层面持续发力,成为技术专家,还是同时学习管理知识,向着技术管理岗位努力?程序员需要懂产品吗?本章将探讨这些问题。本章还会重点讨论如何提升程序员素养、开源、学习时间管理与授权等。对升职、加薪感兴趣的初、中级程序员,可重点阅读本章。
第7章思维:多听多想、打开格局
第7章是思维篇。作者有一句牢记在心的格言:信念产生行动、行动养成习惯、习惯生成性格、性格决定命运。可见思想、信念的重要性。首先改变思维,思维会引领行动,意志坚强的人,往往执行力也不会差;有了行动之后,需要持之以恒,坚持行动能形成习惯;习惯则会塑造大脑,培养独特的气质、性格;而性格往往决定命运,这是大家熟知的。究其根源,必须重视思维的提升,这是一个优秀程序员与普通程序员之间最关键的差异之一。
程序员成长手记前言第8章自驱:路遥知马力
自驱力是个人成长中非常重要的能力,甚至可以称它为第一能力。拥有自驱力的人,不需要别人的督促,就会主动去做自己该做的事情。他们往往有着明确的目标和强劲的动力,懂得化被动为主动,通过努力获取自己追求的东西。主动意味着一切,这是本章想要强调的。在本章最后,还会介绍熵增理论,探讨如何通过成长来抵御生命的负熵。
三大模块
本书8章又可以进一步划分为三大模块。每个模块的侧重点不同。
其中,第一模块(第1、2章)侧重于打破认知、新手入门,带领读者重新认识程序员这个职业角色,介绍程序员基础技术要素。
第二模块(第3~5章)侧重于职场融入、技术进阶,带领读者融入程序员职场,帮助读者树立项目全局观,以便与各角色的协作如鱼得水、在各类问题的处理上游刃有余。
第三模块(第6~8章)侧重于思维提升、自驱成长,带领读者突破成长瓶颈,建立方法论,打开认知格局,持续精进。
三个模块层级是递进关系。
定位
首先,本书的定位是一本手记。
既然是手记,那么本书按照排检法把有关知识、资料、事实等加以汇编,供读者随手查考。所以,作者建议读者先认真阅读本书目录,了解大致脉络,再进一步阅读。这样能让读者做到心中有数,在需要查阅的时候,快速、准确定位内容,收获想要的答案。
其次,本书还定位为一本关于程序员软技能的书。
何谓软技能?软技能与硬技能相对应。硬技能是指程序开发必须掌握的专业知识。它的内容往往是明确的、可说的、易传播的,比如计算机操作系统、数据库、计算机网络、编程语言等知识。硬技能水平的高低是可以量化的。
关于程序员硬技能,比较有名的图书有《算法导论》《深入理解Java虚拟机》《JavaScript高级程序设计》等。
软技能则是可定性感受的一种能力,很难量化,比如表达能力、管理能力、组织能力、理解能力、架构设计能力、编程思想水平、代码编写习惯、文档写作水平等专业相关能力。关于软技能,无法直截了当地给出确切、客观的评价,只能根据感觉在一个相对范围内给出观点,比如我们会说用这样的设计模式重构代码会让代码更可读,而不会说用这样的设计模式重构代码会让代码90%可读。
关于软技能,比较有名的书有《人月神话》《代码整洁之道》《软技能:代码之外的生存指南》《纳瓦尔宝典:财富与幸福指南》《非暴力沟通》等。
软技能与硬技能,孰更重要?
作者认为:同等重要。
猿小兔和猿山羊
为了增加阅读的趣味性,本书还带来了两位漫画朋友:猿小兔和猿山羊。
猿小兔是一名程序员小白,像很多新手一样,她对学习编程技术怀有极大的热情,但由于缺乏经验、知识储备较少,因此仍处于技术学习的初期。在本书中,她主要扮演提问者,提出一些阅读本书时可能遇到的问题与困惑。同时,她也是一位勤奋的阅读者,在适当的时候,还会总结心得,以便与其他读者分享。有了她的陪伴,读者在程序员成长道路上应该不会感到孤单。
猿山羊是一名资深程序员,拥有多年编程工作经验。他深谙程序员成长之道,对程序员各个时期遇到的成长问题有很透彻的理解。在本书中,他主要负责解答猿小兔的提问,并且在适当的时候给出学习重点,以及提出一些引发读者深度思考的问题。猿山羊丰富的经验一定能帮助读者少走弯路。
本书的目标读者
作者将本书目标读者大致分为以下五类。
第一类:想要未来从事程序员职业的学生。
第二类:想要转岗做程序员的其他职场人士。
第三类:程序员新手。
第四类:职业发展遭遇瓶颈的程序员。
第五类:关注程序员成长话题的人。
交流与反馈
由于水平有限,书中错漏之处在所难免,恳请广大读者批评指正。作者也非常愿意在书本之外,和读者进行更多的沟通、交流。
这里提供以下五个交流、反馈方式。
① 作者微信:anthony1453
② QQ 群:905500072
③ GitHub issues 留言:https://github.com/TUARAN/Programmer-s-Growth-Manual/issues
④ 作者个人博客留言:https://tuaran.github.io/
⑤ 作者掘金社区主页留言:https://juejin.cn/user/1521379823340792
作者郑重承诺:你留下的每一句话都会被看到、被认真思考和被回复。读者的点滴建议是作者巨大的财富。
雄关漫道真如铁,而今迈步从头越,你我共勉。
涂阿燃,51CTO社区专家博主,资深程序员,深耕前端编程、人工智能领域掘金技术社区签约作者、社区共建者、优秀创作者,互联网技术社区热门博主,全网博客文章300余篇,全网阅读量200余万。
作者序
前言
第1章先导:重新认识程序员这个职业
1.1高薪的背后
1.1.1外界对程序员的刻板印象
1.1.2程序员的工作日常
1.2程序员独特的职业气质
1.2.1对技术充满热忱
1.2.2追求卓越
1.2.3用代码说话
1.2.4读写文档
1.2.5求真务实
1.3优秀的程序员
1.3.1国内优秀程序员
1.3.2国外优秀程序员
1.3.3程序员的视野
第2章入门:技术是成长的根基
2.1学一门编程语言
2.1.1编程语言发展史
2.1.2编程语言分类及介绍
2.1.3编程语言学习要义
2.1.4学习目标与态度
2.2计算机基础技术
2.2.1计算机网络基础
2.2.2计算机组成基础
2.2.3操作系统基础
2.2.4数据结构基础
2.2.5数据库基础
第3章经验:树立项目全局观
3.1软件开发通用项目管理流程
3.1.1通用项目管理中的岗位角色
3.1.2通用项目管理流程
3.1.3项目管理工具推荐
3.2代码管理及文档管理
3.2.1代码管理工具
3.2.2Git流程及常用操作
3.2.3文档管理要点及工具
3.2.4Markdown使用指南
3.3在线协作及IDE
3.3.1在线协作工具资源
3.3.2花更多时间学习IDE
3.4敏捷开发
3.4.1敏捷开发定义
3.4.2敏捷软件开发宣言
第4章职业:本色做人、角色做事
4.1工作态度
4.1.1如何对接不同角色的工作
4.1.2对事不对人
4.1.3工作责任心
4.1.4技术人的态度
4.2人际关系
4.2.1完成大于完美
4.2.2团队的重要性
4.2.3沟通促进合作
4.3持续学习
4.3.1学习方法论
4.3.2费曼学习法
4.3.3寻找学习途径
4.3.4获取学习资源
4.4程序员的日常生活
4.4.1工位好物推荐
4.4.2空闲时间管理
第5章进阶:程序员的可持续发展
5.1代码规范
5.1.1优秀的编程原则
5.1.2童子军规则
5.1.3代码风格指南
5.1.4代码注释规范
5.2代码可读性
5.2.1函数式编程
5.2.2封装
5.2.3如何写好注释
5.2.4代码分析工具
5.2.5临时解决方案的持久性
5.3源码即设计
5.3.1技术负债
5.3.2简单即美
5.3.3复用思维
5.3.4设计模式
5.3.5设计黄金法则
5.3.6高内聚、低耦合
5.3.7谨慎对待设计的隐形
5.4代码评审
5.4.1代码评审策略
5.4.2代码评审通用工具
5.4.3代码评审的项目实践
5.4.4代码评审分享
5.5代码单元测试
5.5.1单元测试的意义
5.5.2单元测试怎么做
5.5.3单元测试要点
第6章升职:程序员的职业发展
6.1程序员也要懂产品
6.1.1参与产品建设
6.1.2观察用户
6.1.3人人都是产品经理
6.2程序员素养提升
6.2.1优先自我检查
6.2.2开发并非人越多越好
6.2.3让项目说话
6.2.4从说yes开始
6.2.5了解技术的背后
6.2.6学习人文知识
6.3开源实现梦想
6.3.1开源的魅力
6.3.2开源协议
6.3.3开源途径
6.3.4开源技巧
6.4学习时间管理与授权
6.4.1时间统筹
6.4.2任务委派
6.4.3结合技术和管理
第7章思维:多听多想、打开格局
7.1切勿急于求成
7.1.1借助外脑
7.1.2程序员也要很努力
7.1.3关于造轮子这件事
7.1.4放下鼠标、离开键盘适当休息
7.2敢于打破思维定式
7.2.1克苏鲁神话克服恐惧
7.2.2给出编码理由
7.2.3不要轻易相信自己的假设
7.2.4代码炸弹
7.3对代码进行终身维护
7.3.1关心自己的代码
7.3.2成为编码专家
7.3.3工匠精神
第8章自驱:路遥知马力
8.1主动意味着很多
8.1.1机会是主动创造出来的
8.1.2主动更新技术栈
8.2自驱是进步的原动力
8.2.1长期主义欲速则不达
8.2.2厚积而薄发注重积累
8.3成长即负熵本身
8.3.1接受多元化
8.3.2熵增理论
8.3.3成长型程序员
附录
附录AAIGC浪潮
A.1ChatGPT的背后
A.2人工智能的发展
A.3国内AIGC发展现状
附录B专业术语
B.1程序员常用专业术语
B.2互联网术语
后记