不論你想要成為一個專業的軟件開發者,還是想要學習如何更高效地和程序員溝通,或者只是對于程序如何工作感到好奇,這本書都非常適合作為幫你達成所愿的第一步。
——作者:Steven Foote(美)
在這本書中你可以學到:
· 如何簡化及自動化諸多編程工作
· 在程序中處理不同類型的數據
· 使用正則表達式查找和處理模式
· 編寫能夠決定該做什么、什么時候做的程序
· 使用函數編寫干凈、簡潔的代碼
· 編寫可以讓其他人很容易理解和改進的程序
· 測試并調試軟件,使其變得可靠
· 和程序員團隊一起工作
· 學習接下來要建立一生的編程技能的步驟
在中國,IT從業者有數百萬之多,但這其中,稱得上會編程的,不會超過十分之一。
我所說的會編程,絕不僅僅是會寫代碼,而是包括環境搭建、版本管理、構建管理、單元測試、文檔編寫、團隊合作,以及任務拆分在內的綜合技能。很多人——包括我自己——一開始都無法理解,一個程序員除了寫代碼,為什么還需要懂這么多東西?
>>>>
當年在學校,有幸參加一個學生團體,利用課余時間做點小項目。第一次幾個人一起寫代碼,還有點小激動。然而激動并沒有延續很久,過了兩天,當大家準備把各自寫的代碼合到一起時,發現這是個根本無法完成的任務,每個人都有自己的想法,從代碼組織方式,到代碼風格,甚至連IDE都不一樣。那是第一次感受到,真正的軟件開發,和寫C語言程序設計的作業完全不一樣。
2009年年底,我到微軟亞洲研究院的創新工程中心實習,當時的部門負責人是鄒欣,他是《移山之道》和《構建之法》的作者。進組的第一天,我就拿到幾張紙,上面寫著一些基本的編碼規范。分配給我的電腦上環境已經準備好,從TFS上簽出項目代碼,在項目文件中的編譯選項已經配置好,直接運行編譯,之后執行腳本就可以將服務跑起來。
從新人進組到可以開始工作,不到一天時間,真是讓我眼界大開。當然,這才是開始,后面從代碼提交,到工作項分配,再到上線部署,每一件事都在刷新著我對軟件開發的理解。不過,作為一個小小的實習生,那時的我只想安安靜靜地寫代碼,沒有仔細思考這些專業工作背后的意義。
>>>>
我畢業后的第一份工作就職于在一家研究所,所在的部門人員能力都很強,但是因為信息相對閉塞,對于現代軟件開發方法并不是很了解,所以開發團隊的很多做法都比較原始,導致需要花費大量的時間和精力在管理代碼版本、修復由于更新代碼導致一些已有功能不能用的bug等上。
我嘗試將在微軟亞洲研究院學到的那些知識引入到團隊中,覺得只要搭建起TFS,就水到渠成了。可惜現實狠狠給我上了一課,搭建TFS其實是所有事情中最簡單的,設定編碼規范、規范代碼提交流程、統一編程環境、編寫自動化腳本等,每一件事都非常困難。
后來,我來到ThoughtWorks,發現這里每個人都能夠熟練使用Git管理代碼,使用Gulp、Maven、SBT等管理構建構成,還會寫大量的自動化測試來保證質量。從代碼修改到測試環境上線,只需要5分鐘時間,整個過程不需要人參與,程序員們只要看著屏幕上的流水線走到最后亮起綠燈,就可以安心地做下一個任務。后來有人給這種工作方式起了個很直觀的名字,DevOps,中文叫作“開發自運維”。 這時我才意識到,如果一個團隊中大部分人都不了解這些現代軟件開發的知識,靠一兩個人去推動,幾乎不可能。
在這里,我了解到了為什么需要敏捷開發,為什么要做持續集成、持續交付,為什么要組建全功能團隊。以前對于軟件開發的很多疑惑,都慢慢解開了。我常常想,要是我在還沒畢業的時候,就知道這些事情,會少走多少彎路啊!
最近幾年,參與了幾次技術咨詢項目,接觸到更多軟件開發者。很多業界有名的公司,實際上軟件開發人員的技能非常不足。完全不理解軟件工程任何概念的程序員大有人在,不會使用命令行工具、不知道如何處理代碼沖突、從不做單元測試、基本上全靠網上搜索一些代碼片段來完成任務,這樣的人真心不能算會編程。
當然也不乏一些在日常工作中有思考,能夠理解軟件開發的痛點,但是苦于不知道如何改進的程序員。因為從來沒有人告訴他們怎么做才是正確的編程方式。
現在市面上對于每一個流行的技術都有大量的書籍文檔做介紹,然而,唯獨缺少一類書,告訴讀者如何才能做一名合格的程序員。事實上,我自己以前也一直認為,要想成為一名合格的程序員,需要讀很多不同方面的書。直到我看到了本書。
當時接下這本書的翻譯,初衷是想要將這本書送給我當時的女朋友,現在的妻子,因為她剛好也是會計,和本書作者在轉行做程序員之前的職業一樣。我的本意是通過這本書,讓我的老婆也可以對編程感興趣,能夠理解我每天對著電腦到底是在干什么。
然而當我翻譯到第4章,介紹JavaScript構建工具那部分時,我發現這本書并不是我一開始想的那樣,并不只是一本介紹如何寫JavaScript代碼的入門書。在只有兩百多頁的書中,作者對所有軟件開發相關的技能都做了介紹。對于每個編程必備技能,作者僅僅介紹其在日常開發過程中最常用到的一些知識,用20%的篇幅,把80%的場景都覆蓋到了。
不僅如此,因為作者自己從對編程一無所知開始學習,所以在介紹一些相對難理解的概念時,能夠設身處地地從初學者角度著想,用直白的語言,將一些概念解釋出來。盡管可能從專業人士角度看,不算非常嚴謹,但對于日常開發工作來說,剛好夠用。
對于程序員來說,這是最好的時代,物聯網幾乎改變了所有行業,甚至已經有人在提“程序員拯救世界”這種說法,作為程序員,我們應感到自豪;然而,這也是最壞的時代,軟件開發對程序員的要求越來越高,20年前也許會用HTML設計網頁已經非常厲害,但今天你需要會很多不同的技能才能成為一名合格的程序員。
如果你希望能夠在軟件開發這條路上一直走下去,本書可以幫你邁出堅實的一步。