新手如何學習編程?


想成為程序員的可以用Visual Studio 2013 Express和《C++Primer 5th》。這有個好處。學會了基本功紮實,學不會就可以改行。

這書的名字起得很好。什麼是Primer,Primer就是初學者的讀物,就是用來教育那些什麼都不會的,算是一個入門的門檻。


第一定律: 如果你開始 5 分鐘內不能寫程式,那學習法就是不對的。

我大約在 1982 年第一次玩電腦,那時 11 歲。 那電腦叫 TRS-80 是最早的私人電腦之一。 它的 CPU 是 Z-80,即 Intel 的 8080 處理器。

第一句打的指令是:

PRINT "HELLO"

然後電腦螢幕立即印出 HELLO 字樣。

第一個程式是:

10 PRINT "HELLO "

20 GOTO 10

那電腦便進入無限迴路,整個螢幕印滿 HELLO。

現代的電腦進化了很多,變得很複雜,但基本原理沒有變。

學習的最好方法是從小的成功逐步擴大到大成功,所以能夠最快捷地獲得 feedback 是最重要的。 有很多新的工具要你很麻煩才能做一丁點事,那不適合初學者。

HTML 是最簡單的。 如果嫌太簡單,那就 Python 或 Visual Basic。

找個 tutorial 跟著學。 太複雜的資訊不用看。

你必須儘快寫成第一個網頁或程式,然後你可以改變它看看效果怎樣。 想做某個功能時就查看 manual。 就這樣你便會從實驗和嘗試中明白編程原理。

還有最後一點: 很多時候,現代的系統須要打一串很長的指令,或者寫一段很長的東西,完全不知是什麼,那叫 incantation (咒語),是約定俗成的,他們其實不複雜,但很麻煩,那不是重要的,因為最初的時候根本就很簡單。

===================== 增補

最近開始教其他人(成人),我發現:

  • 《趣學Python——教孩子學編程》Python for Kids, Jason R Briggs

  • 《與孩子一起學編程 》[美] 桑德Warren Sande/ Carter Sande,Hello World!Computer Programming for Kids and Other Beginners

這兩本書很好,它們正是我小時學編程經過的途徑。 既然小孩子也能,成人應該一樣。 不要嫌棄那『小孩』 的標籤,其實那樣學的效率更高; 那些嚴謹、形式化和技術性很強的書,反而不適合初學者。

===================== 增補2

還有一個頗為重要的建議: 初學者可以上外國 IRC 聊天網路,叫 FreeNode,那裡有大量寫程式的愛好者,24 小時有人免費幫你解決問題。 你想得出的編程語言,他們也有頻道,例如 #python, #java 等。


程序人生的寂靜歡喜

標題起得太大咯,是在故作老成么?

「程序人生的寂靜歡喜」——怎麼看都感覺像是某位已故計算機大師的墓志銘,可卻偏偏被一個菜得摳腳的毛頭小子拿來當做人生寄語——也是日了狗了!

人都沒生過,談什麼人生!?

莫怪我,我偏要「奢談」一下!

一.記敘

一開始我是拒絕的!因為我根本就不喜歡寫程序。

打高中數理化就不好,什麼排列組合、圓錐曲線、電磁場中一帶電粒子、水溶液中的水解電離,困擾我有如夢魘。

高考時,祖墳上冒出一縷青煙,數學創歷史新高考了88,理綜破有史記錄考了200,數據不僅太美太感人,而且大吉大利、元亨利貞!終於,我以總分522分考上了一所夢寐以求的2本就讀於計算機科學與技術1202班——命中犯2!

可是對於編程其實我是拒絕的——大一花了一年的時間來研究心理學,大二花了一年的時間來研究哲學,大三花了一年的時間來研究中醫——結果,《離散數學》掛了,《數字邏輯》掛了,《數據結構》掛了,《編譯原理》掛了——恨不得自掛東南枝!

人在做天在看,出來混總是要還的!曾堅信「天生我才必有用」,「我輩豈是蓬蒿人」;曾篤定「心所願力畢至」,「有志者事竟成」;曾夙願「天授其賦必賜其福」,「好風憑藉力,送我上青雲」。可是,一個冷峻若紫電青霜的問題劈面而來:不寫程序又能幹嘛呢?

然而我根本就不會寫程序!試想,一個打字只能用到右手食指、左手食指和左手無名指的人,敲代碼時是多麼捉急!試想,一個高數補考考了19分,滿腦子宏大敘事的理科弱智,寫程序時是多麼腦洞大開!

後來去公司實習,遇到的第一個項目就是要使用ESFramework通信框架,當我第一眼看到了開發手冊上的如下句子時,我就知道,春天不會再來了!

