從小朋友的一道數學題聊聊職業程序員

之前輔導小朋友做數學作業時的一道題,從這道題和小朋友聊到了串行、並行,聊到了電腦的結構,聊到了業餘程序員和職業程序員的巨大不同。

題目如下:

“阿姨週末在家幹家務,收拾房間用時10分,用掃地機器人掃地用時15分,擦桌子用時4分,用洗衣機洗衣服用時25分,晾衣服用時4分,請問阿姨做完這些事最少需要多少分?”

這題的核心顯然是哪些地方能儘量並行化,從而提高效率,人和電腦很大的不同是,人只有一個大腦,電腦則可以認爲多核CPU形成了多個大腦,使得電腦能夠在同一時刻做多件事,不過儘管電腦擁有多個大腦,但它同時還有其他很多地方是共享的,例如內存、磁盤、網卡等,當多個大腦都要同時去操作共享的地方的時候,就會導致串行化,這就對程序員怎麼寫高效的並行化代碼帶來了巨大挑戰,和小朋友說,一個職業的程序員可以讓擁有八個大腦的電腦幾乎同時在幹八件事,但一個普通的程序員有可能會導致有八個大腦的電腦同時只能幹一件事,數學也是我認爲的一個程序員最重要的基礎,數學高度訓練了一個人解問題的思維能力(包括了舉一反三等抽象能力),而這也是一切程序的基礎,所以我招學生的時候都會特別注意數學成績。

從這個拓展開點來講下職業程序員和業餘程序員的區別,我覺得要成爲一個業餘程序員的門檻其實是挺低的。

業餘程序員通常就是碰到一個實際的問題或需求,形成一個解決問題或實現需求的思路,然後把這個思路翻譯成代碼。

但作爲職業程序員,除了要做這些外,更重要的是還得考慮以下問題。

  1. Robust

    這點我覺得是職業程序員和業餘程序員最大的區別,怎麼讓一個程序在各種情況下都能穩定的運轉,這個其實是非常不容易的,寫個玩玩的東西不難,要寫一個能在生產級robust運轉的東西就非常難了。

    舉個例子,家裏的空調很多現在還不是很智能,尤其是在溫控方面,現在通過溫度感應器,紅外智能遙控設備,可以比較好的做到智能溫控,但這類程序一般寫的不咋樣,如果自己通過這些設備的API寫一個其實不復雜,但如果想下怎麼讓這段程序能robust地運行(例如如果程序運行的機器掛了,溫度感應器出問題了,紅外遙控的指令是不是真生效了等等),就會發現挺複雜的,畢竟誰也不想這程序失效了,大半夜熱醒或冷醒。

    在之前的程序員的成長路線Remix文章裏也寫到過,能寫出防範異常代碼的程序員絕對是NB的。

    要做到代碼的Robust,會要求在設計和寫代碼的時候對異常狀況有充分的考慮,同時對代碼尤其是使用到的API需要深刻理解,經驗在這個時候也會發揮一些作用。

  2. 高效

    這個主要就類似前面那個題目的例子,職業程序員應該做到儘可能充分發揮運行程序的機器的能力,這通常會需要對代碼運行的機制,怎麼寫高效並行化的代碼要有充分的掌握。

  3. 可維護性

    怎麼知道自己寫的代碼運行的狀況,有問題時怎麼通過有效的異常信息來處理問題,代碼未來的可擴展性,這些要做到其實也都不容易。

所以說,一個程序員的水平通過代碼是最容易反應的,可能短短的幾行代碼,就能看出巨大的差距,當然,其實職業的程序員在上面的幾點上彼此也是會出現很大的差距,成爲業餘程序員不難,要做到上面三點,成爲真正的一個寫的代碼可供生產級業務使用的職業程序員,光要學習的東西就已經不是一個數量級了,同時還需要大量的訓練(1萬小時理論在程序員行當我覺得也是挺適用的,儘管不代表有了1萬小時就一定是個優秀的程序員),感興趣的可以根據自己的需要去極客時間挑選一些專欄學習,裏面很多作者還是很讚的。

作者簡介:

林昊,2007年加入阿里巴巴,12年一直從事基礎技術架構領域工作,參與了淘寶從單機到分佈式的技術架構改造,主導設計和落地了阿里的異地多活,統一調度的技術架構,打造了HSF,T4,Sigma等產品。

本文轉載自公衆號 HelloJava(ID:hellojavacases)。

原文鏈接:

https://mp.weixin.qq.com/s/7FASc0MNydFJVNMit0NRPA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章