在校本科生如何自學編程?

985 大二學生,成績一般,交通工程專業。

大一的時候學過 C 語言,使我對編程有了一些興趣,由於課時安排只學到了指針。

暑假想去考計算機二級,但是打工加上玩遊戲又耽誤了下來。最近發現「我要自學網」裡面有免費的教學視頻。在知乎和其他網站搜索過類似問題之後,發現有些問題比較糾結。

比如以下問題:

  • 最好不要在 Windows 環境開發,而在 Unix/Linux 環境下會更好。

  • 學習哪一種計算機語言?

  • 理論與實踐如何平衡?

  • 在自學過程中需要看哪些書?(如「黑客與畫家」)

  • 哪些高手值得關注?(如陳皓老師)

我是新手,很多東西都是到百度上搜的,但是信息過多,不知如何分辨。懇請有經驗的前輩們指點,可以走得不那麼曲折。


伴隨我成長的編程書

我跟你講,就算我這樣十幾年都在Windows下搞沒摸過Linux,其實學到的東西超過90%也是可以直接用到Linux系統上的。難道我在Windows下學會了寫編譯器,換了Linux要重新學一遍怎麼寫編譯器嘛?簡直是扯談。

初學者就應該老老實實用IDE,專心編程學演算法,不要管什麼底層,什麼編譯鏈接的過程,那些等到你有了足夠的概念之後再去搞。這跟初學者不要一上來就學C/C++是一個道理。這兩個觀點任何理性的人都應該同時支持或者同時不支持,否則這個人就是不真誠。所以趕緊買一本Head First C#,下載Visual Studio 2013 Express,開干吧。

免費中文編程視頻沒事少看,想看還不如去看Coursera的視頻(只要你英文過關),反正也是免費的。


作為一個大學才真正入門,高中僅僅玩過簡單VB和樂高development kit的普通人,分享一下自己的學習經歷:

先是入門一個高級語言,c++愛好者就推薦c++了,當然java,c#都可以。不推薦入門就學python之類的,從c++跳java簡單,從java跳python也簡單,反過來就不是這麼一回事了。

然後是基礎的數據結構和演算法,也不用把演算法導論全看掉,linked list,幾個基本的search algorithm,tree還有相關演算法,看到紅黑就差不多了。

然後必須要學一個computer organization的,這基本是你從newbie到intermediate的標誌。推薦數目是computer system: a programmer"s perspective.非常好的教材。

接下來從道理來講你應該學一門computer theory foundation,搞明白p和np這些基本問題,雖然非常枯燥,但花時間搞清楚computer sceience裡面唯一那一點點science的東西到底是什麼也是不錯的。。。

弄完之前的東西,你已經完成了入門。接下來就是你自由探索,如下方向可以按興趣拓展:

  1. 你可以學一個高級oop,探索一下c++10 或者java的高級特性,這些你找工作時候也不太用到,但一旦開始工作了你就發現學過design pattern,會用高級語言的高級特性真的非常有用。
  2. operating system,如果你學computer organization非常high,那你可以考慮operating system, mit的OS課6.828 / Fall 2014 是開放的,而有一些minix的os課也可以選擇:Minix Course Web Sites 基本上你弄完這些,就可以自己去下Android源碼去改裡面的kernel了,工作的話一般是華為,三星,Qualcomm之類的公司。當然了,你這些都會,基本所有用c++的活都會入門很快。
  3. AI,好吧這是個大方向,真要說的就是machine learning或者robotics,學machine learning的話Andrew Ng有公開課,而且像Hinton這些大牛他們也會把自己賴以成名的東西放網上。唯一要注意的就是,很多學machine learning的最後都跑去寫matlab,python,R或者就是簡單調用現有的函數庫了,總體來講編程能力會相對其他方向偏弱。如果真的不想完全為科學獻身,想留條後路去industry,那可以多考慮做系統的實現,多做一些用gpu (CUDA library) 或者distributed system 實現machine learning的項目。就算最後發現沒機會做machine learning,出來以後編程能力還是秒殺眾生。
  4. computer vision 或者graphics
  5. 演算法,把之前沒看完的演算法導論都看完,不過我覺得無論你選擇之前那個方向,多多少少看掉演算法導論,或者其他演算法的高級教程都是應該的,理清楚一個大致的演算法體系,無論對工作,面試,科研都有好處。
  6. Database,然後還有web application
  7. Mobile development,這東西你可以當愛好,但把寫Android/IOS application當職業做的。。我覺得發展機會不大,因為你的眼界和技術發展就圈死在Android/IOS給你的一畝三分地了。不過如果你用ndk寫一個大型手游也挺酷的,但現在大家都習慣用unity= = 還是被圈死了。。好吧,這只是我自己的看法。。。
  8. Compilier
  9. 還有什麼方向,哦,純理論研究,就是之前那個computer theory,沒什麼研究我就不妄言了。。。

