程式設計漫談(二十):如何自學程式設計及Java、上手真實開發及轉行程式設計師的建議

琴水玉發表於2020-12-27

前路漫漫,吾將上下而求索!

最近有時在知乎上逛逛,發現很多人對自學程式設計及轉行程式設計師有困惑。我是在25歲讀研時轉程式設計師,正趕上好時候(中國雲端計算剛剛起步及移動網際網路正紅的階段),同時又走了不少彎路,因此,基於自己的開發經歷及思考認識(目前有八年 Java 開發經驗),希望能夠給後來者一些建議和參考。

本文主要面向程式設計初學者、大學生、初中級工程師(三年以下)。

為什麼要學程式設計

  • 程式設計能夠有力地鍛鍊人的邏輯思維能力,而邏輯思考是理性思考和決策的必要件,也是思考任何問題所不可或缺的基本思維能力;

  • 程式設計是一項集設計、發明、創造、表達於一體的很有樂趣很有挑戰的職業,如果你樂於鑽研事物原理、創造新事物,那就是你沒錯了!無論別人怎麼看,我個人還是很喜歡程式設計的!

  • 做軟體開發的薪水相對較高,因為有一定門檻,需要耐心、時間、理解字元、理解邏輯,很多人可能都沒法忍受天天跟字元打交道,很難忍受除錯程式的枯燥(程式報錯可能僅僅是一個字元沒寫或寫錯了,看到眼瞎),很難忍受軟體的複雜性(現代軟體通常基於大量框架、庫、中介軟體的聚合體,出了底層問題排查會很困難異常耗時);

  • 在知識經濟時代,在資訊化智慧化越來越深入的時代,不懂程式設計,就像在現代文明社會裡不識字一樣。

何時學習程式設計

作為興趣

只是對程式設計感興趣,希望學會一門新技能。任何時候都不晚,哪怕 60 歲開始都沒問題。

程式設計作為輔助技能

工作中用到,但非軟體開發職業,程式設計只是作為輔助技能。比如科學家、資料分析師、產業程式設計等。年輕的時候加入為宜。

轉行程式設計師

需要慎重考慮:

  • 網際網路是一個適合彎道超車的行業, 也是對年輕人友好的行業;
  • 國內網際網路企業還是比較看重年齡的,如果年齡較高,又沒有特別的建樹(管理團隊經驗、技術牛等),就會比較被動;
  • 做程式設計師有年齡紅利。年齡越早,享受越多的紅利;越晚加入,紅利越少;
  • 做程式設計師是一個可積累性不佳的職業。即使你有很豐富的經驗,那些優秀應屆生只要有紮實的專業基礎,又善於學習和借用 Github 上的程式碼,善於學習新技術,是可以快速成長為後起之秀的;
  • 程式設計師職業,是以個人的犧牲換來了行業的快速發展,以個人的可積累性差換來了行業的強積累性;
  • 做程式設計師需要善於學習,這是最重要的能力之一;
  • 做程式設計師需要思維縝密周全,能夠考慮各種錯誤和異常情況,考慮可擴充套件性及很多質量指標,不然,寫出的程式可能會漏洞百出,或者難以修改和擴充套件;
  • 所謂的經驗豐富,是指實操大型專案的經驗,實操具有特殊性專案的經驗,這種機遇非常難得;中小型專案開發不叫經驗,因為誰都能經歷。

如何自學程式設計

如果雷神都擋不住你要學習程式設計的決心和信念,那就開始吧!

學習程式語言

  • 學習程式語言,幾乎不需要任何必要件,3-5 歲小孩都能學會,汝何以懼之?
  • 選擇一門語言,比如 Java 或 Python ;
  • 找一本好的程式設計書籍,在豆瓣上搜下 Java 或 Python ,選評分最高或次高的即可;
  • 在尋找程式設計書籍時最好找兩本,一本國內人寫的,一個國外人寫的;國內淺顯,國外深入;
  • 我傾向於學習國外人寫的技術書籍,能教會有益的思考方式;在看不懂的時候,再找本國內的看看;
  • 《C程式設計語言》 :即使你不打算學 C ,這本書也是講述程式語言的經典之作;
  • 找一個相關的程式語言視訊,邊做邊看;
  • 程式設計重在實踐,不寫程式碼是學不會的;
  • 如果你正好有位朋友做程式設計師,可不定期請教,有個師傅引領程式設計是很好的;
  • 學好英語,否則你能學到的程式設計知識永遠是二手的甚至是 N 手的!
  • 學會使用 word, excel, ppt 等辦公處理軟體;
  • 這一階段重點在學會程式設計的基本思想,能獨立寫出一個單詞解析程式,就是通關成功!

程式設計初步進階

  • 在學會一門程式語言之後,需要學習資料結構、演算法、資料庫、網路、作業系統 ;

  • 尤其要打好資料結構和演算法基礎,好比程式設計的武器裝備加成(子彈和炮彈)。如果缺乏資料結構和演算法基礎,就好比拿著刀劍上戰場,還沒走兩步,就被一發炮彈轟上了天 ;

  • 作業系統是基礎課。要能運用作業系統提供的能力,寫出更實用的程式,就不能不懂作業系統 ;

  • 資料庫是儲存和操作大量資料的技術,實際專案開發中必備的基本功 ;

  • 網路是網際網路技術的基礎,不可不知,至少要理解基本原理及協議 ;

  • 學習順序:資料結構及演算法 => 作業系統 => 資料庫 => 網路 ;

  • 資料結構書籍: 《資料結構與演算法分析》

  • 演算法書籍: 《演算法設計與分析基礎》《演算法(第4版)》《演算法導論》(可挑戰);

  • 程式設計書籍:《程式設計珠璣》(超經典,不可不看),《程式設計實踐》 教會你如何正確思考和設計程式 ;

  • 網路書籍:《計算機網路》《TCP/IP詳解 卷1:協議》 (進階);

  • 演算法刷題:當你具備一定的資料結構和演算法基礎,能夠編寫程式時,推薦到 “力扣網” 刷刷題,進行更深入的演算法實踐(有充足時間或擠出時間)。我到 2020 年才知道力扣的存在;

  • 當你能夠比較靈活使用資料結構和演算法,能夠理解作業系統的原理並呼叫系統函式,設計比較規範的資料庫表,代表程式設計初步進階通關成功!

