我經常使用這三個幾乎可以互換的詞,是的,甚至包括電腦科學家。畢竟,我們中的大多數人都擁有電腦科學學位,那這三者有什麼不同呢?然而,最近我發現這三者的特點在我腦海中愈發涇謂分明。當我一想到那些我認識或者從事這個行業的人時,便能馬上將他們歸為這三種之一。不是說一個人不能同時擁有這三者的全部特點,但無論如何,他們總會更傾向類一種,那麼我便把他們歸屬到那一類,程式設計師、開發人員或者電腦科學家。
其實很難對這三者下定義(相比嚴格的描述,這更靠直覺而定)。雖然它們非常相似(確實如此),但我還是盡力分辨,因為我是個不怕吃苦的人。 :)
電腦科學家
他們寫程式碼(是的,我知道這有點讓人吃驚)。他們所寫的程式碼,也許不是最漂亮或者構造最好的程式碼,但是能完成任務。這跟程式碼設計或者“良好”習慣沒有關係,只是用來證明他們要去證明的東西。電腦科學家不僅是技術專家,而且還是數學家(他們有31337種數學技巧),他們不僅要知道程式碼是有效的,還必須對其作出證明。溝通和人際交往能力是理想的品質,但不是必須的。這些人掌握了他們整個研究領域足夠的基礎知識,但他們會專攻其中一點或者幾個狹小的領域。在這些領域中,他們是世界級的專家。他們在私人時間裡做著和他們研究相關的工作。
程式設計師
程式設計師編寫非常棒的程式碼。程式碼簡化,構造優良並且要沒有錯誤(error free),這些非常重要,但是他(她)們不能以無法完成任務為代價。在他們的領域中,全是關於瞭解“優秀程式碼”的含義。他們需要掌握一些數學技巧,但這不是最重要的。他們需要清楚好(最好)的問題解決方案,但不必加以證明該方案是最佳的。對他們而言,必須掌握足夠廣泛的演算法,並且在專業知識方面掌握有熟練的技巧,在相關領域也具備相當優秀的知識。溝通和人際交往能力是理想的品質,但不是必須的。軟體開發過程和團隊活力是理想的品質,也不是必須的。他們在不上班的時候,做個人軟體專案,以尋找樂趣。
開發人員
他們寫程式碼。優化和簡化程式碼固然重要,但通常會優先考慮其它因素。數學技能不是必須具備的,但有助於瞭解與他們所在領域相關的常見問題及解決方案。溝通和人際交往能力是最重要的。軟體開發過程和團隊活力是賴以生存的技能。他們是不依賴任何真正專業技術的全才。他們擅長繞過問題,整合元件,從而滿足一系列要求。在個人時間裡,他們不是在盡力構建下一個Facebook,就是參加與程式設計、開發或者電腦科學無關的活動。
(編注:Alan曾撰文討論開發人員和數學之間的關係,他認為:成為優秀的開發人員,可以沒有數學技能,但成為卓越的開發人員,不能沒有。詳情請參閱《數學是成就卓越開發人員的必備技能》一文。)
- 一定程度上,開發人員就是程式設計師。
- 一定程度上,電腦科學家就是程式設計師。
- 企業軟體屬於開發人員的領域。
- 谷歌和微軟是程式設計師締造的(包括小部分電腦科學家)。那裡的開發人員最終成為了產品經理。
- RnD(研發)和學術界屬於電腦科學家的領域(在較小程度上包括程式設計師)
需要記住的是,這三者在任何方面中都不存在貶義或者不好的意思。他們體現的價值是相等的。他們只是我們所涉及的領域中不同的方面(有一些交叉點)。可能其中一個會有更多與眾不同的特點,但這並不意味著這三者不能相互滲透、相互融合。一名出色的開發人員完全有可能同時是一名傑出的程式設計師(雖然要關注於那麼多重要的事情是很困難)。極少數情況下你會遇到甚至集三者於一身的情況,那也是我樂意從您那瞭解的情況。因為我們應該一起開公司,那樣我就可以藉著你這牛人一路順風:)。不過不管你在哪兒失敗,只要你把握住三者之一,都完全有可能大獲成功。
什麼是軟體工程師呢?他們只是開發人員的一個子集。
我相信我沒有完全表達清楚我的想法。不過沒關係,這個任務交給你了,親愛的讀者。您是否認為程式設計師、開發人員和電腦科學家是有區別的?如果是,那您對它們的定位是否跟我的相似?如果不是,我很樂意傾聽你關於他們的想法。(編注:個人一直把“程式設計師”等同於“開發人員”,從未想過兩者之間的區別。正如Alan所期待,如果你有其他想法,請在評論中和大家一起討論分享吧。)
原文作者:Alan Skorkin 編譯:伯樂線上 敏捷翻譯組 – 魏哲
如需轉載,但請註明原文/譯文出處、譯文超連結和譯者等資訊,否則視為侵權,謝謝合作!