1. 程式人生 > >程式碼大全2 --- 33章 個人性格

程式碼大全2 --- 33章 個人性格

每個行業的工程人員都瞭解其工作用的工具及材料的各種限制.

假如你是軟體工程師,基本的建造材料就是你的聰明才智,主要工具就是你自己.

建築工程師對建築物結構進行詳細的設計,然後將設計藍圖交給其他人施工;
而你一旦從細節上對軟體做好設計後,軟體就生成出來了.程式設計的整個過程如同建造空中樓閣一樣—這是人們能做的純粹腦力勞動之一.

33.1 個人性格是否和本書話題無關

程式設計過程非常耗用腦力,這種特性使得個人性格顯得很重要.

程式設計工作本質上是項無法監督的工作,因為沒人真正清楚你正在做什麼.
我們都經常有這樣的經歷—耗用80%的時間著力於專案的個別地方,而花費20%的時間來完成其餘80%的工作.

老闆無法強迫你成為好的程式設計師,很多時候他甚至無法判斷你是否合格.
如果你想要有所成就,只能全憑自己,這涉及到你的個人性格.
一旦決心成為出色的程式設計師,你的發展潛力是很大的.


  • 不同程式設計師建立某個程式所需的時間差異可達10:1
  • 不同程式設計師除錯程式所需的時間,程式實現規模,速度,錯誤率和檢查出的錯誤數目也能達到10:1

做實訓 的時候,深有體會
你無法提升自己的聰明程度,但性格在一定程度上能夠改進.

事實證明,個人性格對於造就出程式設計師高手具有決定性意義.

33.2 聰明和謙虛

2.1 a good coder需要很高的智商嗎?

高智商與優秀程式設計師之間並無密切的聯絡.
不需要很高的智商.沒人能夠同計算機那樣迅速敏捷.

要充分理解一個普通的程式,你得有很強的吸取細節的能力並同時消化它們.如何專注你的聰明才智,比你有多聰明更重要.

大部分程式設計工作都旨在彌補我們有限的智力.—Edsger Dijkstra

精通程式設計的人是那些瞭解自己頭腦有多大侷限性的人,都很謙虛.

而那些程式設計糟糕的人,總是拒絕接受自己腦瓜不能勝任工作的事實,自負使得他們無法成為優秀的程式設計師.

承認自己智力有限並通過學習來彌補,你會成為更好的程式設計師.

你越是謙虛,進步就越快.

2.2 好的程式設計做法

目的:減輕大腦灰質細胞(腦力)的負擔


  • 將系統”分解”,是為了使之易於理解

