當前位置:菜譜大全網 - 菜譜 - 如何從零開始學習編程?

如何從零開始學習編程?

學編程之前要想好自己的目標,有了終極目標道路才會更清晰。那麽,妳想寫什麽?網站?遊戲?IOS還是Android應用?還是想把壹些無聊的任務自動化,讓自己有更多的時間去看窗外的風景?也許妳只是想在就業上更有競爭力,找到壹份好工作。這些都是有價值的目標,是妳編程學習動力的壹部分。沒有驅動力,人在略顯枯燥的漫長學習旅途中走不遠。

不要沖動

Badprogrammingiseasy。evendummiescanlearninit 21天。好的編程需要思考,但每個人都可以體驗隨之而來的極度滿足感。

無論是線上還是線下,書店裏都充斥著“21天學會Java”這樣的速成書籍,承諾能讓妳在短時間內學會相關技術。MatthiasFelleisen在他的著作《如何設計程序》第二版中明確指出了這種“崩潰”的趨勢,並做出了上述諷刺。

所謂的“捷徑”或“銀彈”是不存在的。壹位智者說,掌握壹件事需要65,438+00年或者65,438+00,000個小時,也就是中國的“十年磨壹劍”,所以不要擔心,妳不會做出貢獻的。

培養興趣

最優秀的程序員不是因為他們期望togetpaidorgetadulationbythepublic,而是因為它是funtoprogram。

_LinusTorvalds

沈迷編程,編程是為了興趣。興趣是不竭的動力源泉。讓這種感覺充滿興趣,這樣妳就可以把它放進妳10 /10000小時的編程時間裏。編程很有趣,那就是探索的樂趣。那是創造的快樂。看到自己的作品顯示在屏幕上很有意思。有趣的是,有人對妳的代碼感到驚訝。有人在公開場合誇妳的產品,鄰居用妳的產品,在媒體上討論妳的產品,這很有意思。編程應該是非常有趣的,如果不是,找出讓編程變得無趣的問題,然後解決它。

這裏有兩個適合新手的大坑:

如果初學者只接觸到預先構建好的“引擎和組件”(沒有了解和思考它們的構建原理),這將嚴重限制他們以後構建這些東西的能力,在診斷和解決問題時無從下手。

第二個坑沒有第壹個坑明顯:幼稚的“整體論”方法有時候看起來很有效,有些隱蔽性和誤導性,但是壹兩年後(可能沒那麽久),當妳在學習路上走遠了,再試圖“補基礎”就會有巨大的心理障礙。妳要拋棄之前狹隘的觀念,耐心的往前走,這比妳剛入門的時候學習基礎知識要難得多。

但也不能過猶不及,掉進還原論的坑裏,剛入門就想搞個宏大的理論。這不僅會導致壹切成為空談的危險,還會讓妳失去動力。這種情況經常發生在計算機專業的學生身上。

為了更好的理解,學習編程可以比喻為學習烹飪:妳為了做好烹飪,買了壹些關於菜譜的書。如果妳只是想為家人做飯,這將是壹個好主意,重復食譜上的步驟,妳就可以做出好菜。但如果妳有更大的野心,真的想在朋友面前炫耀,做壹些獨特的美食,甚至成為壹名“廚師”,妳就必須了解這些食譜背後的大師們的想法。但如果妳每天唯壹的工作就是看那些沈重的理論書,因為缺乏實踐,妳只會成為壹個糟糕的廚師,甚至永遠不會成為壹個廚師,因為看了幾天書,妳就會因為無聊而放棄學習烹飪。

總之,編程是理論和實踐的紐帶,是計算機科學和計算機應用技術交融的領域。正確的編程學習方法應該是:通過自上而下的探索和項目實踐,獲得編程直覺和驅動力;在自下而上打基礎的過程中,獲得最重要的通用方法,鞏固對編程思路的理解。

作為初學者,應以後者為主,前者為輔。

啟發

“我應該學習什麽語言來編程?這往往是新手問的第壹個問題,但卻是壹個錯誤的問題。妳的第壹個問題應該是“什麽構成了編程學習的基礎”?

編程知識金字塔的底部有三個關鍵部分:

算法思路:比如如何求壹組中最大的數?首先妳必須有壹個maxSoFar變量,然後對於每個數字,

語法:如何用編程語言表達這些算法,讓計算機能夠理解?

