成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

程序員和工程師有什么不一樣?

網絡
我剛剛工作的時候,面試官曾經跟我說:好好干兩年,可以迅速從程序員成長為工程師。當時我覺得太詫異了,從很多招聘啟事來看,“程序員”不就等于“工程師”嗎,只是“工程師”更好聽一些而已。等我工作久了,才知道“程序員”和“工程師”真的是不一樣的——程序員只寫程序,工程師寫能在現實世界中創造價值的程序。

我剛剛工作的時候,面試官曾經跟我說:好好干兩年,可以迅速從程序員成長為工程師。當時我覺得太詫異了,從很多招聘啟事來看,“程序員”不就等于“工程師”嗎,只是“工程師”更好聽一些而已。等我工作久了,才知道“程序員”和“工程師”真的是不一樣的——程序員只寫程序,工程師寫能在現實世界中創造價值的程序。

 

[[145361]]

 

可惜,很多軟件開發人員未必清楚兩者的差別,甚至做了很久也只算程序員而不算嚴格意義上的工程師。所以我就自己的觀察和經驗,談談程序員和工程師的差別。

 

***、工程師不寫黑箱程序

 

“程序=數據結構+算法”,這個著名的公式大家都知道,不幸的是,它不適合描述工程領域或者現實世界的程序。有很多程序,數據結構和算法都寫得很棒,功能足夠強大,系統足夠復雜,但是——它很難調試,一跑起來就無法停止,而且誰也不知道程序現在到底在干什么,里面發生了什么。

 

別覺得好笑,我遇到過很多工作三四年甚至五六年的開發人員,仍然不停地生產黑箱程序:出現問題的***反應是直接殺掉進程重啟(天哪你們的程序不能安全關閉嗎)。當然還有更生猛的,直接用開發機連上生產數據庫(防火墻上開個洞)去調試。

 

你說他們技術不好嗎?明明各種技術問題也能搞定。你說他們沒有系統意識?做過的程序也不簡單。但是,他們做的充其量只能叫“程序”,而不是工程上成熟的“系統”。

 

怎樣的程序不是黑箱?你需要考慮它的層次劃分,你需要考慮哪些(功能之外的)運行信息必須暴露和記錄,以什么方式暴露記錄,你甚至還需要考慮這些暴露和記錄對性能的影響,以及程序需要對外提供什么操縱接口……當你把這一切都考慮清楚,寫出能夠讓運行細節“盡在掌握中”的程序的時候,你的一條腿就邁進了“工程”的大門。

 

這方面,互聯網和軟件開發的大廠會更加關注一些,但也不是說個人就毫無追求的空間了。網絡爬蟲大家都會寫,大家也都知道如果要數據抓得準,調試起來很麻煩。我有個朋友在某大廠寫過一套“可視化”的爬蟲,可以用逐步操縱語句的執行,迅速定位問題所在。這種水平的工程師,屬于可遇而不可求的類型,每次說起來大家仍然嘖嘖稱贊。

 

第二、工程師注意實現和接口分離

 

Java面試的一道經典問題是:請描述抽象類和接口的區別。通常,大家都會知道“接口”和“實現”要分離。不幸的是,很多人理解的“接口”,只是狹義的特定語言提供的Interface,而沒有考慮“接口”真正的含義。

 

接口的真正含義是什么?計算機最擅長處理的是信息,它可以讓信息脫離現實的障礙高速流動起來。如果說“實現”是干臟活累活,“接口”就是發出干臟活累活指令的窗口。臟活累活干一遍就足夠了,但發指令的窗口卻可以有千千萬萬。

 

更具體一點說,完成功能的是程序員,完成功能并且設想它會在什么情況下使用,并且讓人方便使用的,是工程師。我見過不少這樣的程序:登錄會話一開始放在本地內存里沒問題,到了要切換到數據庫里方便會話轉移就得大興土木,雖然要做的其實仍然只是存取而已;程序自動加載的數據出了問題,就根本不能手動加載;以前手動加載的數據,改成自動加載就要推倒重來……

 

有沒有接口意識,能不能真正區分接口和實現,這是區分程序員和工程師的一大標識。


第三、工程師注重功能的邏輯聯系

 

