程式猿,你該如何寫好程式?
為了能幫程式設計師如何正確高效書寫程式減少bug,小編也是經過一番地毯式的搜尋
總先付款得出以下經驗:
這既不是九陰真經,又不是葵花寶典,有的只是小對泥萌的一片苦心
閱讀本篇文章只要三分鐘喲!
(我們這裡有個學習C++的QQ群892643663,可入群交流學習,入群即送全套C/C++學習資料,滿滿的乾貨)
▼
首先,必須要正視“寫程式碼”這回事
寫程式碼絕不是簡單無聊的勞動,程式設計師首先必須瞭解計算機的執行原理,然後需要把現實問題建模,並在計算機的世界裡精確地還原出問題的解決方案。既然程式碼要交給功能強大的計算機去嚴格執行,程式設計師要擔負的責任就相當大,因為程式碼的任何一點差異,都有可能影響程式最終的執行結果——因為程式的細小缺陷導致航天任務失敗的例子已經有好幾次了。
反過來說,程式設計師能掌握的權力相當大,成為“合格程式設計師”的門檻也相當高,雖然這種門檻並不為許多人所知,所以,要想成為稱職的程式設計師,必須正視寫程式碼。
其次,必須讀過一些基本的書籍
學校裡通常會安排程式語言的課程,但不會教“怎樣把程式寫好”的課程。許多人對計算機的理解還停留在“科學與理論”的角度,只要程式能“對”,能輸出正確結果就可以;卻不知道如今與計算機相關的大量工作,其重心已經轉移到實踐和工程意識的方面了。這種錯誤的理解,導致很多程式設計師在工作之後相當長的時間裡,學習的內容還侷限於鑽研理論和演算法,一直忽略了“把程式寫好”的補習。
其實市面上已經有一些教人“把程式寫好”的書籍,認真讀完這些書,認真落實其中的規範,至少能保證把程式寫“合格”,不會有明顯的缺陷,為將來把程式寫好奠定堅實的基礎。從我和身邊朋友的經驗出發,我覺得《程式碼大全》、《重構》、《程式設計珠璣》、《程式設計師修煉之道》這幾本書都是很不錯的,如果能耐心讀完並認真思考,寫程式的水平會有相當的保證。
要保持好奇心,多借鑑其它專案的內部實現
我們時常開玩笑說,現在很多程式設計師的工作,就是從網上下載一些開源專案,然後改改引數。其實這並非玩笑,而是很多程式設計師工作的真實寫照。充其量,他們還要做一些穿針引線的工作,把這些專案粘合組裝起來。
這看起來確實是簡單機械的勞動,也不會給人多少提升。但事實並非如此。很多好的程式設計師就在這個過程中學會了把程式碼越寫越好。因為他們保持了好奇心,去探究這些開源專案的內部實現,把應用的過程當成了學習的途徑。在使用一個現成方案之前,先想想如果自己去解決要怎麼辦,再看看其他人的現成程式碼,確保自己懂得了這些程式碼蘊含的思維。
在要懂得在工程與理論之間求得平衡
在談到寫程式時,經常有人引用奧卡姆剃刀原則,說“如無必要,勿增實體”;也有人引用愛因斯坦的話,“要足夠簡單,但不應該過於簡單”。由此證明,好的程式應當是足夠簡單而且非常優雅的。
在大方向上,我認同這種說法。但在具體的問題上,它未必正確。因為程式設計是與工程密切相關的工作,與工程密切相關就意味著大量的權衡、取捨。無論奧卡姆剃刀原則還是愛因斯坦的話,原本的主題都是針對理論的,所以兩者並不能嚴格劃等號。
在實踐中我見到過很多過份迷戀簡單、美感的程式設計師,我稱之為“玩套路”——他們太在意程式的形式美感,為了刻意追求那種嚴謹整齊的感覺而忽略了現實,也不懂得針對現實做出取捨,最終把自己套了進去。結果,使用者明明需要的一畝菜地,他們交付的卻是一份盆景,還振振有辭地指責使用者不懂技術。這樣的人,往往既當不好程式設計師,也成不了軟體開發工程師。
坦然接受其他人對自己程式碼的批評
Code Review是提高程式碼質量的有效手段,這一點大家公認。但是在很多場合,Code Review很難推行起來,原因之一就是程式設計師內心難以接受其他人對自己程式碼的批評。
這種現象倒也情有可原,因為寫程式這回事,大家多少認為是有絕對標準,可以分出高下的。對大多數人來說,潛意識裡也確實很難區分“對我的工作的批評”和“對我的批評”。所以面對其他人對自己程式碼的批評,除非是來自上級,否則多少有些面子上掛不住,天然有爭辯的衝動。
我們需要明白,不經歷挑戰和批評,人是很難提高的。其他人的批評,只要不是惡意的,總是能提供不一樣的視角,幫助我們更深入或者更全面的認識問題,這是很好的成長機會。
另一方面,團隊領導也應當營造平等合理的協作氣氛,倡導“對事不對人”的價值觀。這樣,才能讓更多的成員坦然接受對自己程式碼的批評。
程式設計師需要有對榮譽感的追求
歸根到底,“榮譽感”是驅動個人不斷追求更高境界的源動力。對沒有榮譽感的程式設計師來說,“把程式寫好”充其量是不得已背上的負擔;而對於具有榮譽感的程式設計師來說,“把程式寫好”是需要不斷追求的目標。
程式設計師應當屬於德魯克說的“知識工作者”。對於知識工作者,我們就不能像對待機器和工人那樣去嚴格約束工作的過程,只能要求結果,或者說“找到合適的人,提供合適的環境,期待美好的事情發生”,這也是很多程式設計師享受的方式。但是,如果程式設計師不在乎自我驅動和追求,把寫程式當作不需要任何想象力和創造力簡單重複勞動,那麼“血汗工廠”的工作方式可能更能保證生產效率。
(我們這裡有個學習C++的QQ群892643663,可入群交流學習,入群即送全套C/C++學習資料,滿滿的乾貨)
如果看了有所幫助,轉發,點贊,分享給那些還在迷茫的人吧。