Categories
程式開發

都是程序員,憑什麼他工資比我高,下班比我早?


現階段,應該沒有哪一個職業比程序員更加強調學習的了。看看市場上針對程序員的培訓領域有多火爆,就能看出來程序員對於能力提升的需求有多強烈了。

對於一名優秀的程序員來講,學習和思考是貫穿整個職業生涯的事情。尤其是在當下日新月異的人工智能時代,越來越多的程序員重視自己的技能的提升。

在之前的QCon 大會上,InfoQ 隨機採訪了部分參會者:“對於程序員來說,什麼能力才最重要?什麼才是程序員的核心競爭力?”,被採訪者無一例外都是奮鬥在一線的程序員,然而他們的回答五花八門,整理出來後有以下幾種:

  • 代碼整潔有註釋,一眼看過去讓人很舒服;
  • 測試階段零 Bug,減少返工;
  • 環境搭建 -API 串聯 – 功能研發 – 模塊測試 – 應用部署 – 服務上線等一條龍;
  • 軟件行業技術升級太快,必須具備極強的學習能力;
  • 有平台技術架構的設計能力;
  • 溝通及團隊協作能力;
  • 光腦子好使,身體也要好,要不然 996 怎麼扛;

總結一下,可以歸納為快速學習能力、架構能力及抽象思考這三個能力被大多數程序員認同。

快速學習能力:太難了,學不動了

計算機領域內的技術更迭速度加快,企業業務變更更加頻繁,對於程序員的技能要求也越來越多。

在計算機軟件開發領域,幾乎每天都有新技術誕生,每幾年就會進行一次大的技術潮流變換。從最早的煙囪式架構到分佈式再到微服務,從瀑布式到敏捷開發與DevOps,從傳統IDC 到全面上雲,從大量的重複性工作被機器學習所取代,巨大數據體量的場景引發了大數據技術的革命,數據從離線分析到線上分析再到實時分析…

太多的技術在不斷更新,因此終身學習就成為了很多技術人的信仰。這也是程序員與其它行業相比之下差異最大的地方。程序員是絕對不能故步自封的,稍微落後一點可能就是落後於競爭對手、落後於你的同事、落後於那些剛畢業的小年輕們。在工作和生活壓力不斷上漲的現在,前有工作後有家庭的程序員,學習成本的提高也就意味著學習時間被進一步壓縮,對學習效率的要求也就越來越高。

這也是為什麼在 2019 年,程序員所說的最多的一句話就是“我可太南了,真的學不動了”。

架構能力:這和我敲代碼有什麼關係?

在這個技術迭代日新月異的時代,“亂拳打死老師傅”已經不再稀奇。

相信有不少的開發者會有這樣的想法,“架構設計是架構師應該考慮的東西,程序員只是負責將其中部分的功能實現而已”。當然如果你只是把自己定位成初級執行層面的程序員,那這麼理解的確沒錯。但是在實際的工作中,你不可能永遠只用一種語言,也不可能永遠只做初級的執行工作。

舉一個例子,如果只專注於一種語言,那所遇到的問題模式很可能就會限制在這種語言相關的領域內。比如你只會使用C 語言,對於手頭所出現的問題,是絕對不可能想出一種面向對象的解決思路,因為C 語言不提供這樣的語言特徵;同樣如果你的技術都集中的Java 上,那對所有問題的解決思路都會沿著面向對象的方向,即便是過程式編程對於解決問題會更優的情況下也同樣如此。這也證明瞭如果你的技能儲備不夠豐富,那麼所能解決問題的能力相應的也會被削弱。

因此,系統化的思維和架構能力也被視為程序員的綜合能力。作為一名有經驗的程序員,其對於架構的理解,將能夠極大拓寬其對於業務、功能、價值以及實現方式的理解。架構的本質是管理複雜性,架構對於敲代碼來說是一套完全不同的理念。架構能力並非是一項具體的能力,而是由多個能力整合而成的對於系統、業務、架構的理解能力,其它能力越強大,架構能力也就越強。

抽象思考能力,抽象什麼?

抽象能力怎麼強調都不為過,因為決定你能力強弱的不是編程語言,而是自身的編程能力。

隨著業務越來越複雜、需求越來越多、交付頻率越來越快,程序總是在擴展和重構之間徘徊,這一點相信大家都會認同。但對於程序員來說,要做的就是把人的想法通過電腦的二進製表現出來。眾所周知程序員是一個十分耗費腦力的職業,在編寫程序時離不開各種各樣的數據結構與算法,經常需要面對各種複雜的業務和邏輯。如果抽象能力不強,就很難降低問題的複雜程度,無法把具體變成概念,導致編程能力也很難有質的提高。

說了這麼多,什麼是抽象能力?抽象能力就意味著比較高的開發效率,同時更重要的是,不會因為抽象而降低研發的效能。面對紛繁複雜、眼花繚亂的技術類型以及越來越快的交付效率,我們程序員完全不用手忙腳亂。掌握了框架層面的抽象能力後,改善自己的複用習慣,學會了一個之後,其它的都是水到渠成。

就像為什麼現在高校的計算機係都會開通 C++ 課程?一方面它最具有代表性,另一方面它也最難,學會了 C++,其它的編程語言雖然都有不同,但也可以很快上手,這就是抽象能力所帶來的改變。

