2015年12月13日 星期日

如何「看起來」像大神級程式設計師? How to Look Like a Good Programmer?

 


序 - 如何「看起來」像大神級程式設計師



懵懂無知的大一時期,在宿舍常常遇到一些 CS 大神,一進房門就可以看到他們桌上擺滿食物語喝玩的瓶瓶罐罐,豪爽的敲擊鍵盤,黑色螢幕的畫面不斷閃爍,高速的切換輸入,口中喃喃著下輩子才會懂的專業術語,偶爾大聲抱怨中英夾雜的奇妙問題。

那時候心想 : 等到我大三大四的時候應該也可以這樣厲害吧?

寫下這篇的現在,已經大學畢業剛要進入研究所,回想起大一的這些經歷仍歷歷在目。自問學到了多少,OS、計組、演算法等雖因為考試而稍有理解,但是如 CS 大神的這般的「非凡氣質」卻依然有所欠缺。而有了大學四年的學習,也算是有了基本功,有能力自己翻找資料來學習這些「大神技能」,剩下的就是修行在個人了 : )

另外,本篇另一個重要依據是參考  軟體工程師的鄙視鏈  這篇文章所寫的鄙視鏈來判別工具的「潮度」,基本上大多數是符合一般工程師的「品味」: 學習曲線陡峭但能以一擋百的工具

最後,每個人品味不同,下面寫的工具僅供參考,理性交流勿戰XD


2015.07.21 初版
2015.12.13 內容精簡、新增online judgment





一、大神精通的開發工具



1. Shell - Zsh


Shell潮,潮到出水!基本上不同shell的操作方式大同小異,要「看起來」像大神級程式設計師當然是用最近很流行的Zsh (Z Shell),bash(Bourne Again Shell) 當然也很好,不過潮度比較差一點(?)

下面是一些簡單的Zsh設定:

bash 轉移 zsh (oh-my-zsh) 設定心得
http://icarus4.logdown.com/posts/177661-from-bash-to-zsh-setup-tips

Fried CPU - zsh: The last shell you’ll ever need!
https://friedcpu.wordpress.com/2007/07/24/zsh-the-last-shell-youll-ever-need/



2. Text editor - vim


在所有的 Linux distributions 上都會有的一套文書編輯器就是 vi ,而 vim 是進階版的 vi,可以各種介面自定義而且「不用用滑鼠」,「看起來」像資工系大神必備利器!

下面是本站vim介紹的傳送門:

[系列文目錄] 編輯器之神 ‧ Vim
http://mropengate.blogspot.tw/2015/07/vim.html

大家來學VIM(一個歷久彌新的編輯器)
http://www.study-area.org/tips/vim/index.html



3. Make


make 是一支程式,會去找 Makefile,而 Makefile 裡面則是幫助compile的工具,透過Makefile,可以簡化build的流程。特別是當程式愈寫愈大,source file愈來愈多時,更要用Makefile來管理整個project的開發,因此make是寫出包裝漂亮程式的利器!

4. Regular Expression


Regular Expression 是以一組特定字元符號描述字串樣式規則的記述語法。/^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*/,不覺得看到這些疑似亂碼的東西就有大神的感覺嗎XD

傳送門:常用的正則表示式 Regular Expression in Application
http://mropengate.blogspot.tw/2015/02/regular-expression.html



5. Git/Github


Git為分散式版本控制系統,是為了更好管理Linux內核而開發的。而GitHub 是目前全世界最多人採用的 Git 線上管理平台,他包含了完整的 Git 遠端儲存庫實作,還有完整的議題追蹤機制與報表,更有成千上萬的開源碼專案都在 GitHub 進行 Git 版本控管。Git和Github是現在超主流的版本控制,不學不行阿!

另外建議把所有做過的每個項目整理成作品集,放到 GitHub 上,大神的 GitHub 總是很神!

傳送門:Pro Git
https://git-scm.com/book/zh-tw/v1



6. LaTeX


$\mathrm{T\!_{\displaystyle E} \! X}$是由Donald Knuth創造的基於低級編程語言的電子排版系統,利用TeX能夠對文章進行十分精美的排版。LaTeX是從TeX衍生出來的。 簡單來說,TeX之指令較為繁複;LaTeX的指令較為簡單,容易上手。寫文件用LaTeX真得很假掰很酷!



7. Debugger GDB


GDB 的全稱是GNU Debugger,是linux 底下的一種免費的debug 程式。要當CS大神想必是芸芸眾生的救星,捉捉蟲什麼的是基本中的基本!





二、大神精通的程式語言


精通至少一種多重範式程式語言 (Multi-paradigm programming language),多重編程範式是一種可以支援超過一種編程典範的程式語言,這類語言風格多樣,可以在一種語言裡體會到不同風格的代碼在執行上的差別。


1. C/C++


凡是嚴格要求效率的複雜系統,C/C++幾乎是唯一的選擇,例如遊戲引擎、資料庫等等。能直接控制底層是CS大神的浪漫;大神的母語絕對不是中文,C語言才是。


2. Python


邏輯用Python,核心性能用C/C++,再用boost庫把他們連起來,完美!There is only one way to do it. Simple and elegant : )


3. Haskell


函數式程式設計已經歷經時代的考驗,這個時代的開發者應該認真地考慮,從一門純函數式語言中,像是Haskell,去瞭解真正的函數式設計。





三、大神精通的基礎學科


如果不掌握計算機科學的基礎,很難寫出高水準的程式,一般來說,學CS專業的人比學其他專業的人更能寫出高質量的程式。


1. 資料結構、演算法、正規語言


2. 作業系統、計算機組織


3. 離散數學、線性代數






四、大神的練功場


現在這個全民coding的時代,線上的學習資源真的如雨後春筍般非常豐富,下面是一些知名的 online judgement,對熟練 coding 技巧很有幫助 (至少我是覺得寫起來很爽快XD)。


1. Hackerrank


題目很廣各領域都有!

https://www.hackerrank.com/


2. Leetcode


面試聖經,大多為演算法題:)

https://leetcode.com/





五、結語


最後,是「看起來」像大神的心法:

保持熱情多與別人交流培養良好的程式風格

搞不好哪一天,能真的成為大神也說不定:)






References



技術提供:Blogger.