版權聲明:本文爲北京尚學堂原創文章,未經容許不得轉載。html
我剛剛工做的時候,面試官曾經跟我說:好好幹兩年,能夠迅速從程序員成長爲工程師。當時我以爲太詫異了,從不少招聘啓事來看,「程序員」不就等於 「工程師」嗎,只是「工程師」更好聽一些而已。等我工做久了,才知道「程序員」和「工程師」真的是不同的——程序員只寫程序,工程師寫能在現實世界中創 造價值的程序。程序員
惋惜,不少軟件開發人員未必清楚二者的差異,甚至作了好久也只算程序員而不算嚴格意義上的工程師。因此我就本身的觀察和經驗,談談程序員和工程師的差異。面試
第1、工程師不寫黑箱程序算法
「程序=數據結構+算法」,這個著名的公式你們都知道,不幸的是,它不適合描述工程領域或者現實世界的程序。有不少程序,數據結構和算法都寫得很 棒,功能足夠強大,系統足夠複雜,可是——它很難調試,一跑起來就沒法中止,並且誰也不知道程序如今到底在幹什麼,裏面發生了什麼。數據庫
別以爲可笑,我遇到過不少工做三四年甚至五六年的開發人員,仍然不停地生產黑箱程序:出現問題的第一反應是直接殺掉進程重啓(天哪大家的程序不能安全關閉嗎)。固然還有更生猛的,直接用開發機連上生產數據庫(防火牆上開個洞)去調試。安全
你說他們技術很差嗎?明明各類技術問題也能搞定。你說他們沒有系統意識?作過的程序也不簡單。可是,他們作的充其量只能叫「程序」,而不是工程上成熟的「系統」。微信
怎樣的程序不是黑箱?你須要考慮它的層次劃分,你須要考慮哪些(功能以外的)運行信息必須暴露和記錄,以什麼方式暴露記錄,你甚至還須要考慮這些暴 露和記錄對性能的影響,以及程序須要對外提供什麼操縱接口……當你把這一切都考慮清楚,寫出可以讓運行細節「盡在掌握中」的程序的時候,你的一條腿就邁進 了「工程」的大門。網絡
這方面,互聯網和軟件開發的大廠會更加關注一些,但也不是說我的就毫無追求的空間了。網絡爬蟲你們都會寫,你們也都知道若是要數據抓得準,調試起來 很麻煩。我有個朋友在某大廠寫過一套「可視化」的爬蟲,能夠用逐步操縱語句的執行,迅速定位問題所在。這種水平的工程師,屬於可遇而不可求的類型,每次說 起來你們仍然嘖嘖稱讚。更多精彩內容關注微信公衆號:北京尚學堂。數據結構
第2、工程師注意實現和接口分離數據結構和算法
Java面試的一道經典問題是:請描述抽象類和接口的區別。一般,你們都會知道「接口」和「實現」要分離。不幸的是,不少人理解的「接口」,只是狹義的特定語言提供的Interface,而沒有考慮「接口」真正的含義。
接口的真正含義是什麼?計算機最擅長處理的是信息,它可讓信息脫離現實的障礙高速流動起來。若是說「實現」是幹髒活累活,「接口」就是發出幹髒活累活指令的窗口。髒活累活幹一遍就足夠了,但發指令的窗口卻能夠有千千萬萬。
更具體一點說,完成功能的是程序員,完成功能而且設想它會在什麼狀況下使用,而且讓人方便使用的,是工程師。我見過很多這樣的程序:登陸會話一開始 放在本地內存裏沒問題,到了要切換到數據庫裏方便會話轉移就得大興土木,雖然要作的其實仍然只是存取而已;程序自動加載的數據出了問題,就根本不能手動加 載;之前手動加載的數據,改爲自動加載就要推倒重來……
有沒有接口意識,能不能真正區分接口和實現,這是區分程序員和工程師的一大標識。
第3、工程師注重功能的邏輯聯繫
不少系統都在不斷的變化和改進過程當中,程序員看到的是功能點,工程師看到的是功能點之上的邏輯。
任何系統固然都是由若干功能構成的。但在功能點之上,還須要一張有邏輯意義的大網,才能把功能點組合起來,把複雜度下降,成爲你們能理解的對象。最簡單的「登陸」,就包含數據輸入、數據驗證、登陸信息記錄等等功能,「登陸」是這些功能的邏輯集合,也是理解這些功能的基礎。
隨着時間的推移,業務的增加,新功能可能愈來愈多,好比用戶數據的加載,對好友的通知,廣告的推送準備等等。這些功能實現起來固然都容易(由於很具 體),但功能堆積的後果是複雜度急劇上升,由於功能之間的邏輯聯繫被切斷了。因此,工程師必然須要思考,這些功能應該怎麼組合,放到哪些具備邏輯意義的動 做——好比「登陸」裏去?正是通過這樣持續不斷的思考,系統的複雜度纔可以被一直維持在較低的水平,容易讓你們理解。
這個例子看起來很簡單,但作起來卻沒那麼容易。我有時看到複雜的系統操做手冊,簡直讓人啼笑皆非:1) 點這裏;2) 點那裏;3) 輸這個…… 這些操做對應的邏輯意義那麼準確,分明就該是一次性自動完成的啊,把它們割裂開來的後果大大提升了系統的複雜度,既不方便維護,也不方便操做。最後來擦屁 股的,只能是開發人員本身。
我常常反思本身接受的教育,在學校裏寫程序,和工做了寫程序,有那麼一點相同,但又好像徹底兩回事,到底有什麼不一樣,只有親自體會、思考了才能明 白,因此我想把本身的所見所感寫出來。悟性好的有機會接受很好訓練的同窗,估計不須要了解這些。但對於沒有這樣條件的同窗,希望個人這點唸叨能給大家一點 幫助。更多精彩內容關注微信公衆號:北京尚學堂。
若是你的目標是就業,而且是高薪就業,那麼北京尚學堂是你正確的選擇。北京尚學堂一直在爲改變中國IT教育努力着。十年以來,北京尚學堂堅守「爲莘莘學子改變命運而講課」這份情懷,不忘初心。感謝你們的閱讀!
本文做者北京尚學堂原創。如需轉載請聯繫做者受權,未經受權,轉載必究。
更多猛料!歡迎掃描上方二維碼關注北京尚學堂官方微信公衆號(資料領取驗證消息:156)