此外,在學完入門以後,你就可以開始出去找實習或者幫老師做項目了。很多時候上課沒有自己動手做項目學的快,而且還能賺錢,何樂不為呢?


同學,我以前差不多和你一樣的情況.像這樣突然想學然後上網找人訴說自己的情況求過來人給規劃給建議,.但是呢,這樣並沒有多大用.

這樣的經歷我經歷過好幾次了.我感覺最好的方法還是那個笨方法:現在就去做!

不要總是折騰來折騰去,看人家玩N/L系統看上去好屌!在那裡面編程好有逼格的樣子( ⊙ o ⊙ )啊!

沒必要!根本沒必要!選一個語言 C/C++/C#,下載一個VS2013(一鍵部署,這是我見過的最好最方便的!),選一個相關語言的經典入門書,然後就是干!

一定不要把一切準備就緒後就又放在那了或是幹了一段時間又放下了(心裡想著:反正還早怕什麼呢( ̄▽ ̄))這樣然後快畢業的時候又發現:艾瑪!∑(っ°Д°;)っ我要學東西!!然後又跑上來問這種問題...(我原來就是這樣,經歷了三次,終於在要畢業的時候老實了...)

趁著現在還這麼多時間,把自己的活練的更好了以便更加輕鬆的迎接這個社會,不然一畢業你就抓瞎了(可能不到畢業,光是大四實習你就瞎了-,-).

恩..加一點:多上知乎關注編程大牛,看他們的回答和歷史回答,會很有激勵作用的(誤)

---我的廢話---

逛了這麼久知乎,這是我第一次認真的寫這麼長答案,還是跟著輪子哥進來的-,-(為什麼沒早點玩知乎 ?_?)

題主啊,我說的都是真心話,是真心希望我的回答能對你有哪怕那麼一點點的幫助.

因為我也是這樣過來的(是真的!←這樣←過來的...不是裝老成啊 ?Д?彡)

現在和學弟聊天,總愛跟他說這些,你想怎麼過你的大學?這種段子網上太多了我都不愛說,可能真的只有等白白耗費了幾年大學光陰,回過頭來才明白這些段子講的是什麼.

比如你現在可能就不明白我在講什麼,可能講的和那些老生常談的是一樣一樣的.( ?? ? ??) 而不理我,嫌我啰嗦..╯ω╰ 悲傷...


WHAT?!

你連計算機二級都考不過?原因是打工+玩遊戲?如果你是有心學好編程的話,既然知道原因為什麼不去改?

成績排名倒數居然「無關緊要」?原因是「貪玩」?

不是我說你,你這麼差的自律能力,你確定能學好編程?

典型的光說不練,你現在最重要的是埋頭去學!


以我自己的實際經歷談談吧。不要被我的簽名迷惑了,這只是我的副業而已,我的正業是嵌入式Linux應用程序開發工程師。

我是99年讀大學時學的C語言,當時考試的分數是60分,剛好及格。畢業以後,我一直做銷售相關的工作,一直到2008年。因為銷售的工作常年出差,一年有11個月是在外面出差的,所以,實在是受不了,於是申請調回公司做開發。

可是這不是瞎胡鬧嗎?一個做銷售的調回公司做開發……但是公司領導對我比較好,說可以試試看,但是要求我必須通過研發部門的筆試。然後,給了我兩個星期的時間準備。

我從網上下載了譚浩強的《C語言編程》Word版和《高質量C/C++編程》,前十天,看譚浩強的教程,後四天,看《高質量C/C++編程》,就這樣通過了面試。

我一到研發部就有實際的項目可以做,但是做的是基於嵌入式Linux的API,於是手頭上有多了一本書《LInux程序開發》。因為有實際的開發環境和操作了,自己也可以調試一些實際效果,所以進步很快。我的感受是,單純的學習是沒有用的,要邊學邊做,我也很少看別人寫的代碼,因為沒時間,都在做東西了。實際的開發工程中,沒有那麼多的演算法需要研究,用的時候,才會去翻手冊翻教程,所以不需要太擔心演算法這一塊的東西。

半年後,我跳槽到另外一家公司,一個人扛起一個大項目,直到今天。

最後的總結陳詞是:

1、先從簡單的開始學,先入門;

2、學完立刻就做,邊做邊學;

3、偶爾看看別人的代碼;

4、不要著急研究演算法,大量的程序開發工作並不需要演算法;

5、跟編程有關的書,多看,雖然有大量重複的東西,但是總能有新的收穫;我看過的書不計其數了。

