為什麼我的編程一直沒法入門?

@依雲 我是一個學生,從小對遊戲軟體編程這方面感興趣而已,希望以後能做一位獨立遊戲開發人。還沒有進大學,但是我希望在大學之前就開始學習,這樣我大學會有更多的時間去深入編程。積累了經驗,將來往這方面的工作就會順心一點。

我是兩年前開始學習編程的。當時在書店買了一本21天學會C語言的書。花了一年多的時間啃完了。最後一部分是做一個學生成績登記項目,分為6塊。我跟著講解做了3塊,沒有繼續做。因為我是在課餘的時候抽空做的,所有的代碼都寫在紙上,因為上學的時候沒有電腦。

後來又在網易公開課中看了6集的編程方法學,講的是java,卻沒有繼續看下去。因為是斯坦福大學的,英文就算有字幕看起來也不順,視頻中的編譯器是斯坦福大學的,所以我也沒法下載。雖說後面用了eclipse,但是java太冗長,總寫不出來什麼東西。
又在無意間發現了codecademy。然後在上面完成了Ruby課程的學習。
但是我一直做不出來什麼項目,因為當學完了基礎過後,根本就不知道幹嘛,畢竟沒人給我說下一步到底學什麼。
現在我會的恐怕就只有循環,數組,函數的簡單應用。至於如何從系統中調用什麼,然後什麼抓取,什麼執行什麼操作,我根本一點概念都沒有,根本就不知道從哪下手。
我看了很多的關於說編程如何入門的問題和答案,有些人說應該先學C,有些人說應該從腳本語言學走。
現在我想深入的就是Ruby,我買了一本松本行弘的程序世界,但是上面就是講Ruby的一些構造,對於一個菜鳥來說,很難從上面提取到什麼有用的地方用於實踐。
還有我下載了一本關於ROR的書,上面的知識總要牽扯到SQL等資料庫方面,那我還要去學習了資料庫才能繼續學習么?
於是我不知道我接下來該怎麼辦了。
希望大牛指導。

==============================================================
我來補充下提出的意思:基礎語法都通了,不管什麼語言都大同小異。問題在於不知道怎麼把學習到的語法的東西變成項目。我思考的是,,編程實踐少,對各種函數庫,對應功能不懂,所以編不出來。那麼要如何克服這點?


典型的學而不用則罔。

你看了很多教材,很雜,沒有重點。從你的描述中我也看不到你有多少實踐。我學 C++/C 根本沒看什麼教材(學校那個當然不能算),特別是《21天學會XXX》的太浮躁了,扔掉吧。你看了這麼多,也不需要再找多好的教材了。多實踐,編程能力只會在實踐中提升。

至於 Java 的編程方法,你還看視頻。不得不說,你能看下六集我已經很佩服了。我現在連教材都看不下去,因為它太太太啰嗦了,大量代碼不是干實事,而是為了克服 Java 語言的不靈活性、所謂的「設計模式」而寫。

Ruby 是好東西哇,不過語法新奇好用卻並不簡單。更要命的是,你 Ruby 本身還沒學好呢就開始上 RoR 了。直接學 RoR 對於很多人也沒什麼問題,但是你基礎不行啊,SQL 沒入門吧?還有 HTML/CSS/JavaScript 的基礎、HTTP 的基礎……

不知道你為什麼要學編程。既然沒說的話,我建議你還是從自己可以用的小的程序開始。比如按自己希望的奇怪的規則重命名文件啦、統計點數據啦、抓點網頁啦什麼的,把你要做但是手工做很枯燥的重複性任務給自動化了。


《伴隨我成長的編程書》 《關於編程的胡扯》 po主可以看一下我以前寫的博客,感受一下學習方法的重要性。


別看書,先玩起來再說,比如,找個好玩的遊戲,破解一下,搞個作弊金手指什麼的。。於是你就上癮了,想不學會都難。


現在我想深入的就是Ruby,我買了一本松本行弘的程序世界,但是上面就是講Ruby的一些構造,對於一個菜鳥來說,很難從上面提取到什麼有用的地方用於實踐。

就圍繞這個點來做個答吧。
程序語言是什麼? 程序語言是人類用於和計算機對話,控制計算機的語言。 從機器語言發展到高級語言,最終目標是讓我們更加符合人類的思維去操作計算機。 這個過程中誕生了面向對象、函數式編程等各種思想。

每門計算機語言背後,都難以擺脫的是語言作者對於計算機世界的抽象與表達。 而《松本行弘的程序世界》一書, 正好讓你有機會從Ruby之父那裡真正了解到Ruby這門語言的由來及其設計思想。

那麼讀這本書會對你有什麼樣的幫助呢?

