軟體開發者升職加薪的 8 項技能
私下裡,經常有一些讀者問我:“二哥,作為一名軟體開發者,我應該掌握哪些技能,才能被領導賞識呢?”說實話,我心目中很多選項,不少於 20 個,但我斟酌再三,只挑選了其中最能讓你受益的 8 個,不僅能讓領導賞識你,還能讓領導給你升職加薪。
01、吃透一門程式語言
這個技能看起來似乎沒有必要強調,畢竟程式設計師不懂一種程式語言也說不過去啊。我之所以再次強調是怕你“貪心”,以為技多不壓身就拼了命的學很多種程式語言。
有個大二的學生就曾經問我:“你好呀,老哥,有個問題想諮詢一下您,我專業學的是 C#,但聽說以後不太好就業,所以就自學了一段時間 Python,但感覺越來越混亂了,您有什麼好的建議嗎?”
我只能說不混亂才怪。程式語言雖然有相似的語法,但畢竟是不同的程式語言啊,之間還是有很多差異的。對於初級程式設計師來說,切勿貪多,先把一門程式語言吃透再說,等你有了融會貫通的本領,再去學新的程式語言也不遲。
我剛剛查了一下(見下圖),C# 還是挺熱門的程式語言,沒到不太好就業的地步,別隨便聽信別人的話,要學會自己去判斷。Python 是門不錯的程式語言,增長勢頭很猛,但遠沒到那種獨霸天下的地步。
學校有不盡人意的地方,但不至於蠢到讓學生學一門已經被市場淘汰的程式語言。在這一點上,我寧願站在支援學校的立場上,否則就太糟糕了。
我承認,學霸學什麼都快,不僅學的快,還比平常人學得好,學得多,因為他有一套自己的學習方法,但大部分學生並不具備這種條件。如果你對自己沒有這種認知的話,很可能會陷入泥潭。
因此,我給出的建議是,深入並且專注於一種程式語言,當你對使用這種程式語言充滿信心時,再去學其他的程式語言也不遲。
02、整潔的程式碼
當你學會一門程式語言之後,接下來要考慮的事情就是讓你編寫的程式碼變得更整潔,更易於理解,更富有藝術。關於藝術,我想到了一段話,王小波在他的雜文《用一生來學習藝術》說的:
我念過文科,也念過理科。在課堂上聽老師提到藝術這個詞,還是理科的老師次數更多:化學老師說,做實驗有實驗藝術;計算機老師說,程式設計序有程式設計藝術。老師們說,怎麼做對是科學,怎麼做好則是藝術;前者有判斷真偽的法則,後者則沒有;藝術的真諦就是要叫人感到好,甚至是完美無缺;傳授科學知識就是告訴你這些法則,而藝術的修養是無法傳授的,只能夠潛移默化。
不得不說,偶像就偶像,把藝術的真諦闡述得很清楚。我見過不少臃腫的程式碼,它們讓我想起“裹腳布”這三個字;我也見過不少整潔的程式碼,它們讓我想起“藝術”這個詞,我想創造出它們的程式設計師一定富有工匠精神。
Elliot Chance 曾表達過這樣一個觀點,他說:“要分辨兩個程式設計師的優劣,就是給他們一樣的時間,越好的程式設計師寫出來的程式碼越少(當然是可以執行的)。”
我同意他的觀點。越多的程式碼並不一定代表著認真,有可能代表的是懶惰,懶得去思考,才會寫出臃腫的程式碼。如果我們程式設計師沒有這種(寫更少程式碼的)追求的話,那我們的程式設計技藝就只會原地踏步,長此以往的後果就是各種避免重複造輪子的第三方類庫就不會出現。
03、演算法與資料結構
說起來慚愧,在很長的一段時間裡,我對演算法和資料結構存在著很大的偏見,認為它們就好像懸掛在夜空中的月亮,雖然很美,但卻很遙遠。
因為這種偏見,在敲程式碼的過程中吃了不少的悶虧,經常遇到一些實際的問題,由於無法充分利用資料結構將資料之間的關係通過合適的演算法策略進行有效地儲存轉換,就導致程式的效能很低。
作為一個吃過虧的男人,我必須要負責任地提醒你,趁有大把的時間和精力,多投入一點到資料結構和演算法上面去。基礎知識就像是一座大樓的地基,它決定了我們的技術高度。資料結構和演算法就是最重要的基礎知識,學習它們的過程就像是在打地基。
舉個例子來說,假如你要在一個列表中對元素進行排序,那麼可採用的演算法就有下圖中的這 10 種,每種演算法所花費的時間,所佔用的記憶體都不盡相同。換句話說,如果你不能夠熟練地掌握演算法和資料結構,就很難找出一個優雅的解決方案。
長期來看,大腦思考能力是一個人最重要的核心競爭力,而演算法是為數不多的能夠有效訓練大腦思考能力的途徑之一。有了這項能力,很多別的程式設計師解決起來很困難的程式設計問題在你這裡就會迎刃而解。
04、基本的資料庫知識
雖然軟體開發人員更應該專注於程式設計而非編寫和優化 SQL(應該交給專業的資料庫管理員負責),但在我們國內,只有頂尖的企業才會有資料庫專家。扎心了。如果你想要在軟體開發這條道路上走得更高更遠,懂一些基本的資料庫知識是必須的,比如說:
- 如何將業務中的物件屬性轉化為資料庫欄位;
- 如何從資料庫中檢索資料,並將資料集拼接在一起;
- 如何往資料庫中插入、修改、刪除資料;
- 索引的資料結構及原理;
- SQL 語句的優化;
- 等等。
如果再懂一些資料庫分庫分表的中間價,那你可能就會成為團隊的寶貝了,畢竟所有的應用程式都要與資料庫互動,另外,資料庫是系統最先出現效能瓶頸的地方——總有你大展身手的時候。
05、技術框架
除了要吃透一門程式語言,我強烈建議你再學習一個技術框架。如果你像我一樣是個 Java 後端開發人員的話,Spring 的系列框架(Spring MVC、Spring Boot、Spring Cloud)就不得不學了;如果你是一個 C# 開發人員,.NET Framework 就不得不學了。
技術框架是一組通用類庫的集合,它幫助我們讓程式設計任務變得更簡單,畢竟輪子替我們造好了。假如說沒有技術框架的話,我們就好像坐著馬車前行,而不是飛機、高鐵和汽車,開發效率就要大大降低了。
06、原始碼管理工具
記得我剛參加工作那會,用的原始碼管理工具叫做 CVS(Concurrent Versions System),估計有不少讀者沒聽說過,非常非常難用。後來遷移到 SVN(Subversion)後,情況總算是有了很大的改善,它不僅支援 Eclipse,還有專屬的客戶端,除了管理原始碼,還可以管理許許多多的文件。
每天上班的時候先從伺服器獲取最新的程式碼,然後開始一天的工作,下班走之前切記要提交一次程式碼,否則就很容易耽擱團隊其他成員的開發進度。
現在呢,有了 Git,它是一套開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。它與 SVN 最大的不同之處,在於每個開發者的電腦上都會有一個本地倉庫(Local Repository),即便是沒有網路也一樣可以提交版本,檢視版本,以及比較版本;等到網路連線上之後,再提交到伺服器端。
原始碼管理工具最大的好處就在於它可以幫助我們保留不同檔案更改的歷史記錄,並且允許多個開發人員對同一檔案的程式碼進行合併。舉個例子來講,小王完成了一項任務,然後提交了程式碼;但他覺得有待改進,於是他重新修改了程式碼並提交到了版本庫,誰知道,程式上線後出了 bug,這時候原始碼管理工具可以幫助他快速回滾到之前正常的版本。否則的話,小王只能被祭天了。
07、測試
測試真的是太重要了!但並不是所有的開發者都這樣認為,這種感覺在我回到洛陽後尤其強烈。竟然有團隊成員不經測試就把程式碼提交到程式碼庫,並且是會報錯的那種,我天吶,遇到這種隊友我也是醉了。
在我回來之前,是在一家日企工作,測試是一項非常重要的工作,佔用的時間比程式碼編寫的時間多多了。從單元測試到整合測試,所有的測試結果都要整理成冊,所有的邊界條件都要測試到,哪怕你覺得完全沒有必要。但正是這種一絲不苟的態度,成就了日企軟體高質量的美譽。
一個優秀的開發人員絕不允許他的程式碼在交給別人之前不經測試,我想這是不容置疑的。
08、除錯
說句實在話,在我做程式設計師的這 10 年裡,除錯程式碼的時間比編寫程式碼的時間要多得多。因為解決 bug 的難度要比創造 bug 難得多,首先你要先復現問題的場景(真的是難啊),要復現問題就需要你擁有出神入化的除錯技巧,否則只能錘爆滑鼠,然後大喊“為什麼,為什麼,為什麼我的程式碼無法正常執行呢?”
入門級的除錯很簡單,你只需要在發生問題的程式碼處打個斷點,然後再跑一跑,就能從堆疊資訊和程式碼的上下文中發現問題。難度再上升點的話,就需要你創造程式碼執行的條件;再難的話,你甚至需要內網穿透,比如說微信公眾號開發;再再難的話,就不是一句半句能說得清楚了。
總之呢,除錯就是為了讓你弄清楚程式碼不能正常執行的真正原因,如果你的除錯技巧不過關的話,甚至有可能會被表象矇騙,從錯誤的角度去修改 bug,從而引發更多、更大的問題。
09、鳴謝
好了,親愛的讀者朋友,以上就是本文的全部內容了,能看到這裡的都是最優秀的程式設計師,我必須要伸出可愛的大拇指為你點個贊。如果你也覺得自己很棒的話,就無情地點贊吧,我需要你的支援。
1、親愛的讀者朋友們,喜歡的話,請關注我的原創微信公眾號「沉默王二」,專注於有趣的 Java 技術和有益的程式人生。
2、給我點個讚唄,你最美你最帥,除此之外,還可以讓更多的人看到這篇文章,順便激勵下我,再次感謝。
如果覺得文章對你有點幫助,請微信搜尋「 沉默王二 」第一時間閱讀,回覆【666】【1024】更有我為你精心準備的 500G 高清教學視訊(已分門別類),以及大廠技術牛人整理的面經一份。