程式員求生指南》關於寫程式的二三事:程式員 須具備哪些 進階能力?

CMoney精選

CMoney精選

  • 2017-06-08 16:23
  • 更新:2019-11-29 14:42

程式員求生指南》關於寫程式的二三事:程式員 須具備哪些 進階能力?

(圖/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環境工作的人,

很多問題處理起來就顯得笨手笨腳。

 

相關文章》

程式員求生指南》關於寫程式的二三事:我適合當程式員嗎?

程式員求生指南》關於寫程式的二三事:程式員 須具備哪些 基本能力?

程式員求生指南》關於寫程式的二三事:程式員 除了技術,還需要什麼?

程式員求生指南》關於寫程式的二三事:當了程式員之後呢?

 

本文由 twincl 授權轉載, 原文 於此

未經授權,請勿轉載侵權!

(責任編輯:CMoney編輯 / Alodia)

菁英軟體工程師戰鬥營

第六屆 熱烈招生中!

想學程式、成為工程師

卻怕自己沒基礎、學不好嗎?

這裡有史上最專業的魔鬼訓練課程,

讓你有機會 朝夢想前進

全程免費、不用基礎從頭開始、培養就業競爭力!

填寫報名表,將有專人與您聯絡

名額有限>>馬上報名

詳細活動介紹>>點我查看!

有問題歡迎私訊粉專:從0開始學程式!

或是寄信到:engineertraining@cmoney.com.tw

 

CMoney精選

CMoney精選

CMoney 自出版社、各大報章雜誌精選好文 網路上的各家觀點,通通網羅呈現 !

CMoney 自出版社、各大報章雜誌精選好文 網路上的各家觀點,通通網羅呈現 !