本書是一本為程序員提供成長指導的圖書。它涵蓋了程序員職業(yè)生涯需要面對的多種問題,并給出了實用的解決方案。本書共分為8章,第1、2 章作為一個整體模塊,幫助讀者從客觀的角度重新認識程序員這個職業(yè),然后闡述了技術為什么是程序員成長的根基;第3~5章作為一個整體模塊,帶領讀者以程序員的身份融入職場,幫助讀者樹立項目全局觀,了解如何做到本色做人、角色做事,以及如何在程序員崗位上可持續(xù)發(fā)展;第6~8章作為一個整體模塊,幫助讀者了解程序員的職業(yè)發(fā)展,以及培養(yǎng)多聽多想、打開格局的思維能力和自驅力。
本書適合想要從事或剛從事程序員職業(yè)的新手和準新手,以及在職業(yè)發(fā)展中遭遇瓶頸的程序員閱讀。
這是一本資深程序員的職場告白,提供實用的編程技巧和職業(yè)發(fā)展指導,讓你在程序員的道路上走得更遠、更穩(wěn);其特色在于職場晉升與職業(yè)發(fā)展、團隊協作與溝通、程序員燈塔助力學習與創(chuàng)新。作者全網技術博文閱讀量超200萬。
本書是一本為程序員提供成長指導的圖書,涵蓋程序員在職業(yè)生涯中需要面對的多種問題,并給出實用的解決方案。本書不僅為初學者提供了基礎知識,還為經驗豐富的程序員提供了新的思考方向。通過閱讀本書,讀者能夠更好地掌握程序員的技能,并在職業(yè)生涯中取得更大的成功。
本書共分為8章,分別介紹如下。
第1章先導:重新認識程序員這個職業(yè)
第1章是先導篇。很多人想做程序員,首要原因是其高額的薪資。然而,在高薪的背后,也有許多鮮為人知的壓力。程序員崗位是一個高競爭、高壓力、高淘汰的崗位,有著鮮明的崗位特點。外界對程序員有不少刻板的印象,比如不修邊幅少言木訥之類。而實際上,程序員的生活也是豐富多彩的。你是否真正走進過他們的日常生活?是否了解他們的關注點?本章帶領讀者打破固有認知,重新開始建立對程序員的印象,重新認識程序員這個職業(yè)。
第2章入門:技術是成長的根基
第2章是技術入門篇。如果想在未來從事程序員職業(yè),那么應該從基礎技術入手,學習一門基礎的編程語言和計算機通用技術。構建知識體系也非常重要,讀者可以不用一次構建完成,但絕不能不做這項工作。
第3章經驗:樹立項目全局觀
第3章是經驗篇,旨在幫助程序員快速融入規(guī)范的軟件開發(fā)項目中。在工作中,程序員時刻面對的就是軟件開發(fā)項目。程序員是項目中非常重要的角色,一定要有全局意識,能推進流程、突破關鍵問題。本章將深入探討程序員的代碼開發(fā)工作,深入學習代碼管理、文檔管理、IDE等。本章最后將探討敏捷開發(fā),它是熱門的、科學的軟件開發(fā)方法。
第4章職業(yè):本色做人、角色做事
第4章是職業(yè)篇。作為一個專業(yè)領域的職場角色,程序員有自己準確的定位和職責范圍。專業(yè)程序員,應有專業(yè)的工作態(tài)度;在處理人際關系方面,應有高情商的表現;對于空閑時間的處理,也應充實和有意義。
第5章進階:程序員的可持續(xù)發(fā)展
第5章是進階篇,從軟技能角度探討程序員如何可持續(xù)發(fā)展,具體內容包括:如何實現代碼規(guī)范、可以參考的優(yōu)秀編程原則、如何通過自動化來實踐規(guī)范、如何提高代碼的可讀性、怎樣理解源碼即設計、如何做代碼的審查工作,以及如何落地代碼的單元測試等。
第6章升職:程序員的職業(yè)發(fā)展
第6章是升職篇。在職場中,成長的一個重要標志是升職和加薪,這是客觀上對個人能力的肯定。程序員的職業(yè)發(fā)展同樣遵循這個規(guī)律。是在技術層面持續(xù)發(fā)力,成為技術專家,還是同時學習管理知識,向著技術管理崗位努力?程序員需要懂產品嗎?本章將探討這些問題。本章還會重點討論如何提升程序員素養(yǎng)、開源、學習時間管理與授權等。對升職、加薪感興趣的初、中級程序員,可重點閱讀本章。
第7章思維:多聽多想、打開格局
第7章是思維篇。作者有一句牢記在心的格言:信念產生行動、行動養(yǎng)成習慣、習慣生成性格、性格決定命運?梢娝枷、信念的重要性。首先改變思維,思維會引領行動,意志堅強的人,往往執(zhí)行力也不會差;有了行動之后,需要持之以恒,堅持行動能形成習慣;習慣則會塑造大腦,培養(yǎng)獨特的氣質、性格;而性格往往決定命運,這是大家熟知的。究其根源,必須重視思維的提升,這是一個優(yōu)秀程序員與普通程序員之間最關鍵的差異之一。
程序員成長手記前言第8章自驅:路遙知馬力
自驅力是個人成長中非常重要的能力,甚至可以稱它為第一能力。擁有自驅力的人,不需要別人的督促,就會主動去做自己該做的事情。他們往往有著明確的目標和強勁的動力,懂得化被動為主動,通過努力獲取自己追求的東西。主動意味著一切,這是本章想要強調的。在本章最后,還會介紹熵增理論,探討如何通過成長來抵御生命的負熵。
三大模塊
本書8章又可以進一步劃分為三大模塊。每個模塊的側重點不同。
其中,第一模塊(第1、2章)側重于打破認知、新手入門,帶領讀者重新認識程序員這個職業(yè)角色,介紹程序員基礎技術要素。
第二模塊(第3~5章)側重于職場融入、技術進階,帶領讀者融入程序員職場,幫助讀者樹立項目全局觀,以便與各角色的協作如魚得水、在各類問題的處理上游刃有余。
第三模塊(第6~8章)側重于思維提升、自驅成長,帶領讀者突破成長瓶頸,建立方法論,打開認知格局,持續(xù)精進。
三個模塊層級是遞進關系。
定位
首先,本書的定位是一本手記。
既然是手記,那么本書按照排檢法把有關知識、資料、事實等加以匯編,供讀者隨手查考。所以,作者建議讀者先認真閱讀本書目錄,了解大致脈絡,再進一步閱讀。這樣能讓讀者做到心中有數,在需要查閱的時候,快速、準確定位內容,收獲想要的答案。
其次,本書還定位為一本關于程序員軟技能的書。
何謂軟技能?軟技能與硬技能相對應。硬技能是指程序開發(fā)必須掌握的專業(yè)知識。它的內容往往是明確的、可說的、易傳播的,比如計算機操作系統、數據庫、計算機網絡、編程語言等知識。硬技能水平的高低是可以量化的。
關于程序員硬技能,比較有名的圖書有《算法導論》《深入理解Java虛擬機》《JavaScript高級程序設計》等。
軟技能則是可定性感受的一種能力,很難量化,比如表達能力、管理能力、組織能力、理解能力、架構設計能力、編程思想水平、代碼編寫習慣、文檔寫作水平等專業(yè)相關能力。關于軟技能,無法直截了當地給出確切、客觀的評價,只能根據感覺在一個相對范圍內給出觀點,比如我們會說用這樣的設計模式重構代碼會讓代碼更可讀,而不會說用這樣的設計模式重構代碼會讓代碼90%可讀。
關于軟技能,比較有名的書有《人月神話》《代碼整潔之道》《軟技能:代碼之外的生存指南》《納瓦爾寶典:財富與幸福指南》《非暴力溝通》等。
軟技能與硬技能,孰更重要?
作者認為:同等重要。
猿小兔和猿山羊
為了增加閱讀的趣味性,本書還帶來了兩位漫畫朋友:猿小兔和猿山羊。
猿小兔是一名程序員小白,像很多新手一樣,她對學習編程技術懷有極大的熱情,但由于缺乏經驗、知識儲備較少,因此仍處于技術學習的初期。在本書中,她主要扮演提問者,提出一些閱讀本書時可能遇到的問題與困惑。同時,她也是一位勤奮的閱讀者,在適當的時候,還會總結心得,以便與其他讀者分享。有了她的陪伴,讀者在程序員成長道路上應該不會感到孤單。
猿山羊是一名資深程序員,擁有多年編程工作經驗。他深諳程序員成長之道,對程序員各個時期遇到的成長問題有很透徹的理解。在本書中,他主要負責解答猿小兔的提問,并且在適當的時候給出學習重點,以及提出一些引發(fā)讀者深度思考的問題。猿山羊豐富的經驗一定能幫助讀者少走彎路。
本書的目標讀者
作者將本書目標讀者大致分為以下五類。
第一類:想要未來從事程序員職業(yè)的學生。
第二類:想要轉崗做程序員的其他職場人士。
第三類:程序員新手。
第四類:職業(yè)發(fā)展遭遇瓶頸的程序員。
第五類:關注程序員成長話題的人。
交流與反饋
由于水平有限,書中錯漏之處在所難免,懇請廣大讀者批評指正。作者也非常愿意在書本之外,和讀者進行更多的溝通、交流。
這里提供以下五個交流、反饋方式。
① 作者微信:anthony1453
② QQ 群:905500072
③ GitHub issues 留言:https://github.com/TUARAN/Programmer-s-Growth-Manual/issues
④ 作者個人博客留言:https://tuaran.github.io/
⑤ 作者掘金社區(qū)主頁留言:https://juejin.cn/user/1521379823340792
作者鄭重承諾:你留下的每一句話都會被看到、被認真思考和被回復。讀者的點滴建議是作者巨大的財富。
雄關漫道真如鐵,而今邁步從頭越,你我共勉。
涂阿燃,51CTO社區(qū)專家博主,資深程序員,深耕前端編程、人工智能領域掘金技術社區(qū)簽約作者、社區(qū)共建者、優(yōu)秀創(chuàng)作者,互聯網技術社區(qū)熱門博主,全網博客文章300余篇,全網閱讀量200余萬。
作者序
前言
第1章先導:重新認識程序員這個職業(yè)
1.1高薪的背后
1.1.1外界對程序員的刻板印象
1.1.2程序員的工作日常
1.2程序員獨特的職業(yè)氣質
1.2.1對技術充滿熱忱
1.2.2追求卓越
1.2.3用代碼說話
1.2.4讀寫文檔
1.2.5求真務實
1.3優(yōu)秀的程序員
1.3.1國內優(yōu)秀程序員
1.3.2國外優(yōu)秀程序員
1.3.3程序員的視野
第2章入門:技術是成長的根基
2.1學一門編程語言
2.1.1編程語言發(fā)展史
2.1.2編程語言分類及介紹
2.1.3編程語言學習要義
2.1.4學習目標與態(tài)度
2.2計算機基礎技術
2.2.1計算機網絡基礎
2.2.2計算機組成基礎
2.2.3操作系統基礎
2.2.4數據結構基礎
2.2.5數據庫基礎
第3章經驗:樹立項目全局觀
3.1軟件開發(fā)通用項目管理流程
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敏捷開發(fā)
3.4.1敏捷開發(fā)定義
3.4.2敏捷軟件開發(fā)宣言
第4章職業(yè):本色做人、角色做事
4.1工作態(tài)度
4.1.1如何對接不同角色的工作
4.1.2對事不對人
4.1.3工作責任心
4.1.4技術人的態(tài)度
4.2人際關系
4.2.1完成大于完美
4.2.2團隊的重要性
4.2.3溝通促進合作
4.3持續(xù)學習
4.3.1學習方法論
4.3.2費曼學習法
4.3.3尋找學習途徑
4.3.4獲取學習資源
4.4程序員的日常生活
4.4.1工位好物推薦
4.4.2空閑時間管理
第5章進階:程序員的可持續(xù)發(fā)展
5.1代碼規(guī)范
5.1.1優(yōu)秀的編程原則
5.1.2童子軍規(guī)則
5.1.3代碼風格指南
5.1.4代碼注釋規(guī)范
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章升職:程序員的職業(yè)發(fā)展
6.1程序員也要懂產品
6.1.1參與產品建設
6.1.2觀察用戶
6.1.3人人都是產品經理
6.2程序員素養(yǎng)提升
6.2.1優(yōu)先自我檢查
6.2.2開發(fā)并非人越多越好
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機會是主動創(chuàng)造出來的
8.1.2主動更新技術棧
8.2自驅是進步的原動力
8.2.1長期主義欲速則不達
8.2.2厚積而薄發(fā)注重積累
8.3成長即負熵本身
8.3.1接受多元化
8.3.2熵增理論
8.3.3成長型程序員
附錄
附錄AAIGC浪潮
A.1ChatGPT的背后
A.2人工智能的發(fā)展
A.3國內AIGC發(fā)展現狀
附錄B專業(yè)術語
B.1程序員常用專業(yè)術語
B.2互聯網術語
后記