這篇文章我將以我自學(xué)編程的經(jīng)歷、自己遇到的坑、如何解決問題等方面,給初學(xué)者朋友們分享自己的經(jīng)驗,希望對正在自學(xué)編程的你有幫助。如果哪里說的不對,也望得到您的批評指正!
1.為什么要學(xué)習(xí)編程?
(1)因為愛好:
如果你對信息技術(shù)充滿激情與愛好,日常喜歡研究電腦、智能手機等,想要掌握計算機更多的知識,想讓自己學(xué)會開發(fā)出自己的桌面軟件、網(wǎng)站、APP。
(2)想要獲得高薪資的工作:
IT行業(yè)的工資相對于傳統(tǒng)行業(yè)來說工資是比較高的,IT行業(yè)適用領(lǐng)域很廣闊,餐飲、交通、物流、醫(yī)療、金融、教育等各大行業(yè)都離不開IT行業(yè)的支持,如果掌握這個行業(yè)的一門技術(shù),那吃飯是不成問題的,能不能吃好飯就看自己了。
當然,你最好自己喜歡這個行業(yè),喜歡信息技術(shù),然后堅持往這個方向發(fā)展。如果僅僅是想要賺錢,也許編程不適合你。如果能把自己的對信息技術(shù)的熱愛投身到自己的工作職業(yè)中,這是最好的。接下來的文章中,我假設(shè)以求職為目標,來給大家分享自學(xué)編程的經(jīng)驗。
2.怎么通俗易懂地理解軟件開發(fā)

(1)什么是編程?
簡單的理解就是通過某種編程語言,編寫特定代碼指令、執(zhí)行代碼,讓計算機幫助我們做一些計算、執(zhí)行一些任務(wù),等等。
(2)編程的最終目的是什么?
更通俗的說編寫代碼的大多數(shù)終目的是開發(fā)一套完整的軟件系統(tǒng),我們知道軟件可以幫我們做很多事,比如說我們使用QQ軟件和朋友聊天、使用百度網(wǎng)站搜索資料、在論壇網(wǎng)站上問問題、使用WPS軟件編寫文檔、使用PS軟件處理圖片,等等。這些都是軟件,通過開發(fā)者編寫代碼、打包、上線等多個步驟,最后形成一套完整的程序,供用戶使用。
(3)B/S架構(gòu)和C/S架構(gòu)
現(xiàn)在市面上的軟件如果按照某種特定分類方法可分為兩種: B(Browser)/S(Server)架構(gòu)(瀏覽器/服務(wù)器)和C(Client)/S(Server)架構(gòu)(客戶端/服務(wù)器)。當然,還有單機軟件,現(xiàn)在還有部分軟件是不需要聯(lián)網(wǎng)就可以為人們提供服務(wù)的,比如說很多人手機上計算器APP。簡單的說,使用瀏覽器打開的網(wǎng)站是B/S架構(gòu)的軟件,而直接打開客戶端使用的是C/S架構(gòu)的軟件。
(4)那什么編程語言?
編程語言是用來定義計算機程序的形式語言。人與人交流使用的是漢語、英語、阿拉伯語等等,而人與計算機交流使用的就是計算機編程語言,通過編寫特定的代碼片段讓計算機理解我們的意圖。于是后來有了很多種計算機編程語言,如C++、C#、Java、JavaScript、PHP、Kotlin,匯編語言等等。
3.認識程序員(軟件開發(fā)者)這個工作職務(wù)

