當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 入門指導(dǎo) > 你真正了解程序員和工程師嗎?
就我個(gè)人理解來看,程序員與工程師沒有什么不同,當(dāng)然也有人會(huì)這樣說,好好干兩年的話,可以迅速從程序員成長為工程師,對這樣的闡述,你會(huì)不會(huì)感到詫異,為什么我會(huì)有這樣的理解,原因是從周邊的很多招聘啟事來看,程序員就等同于工程師,只不過工程師是換了一個(gè)好聽的名字而已,但在實(shí)際工作中,兩者確實(shí)有很大的不同點(diǎn),程序員和工程師從本質(zhì)來講確實(shí)不同——程序員只負(fù)責(zé)寫程序,而工程師可以再現(xiàn)實(shí)世界中創(chuàng)造出更有價(jià)值的程序。
但從軟件開發(fā)人員本身來講,他們甚至都不太清楚兩者之間的關(guān)系,甚至做了很久也只能算是程序員而不是嚴(yán)格意義上的工程師,下面所講內(nèi)容,是關(guān)于程序員和工程師的差別,看看你到底了解多少?
第一、工程師不寫黑箱程序
“程序=數(shù)據(jù)結(jié)構(gòu)+算法”,這個(gè)著名的公式大家都知道,不幸的是,它不適合描述工程領(lǐng)域或者現(xiàn)實(shí)世界的程序。有很多程序,數(shù)據(jù)結(jié)構(gòu)和算法都寫得很棒,功能足夠強(qiáng)大,系統(tǒng)足夠復(fù)雜,但是——它很難調(diào)試,一跑起來就無法停止,而且誰也不知道程序現(xiàn)在到底在干什么,里面發(fā)生了什么。
不了解實(shí)情的外行人一定覺得很可笑,但你敢說他們技術(shù)不好,沒有系統(tǒng)意識(shí)么?他們做的程序也都不簡單,但充其量也只能算是“程序”,而不能稱為廣泛意義上的成熟系統(tǒng)。
如果你能很好地了解和考慮清楚所寫程序需要對外提供什么操縱借口等等,等你吧一切都考慮的非常清楚,寫出的程序盡在自己的掌握之中,那么你的一條腿就已邁進(jìn)了工程師的大門。
第二、工程師注意實(shí)現(xiàn)和接口分離
下面有這樣一道JAVA面試當(dāng)中的一道題,請描述抽象類和接口的區(qū)別,通常大家會(huì)這樣回答,接口和實(shí)現(xiàn)要分離,這種理解知識(shí)狹義上的特定語言提供的interface,沒有真正考慮接口的真正含義。
有沒有接口意識(shí),能不能真正區(qū)分接口和實(shí)現(xiàn),這是區(qū)分程序員和工程師的一大標(biāo)識(shí)。
第三、工程師注重功能的邏輯聯(lián)系
很多系統(tǒng)都在不斷的變化和改進(jìn)過程當(dāng)中,程序員只看到的是功能點(diǎn),而工程師看到的則是功能點(diǎn)之上的內(nèi)在邏輯。
隨著時(shí)間的推移,業(yè)務(wù)的增長,新功能可能越來越多,比如用戶數(shù)據(jù)的加載,對好友的通知,廣告的推送準(zhǔn)備等等眾多新功能。這些功能實(shí)現(xiàn)起來當(dāng)然都容易(因?yàn)楹芫唧w),但功能堆積的后果是復(fù)雜度急劇上升,因?yàn)楣δ苤g的邏輯聯(lián)系被切斷了。所以,作為工程師的你,必然需要思考,這些功能應(yīng)該怎么組合,放到哪些具有邏輯意義的動(dòng)作——比如“登錄”里去?正是經(jīng)過這樣持續(xù)不斷的思考,系統(tǒng)的復(fù)雜度才能夠被一直維持在較低的水平,容易讓大家理解。
以上三點(diǎn)內(nèi)容是重要的幾個(gè)不同點(diǎn),如果能夠經(jīng)常反思,不斷總結(jié),我想一定會(huì)找到相應(yīng)的突破口,從程序員向工程師轉(zhuǎn)變還有什么難度……