客戶端通過調用ESPlus.Application.Basic.Passive.IBasicOutter介面對應的方法以及預定其相關的事件,就可以完成基礎功能或得到相關狀態改變通知。我們可以從 ESPlus.Rapid.IRapidPassiveEngine暴露的BasicOutter屬性來獲取IBasicOutter引用。

介面、預定、事件、暴露、屬性、引用,你們一個一個來,我還大概能明白,你們群起而攻之,我便委地如泥了!

重載的Query方法(帶有CallbackHandler參數的)在發送請求信息後,不會阻塞而繼續向下執行,而框架在收到對應的回複信息時,會回調CallbackHandler委託指向的方法。由於調用線程與回復回調的線程不是同一個線程,所以稱這種機製為回復非同步調用。

再當我看到「重載」、看到「阻塞」時,我徹底憤怒了!而緊接著映入眼帘的「委託」、「回調」更使我出離憤怒!最後「線程」、「非同步」更令我萬念俱滅,心如死灰!

從此,我便以一種菜得摳腳的姿態狼狽不堪地行走在險象環生的程序世界裡。莫非是寒更雨歇,葬花天氣,獵獵北風襲單衣;荒原寂寂,遠聽猿啼,近看寒鴉起;鬼影幢幢,步步驚心,不知今夕何夕。

好多次我都想,別瞎費勁了,你不是寫程序的料!真正適合寫程序的人根本就不可能是這個樣子!

於是乎放棄。可是不寫程序又能幹嘛呢?好歹讀了四年大學,何況拉弓沒有回頭箭。還是要頂風逆水雄心在,不負人民養育情!

終於,苦水的浸泡痛徹了肌膚,磨練了身心,同時也澆灌出了涅槃之花!

某天我突然發現,那些原本看來佶屈聱牙的技術文檔如今看來卻直白如話,那些原本晦澀難懂的語法如今卻能夠熟練運用,那些原本看都看不懂的源碼如今也能夠在自己指下流淌,實習之前我連循環語句都寫不對,如今卻也能用ESFrameworkOMCS等框架開發出像樣的網路通信應用。

二.議論

更重要的是,從當初的不喜歡、不擅長、不自信,到而今能夠懷揣著一顆歡喜之心來寫程序,能夠以樂在其中的心緒來開啟自己的程序人生,這不僅是我收穫到的莫大財富,更是我把握住的莫大幸福!

胡適先生的名言:「怕什麼真理無窮,進一寸有一寸的歡喜。」真理無窮並不可怕,因為我們在每一寸的前進中始終獲得歡喜。編程之路並非坦途,我們也並非天賦異稟,然而那個最幸福的人,並非是玩轉代碼的編程高手,也並非是億萬家資的IT精英,而是那個在流年中始終以歡喜之心書寫代碼,又通過書寫代碼恆久再獲歡喜之人!

常言道:「男怕入錯行,女怕嫁錯郎」。嫁郎要嫁有情郎——有情飲水飽,無情龍肉都無味!入行也是一樣。入了所愛之行,舉手投足皆得歡喜;入了所憎之行,坐卧立行儘是苦悲!嫁郎的幸福不在於嫁郎所獲得的富貴榮華,其根本在於郎本身。那些通過嫁郎以獲取外在利益的女子,她們充其量只是獲得了生意上的成功,而根本沒有獲得婚姻本身的幸福,而這何嘗不是一種買櫝還珠?同樣,那些以工作作為純粹手段的人,他們也從來沒有獲得過工作本身的幸福快樂。

由此看來,我想恐怕對於絕大多數的程序員而言——你不是真正的快樂!

所有程序員恐怕可以粗略的劃分為這五種狀態:

1.不愛,但是迫於生計

2.無感,反正亦步亦趨

3.熱愛,但卻身心俱疲

4.狂熱,打了雞血一般

5.歡喜,畢竟樂在其中

你是屬於哪一種呢?

如果要我來選,我一定會選5,因為唯其如此才能獲得程序人生的個中真昧,才能擁有彼此交融的內在完滿。而其他的幾種狀態在不同程度上都是殘缺的。

也許我們寫程序總是不可避免的為了各種外在的目的,但是寫程序時的那份小確幸的歡喜,卻始終是我們精神飛鳥的棲息地。 正如孔子贊顏回——子曰∶「賢哉回也,一簞食,一瓢飲,在陋巷,人不堪其憂,回也不改其樂 。賢哉回也!」

罷筆時風煙俱凈,但願自己剛剛開啟的程序人生能夠無關風月,寂靜歡喜。


