第二章 程式設計之道

蒼松發表於2015-03-20

哈哈,這章作者終於入正題了,話說作為程式設計師,買了本程式設計師的修煉,你不跟程式設計掛鉤,說出去都不好意思。期待已久的程式設計之道。

切忌一根筋

  標題略糊弄人,這根本不是在說”不撞南牆不回頭“的道理,我來解釋下老外這節講啥的:做程式設計師,而不僅僅是程式設計師。

  我大概知道了中國優秀開發者少的一小點兒原因。中國的開發者只是為了寫程式而寫程式,他們不會去了解所做的程式周邊,比如外包公司。會程式設計的人和不會程式設計的人中間隔著一條鴻溝。優秀的開發者和平庸的開發者之間也存在著一條鴻溝。剛開始看這本書我把自己定位到了優秀的程式設計師,現在看了這一章才可以界定到底我算不算一個優秀的程式設計師。作者的界定標準是:成為更加優秀的程式設計師的方法是拋開程式設計,培養自己對於變成周邊所有事情的熱情,你的興趣愛好越廣泛,就越能勝任你的工作。這個說法略廣泛啊,我實在是無法界定我自己了。因為我是遊戲公司做Web的,玩遊戲大家都喜歡,雖然沒有涉足過遊戲開發,但是對於遊戲的大概開發流程,遊戲的上線的幾個重要測試節點,上線運營流程,運維流程都有個大概的瞭解。另外本身我只算是做後端的程式設計師,經常去涉獵前端的技術,偶爾還回去看別人怎麼做設計的。。。我已經走火入魔了。優秀的程式設計師隨他去吧,let it go,let it go~

破窗理論

  破窗理論出自1982年的《大西洋月刊》上的一篇文章。這篇文章和中國的愛護環境法則頗有淵源,這個道理就是如果一個地方經常有人去打掃衛生,很乾淨,那這個地方久而久之,就不會有人去隨手丟垃圾;然而如果有第一個人扔了垃圾,就會有第二個人扔,然後後面的人扔垃圾扔的都理所當然了。

  這樣問題就顯而易見了,所以不要放任“破窗”(不良的設計,錯誤的決定或者糟糕的程式碼)而不管,一旦發現,要儘快修復。如果時間不夠,那就先把它隔離起來。對於程式設計師來講,這是一個非常好的建議。學習了~

要麼熱愛,要麼離開

  曾經有一些人,沒有程式設計師的那份心,卻夢想著程式設計師的那份工資。於是世上多了很多不喜歡寫程式碼卻痛苦的寫著程式碼的人。在過去的20年裡(作者的過去20年,小弟還沒有20年工作經驗),網際網路的歷程中出現了一次網際網路泡沫。現在做一個假設,當程式設計師的工資真的和其他行業一樣的時候,還有多少人堅持寫程式碼。估計轉行的會有一半多。所以,網際網路泡沫經濟淘汰了那些不是真正熱愛軟體開發的人。

  我深信未來還會有很多次的網際網路泡沫出現,高校的計算機生源還在一路增加,計算機人才越來越多,越來越不值錢,就會有一天,IT行業工資和其他行業均等。到那一天,還在堅持去寫程式碼的人才是真正熱愛的人,也保證了他們在社會行業的公平性。很期待未來的網際網路泡沫出現,網際網路泡沫是一種最好的方式,因為並不是每個人都應該成為程式設計師。

  傑出的程式設計師,對自己從事的事情有著終生的熱忱。如果你也是一名程式設計師,你是否也對你從事的事情充滿熱情呢?

簡答之美

這節講了三個原則:

  1.保持簡單:在向你的程式中加入更多的功能的同事,程式的複雜性也在呈指數級上升。所以僅僅是維護這些功能的相容性就是一件很頭疼的一件事。我所用的Ruby語言便是為了簡單而生,舉幾個簡單的例子玩:

