非計算機專業想從零開始學編程該如何進行?

有哪些東西要學,未來有哪些發展方向?


個人覺得, 一件事, 想做好, 需要的東西太多了,並且是長時間的持續的大量時間的投入.
同時一定要注意層次和目的, 不然計算機這麼複雜, 你可能會迷失.
先說目的, 想學編程一定有自己的原因, 那麼一定要不忘初心, 計算機很有意思, 有趣的東西很多, 但是要以完成目標為前提進行學習, 這樣可以保證你的知識體系是有目的的不斷填充.
再說層次, 簡單的說, 層次可分為理論層和應用層, 這兩者應該是互相結合, 相互作用的關係. 比如, 新接觸一項技術, 根據別人的指導完成了任務, 如果想進一步去優化, 就應該從應用層稍微轉向理論層. 就是實踐和理論相結合的意思.
對於零基礎學編程, 應該先拋開細節, 著重去體驗程序的運行, 稍稍做做改動, 程序又有哪些變化, 如此往複, 從模仿開始學習.
如果想學PHP(python這樣的類PHP語言也類似吧), 那麼下面是一個簡單的思路
開始是學習HTML, 我認為應該從頁面入手, 然後做些改變, 自己體察細微變化, 然後去研究什麼是塊元素, 什麼是內聯元素. 之後呢, 讓學習者做一些展示性的變化, 使用&&等標記, 這樣實現會很複雜, 那麼可以引入CSS. CSS也不要上來就挨個介紹屬性, 而是以完成展現任務為目的. 此時, 可以引入HTML是web頁面結構, 以及CSS是web頁面的展示負責模塊以後, 引入很簡單的js.然後提一下jQuery的原理.
而後, 可以接觸PHP, 做個簡單留言板, 接觸到PHP的一些東西和資料庫相關東西.
然後,做一些用戶註冊, 登錄, 理解Cookie和session是怎麼回事. 在手寫一些資料庫操作函數以後, 選一個庫開始使用.
再然後,引入模板( php smarty 模板)的概念, 簡單的邏輯和展示分離.
這時候, 可以學習jQuery, 做些Ajax相關東西, 了解一下json
這時候應該重視代碼質量了, 可以看看art of readable code之類的書
在有人引導的前提下, 可以看看開源項目(drupal, zendframework, wordpress)
再深入的話, 我覺得就該從頭學了計算機這個學科體系里的基本知識: 比如C語言, 數據結構 操作系統, 計算機組成原理, 計算機網路, 資料庫原理, HTTP協議, TCP/IP協議.

國外的大學的視頻也很不錯, 可以去這裡看看: 網易公開課
關於學習js:iteye.com 的頁面
覺得自己已經可以成為菜鳥之後可以參考皓哥的: 程序員技術練級攻略
以及培養編程修養和軟體工程方面的知識: ThoughtWorks(中國)程序員讀書雷達
還有要有積極的心態林正剛有本書, 講得還行.

在最後之前, 每個人, 都有自己的方法, 適合自己的並不是一定是和別人. 只要你想做成, 這個方法很容易找到.

"「以大多數人的努力程度之低,根本輪不到拼天賦」"


最近在試圖去寫這樣一個內容:

be a geek 1:無處不在的html
有一天,走在回學校的路上,我在想:「未來是科技時代(現在也是),只是未來科技會無處不在,而如果我們對於周圍的無處不在的代碼一無所知的話,或許我們會成為黑客帝國中的一般人」。所以開始想著,人們會開始學習編程就像學習一門語言一樣,直到有一天我看到了學習編程如同學習一門語言。這算是一個有趣的時間點,於是我開始想著像之前做最小物聯網系統的那些步驟一樣,寫一個簡單的入門。也可以補充好之前在這個最小物聯網系統缺失的那些東西,給那些正在開始試圖去解決編程問題的人。

be a geek 2:無處不在的javascript 1
Javascript現在已經無處不在了,也許你正打開的某個網站他可能是node.js+json+javascript+mustache.js完成的,雖然你還沒理解上面那些是什麼,也正是因為你不理解才需要去學習更多的東西。但是Javascript已經無處不在了,可能會在你手機上的某個app里,在你瀏覽的網頁里,在你IDE中的某個進程中運行的。


選一門語言(建議Python,我當年是BASIC),網上找本完整的電子書,自己照著搭建環境,對著書一個字一個字敲代碼,運行,出問題自己解決,解決不了先谷歌,不行再來網上問,一本書這麼敲下來就算入門了,然後就可以編你想編的程序了,有問題問谷歌。等有了一定的編程經驗,你就知道該進一步學什麼了。