對於一個零基礎的人叫他看《C++ Primer》是不負責任的行為,新手對計算機的熟悉各不相同,而對於很多編程零基礎的人來講《C++ Primer》這本書難度都不小,除非智商特別高。《C++ Primer》裡面代碼很多都是以片斷形式存在,這對初學者的理解上難度很大,如果沒有其他語言編程基礎也沒其他書籍參考,想直接看懂代碼相當困難,甚至連代碼運行起來都磕磕碰碰。《C++ Primer》作為進階的書籍相當好,但是面象新手卻是不友好的。

至於新手,本身這個概念就不明確,範圍很廣泛,我遇到過不少讀初中就開始學編程的孩子(甚至小學就開始接觸編程的),也有的同學直到大一才開始接觸計算機,後者甚至有的大學前十幾年中都幾乎沒碰過電腦。對於不同的人,編程入門的路徑選擇不能一概而論。

1、未上大學的新手學習編程

從小就開始接觸計算機,就已經對計算機的基本操作較為熟悉的孩子(小學或中學生),如果想學習編程知識,建議學習 Python。Python 基礎語法內容較為簡單,可以比較快的了解編程的思維習慣,並能夠較快接觸到 Python GUI 庫(比如Tkinter),很容易借用這些庫開發出一些有趣的程序。同時 Python 的縮進格式也比較嚴格,這也很好的讓編程初學者養成一個良好的編寫代碼習慣。在美國有很多編程初學 Python 的書籍,其受眾就是小學、初中的青少年,比如《Python for Kids》,這些書籍一個很大的特點就是圖文並貌,並且很快引入圖形庫的學習,教會小朋友製作出一些圖形和簡單的遊戲,比如畫星星,彈球。這樣的好處是激發小朋友學習編程的樂趣,讓小朋友從小就感受到編程的魅力。

對於 Python 的零基礎學習在網上可以找到很多教程,比如《A Byte of Python》(也有中文翻譯版, "A Byte of Python3(中文版).pdf" A Byte of Python3(中文版).pdf),另外廖雪峰寫的教程也不錯Python教程 - 廖雪峰的官方網站。要是想看紙質書籍,對於小學或初中生建議買《Python for Kids》(中文翻譯書名《趣學Python編程》),《Hello World!:Computer Programming for Kids and Other Beginners》(中文書名《父與子的編程之旅:與小卡特一起學Python》),如果想系統點學習或是高中生,可以購買 桑德 (Warren Sande)寫的《Python基礎教程》( 《Beginning Python: from Novice to Professional》)學習。

2、讀大一零基礎學編程

上了大學因為是工科課程包含編程才開始接觸編程,特別是因為計算機及相關的專業的同學,未學習編程情況可能是因為家裡沒電腦、高中學校不教、初高中自己沒有意識到接觸編程或是家長不給碰電腦的。特別是一些高中學校,信息課本都有一本專門介紹 VB 編程的,但是幾乎沒給學生上電腦課,即使上電腦課也不教給學生編程。

對於上述情況,若是未接觸過電腦的同學,學習編程的首要任務是學習電腦的基礎操作,熟悉鍵盤,讓自己對電腦有初步的了解認識。至於理工科專業的學生大一估計都會教《計算機科學導論》這樣類似的課程,如果想儘快編程,學生應儘快將該書內容看一遍,讓自己對計算機有一個整體的認識。

很多理工科大一都會教 C語言,所以這時建議直接從 C語言 這麼語言入手,但是學校發的譚浩強所發的《C程序設計》這本書千萬別拿來作為自己的初學 C語言 的入門書籍,概念錯誤連篇、邏輯混亂,表述前後矛盾,幾乎每頁都有一堆錯誤。

那麼大一學生若要系統的學習 C語言,建議使用 《C Primer Plus》,英語好的同學可以直接看英文版,注意該書不是《C++ Primer》,《C++ Primer》可以在 C語言學的有一定基礎的時候看。當學完《C Primer Plus》之後,可以對演算法的知識學習,有精力的話可以啃《演算法導論》。平時可以多上 github 上直接看源碼,這樣比單純看書進步的更快。

新手學習編程,看書時一定要不能只看不動手,一定要同時動腦、動手,要將書裡面的代碼都勤奮的敲。


看看這篇文章吧:想成為程序猿?28個在線學習網站讓你變身齊天大聖!


謝邀。我有一個微信公眾號,旨在給沒有任何編程經驗的朋友,講解如何做一個簡單的APP(包括ios/android/html5),目前教程連載到了第9課,所以針對於題主的問題,也算有些經驗,下面我來分享一下自己的思路:

1. 首先要明白,對於沒有任何編程基礎的新手來說,要學一門編程語言,是相當困難的,所以如果一開始要從變數、常量、函數,結構體等方面學習,我敢擔保,通常不出幾天就會選擇放棄了;