說一千次我愛你:1000.times{|x| puts "I love you. "}
隨機產生一個1~100的亂序陣列:(1..100).to_a.sort{|x,y| rand(0..1)>0.5 ? -1 : 1}
我想知道今天的開始是什麼時候:Time.now.at_beginning_of_day
我想知道今天的結束是什麼時候:Time.now.at_end_of_day
我想知道去年的這個時間點我在幹嘛:Time.now.last_year
好吧,我想知道888天前是哪一天:Time.now-888.day

給我拿到字串的倒數第三到第五個字串是什麼:'abcdefghijklmn'[-5..-3]  程式設計師需要這種簡單,簡單可以讓有用的程式碼更清晰明瞭,不是嗎?

  2. 不要妄加推測:

  不要把那些你覺得可能會用到的程式碼加到你的程式中,也不要留下那些用於今後擴充套件的“鉤子”。也許很多程式設計師和我一樣都有這個毛病,總以為某些程式碼以後可能會有大用,結果無疾而終。大家共勉吧。

  3. 自己動手:

  親歷親為,寫程式碼也是如此,尤其是剛學習一門語言的時候,一看語法都懂,但是真正去寫程式的時候會發現每一門語言的寫法差異會讓你的“手感”差很多。剛學程式碼,凡事要親歷親為,不可以偷懶啊。

樂於刪程式碼

強迫症程式設計師都喜歡整潔,不喜歡沒用的程式碼,這是個好習慣,把不用的方法,註釋掉的程式碼,全都刪掉吧。沒什麼不好。

你是程式設計師這塊料嗎

 話說通過一個簡簡單單的測試就能知道一個人是不是當程式設計師的料,專業程式設計師可以無視,下面是一個賦值的操作:

int a=10;
int b=20;
a=b;

問a和b的值各是多少?

 幾個簡單的小程式到底反映了一個什麼樣的思維來讓人可以初步判斷一個人是不是適合當程式設計師呢?仔細想想,這些程式還真的反映了一些程式設計的道理:1. 賦值和序列;2.遞迴、迭代;3.併發。有了這三項思維能力,就能學會跟計算機打交道,順理成章地學習計算機難度很小。當初始終不理解這些原則的人,大部分都放棄了程式設計。

你循規蹈矩嗎

這裡舉例是一個油漆桶和粉刷匠的故事:我買了一桶油漆,我不需要專業的粉刷技術,只要完全按照說明書上去做,就能刷出大致不錯的牆來。但是呢,經常會看到粉刷員不按照說明去做。在程式設計之時也會碰到同樣的問題,軟體開發在很早以前就有了規範的開發方式,而遵循開發方式的人少之又少,這就導致了而今想要找高質量的專案很難,各種不符合規範的程式碼層出不窮。循規蹈矩尚且很難寫出高質量的程式碼,又何況肆無忌憚的亂寫呢?

科裡定律:堅守一個目標

這個作者說了好多核心原則,無非就是做標準化之中要用到的,避免重複的工作。重複的程式碼會增加系統的維護成本,也會造成系統的不穩定。學過軟體工程的都應該接觸過單一職責原則,其他的我也記不住了。但是平時開發已經會注意其中一些原則問題,會用也就罷了。