1 有助於你理解Ruby的對象模型。 Ruby雖然也是面向對象思想,而且也吸取了很多其他語言的思想,初學者一看Ruby,會有種,很像python,很像perl之類的想法, 從Java轉過來的朋友,尤其會用Java的思想來學習Ruby, 其實這些都是Ruby學習路上的阻力。 而看這本書,會幫你化解這些受其他語言影響的困惑。

2 有助於你理解Ruby中包含的函數式編程思想。 Ruby不僅僅是個面向對象語言,更包含了函數式編程思想,Ruby可以算是Lisp的一種方言, 是Matz對Lisp編程模型的實踐。

3 有助於你理解Ruby的元編程。其實當你理解了Ruby的對象模型,那麼元編程也差不多了。

這本書至少得讀三遍。

回到樓主的問題,為什麼你編程沒有入門? 答案就是兩年的時間,在編程之道這條路上,根本不算什麼, 我編程8年,感覺去年才剛入編程之門。

至於Ruby on Rails, 那更涉及到整個Web開發編程知識, 資料庫的知識是必學的。

當你走上程序員這條路 , 就應該有無限學習的意識,不用問那麼多了, 學吧。

至於學習方式, 可以自己用Rails做個自己想做的站點, 邊做邊學就行了。 路是一步步走的,水是一口一口喝的, 感覺你還有個問題就是太心急了點。 一口吃不成胖子,還是先靜下心吧。


我覺得最好的學習方法是想做什麼學什麼……
什麼學習編程先C語言,21天學懂C語言……
都是扯淡。
樓上排名第一的說得很靠譜,對於你最新的疑問嘛,剛好符合我最開始的說法,要用到的SQL所以就得去學。


做一個軟體所涉及的內容,遠遠比寫代碼要多。比如:你使用什麼構建器?軟體的文件布局是怎麼樣的(各種資源都放在哪)?軟體的整體架構是什麼樣的?這些都要具體去做才能提高。
你先做幾個完整的簡單應用,比如計算器、記事本什麼的。然後如果你依然對遊戲感興趣,你可以看看SDL一類的設施庫,Ogre一類的引擎。另外D3D或者OpenGL一定要掌握。
等有了一些使用經驗,看看講軟體模式的書,去了解一些抽象的整體概念。
推薦你《遊戲編程精粹》系列(game programming gems),涉及了遊戲編程的各個方面的新進展。內容涵蓋了基礎設施(線程、內存管理)、圖形、聲音、物理、AI、內容製作等等。我看過7,現在好像出到9了。


編程是個需要實踐的工作,帶著目的性做幾個練手的項目,很快就入門了。

一般來說,需要有強烈的興趣和明確的目的性,如果沒有很強的興趣,就是隨便看看,希望能達到目的,基本上學不會。就像看游泳的視頻和文章再多也無法學會游泳一樣。

如果確實毫無頭緒,可以找一些有趣的少兒編程語言如Scratch等,先培養興趣,做些項目提高信心。然後從Python等語言入手,做些小函數,小工具。


如果想以編程為職業,那麼就多打基礎,像HTML,SQL,建網站神馬的都可以扔一邊去,等你明白了基礎,這些東西就是看兩天語法的事情,不值得現在花大力氣學習。The Elements of Computing Systems / Nisan Schocken 這種知識才是根本。


我也初學ror,看了樓主的描述,個人認為,如果你linux、css、html 一點都不懂,那你根本就學不了ror,而且你看的書(松本行弘的程序世界)也不行。。。。Programming Ruby、ruby on rails 這兩本才是可以能入門的 好吧!


首先問問自己學編程是為了什麼,學了那麼久,能實現自己的目的了么?

當初我的老師說過,你的技術水平與你所寫代碼行數成正比

看你描述,看書,看視頻,沒看到你說寫代碼啊??
代碼不寫怎麼提高?怎麼可能做出來項目???

學而不思 是表象,學而不用 才是根源。
只要自己嘗試去寫代碼了,自然就會出現很多問題,解決問題就會思考。

買了「21天學C語言」(一直討厭這種書名),每章節後有沒有練習題?自己練習了沒有??
看公開課視頻,老師講完每節課都有課後作業,去做了沒有??
codecademy倒確實是個練習的網站,但是練習的時候有沒有思考,為什麼這樣用?還能怎樣用?

另外,用,並不但只是給出的練習。自己當初學習編程是為什麼?
先現在想學ROR,那麼假定目的是學習建站?

  1. 給自己定一個建站的目標(定需求)
  2. 看書學習,在學習的過程中不斷的完善自己的網站
  3. 遇到不懂的問題去學習相關知識
  4. 重複 2、3、

