普通人學編程應該學到什麼程度?
比爾蓋茨說編程應該成為21世紀人人必備的技能。在現在來看,一般人懂一些編程技能對生活很有幫助。現在這麼多編程語言,那麼普通人應該學習那些內容、學到什麼程度呢?
請為了解決特定問題而學編程,不要為了學而學,謝謝。
/**
* 感謝題主的提問,讓我又重燃了回答問題的慾望…
* 感謝 @張一弘 先生認真的回答,想在他的基礎上補充一些關於編程語言和其它的內容。
*/
1. 編程對生活有什麼幫助
1.1. 鍛煉抽象思維能力
1.2. 鍛煉邏輯思維能力 1.3. 應用程序解決實際問題 1.4. 學習電腦知識和英語 2. 應該學習哪些編程知識 2.1. HTML/CSS、JS 2.2. PHP 2.3. C 2.4. bat 3. 應該學到什麼程度
其間解釋了一些原理性的東西,希望能夠幫助大家理解。但非常抱歉的是,這篇回答會變得比較長,不關心的人或者已經知道了的人就請直接跳過,直接看粗體和下劃線的文字就好了。謝謝!
1. 編程對生活有什麼幫助?
編程對生活的幫助很多,具體體現也因人而異。一個傳統的程序員接受到的訓練,從高等數學到數字邏輯,到程序設計語言語法,到數據結構與演算法,帶來的將是一整套的系統的收益。而針對題中的前提,作為無法投入那麼多學習成本的普通人,學習編程的收益主要有以下4點: 1.1. 鍛煉抽象思維能力 此處的抽象思維能力,我暫且把它定義成一種「將現實生活中的事或物,通過抽象,轉化成一種模型的能力」,不知是否準確。通過將存在問題的事或物抽象成某種模型,我們可以更加輕鬆地透過現象看本質,從而解決問題。 高級程序設計語言可以分為 面向過程(link: 程序編程) 和 面向對象(link: 面向對象程序設計) 等。其中面向過程的思想,善於將一個事情抽象成若干個過程,如:「我的一天」大致可以抽象成: 起床(); -&> 吃早飯(); -&> 坐車(); -&> 工作(); -&> 吃午飯(); -&> 工作(); -&> 吃晚飯(); -&> 加班(); -&> 坐車(); -&> 睡覺(); 。而一個稍微複雜一些的例子則可以用如下的流程圖來表示:var personXiaoA = new person ({
name: 小A,
gender: 男
});
var personXiaoB = new person ({
name: 小B,
gender: 女
});
personXiaoA.ooxx(personXiaoB);
在這裡,我們基於「人類」(person)創建了小A(personXiaoA)和小B(personXiaoB),並讓他們做了一些事情…什麼的…嗯,總之,其中,name屬性和gender屬性,都是創建對象的時候賦予給被創建的人(對象)的,而ooxx方法在這裡沒有被再次定義,因為它是繼承於「人類」這個超類,即:所有人類生來就會ooxx,無需教他。(當然我們也可以給小A重複定義一下ooxx方法,以增強他的ooxx水平。)
那麼,有這種能力有什麼用呢?簡單來說就是將一個複雜問題抽象化,從而可以進行定性定量地分析。這種事情如果做大做強,我覺得可以參考 數學建模 …當然我們不需要做到數學建模的地步,我們只需要能夠抽象出一個事物中,我們關心的相關項,然後進行比對或分析,可能就能夠更簡單地解決問題。
1.2. 鍛煉邏輯思維能力 邏輯思維能力是生活中一項重要的能力。(我覺得也是一些人所缺少,或者說需要鍛煉的一種能力。) 一個簡單邏輯笑話(也可以當成文字遊戲…):如果你買J國的車,J國的公司就會盈利,J國就會更有錢,J國就能夠製造更多武器設備。因此你每買一量J國的車,就是在為J國造一輛坦克。
此句為典型地滑坡謬誤。滑坡謬誤的特點是如果A則B、B則C、C則D,從而推出如果A則D。但是實際上,A到B、B到C、C到D之間並非必然的因果聯繫,可能只是概率事件,甚至某些聯繫是未知的,因此無法從A一路推到D。
那麼擁有邏輯思維能力有什麼用呢?通過養成良好的邏輯思考能力,通過合理地觀察和分析事物間的特徵和聯繫,我們更有可能避免這種詭辯的誤導,從而能夠對問題做出更理性和正確地判斷,或者能夠更合適和恰當地表達出自己的觀點。/* 什麼?你說女朋友提出的問題如何通過邏輯解決?
程序員從不思考這個,因為程序員通常沒有女朋友。 */
當然,上面那段注釋里的內容也存在邏輯問題。如果你說你什麼都沒看到?那麼恭喜你…
1.3. 應用程序解決實際問題
以上兩點主要是在學習編程的過程中培養的。而當學會一門語言後,用來解決實際問題又是另外一回事兒了。學習編程語言,能夠解決什麼實際問題呢?很多,以至於我不能展開寫,只能簡單地說一下。因為能解決哪些實際問題,主要取決於我們學習的是哪種語言…所謂「術業有專攻」,不同的編程語言所能達到的效果,也是各不相同的。具體的應用我將在下面舉例說明。 1.4. 學習電腦知識和英語 在學習編程的時候,勢必會接觸到各種電腦知識,也會涉及到英語問題。以後電腦可以自己修了,不用麻煩身邊計算機學院的同學了對不對?// 如果你是女神,請忽略這一段話。
// 我會告訴你學了編程以後還能看懂知乎上的程序員笑話嗎?媽媽再也不擔心我笑點高了!
2. 應該學習哪些編程知識
首先應該學習抽象和邏輯的能力,不用刻意去看書,因為在學習編程語言時,這兩個問題幾乎是無法規避的,只要學習語言的過程中多想一想就可以了。 那麼應該學習哪門編程語言呢?我認為,沒有哪門編程語言是應該學習的(別抽我…),因為幾乎每門語言都有他的實際用途。所以這裡我只能把問題改成,我推薦學習哪門編程語言。這裡又要插一句,之前與張先生探討過Markdown不算編程語言,但是這種標記語言也確實是計算機中不可組成的一部分。此外,一些腳本語言也不該歸到程序設計語言里,但是也是很重要的一部分,因此這裡我想將編程語言不僅僅局限於程序設計語言中,而是拓展到包含標記語言和腳本語言的範圍。
這裡還需要再插一句,這部分內容只是個人觀點,並不一定是正確的,也不一定是適合你的。至於為什麼如此選擇,我會寫下原因,以下內容只能起一些參考作用。 總之,我推薦學習的語言是下面這些:2.1. HTML/CSS、JS
沒錯,我就是苦逼的前端工程師,所以推薦web開發的這一套(請不要呵呵我)。原因是:應用廣泛,上手簡單,不需要搭環境,不需要編譯,僅僅藉助notepad就可以寫出屬於你的網頁應用。下面來詳細解釋一下這些都是什麼。 HTML,超文本標記語言。開發者通過編寫HTML語言,交由瀏覽器處理,以呈現各種網頁。 一個典型的HTML:&
&
&
&
&
&文章標題&
&文章內容&
&
&
每一套相互匹配的尖括弧,叫做一個標籤。可以看到,所有的標籤都(應該)是閉合的,有層級關係的。如最外層是& ... &,代表該html的開始和結束。&
標籤里定義了一些不會被直接顯示到頁面,但是會影響頁面的內容。如裡面的&標題和&塊,均是頁面的內容。我們可以打開記事本,把這段代碼放到記事本里,保存成*.html格式文件,再用瀏覽器打開,我們就能看到你的第一個網頁————
……………
… 丑!對,沒錯,丑爆了有木有!為了解決這個問題,我們接下來介紹CSS。 CSS,層疊樣式表。用來定義HTML元素是應該如何被瀏覽器呈現出來的。什麼叫如何被呈現出來的?就是用來定義一個元素的諸如位置、尺寸、顏色等信息。CSS通常用& &&
&
&
文章標題&
&文章內容&&