一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

編程是什么?我要學(xué)嗎?

 汕頭能率 2016-09-01
     
  閱讀時(shí)間
  5 分鐘

    ▲


很多人覺(jué)得編程是很高端神秘的事情,覺(jué)得自己可能學(xué)不來(lái)。但是了解到程序員的工資比較高,所以又蠢蠢欲動(dòng),想進(jìn)入這個(gè)領(lǐng)域。那么,在回答這個(gè)問(wèn)題前,我們先了解一下什么是編程吧。

什么是編程

編程,也叫程序設(shè)計(jì),其實(shí)就是用編程語(yǔ)言處理數(shù)據(jù),以達(dá)到你想要的效果。有一本書(shū)的名字很清楚地表達(dá)了這個(gè)觀點(diǎn)。

Algorithms + Data Structures = Programs

算法 + 數(shù)據(jù)結(jié)構(gòu) = 程序

什么是數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)其實(shí)就是數(shù)據(jù)存儲(chǔ)的方式。我們不妨用下面幾個(gè)生活中的例子來(lái)理解。

  • 地鐵站X光機(jī)上的一件件行李

行李是排成一排,按順序進(jìn)入 X 光機(jī)處理的。排最前面的,先處理。最后進(jìn)的,最后處理。如果把行李看作是數(shù)據(jù),這種數(shù)據(jù)結(jié)構(gòu)其實(shí)是隊(duì)列。隊(duì)列的特點(diǎn)是先進(jìn)先出

  • 超市里疊在一起的一箱箱牛奶

疊在一起的箱子,最開(kāi)始放置的肯定是最下面的那個(gè),然后一箱一箱往上壘。要拿出來(lái)的時(shí)候,當(dāng)然是先拿最上面的,最下面的最后才拿。這種結(jié)構(gòu)就是棧。棧的特點(diǎn)是先進(jìn)后出

  • 電腦的文件夾

文件夾可以包含有子文件夾和文件,子文件夾又可以再包含下一層的文件夾和文件。這個(gè)結(jié)構(gòu)可以理解為樹(shù)型結(jié)構(gòu)。文件是樹(shù)的葉子節(jié)點(diǎn),子文件夾可以是樹(shù)的分支,也可以是葉子。樹(shù)的特點(diǎn)是分支和層級(jí)關(guān)系

什么是算法

算法就是對(duì)數(shù)據(jù)進(jìn)行處理的方法

從數(shù)據(jù)層面看,結(jié)構(gòu)不同一般需要不同的處理方式。從處理效率看,對(duì)同一種數(shù)據(jù)結(jié)構(gòu),也可以有多種不同的處理方式。有些算法,可能要處理的數(shù)據(jù)量越大,時(shí)間就會(huì)成倍增加。有些卻無(wú)論數(shù)據(jù)多大,時(shí)間都基本恒定。舉一個(gè)例子:

假設(shè)你買(mǎi)了一個(gè)圓柱型的水果軟糖,里面有 9 粒糖果。如果它的包裝開(kāi)口是在某一邊,你需要拿第 5 粒,那么你就必須先把前面 4 粒拿出來(lái),才能拿到第 5 粒。而且你想拿的糖果越在后面,花費(fèi)時(shí)間就越多。但是,假設(shè)有一種包裝是橫著把圓柱形打開(kāi)(結(jié)構(gòu)不同了),你一次可以看到和拿到 9 粒糖果。那么無(wú)論你拿哪一粒,花費(fèi)的時(shí)間都是一樣的。

在電腦里是怎樣的?