(1)軟件開發(fā)者應(yīng)至少應(yīng)該具備什么能力?
就現(xiàn)在的社會需求來說,作為軟件開發(fā)者,我們應(yīng)該至少懂得一門編程語言,并且能利用軟件開發(fā)使用這種編程語言在實際工作中完成相應(yīng)的工作,至少這樣才是一個合格軟件開發(fā)者。
現(xiàn)在很多軟件開發(fā)項目中都是由多個人來完成的,那么必定由一個開發(fā)者負責(zé)開發(fā)環(huán)節(jié)中特定的任務(wù),如java后端工程師編寫與數(shù)據(jù)交互的代碼邏輯,Android工程師負責(zé)編寫Android APP,IOS工程師負責(zé)編寫iPhone APP,等等。
(2)軟件開發(fā)者應(yīng)該長期具備什么能力?
首先:不斷學(xué)習(xí)。在軟件開發(fā)這個領(lǐng)域中,開發(fā)技術(shù)不斷的更新與變化,如果想要具備競爭能力,那就必須不斷的學(xué)習(xí),而不是長期以原有的技術(shù)混飯吃,如果真是這樣,最終是要被淘汰的。這個行業(yè)不適合想要一勞永逸的人。在這個行業(yè)必須不斷學(xué)習(xí)、創(chuàng)新,你必須具備不怕苦不怕累的創(chuàng)業(yè)精神。
其次:做一個有計劃的人:你應(yīng)該時時有危機感,那么就給自己制定計劃,不管是短期計劃還是長期計劃,朝著那個目標努力,你會越來越優(yōu)秀。你是一個初級程序員,你應(yīng)該朝著高級程序員的目標努力;你一個高級程序員,你應(yīng)該朝著架構(gòu)師的目標努力;而當你成為了架構(gòu)師,你應(yīng)該朝著管理者的目標努力。只有做好計劃,并隨著時間的改變而改變,朝著目標努力,你才能不斷實現(xiàn)自己的價值。
4.沒有編程基礎(chǔ),我該怎么入門?
我相信這是大多初學(xué)者困惑的問題,也是阻礙很多初學(xué)者學(xué)習(xí)進度的問題。你不知道從哪里開始學(xué)習(xí),或者不知道從何開始,接下來我以自己的學(xué)習(xí)經(jīng)歷,給大家提供一些建議,希望對你有幫助。
(1)你應(yīng)該具備什么基礎(chǔ):
自學(xué)你至少得有一臺自己電腦,這臺電腦不需要配置有多高,除非你學(xué)習(xí)的是開發(fā)大型3D游戲。傳統(tǒng)的開發(fā)學(xué)習(xí),普通筆記本、臺式機都可以的,但是必須得有網(wǎng)絡(luò),因為你需要從網(wǎng)絡(luò)上獲取這種學(xué)習(xí)資料,況且我們是在學(xué)習(xí)信息技術(shù),沒有網(wǎng)絡(luò)怎么可能,想一想多可怕,最重要的是,你要喜歡它再去學(xué)它,如果不喜歡它,學(xué)了又有什么意義。
(2)數(shù)學(xué)、英語不好,能學(xué)好編程嗎?
就這么說吧,如果你感覺自己數(shù)學(xué)不好,但是你喜歡信息技術(shù)方面,你就好好學(xué)吧,你是能學(xué)好編程的。我的數(shù)學(xué)和英語真的是超級不好,原因是我不喜歡它們。編程的邏輯性挺強的,但是不代表你的數(shù)學(xué)不好你的編程就學(xué)的差,它們本就不是一個回事,雖然編程很多時候用于科學(xué)計算方面,但是如果我們學(xué)習(xí)編程是為了開發(fā)應(yīng)用軟件,為的是找工作,編程本就沒有那么別人說的那么難。
英語不好呢?那也可以學(xué)好的。計算機發(fā)展技術(shù)源自西方,西方人在這方面做的比我們多,當然這些計算機語言幾乎全是英語字母組合的。我想,如果我們能趕在西方之前發(fā)展信息技術(shù),現(xiàn)在外國人估計就使用中文來編程了。但是我英語不好,句子都讀不通順,怎么辦?沒關(guān)系的,讀代碼與讀英語文章完全不一樣,雖然大多數(shù)代碼使用的是英文字母來編寫,而理解代碼更多的是理解它的邏輯。但是,如果你的英語不好,你最好提高一下的英語水平,因為很多開發(fā)文檔、教程,是使用英文來寫的。不是說你英語不好你就不能寫代碼,但是你不能連“hello”、“how are you”這些簡單的英文單詞都不認識,也就是說,你具有初中畢業(yè)生的英語水平就可以學(xué)習(xí)編程了。
(3)選擇自己喜歡的方面入門:
軟件開發(fā)過程中根據(jù)不同的需要,包含了多個工作任務(wù)和多種工作流程,因此也產(chǎn)生了不同的工作崗位,前端工程師:Android工程師、IOS工程師、Web前端工程師,后端工程師:Java后端工程師、Python后端工程師、PHP工程師,Linux運維工程師,現(xiàn)在還流行著大數(shù)據(jù)工程師、AI(人工智能)工程師,等等。當然,在人員缺少的情況下有的人卻擔(dān)任了好幾種身份,但是在大公司里面,分工一般是明確的。
那怎么開始入門學(xué)習(xí)呢?首先,選擇自己喜歡的語言,選擇自己方向,朝著那么目標學(xué)習(xí)。可是我都沒了解過,我怎么知道什么編程語言適合我?這就需要你事先了解一下了,既然打算自學(xué)編程,那你應(yīng)該查閱一些資料了解一下,什么語言適合來做什么,自己又應(yīng)該學(xué)習(xí)什么語言。當然,我們的長遠的目標是精通一個技術(shù)方向,但是其他方向最好是什么都要會。
所以,我建議你選擇自己喜歡的方向,容易的入門的方向進行入門學(xué)習(xí)??墒怯械娜苏f現(xiàn)在很火的不是大數(shù)據(jù)、人工智能嗎?月薪兩三萬、四五萬的。但是你要知道,對于一個任何基礎(chǔ)都沒有的普通初學(xué)者,需要花多少功夫才能達到大數(shù)據(jù)工程師、AI工程師的水平,所以學(xué)習(xí)基礎(chǔ)是十分重要的,至少得保證你有一樣技能了,能保證自己能勝任某項工作之后,再朝著更高得層次努力,也許那樣會更好。
我當年選擇Android作為入門學(xué)習(xí)的方向,原因是我挺喜歡Android。我開學(xué)習(xí)Android的時候是在2015年,那時候很多人說Android現(xiàn)在飽和了,學(xué)習(xí)Android會找不到工作。但是我并沒有放棄學(xué)習(xí)Android,我想,如果有時間去擔(dān)心以后找不到工作,為什么不靜下心來好好學(xué),只要學(xué)好了為什么還要怕找不到工作,為什么自己不可以作為那些學(xué)習(xí)Android中的佼佼者,你可以比別人笨,但是你也可以比別人努力,況且,又有多少人真正的承認自己比別人笨呢?現(xiàn)在再回想自己當年學(xué)習(xí)Android的時候,每天晚上堅持觀看視頻,記筆記,先學(xué)Java基礎(chǔ),后是Android基礎(chǔ),就這樣堅持好幾個月。挺辛苦,可是后來收獲的是開心的。
當然,你有很多選擇。如果你喜歡APP開發(fā),那么就是Android和IOS了,而Android學(xué)習(xí)成本比IOS學(xué)習(xí)成本低,原因就是如果你要做IOS開發(fā)你需要mac電腦,Android開發(fā)使用普通的Windows就可以,進一步學(xué)習(xí)的話你可以安裝一個Linux操作系統(tǒng),再加上一個幾百元的Android手機就可以學(xué)習(xí)了,等你掌握Android開發(fā)后再學(xué)習(xí)IOS也不遲。如果你喜歡后端開發(fā),我建議你選擇Java、Python、PHP這些語言。假如你之前沒有接觸過編程,只要認真學(xué),這些語言挺容易入門的,如果有一點C語言基礎(chǔ)那更好。而如果你喜歡Web 前端,那你就好好學(xué)習(xí)H5+CSS3+JavaScript,一個合格web前端工程師除了能把網(wǎng)站做出漂亮的特效,還要懂得后端的知識,這時可以學(xué)一學(xué)Node.js。雖然開發(fā)技術(shù)分類很多,但是這些技術(shù)都是相通的,有了一門技術(shù)的基礎(chǔ)之后,再學(xué)習(xí)其它技術(shù)就輕而易舉了。而在初學(xué)者階段,你需要選擇一門技術(shù)進行系統(tǒng)的學(xué)習(xí),同時不要忘記多了解一些其他的技術(shù)。
以下是編程語言在某個時間段的排行榜:

