程序員和開發(fā)者,細(xì)品之下見差別
也許你會覺得該問題會很搞笑,不管是開發(fā)者還是程序員他們都是程序員,就像男人和女人都是人(你也可以說都是動物)。首先,開發(fā)者和程序員都是程序員沒錯(cuò),這就像下面這個(gè)小故事一樣:
“駕購獅,射雞獅,攻城獅和程序猿一起走進(jìn)酒吧”
酒保:——程序員們來了!

對于非IT行業(yè)的人們來說,他們只能對IT從業(yè)者只有一個(gè)模糊和呆板印象——他們都是程序員,會修電腦,頭發(fā)很少。如果你是一個(gè)IT行業(yè)的從業(yè)人員,則需要細(xì)品開發(fā)者和程序員之間的差異(我探討的目的并不在于界定誰比誰好)。例如,如果你是IT公司負(fù)責(zé)招聘的工作人員,則必須搞清楚兩者之間存在的差異,不然可能招募不到合適的人才,浪費(fèi)公司的時(shí)間和金錢;如果你是一個(gè)想要從事軟件開發(fā)的人,理解兩者之間的差異,對你的職業(yè)規(guī)劃也大有幫助,因?yàn)橹挥辛私饬瞬町悾悴胖朗裁唇巧m合你,將來該往什么方向發(fā)展。
一、程序員
為了便于理解,我先將程序員比喻成一個(gè)技藝高超的廚師(注意強(qiáng)調(diào)烹飪技術(shù)),他們能夠按照菜單上的信息,在既定的時(shí)間范圍內(nèi),烹飪出色香味俱全的菜肴。能完成這樣一項(xiàng)任務(wù),這得益于廚師們在刀工,時(shí)間和火候上的精湛技藝。
同樣的,程序員在既定的時(shí)間范圍內(nèi),按照開發(fā)任務(wù)(菜單)將別人的想法轉(zhuǎn)化為可執(zhí)行的軟件代碼,他們負(fù)責(zé)編寫,測試,調(diào)試/故障排除和維護(hù)計(jì)算機(jī)源代碼,能勝任這樣一類工作,這得益于他們能理解各種計(jì)算機(jī)編碼指令,能熟練使用各種庫函數(shù)或框架。
如果要用一句簡單的話來概況,那就是:和廚師一樣,程序員是面向任務(wù)/指令型的角色。他們都是根據(jù)任務(wù)/指令行事。
二、開發(fā)者
如果將程序員類比為技藝高超的廚師,那么開發(fā)者更像是一個(gè)專業(yè)的美食家。就像美食家也是一名廚師一樣,開發(fā)者也是程序員,但區(qū)別在于,他們不僅能夠烹飪出美味的菜肴,還可以從0到1創(chuàng)造新的菜品。于程序員相比,開發(fā)者在創(chuàng)造性和概念性上更勝一籌。
對于同樣一個(gè)產(chǎn)品,程序員的工作是從任務(wù)/指令下達(dá)的時(shí)候開始的,而開發(fā)者的工作是從和客戶談?wù)撔枨髸r(shí)開始的。開發(fā)者需要不斷的同客戶交談以獲取原始的需求信息,然后對需求進(jìn)行分析,定位和抽象并找出其中埋藏的問題,最后針對客戶的問題,尋求可行的解決方案。
在實(shí)際情況中,程序員和開發(fā)者并沒有很明確的界限。例如,在小規(guī)模的公司,一個(gè)開發(fā)者既要承擔(dān)需求分析,系統(tǒng)設(shè)計(jì),項(xiàng)目管理的工作,又要承擔(dān)編碼,測試,調(diào)試/運(yùn)維的工作。但不管界限如何模糊,他們之間終究有區(qū)別,例如,從工作的范圍來看:
程序員的工作始終伴隨著編碼,而開發(fā)者的工作更多是處理需求,設(shè)計(jì)和管理的事情。
如果從工作的時(shí)間周期來看:
程序員的工作時(shí)間周期是從任務(wù)下達(dá)到調(diào)試完成,而開發(fā)者的工作時(shí)間周期是從需求談判到產(chǎn)品落地。
從工作范圍和時(shí)間周期上來看,我們可以得到第一個(gè)直觀的概念:
開發(fā)者程序員都是程序員,開發(fā)者和程序員所承擔(dān)的角色是整體與部分,全集與子集的關(guān)系。
程序員只需關(guān)注自身任務(wù)的時(shí)間周期,而開發(fā)者需要關(guān)注整個(gè)項(xiàng)目周期。
三、程序員 VS 開發(fā)者
首先,不管是系統(tǒng)架構(gòu)師,軟件工程師還是軟件設(shè)計(jì)師,他們都是程序員。
在接下來的內(nèi)容中,我會從工作的職責(zé),時(shí)間,能力和領(lǐng)域這四個(gè)方向探討開發(fā)者和程序員之間存在的區(qū)別和聯(lián)系。