假設(shè)我把上面的糖果問(wèn)題抽象到計(jì)算機(jī)里面,是什么樣子的呢?下面用一段 JavaScript 代碼來(lái)模擬吧。(懂編程的朋友,別吐槽順序取的代碼,我知道可以按位置,這里只是說(shuō)明一下。)

 function showMeTheCandy(candy) {    console.log(candy)  }  // 排成列,順序取  var candy = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'] // 我有9粒字母糖果  var toPickCandyLocation = 5 // 我要取的糖果是第5粒  var currentCandyLocation = 1 // 現(xiàn)在我要開(kāi)始取的是第1粒  var candyPicked = null // 我取的糖果要放這,但現(xiàn)在還不存在  while (currentCandyLocation <= 5) { // 當(dāng)我要取的糖果還不是第5粒的話(huà),重復(fù)下面的事情    candyPicked = candy.shift() // 從最前面取1粒    currentCandyLocation = currentCandyLocation + 1 // 挪到下一個(gè)位置  }  showMeTheCandy(candyPicked) // 看看拿到的糖果是什么字母  // -> 'E'  // 做成特定的,可按位置/編號(hào)取的結(jié)構(gòu)  var candy = {    '1': 'A',    '2': 'B',    '3': 'C',    '4': 'D',    '5': 'E',    '6': 'F',    '7': 'G',    '8': 'H',    '9': 'I',  }  showMeTheCandy(candy['9'])  // -> 'E'

從上面可以看到,同樣的數(shù)據(jù),可以按照不同的結(jié)構(gòu)來(lái)存放。不同的處理邏輯/算法,效率不同。所以,從這種角度來(lái)看,學(xué)習(xí)編程和程序設(shè)計(jì),是學(xué)會(huì)抽象,學(xué)會(huì)如何把現(xiàn)實(shí)問(wèn)題,在計(jì)算機(jī)里面表現(xiàn)出來(lái)。還有數(shù)據(jù)處理。

從另一種角度來(lái)看,編程和程序設(shè)計(jì),就像寫(xiě)作。從上面第一段順序取數(shù)據(jù)的代碼看,我就像寫(xiě)作一樣。我在用計(jì)算機(jī)能理解的語(yǔ)言,寫(xiě)操作指引出來(lái)。一個(gè)好的程序員,寫(xiě)的代碼,一定像好文章那樣容易理解。不同的語(yǔ)言,指令有點(diǎn)不同,但差不太遠(yuǎn)。所以學(xué)會(huì)一種語(yǔ)言,再學(xué)一種難度就沒(méi)那么大。

應(yīng)該不應(yīng)該學(xué)習(xí)編程

其實(shí)編程和程序設(shè)計(jì)并不難,尤其是當(dāng)你能把它和實(shí)際問(wèn)題結(jié)合,理解。回到最開(kāi)始的問(wèn)題,我應(yīng)該學(xué)編程嗎?首先,問(wèn)問(wèn)你自己,你學(xué)編程的目的是什么?

  1. 你覺(jué)得通過(guò)指尖敲擊的指令,就能創(chuàng)造無(wú)限可能,這實(shí)在是太酷了。  —  你絕對(duì)應(yīng)該學(xué)習(xí)。

  2. 你目前遇到些繁瑣而重復(fù)的事情,想看一下計(jì)算機(jī)能否代勞。  —  你應(yīng)該嘗試。

  3. 你想找一份工資相對(duì)高的工作,不用搬搬抬抬,還能在辦公室吹空調(diào)。  —  這也是不錯(cuò)的選擇。

  4. 你想學(xué)到一種編程語(yǔ)言讓你當(dāng)金飯碗用,拿高工資。  —  早早死了心算了。

計(jì)算機(jī)應(yīng)該是變化越來(lái)越快的領(lǐng)域,雖說(shuō)有不少語(yǔ)言誕生的時(shí)間已經(jīng)幾十年,但是它們也是持續(xù)演化的。說(shuō)不準(zhǔn)你剛學(xué)會(huì)沒(méi)多久的東西,兩三年后就沒(méi)什么人用了,就像現(xiàn)在的前端框架。所以,如果你想把程序設(shè)計(jì)作為你的職業(yè),請(qǐng)做好長(zhǎng)期持續(xù)學(xué)習(xí)的準(zhǔn)備。

