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