系統基礎:為什麽線程永遠不能結束while(1)?為什麽int * foo(){ intx = 0;返回& ampx;}不可行?

對於初級階段的初學者來說,選擇C作為第壹語言會比較困難和枯燥,因為他們是被迫同時學習這三個部分的,要花很多時間才能做出點東西來。

所以為了盡量減少“語法”和“系統基礎”這兩個部分,建議把Python作為第壹語言來學習。Python雖然對初學者比較友好,但並不意味著它只是壹個“玩具”,在大型項目中也可以看到它強大靈活的身影。在妳熟悉Python之後,學習C語言是壹個不錯的選擇:學習C語言有助於妳從接近底層的角度去思考,也有助於妳以後理解操作系統層面的壹些原理。如果妳只是想做壹個普通(平庸)的開發者,可以不學。

下面是啟蒙階段的參考指南。完成後,妳會在腦海中構建壹個整體框架,幫助妳從上到下的探索。

完成Codecademy的Python部分。這只是熱身部分,所以盡快完成,因為妳永遠都在瀏覽器裏,妳不會學到如何構建開發環境。妳不知道從哪裏開始,即使妳只是想做壹個小項目。

完成MIT6.00.1x(中國文化)(如果英語不過關,完成MIT公開課:計算機科學與編程導論)。大型開放式網絡課程是學習編程的有效途徑。雖然這門課程的教學語言是Python,但是作為壹門優秀的入門課程,它強調的是學習計算機科學領域的重要概念和範式,而不僅僅是教妳壹門特定的語言。如果妳不是普通學生,這可以在妳自學的時候開闊妳的視野;課程內容:計算概念,python編程語言,壹些簡單的數據結構和算法,測試和調試。附帶任務:

完整的Python核心編程

完成HarvardCS50(如果沒有通過英語:完成哈佛大學開放課程:計算機科學CS50)。也是入門課,但這門課是對麻省理工學院入門課的補充。教學語言涉及C,PHP,JavaScript+SQL,HTML+CSS。內容的廣度和深度都很合理,還可以學習最新的科技成果,可以激發妳學習計算機的興趣。附帶任務:

閱讀編碼的奧秘

完成《C語言程序設計》

[可選]如果妳的目標是成為壹名黑客:請閱讀《黑客之光》。

PS:如果教育的對象還是孩子,以下資源會很有幫助:

5-8歲:海龜學院

8-12歲:PythonforKids

12歲以上:MITScratch或KhanAcademy。

初級課程

啟蒙階段結束後,初學者積累了壹定的代碼,對編程有了壹定的了解。這時候妳可能想學壹門特定的技術,比如Web開發,Android開發,iOS開發等等。妳可以試著做壹些盡量簡單的事情,給自己壹些積極的反饋,補充自己的動力。但是切記不要深究,這些技術有無數的細節,以後有時間學習;同樣,這個時候也不要太深入具體的框架和語言。現在是學習計算機科學壹般基礎知識的時候了。不要試圖走捷徑,現在就去學自己想學的東西,這樣註定是失敗的。

那麽初期應該怎麽做呢?這個時候妳需要做的就是反思自己寫的程序,思考程序為什麽要這樣設計。思考如何寫出更好的程序?試圖探索和理解編程的本質:利用計算機解決問題。

想象壹下:

X=思考解決方案的時間,即“解決問題”部分。

Y=執行代碼所用的時間,即“使用計算機”部分

編程能力= f (x,y)(x >;y)

想提高編程能力,就得優化X,Y和函數F(X,Y)。很少有書能同時關註這三點,但有壹本書做到了——計算機程序的結構化解釋(SICP),它向妳展示了這三個變量的方向。在閱讀SICP之前,妳也許可以通過調用幾個函數來解決壹個簡單的問題。但讀完SICP,妳會學會如何抽象和分解問題,從而處理更復雜和巨大的問題。這是編程能力的巨大飛躍,將從本質上改變妳思考問題和用代碼解決問題的方式。另外,SICP的教學語言是Scheme,可以讓妳初步了解函數式編程。更重要的是,他的語法非常簡單,妳可以很快學會,這樣妳就可以花更多的時間研究書中的編程思路,解決復雜的問題。

PeterNorvig曾經寫過壹篇精彩的SICP書評,其中有這樣壹段話:

打個比方,如果是關於汽車的,它將會為那些想知道汽車如何工作,如何制造,以及如何為21世紀設計省油、安全、可靠的汽車的人所用。那些想開車的人是想知道如何在高速公路上開車的人,就像其他人壹樣。