6、多思考如何改進自己的代碼,這個過程會讓你進步很快。

如果你在大學期間有參與開源項目的經驗,畢業了找工作很容易的。加油!


我覺得你似乎不適合干編程,一點淺見。


首先恭喜你,在畢業前就有明確的目標和學習意識,從時間上來看也完全來得及實現。接下來就是如何實踐的問題了。如果順利,畢業會找到一份不錯的工作~

一、先來說說選擇哪一種語言

介個臣妾也不知啊,你想怎麼選就怎麼選吧!

好吧,我試著從下面三個角度來說說,選擇哪種語言。

1、從市場的角度上來講:哪種語言就業市場比較熱?

2、從學習的角度上來說:哪種語言更容易入手/掌握?

3、從過來人經驗分析:如何選擇你的第 一門語言?

1、從市場的角度上來講:哪種語言就業市場比較熱?

目前市場上最受歡迎的編程語言十佳語言(不具備任何數據權威性,只是作為一個IT行業人的感知)是1. Java 2. C 3. C++ 4. SQL 5. Javascript 6. PHP 7. C# 8. Python 9. Objective - C 10. http://ASP.NET

另外,職業規劃公司Gooroo通過仔細查看了美國、英國和澳大利亞的超過50萬份的IT職位空缺,得到了下面這份《2015年的工資和供需報告》。

需求量最大的前十項技術:

Java——18%的廣告中要求具備,平均年薪100,000美元

JavaScript——17%,90,000美元

C#——16%,85,000美元

C——9%,90,000美元

C ++——9%,95,000美元

PHP——7%,75,000美元

Python——5.5%,100,000美元

R——3%,95,000美元

Scheme——3%,65,000美元

Perl——3%,100,000美元

薪資最高的前十項技術:

Erlang

Clojure

Haskell

Lua

Lisp

Groovy

Scala

F#

Ruby

Python

個人建議:薪資高的技術比較冷門和難,對於一個非計算機專業的初學者來說,站在就業角度還是選擇需求量前十的語言任選一門然後開啟學習之路。

2、從學習的角度上來說:哪種語言更容易入手/掌握?

主流的語言C/C++、Python, Pascal、Basic、 JAVA、C#都可以作為入門的編程語言。

因為它們都存在一個具有足夠表達能力的語言子集,優秀的入門書籍,成熟的庫,以及強大的社區的支持。所謂選擇最好的入門語言可能是一個偽問題,而真正的問題是當你選擇了其中一門語言後,如何選擇合適的學習方法。

如果真的不知道該如何選擇,那就C吧!C作為計算機語言的鼻祖,學習後有了基礎,以後就可以根據你想從事的方向選擇第二門語言啦!(為什麼要選擇第二門語言?因為單懂一種語言並不能很好地開發,做一名開發工程師需要掌握多種語言)如果喜歡做網頁,就可以學習JS,css+div;中小型資料庫access,SQL啊什麼;如果想做軟體開發,安卓的肯定是Java,iOS肯定是oc、swift。

3、如何選擇你的第 一門語言?

  • 首先縮小編程語言的應用範圍。

例如你想要開發一款遊戲,那麼你就要先確定該遊戲作為移動應用還是網頁的形式存在,從而縮小你的編程語言選擇。

  • 而第二個選擇標準是薪資待遇。

儘管很多編程語言的平均年收入都非常的誘人,但也存在收入不高的情況,作為繼續學習的動力和目標,高昂的回報是你潛心學習的關鍵。

  • 第三個選擇標準是地理因素。

如果你的身邊有有很多和你一樣學習該語言的人,那麼在遇到困難的時候能夠及時的尋求幫助。

二、開發環境

我就不說了,等你確定選擇了哪門語言後,再選擇對應的最佳開發環境。

三、理論與實踐如何平衡?

這個。。。。在學習的過程中,最好多做練習題。一邊學習一邊編程,這樣對學習效果最好。

在課程方面,盡量選擇有實踐課程的學習教學視頻。比如

一系列免費學習資源:

【入門篇】

12 個免費學習編程的好地方

【開發篇】

史上最全的開發人員在線速查手冊

程序員常去的14個頂級開發社區

14個專門面向女性開發人員的編程社區

【設計篇】

免費下載:20套IOS7 UI KIT素材

網頁設計師的10個免費在線學習網站

讓界面動起來!移動動效設計必備靈感網站

29個免費網頁圖標字體以及使用方法

網頁設計的優秀助攻!20款不容錯過的HTML5工具

12個 Web 設計師必備的 Bootstrap 工具

【前端篇】

快速助新手學習JavaScript的十大免費資源