(4)怎么獲取學(xué)習(xí)資源?
你可以買一本書。書有好有壞,有的書適合初學(xué)者,而有的書不適合初學(xué)者;有的書通俗易懂,也有一些書全是廢話,甚至錯誤一堆,這就需要你好好辨認了。有的書適合你,但是有的書雖好,卻不適合你,你應(yīng)該到書店里面,到圖書館里面好好翻一翻,選擇合適自己的一本系統(tǒng)教學(xué)書籍。對于技術(shù)類型的書,盡量選擇比較新的,對于同一種技術(shù),盡量避免好幾年的書籍,因為技術(shù)書籍不像文學(xué)書籍那樣,技術(shù)每天都在改變。
你還可以看一套系統(tǒng)的視頻教程。互聯(lián)網(wǎng)上免費的教程資源很多,如果好好利用,相信你一定能學(xué)好的。有的視頻里老師講課方式不適合你,而有的老師講課方式很適合你,我相信后者對你的進步更有幫助?,F(xiàn)在教學(xué)網(wǎng)站也很多,也提供了大量的免費資源,如極客學(xué)院、慕課網(wǎng),百度傳課、騰訊課堂等等都有大量的免費資源,建議你花一些時間去嘗試聽一下多套視頻的第一節(jié)課,最后選擇最適合自己的一套。
(5)要回利用互聯(lián)網(wǎng)解決問題:
你在學(xué)習(xí)編程過程中必定遇到很多問題,甚至有時出現(xiàn)的bug讓自己感到崩潰、無助,這時不要慌,這是很多初學(xué)者都是必定經(jīng)歷的過程,只要一個一個問題的解決了,積累經(jīng)驗,以后你才能解決實際開發(fā)中遇到的問題。在你遇到錯誤時,把你出現(xiàn)的錯誤百度一下,必定別人也遇到過,并有一堆的解決辦法。你還可以到各大論壇尋求幫助,如國內(nèi)的CSDN論壇,如果你英語閱讀能力比較好,還可以到stackoverflow.com網(wǎng)站上尋求全球開發(fā)者的幫助。
(6)多讀別人的代碼,借鑒別人的長處:
閱讀別人的代碼是自己提高編碼能力的一個方法,你可以看到自己與大神的距離,然后努力朝著目標努力,一個合格的開發(fā)者,不僅能自己寫代碼,還要有閱讀別人代碼的能力。
(7)多練習(xí),孰能生巧:
學(xué)習(xí)中編程的過程中,看懂和會做完全是兩回事,不要覺得自己看視頻看懂了,或者看書看懂了就從來不去編碼練習(xí)了。往往很多人看懂了,但是自己卻敲出一堆的錯誤,這階段你需要不斷的練習(xí)。網(wǎng)上說的“7天掌握PHP”、“5節(jié)課掌握java”,等等這些,以一個普通初學(xué)者的角度來說絕對是不可能的,作為初學(xué)者,應(yīng)該腳踏實地,每天堅持,積累上幾萬行代碼,甚至幾十萬行代碼,也許那樣才是真正的入門。這世上沒有不勞而獲的,所有的收獲,必定經(jīng)歷付出,知識也一樣,加油!
5.總結(jié):
上一個世紀的前輩們在學(xué)習(xí)的時候,他們沒有網(wǎng)絡(luò),沒有那么多學(xué)習(xí)資料,而他們卻能給后人創(chuàng)造了很多有價值的東西,他們都那么堅持,我們就沒有理由不努力了。
不管怎么說,學(xué)習(xí)編程不容易,一定要真正的喜歡它再去學(xué),腳踏實地,堅持不懈,往既定的目標努力。入門學(xué)習(xí)的付出是辛苦的,甚至是乏味的,但是拼一拼,努力奮斗,相比最后得到的,是值得的。加油!
原文作者:極客開發(fā)者
后續(xù)文章:
你也可以訂閱我的微信公眾號,交流與提問、接收最新分享內(nèi)容。