如果妳是文章中的前者,閱讀SICP將是妳連接啟蒙和入門階段的關鍵點。

雖然《SICP》是壹本“入門書”,但對初學者來說仍然很難。以下是壹些非常有用的輔助資源:

Udacitycs212計算機程序的設計):主講人是上面提到的Google的研究總監PeterNorvig。教學語言是Python,內容有些難。

如何設計程序,第二版:HtDP的起點比SICP低。書中的內容對初學者有說服力,也很友好。如果妳覺得完成《SICP》太難,可以考慮先讀HTDP。

UCBerkeleySICP教學視頻和《SICP》兩位作者培訓惠普公司員工的視頻(中國文化項目)。

ComposingPrograms:繼承SICP思想但使用Python作為教學語言的編程入門(包括壹些小項目)。

SICP解題集:作為初學者,妳應該盡力完成書後的練習。

完成這部分學習後,妳會逐漸建立起自己的編程模型,妳的腦子也不會再亂糟糟了。妳會意識到背庫和語法並不會教會妳如何解決編程問題,接下來學什麽妳心裏會清楚很多。這是真正開始項目實踐和補充驅動力的好時機。

關於項目實踐:初學者參與開源項目為時尚早。這時候妳應該開始做壹些簡單的項目,比如建壹個網站並維護,或者寫壹個小遊戲並擴展。如果妳自己的想法不清楚,從MegaProjectList中選擇壹個項目。總之,這個時候壹定要從妳的項目實踐中抽走第壹滴血。

同時,別忘了繼續打好基礎。為了以後積累財富,妳要在以下幾個方面繼續做功課(註意:以下內容沒有絕對順序):

計算機系統基礎

有了之前編程的基礎,如果想更深入地把握計算機科學的脈絡,不妨看看這本書:《深入理解計算機系統》。在這裏點名批評這本書的中譯本,其實是遠遠不夠深入的。這本書只是CMU介紹計算機系統的教科書。CMU的計算機科學專業相對偏愛軟件。本書是以壹個程序員的視角來觀察計算機系統,以“如何在計算機中執行程序”為主線,全面闡述計算機系統內部實現的諸多細節。

如果妳覺得閱讀有點無聊,妳可以關註壹個大型開放式網絡課程:Coursera上的硬件/軟件界面。這門課的內容是CSAPP的子集,但是最經典的實驗部分都被移植了。同時可以看看ProgrammingLanguage,復習壹下C語言的知識。

學完這本書,妳就有了紮實的系統基礎,也有了學習操作系統、編譯器、計算機網絡等的前提條件。在學習更高級的系統內容時,通讀本書的相應章節,並編程實現其中的實例,壹定會對書中的理論有更感性的理解,這樣處理的代碼從上層設計到底層實現都能看得壹清二楚,數據也能在網絡上的大腦中回放-& gt;內存-& gt;緩存-& gt;CPU的流向。

另外,是時候接觸壹下UNIX哲學了:kiss-keeptsimple,笨蛋。實際上,這意味著您應該熟悉命令行界面和配置文件。並且在開發中逐漸擺脫之前使用的IDE,學會使用Vim或者Emacs(或者最好兩者都試試)。

閱讀UNIX編程環境

閱讀UNIX編程的藝術

扔掉妳的UN*X系統

數據結構和算法基礎

現在很多人認為編程(尤其是web開發)的主要部分就是用別人的代碼。能夠清晰簡潔地表達自己的想法,比掌握硬核的數學和算法技能重要得多。數據結構排序函數的二分搜索法不是內置的嗎?妳在工作中永遠不會需要它。學習算法有什麽用?這種打著實用主義旗號的“碼農”思想當然不可取。沒有紮實的理論背景,遇到瓶頸只是時間問題。

數據結構和算法匹配。初期妳要掌握的主要內容應該是:什麽算法和數據結構能更快的解決這個問題?這需要妳熟悉常用的數據結構和算法。妳不必鍵入代碼。用紙手寫是壹種更快的方法。對於不了解的數據結構和算法,要搜索它們主要用來做什麽,使用場景是什麽。

供您參考的學習資源:

