(圖/shutterstock)
圖片來源:Shutterstock
作者:Arthur Liao
具備以上的程式員基本能力,
我想就足以勝任大部份
「單兵程式員」的工作了。
如果想在技術上更上一層樓,
以下是幾個我認為比較重要的進階能力,
提供給大家參考。
作業系統
大學修的那麼多課裡面,
我感覺對工作最有用的
就是「作業系統」這門課了。
對作業系統(OS,operating system)的了解,
是資深程式員應該具備的。例如:
●Hardware: CPU, memory, I/O devices
●Process, multi-thread, scheduling
I●nter-process communication:
signal, socket, pipe, named pipe,
shared memory, message queue...
●Synchronization, deadlock, mutex, semaphore
●File system, cache, virtual memory, page fault...
●Real-time system, distributed system
作業系統本身就是一支超大型程式,
有著無數前人的心血。
加上作業系統的基本概念,幾十年不變,
所以花點時間弄清楚這些觀念,我認為很值得。
資料庫
不是每個程式員的工作都會使用到資料庫,
而且現在不少人用 NoSQL存資料。
儘管如此,我認為關連式資料庫
(relational database)還是很重要,
不管是 MySQL、PostgreSQL、
MS SQL 或 Oracle都好,
資深程式員應該至少對其中一種有相當的了解。
題外話,多年程式寫下來,
我對 ORM(object-relational mapping)
抱著存疑的態度。
網路上有篇文章:
Object-Relational Mapping is the Vietnam of Computer Science,
應該是反ORM的代表作之一,
有興趣的人可以看看。
還有一篇有名的文章:
The Law of Leaky Abstractions,
講的是每一層抽象化都或多或少會有漏洞。
從 leaky abstraction角度來看,
SQL已經是一層有洞的abstraction了,
而 ORM洞更大!
(註:寫這兩篇文章的兩個人,
剛好就是 Stack Overflow的兩位創辦人,真巧。)
網路安全
網路安全(network security)
平時很容易被忽略,
因為它費事費工,沒有立即效益。
但是對網路安全的輕忽,一旦出事,
經常導致企業或政府重大損失。
這讓我想起以前當社區管委會主委的時候,
按消防法規要搞甚麼社區消防編組、演訓,
還要指派防火管理人,
真的很麻煩。安全這種事情就是這樣。
有些網路安全議題,
是屬於系統管理者的範疇,
例如 DoS (denial of service)、
DNS spoofing、man in the middle;
有些則是程式員的責任區,
例如 SQL injection、cross-site scripting、
cross-site request forgery 等等。
此外像驗證使用者身份的流程、
儲存/傳送使用者敏感資料的方式,
也都與安全有關。
資深程式員對網路安全議題及常見攻擊手法,
應該要有足夠的認識與敏感度,
並在開發過程中合理採取預防措施。
程式語言的多樣性
程式語言是程式員吃飯的傢伙,
除了每天工作上用到的,
資深程式員也應該接觸一些不同的程式語言。例如:
函數程式語言
函數程式語言(functional programming language)
是另一種風格的程式語言,
可以挑一個好好學一下。
我個人推薦Haskell,
但F#、Scala、OCaml、LISP、R、
Erlang、Clojure這些也都不錯,各有擁護者。
實際工作上,
不見得有機會使用這些函數程式語言,
但好好學一種,
可以拓寬自己程式設計的思路。
而且現在很多程式語言,
包括C++(C++ 11之後)、C#、
Java(Java 8之後)、JavaScript、
Python、Ruby、Swift等等,
都具備一定的 functional programming能力,
可以運用在工作上。
組合語言
除非是用 C加 assembly寫硬體相關
或 compiler/toolchain的人,
組合語言在實際工作中很少用到。
但我覺得應該了解一下,
因為這是軟體的最底層,
再往下就是硬體了。
我中學時候寫過 6502、8088,
大學上過一堂 MIPS組合語言的課,
其實還蠻有趣的。
寫過組合語言,
會讓你對電腦如何執行程式更有「感覺」。
但是組合語言不用太認真學,
因為真的很少用。
學個概念、最多寫幾個小練習即可。
Shell Script
如果你工作中有用到 Linux/Unix相關的 OS,
我建議應該要學一種 shell script,例如 bash。
如果你是 ops/service engineer或系統管理者,
這應該是必備能力了,
不過資深程式員最好也能懂這些。
就像 vi一樣,有些東西已經很古老了,
但網路世界就這麼運作著。
沒辦法在 terminal環境工作的人,
很多問題處理起來就顯得笨手笨腳。
相關文章》
程式員求生指南》關於寫程式的二三事:程式員 須具備哪些 基本能力?
程式員求生指南》關於寫程式的二三事:程式員 除了技術,還需要什麼?
未經授權,請勿轉載侵權!
(責任編輯:CMoney編輯 / Alodia)
菁英軟體工程師戰鬥營
第六屆 熱烈招生中!
想學程式、成為工程師
卻怕自己沒基礎、學不好嗎?
這裡有史上最專業的魔鬼訓練課程,
讓你有機會 朝夢想前進
全程免費、不用基礎從頭開始、培養就業競爭力!
填寫報名表,將有專人與您聯絡
名額有限>>馬上報名
詳細活動介紹>>點我查看!
有問題歡迎私訊粉專:從0開始學程式!
或是寄信到:engineertraining@cmoney.com.tw