最牛的編碼套路

  不得不說作者寫的書略散,看著看著,已分不清這些章節有什麼聯絡了。講到編碼套路,這涉及到一個人的編碼經驗和閱歷問題,不得不說作者讀的書更廣,更多,而我們只能以現在的經驗去猜測作者想要表達什麼。當然也有部分觀點已然是贊同的。

  這一節講的就是程式設計經驗的問題,程式設計經驗已然被這個社會給利益化了,一個Java五年工作經驗和一個Java一年工作經驗的人從利益上來講就是不一樣的,但是從知識程度上來講,並非一定是一個有著更長工作經驗的人更懂得程式設計。在程式設計之路上,更重要的不是經驗本身,而是“努力的學習”,也就是要不斷的挑戰自身能力以外的東西。這就是中國,明知山有虎偏向虎山行的道理,知難而上,不僅僅是英雄主義,而是一層一層的在提高自己的等級。這個步驟說起來又像是網遊裡面的打怪升級了,其實比打怪升級更難,你根本不知道何時自己已經停滯不前了。不得不說,畢業前兩年我一直在想,先混兩年程式設計經驗,然後身價就高了,當我做了兩年程式設計,才發現,經驗並不是經驗本身,而是個人的身價提高沒有。多少還是會有提高的,但是碰到有可能失敗的事情,不想著去做好,這就是自己不願意提高了。所以,活著,學著,幸福著。

  那麼如何判斷自己是否提高緩慢或者停滯不前了呢,如何知道自己需要提高什麼呢?作者寫的幾點值得借鑑,我只列出來部分可能適用的:

  1. 羅列出你所敬仰的程式設計師。跨越國家,跨越信仰,跨越種族和職業,幾乎每個人都有自己敬仰的幾個人,甚至更多(就連恐怖分子都有敬仰的人,O(∩_∩)O)。我們也是不斷地盯著自己敬仰的人的閃光點去向他們學習,把所有人的長處都集聚到自己身上,這是件很酷的事情。

  2. 在計算機領域先驅者中挑一人,閱讀他平生的事蹟。在當今網路時代,想要搜尋一個人是很容易的,閒的時候就去看這些先驅者,他們如何在計算機領域之中獲得成功,這是計算機行業的心靈雞湯。

  3. 花20分鐘通讀別人的程式碼,讀出色的程式碼和讀糟糕的程式碼都是有益的,兩者都要讀,輪流切換。論語有講“三人行,必有我師焉“,作為國人,我們要去想孔子為什麼要這麼說,如果三個人一塊走,我自己水平比其他人高一大截,還會有”我師“嗎?剛看到這句話的時候還小,當時確實在想,跟菜鳥在一起能學到什麼,親身體驗和菜鳥在一起共事才會明白,對待同一個知識,每個人的理解不同,每個人所擴充套件的知識也不同,很多時候都可以通過這些”菜鳥“而學會一些意外的技巧。

  4. 羅列你喜歡的程式設計工具--那些你覺得用的最多,缺了他們不行的工具。隨機挑選一個,花一個小時去閱讀它的文件。先舉個例子,我曾經在一個做Office的公司上班,有一次,我需要一個Excel函式,百度了許久都沒有找到怎麼寫,我以為這些組合函式對於誰來講都不容易想出來怎麼寫吧。問了幾個不是做Excel核心元件的同事也都不會寫,然後我就去問了一個做Excel的同事,他想了一會兒,低調的敲出來了怎麼處理的函式,當時在想,好牛的大神啊。後來我接觸的軟體也越來越多,對於軟體的使用和某些破解規則也基本不用看說明書才明白,其實每個軟體做出來,它的功能都很少有累贅的,如果你真的依賴它,你就去深入瞭解它,當你非常瞭解它的時候,效率可以翻N倍。

  5. 找到一個能和你交流實際問題的人,定期交流程式設計中遇到的問題,花點兒時間去嘗試解決這些問題。然後再討論。這個其實挺有用的,在程式設計的時候,經常會碰到一些問題,但是沒人交流,就儘量去迴避了這些問題,如果一個人的技術好了還可以,如果技術不好,那勢必問題會越積累越多。這種討論出來的問題,一般都會在腦海中留下深刻的印象,解決方法也是過了很久都不會忘記,所以這樣累積的知識是一比很大的財富。

  6. 寫部落格。我比較堅信的一點是,程式設計師寫部落格,無論他的語言多麼幽默,他都會去深究一個知識點保證它是最準確的才會發出來,這無形中是對自己知識的整理和彙總。

  7.積極參加著名的開源專案。Github這個平臺能夠火起來並且一直會火下去,是因為它打造了一個全民編碼的環境,這是一個很大的知識共享平臺。知識因為分享才更有價值,每個人的知識面才會更廣。

  先說這麼多,想要學習更多,看原版書吧。

相關文章