但是,即便你不需要把它當(dāng)作職業(yè),我認(rèn)為,多少具備一些編程的能力,讓計(jì)算機(jī)輔助你解決問(wèn)題,提升思考方式和效率,真的非常有好處。送上 Linus 大神的話(huà):

Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

怎么開(kāi)始?

如果你已經(jīng)下定決心要學(xué)習(xí)程序開(kāi)發(fā)。那怎么開(kāi)始?

從問(wèn)題出發(fā)

你想解決什么問(wèn)題?處理什么數(shù)據(jù)?最后達(dá)到什么效果?從事哪個(gè)領(lǐng)域?

比如說(shuō),如果你要處理 Excel,做各式各樣的報(bào)表?;蛘咭獜墓潭ǜ袷降?Excel 里面抽取數(shù)據(jù)。那你可能只要學(xué)習(xí) VBA 就可以了,或者用 JAVA。因?yàn)?Excel 這種企業(yè)級(jí)的東西,你用回微軟自家的語(yǔ)言會(huì)方便些。企業(yè)級(jí)的 JAVA 語(yǔ)言也是不錯(cuò)的選擇,因?yàn)橐呀?jīng)有很多寫(xiě)好的工具,你學(xué)會(huì)拿來(lái)用就可以了。但是如果你非要選 Node.js 和 JavaScript 來(lái)處理,就真有點(diǎn)作死。

還有,很多人想學(xué)數(shù)據(jù)分析,一上來(lái)就學(xué)什么 Spark, Hadoop,搞大數(shù)據(jù),但我覺(jué)得那是不對(duì)的。只學(xué)會(huì)搭建工具環(huán)境,卻不會(huì)數(shù)據(jù)分析的基礎(chǔ),難道不是本末倒置嗎?況且,工具和框架更新?lián)Q代比語(yǔ)言變化得還快,一年后說(shuō)不定又換新了。

數(shù)據(jù)分析最主要的是有數(shù)據(jù)思維,基本的統(tǒng)計(jì)學(xué)知識(shí)和數(shù)據(jù)分析的能力。如果你用 Excel, SQL 就能挖掘出數(shù)據(jù)里面的商業(yè)價(jià)值,看到別人看不到的規(guī)律,那就牛了。當(dāng)然你還可以學(xué)習(xí) Python 或者 R 這種最基礎(chǔ)的數(shù)據(jù)分析領(lǐng)域的語(yǔ)言,因?yàn)樗鼈兲峁┴S富的數(shù)據(jù)分析算法和展示工具,讓數(shù)據(jù)分析工作更簡(jiǎn)單。所以,我覺(jué)得只有真的具備一定的基礎(chǔ),而且數(shù)據(jù)真的大到一定程度,你才需要去用那些大數(shù)據(jù)的處理工具。

Web Application 開(kāi)發(fā)領(lǐng)域,無(wú)論前端后端,我覺(jué)得肯定要學(xué)的是 JavaScript, HTML, CSS。如果你打算在前端發(fā)展,不管你是打算用 jQuery, AngularJS,React 或者 VueJS 也好,原生 JavaScript 都是基礎(chǔ)。即便你想從事后端,擁有基本的前端知識(shí),可以讓你方便和前端溝通合作。后端的語(yǔ)言選擇相對(duì)較多,一般是 Ruby, Node.js, Python,PHP, Java。Java 在傳統(tǒng)企業(yè)領(lǐng)域用的比較多,初創(chuàng)公司一般選其它的來(lái)起步。Go, Rust, Clojure 比較新,用的人相對(duì)少一些。

如何起步

