《程序員的自我修養》-讀書筆記

前言

最近在看《程序員的自我修養》,做者陳逸鶴,這是一本值得深讀的書。前半冊較詳細的介紹了一個程序員成長所須要經歷和學習的內容,從工做、溝通、生活協調等方面給出了不一樣建議,其中也介紹了一些有用的網站和工具,程序員

然後半冊則是關於做者自學設計的經歷以及如何教導孩子學習編程,對於我這樣的年輕程序員可能暫時沒多大興趣,最後只能匆匆看完,或許之後會有機會再來翻閱一下。面試

然而即使是前半冊,給個人感觸也是很大的,同時也該慶幸在我步入社會前能讀到一本這麼好的書,在此對做者表示由衷的感謝。編程

若是你是一個職場新人、或像我同樣準備步入社會工做的話,那麼我推薦你去讀一下這本書,這會給你帶來很大的幫助。設計模式

下面我將總結一下書中對我影響較大的部份內容以及我我的的感想。架構

大綱

  • 第一章 談職業生涯
    • 1、寫給年輕程序員的啓示
    • 2、那些程序員後知後覺的職涯經驗
    • 3、若是招到一個靠譜的程序員
    • 4、每一個程序員都應該瞭解的一件事
    • 5、程序員的煩惱
    • 6、提給年輕程序員的職涯建議
  • 第二章 談實踐與認知
    • 1、突破程序員思惟
    • 10、我彷佛理解了編程的意義
  • 第三章 談我的發展
    • 1、那些優秀程序員身上的共同特質
    • 6、創建本身的我的品牌

正文

第一章 談職業生涯

1、寫給年輕程序員的啓示

  1. 正確認識本身框架

    在網上形容程序員的詞彙有不少,其中大部分都略帶貶義,然而無論別人如何稱呼你,最重要的是你心裏如何形容本身,若是連本身都將本身當成一個碼農,那你可能就真的是一個碼農。這裏做者說到他更喜歡用技匠來形容本身,由於程序員應該是那些不斷追求更高技術,並有着本身的產品夢想的工匠。一個程序員,應該有本身的目標,本身的期待,並經過不斷地努力去實現那些夢想。編程語言

  2. 比通常人努力工具

    這裏做者講述了一個故事:一個普通人天天都很努力,而另外一個天才卻成天遊手好閒,過了一段時間,天才終於醒悟並開始努力,不久便超越了普通人,普通人很羨慕他,但他回過頭才發現,他也已經成爲了大部分人眼中的佼佼者。學習

    程序員每每會被稱爲天才,那只是由於在你看不到的時候人家花了更多時間工做或者學習而已,當你也堅持這麼作時,你也會變得和他們同樣優秀。開發工具

  3. 適時創建我的權威

    當你開始抱怨本身的職業生涯毫無轉機時,不妨想一想你是否已經習慣了聽命於人,而缺乏本身的觀點和主觀,長此以往便成爲了別人眼中的平庸之人。你應該在適當的時機表現本身,讓別人看到你的不一樣之處。

  4. 遵循最佳實踐

    不管新興技術如何發展,技術的本質是不變的,你應該去理解那些軟件領域最本質的東西,好比最佳實踐,那些最佳實踐是無數優秀程序員經過大量實踐總結出來的,經過理解它們,可以讓你站在前人的肩膀之上,從而對軟件開發自己有更深刻的理解和認識。

  5. 保持好奇心並樂於探索新的事物

    優秀的程序員每每不會知足於對手頭工做的認識和理解,他們會去理解更深刻的東西,也樂於探索那些看似於工做無關的技術,經過對其餘事物的學習,也能對你目前的工做有所幫助。

  6. 拋開代碼與人溝通

    不要忽視與人的溝通,當你的能力不斷提高,被賦予更多職責時,你更須要與人溝通來管理好本身的團隊,因此嘗試離開你的電腦桌去與人溝通,這會給你的工做和生活帶來積極的變化。

  7. 要爲優秀的人工做

    當你發現你所處的環境和周圍的人已經沒法讓你得到提高時,那麼你應該去選擇一個更好的環境,儘量與那些優秀的人一塊兒工做。

  8. 生活、睡眠、旅行

    咱們時常聽到關於程序員因疲勞過分而猝死的新聞,這從側面說明程序員不懂得生活。每一個程序員都應該明白,工做、技術、寫代碼這些並非你存在的意義,而生活纔是,你須要懂得生活,而且學會生活。

    生活:你須要合理規劃本身的時間分配(學習、閱讀、寫代碼)並鍥而不捨地去作。

    睡眠:不要熬夜,充足的睡眠會使你更有效率地投入到新一天的工做,你也會變得更優創造力。

    旅行:旅行不是爲了輕鬆,每每旅行比工做還累,但你仍是應該出去走走,去感覺新的東西,而這些是沒法從電腦屏幕前得到的。

    人生不該該只有工做,還應該去感覺更多更美好的東西,有一個愛好,有一項堅持的事情。

  9. 相信本身的天賦和創造力

    每一個人都有屬於本身的天賦和創造力,但它們毫不是與生俱來,你須要在生活中不斷地培養和發掘它們,好比閱讀優秀的書籍、記錄和收集、嘗試動手。