從學習建設網站的角度來看,(個人認為)最佳的學習曲線是這樣的。

  1. 學習HTML,能夠在本地建立顯示內容的HTML文檔(手寫HTML,不要用工具建立)
  2. 學習CSS,能夠自己控制網站顯示的樣式(同樣手寫)
  3. 學習javascript,學會做簡單的本地動態交互
  4. 認識一下網站伺服器,IIS或者Apache或者支持ROR的什麼別的東西,學會發布網站
  5. 學習網站後台框架,初步建設一個能夠進行伺服器交互的網站
  6. 學習一個資料庫,了解SQL,基本的SQL操作能力
  7. 學習編程語言與資料庫交互的方式,把網站與資料庫銜接
  8. 學習ajax,優化網站的交互邏輯。

這樣,建站所需的基本知識都有了,可以把一切做的網站推倒重來一遍。
期間有什麼知識忘記了就複習一下。

就是這樣了。


推薦個一篇文章:程序員技術練級攻略


學Windows API或者Linux API以及OpenGL和遊戲演算法,寫一些自己想要的遊戲程序,學C和C++就夠了。
不懂你想要遊戲編程為什麼要學Ruby,你學習的目的性感覺很不夠,太盲目。經darasion提醒,ruby可以做遊戲腳本,但對於你來說這根本是還沒學會走就想跑了。你看書方法很有問題,C語言21天的書你居然用一年看完。一般我建議你要麼不看,要麼就在集中的一個周、一個月內看完。
另外你高三的話還是先好好學理科和數學(不知道你理科成績如何?邏輯思維如何?),考上大學的計算機系有同學老師指導再入門也不遲。


樓主不要氣餒,年輕就是本錢,我進大學才開始學編程。
樓主書看了很多,但不得要領。編程不光是對語言的熟悉,更重要的是一種對問題處理的一種抽象思維方式,習慣了這種思維方式,用什麼語言都是不重要的。沒有一定程度的編程積累,以及系統地學習基礎理論,這種思維方式是不能一夜間建立起來的,樓主一定要不斷寫,不斷學。
稱為獨立遊戲製作人的最快方式目前可能就是寫手機遊戲放到app store去賣了。不過遊戲製作本身可遠遠不止編程,美工,關卡設計,音效等等都得懂或者能找到合作者。


直接說,你對編程並沒有太大興趣,只是一直在逼著自己學而已,為了學習而學習。編程只是個工具和手段,你並沒有使用工具的慾望,所以效率低下。漫無目的的學兩年頂不過別人有目的地學兩個禮拜。

問自己為何無法入門,不如先問自己為何要學習編程?


那是你對函數沒興趣。看到一個有趣的函數,把它用起來。實現一個新功能的程序。我知道大多數人看到那麼多函數,就好像記單詞一樣。難記~~~但是我們記單詞也是在現實中理解的圖像。只有在程序中思考函數的作用,才能記得多。我就是每天叫你背誦那麼多類,那麼多函數,你不去用,完全感受不到它的真實作用。也許是你需求不多,寫不出什麼項目。但是,當你學到一個新的函數的時候,試著寫一個小功能的程序。就好像我們學語文,學會了單詞,還得造句。造句會了,還要練習寫文章。這是一個複雜的過程。很多人覺得這個過程很複雜。難以堅持。
但是,為什麼作家能夠寫出這麼多優秀的作品?不是因為寫文章很容易。而是寫文章很有趣,它能表達自己的觀點,它能讓自己的思想傳播給人類。它能讓秘密公開於眾。它能讓知識普及。所以,編程也是一樣的。
不是硬要逼著自己寫一個軟體,寫一個能賺錢的軟體。我告訴你,賺錢的軟體不實用。實用的軟體不賺錢。
你知道推箱子,超級瑪麗,飛機大戰,五子棋,象棋,怎麼實現嗎?
你知道搜索引擎,操作系統,人工智慧怎麼實現嗎?
你知道輸入法,瀏覽器,編譯器,程序語言怎麼實現嗎?
你知道cpu,內存,顯卡,怎麼實現嗎?
你知道微機工作原理嗎?
你知道人類開源計劃嗎?
你知道安卓,linux嗎?
你知道蘋果嗎?
眼界要開闊,每天拿著windows不知道能幹嘛,不就是玩個遊戲,做個設計,寫個java。
其實,在你這個年紀的時候,國外的孩子在寫自己的編程語言。
在你這個年紀的時候,國外的孩子在組裝自己的電腦,而你還在紙上寫程序。
在你這個年紀的時候,國外的孩子在運營自己的網站,是CEO。
在你這個年紀的時候,國外的孩子在開發自己的遊戲,而你在玩英雄聯盟。
親,今天的落後,不是智商的落後。是行動的落後。
開始行動吧。動手去實現吧。雖然你什麼都不懂,但是,你需要懂所有。什麼都不懂怎麼改變世界。
那我如何開始呢?當然,不是喊口號。拿起教程,慢慢來,慢慢寫。多思考。多創新。不要想十天學會程序設計。十天,你連吃個海鮮都學不會。
對,編程需要大量的時間。大量的時間練習。大量的練習,大量的練習,大量的練習。大量的練習。直到搞懂。
我知道有的人學起來很慢,對一些單詞都記不住。沒有關係,還有中文。你只要知道它實現的功能,它在哪裡。用的時候,真不記得,就去複製過來。
2000年開始就有易語言了,當你現在去學易語言的時候,你發現,不用背單詞,不用寫單詞,不用排版。最後,你發現,這樣還是很難。是更難了。因為你從來不鍛煉。不鍛煉英文編程。
易語言實現一些功能的方法很奇怪。寫起來很繞口。也就是為什麼不方便。大冗雜。沒有效率。為什麼效率低,還報毒。就是因為給不會編程的人做了優化。導致中文編程越來越垃圾。
不會就要學啊。我們不能說不會就去搬磚啊。搬磚和編程不是一回事啊。在搬磚的過程中學會編程。你覺得搞笑么。
我讓你搬一千年磚,一千年後,你還是只會搬磚,不會編程。
所以,放下手中的工作,踏實的去編程。不要說我今天在工廠上班,我在努力學編程。
要學就要拿出所有的時間。不要想在工廠邊掙錢,還學會了編程。這是矛盾的。
去干吧。喜歡就去做吧。大不了浪費十年。十年之後,你不會後悔。因為,你很成功。