學習東西也同理,知道結構然後在需要的時候按圖索驥地去快速定位並且學習.

  • 進行審查,評審和測試正是為了減少人為失誤.

  • 將子程式編寫得短小,以減輕大腦負荷
  • 基於問題而不是底層實現細節來程式設計,從而減少工作量
  • 通過各種各樣的規範,將思路從相對繁瑣的程式設計事務中解放出來

    思考正規化 程式設計正規化可以很好很快地展開思路

  • 33.3 求知慾 Curiosity

    對技術事物的求知慾具有壓倒一切的重要性

    培養求知慾和把學習當做第一要務的方法

    • 在開發過程中建立自我意識
      你越瞭解軟體開發過程,無論通過閱讀還是通過自己對軟體開發的觀察,你就越能理解變化,使團隊朝著正確的方向發展.
      如果在工作中學不到什麼,就找一份新工作吧.

    • 試驗
      對程式設計和開發過程做試驗,是學習程式設計的有效途徑之一.
      如果不瞭解所用語言的某一特性是怎麼回事,可編寫一個小程式來檢驗.看看它是如何工作的.
      在偵錯程式中觀察程式的執行情況.

      pycharm除錯模式看程式碼效率極高…

      最好通過小程式找出答案,而不要用大程式.
      有效程式設計的關鍵之一就是要學會迅速製造錯誤,並且每次都能從中有所收穫.

    • 閱讀解決問題的有關方法
      解決問題是軟體創作過程中的核心行為.

    • 在行動之前做分析和計劃

    • 學習成功專案的開發經驗
      學習程式設計的一個特別好的途徑是研究高手的程式.

      你應該坐下來,準備一杯白蘭地,點一根上好的雪茄,像看優秀小說那樣來閱讀程式— Jon Bentley

      凡是成熟的學科都是從解決問題發展起來的— Thomas Kuhn

      的一篇文章主張人們對別人的程式設計問題案例進行研究.
      不管有沒有關於程式設計案例研究的書,你都應找些高手編寫的程式碼讀讀.

      不僅要閱讀別人的程式碼,還應渴望瞭解專家對你的程式碼的看法,找一些一流的程式設計師評論你的程式碼,濾除其言語中的主觀成分,注重解決切中要害的問題,從而改善程式設計質量.

    • 閱讀文件
      現代語言產品一般都帶有大量函式庫,很有必要投入時間去瀏覽其說明.

      通常提供產品的公司都生成了許多你用得著的類

    • 閱讀其他書本期刊

    • 同專業人士交往

    • 向專業開發看齊
      技術帶頭人會為人寫程式碼,而非為機器.

      真正高手所寫的程式碼,像水晶一樣晶瑩剔透,還配有文件.他們可不會浪費其寶貴的腦力,去重新組織用一句註釋就能說清楚的某塊程式碼邏輯.

    33.4 誠實

    程式設計生涯成熟的部分標誌就是表現出誠實感

    • 不是高手時不假裝高手
    • 樂於承認錯誤
      經常考量自己對某些問題的確定程度.

    • 力圖理解編譯器的警告,而非棄之不理

    • 透徹理解自己的程式,而不要只是編譯看看能否執行

      • 對編譯器給出的資訊不懂裝懂是另一個常見的盲點:你犯的錯誤很難騙他人,更難愚弄計算機,所以不要浪費時間做這樣的事。
      • “先編譯看看程式會幹什麼”的想法是個危險訊號。測試只能照出錯誤,不能確保“不存在錯誤”。要是不瞭解程式,就不能徹底測試
        確保在將程式丟給編譯器之前,你已對其有了較大的把握。
    • 提供實際的狀況報告

      • 與不準確的狀態報告相關的問題是不準確的估計。
      • 如果問題在於你對自己的進度缺乏感覺,那麼可以通過對工作的瞭解來解決。
      • 管理者需要準確的資訊,以便協調開發活動,充分地配合是必要的。
    • 提供現實的進度方案,在上司面前堅持自己的意見

      • 技術人員大都能很好地估計專案需求和進度。但問題是他們不會堅持自己的決定,需要學習如何堅守其立場”— Bill Weimer

      • 如果你對某專案感興趣,或者將為公司帶來突破,或者能提供有價值的鍛鍊,就應該將這些想法說出來,管理者會權衡這些因素。

    33.5 交流與合作

    真正優秀的程式設計師知道怎樣同別人融洽地工作和娛樂。

    作為一項可讀性原則,程式設計首先是與人交流,其次才是與計算機交流。

    33.6 創造力和紀律

    • 不要將創造力花到無關緊要的事物上,在非關鍵之處建立規範,從而在重要地方發揮你的創造性。
    • 強調紀律的方法和工具非常有效果,許多有很強創造力的人都極其遵守紀律。
    • Form is liberating (形式就是解放)

    • 精緻的程式作品也要求許多約束

    33.7 懶惰

    3種懶惰表現方式

    • 1.拖延不喜歡的任務
    • 2.迅速做完不喜歡的任務,以擺脫之
    • 3.編寫某個工具來完成不喜歡的任務,以便再也不用做這樣的事情了。

    在你不通過有色玻璃看問題時,你就看到了懶惰的另一面。
    “硬幹”或者“苦幹”並沒有帶著光環。“硬幹”是那種徒勞的、大可不必的努力,只會說明你急切但並不是在完成工作。
    人們容易混淆行動與進展,混淆忙碌與多產。

    有效程式設計中最重要的工作是思考,而人思考時通常不會看上去很忙

    如果和我共事的程式設計師總是忙個不停,我會認為他並非優秀的程式設計師,因為他沒用最有價值的工具—自己的腦袋。

    33.8 不如你想象中那樣起作用的性格因素

    8.1 堅持Persistence

    多數時候軟體開發中的堅持其實就是沒有好處的“固執”。
    當在某段新程式碼上卡殼時,不妨另闢蹊徑,嘗試重新設計類,或者繞過去,以後回頭再試。當一種方法行不通時,正好可以換個方法試試。

    通常最好只要有一段時間沒有進展,比如說15分鐘,就該放棄排錯過程,讓潛意識仔細品品。

    8.2 經驗Experience

    如果你不與時俱進,經驗不但不會有所幫助,反而是個累贅。

    在軟體行業中,如果不改掉使用先前程式語言時的思維模式,或者不放棄在舊機器上能用的程式碼效能優化技術,你的經驗還不如沒有好。

    如果你工作10年,你會得到10年經驗還是1年經驗的10次重複?
    必須檢討自己的行為,才能獲得真正的經驗。只要堅持不懈地學習,才能獲取經驗;如果不是這樣做,就無法獲得經驗,無論你工作多少年。

    8.3 程式設計狂人Gonzo Programming

    可以熱愛程式設計,但熱情不能代替熟練的能力,請想明白什麼更重要.

    33.9 習慣

    我們的精神品德既非與生俱來,也非逆於天性.其發展歸因於習慣.我們要學的任何東西都通過實際做的過程學到.
    如果人們建的房子好, 他們就成為好的建設者.而造的房子不好時,他們就是差的建設者.所以小時候形成了怎樣的習慣關係很大.正是它會造成天壤之別,或者說就是世上所有差異之源.—–亞里士多德

    • 好習慣很重要,因為程式設計師做的大部分事情都是無意識完成的.

    任何日後出色的程式設計師前幾年就做得很好—比爾蓋茨

    • 初涉某事時,就應端正態度來學.
    • 試著用新的和習慣去代替舊的壞習慣.

    33.10 要點

    • 人的個性對其程式設計能力有直接影響
    • 最有關係的性格為:謙虛,求知慾,誠實,創造性和紀律以及高明的偷懶
    • 程式設計師高手的性格與天分無關,而任何事都與個人發展相關
    • 如果你能抽出少量時間閱讀和學習程式設計知識,要不了多久就能鶴立雞群
    • 好性格與培養正確的習慣關係甚大.要成為傑出的程式設計師,先要養成良好習慣,其他自然水到渠成.