2、那些程序員後知後覺的職涯經驗

  1. 你的薪酬與工做量無關

    你的薪酬其實取決於不少因素,技術能力、經驗資歷、工做量等,但最本質的倒是,你對公司是否重要,簡單說就是你是否具備不可替代性。因此努力讓本身變得愈來愈重要,相信你的薪資也會隨之提高的。

  2. 儘量持續作一件事

    老是跟隨新興技術或框架,那你很難在某一項技術上達到理想的深度,一樣,在一個公司裏,若是你老是更換項目,那你也很難提高本身的價值,也不會具備不可替代性。因此你應該追求技術深度和具備完整項目經驗。

  3. 惟一不變的就是變化自己

    總所周知,咱們使用的技術更新迭代很快。那麼咱們該如何去應對這些變化呢?你須要培養本身持續學習的能力,當你學的越多,每每就能學的越快,由於知識之間老是存在關聯性的。

  4. 你的聲譽很重要

    優秀的程序員除了一些常見的良好特徵以外,最重要的一點就是嚴謹。嚴謹的程序員會很是認真地對待分配本身的任務,這能大大減小工做中的出錯率,從而給團隊或公司中的其餘人留下良好的印象。

  5. 理解溝通的意義

    接到任務時不要着急幹活,而應該去儘量多地與客戶溝通,去理解他們真正但願解決的問題,若是咱們是這方面的專家,應該有負責去引導他們接受咱們更專業的方案或設計

  6. 你的右腦將是你成功的關鍵

    一個成功的技術人員,除了寫代碼外,每每還會伴隨着其餘方面的能力,如編寫文檔、演講、說服他人等等,這將成爲你與其餘水平至關的競爭對手脫穎而出的關鍵。

  7. 不要輕易說簡單或不可能

    不要輕易作出過於絕對的判斷,應儘量去使用科學方法進行有效的表達,這樣你提出的觀點才能讓你們感到信服。

  8. 你不該該老是單打獨鬥

    不要老是單打獨鬥,要學會在團隊中協做,並儘量讓優秀的人圍繞在你身邊,這將擴展你的能力範圍,讓你變得更增強大。

  9. 你的能力顯而易見

    程序員的能力來自大量的編碼實踐,以及持續學習的能力和勤于思考的習慣。任何自做聰明,不懂裝懂,以及投機取巧在明眼人看來都只會是東施效顰,顯得如此微不足道。

3、如何招到一個靠譜的程序員

  1. 簡歷看人

    閱讀簡歷永遠是面試的第一步,你的簡歷中不該該包含錯別字、文字不通或沒有邏輯性,由於若是一個程序員連本身的簡歷都不肯意去仔細檢查並完善的話,很難想象他寫出來的代碼質量會如何。而後你須要用簡練的文字去描述本身,優秀的程序員每每善於概括,並可以一針見血地發現問題或把一個問題說清楚。

  2. 給面試者10分鐘介紹本身最擅長的

    這樣作的好處在於,能夠很快地發現面試者的亮點,他可否有效地進行溝通,是否適合這個團隊。

  3. 基礎打牢了嗎

    有經驗的面試官每每可以經過幾個最簡單的技術問題,判斷出面試者的技術基礎是否牢固,這不是爲了證實他有多優秀,而是是用來判斷他是不是一個合格的程序員。

  4. 技術的深度夠了嗎

    具有牢固的技術技術,通常能夠知足項目中普通程序員的要求了,但若是你須要找的是一個資深的程序員,那麼你還須要對面試者的技術深度進行考察。

  5. 選擇適合所在企業文化的人

    一個常見的誤區是,老是但願能爲團隊招到技術能力最強的人,而忽略了他是否與整個公司和團隊的文化相匹配。這每每會形成不久後由於理念不一樣而不歡而散的結果。所以,在招聘程序員時,選擇合適的每每比選擇最優秀的更重要。

  6. 行爲面試法

    一個程序員是否可以很好地工做,不只取決於他可否順利完成開發任務,更重要的是在遇到一些特殊場景或問題時,他可否合理有效地處理和解決。由於程序員除了技術能力外,最應該具有的就是較強的獨立解決問題的能力。

  7. 給他們一個虛擬任務

    給面試者一個虛擬的任務,你可以看到不少細節,好比,面試者是否有良好的編碼習慣,異常處理是否規範,代碼邏輯是否縝密高效,以及他的開發效率是否足夠高。