IntroductiontoAlgorithms:有人說這本書不應該被視為入門書。這本書根本不是壹本入門書。雖然它的標題是算法導論,但這只是因為作者不想將這本書與其他書籍重復。當然,這本書不是不能入門。第壹遍看的時候跳過習題和證明就行了。如果妳還覺得愧疚,先看看這個數據結構和算法分析。

課程算法:設計與分析。【Part 2】:斯坦福的算法課不局限於語言,兩部分基本都會有算法基礎;英語不及格:麻省理工學院開放課程:算法導論

在初始階段,還要註意培養運用常規算法解決小規模問題的能力。我們可以結合上壹篇文章《編程明珠與編程實踐》的SICP部分來閱讀這些書籍。

編程語言基礎

不同的語言用不同的方式解決同樣的問題。通過學習多種不同的方法,妳可以拓寬妳的思路。此外,學習learningmanylanguagesisfareasiernow,thankstothewealthoffreelyavailablesoftware on the internet

-預演節目

另外要知道,學習第n種編程語言的難度是學習(n-1)種編程語言的壹半,所以要盡可能嘗試不同的編程語言和編程範式。如果按照前面的指導,妳已經接觸到了三個好朋友:“幹凈”的腳本語言Python,傳統的命令式語言C,浪漫的函數式語言Scheme/rack。但是僅僅接觸是不夠的。妳需要繼續加深和他們的友誼,努力結交新朋友。美麗優雅的紅寶石少女,Hindley-Milner語族的掌中之寶Haskell都是不錯的選擇。但是有這麽壹個大夥伴,妳躲都躲不開又不得不知道———c++,妳得做好和他交朋友的準備:

簡介:c++初級讀本

[可選]高級:

高效使用:EffectiveC++

深度理解:《C++對象模型深度探索》;c++模板

研究反思:thedesignandevolutionofc++;+;為了C++的必要,閱讀這本書可以讓妳選擇是做壹個守夜人還是壹個守夜人。

現實是殘酷的。軟件工程領域還是有壹些發燒友的。他們只掌握壹門編程語言,只想掌握壹門語言。他們認為自己掌握的語言是最好的,其他的異端都是愚蠢的。這種人不是沒救了。有壹個簡單的處理方法:讓他們寫壹個編譯器。要真正理解壹門編程語言,妳必須自己實現壹門。現在是入門階段,不要求妳上編譯器課程,但要求妳至少實現壹個簡單的解釋器。

供您參考的學習資源:

“編程語言-實踐之路”:壹本關於CMU編程語言原理的教科書和壹本關於編程語言的入門書。現在就可以讀,會大大開闊妳的眼界,拉大妳和普通人的差距。

Coursera編程語言大型開放式網絡課程:在課堂上,妳可以接觸到使用extreme FP(函數式)的SML,使用neutral FP的Racket,使用extreme OOP(面向對象)的Ruby,學習FP分解vsOOP問題的分解,ML的模式匹配,Lisp宏,不變性和可變性,解釋器的實現原理,這樣妳就可以更輕松的學習壹門新的語言,以後可以寫出更好的程序。

Udacitycs 262編程語言:預熱,教妳寫壹個簡單的瀏覽器——其實就是壹個javascript和html解釋器,成品還是很有意思的;接下來,嘗試完成SICP部分提到的壹個項目:用Python寫壹個SchemeInterpreter。

其他的

編程初期容易忽略的幾點:

學好英語:英語是妳獲取優質學習資源的主要工具,但在起步階段,妳看的那些譯著的信息流失並沒有那麽嚴重,要根據自己的情況權衡。另外,英語的重要性更多體現在交流上。LinusTorvalds是芬蘭人,流利的英語壹直是他招募開發人員為Linux工作的法寶。這是妳的例子。

學會提問:學習中肯定會遇到問題。首先,妳要學習搜索引擎的“高級搜索”。當問題單靠搜索無法解決時,去找StackOverflow或者知乎提問。在提問之前,請閱讀這篇文章:妳得到了什麽?

不要做獨狼:嘗試建立壹個簡單的個人網站,而不只是壹個孤獨的About page,學習Markdown和LaTeX,嘗試在博客上記錄自己的想法,訂閱自己喜歡的編程博客。推薦幾個給妳參考:Joel on Software,Peternorvig,Coding Horror。

總結

