我經常想忘掉,在沒有經驗的團隊裡開發軟體有多糟糕。他們的大部分開發實踐和Hobbes關於原始人的描述類似。生活是“孤獨、貧窮、骯髒、野蠻和短暫的”。就像原始人一樣,這些人認識不到更好的生活是什麼樣子。
生活不必是這樣的。我推崇的工具是軟體,拷貝它們是自由的,唯一的成本就是人們需要學習該工具的時間。缺乏的是瞭解,人們需要知道如何使用這些工具,他們需要知道這些工具解決什麼問題。最重要的是,他們需要知道這些工具是現成的。
下面是我認為基礎工具的概覽,它們是我認為合理的工具,缺少它們就像缺少電力和抽水馬桶。悲催的是,它們都沒有出現在我的電腦科學教育裡。
備份
這適用於每個人,但是大量技術高手沒有備份,我對此感到吃驚。如果你缺少備份,你將最終失去重要資料。我希望每個人在小學時就經歷過硬碟壞掉的遭遇。就算丟失資料的機率很低,也要吸取備份的教訓。
不管你用什麼作業系統,備份總是比安裝容易:
- OS X有時光機。
- Windows有檔案File History。
- Linux沒有標準的備份方案。Ubuntu有一個備份功能,但是它有些難用,我從來沒有用它嘗試過還原。Ubuntu的社群維基有一些關於備份的優秀資料。
我不能誇大備份的重要性,如果你要接受本文建議中的一條,那就是備份。
原始碼控制
原始碼控制記錄了誰在什麼時間改動了什麼地方,可以輕鬆回退到已知良好的版本。它讓每個人對他們做的修改負責,也讓每個人容易地看到程式碼庫隨時間的變化情況。即使只有你一個人在維護程式碼,也要使用原始碼控制!
Subversion、Git、Mercurial,你用哪種軟體不重要,用任何軟體都比不用強。與程式設計相比,這些工具學習起來沒有難度。每一個流行的原始碼控制軟體都有與之相關的免費書籍:
SSH Keys
在ssh中使用密碼驗證是壞習慣,SSH Keys允許你不用給遠端伺服器傳送密碼就可以身份驗證。Arch Linux【注1】 wiki提供了一份優秀的SSH Keys指導。
避免用Root
使用sudo而非root,較容易地讓你避免昂貴的錯誤。
人們掃描ssh伺服器,並猜測普通的root密碼是很常見的。為了應對這種攻擊,關掉root登入,通過ssh設定/etc/ssh/sshd_config裡的PermitRootLogin為no。
保持學習
提高開發和部署軟體的經驗,有無數種方法,人們每天都在創造新的工具,我只是列出了我認為絕對基礎的一些工具。一個人的知識很容易停滯不前,一定要堅持從書本、朋友和同事那裡學習。如果你堅持了,有一天你可能嘗試開發屬於自己的工具。
- 注1:Arch Linux是朝向輕量(lightweight)以及簡單(simple)的Linux發行版。其中“簡單”(Simplicity)被定義為“避免不必要或複雜的修改”,也就是說,是由開發者角度定義,而非使用者角度思考。http://zh.wikipedia.org/wiki/Arch_Linux