4、每一個程序員都應該瞭解的一件事

  1. 讀與技術無關的書

    例如讀一些,歷史、經濟、人文、藝術類的書籍,它們都可以幫助你豐富本身的知識和思想,使你變得更加全面和完善。

  2. 會寫文檔

    當代碼實現了它的功能以後,就不多有人會再去看它。但文檔被閱讀的機率就會大不少,優秀的文檔可以讓人們對你產生信任和好感,相反,質量差的文檔則會使你的聲譽受損。

  3. 學會包裝

    包裝並非一件壞事,經過包裝本身能夠很是有效的自我營銷,包裝以前咱們須要知道什麼是優秀的,而後精心製做。

  4. 嘗試多講

    程序員的性格特色大可能是內斂含蓄的,在一些正式的場合他們會顯得對本身缺少信心,這須要經過平時多鍛鍊來克服,好比能夠在一些不那麼重要的會議上去有意識地鍛鍊講話,另外你還須要注意你講的意思必定與你心裏所想表達的是一致的。

  5. 創建社會化聯繫

    一個徹底封閉的程序員必定不是一個優秀的程序員。優秀的程序員每每願意並善於與他人交流,分享本身的經驗和想法,並在交流中得到有益的東西。

5、程序員的煩惱

  1. 是否還應該留在一線城市

    對於這個問題,我是沒法給出正確答案的。買房自己並不會給你帶來持久的快樂,由於當你買完房後,你會欠一大筆債,須要用幾十年才能還清;當你終於把欠款還清時,你又會以爲這套房子過小,已經不夠一家人住,須要換一套更大的房子。你不會獲得快樂,由於這些客觀條件(錢財、房子)老是沒法與你的主觀指望相符。相反地,若是買房可以給你的家庭帶來更穩定的生活,爲孩子提供更好的成長環境,而這一切都能爲你的生活賦予意義,並讓你感到更加快樂的話,那你仍是應該更堅決地留下,而非選擇離開。

  2. 小公司作的事情太繁雜

    在小型公司工做常常須要處理各類各樣與開發無關的事情,這讓他們沒法專心專研技術。然而你卻能夠從中得到溝通能力、管理能力、創建更廣的人脈、創建影響力,何況小事瑣事更能體現你的能力,想站得越高,越須要具有解決各類繁雜問題的能力。

  3. 創業公司中的危機感

    若是你所在的創業公司長時間沒有轉機的時候,你可能會想着換一份工做,但參與創業的過程對你來講仍會是一份寶貴的經歷,是你應該加倍珍惜的,不管成功與否,經歷一次完整的創業都會讓你受益不淺,你將學到不少在大公司僅僅作一顆螺絲釘所學不到的東西。

  4. 技術單一,想學習更多

    程序員很應該去涉獵不通的技術甚至領域,但前提是你必須首先在某一門技術中扎得很深,技術是須要深耕的,深刻學習一門主流的開發技術,並不斷提高編程思惟,比對不少技術棧都淺嘗輒止要好不少,甚至當你學好一門技術後再去學習其餘技術後你會發現會變得容易許多,由於它們之間每每都是相通的。

  5. 我想自學編程,應該學習哪一門語言

    每一種編程語言都有它特定的目標和應用場景,你應該要有一個方向並選擇適合的編程語言,但若是你真的沒有任何思路,只是但願你學的這門編程語言可以有用,那麼我推薦你學習JavaScript,由於它看起來是惟一可能在將來全部領域內獲得應用的編程語言,從咱們的移動設備,到傳統的Web應用,再到服務端開發甚至硬件編程,它幾乎無處不在。

  6. 大專學歷,能進大公司嗎?

    目前全部大公司都以全日制本科學歷做爲最低要求,因此學歷上的缺失缺失會成爲你進入大公司的障礙。但也有一些例外狀況:

    • 經過內部員工的推薦。
    • 經過外包公司進入後,再轉爲內部員工。
    • 努力成爲某一領域的專家,或者創建我的影響力。
  7. 非計算機專業學生,將來想從事軟件開發

    事實上,非計算機相關專業的學生很難與科班出生的應屆生競爭,你應該慎重考慮本身是否真的有興趣從事這一行業,而不是隻是單純爲了高薪,由於沒有足夠的興趣你將很難學好編程,而若是你已認清本身的方向,那麼你應該努力學好一門編程語言,而後儘量地作出一些實際的項目。

  8. 老是熬夜,睡眠不足

    不要熬夜,經過犧牲睡眠來得到一兩個小時的時間,到頭來只會是惡性循環,得不償失。合理安排時間,提高效率,保證有充足的睡眠,這將更有效率地投入到次日的工做中。

