作者 | 阿文
責編 | 伍杏玲
知乎熱榜有個提問:一位準程式設計師學編程有一段時間了,但是經常被人吐槽編程不夠嚴謹,比如寫個計算器沒有考慮用戶輸入特殊字符或者沒有考慮到用戶輸入使用了錯誤的數據類型導致了溢出異常,感覺自己很菜,懷疑自己是否適合當程式設計師了?
相信很多新手程式設計師在最初遇到挫折時,都會有這樣的疑問:我是否適合學編程?
這是由於新手程式設計師對自己的能力產生不自信,因為水平和知識面不足導致在實際編程中,到處碰壁。比如一個複雜的邏輯沒有想明白,或者一個Bug 始終找不到問題所在,從而失去了繼續學習的信心。
今天就和大家一起討論新手程式設計師經常會遇到的問題以及如何去對自己的職業生涯做規劃。
如何評估是否適合當程式設計師?
先看看我身邊的兩個真實故事:
小磊,本科大學是化學專業,畢業後由於本專業工作不是很好找工作,聽說搞 IT 的待遇好、薪水高,於是參加培訓班學習 Java。
在此之前,他沒有任何計算機專業背景,連 Office、Windows 系統使用得不是很熟練。就是這樣一位計算機小白,就因為人云亦云地進入這行業。
然而他在學習編程不到一個月後,就跟我說他學不下去了:編程這玩意太難了,老師布置的作業他根本就沒思路,連個簡單的 Java 程序都不會編寫。比如老師要求他用 Java 實現一個純 console 模式下的學籍管理系統,他不會寫;還有很多基本計算機概念他更是完全不懂,比如什麼是堆棧、Linux 系統的使用……
於是他懷疑自己,思考:「我是誰,我在哪裡?我為什麼會學編程?這玩意這麼難,我真不會,我是不是不適合幹這個?」
後來他覺得這一行的飯並不是那麼好吃,經過一番嘗試之後,他覺得自己不適合幹這個,於是中途退出培訓班,後來聽說是回家做水產品生意(賣小龍蝦之類的),幹得還不錯,平均一年收入幾十萬。
還有位朋友和小磊的背景很相似,大專大學英語專業,男,畢業後發現只會英語出去找工作沒什麼優勢。
他自己是一個電腦愛好者, 大學期間自己攢配件組裝電腦,對於各種硬體知識有一定的了解,平時愛倒騰各種軟體和作業系統,對於Linux 也有一定了解,會一些基本的命令使用,雖然不深入,但也算有一定計算機基礎。
他之前並未接觸過編程,在畢業後他參加了編程培訓,可能他對這方面有些天賦,老師上課教的基礎知識他能很快地掌握並消化,並且在業餘時間他也不斷去看書並實踐,在不停地學習、消化、實踐中,他的編程水平提升很快。
雖然有時候他也會為一個邏輯沒理順而抓耳撓腮,但是他並沒有被問題難道,而是不斷去想解決問題的方案。遇到不會的就去查資料,由於其英文水平還不錯,對於一些資料他都是先看英文文檔,實在不會就去各種技術論壇去請教別人,就這樣,經過兩年的摸爬滾打,他的技術水平提升地非常快,從一個月薪 3000 塊的初級工程師,成長為月薪 15000塊的高級工程師。
三百六十行,行行出狀元,適合自己才是最重要的。如果你在學習編程,希望成為一名程式設計師,也遇到了和知乎這位同學一樣的困惑,對自己的職業發展產生了懷疑,開始問自己適合不適合幹這行了,不妨問問自己幾個問題:
我喜歡這個行業嗎?我有對即將從事的這行所需要的能力有進行過了解和評估嗎?例如需要掌握哪些技能才能入行,我當前的能力是否達到了入行的能力?如果沒有,我缺什麼?該怎麼去做才能提升能力。我願意投入很多的時間和精力去鑽研學習所需的技術嗎?如果以上問題的答案在你心裡都是肯定的,那麼你只要方法運用得當加上自身堅持不懈的努力,我相信肯定會在一段時間內有很大的提升和進步,而反之我則建議你儘快在年輕的時候多去嘗試下其他行業,哪怕你已經投入了一段時間去學習,但是這至少可以及時止損。
如何成為一名合格的程式設計師
作為一名在 IT 行業摸爬滾打多年的老鳥,我給各位分享一些自己的經驗,希望可以幫助新人們少走彎路,快速成長。但是我要說明一點,這些建議的基礎是你上面的幾個問題都是肯定的前提之下,你再結合建議來做的話,是會給你的技術提升帶來一些幫助的。
首先,理論加實踐結合,缺一不可。
對於一些基礎差的朋友在入行不久肯定會遇到一些知識點難以攻克,特別是零基礎轉行的朋友,可能只會培訓班教的編程基礎知識或自己買的編程類書籍或網上找的視頻教程,可以看得懂,但不會寫。
這類朋友我建議你看完視頻或書之後一定要多花時間去練習,光看不練假把式。僅僅是看視頻和書籍你是看不會的,必須要練習,其實計算機的一些專業相比較其他行業的門檻是很低的,一臺電腦你就可以去學了。理論知識的學習很重要,但是實踐同樣非常重要。
新手程式設計師一定不要看中當前微薄的薪水,一開始入行,只要工資能夠應付你的生活開支就可以了,給你開 3000 的工資和 6000 的工資其實並沒有太大的區別。
以杭州為例,平均房價三萬多,你拿這麼點工資你能在這個城市買房立足嗎?如果不能,你最應該做的事情是持續不斷地學習,而不是在乎這一星半點的工資,然後找一個能夠有機會提升能力的平臺,投入更多的精力去鞏固基礎,把基礎打牢固了。
其次,要勤能補拙,不停地學習。
正所謂熟能生巧,而且程式設計師所需要的知識並不僅僅是你會寫代碼就可以了,也並不是「一招鮮吃遍天」。
所需的專業性是非常強,並且軟體迭代更新非常快,如果你僅僅是會一門程式語言的語法使用,你是永遠也不會成為一名優秀的程式設計師的。
我身邊很多開發同事經常會在好幾種不同的程式語言之前來回切換使用,有的項目用 Python,有的項目用 Go,有的項目用 Java。
大家不要認為某某語言是世界上最好的語言,例如「PHP 是世界上最好的語言」這樣的說法,如果你抱著這思想,那就完蛋了。
不同的程式語言其應用的業務場景是不一樣的,各有各的優勢和劣勢。千萬不要陷入語言的門戶之爭。
應該把寶貴的時間和精力用在提升自己的崗位專業能力的學習上去,比如作業系統原理、算法、網絡協議、數據結構等基礎學科的學習。
只會編程是寫不出來什麼好程序的,好的程序是由好的算法+好的數據結構而成的。基礎知識一定要打紮實了。數據結構和算法以及網絡協議並非是工作中你會用到,但在面試過程中,這些是程式設計師逃不掉的必問題目。
再次,僅僅是會上面這些,其實你還不能成為一名合格的程式設計師,因為在實際的項目裡面,除了要會寫業務邏輯,你還得和各種中間件打交道,比如資料庫、Web 伺服器等軟體打交道,有時候可能系統出問題了,需要你去排查定位問題,並提出優化改進的建議。
這些軟體可能又是一個知識體系了,你值得花精力去學習,雖不一定每一樣都要學得非常精通,但也並不是僅僅停留在會簡單使用這些軟體,比如資料庫,不要僅僅停留在會增刪改查這種最基礎的操作上。資料庫的優化、資料庫的原理值得你花精力去學習,這樣在以後的系統設計中,你就知道如何去優化 SQL 語句提升性能,對一些查詢慢的問題如何去定位是程序問題還是資料庫的問題以及該如何優化。
推薦多閱讀一些優秀的開源軟體的源碼,讀別人的源碼,看看優秀的程式設計師是怎麼寫代碼的,他們為什麼要這麼實現。
最後,程式設計師要培養系統化學習的能力,要拒絕碎片化學習。
網際網路時代很多知識都是碎片化的,其實碎片化學習並不能有效提升你的能力,你應該系統化地把某一個知識點和技術啃掉,這樣在設計系統時才能把要考慮的問題想全面些。
對於新技術最好的學習方式是去看官方文檔的說明,而不是去各種博客搜答案,這些二手知識首先並不一定適合你,其次這些二手知識太零亂了,如果官方文檔確實找不到答案,才去嘗試下搜索或者去各種論壇去提問。
精進:如何成為一名優秀的程式設計師
相信如果你照著上面的方法去不斷學習和實踐,並且真正的掌握了所需要知識點,你可以算是中級程式設計師了。
接下來你需要做的就是針對某一個方向花更多的精力和時間去鑽研,使自己成為這個方向的專家。最好是你自己正在做的技術方向,如果把你的能力提升到在核心崗位「沒你不行」的專業的話,即使你離職了,不投簡歷也會有其他大公司高薪挖人。
總結一句話就是:要讓自己的能力不可被替代。
如何做到呢?:
成為某一個領域的專家,並參到該領域一些優秀的開源項目中,貢獻自己的代碼。例如你是做容器開發的,那麼 Kubernetes 和 Docker 項目可以參與進去。多參與該領域的技術論壇,分享自己的經驗,讓更多的人認識你,了解你正在做的事情,把自己的知名度打出去。另外,這樣做也可以提升自己的演講能力。不要僅僅局限於寫業務邏輯,如果有往管理方向發展的機會,一定不要錯過。當你成為一名技術管理者之後,你看問題和思考系統架構設計等的問題時,眼界會開闊很多。成為一名終身學習者,這個世界每天都在發生著巨大的變化,你不學習,就會被淘汰,尤其是年輕的時候,一定要不斷地學習,避免人到中年時成為一名高齡低能的程式設計師。勞逸結合,多鍛鍊身體。編程這事很辛苦,熬夜加班,996 都是常態。所以身體是革命的本錢,千萬不要把自己的身體搞垮了。好了,以上就是我給大家的一些建議,希望各位能夠成為一名優秀的程式設計師。
作者簡介:阿文,網易雲擔任高級工程師,在邊緣計算、雲計算領域有多年的從業經歷,曾擔任過講師,主講思科路由交換技術。個人博客地址:https://awen.me
【END】