Web專案

  • 當你具備資料結構、演算法基礎和資料庫設計的基礎時,就可以開始嘗試做 Web 專案了,正式踏入開發征程;

  • 基本技術棧:後端(SpringMVC, MyBatis) + 前端 ( Javascript , jQuery ) ,可以暫時先不管底層原理,先做起來;

  • 工程模板:這裡有一個 Springboot 模板工程,含有一個真實專案商品交易快照專案的程式碼例項,你可以學習真實專案中軟體是怎樣子的,也可以在裡面做更多的嘗試和探索。要執行這個專案,執行 Application.java 即可,然後在瀏覽器敲入 "http://localhost:8080/" ;專案地址: “springboot-template”

  • 如何從 Github 拉取工程程式碼,見: “使用git和github託管個人專案”

  • 學習基本的 git 命令: git clone, git add , git commit , git push , git merge ;

  • 程式語言進階,比如 “Effective java 中文版(第2版)”

  • 原始碼閱讀: 此時,你應當開始學習閱讀原始碼。可以先閱讀一些簡單的類,比如 JDK 容器。為什麼要閱讀原始碼及基本技巧,可參閱 “解鎖優秀原始碼的基本方法與技巧”

  • 程式除錯:在開發專案時,程式除錯必不可少,最簡單的打斷點、單步除錯得學會。程式除錯技能可參閱 “軟體除錯的基本技巧”

  • 單測編寫:學習編寫單測,讓程式碼更加可靠,《單元測試之道Java版:使用JUnit 》

  • 程式風格:學習編寫好的程式必不可少。面試找工作非常看重這一點。可參閱 《Java程式設計風格》《編寫可讀程式碼的藝術》, 《程式碼整潔之道》

  • 當你能夠運用資料結構、演算法、資料庫做出一個簡單的 CRUD 管理系統時,能夠編寫比較規範的程式碼時,Web 專案階段通關成功!

踏上征程

真實戰場

  • 你已經找到一份程式設計師工作,進入了真實戰場;
  • 做好分配給你的事情,做好接手的系統,同時,閱讀各類技術書籍,讓自己技術能力更加豐實;
  • 廣泛閱讀各種程式設計相關書籍,這裡有我讀過的書,可以參考: “計算機專業及軟體開發推薦書籍”
  • 閱讀原始碼,對你所用到的技術,探究其實現原理;
  • 原理和設計思想是最最最精髓的東西。實用技術雖必不可少,卻不可沉迷其中。切勿買櫝還珠!
  • 閱讀 JDK 原始碼,閱讀小型框架原始碼;
  • 及早考一個教師資格證,給自己留條後路(我沒有考慮到)。

一兩年後

  • 深入理解業務、從產品角度思考,能夠讓你有更寬闊的視野和更快的成長速度(我當時沒意識到);
  • 不要懟產品,不要懟測試,不要懟運維,不要懟來懟去懟到沒朋友(血的教訓);
  • 做事要嚴謹,對人要寬容;兩者不可偏廢(我只做到了前者,後者做的不夠好);
  • 開始寫技術部落格;你會發現,三五年後,只有部落格上記錄的東西還能記得(有益經驗);
  • 制訂技術研習計劃,比如工作中用到的技術的原理,或者新技術,每週或每月寫一篇技術部落格(有計劃但我沒能堅持);
  • 瞭解軟體開發攻略:“軟體開發的升級打怪攻略:從新手到高階工程師”
  • 深入學習軟體設計與開發:這是我關於軟體設計與開發的思考:“軟體設計要素初探”
  • 當你要跳槽時,不要衝動;先多徵求意見,明確意願,找到下家後再辭職(我辭職時不知道這個套路)。

三年後

  • 構建自己的技術體系結構,持續豐富這個體系結構(如今我才開始做這個事情,有些晚);
  • 這是我最近構建的一個技術體系結構: “網際網路應用服務端的常用技術思想與機制綱要”
  • 努力尋找中大型專案和中大型系統實操的機遇,並提升自己的綜合能力(我沒有這個主動意識,才有此勸誡);
  • 敲重點: 踏實做事,但不要埋頭寫程式碼!不要埋頭寫程式碼!不要埋頭寫程式碼!(我埋頭做事,才有此勸誡);
  • 試著去錄製一些程式設計開發視訊,擴充自己的技能樹(我不知道還能這麼玩)。

此去經年

  • 你已經是初中級工程師了,悟空也從菩提祖師那裡畢業了;
  • 身邊的每一個人都可能是你的導師,欣賞和學習每個人的長處;
  • 擴充你的技能樹,學會從一切可能的地方學習;
  • 多交往,擴充自己的活動區域(我偶然參加了TMC演講,還是有益的)。

相關文章