如果我再重新從零來一遍的話。我會,
0.選一門相對容易的語言。
1.看一些關於這門語言的簡介。
2.找一些這門語言的簡單的小例子參照實現。
3.看這門語言入門書。學習主要的語法要點。當然是在做中學。
4.將語言這個工具掌握以後。可以模仿其他人的例子。當然,更好的是實現自己的想法。
這樣,編程基本入門了。


python其實不錯的,可讀性非常好,非常像英語。


你是興趣學習還是為了就業
興趣學習:
個人建議,要選擇一門能讓你感到編程的快樂的語言,python是個不錯的選擇
(其實上述很有相對性,我學習編程的時候就覺得C蠻難的,覺得很枯燥,應該是智商問題。智商越高越不在乎起步的難度與高度,你掃過去,都懂,自然很有成就感)
以下是MIT的編程入門課程,通過python這門語言陳述
Video Lectures
為了就業:
想清楚自己想要幹什麼,你去招聘網站搜索相關職業,搜個十幾條出來,把他上面的要求統統學會!


看到這個帖子,我就想起來我學習編程的經歷。
朋友,什麼樣的學習方法,並不重要,重要的是心態,樓上說的很詳細了,3P技術(asp、php、jsp),往後到java、.net都不錯。關鍵是心態是行動,是堅持。
這方面我做的不好,現在在一個非互聯網公司做網站方面的開發維護和升級需求,工作環境相對輕鬆。但心裡是一點都不踏實。非互聯網公司技術一般都比較薄弱,空餘時間也多,目前捎帶學習了jquery和html5.
對了朋友,資料庫你也要學一些,mysql,mssql,oracle。一定要堅持,要努力。
想到這個內心總是很慚愧,去年找工作時候,我才發現以前那麼好的學習機會,用的心真是太少了。如果踏實一點……如果……這個世界沒有如果。
努力吧,年輕的時光不多,過幾年學東西就不是那麼容易了。
再說一遍,心態,心態,心態


我是一個建造行業搬磚民工,也是從零開始自學編程,到現在約一年時間,雖然技術程度上來說比起專業從業人員差遠了,但是作為一個業餘愛好者而言我目前覺得自己的知識夠用了,也有一些自學的經驗。之前很多答案其實都給出了解答,希望我的答案,從我這種小白角度能給一些零基礎到連縮寫都看不懂(跟我當年一樣)的業餘愛好者更多的信息。

======================================

1. 計算機語言

不管是哪門語言,其實核心內容都是一樣的:就是以簡單的語句,告訴計算機做什麼事情,一句接一句,從而完成一個複雜的項目。比如說,我指揮我老公說:「你把冰箱里的橙汁拿給我,你看看過保質期了沒,過期了就倒掉了。」用人類的語言說來一氣呵成的事情,但是計算機只能聽懂簡單的分解的句子,而且邏輯要縝密,所以如果讓計算機來做這個事情,指令可能要分解為以下:

檢查冰箱里橙汁的保質期;

如果,過了保質期,倒掉;

如果,沒有過保質期,拿給我。

就如此交流下去,從而形成一個程序。

所有的語言都離不開這個宗旨,不同的語言,也就是什麼C啊Python啊Java之類的,自然語法是不一樣的。就像人類的語言,中文和英文不是一個語言,語法和發音都不一樣,但是主要的目的是交流,這個是不會變的。因此不用擔心第一門語言沒選擇好,會浪費時間浪費精力,只要你學會和計算機交流的方法,從一門語言轉到另外一門都是很輕鬆的。

我最開始想要自學的時候,也查閱了相關的帖子,看了很多帖子後感到每門語言都很重要!都要學習!一輩子都無法學會了!可是當我真的學進腦子後,我發現都是一通百通的。所以各位零基礎的同學看到上面各種不同語言的推薦不用擔心,只要有心,很快就能掌握上列的語言。

當然了,作為初學者,如果又是自學的話,一開始選擇一門簡單一點的語言肯定是有幫助的。


2. 語言的選擇

是看你學語言是為了就業還是興趣呢?

為了就業的話,之前也有答案說過,到招聘網站上去找你的理想職位,要求什麼就學什麼。

為了興趣愛好的話,看你興趣愛好在哪方面。比如說我,我覺得很想將來有一天做出自己的遊戲,就去搜現在好用的遊戲引擎,恩好吧,大家都說Unity好,然後去搜Unity推薦的語言,恩好吧,大家都說Javascript。好,那就是它沒跑了。

同樣的,如果你想做網頁,去搜去找,如果想做APP開發,如果想做黑客……