很多系統都在不斷的變化和改進過程中,程序員看到的是功能點,工程師看到的是功能點之上的邏輯。

 

任何系統當然都是由若干功能構成的。但在功能點之上,還需要一張有邏輯意義的大網,才能把功能點組合起來,把復雜度降低,成為大家能理解的對象。最簡單的“登錄”,就包含數據輸入、數據驗證、登錄信息記錄等等功能,“登錄”是這些功能的邏輯集合,也是理解這些功能的基礎。

 

隨著時間的推移,業務的增長,新功能可能越來越多,比如用戶數據的加載,對好友的通知,廣告的推送準備等等。這些功能實現起來當然都容易(因為很具體),但功能堆積的后果是復雜度急劇上升,因為功能之間的邏輯聯系被切斷了。所以,工程師必然需要思考,這些功能應該怎么組合,放到哪些具有邏輯意義的動作——比如“登錄”里去?正是經過這樣持續不斷的思考,系統的復雜度才能夠被一直維持在較低的水平,容易讓大家理解。

 

這個例子看起來很簡單,但做起來卻沒那么容易。我有時看到復雜的系統操作手冊,簡直讓人哭笑不得:1) 點這里;2) 點那里;3) 輸這個…… 這些操作對應的邏輯意義那么準確,分明就該是一次性自動完成的啊,把它們割裂開來的后果大大提高了系統的復雜度,既不方便維護,也不方便操作。***來擦屁股的,只能是開發人員自己。

 

我經常反思自己接受的教育,在學校里寫程序,和工作了寫程序,有那么一點相同,但又好像完全兩回事,到底有什么不同,只有親自體會、思考了才能明白,所以我想把自己的所見所感寫出來。悟性好的有機會接受很好訓練的同學,估計不需要了解這些。但對于沒有這樣條件的同學,但愿我的這點念叨能給你們一點幫助。

責任編輯:李英杰 來源: 虎嗅網
相關推薦

2015-08-13 10:38:25

程序員工程師

2018-05-25 19:13:01

程序員技能溝通

2023-03-20 08:19:23

GPT-4OpenAI

2012-03-07 17:24:10

戴爾咨詢

2012-12-20 10:17:32

IT運維

2010-11-24 20:18:48

Microsoft L統一溝通

2010-07-07 14:37:40

MeeGo英特爾

2015-10-22 10:23:34

程序員工程師不同

2011-03-14 16:51:24

2021-12-23 15:11:46

Web 3.0元宇宙Metaverse

2018-02-28 10:16:51

程序員技能 PHP

2017-11-03 07:57:19

2025-04-03 08:21:18

2016-05-09 18:40:26

VIP客戶緝拿

2015-10-19 12:33:01

華三/新IT

2017-05-25 15:02:46

聯宇益通SD-WAN

2018-02-27 12:01:12

程序員PHP編程語言

2009-08-20 16:08:31

FCC美國寬帶計劃

2023-06-06 18:12:48

數字化轉型數字化

2018-04-17 10:51:12

華為
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区在线 | 在线观看黄色 | 成人欧美一区二区三区在线观看 | 日本亚洲欧美 | 本道综合精品 | 国产精品影视 | 亚洲第一av | 狠狠操狠狠搞 | www.一区二区三区.com | 亚洲精品自在在线观看 | 美女啪啪国产 | 国产精品视频导航 | 91视频在线观看 | 美女午夜影院 | 中文字幕在线播放第一页 | 国产精品亚洲一区 | 久久99深爱久久99精品 | 在线日韩av电影 | 91在线观看 | 九九国产在线观看 | 亚洲国产精品美女 | 久久lu | 国产精品久久久久久久毛片 | 免费a级毛片在线播放 | a视频在线| 欧美日韩精品在线免费观看 | 日本精品一区二区三区在线观看视频 | av在线免费观看网址 | 日本欧美视频 | 日韩不卡一区二区三区 | 日本久久久一区二区三区 | www.99热| 精品欧美乱码久久久久久1区2区 | 久久久国产一区 | 亚洲狠狠 | 精品国产99| 国产在线中文字幕 | 一区二区精品在线 | 在线观看成年视频 | 爱高潮www亚洲精品 中文字幕免费视频 | 国产精品久久久久久久久久久久 |