2015年15+最佳的響應式HTML5網站模板

移動端頁面開發資源總結

推薦 10 個 ReactJS 入門資源

史上最全Vim快捷鍵鍵點陣圖 -- 入門到進階

【後端篇】

每個程序員都應該知道的 16個最佳 PHP 庫

Python學習資料與博客推薦

Github上有意思的項目推薦

最後題主問有哪些可以關注的牛人,介個真的無法推薦,因為我也不熟。在知乎和CSDN里有很多大牛,我平時學的慕課網裡面的講師也是阿里或者騰訊的兼職工程師,只能說慢慢關注他們吧。


如何自學 Java:會計轉行從事IT,如何在一年時間內全職學習? - Night Silent 的回答

java 自學群:151280557,每晚統一解答問題


書讀百遍,其義自現。拳打千遍,其形自見。

不要糾結於學什麼語言,用什麼環境。

開始學就對了。學的過程中你自然知道要去學什麼。

再多的武功秘籍擺在你的面前,你不珍惜,被選擇障礙打敗,那麼你永遠成不了武林高手。


有個http://codecombat.cn還不錯 可以玩著遊戲就學習編程了 賬號在bugmenot上面可以找到 教程在網易雲課堂可以找到 玩得開心


樓主,我也是學交通運輸的,但我目前也拿到一個互聯網的offer了。我是大學才接觸計算機(大學前連office都沒聽過的那種),算起來完全自學。我覺得看樓主是怎麼發展了,如果想未來從事IT行業那麼得補很多計算機專業課(編譯原理、網路、操作系統、資料庫、數據結構和演算法啦等等,而且得深入的理解,我就是學的不夠紮實,去大公司面試老被虐),如果只是想學編程實現點東西(寫個小網站、交通領域的軟體開發),那麼那些專業課知識就可以量力而為,當然有時間精力多學肯定是有好處的咯,這樣的話我建議學學C#(客戶端、Web,而且學了C#順帶還學了Java,我們實驗室要開發交通類軟體全是C#)、Python(數據處理、小工具、Web等等),具體到網站開發的話還得學學HTML/JS/CSS,但是只學這些發現寫起代碼來還是不夠,到頭來還是得啃啃那些專業知識,所以擠出時間去學吧。具體到學的話,我的經驗是多參加實際項目(能找到志同道合的人最好,合夥接點小網站做做,邊學邊做,還有外快,何樂而不為,或者進入學校的實驗室參加點項目)、多看好書經典書(具體可參考 @vczh 的答案,很慚愧以前我沒有看過這樣的帖子指導,看了很多國內的雜書爛書,走了很多彎路)、多敲代碼,其他的話還得看」悟性「(也有種說法叫智商)。

PS:在學習編程的過程中我被編程語言給吸引,學了十幾種,也浪費了很多時間,其實等你比較熟練掌握幾種語言後學習其他的就很簡單,沒必要陷入語言表層的汪洋大海中不能自拔,一點前車之鑒。


買本書 照著敲代碼 敲完了 換一本 然後 繼續時間久了 就回會了


Mark 一下,2014年來回答下


跟打dota一個道理,自己玩,怒操AI,就熟悉下技能。關鍵還是得找個大腿教你,跟他一起玩。


堅持下去!!!!

好吧,多麼的蒼白無力!


推薦慕課網


學編程,想學哪個語言找對應的head first 照著上面的步驟一步一步學吧。你已經有c基礎了,學起來也很方便。想學編程就先學編程,把底子打好,至於在什麼環境下編不是什麼大問題。


自己多看書多動手寫小程序,這樣學習效率比較高且不易忘記,學習向來是比較枯燥的,如果身邊有大神帶著你更好。我們都是愛好編程的孩子,加群 366904593一起學習吧!


「比如最好不要在Windows環境,而在unix或Linux環境下會更好」

的確是這樣。

Windows不是個開發者友好的平台(Basic程序員和 @vczh 除外)。 FreeBSD或Linux平台天然適程序員使用,開發工具、庫一應俱全,安裝配置簡單,源代碼豐富便於各種層次的觀摩學習引用。

C, C++都誕生於UNIX。互聯網也跟UNIX有著千絲萬縷的聯繫。

初學編程(特別是學習C、C++)的人不需要IDE。IDE適合規模中等的項目,初學者一般都是從做特小型的程序開始起步的。


推薦閱讀:

如何制定清晰的目標計劃?
你認為人生最重要的選擇是什麼?
大學處於迷茫期應該怎麼做?
職業女性如何處理親密關係和事業發展的關係?
大齡剩男,關於事業、人生,對未來迷茫,我還有救嗎?

TAG:編程 | 人生規劃 | 自學編程 |