如果一定要讓我這個小白推薦語言的話,我會說Python和Javascript,畢竟比較簡單又萬金油,我自學起來反正是沒有什麼障礙,兩種語言也算是比較接近。


3. 基礎的學習

好了,現在我們語言選好了,比如說咱選了Javascript,終於要開始學習了。首先要說的一點是不管你是通過什麼方法學習,第一課一定是簡單到爆的,一定不要因此懷疑它的功能,233。

一般來說,自學語言就是找一本入門書籍,挨著一頁一頁的看,然後跟著敲代碼,等這本書看完了也差不多算是入門了。可是我在這樣學習的時候,還是對書里的描繪有一些困惑,因為它是一整段就已經寫出來了,對於其中的一些細節流程還不是很清楚,比如,這一句寫完之後我敲回車出來的樣子是怎樣的?(是的,作為一個小白,我是真的有這些問題的QAQ)

所以我個人認為看著視頻學習更加有效,你就跟著視頻里的人一個字一個字的敲,所有流程都一清二楚。像youtube上面這樣的視頻非常的多,絕對不差資源。

另外,我還牆裂推薦一個APP叫做Learn Javascript(我不知道中國大陸上架沒就是了;它還有其他的語言學習軟體也是Learn XXX)。這個APP就是基礎教學式的,全免費,然後每頁結束後還有個小問題考考你剛才講的內容,非常效率。

我用了兩個周末看完了一個視頻系列,基本的語法已經差不多理解了,但是要熟記於心還要接下來的長期運用才行。大家可以參考一下這個時間,所以入門真的不難!


4. 提高

當你看完一本書,或者一系列視頻,那恭喜你,基本的語法你已經掌握了,接下來你要學會怎麼把這些碎片的句子組織起來形成一個程序,讓計算機給你賣命。我的建議是,去網站上找別人寫出來的程序,一句一句的先讀懂別人為什麼要這樣寫,這樣寫讓計算機做了什麼。然後加入自己的理解,改編成自己的東西。比如你想做一個炫酷的個人網站,想在網頁上加一個視頻播放器,那麼就在相應網站上搜索別人是怎麼寫的,自己讀懂後自己跑來試一試。

推薦的網站有:Code Pen, Envato, W3school, Stackoverflow

(還有好多其他的,等我有空了再整理吧)

等自己跟著別人寫的程序能夠完成一個完整的項目之後,那麼恭喜你,可以開始嘗試獨立寫程序,把自己想要計算機做的事情寫出來,也可以到GitHub上跟人分享,求大神幫你點評點評。


共勉!


先從學習製作網頁開始吧,HTML+div+CSS是必學的,然後選一門動態語言來學,目前主流的有PHP ASP JSP(java),可以選一個來學,本人學習的是PHP,因為這個和C語言的語法相近,而且上手比較容易。
推薦一個學PHP的網站給你,http://WWW.PHP100.COM,這個網站比較靠譜。
學習其他語言的話,就上百度搜吧,也很多的。

要說未來發展方向的話,學PHP這樣的網頁語言,只能停留在網頁開發上面。
其實對於非計算機專業來說,真正應該了解計算機的是資料庫和用戶體驗,以及項目流程的東西,但是這些東西如果不在真實的項目當中去學習,幾乎很難體會到。

具體方向有很多。
學習java的選擇面會很廣,如手機開發,網頁開發等,跨平台優勢。
微軟的.NET框架中C#,http://ASP.NET語法規則幾乎是一樣的,路子也很廣只是平台不同,成敗幾乎與微軟這家公司的成敗掛鉤,但是目前似乎不需要擔心微軟平台優勢會失去。
學習其他底層語言的話,就會用於硬體和底層的開發,如C語言。


從java或者python開始比較好


一般就是java和php學起,推薦斯坦福大學的公開課編程方法學


去w3school慢慢學~


非計算機專業想從零開始學編程該如何進行


計算機科學導論(原書第2版)/佛羅贊 (Behrouz A.Forouzan)-圖書——這本書不錯
計算機程序的構造和解釋(原書第2版)/艾伯森——據說翻譯的不好但是我還看不出來不好在哪兒,但裡面錯誤挺多的注意在網上找找勘誤


推薦閱讀:

學IT建議看書還是跟著視頻學?
是買ps4+顯示器還是攢一個電腦?
Python 3 正在毀滅 Python 嗎?
網路上傳聞的Shadow Web是不是真的?為什麼存在這麼多的恐怖經歷?
在假定windows系統沒有綁定瀏覽器的情況下,有什麼辦法訪問指定站點down一個瀏覽器?

TAG:學習 | 編程 | 計算機 | 自學 | 編程學習 |