 你真正了(le)解程序員和(he)工程師嗎?
							時(shi)間:2015-11-11      來源:未(wei)知
							你真正了(le)解程序員和(he)工程師嗎?
							時(shi)間:2015-11-11      來源:未(wei)知 
							就(jiu)我個人(ren)(ren)理解來看,程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)員(yuan)與工(gong)程(cheng)(cheng)(cheng)(cheng)(cheng)師(shi)(shi)(shi)沒有(you)什(shen)么不(bu)(bu)同(tong),當(dang)然(ran)也有(you)人(ren)(ren)會這樣(yang)說,好好干兩年的(de)話,可以迅速從(cong)程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)員(yuan)成(cheng)長為工(gong)程(cheng)(cheng)(cheng)(cheng)(cheng)師(shi)(shi)(shi),對這樣(yang)的(de)闡述,你會不(bu)(bu)會感到詫(cha)異,為什(shen)么我會有(you)這樣(yang)的(de)理解,原因是從(cong)周邊的(de)很多招聘(pin)啟(qi)事來看,程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)員(yuan)就(jiu)等(deng)同(tong)于工(gong)程(cheng)(cheng)(cheng)(cheng)(cheng)師(shi)(shi)(shi),只不(bu)(bu)過工(gong)程(cheng)(cheng)(cheng)(cheng)(cheng)師(shi)(shi)(shi)是換了一個好聽(ting)的(de)名字(zi)而已,但在實(shi)際工(gong)作中(zhong)(zhong),兩者確實(shi)有(you)很大的(de)不(bu)(bu)同(tong)點,程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)員(yuan)和工(gong)程(cheng)(cheng)(cheng)(cheng)(cheng)師(shi)(shi)(shi)從(cong)本(ben)質來講確實(shi)不(bu)(bu)同(tong)——程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)員(yuan)只負責寫(xie)程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu),而工(gong)程(cheng)(cheng)(cheng)(cheng)(cheng)師(shi)(shi)(shi)可以再現實(shi)世界中(zhong)(zhong)創造出更有(you)價值的(de)程(cheng)(cheng)(cheng)(cheng)(cheng)序(xu)(xu)。
但從軟件(jian)開發(fa)人員(yuan)(yuan)本身來(lai)講,他們甚至(zhi)都(dou)不太清楚兩者之間(jian)的關系,甚至(zhi)做了(le)很久也只(zhi)能算是(shi)程序員(yuan)(yuan)而不是(shi)嚴格(ge)意義上的工程師,下面(mian)所講內容(rong),是(shi)關于程序員(yuan)(yuan)和工程師的差別(bie),看(kan)看(kan)你到底了(le)解多少(shao)?
第一、工程師不寫黑箱程序(xu)
“程序(xu)=數據(ju)結(jie)構+算法”,這個著名的公(gong)式大家都(dou)知(zhi)道(dao),不(bu)幸的是,它不(bu)適合描述工程領域(yu)或者現(xian)實世界(jie)的程序(xu)。有很(hen)多程序(xu),數據(ju)結(jie)構和算法都(dou)寫得很(hen)棒,功能足夠(gou)強大,系統足夠(gou)復雜,但(dan)是——它很(hen)難調(diao)試,一跑起來就無法停止,而且誰也不(bu)知(zhi)道(dao)程序(xu)現(xian)在到底(di)在干(gan)什么,里面發生了什么。
不了解實(shi)情(qing)的(de)外(wai)行人一定覺得很可笑,但你(ni)敢(gan)說他(ta)們技術不好,沒有(you)系(xi)統(tong)意識么?他(ta)們做(zuo)的(de)程(cheng)序也都不簡單,但充其量也只能算(suan)是(shi)“程(cheng)序”,而不能稱為廣泛意義(yi)上的(de)成熟(shu)系(xi)統(tong)。
如果你(ni)能很好(hao)地了解和考(kao)慮(lv)清(qing)楚所寫程序需要對外提供什(shen)么操(cao)縱借口等(deng)等(deng),等(deng)你(ni)吧(ba)一(yi)切都考(kao)慮(lv)的非常清(qing)楚,寫出的程序盡在自(zi)己(ji)的掌握之(zhi)中,那么你(ni)的一(yi)條(tiao)腿(tui)就已(yi)邁進(jin)了工程師的大門。
第二(er)、工程師注意(yi)實(shi)現和(he)接口分離
下面(mian)有這(zhe)樣一道(dao)JAVA面(mian)試當中的一道(dao)題,請描述抽象類(lei)和(he)接(jie)口(kou)(kou)的區別,通常大家會這(zhe)樣回答,接(jie)口(kou)(kou)和(he)實現要分(fen)離,這(zhe)種理解知識狹義上的特(te)定語言提供的interface,沒(mei)有真(zhen)正(zheng)(zheng)考慮接(jie)口(kou)(kou)的真(zhen)正(zheng)(zheng)含義。
有沒(mei)有接(jie)口意(yi)識,能不(bu)能真正區分(fen)(fen)接(jie)口和實現,這是區分(fen)(fen)程序員和工程師的一(yi)大標識。
第三(san)、工程師注重功(gong)能的邏輯聯系
很(hen)多系統都在不(bu)斷的(de)變化和改進過程當中,程序員只看到(dao)的(de)是功(gong)能點,而工程師(shi)看到(dao)的(de)則是功(gong)能點之上的(de)內在邏輯(ji)。
隨著(zhu)時間的(de)(de)(de)(de)推移,業(ye)務的(de)(de)(de)(de)增(zeng)長,新(xin)功能(neng)(neng)(neng)可能(neng)(neng)(neng)越來越多,比(bi)如用戶數據的(de)(de)(de)(de)加載,對好友的(de)(de)(de)(de)通知,廣(guang)告的(de)(de)(de)(de)推送準備(bei)等(deng)等(deng)眾(zhong)多新(xin)功能(neng)(neng)(neng)。這(zhe)些(xie)功能(neng)(neng)(neng)實現起來當然都容易(因為很具體),但功能(neng)(neng)(neng)堆積的(de)(de)(de)(de)后果是(shi)復(fu)雜度(du)(du)急劇(ju)上升(sheng),因為功能(neng)(neng)(neng)之間的(de)(de)(de)(de)邏(luo)輯聯系(xi)被切斷了。所以(yi),作(zuo)為工程師的(de)(de)(de)(de)你(ni),必(bi)然需要(yao)思(si)考,這(zhe)些(xie)功能(neng)(neng)(neng)應該怎么組合,放(fang)到哪些(xie)具有邏(luo)輯意義的(de)(de)(de)(de)動作(zuo)——比(bi)如“登錄”里去?正是(shi)經過這(zhe)樣(yang)持續不(bu)斷的(de)(de)(de)(de)思(si)考,系(xi)統的(de)(de)(de)(de)復(fu)雜度(du)(du)才能(neng)(neng)(neng)夠被一直維持在較低(di)的(de)(de)(de)(de)水平(ping),容易讓(rang)大家(jia)理解。
以上(shang)三(san)點內容是重要的(de)幾個不同點,如(ru)果(guo)能夠經常(chang)反思(si),不斷總結(jie),我想(xiang)一(yi)定會(hui)找到相應(ying)的(de)突破口,從(cong)程序員(yuan)向工(gong)程師轉變還有什么難度……

