我多次聽經(jīng)理或招聘人員說,優(yōu)秀工程師是可以與其他優(yōu)秀工程師交換的。他們可能會(huì)說,“首席工程師為這個(gè)項(xiàng)目選擇了 F# 語言,如果外面沒有太多的 F# 開發(fā)者,那么有幾年經(jīng)驗(yàn)的優(yōu)秀開發(fā)者應(yīng)該也還不錯(cuò)。”
我還聽說過一些這樣的言論,“我知道他們是前端人員,但我們現(xiàn)在需要他們做些后端工作。因?yàn)樗麄儽旧砗軆?yōu)秀,所以這沒什么大不了的。”
如果你相信這些蠢話,那我都可以把布魯克林大橋賣給你了。我還創(chuàng)立了下一個(gè)獨(dú)角獸公司,業(yè)務(wù)就是把冰賣給愛斯基摩人!我敢肯定,公司很快會(huì)有 10 億美元的估值!機(jī)會(huì)難得,快來投資吧~
好吧,不開玩笑了,說實(shí)在的,“優(yōu)秀的”軟件工程師可以交換,這樣的想法并不靠譜。我有時(shí)會(huì)對(duì)軟件工作感到疑惑,是不是我在簡歷上寫,“我保持良好的記錄,不斷在新技術(shù)上開拓馳騁”,然后我就能去任何想去的公司了?
我不敢相信今天要坐下來和你解釋這一點(diǎn),但是,現(xiàn)在讓我們從語言差異開始說起。實(shí)際上,我已經(jīng)將多種語言的代碼投入生產(chǎn),從 Scala 到 C#,從 Java 到 JavaScript。即使我能在幾周內(nèi)學(xué)會(huì)任何類 C 語言的的語法,(給別人可能需要更多時(shí)間,)我仍然清楚地知道,我不會(huì)用一種新的語言去開發(fā)一個(gè)生產(chǎn)代碼庫。
那么行業(yè)或商業(yè)背景呢?我已經(jīng)涉獵在很多領(lǐng)域,包括健康衛(wèi)生、電子商務(wù)、教育和電信。我是否應(yīng)該認(rèn)為我有資格在社交媒體工作哪?那么制造業(yè)、航空航天、數(shù)字加密貨幣(Cryptocurrency)哪?我的領(lǐng)域究竟能拓展到哪一塊?在我被要求從 Web 過渡到移動(dòng)、桌面或物聯(lián)網(wǎng)時(shí),也發(fā)生了同樣的情況。
現(xiàn)在,讓我給你講個(gè)小故事。去年,在做后端 Java web 服務(wù)工程師的全職工作時(shí),我還參與了另一個(gè)團(tuán)隊(duì)的工作,他們要在 Ionic Framework 中做一個(gè)移動(dòng)應(yīng)用程序,并使用 Angular、TypeScript 和一些定制庫打組合拳。直到長達(dá)八個(gè)月的項(xiàng)目臨近結(jié)束時(shí),我才得以“適應(yīng)”這種融合了 Ionic/Angular/TypeScript 的工作方式。實(shí)際上,“適應(yīng)”這個(gè)詞可能有點(diǎn)夸大其詞。但仍然困擾我的是,我要在控制器中公開字段,因?yàn)樾枰谝晥D中顯示它們,或者常量應(yīng)該與其他變量一樣命名。
順便一說,如果你想在 JavaScript 中使用靜態(tài)類型(static typing),你很快就會(huì)發(fā)現(xiàn),這條路走不通。必須準(zhǔn)備好“任何”類型!不過,我喜歡使用的 RxJs 訂閱。
在項(xiàng)目結(jié)束后,我愉快地撤了。我現(xiàn)在再也不會(huì)自稱為 TypeScript 或移動(dòng)開發(fā)者了。這不是要在口頭上表達(dá)優(yōu)越性,而是一個(gè)簡單的經(jīng)驗(yàn)問題:八個(gè)月的時(shí)間不足以證明我在此方面的資質(zhì)。我敢打賭,任何全職編程的人都會(huì)同意我的看法。
一個(gè)花了幾年時(shí)間研究某種語言的開發(fā)者,將能夠毫不費(fèi)力地用它思考。她會(huì)在腦海中隨時(shí)準(zhǔn)備好所有需要的資源來完成任務(wù),然后繼續(xù)投入下一個(gè)任務(wù)。她了解語言環(huán)境,可以輕松地將標(biāo)準(zhǔn)庫和第三方庫結(jié)合成一個(gè)具有內(nèi)聚性的新功能,就像一把鑰匙對(duì)應(yīng)一把鎖一樣,以此來輕松地解決問題。然而,當(dāng)她不知道什么是可用的時(shí)候,她會(huì)重新造輪子,或者更糟的情況是,她會(huì)完全不知所措。
每一種語言都有著其獨(dú)特的習(xí)慣用語、構(gòu)建和依賴管理工具、框架、庫、在線社區(qū)、IDE 等一系列東西,這些東西在日常實(shí)踐中,對(duì)開發(fā)者生產(chǎn)力的影響比我們想象的要大得多。
但是,所有的語言都一樣嗎?我是說,C# 和 C++ 的開發(fā)者,到底有什么區(qū)別?“只是 # 和 ++ 的區(qū)別,哈哈,沒什么大不了的!”快,把說這話的人扔去喂獅子!
我不是說任何人都不應(yīng)該更換自己的語言、行業(yè)或設(shè)備。我只是說,程序員是不一樣的。一個(gè)以 F# 為主要語言編寫應(yīng)用程序的軟件團(tuán)隊(duì),不會(huì)從我的 Java 經(jīng)驗(yàn)中獲益,盡管我也花了大量時(shí)間寫 Scala。我只是說,我們不能找到那些“優(yōu)秀的開發(fā)者”,然后出于奇思妙想,隨機(jī)地把他們拖到不同的團(tuán)隊(duì),并期望他們能夠發(fā)揮出應(yīng)有的效果。我是說,不要把所有“優(yōu)秀的”開發(fā)者當(dāng)作是可以交換的。
可交換開發(fā)者的神話是不現(xiàn)實(shí)的。人與人之間的不同無法消除,并愿每個(gè)人都能找到最適合自己的那個(gè)角色!
-
軟件工程師
+關(guān)注
關(guān)注
8文章
218瀏覽量
21136
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論