以上妳不要怕,編程入門不是幾個星期就能完成的小項目。在此期間,妳會遇到無數的困難。當妳碰壁的時候,試試費曼技巧:把難點分成小塊知識,然後壹個壹個處理,然後通過向別人解釋清楚來檢驗自己是否真正理解。當然,還是會有妳解決不了的問題,所以這個時候不要勉強自己——很多時候當妳以後回頭看這個問題的時候,壹切都會豁然開朗。

另外,不要把自己局限在上面提到的材料上。還有壹些書值得在入門階段和以後的提升階段反復閱讀。《程序員入門》就是這樣壹本程序員入門書籍,也是壹本終極書籍。有人稱這本書為代碼百科全書:從幹到吻,從做人到做程序員,這本書教會妳壹切,妳需要的只是按照書中的指示去做。

附言

如果妳能設法完成以上所有任務,那麽恭喜妳,妳真的實現了編程入門。這意味著妳將不會害怕學習壹門新語言的任務,“復雜”的API,特定的技術,甚至在進壹步的學習中感到輕松。當然,為了掌握這些東西,妳還是需要大量的練習,腰還是會疼,走路還是會有困難,壹口氣上不了五樓。但我可以保證,妳會在思想上有很大的轉變,獲得很大的自信,對老師、同學、csdn的眼光也會變得很微妙。雖然妳剛剛完成編程入門,但妳已經成為程序員精神世界的高富帥。不,我錯了。即使是高富帥也不會有強大的精神力。他會懷疑自己,覺得自己沒錢什麽都不是。但簡而言之,如果妳按照指南並努力學習,妳會體驗到“壹旦爬到山頂,就會看到”的感覺。

首先,如果妳想學習編程,選擇壹門合適的計算機語言是非常重要的。如何選擇尤為重要。這取決於妳的愛好和每種語言的特點。例如,php是壹種非常流行的適合web開發的計算機語言,易學易用。我個人推薦PHP語言。

Java可以用於web開發,也可以用於Android app開發。可能比php難學壹點,但沒問題。如果對java感興趣,可以試試。

Python是目前比較流行的語言,適用於人工智能領域。另外,也很適合給網絡爬蟲寫程序,看個人興趣。

不建議用C,c++,C #,尤其是c#,已經是比較過時的語言了。就算學得好,也不適合找工作。C和c++不是很適合初學者學習,沒必要考慮。還有壹些小語種,就更沒必要考慮了。所以,妳應該從以上三種語言中選擇壹種妳感興趣的語言進行語言學習。

R&D與建築環境

如果妳選擇了好的計算機語言,那麽接下來就是設置R&D環境,因為只有設置了R&D環境,妳才能進行後續的編程工作,比如PHP,然後從百度上搜索如何安裝PHP環境,就可以找到壹些簡單的教程。新手可以壹步壹步的設置R&D環境,最多也就半天的時間。如果是java,需要先安裝jdk,配置環境變量。網上也有相關教程。

選擇視頻和書籍來幫助妳學習。既然是零基礎學習,就要進行系統的學習,而不是到處從零基礎的知識點開始學習。

代碼實踐

壹章壹章的跟著教程走,需要註意的是不能只看。那不行。妳得自己用代碼敲打每壹章的知識點,運行壹下試試效果。只有這樣才能提高自己的動手能力,剛開始會覺得有點生疏,慢慢就會熟練起來,增加對編程的興趣。這個過程需要反復練習,大量的代碼練習。這個過程是五個步驟中最關鍵的階段。自己練習代碼很重要。編程中壹些不懂的章節不要放過。可以在網上找壹些相關的編程交流群,加入其中,也可以在網上咨詢壹些有經驗的人。也許可以輕松幫妳解決問題,對妳的學習很有幫助,而且全程免費。

項目實戰

如果基礎課已經按部就班的練好了,那麽妳有了壹些編程的基本功,那麽妳可以嘗試做壹些小項目,把妳學到的知識串起來,進入項目的實戰階段,比如自己設計壹個學生管理系統,並完成。如果不知道怎麽設計,可以去網上搜壹下。慢慢的,我有想法了。

我也在研究這方面。看了很多視頻書,最推薦的是北京上學堂的學習資料,有Java.300集,Python400集。都是經典的基礎入門課程,結合項目學習。他們很有意思,幹貨滿滿,免費。我推薦妳去讀它們,我相信它們能帶妳進入改變的世界。

從零開始學編程,第壹關就是選擇妳想學的編程語言。面對種類繁多的編程語言,初學者往往無所適從,拿不定主意,不知道選擇哪壹種。