不要浮躁。甚至dummiescanlearning 21days。好的編程需要壹個家,但是每個人都需要壹個家。無論線上還是線下書店,到處都有類似“21天學會Java”的速成書,而且都承諾妳可以在短時間內學會相關技術。MatthiasFelleisen在他的著作《如何設計程序》第二版中明確指出了這種“崩潰”的趨勢,並做出了上述諷刺。所謂的“捷徑”或“銀彈”是不存在的。壹位智者說,掌握壹件事需要65,438+00年或者65,438+00,000個小時,也就是中國的“十年磨壹劍”,所以不要擔心,妳不會做出貢獻的。培養興趣最重要的是編程,而不是因為他們期待公眾的參與。_ 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編程【可選】如果妳的目標是成為壹名黑客:閱讀Hacker 'sDelightPS:如果教育的對象還是孩子,以下資源會很有幫助:5-8歲:TurtleAcademy8-12歲:PythonforKids12歲以上:經過MITScratch或KhanAcademy的啟蒙階段,初學者已經積累了壹定的代碼,對編程有壹定的了解。這時候妳可能想學壹門特定的技術,比如Web開發,Android開發,iOS開發等等。妳可以試著做壹些盡量簡單的事情,給自己壹些積極的反饋,補充自己的動力。但是切記不要深究,這些技術有無數的細節,以後有時間學習;同樣,這個時候也不要太深入具體的框架和語言。現在是學習計算機科學壹般基礎知識的時候了。不要試圖走捷徑,現在就去學自己想學的東西,這樣註定是失敗的。那麽初期應該怎麽做呢?這個時候妳需要做的就是反思自己寫的程序,思考程序為什麽要這樣設計。思考如何寫出更好的程序?試圖探索和理解編程的本質:利用計算機解決問題。試想:X=思考解決方案所花的時間,即“解決問題”部分Y=實現代碼所花的時間,即“使用計算機”部分編程能力= f (x,Y)(X >;Y)想提高編程能力,就得優化X,Y和函數F(X,Y)。很少有書能同時關註這三點,但有壹本書做到了——計算機程序的結構化解釋(SICP),它向妳展示了這三個變量的方向。在閱讀SICP之前,妳也許可以通過調用幾個函數來解決壹個簡單的問題。但讀完SICP,妳會學會如何抽象和分解問題,從而處理更復雜和巨大的問題。這是編程能力的巨大飛躍,將從本質上改變妳思考問題和用代碼解決問題的方式。另外,SICP的教學語言是Scheme,可以讓妳初步了解函數式編程。更重要的是,他的語法非常簡單,妳可以很快學會,這樣妳就可以花更多的時間研究書中的編程思路,解決復雜的問題。彼得·諾威格曾經寫過壹篇非常精彩的SICP書評,其中有這樣壹段話:打個比方,如果我們發明了汽車,人們將會知道如何使用汽車,如何建造汽車,以及如何為21世紀設計節能、安全、可靠的汽車。和其他人壹樣,那些想要了解高速公路的人。如果妳是前者,閱讀SICP將是妳連接啟蒙階段和入門階段的關鍵點。雖然《SICP》是壹本“入門書”,但對初學者來說仍然很難。以下是壹些非常有用的輔助資源:uda citycs 212 design of Computer Program):講座由上面提到的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 1]&;【Part 2】:斯坦福的算法課不局限於語言,兩部分基本都會有算法基礎;英語不及格:MIT公開課:算法導論在入門階段,還要註意培養用常規算法解決小規模問題的能力。我們可以結合上壹篇文章《珍珠程序設計》的SICP部分來閱讀這些書。《編程實踐》編程語言基礎differentiallanguagesolvethesame problem in differentials。通過學習幾種不同的方法,妳可以幫助broadyenyourthingandavidgettingstuckinaut。另外,學習learningmanylanguagesisfareasiernow,ThankstotheWealthofFreelyavailable software onheinternet-The practical Programmer另外,妳要知道學習第n門編程語言的難度是(n-1)門的壹半,所以要嘗試不同的編程語言和編程範式。如果妳按照上面的說明去做,妳就接觸到了三個好朋友:“幹凈”的腳本語言Python,傳統的命令式語言C,浪漫的函數式語言Scheme/rack。但是僅僅接觸是不夠的。妳需要繼續加深和他們的友誼,努力結交新朋友。美麗優雅的紅寶石少女,Hindley-Milner語族的掌中之寶Haskell都是不錯的選擇。但是有這麽壹個妳逃不掉又必須知道的大夥伴——C++,妳得做好和他深交的準備:入門:C++初級【可選】高級:高效使用:EffectiveC++深度理解:c++對象模型深度探索;關於C++模板研究的思考——c++的設計與進化:+;為了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,Peter Norvig,編碼恐怖。以上內容妳不要怕。編程入門不是幾個星期就能完成的小項目。在此期間,妳會遇到無數的困難。當妳碰壁的時候,試試費曼技巧:把難點分成小塊知識,然後壹個壹個處理,然後通過向別人解釋清楚來檢驗自己是否真正理解。當然,還是會有妳解決不了的問題,所以這個時候不要勉強自己——很多時候當妳以後回頭看這個問題的時候,壹切都會豁然開朗。另外,不要把自己局限在上面提到的材料上。還有壹些書值得在入門階段和以後的提升階段反復閱讀。《程序員入門》就是這樣壹本程序員入門書籍,也是壹本終極書籍。有人稱這本書為代碼百科全書:從幹到吻,從做人到做程序員,這本書教會妳壹切,妳需要的只是按照書中的指示去做。後記如果妳能設法完成以上所有任務,恭喜妳,妳真的做到了編程入門。這意味著妳將不會害怕學習壹門新語言的任務,“復雜”的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。配置環境變量也很容易,網上也有相關教程。我相信,只要妳按照教程,妳可以很容易地選擇視頻和書籍,以建立R&D環境來輔助學習。既然是零基礎學習,就要進行系統的學習,而不是到處從零基礎的知識點開始學習。代碼實踐壹章壹章地遵循教程。有壹點要註意,不能光看。那不行。妳得自己用代碼敲打每壹章的知識點,運行壹下試試效果。只有這樣才能提高自己的動手能力,剛開始會覺得有點生疏,慢慢就會熟練起來,增加對編程的興趣。這個過程需要反復練習,大量的代碼練習。這個過程是五個步驟中最關鍵的階段。自己練習代碼很重要。編程中壹些不懂的章節不要放過。可以在網上找壹些相關的編程交流群,加入其中,也可以在網上咨詢壹些有經驗的人。也許可以輕松幫妳解決問題,對妳的學習很有幫助,而且全程免費。如果妳說基礎課已經按部就班的練好了,那麽妳有了壹些編程的基本功,那麽妳可以嘗試做壹些小項目,把學到的知識串起來,進入項目的實戰階段。比如妳可以自己設計壹個學生管理系統,完成它。如果不知道怎麽設計,可以去網上搜壹下。慢慢的,我有想法了。我也在研究這方面。看了很多視頻書,最推薦的是北京上學堂的學習資料,有Java.300集,Python400集。都是經典的基礎入門課程,結合項目學習。他們很有意思,幹貨滿滿,免費。我推薦妳去讀它們,我相信它們能帶妳進入改變的世界。從零開始學編程,第壹關就是選擇妳想學的編程語言。面對種類繁多的編程語言,初學者往往無所適從,拿不定主意,不知道選擇哪壹種。