現(xiàn)在互聯(lián)網(wǎng)如此發(fā)達(dá),書(shū),視頻,在線(xiàn)教育和練習(xí)編程開(kāi)發(fā)的資源都相當(dāng)?shù)枚?,?duì)于一個(gè)稍微有點(diǎn)編程經(jīng)驗(yàn)的人來(lái)說(shuō)。自學(xué)應(yīng)該完全不是問(wèn)題,不愁沒(méi)有資源。但是,對(duì)于一個(gè)完全是自學(xué)起步,沒(méi)有任何編程背景的人來(lái)說(shuō),最好找一個(gè)靠譜的師傅來(lái)指引起步。

首先,從上面說(shuō)的問(wèn)題出發(fā),新手是不可能有答案的。即便在論壇上提問(wèn),用什么語(yǔ)言,什么建議都會(huì)有。你可要知道程序員最喜歡討論什么語(yǔ)言,什么框架好。所以有個(gè)笑話(huà)說(shuō),你想讓程序員們吵起來(lái),只要在里面喊一句,XXX 語(yǔ)言是最好的語(yǔ)言就可以了。

其次,開(kāi)始學(xué)習(xí)編程開(kāi)發(fā)遇到的最大的障礙是搭建環(huán)境。很多新手都是在最開(kāi)始的時(shí)候就遇到各種環(huán)境問(wèn)題,導(dǎo)致完全無(wú)法跟教程練手,挫敗感太強(qiáng)而放棄。所以,如果有人在身邊指導(dǎo),至少先把搭建環(huán)境這關(guān)過(guò)了,后面會(huì)順暢很多。

再說(shuō),一個(gè)有經(jīng)驗(yàn)的靠譜的老師,還可以告訴你學(xué)習(xí)使用某一種語(yǔ)言的最少必要知識(shí),不至于讓你迷失在太多技術(shù)細(xì)節(jié)中,真的可以事半功倍。

如果確實(shí)身邊和網(wǎng)絡(luò)上找不到這樣的朋友,老師,又不舍得花錢(qián)去培訓(xùn)班,要如何降低遇到障礙的可能性和提高問(wèn)題解決效率呢?最好選擇 Mac 來(lái)開(kāi)發(fā),學(xué)會(huì)如何使用 Google和正確提問(wèn)。

最后,無(wú)論有沒(méi)有老師,學(xué)編程最重要就是:模仿,模仿,模仿;練習(xí),練習(xí),練習(xí)


    ▲


作者簡(jiǎn)介:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    99国产精品国产精品九九| 国产午夜在线精品视频| 国产亚洲午夜高清国产拍精品| 国产精品熟女乱色一区二区| 国产精品免费视频专区| 日韩在线中文字幕不卡| 国产主播精品福利午夜二区| 欧美黑人巨大一区二区三区| 一区二区三区人妻在线| 亚洲精品美女三级完整版视频| 国产一级特黄在线观看| 国产精品欧美一区二区三区不卡| 91人妻人澡人人爽人人精品| 91亚洲熟女少妇在线观看| 国产欧美韩日一区二区三区| 久久黄片免费播放大全| 不卡视频在线一区二区三区| 亚洲成人久久精品国产| 精品丝袜一区二区三区性色| 日本少妇中文字幕不卡视频| 日本少妇aa特黄大片| 欧美做爰猛烈叫床大尺度| 日韩精品一区二区不卡| 欧美野外在线刺激在线观看| 国产成人亚洲综合色就色| 五月情婷婷综合激情综合狠狠 | 麻豆亚州无矿码专区视频| 大香蕉久久精品一区二区字幕| 亚洲精品福利视频你懂的| 日韩精品一区二区三区四区| 嫩呦国产一区二区三区av| 91麻豆精品欧美一区| 亚洲精品中文字幕熟女| 丰满的人妻一区二区三区| 亚洲欧洲在线一区二区三区| 色婷婷日本视频在线观看| 99久久精品国产麻豆| 国产精品熟女乱色一区二区| 一二区中文字幕在线观看| 午夜视频在线观看日韩| 色哟哟在线免费一区二区三区|