如何自學編程?
來自專欄極客開發者19 人贊了文章
這篇文章我將以我自學編程的經歷、自己遇到的坑、如何解決問題等方面,給初學者朋友們分享自己的經驗,希望對正在自學編程的你有幫助。如果哪裡說的不對,也望得到您的批評指正!
1. 為什麼要學習編程?
(1) 因為愛好:
如果你對信息技術充滿激情與愛好,日常喜歡研究電腦、智能手機等,想要掌握計算機更多的知識,想讓自己學會開發出自己的桌面軟體、網站、APP。
(2) 想要獲得高薪資的工作:
IT行業的工資相對於傳統行業來說工資是比較高的,IT行業適用領域很廣闊,餐飲、交通、物流、醫療、金融、教育等各大行業都離不開IT行業的支持,如果掌握這個行業的一門技術,那吃飯是不成問題的,能不能吃好飯就看自己了。
當然,你最好自己喜歡這個行業,喜歡信息技術,然後堅持往這個方向發展。如果僅僅是想要賺錢,也許編程不適合你。如果能把自己的對信息技術的熱愛投身到自己的工作職業中,這是最好的。接下來的文章中,我假設以求職為目標,來給大家分享自學編程的經驗。
2. 怎麼通俗易懂地理解軟體開發
(1)什麼是編程?
簡單的理解就是通過某種編程語言,編寫特定代碼指令、執行代碼,讓計算機幫助我們做一些計算、執行一些任務,等等。
(2)編程的最終目的是什麼?
更通俗的說編寫代碼的大多數終目的是開發一套完整的軟體系統,我們知道軟體可以幫我們做很多事,比如說我們使用QQ軟體和朋友聊天、使用百度網站搜索資料、在論壇網站上問問題、使用WPS軟體編寫文檔、使用PS軟體處理圖片,等等。這些都是軟體,通過開發者編寫代碼、打包、上線等多個步驟,最後形成一套完整的程序,供用戶使用。
(3)B/S架構和C/S架構
現在市面上的軟體如果按照某種特定分類方法可分為兩種: B(Browser)/S(Server)架構(瀏覽器/伺服器)和C(Client)/S(Server)架構(客戶端/伺服器)。當然,還有單機軟體,現在還有部分軟體是不需要聯網就可以為人們提供服務的,比如說很多人手機上計算器APP。簡單的說,使用瀏覽器打開的網站是B/S架構的軟體,而直接打開客戶端使用的是C/S架構的軟體。
(4)那什麼編程語言?
編程語言是用來定義計算機程序的形式語言。人與人交流使用的是漢語、英語、阿拉伯語等等,而人與計算機交流使用的就是計算機編程語言,通過編寫特定的代碼片段讓計算機理解我們的意圖。於是後來有了很多種計算機編程語言,如C++、C#、Java、JavaScript、PHP、Kotlin,彙編語言等等。
3. 認識程序員(軟體開發者)這個工作職務
(1)軟體開發者應至少應該具備什麼能力?
就現在的社會需求來說,作為軟體開發者,我們應該至少懂得一門編程語言,並且能利用軟體開發使用這種編程語言在實際工作中完成相應的工作,至少這樣才是一個合格軟體開發者。
現在很多軟體開發項目中都是由多個人來完成的,那麼必定由一個開發者負責開發環節中特定的任務,如java後端工程師編寫與數據交互的代碼邏輯,Android工程師負責編寫Android APP,IOS工程師負責編寫iPhone APP,等等。
(2)軟體開發者應該長期具備什麼能力?
首先:不斷學習。在軟體開發這個領域中,開發技術不斷的更新與變化,如果想要具備競爭能力,那就必須不斷的學習,而不是長期以原有的技術混飯吃,如果真是這樣,最終是要被淘汰的。這個行業不適合想要一勞永逸的人。在這個行業必須不斷學習、創新,你必須具備不怕苦不怕累的創業精神。
其次:做一個有計劃的人:你應該時時有危機感,那麼就給自己制定計劃,不管是短期計劃還是長期計劃,朝著那個目標努力,你會越來越優秀。你是一個初級程序員,你應該朝著高級程序員的目標努力;你一個高級程序員,你應該朝著架構師的目標努力;而當你成為了架構師,你應該朝著管理者的目標努力。只有做好計劃,並隨著時間的改變而改變,朝著目標努力,你才能不斷實現自己的價值。
4. 沒有編程基礎,我該怎麼入門?
我相信這是大多初學者困惑的問題,也是阻礙很多初學者學習進度的問題。你不知道從哪裡開始學習,或者不知道從何開始,接下來我以自己的學習經歷,給大家提供一些建議,希望對你有幫助。
(1) 你應該具備什麼基礎:
自學你至少得有一台自己電腦,這台電腦不需要配置有多高,除非你學習的是開發大型3D遊戲。傳統的開發學習,普通筆記本、台式機都可以的,但是必須得有網路,因為你需要從網路上獲取這種學習資料,況且我們是在學習信息技術,沒有網路怎麼可能,想一想多可怕,最重要的是,你要喜歡它再去學它,如果不喜歡它,學了又有什麼意義。
(2) 數學、英語不好,能學好編程嗎?
就這麼說吧,如果你感覺自己數學不好,但是你喜歡信息技術方面,你就好好學吧,你是能學好編程的。我的數學和英語真的是超級不好,原因是我不喜歡它們。編程的邏輯性挺強的,但是不代表你的數學不好你的編程就學的差,它們本就不是一個回事,雖然編程很多時候用於科學計算方面,但是如果我們學習編程是為了開發應用軟體,為的是找工作,編程本就沒有那麼別人說的那麼難。
英語不好呢?那也可以學好的。計算機發展技術源自西方,西方人在這方面做的比我們多,當然這些計算機語言幾乎全是英語字母組合的。我想,如果我們能趕在西方之前發展信息技術,現在外國人估計就使用中文來編程了。但是我英語不好,句子都讀不通順,怎麼辦?沒關係的,讀代碼與讀英語文章完全不一樣,雖然大多數代碼使用的是英文字母來編寫,而理解代碼更多的是理解它的邏輯。但是,如果你的英語不好,你最好提高一下的英語水平,因為很多開發文檔、教程,是使用英文來寫的。不是說你英語不好你就不能寫代碼,但是你不能連「hello」、「how are you」這些簡單的英文單詞都不認識,也就是說,你具有初中畢業生的英語水平就可以學習編程了。
(3) 選擇自己喜歡的方面入門:
軟體開發過程中根據不同的需要,包含了多個工作任務和多種工作流程,因此也產生了不同的工作崗位,前端工程師:Android工程師、IOS工程師、Web前端工程師,後端工程師:Java後端工程師、Python後端工程師、PHP工程師,Linux運維工程師,現在還流行著大數據工程師、AI(人工智慧)工程師,等等。當然,在人員缺少的情況下有的人卻擔任了好幾種身份,但是在大公司裡面,分工一般是明確的。
那怎麼開始入門學習呢?首先,選擇自己喜歡的語言,選擇自己方向,朝著那麼目標學習。可是我都沒了解過,我怎麼知道什麼編程語言適合我?這就需要你事先了解一下了,既然打算自學編程,那你應該查閱一些資料了解一下,什麼語言適合來做什麼,自己又應該學習什麼語言。當然,我們的長遠的目標是精通一個技術方向,但是其他方向最好是什麼都要會。
所以,我建議你選擇自己喜歡的方向,容易的入門的方向進行入門學習。可是有的人說現在很火的不是大數據、人工智慧嗎?月薪兩三萬、四五萬的。但是你要知道,對於一個任何基礎都沒有的普通初學者,需要花多少功夫才能達到大數據工程師、AI工程師的水平,所以學習基礎是十分重要的,至少得保證你有一樣技能了,能保證自己能勝任某項工作之後,再朝著更高得層次努力,也許那樣會更好。
我當年選擇Android作為入門學習的方向,原因是我挺喜歡Android。我開學習Android的時候是在2015年,那時候很多人說Android現在飽和了,學習Android會找不到工作。但是我並沒有放棄學習Android,我想,如果有時間去擔心以後找不到工作,為什麼不靜下心來好好學,只要學好了為什麼還要怕找不到工作,為什麼自己不可以作為那些學習Android中的佼佼者,你可以比別人笨,但是你也可以比別人努力,況且,又有多少人真正的承認自己比別人笨呢?現在再回想自己當年學習Android的時候,每天晚上堅持觀看視頻,記筆記,先學Java基礎,後是Android基礎,就這樣堅持好幾個月。挺辛苦,可是後來收穫的是開心的。
當然,你有很多選擇。如果你喜歡APP開發,那麼就是Android和IOS了,而Android學習成本比IOS學習成本低,原因就是如果你要做IOS開發你需要mac電腦,Android開發使用普通的Windows就可以,進一步學習的話你可以安裝一個Linux操作系統,再加上一個幾百元的Android手機就可以學習了,等你掌握Android開發後再學習IOS也不遲。如果你喜歡後端開發,我建議你選擇Java、Python、PHP這些語言。假如你之前沒有接觸過編程,只要認真學,這些語言挺容易入門的,如果有一點C語言基礎那更好。而如果你喜歡Web 前端,那你就好好學習H5+CSS3+JavaScript,一個合格web前端工程師除了能把網站做出漂亮的特效,還要懂得後端的知識,這時可以學一學Node.js。雖然開發技術分類很多,但是這些技術都是相通的,有了一門技術的基礎之後,再學習其它技術就輕而易舉了。而在初學者階段,你需要選擇一門技術進行系統的學習,同時不要忘記多了解一些其他的技術。
(4) 怎麼獲取學習資源?
你可以買一本書。書有好有壞,有的書適合初學者,而有的書不適合初學者;有的書通俗易懂,也有一些書全是廢話,甚至錯誤一堆,這就需要你好好辨認了。有的書適合你,但是有的書雖好,卻不適合你,你應該到書店裡面,到圖書館裡面好好翻一翻,選擇合適自己的一本系統教學書籍。對於技術類型的書,盡量選擇比較新的,對於同一種技術,盡量避免好幾年的書籍,因為技術書籍不像文學書籍那樣,技術每天都在改變。
你還可以看一套系統的視頻教程。互聯網上免費的教程資源很多,如果好好利用,相信你一定能學好的。有的視頻里老師講課方式不適合你,而有的老師講課方式很適合你,我相信後者對你的進步更有幫助。現在教學網站也很多,也提供了大量的免費資源,如極客學院、慕課網,百度傳課、騰訊課堂等等都有大量的免費資源,建議你花一些時間去嘗試聽一下多套視頻的第一節課,最後選擇最適合自己的一套。
(5) 要會利用互聯網解決問題:
你在學習編程過程中必定遇到很多問題,甚至有時出現的bug讓自己感到崩潰、無助,這時不要慌,這是很多初學者都是必定經歷的過程,只要一個一個問題的解決了,積累經驗,以後你才能解決實際開發中遇到的問題。在你遇到錯誤時,把你出現的錯誤百度一下,必定別人也遇到過,並有一堆的解決辦法。你還可以到各大論壇尋求幫助,如國內的CSDN論壇,如果你英語閱讀能力比較好,還可以到http://stackoverflow.com網站上尋求全球開發者的幫助。
(6) 多讀別人的代碼,借鑒別人的長處:
閱讀別人的代碼是自己提高編碼能力的一個方法,你可以看到自己與大神的距離,然後努力朝著目標努力,一個合格的開發者,不僅能自己寫代碼,還要有閱讀別人代碼的能力。
(7) 多練習,孰能生巧:
學習中編程的過程中,看懂和會做完全是兩回事,不要覺得自己看視頻看懂了,或者看書看懂了就從來不去編碼練習了。往往很多人看懂了,但是自己卻敲出一堆的錯誤,這階段你需要不斷的練習。網上說的「7天掌握PHP」、「5節課掌握java」,等等這些,以一個普通初學者的角度來說絕對是不可能的,作為初學者,應該腳踏實地,每天堅持,積累上幾萬行代碼,甚至幾十萬行代碼,也許那樣才是真正的入門。這世上沒有不勞而獲的,所有的收穫,必定經歷付出,知識也一樣,加油!
5. 總結:
上一個世紀的前輩們在學習的時候,他們沒有網路,沒有那麼多學習資料,而他們卻能給後人創造了很多有價值的東西,他們都那麼堅持,我們就沒有理由不努力了。
不管怎麼說,學習編程不容易,一定要真正的喜歡它再去學,腳踏實地,堅持不懈,往既定的目標努力。入門學習的付出是辛苦的,甚至是乏味的,但是拼一拼,努力奮鬥,相比最後得到的,是值得的。加油!
我也會利用業餘時間分享一些開發技術視頻,歡迎訂閱我們的嗶哩嗶哩視頻分享頻道(極客開發者),也可以訂閱我們的微信公眾號(jkdev_cn),交流與提問、接收最新分享內容。
推薦閱讀:
※理論上最好的編程語言: 哲學基礎篇
※開源 | Python基礎入門課程
※Filedescriptor out of range in select
※python字元串操作
※C#中使用Lambda表達式簡化代碼