為什麼開源可以提高程式設計師的程式設計技能?
| 2016-06-04 10:03
我已經寫了很多年的軟體。最近我意識到,我越涉及(致力於,結合於等)開源技術,我寫出來的程式碼就更好。這不由地讓我疑惑起來:難道里面有什麼相關性或因果關係嗎?
閱讀程式碼能讓你變得更優秀
我在程式設計生涯的早期就明白我閱讀的程式碼越多,我的程式碼就能變得更好。我知道,當我不得不維護其他人的程式碼時,簡單和乾淨的程式碼幾乎總是比花哨或複雜的程式碼好—— 即使有註釋。然而另一方面,當我花足夠的時間去理解複雜程式碼的時候,我常常能夠學到新的技巧。不論怎麼樣,都能讓我有所提高。
這使得我在那些沒有程式碼審查的地方一再爭取。而當沒有足夠的時間來正式執行“程式碼審查”的時候,我會自己瀏覽儲存庫和閱讀程式碼。當然,那時我還被受限於來自於小團隊的公司資源。
超越語法
在你不得不全力對付任意程式語言的語法時,也就是學習如何充分利用該語言最瑣碎的時刻。一門語言的語法往往是非常靜態的,並且如果你出錯了,你的編譯器會向你控訴。更深層次的課程涉及到什麼語言最適合解決什麼樣的問題(“合適的工具做合適的工作”),以及如何用那種語言編寫程式碼以便於使它高效和可維護。
學習新語言有許多方法:課程,教程,導師,書籍以及等等。我通常會結合這些選項來學習一門新的語言。我注意到,當涉及到非語法元素的時候,這些方法常常非常相似。
閱讀來自於其他人的實際部署程式碼會讓你收穫更多。不僅僅是常規的結構化學習,你還需要學習模式和實踐方法。語言中所謂“正確”的做事方式並不總是效果最佳的方式。你會經歷邊緣情況,一次性事務以及意想不到的整合。你也會找到這些問題的解決方案,有好有壞,但如果你認真思考的話,那麼這正是出來“推薦做法”的地方。今天的模式就是就是明天的反面模式。
你可能對有些事情,例如“總是註釋”,“逗號放到最後”,“縮排x個空格”有著自己的想法,當然你是對的。我對提到的這些及編碼的其他方面也有著自己的感受。
有時候當我閱讀其他人的程式碼時,如果看到他們做錯了,我會生氣。但是隨著我程式碼閱讀量的增加,我開始懂得,總會有一些情形常見於別人的程式碼,但我在我自己的程式碼中卻未曾遇到過的,並且我的方法沒有必要那樣執拗。我不僅改變了我的一些觀點,而且懂得更加靈活。
開源無處不在
隨著開源運動的發展,可供閱讀和學習的程式碼數量也大幅度增長。例如Gitlab,GitHub和到BitBucket這些網站就允許我們獲取全功能的應用程式,不僅可以閱讀程式碼,還可以擺弄。很少有我想要學習的東西是不能在開原始碼中獲取的。
我以前學習新的程式語言,會把重點放在諸如目錄結構和命名約定這些簡單的事情上。但是,現在,我會找一些不同的開源專案,然後可以開始拼湊常用的方法。我很少強調以前那些型別的東西了。
可用的程式碼是如此之多,但質量卻良莠不齊。當我們想要學習的時候,常常搞不清楚哪個好哪個不好。那就保持閱讀程式碼吧,慢慢地你會學會如何區分。閱讀“壞”的程式碼可以幫助你理解為什麼它是“壞”的。關鍵是不要害怕嘗試任何你覺得看上去正確的東西,並且當你走錯路的時候能夠承認錯誤,並改正問題,然後繼續前行。
壞的程式碼就壞的,是這樣的嗎?
有人會說“壞的程式碼比好的程式碼要更多更明顯”。sub-reddit致力於壞的程式碼。
在這些年裡,我寫了很多好的程式碼和壞的程式碼。當我看到我以前寫的程式碼時,我的第一想法就是我怎麼會寫這樣的垃圾程式碼。這實際上意味著我還在學習中。如果我看到我以前的程式碼,覺得它看上去非常偉大,那麼說明我並沒有提高。
那麼,我們怎麼才能從壞的程式碼中學到東西呢?
你閱讀的壞程式碼越多,那麼你就越擅長發現壞的程式碼
當你在學習和搜尋例子的時候,你會發現和使用大量不能工作的程式碼。請記住,僅僅因為它不適合你的情況,並不能說明它就是壞的程式碼。學習如何讓它工作能夠使得你變得更優秀。
你怎麼知道它是壞的程式碼?
人們喜歡批評。閱讀評論,如果你看到很多“WTF(什麼玩意)”,那麼可能你看到的正是壞的程式碼,試著指出為什麼不好的原因。不要只留下“這程式碼真爛”這樣的評論。不要裝得你好像懂得壞程式碼的所有需求,要知道,總有一個它之所以被這樣寫的正當理由。如果你知道它為什麼是壞程式碼的原因,那麼不妨留下一個有建設性的評論。或者……
讓它變成好的程式碼
放一個能讓程式碼變得更好的pull請求。修正語法,使用更好的方法,新增註釋或修改縮排:這些都是改進程式碼的偉大方式。加一個為什麼你推薦改變程式碼的解釋。
我發現當我幫助別人學習的時候能學到更多。如果我認為我理解了一個新的主題,那麼我會找個人來試著向他解釋,這能讓我更深刻地理解和記住它,並且讓我快速發現我是否寫了壞的程式碼。
回報
記住開放原始碼在你參與進去的時候效果最佳。程式碼更改在大多數專案中都是受歡迎的,但是有很多出力的方法。
測試開原始碼和檔案錯誤報告;幫助完成文件集;寫教程和如何做的例子;參加對話——或者僅僅只是幫助傳播。每一件事都能帶來改變,並且越多的人參與進來越好!
資源
這裡有一些可以幫助你開始的連結。有些我自己用過,有些我還沒來得及深入瞭解。如果你發現一些有用的東西——或者這篇文章中有什麼需要改正的地方,請不要猶豫和我們分享。
- Open Source Society University
- Free Code Camp
- opensource.com
- Getting Started With GitLab
- GitHub Guides
- moodle.org
相關文章
- 為什麼有的程式設計師不會程式設計?程式設計師
- 女程式設計師,為什麼比男程式設計師少???程式設計師
- 可以提高程式設計師效率的工具!程式設計師
- 為什麼說程式碼註釋是程式設計師必備的技能?程式設計師
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- 為什麼程式設計師喜歡在深夜程式設計?程式設計師
- 朝九晚五的程式設計師如何提高開發技能程式設計師
- 程式設計師為什麼喜歡程式設計這項工作?程式設計師
- 程式設計師程式設計時喝什麼?程式設計師
- 程式設計師程式設計時喝什麼程式設計師
- 程式設計師,為什麼如此迷茫?程式設計師
- 我為什麼是程式設計師?程式設計師
- 程式設計師:提高程式設計效率的技巧程式設計師
- 半路學程式設計,可以成為大牛程式設計師嗎?程式設計師
- 程式設計師可以跟銷售學什麼?程式設計師
- 為什麼程式設計師在學習程式設計的時候什麼都記不住?程式設計師
- 程式設計師修煉之為什麼程式設計師被稱為“夜貓子”程式設計師
- 程式設計師如何獲取新程式設計技能程式設計師
- 為什麼要投資程式設計師的幸福?程式設計師
- 為什麼要成為「無敵」程式設計師?程式設計師
- 好程式設計師:為什麼很少見到工資高的程式設計師炫富程式設計師
- 中國程式設計師為什麼要跳槽?程式設計師
- 程式設計師你為什麼這麼累?程式設計師
- 為什麼不能用中文進行程式設計,而英文卻可以?程式設計師的分析很透徹!行程程式設計師
- 提高程式設計技能,你做過最有效的事情是什麼?程式設計
- 為什麼高階程式設計師討厭程式設計面試? - Adam程式設計師面試
- 程式設計師最重要的技能程式設計師
- 【1024程式設計師節】程式設計師,你學程式設計的初衷是什麼?程式設計師
- 程式設計師壓力那麼大,為什麼還要選擇做程式設計師程式設計師
- 程式設計師何苦為難程式設計師?程式設計師
- 程式設計師何必難為程式設計師程式設計師
- 為什麼程式設計師應該儘早投資於決策技能 - Reforge程式設計師
- 程式設計師程式設計入門一定知道!程式設計師需要學什麼?程式設計師
- 為什麼成為一名程式設計師?程式設計師
- 你想成為什麼級別的程式設計師?程式設計師
- 為什麼微軟製造差的程式設計師?微軟程式設計師
- 為什麼美國程式設計師工作比中國程式設計師工作輕鬆、加班少?程式設計師
- 為什麼美國程式設計師不用加班,而中國程式設計師就只能996?程式設計師996