我們知道,絕大多數新技術其實都脫胎於一些既有的技術體系。如果能夠建立起自己的技術思維體系,掌握這些新技術背後的思想和原理,在面對新技術時就可以快速把握它的本質特徵與思路方法,并快速推導出是如何實現的。而這一能力,就被稱為程序員的抽象能力。

在抽象推導的過程中,需要程序員深入理解業務並逐漸優化系統設計。正是在這樣逐漸抽象的過程中,一些抽象能力極強的程序員開發出了一系列方便大多數程序員應用的開發框架、中間件等等。也正是這些東西,幫助他們能夠更加高效的“偷懶”,從而完成在代碼質量和效率上的飛躍。

現階段,對於框架的理解能力以及將流程、模式抽象為框架的能力,正在越來越重要。因為對於企業來說,一款成功的框架不僅能夠提升效率,且能夠使所設計的應用在可用性、可擴展性、可靠性等方面獲得“低保”,至少確保不會出大問題。現階段程序員所要做很大一部分工作就是如何在固有框架的基礎上來完善自身的產品性能。

也許,學會利用框架來高效“偷懶”才是研發效率提升的關鍵因素

沒有什麼功能是無法實現的,如果網上的開源框架不行,就自己寫一個更好的。

上面這句話是很多技術大牛的口頭禪。這群技術大牛,或者說站在金字塔上層的開發者,他們都非常善於創造偷懶的機會,他們能夠尋找一切提高效率的工具,必要時還可以通過編寫自動化腳本、發明新的工具來改善日常的工作效率,讓自己的工作變得更高效。在一次次對於效率提高的思考中,其對於架構和框架的抽象能力也在不斷得到加強。

作為程序員,不得不承認當前所做的 80% 的功能在市場上都能找到類似的參考。也就是說,你現在所做的東西,很多都已經被程序員前輩所實現過了。那麼既然已經有了現成的模板可用,我們就完全可以在巨人的肩膀上進行迭代與創新,把時間和精力都集中在特有的功能實現上。
今天幾乎每一名程序員都明白要避免重複造輪子的事情,那麼如何才能避免重複造輪子,如何提高平常工作中的研發效率呢?我們可以得出結論,在技術洪流面前,程序員應該更加專注在能力的抽象層面上。

因此,我們就需要向這個方向去努力。在 2019 年底,從整合自身所掌握的開發能力開始,對這一年中的經驗與教訓進行升級、歸納、抽像以及迭代,以幫助自己能夠在未來更好的複用以及迭代自身的技術體系。
那麼具體到方式上,有怎樣的形式和途徑來體現出我們的抽象能力呢?如何加速我們的開發效率?有怎樣的途徑來有效的整合、抽像我們這一年中技術成長呢?

最直接的方式,就需要我們將平常所積累的、重複的、可複用價值高的代碼部分整合起來,使用我們解決方式的邏輯,把這一部分的功能模塊化、體系化,形成可複用價值。但在此之前,工欲善其事必先利其器,要做這些東西,我們程序員也要有一件稱手的兵器和平台才行。這個兵器,要具備能夠協助程序員將自身能力整合起來、要能夠快速提升程序員開發效率、要能降低程序員的日常學習成本等…

看起來似乎很難,因為作為兵器,要不就像槍一樣長、要不就像劍一樣鋒利、要不就像流星錘一樣能砸碎一切,很難做到三者兼備。然而現在就有這樣一個能夠全方位提升開發者編程能力的平台,華為雲 DevCloud 的代碼託管服務 CodeHub ,作為華為雲面向開發者的基於 Git 的在線代碼託管服務,其是一款具備安全管控、成員 / 權限管理、分支保護 / 合併、在線編輯、統計服務等功能的雲端代碼倉庫。

CodeHub 為你的編程思維習慣注入更多元素

擁有一套開發資源完備,享有海量源代碼資源庫會是養成習慣非常關鍵的部分。 CodeHub 在代碼倉庫中為程序員提供了大量的具備極高可參考價值的代碼模板以及基於不同開發語言和應用場景的示例源代碼,通過這些模板以及源代碼示例,程序員可以在雲端快速創建自己的項目,從而極大降低了程序員面對新產品的學習成本。此外通過對引用的框架進行再創造,創造出真正貼合某個場景下的技術框架,從而創造出更強大也更適合自己需要的框架,進一步提升自己的代碼抽象能力。

在創建完成項目後,程序員可以直接在雲端配置流水線服務與相關雲資源,實現應用在雲端的實時運行,實現所見即所得。目前已匯聚華為開發者聯盟、AI、鯤鵬、雲原生、IoT 等大量官方模板。

當然,只是擁有官方模板肯定是遠遠不夠的,除官方模板之外,CodeHub 上已經擁有了諸如DevOps 全流程體驗Demo、鳳凰商城Demo、B2C 模式的電子商城微信小程序、人體跟踪開發體驗Demo 等多款優秀的第三方的代碼框架。

此外,華為雲 CodeHub 面向全球程序員廣發英雄帖,邀請各位程序員積極參與CodeHub 的代碼共建中來,通過鼓勵大家將自己所抽像出的框架放到雲端,貢獻自己的優秀代碼模板,向其他開發者分享自己的開發能力,實現上文所說的能力具象化。從最起初只是對自己能力的整合,到慢慢開始有開發者應用自己的框架作為模板,一步步見證自己的成長軌跡,讓開發真正始於 80%,讓開發者更加專注在核心功能的實現上,共建高效率的開發生態。