學而時習之,不亦說乎?
題主缺少的是練習,你應該直接做起你想做的事情,做一些好玩的事情。
什麼你沒有想做的事?那你學編程是為了什麼?
如果單純是以「學習編程找一份技術工作」的心態來學習,是很難學得下去的,建議還是找一些好玩有趣的東西來玩玩,不要局限於某個狹窄的領域。
如果你不知道有哪些好玩有趣的東西,可以看看hacker new,Hacker News,也可以看看v2ex的"創意"和「好玩」兩個節點,http://www.v2ex.com/?tab=creative,http://www.v2ex.com/?tab=play


你這種浮躁的人,不適合從語言基礎學起,先學習使用,回過頭來學基礎,先做一些自己感興趣的東西,直接做,別管原理,不會就google,動起來,最重要!


覺得你已經很好了,算有計劃,找到興趣點。

至於一年看完《21天學會XXX》,其實可以理解為那書難看。看了忘了就算了。
很多人一年也不是沒看完《C++ Primer》么。

如果是高三,那這些可以放一放了。或者算是複習累了的休息,一周看一兩個小時。

對獨立遊戲製作或開發感興趣,你路還很長,現在打基礎就行了。

1.看看《獨立遊戲大電影》
2.努力學習,上好的學校
3.平時多玩不同種類的不同遊戲


大學好好學遊戲開發。
大學好好學學圖形學,學學演算法,
大學可以看看Lua源代碼,看看雲風的書。
大學可以好好學不同平台的遊戲開發。
大學可以好好學學C/C++/C#/JS/HTML5/Lua/Python.....

大學可以好好學學遊戲策劃
大學可以好好學學當一個策劃
大學可以好好進入一個團隊當製作人
大學可以好好參加幾次大賽
大學可以好好玩遊戲

大學可以找個傳媒妹紙一起做遊戲。
大學可以找到志同道合的人一起做遊戲
大學可以安心做遊戲而不必加班
大學可以嘗試很多遊戲的方式


現在你要做的就是堅持。加油吧,少年。

PS: 希望堅持獨立遊戲,傳統的遊戲開發和獨立遊戲真是對立的。以上算是我的吐槽。


看到題主換了好幾門語言,程序員雖然的確應該會好幾門語言,但是在初期最好是先精通一門,這是其一。
再就是關於題主不知道學會了語言的語法之後該做什麼。其實這時候已經是入門了,下一步就是進階,最好的辦法就是自己做一個項目,項目不一定要很大。
舉個最簡單的例子,如果你學習的是一門用於開發web應用的語言,那麼你可以去做一個很簡單的論壇,在製作過程中就會學到很多新的東西。論壇需要資料庫吧,這樣就學到了資料庫的東西,前端是不是要好看點,那樣css+js+div是不是又學會了?


《21天學會xx》這類書害了多少人,如果真的可以,我一年可以學多少門語言,那麼計算機還會有那麼多人學?


推薦閱讀:

為什麼很多人不建議使用駝峰命名法,有什麼弊端么?
一個主修語言學的女生想要學一些計算機語言和編程,學什麼比較好?
設計RPC框架時,客戶端調用出錯是直接拋出異常好,還是返回errcode好?
我國的 IT 培訓機構是否坑?
程序員所積累的編程知識在十年後將有多少變得沒用?

TAG:編程語言 | Ruby | RubyonRails | 編程 | 編程入門 |