6、提給年輕程序員的職涯建議

  1. 儘早肯定你想作的事情

    那些成功的人,每每是有着堅決目標,並持續努力的人。

  2. 10000小時定律

    不管你在哪一個領域,只要能堅持爲同一目標持續不斷地努力,花費超過10000小時進行練習和鑽研,那麼你也必定可以成爲該領域的傑出人才,併成爲他人眼中的異類。

  3. 提升工做效率

    對於提升工做效率,有兩個建議:嘗試不斷加快本身的工做節奏,善於尋找或創造能夠提升你工做效率(也能夠是減小重複工做)的工具。

  4. 簡明的溝通方式

    嘗試使用更簡明的溝通方式,這不只能使本身的工做更清晰,也能顯著提升你與他人的溝通效率。

  5. PKSS與持續學習

    PKSS也就是說在業餘的時間進行比拼,若是你把天天的碎片時間拿來進行學習,持續一段時間,你將比大多數人優秀。

  6. 學會情緒控制

    若是提升本身的情緒控制能力,一個簡單的方法就是對事不對人。當你對某一件事很是氣憤時,首先,你須要問問本身發火有沒有用,若是答案是否認的,那麼爲何不靜下心來想一想怎樣去解決問題呢?其次,你須要換位思考,你會發現不少時候對方不是故意爲難你,而是也有他的考量和存在的現實問題。

  7. 讓最優秀的人圍繞在你身邊

    世界上大多優秀的做品,都是由不少很是優秀的人共同創造的,因此你須要和優秀的人結伴,他們可以指出你的錯誤,幫助你朝着正確的方向前進。

  8. 善於概括和表達

    不少狀況須要你去彙報或發表,這時概括與表達能力將顯得很是重要,若是你不善言辭,你能夠創造機會來進行訓練,好比天天模擬進行一次講演,通過一段時間,你會驚訝於本身所取得的突破。

  9. 掌握英語

    英語能力對於程序員來講很是重要,因此你很是應該學習英語(這也是本人的痛點)。

第二章 談實踐與認知

1、突破程序員思惟

  1. 什麼是程序員思惟

    程序員思惟是一種常人的思惟+編程思惟,在長期相互做用下產生的一種思惟模式。它可以幫助程序員快速找到以程序方式解決現實問題的最優解。

    對於有助於提高程序員思惟的幾點建議:

    • 長期不間斷地編程實踐。
    • 持續學習與借鑑(參考)。
    • 學會反思,並像專家同樣思考。
  2. 爲何要突破程序員思惟

    既然程序員思惟對咱們如此重要,那麼咱們爲何要突破它呢?有如下一些緣由:

    • 新一代程序員不只須要具有很強的編程能力,還需具有從設計、運營、測試等各類不一樣角度去進行分析和判斷的能力。
    • 當你從程序員轉變爲高級程序員、架構師等更高的職位時,須要你突破程序員思惟,從更加人性化的角度去識別和解決問題。
    • 突破程序員思惟對你的生活也有幫助,多數程序員隨着編程時間的增長,他們會變得不善與人溝通、甚至排斥與人交流,這使他們沒法扮演好本身在生活中的角色。

    程序員思惟是一把雙刃劍,它既能幫助程序員寫出優秀的代碼,也能會阻礙程序員們的發展,成爲進階路上過不去的一道坎。

  3. 如何突破程序員思惟

    突破程序員的幾種方法:

    • 透過技術發現問題的本質:

      思考問題出現的緣由,採用真正能解決問題的手段,而不是一味使用技術解決。

    • 像專家同樣給出意見:

      溝通需求時,去理解用戶所提出需求背後的真正緣由,並像專家同樣給出最優方案。

    • 雜學並從中得到不一樣的視角:

      要作到以上兩點其實並不簡單,這不只須要你具有極強的技術功底,更須要你對問題所涉及的相關領域有足夠的認識。你必須經過大量地學習編程以外的各類知識來完善本身的知識體系,並從中得到不一樣的視角。

    • 找回創造力:

      不能否認的是,目前的開發工做須要咱們的創造力的狀況並很少了,但咱們仍須要創造力。關於若是找回創造力,有不少方法,關鍵在於你是否願意堅持那樣去作,好比:天天閱讀、記錄下那些轉瞬即逝的想法。

