程序員的焦慮從何而來?
核心能力是什么?是架構(gòu)設(shè)計,關(guān)鍵細(xì)節(jié)設(shè)計的能力和經(jīng)驗。在海量服務(wù)器設(shè)計領(lǐng)域,核心能力,大概包含物理設(shè)計和軟件設(shè)計。物理設(shè)計包含:磁盤存儲設(shè)計,內(nèi)存緩存設(shè)計,核心數(shù)據(jù)結(jié)構(gòu)設(shè)計,一致性問題處理,容災(zāi)設(shè)計等;軟件設(shè)計方面包含:模塊劃分,接口定義,設(shè)計模式應(yīng)用,核心數(shù)據(jù)傳輸結(jié)構(gòu)設(shè)計等。擁有上面的核心能力,你用 C/C++,Java,甚至 Python 都可以實現(xiàn)。在這里,核心競爭能力跟語言其實沒有多大的關(guān)系。

我上面例舉的兩個例子,所涉及的核心能力,都是老掉牙的東西了。像磁盤存儲設(shè)計,內(nèi)存緩存的設(shè)計,軟件設(shè)計模式,都不是什么新鮮的東西,幾十年如此了,當(dāng)然會有細(xì)微層面的進(jìn)化。但大致如此。
所以焦慮的同學(xué)在焦慮什么呢?我看很多同學(xué)焦慮的是,又出了新的語言,新的框架,自己要跟不上了。我只能說,如果你在焦慮語言和框架的時候,你就已經(jīng)跟不上了。
歡迎加入學(xué)習(xí)群【892643663】,獲取全套免費(fèi)C/C++企業(yè)實戰(zhàn)級課程資源(素材+源碼+視頻)和編譯大禮包
首先,我并不是反對造輪子,通過造輪子這事,可以更加深入思考底層原理,算法,會去琢磨別的開發(fā)者是怎么編,為什么這么編。
后端開發(fā),亂中求穩(wěn)
比如做后端的用 Spring 框架,必須要研究 IOC、DI、AOP 這些原理,還可能會自己手寫一個仿 Spring 的 REST 框架。精通原理會讓你在框架更新時更快地理解變動,和更快地開發(fā),但這并不能減輕各類框架更新時所帶來的痛苦。比如 Spring MVC 從 1 到 2, 3,5,每一次迭代都會有相應(yīng)的兼容問題,你的項目必定依賴數(shù)以百計的第三方庫和框架,任何一次官宣迭代都是切膚之痛。
從 Spring MVC 到 Spring Boot,這種跨越式的換代更是給后端開發(fā)帶來巨大挑戰(zhàn),更別提 Spring Boot 向 Spring Cloud 微服務(wù)的轉(zhuǎn)變。
又或者長期項目中,任何一個小的第三方庫,都可能因為停止更新,或安全隱患帶來無窮無盡的項目重構(gòu)。你會問,為什么不自研?
項目不會給很多時間和預(yù)算,從頭開發(fā)。時間成本定死,給你自己造輪子的試錯機(jī)會就少。你可以開發(fā)一兩個輪子,但開發(fā)幾百個輪子是幾乎不可能的任務(wù),小團(tuán)隊不可能!你可能一個兩個輪子造的非常完美零瑕疵,但是其余每個輪子的各個方面都考慮到零瑕疵,這也是幾乎不可能的任務(wù)。業(yè)務(wù)需求變化非常大,比如開始設(shè)計是圓形,可能最終要六角形輪子。很有可能項目發(fā)布后,客戶又要從六角形輪子變?yōu)槲褰切屋喿樱ㄓ绕湓?UX 層面)。另一個例子,消息隊列,比如金融業(yè)有用 RabbitMQ 的習(xí)慣,目前看好像 Kafka 性能優(yōu)于 RabbitMQ,金融為什么不用。因為 RabbitMQ 推出事務(wù)性功能時,Kafka 還沒有,而金融業(yè)開發(fā)特別強(qiáng)調(diào)原子性。但隨著 Kafka 日益完善,很可能金融業(yè)開始使用 Kafa 替代 RabbitMQ,這對程序員又是挑戰(zhàn)。有人要問為什么不開始就自研 MQ?
中國那么大,也就阿里才自研了一個 RocketMQ,去哪兒自研了一個 QMQ。而且去哪兒也說了為什么自研:『MQ 在當(dāng)時也有很多開源的選擇:RabbitMQ, ActiveMQ, Kafka, MetaQ(RocketMQ 的前身)。首先因為技術(shù)棧我們排除了 erlang 開發(fā)的 RabbitMQ,而 Kafka 以及 Java 版 Kafka 的 MetaQ 在當(dāng)時還并不成熟和穩(wěn)定。而 ActiveMQ 在去哪兒網(wǎng)已經(jīng)有很多應(yīng)用在使用了,但是使用過程中并不一帆風(fēng)順:宕機(jī),消息丟失,消息堵塞等問題屢見不鮮,而且 ActiveMQ 發(fā)展多年,代碼也非常復(fù)雜,想要完全把控也不容易,所以我們決定自己造一個輪子。』
構(gòu)架師選擇框架,第一要素肯定是足夠地茁壯健康。但是就算當(dāng)時再怎么茁壯健康,過三五年可能也就是羸弱之軀。因為硬件和網(wǎng)絡(luò)是不斷迅速發(fā)展的,這和底層硬件原理萬年不變不同,構(gòu)架于底層系統(tǒng)之上的應(yīng)用框架,迭代速度非常快,框架與框架之間切換間隔也越來越短。
所以不少領(lǐng)域的程序員才會抱怨跟不上了。
為什么說前端和 App 開發(fā)的程序員更愛抱怨,因為這兩個領(lǐng)域和底層系統(tǒng)開發(fā)以及后端開發(fā)相比,更心累。底層系統(tǒng)和后端開發(fā)一般是著重一個字:穩(wěn),但是前端和 App 開發(fā)就一個字:變!
前端開發(fā),哀鴻遍野
前端開發(fā),離不開 JavaScript、CSS 和 HTML。你可知 05 年 AJAX 剛興起到如今各類前端框架百花爭鳴,中間經(jīng)歷多大變化?首先是 JS、CSS、HTML 自身標(biāo)準(zhǔn)不停變化,瀏覽器標(biāo)準(zhǔn)不停變化。
你想以一己之力做個還算完美的前端框架,全國到現(xiàn)在也只有 Vue 一個,何況還有個 team。對于做商業(yè)項目的大多數(shù)程序員,一邊寫業(yè)務(wù)代碼,一邊寫框架?沒幾家能做到,百度、騰訊和阿里,才有自己獨(dú)立的前端框架的,而且都是深耕五年以上。
而且甲方非常容易對 UX 這個層面指手畫腳,一天換四五個設(shè)計非常正常,但是程序員就難受了,一個 UX 的小改動,可能是對當(dāng)前框架做一個大的補(bǔ)丁。
App 開發(fā),痛徹心扉
最早 Symbian 系統(tǒng)一家獨(dú)大,BlackBerry 和 Windows Mobile 吃剩飯時,世界還是一片祥和,程序員就三種,一種是會 Symbian C++的,一種是會 JavaME 的,剩下一種會 C#。然后 iOS 和 Android 帶著 Windows Phone 突然出來攪局了,本來是件好事,世界以后無非也就是兩種系統(tǒng)嘛(BlackBerry 和 WP 忽略不計),大不了會 Symbian C++轉(zhuǎn)行 Objective-C,會 JavaME 的轉(zhuǎn)行 Android,會 C# 的繼續(xù) .Net。
但 Android 天生就不是一個省油的燈。
歡迎加入學(xué)習(xí)群【892643663】,獲取全套免費(fèi)C/C++企業(yè)實戰(zhàn)級課程資源(素材+源碼+視頻)和編譯大禮包
隨著廠家的加盟,史上最恐怖的 Android 系統(tǒng)“碎片化”來了。這意味著 App 開發(fā)必須在系統(tǒng)框架這個層面上被迫變化。Android 從 1.0 到 Pie,每一次系統(tǒng)變化,都是非常大的變化,變化到 Google Android 開發(fā)團(tuán)隊自己都在不停地打自己的臉,上個版本說好的 API,這個版本就不能用了,或者你得繞著彎子用。
你的團(tuán)隊可能做了一個很不錯的框架,下個版本,哎呦我去,部分功能被標(biāo)記為 Deprecated 或者直接禁用了。這也就是 Android 的開源庫在 Github 上一般活不過三年的原因。
軟件是一層,硬件碎片化更恐怖,哪一家移動開發(fā)公司不是要買幾百臺各類 Android 手機(jī)做測試,做各類補(bǔ)丁。這種情況下,你再提自己造輪子?連下輛車長什么樣都不知道,你還造輪子?
關(guān)鍵是 Google 自己都認(rèn)為這輛車有點造殘了,干脆做一倆新的吧,叫 Fuchsia,如果有一天 Google 宣布 Android 閉源或者不再更新,而轉(zhuǎn)向 Fuchsia,同時 App 開發(fā)轉(zhuǎn)向 Flutter 時,對那些抱怨跟不上的程序員,你還要批評是因為沒掌握核心?
再說 iOS,iOS 程序員在早期還笑得出來,這兩年也笑不出了,隨著機(jī)型的增多,加上蘋果開始力推 Swift,并且逐漸降低對 Objective C 的支持,他們也漸漸體驗到什么叫碎片化了。而且每一代 iOS 系統(tǒng)更新,也開始出現(xiàn) Android 類似的框架兼容問題。
最后不得不提的 Hybrid App,和跨平臺 HTML5 小程序。從 Cordova、ionic、React 再到各大流量渠道推出的內(nèi)置“小程序”,期間無數(shù)跨平臺框架,前赴后繼地嘗(xī)試(shēng)在移動世界一統(tǒng)江湖,千秋萬代。
每種框架必然在填了競爭對手的一個坑后,掉入另一個新的坑。除了做框架的那十幾個公司或組織的程序員外,都是使用者而不是“核心”掌握者,而那些死掉的框架背后的“核心”程序員,算什么呢?
寫在最后
程序開發(fā)圈內(nèi)一直有個認(rèn)識誤區(qū),各種語言或者各個技術(shù)層面之間相互鄙視,而處在鄙視鏈頂端的(有女朋友的)C 或 C++程序員往往語重心長地教育其它領(lǐng)域的程序員,做系統(tǒng)底層核心才是正統(tǒng)。從業(yè)多年,我從一開始的站在鄙視鏈中,到現(xiàn)在對各類語言和框架心存敬意,是因為我親身體會到了構(gòu)架各方面的各種痛苦。
正如汽車生產(chǎn)商的通用方案是在不同系列的車型里使用同一種發(fā)動機(jī),發(fā)動機(jī)固然是核心,但沒有底盤,車體構(gòu)架,內(nèi)飾,電路,中控等工程師,就不能生產(chǎn)一個完整的產(chǎn)品。而且一旦某種車型停產(chǎn),發(fā)動機(jī)可能會在新車型中繼續(xù)沿用,而其他工程師勢必要投入一個全新的設(shè)計工程中。
這些人,難道不是“核心”?
歡迎加入學(xué)習(xí)群【892643663】,獲取全套免費(fèi)C/C++企業(yè)實戰(zhàn)級課程資源(素材+源碼+視頻)和編譯大禮包
編程語言 程序員 c語言 C 語言
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。