2. 所以我覺得最好的方式應該是:先給他們一個非常簡單但又容易變化的例子,讓他們自己隨便摸著玩,這是什麼意思呢?小時候大家應該都玩過模型、積木這樣的玩具,這樣的玩具千變萬化,一開始也不用縝密的邏輯性,只要憑感覺隨意拼搭就好,不管拼得好與壞,通過自己的摸索,始終會拼出一個東西來;

3. 對照到web前端頁面也是如此,我們可以給新手一個完整的頁面例子,讓新手們通過編輯器隨意修改,改頁面標題、文字、圖片,甚至於樣式(顏色、字型大小大小、背景色)等等,在一個設置好的可控範圍之內,讓他們隨意修改,發揮想像力,不管怎麼樣,最終形成的一個頁面,都是新手自己做出來的一個頁面,這樣能最大程度激發起他們的成就感,同時也能讓他們覺得,原來做一個頁面出來並不是一件太複雜的事兒;

4. 另外一開始的開發環境非常重要,有條件的新手,最好找程序員兄弟們幫忙,先把所需要的開發環境搭建好,對於web前端開發環境來講,其實還是比較簡單的(通常一個sublime的輕量編輯器+nginx的web伺服器就足夠了),沒條件的新手們,就老老實實參照著視頻教程,把環境先搭建好,這是通往學習之路的至關重要的一步,毫不誇張地講,任何一門語言,當你獨立搭建好開發環境,敲下第一個「hello world」,並且運行OK,實際上已經成功了一半了;

5. 當新手們胡亂修改著幾個例子,然後自己也鼓搗出幾個頁面後,最好能拜託程序員兄弟們,把自己做的頁面放到伺服器上,同時利用微信,把這些頁面放到朋友圈或者各種社交平台傳播。此時,你的狐朋狗友一定會給你留言:小子,牛逼呀!頁面是你做的嗎?真他媽牛!相信我,此時,你的自信心一定會達到巔峰狀態;

6. 乘著自己正是巔峰狀態,馬上打開w3cschool,老老實實再從基礎開始學習吧,相信前面的鋪墊已經給你樹立了非常大的自信心以及對編程的興趣,接下里只要循序漸進,每天拿出一小時時間學習,相信不出幾個月,一定會學有所成!

7. 針對於沒有編程經驗的新手,這是我能想到的最好學習路徑:先在實踐中增加自己的自信心,然後再腳踏實地得補上基礎,最終達到事半功倍的效果;

最後,如果有緣看到此篇文章的朋友,也想學習編程,比如做一個APP(包括ios/android/html5,這些都是我會的技能),但苦於沒有任何編程經驗,那就跟我來一起學習吧!請搜索微信公眾號:互聯網老黑

PS:我每周都會在微信公眾號中連載學習教程,大家有任何問題都可以給我留言,謝謝。


以前最愛「新手如何學習編程?」 這樣的問題了,因為自以為學編程、教編程很多年了,自然有指導「後輩「的能力了。現在越是遇到這種問題越是不敢回答了,連上講台都覺得還是少說為妙,一不小心就誤人子弟毀人不倦了。

先說結論吧,對於新手來說學編程的最好方法是——找一個師傅,最好是每天都見面的那種,讓他帶領你比較輕鬆地度過入門階段,避免因為坑太多而喪失信心、陷入絕望。如果是在校生,跟老師搞好關係,不少老師在外面都有項目的,讓他帶你做項目(有無工資均可)。

用二十年前學編程的經驗來指導現在的初學者未必是適宜的,當初一本書就能指導我們寫出一個程序,現在的做出一個稍許可以看得過去的程序(特別是Web)都需要多種知識混合運用,一個小知識點就可以卡住好幾個小時呢(比如有次有個已經工作的程序員問我127.0.0.1是個什麼地址),我們也不能要求一個初學者能耐著性子從最基礎的東西學起並且 面面俱到吧,那尼瑪太違背人性了!

-----------------------------------------------------------------

好吧我交代為什麼我有這樣的體會,上個月開始因為客戶項目需要用Python+Django寫,被虐了一個月好嗎!作為一個寫了20來年程序的老程序員(從Hello World算起),在新語言、新環境下做開發真是痛苦不堪,第一次部署到伺服器被文件編碼坑了2小時,以及其他種種不適,要不是看在錢的份上真要放棄了。你們非要說費勁地解決這樣的問題有成就感我也無話可說。

所以,少年,去找個師傅吧!

-----------------------------------------------------------------

又及:你們誰說我老了學習能力下降了我跟誰急,堅決投訴到底。

又又及:C#!你要相信我跟Python只是逢場作戲,我對你才是真心的!你聽我解釋......