10、我彷佛理解了編程的意義

  1. 編程是一項技能

    在初學時,咱們熱愛編程技術,咱們須要不斷編程去提高技術,此時,編程的意義在於技術自己。

  2. 編程是去解決問題

    在工做時,須要利用編程去解決一些問題,此時,編程的意義就再也不侷限於技術自己,而成了解決問題的理想工具。

  3. 編程是在表達,也是在創做

    在進階時,彷彿感覺不到那些技術上的牽絆,開始自如地運用編程來實現那些你認爲優秀的東西,此時,你是在經過編程進行着自我表達與創做。

  4. 編程是爲了留下痕跡

    在退休時,可能你之前寫的優秀代碼如今還運行在世界上的某個系統,支撐着一些人平常生活使用的工具。這些優秀代碼是你留下的痕跡。

第三章 談我的發展

1、那些優秀程序員身上的共同特質

  1. 至少深刻理解一門編程語言

    優秀的程序員不只熟練的掌握一門編程語言的語法和語義,他們還會:

    • 掌握這門語言的使用哲學:包括最佳實踐、設計模式以及它們背後所蘊含的原則。
    • 深刻理解語言的特性:充分了解這些特性,可以幫助程序員更準確、高效地使用它們。
    • 瞭解語言的侷限:瞭解這些侷限,並知道如何使用一些方法或技巧去繞過這些限制並解決問題。
    • 理解語言的缺陷:瞭解這些缺陷,並儘量在編程中避免涉及這些缺陷,會讓你的程序在往後更易於維護。
    • 瞭解語言的將來:瞭解語言的發展將來,才能讓你更有信心地去應對將來。
  2. 看上去有點傻

    這由於程序員有點「傻」——知道本身不夠強大,反而能使他們變得更增強大,他們通常:

    • 不會中止學習的腳步
    • 使得他們在工做中變得更加嚴謹
    • 幫助他們得到更好的想法
  3. 他們都是現實主義者

    那些成熟的程序員更加現實,他們關注於如何高效地解決問題,並在此基礎上給用戶帶來好的感覺。

    • 懂得平衡:他們理解時間、人力資源有限,因此他們會選擇最簡明有效的方法去實現需求或解決問題。
    • 完成便是價值:與其進行飄無虛渺的設想,倒不如嘗試用較小的代價先實現出某一個功能或產品,而後經過實際使用去證實它,繼而在反覆的迭代中不斷完善。
    • 尊重流程:他們尊重這些流程,但在某些時候他們也會對流程中阻礙本身效率的部分作適當的裁剪。
    • 都很現實:這使得他們在不一樣的環境、團隊、項目中都能快速得到成功。
  4. 從本身的失敗中學習

    若是你但願變得更加優秀,那你必須具有直面失敗的勇氣,並學會從每一次失敗中得到進步。

  5. 很懶卻很高效

    優秀的程序員很是珍視本身的時間,他們會利用一切手段提升效率,主要體如今:

    • 熟練操做鍵盤
    • 熟練使用各類開發工具
    • 善於使用或發明工具
  6. 善於發現並改造輪子

    • 善於搜索
    • 善於提問
  7. 並行工做,有效利用時間

    優秀的程序員能將全部的可支配的時間碎片化,利用這些時間片斷,他們閱讀、學習、開發、作我的項目。他們並不比任何人有更多的時間,他們只是更會利用時間。

  8. 具有不錯的軟技能

    優秀的程序員每每具有:

    • 必定的語言表達能力
    • 學會聆聽
    • 有足夠的信心成爲一個領導者
    • 指導他人的能力
    • 持續學習的能力
    • 謙遜的態度
    • 尊重每個人
    • 勇於承擔責任

6、創建本身的我的品

  1. 如何創建我的品牌
    • 起一個好名字:提升你的標示性。
    • 打造一個我的網站:能方便的找到你。
    • 寫技術博客:能讓更多人認識你。
    • 開源本身的業餘項目:得到追隨者。
    • 參與知名的開源項目:在將關領域成爲專家,提高我的品牌。
    • 參與更多線下活動:能夠認識更多技術大牛、行業專家。

後記

讀一本好書,能讓你激起不少共鳴。讀一個知識閱歷比你豐富的人寫的書,能讓你少走不少彎路。

注:此文爲原創文章,如需轉載,請註明出處。

相關文章
相關標籤/搜索