3.1 工作職責(zé)
程序員:
- 程序員需要對他們正在編寫的源代碼負(fù)責(zé)(測試,調(diào)試/運(yùn)維)
- 根據(jù)既定任務(wù)行事
- 專注于代碼邏輯和算法
- 負(fù)責(zé)業(yè)務(wù)邏輯的實(shí)現(xiàn)和代碼組裝
開發(fā)者:
- 很少的代碼編寫量,更偏重于編碼規(guī)范的制定
- 負(fù)責(zé)評定和管理項(xiàng)目代碼
- 對項(xiàng)目的時(shí)間,空間和資金成本負(fù)責(zé)
- 協(xié)調(diào)處理整個(gè)項(xiàng)目的功能
- 協(xié)調(diào)/掌控全局,但沒有必要知道各子功能的內(nèi)部細(xì)節(jié)。
程序員利用專業(yè)知識,將現(xiàn)實(shí)需求/問題轉(zhuǎn)化為可執(zhí)行代碼,開發(fā)人員則需要利用創(chuàng)造性和概念性來保證程序員的節(jié)奏一致,為項(xiàng)目爭取時(shí)間和空間。這好比一場交響樂音樂會,程序員像演奏者,而開發(fā)者像手拿指揮棒的演奏指揮。
3.2 時(shí)間范圍
程序員:
- 任務(wù)下達(dá)——工作開始時(shí)間
- 編碼
- 測試
- 調(diào)試
- 任務(wù)完成——工作結(jié)束時(shí)間
開發(fā)者:
- 需求談判——工作開始時(shí)間
- 需求分析
- 概要設(shè)計(jì)
- 解決方案
- 編碼實(shí)現(xiàn)
- 系統(tǒng)測試
- 系統(tǒng)運(yùn)維
- 文檔編寫——工作結(jié)束時(shí)間
程序員的的工作好比一個(gè)400米的接力往返跑比賽,每個(gè)程序員只負(fù)責(zé)其中一段工作,而開發(fā)者更像是馬拉松長跑比賽,需要從頭盯到尾。

3.3 工作能力
程序員:
使用合適的編碼指令和算法,編寫經(jīng)過測試且符合標(biāo)準(zhǔn)的有效代碼,以完成任務(wù)。
開發(fā)者:
發(fā)揮自身的創(chuàng)造性和概念性,找到滿足客戶需求的解決方案,并讓程序員能夠理解并實(shí)現(xiàn)自己的想法。
3.4 專注領(lǐng)域
程序員:
- 業(yè)務(wù)邏輯轉(zhuǎn)化為可執(zhí)行代碼
- 精于某一個(gè)或多個(gè)編碼語言
- 善于使用各類算法解決問題
- 善于對代碼進(jìn)行測試、修改和運(yùn)維
開發(fā)者:
- 需求分析和溝通
- 資源整合和協(xié)調(diào)
- 項(xiàng)目管理與跟蹤
- 風(fēng)險(xiǎn)評估于把控
四、總結(jié)
通過對程序員和開發(fā)者之間的對比,我們發(fā)現(xiàn)了兩者之間的差異。簡單來說,程序員和開發(fā)者之間最本質(zhì)的區(qū)別在于他們的工作范圍不同,思考方向不同。開發(fā)人員(技術(shù)總監(jiān),架構(gòu)師,設(shè)計(jì)師,項(xiàng)目經(jīng)理等)會更多的參與到整個(gè)項(xiàng)目當(dāng)中,并對項(xiàng)目有更深入的了解;而程序員(例如:初/中/高級Java程序員或技術(shù)專家),他們只參與了項(xiàng)目的特定部分,利用自身的專業(yè)知識,解決了某一領(lǐng)域的問題。
回到一開始的那個(gè)問題中,開發(fā)人員也是程序員,就像美食家也是廚師。但需要注意的是,開發(fā)者可以平滑切換到程序員的角色,但程序員并不一定能切換為開發(fā)者的角色。為什么這樣說?道理很簡單,美食家可以切換成廚師的角色,自做美味菜肴,但廚師并不一定能夠像美食家一樣創(chuàng)造新的菜品,并對沒事進(jìn)行品鑒。同樣的,一個(gè)技術(shù)總監(jiān)或架構(gòu)師可以成為一個(gè)合格的程序員,去完成編碼任務(wù)(通常不會這樣,殺雞用牛刀,如果小公司只有一把牛刀,那也沒有辦法);但一個(gè)高級程序員未必能夠勝任技術(shù)總監(jiān)或架構(gòu)師的工作,因?yàn)閮烧咭伎嫉膯栴}是一個(gè)父子集合,整體與局部的關(guān)系。
認(rèn)識到這一點(diǎn)后,如果你是一名IT公司的招聘人員,你應(yīng)該已經(jīng)明白,一個(gè)編程專家未必是你想要尋求的技術(shù)總監(jiān)或架構(gòu)師,選擇需謹(jǐn)慎,用人有風(fēng)險(xiǎn);如果你是一個(gè)碼農(nóng),也請認(rèn)清兩者區(qū)別,做好職業(yè)規(guī)劃,如果你想往技術(shù)總監(jiān)/架構(gòu)師方向發(fā)展,除了必要的編碼能力,你還需加強(qiáng)自身在溝通,表達(dá),整合,探索,創(chuàng)新等方向上的能力,規(guī)劃需謹(jǐn)慎,光陰去不回。