初學者建議從Python開始入門,Python是一門高級動態語言,在處理系統管理任務、數學運算、Web編程方面應用非常廣泛,語法簡單,入門很容易,當然深入學習還是比較費勁的。Python有很多庫,可以幫助你完成幾乎所有的任務。入門以後應該學習CS理論知識和高等數學,再向演算法導論、數據結構進發,學習SQL、No-SQL,選擇自己感興趣的方向,深入研究。做Web的話有JavaEE/Django/http://ASP.NET/PHP/ROR/node.js等等好多,移動端有Android(Java)/iOS(O-C,Swift)/WP(C#)等等,還有很多技術和語言,等你深入以後自然就會有所了解。


學習ios編程其實和學習其他平台編程是一樣,無非都是以下過程的循環:

看書-&>研究書中例子-&>自己做些東西-&>網上找資料-&>看書


可以直接看文章:新手學習編程入門 - 知乎專欄

半年前給一個朋友寫了一個學習編程入門的簡單文檔,現在放出來。

1.平台

1.1 桌面平台

桌面平台以操作系統來分類,分為Linux、Windows和Mac三個平台。

1.1.1 Linux

Linux是著名的黑客Linus在大學開發的開源操作系統,建立在早期的Unix內核基礎上。由於它優良的特性及開源的管理方式,吸引了全球大批的開發者使用。Linux一般是用於伺服器,因為它作為一個操作系統來說本身極其優秀,適合在後台作為伺服器系統持續穩定地運行。 Linux上的編程基本沒有接觸過,因為本身工作和這個沒什麼交集。雖然號稱掌握了Linux就說明是個大牛,但是至少這種言論是片面的。學習Linux確實能提高對計算機的理解能力,這方面比較好的書有一個叫[《鳥哥的Linux私房菜》](http://vbird.dic.ksu.edu.tw),專門為學Linux寫的好多書,業界評價很高。

1.1.2 Windows

Windows是使用最為廣泛的操作系統,粗略分類也可以為分個人用戶版本(專業版,基本版,家庭版等)和伺服器版本(Windows Server)。不過由於Win10的推出,Windows現在實行全平台統一內核的方式管理,又新增了嵌入式版本的Windows。 Windows上的編程是最基本的,因為絕大多數人都在用Windows。從QQ到英雄聯盟,從快播到書店管理系統,從ATM到銀行交易,基本都是在用Windows,世界上可以沒有蘋果沒有Google,但是沒有Windows,恐怕一分鐘都運轉不下去。 Windows下有很多的編程框架,大致可以分為兩種:一種是微軟出品的(限於Windows就是微軟的)以.NET為代表的編程框架,另一種是其他第三方的平台。

1.1.2.1 .NET平台

由於.NET只能運行在Windows上,所以它不具備跨平台特性,也就是說,只能運行在裝有特定版本的Windows操作系統上。.NET伴隨著Windows的更新也一直從1.0升級到如今的4.5.以.NET為母體,有MFC(C++,非常古老)、WinForm(C#,主流)、WPF(C#)等編程框架。

- MFC:很古老的一種編程框架,用C++寫的,有控制項,有事件,有服務,很完備。缺點就是東西太古老,不好用,現在各高校仍然有課程在用(比如圖像處理等),但是做這東西事倍功半,不推薦;

- WinForm:非常主流的編程框架,很多軟體都是用這個框架做的。用C#作為編程語言,運行很穩定,好上手,開發成本低。

- WPF:微軟新推出的編程架構,界面很絢麗,用XAML+C#作為開發語言,優秀的MVC架構,是未來的趨勢。可惜發布時伴隨著Vista系統的失利,加上其本身龐大的資源消耗,所以基本上沒有多少人在用。不過它的思想是先進的,一路走來趕上win8和win10(商店應用)都是在用的。

1.1.2.2 非.NET平台

非.NET平台的框架一般都可以跨平台使用。

- Qt:諾基亞出品的編程框架,用C++開發。有自己的界面庫,支持跨平台。在前些年很火,不過現在不流行了。

- Java平台:Java本身是個語言,但是基於Java有很多開源的框架和平台,如Swing等,都提供自己的控制項。不過運行效率太低,因為Java本身就是個虛擬機。

- 還有其他的平台,在Windows上使用率基本很少。

1.1.3 Mac

Mac是蘋果專用操作系統,蘋果系統很大一部分軟體都是用Mac下的軟體開發工具做的。Mac下的開發框架叫Cocoa,iPhone下的叫CocoaTouch(多了個touch)。當然,Mac下的軟體也可以用上面的跨平台的框架來開發。這方面不做過多介紹。

1.2 移動平台

現在最火的就是移動平台了,這一點毋庸置疑。

1.2.1 安卓Android

安卓是一個開源的操作系統,在2008年首次推出,之後由Google收購,到現在是最火的操作系統。Android的內核是基於Linux的,由於其開源的特性,所以很好定製,使得Android在短短几年內迅速佔據移動操作系統的三分之二。 Android開發是基於Android提供的SDK(軟體開發包)進行的。主要的開發語言是Java(用來寫後台邏輯)和XML(用來寫界面)。 Android開發有一些書,這方面比較有代表性的是[《瘋狂Android講義》](瘋狂Android講義_百度百科). 早期(2013年前)Android的開發環境是Eclipse,配合Android的SDK、模擬器等,後來Google推出了整套的Android Studio進行安卓開發,效率非常高,現在基本都在採用Android Studio進行開發。

- [視頻教程](安卓Android開發_安卓Android開發視頻教程從入門到精通 - 麥子學院)

1.2.2 iOS

iOS是蘋果iPhone以及iPad上的操作系統,只能在蘋果機開發,只能用在蘋果產品上。iOS是一個及其優秀的移動操作系統,安卓在發展的早起,很多都是借鑒了iOS的開發經驗做的(當然,後來就互相抄襲了)。iOS開發使用蘋果出品的XCode軟體進行,這個軟體還可能用來開發Mac下的軟體。XCode是一整套的開發工具的集合,可以設計界面、進行調試、上傳到應用商店等。iOS開發使用Objective-C編程語言和Swift編程語言,後者是蘋果在2013年6月推出的新一代編程語言,集合了當下所有語言的優良特性,大有取代Objective-C的意思。所以Swift一直很火。這方面的教程有:

- [斯坦福大學公開課iOS開發](斯坦福大學公開課:iOS 8開發)

- iOS開發指南等。

1.2.3 Windows Phone

Windows Phone是微軟出品的手機操作系統,現在已升級到了Windows Mobile 10.它的開發環境是Visual Studio,用C#進行開發,基本就是windows下開發軟體(WPF)的模型是一致的。雖然我在大學做的最多的就是WP(因為上手快,微軟的教程給力),但是它的市場佔有率多年來一直升不上去。希望得益於Windows10的爆發,能給點力。這方面不給教程了。

1.3 Web平台

Web平台的編程基本是基於伺服器的編程。這方面分為網頁(前端)和服務(後端)。

1.3.1 前端

前端就是我們所看到的網頁。比如[百度](百度一下,你就知道)的首頁很樸素,[QQ瀏覽器](QQ瀏覽器9官方網站 - 瀏覽器_瀏覽器下載_微信電腦版)的首頁就很酷炫,等等。這些是用什麼實現的? 實現語言會在後面再介紹。概括來說

- html是所有網頁語言的鼻祖,網頁都得用它;

- CSS就是一個樣式選擇器,那些字體、顏色等都是用的CSS來控制的;

- javascript是網頁腳本(它可和java沒有半點關係),是用來寫簡單的後台邏輯交互和前端界面交互的;

- html5是最新的html的版本,支持眾多的界面特性。QQ瀏覽器的首頁就是用html5做的。

1.3.2 後端

後端是用戶看不到的,小到註冊一個用戶,大到處理幾十萬的數據,都是後端來做。這方面典型的開發語言是C++、Java、php和python、ASP等。 後端是基於伺服器進行的開發。基本上在軟體工程中處於很頂級的地位。這方面用Java開發是業界很流行的,因為Java沒有C++那麼難寫,本身又有很多框架,比如Spring等,非常適合寫後台的數據交互。

2.語言

2.1 C

C是基礎性語言。它不是面向對象的,是面向過程的語言。C誕生於1972年,其優良的特性很高的效率使它長期佔據編程語言排行榜第一名。C可被廣泛用於桌面、伺服器、嵌入式開發中。

- [C程序設計視頻教程](C程序設計案例教程(2015秋季)-學堂在線慕課(MOOC)平台)

2.2 C++

C++可以看作是對C的擴展,增加了面向對象的機制。什麼是面向對象?簡單來說就是,所有的要操作的物體都是對象,比如一個人是一個對象,一條狗也是一個對象。接著就可以在對象上定義操作,比如人走路是一個函數,人吃飯也是一個函數。這樣設計的好處就是可以封裝起來多次使用,也可以進行繼承。保留總體的相似性,又不失個體的個性。比如張三和李四都是繼承人這個類,但是張三吃飯要3分鐘,李四就要10分鐘,這就是個性。面向對象設計的思想可以在[這裡](什麼是面向對象編程思想? - Java - 知乎)找到進一步的闡述,這基本是所有現代主流語言的基礎。會面向對象,所有的語言學起來特別快。 C++可以被廣泛用於桌面端、伺服器和嵌入式的編程,使用程度非常廣泛,但是由於它的語法很難(主要是指針操作)、沒有現成的SDK進行封裝,所以並不是很適合用來寫移動端的應用。 可以認為,C++什麼都能幹,它太基礎了,效率是高級語言中最高的,但是術業有專攻,它並不是都適合寫各個平台的應用。

- [C++程序設計視頻教程](C++ Programming | C++程序設計)

2.3 C#

C#是微軟是2000年推出的在.NET平台上的編程語言,沒有指針,集合了大多數面向對象語言的精髓,好學好用,效率也不低,是主流的windows桌面應用和部分windows伺服器後台的編程語言。

- [C#視頻教程](C#編程-學堂在線慕課(MOOC)平台)

2.4 Java

Java和C#類似,差不多簡單。但是Java是跨平台的,可以寫桌面、移動(安卓)和後台伺服器,用處非常廣泛,框架也最多。

- [Java視頻教程](學堂在線-最大的中文慕課(MOOC)平台)

2.5 html

html和javascript、css等都是開發網頁前端界面顯示的語言,是很輕量級的。

- [html等教程](Codecademy - learn to code, interactively, for free)

2.6 php

php是用來開發伺服器後端的語言,非常好學好用,語法很簡單。

- [php教程](PHP 教程)

2.7 python

Python是一種腳本語言,執行效率很低,但是語法異常簡單,c++寫幾十行的東西,它幾行就可以搞定。Python理論上可以用在任何地方,但是基本上常用於後台伺服器和一部分科學研究。作為腳本語言,Python是優秀的。

- [python教程](Codecademy - learn to code, interactively, for free)

2.8 http://ASP.NET

http://ASP.NEThttp://ASP.NET是微軟出的寫伺服器後端與部分前端的框架。用C#和html編程。 - [視頻教程](ASP.NET基礎實例教程-我要自學網)

2.9 其他

其他語言還有幾十種,但是都不是很常用。這是不再介紹。 學會面向對象編程思想,走遍天下都不怕。

3.工具

3.1 Visual Studio

微軟出品的宇宙最強編程工具,沒有之一。 VS可以被廣泛用於桌面、伺服器和移動端的編程,最新的VS也可以用來做安卓和iOS,其性能之彪悍功能之強大是宇宙第一。寫C、C++、C#的天然平台,也可以用來寫Python、html等。

- [VS的官網](Visual Studio Home)

3.2 Eclipse

Eclipse是免費開源的軟體。它是一個軟體平台,配合豐富的插件,可以用來寫Java、php、C++、Python等,用來寫桌面、伺服器應用。

- [Eclipse官網](Eclipse - The Eclipse Foundation open source community website.)

3.3 intellji IDEA

Intellij IDEA是捷克Jetbrains公司出品的收費的編程軟體。是Eclipse的替代品。可以把它叫做java界的Visual studio。用來開發基於Java的任何應用。Android Studio就是基於這個軟體的框架進行開發的。

- [intellij IDEA官網](JetBrains: Development Tools for Professionals and Teams)

3.4 Android Studio

開發安卓的集成工具。

- [網站](http://www.baidu.com/link?url=ckxMsBEZ42QFFLmh0KtPkZLHHcFMaVnxPwfDvUdFFNsyo1RtqvnyaodTIqqw9Z5zamp;wd=amp;eqid=fed82086000f227b000000035646be0f)

4.輔助

4.1 資料庫

資料庫是存儲數據的媒介,所有後台數據交互的都必須有資料庫參與。目前最常用的資料庫有Oracle、SQL Server、MySQL、MongoDB等。資料庫獨立於編程語言,由特定的SQL語法進行支持。

4.2 Github

[Github](Build software better, together)是世界上最大的開源軟體管理平台。本文就託管在github上。世界各地的程序員把他們寫的各種類型各種語言的代碼託管在github上實現共享,有利於軟體行業的發展。git代碼管理平台是現在最火的版本控制工具。 iOS、安卓等有很多有名的項目都是託管在github上的。

4.3 MOOC

這個主要是網路公開課。現在最火的受教育形式。 近幾年,MOOC越來越火,課程的數量和質量都不斷發展,給了我們足不出戶就能領略世界大師風采的絕佳機會。本文有很多鏈接都是公開課的。推薦的不錯的有:

- [網易公開課](網易公開課),資源比較多,各個領域都有,裡面有計算機板塊,中國外國都有。上面說的MIT的演算法,我們都是在上面學的,老師講的特別好。另外它還有不斷更新的TED視頻,很值得一看。

- [coursera](http://coursera.org),斯坦福機器學習大牛Andrew Ng聯合成立的,上面都是外國大牛校的視頻。我研究生課程里的機器學習就是學的這上面的,不錯。

- [果殼MOOC學院](MOOC學院(慕課)| 發現全球在線好課),它只是一個公開課搜索中心,幫助你鏈接到各個mooc課程。

- [學堂在線](學堂在線-最大的中文慕課(MOOC)平台),清華主導的,網站做的不錯,課程質量很高,這個是要著重推薦的,我也是最近才發現,上面的計算機和數值方面課程不錯。

- [codecademy](Codecademy - learn to code, interactively, for free),這不是公開課網站,是一個手把手教你學習web語言的。這裡有Ruby,python,html等熱門web語言,而且教程設計豐富而有趣,感覺是學前端最好的地方了。

- 網路資源:大牛的博客什麼的,這方面我就沒什麼好推薦的了,看你的水平去發掘了。百度和google你是當然離不開的了。翻牆什麼的你自己去弄吧,反正百度沒有的東西,你可以去google,google也沒有,你可以嘗試一下用英文搜索,效果非常好!這裡推薦stackoverflow網站,只要你有解決不了的問題,用英文上google搜,如果stackoverflow里有類似問題,恭喜你肯定能解決。

- 書籍:我們計算機方面有很多經典的書,比如高德納老爺爺的《計算機程序設計藝術》相信你一定聽過,網上都有pdf下載,可以看一看。另外,我們這個方面像《XXX精通》等書太多了,而且基本都是大部頭的,還能防身呢!這個推薦你能下pdf就下pdf,不然這麼大,有個三五本就夠你受的了。這些書都是當字典用的,千萬不要從第一頁碼開始一頁一頁讀!效率低而且你會發現沒用。這都是你在遇到問題時去查的,不是讓你真學的。

- [我在知乎上關於計算機學習的一個回答](大一迷茫求指點? - 王晉東不在家的回答 - 知乎)


請帶著想要實現某種程序這個目標去學習。

根據目標去選擇語言,只是簡單地想要學編程,你可能只會看看一些講編程語言的書,或者視頻教程,做做上面的習題,但是很難堅持下去。


如果不是針對啥IOS或者網頁的話可以看看MVA的課程免費還有獎品送的樣子。


最好是邊玩邊學,這裡有一些支持用編程語言玩遊戲的列表。

Coding Play and Learn


編程就是一個學習實踐再學習再實踐的過程。

先學習一塊知識內容(html, css, java, 或mysql)。然後做一下相應的練習。做完練習以後再針對自己感到疑惑的知識點看一些相應的資料和內容。再做一些與自己看的知識點相關的習題。

切記:剛開始不要做太複雜的練習 學習太複雜的內容 一方面基礎不夠 第二是方法沒掌握。你讓一個沒學過編程的人做一個涉及到html css javascript三塊內容的網頁 那純粹是自殺。


我自己的例子:

Visual Studio Express+C# Fundamentals for Absolute Beginners


我覺得還是從實際開發中練手吧,先看一本書了解一些基本知識,然後就可以開始寫一些小東西~比如這是我自學的時候隨手寫的一個網站:http://www.uwhile.com

寫完之後動手能力有了實質的長進,對一些基本知識在加深印象的同時,也掌握了它們的用法呢


英國孩子從5歲開始就接觸相關課程,美國則更早。這些國家如何對孩子進行編程教育的? 採用國際通用的Python語言進行教學,Python可做的任務很多,國外幾乎所有發達國家的學校都以此作為入門的計算機語言啟蒙,而且它的延展性特彆強,可以作出很多不同的用途。由於Python語言方便、通用、簡單明了,受全球很多程序員專家歡迎,但在國內卻很少有人教Python語言,更多是教Scratch簡易編程工具。但又因為Python用途很廣,在國際上通用,所以國內很多人後來不得不選擇自學。同時,它又是一個兼容性很強的編程語言,一般配置的電腦即可使用。可以試試參加莎士比亞英語小鎮的外教編程課程,據說不錯!


不差錢的就學iOS 編程


LS們秀優越感有意思么,術業有專攻不懂?LZ,買書自學,隨便一本教科書,從頭看到尾,框架就懂得差不多了。我是別的engineering專業,自己在旁聽學校的暑期課,覺得效率還不如看書來得快。


推薦閱讀:

學一門編程語言的首要原則是什麼?
如何高效快速背誦和熟悉API?
如何從零開始寫一個簡單的操作系統?
學習C語言會耽誤學C++嗎?
計算機技術行業從業的門檻高嗎?

TAG:編程學習 | 編程入門 |