中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
編程是什么?我要學嗎?
     
  閱讀時間
  5 分鐘

    ▲


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

什么是編程

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

Algorithms + Data Structures = Programs

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

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

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

  • 地鐵站X光機上的一件件行李

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

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

疊在一起的箱子,最開始放置的肯定是最下面的那個,然后一箱一箱往上壘。要拿出來的時候,當然是先拿最上面的,最下面的最后才拿。這種結(jié)構(gòu)就是棧。棧的特點是先進后出。

  • 電腦的文件夾

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

什么是算法

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

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

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

在電腦里是怎樣的?

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

 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)在我要開始取的是第1粒  var candyPicked = null // 我取的糖果要放這,但現(xiàn)在還不存在  while (currentCandyLocation <= 5)="" {="" 當我要取的糖果還不是第5粒的話,重復下面的事情=""  =""  candypicked="candy.shift()" 從最前面取1粒=""  =""  currentcandylocation="currentCandyLocation" +="" 1="" 挪到下一個位置=""  }=""  showmethecandy(candypicked)="" 看看拿到的糖果是什么字母=""  //="" -=""> 'E'  // 做成特定的,可按位置/編號取的結(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)來存放。不同的處理邏輯/算法,效率不同。所以,從這種角度來看,學習編程和程序設(shè)計,是學會抽象,學會如何把現(xiàn)實問題,在計算機里面表現(xiàn)出來。還有數(shù)據(jù)處理。

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

應該不應該學習編程

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

  1. 你覺得通過指尖敲擊的指令,就能創(chuàng)造無限可能,這實在是太酷了。  —  你絕對應該學習。

  2. 你目前遇到些繁瑣而重復的事情,想看一下計算機能否代勞。  —  你應該嘗試。

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

  4. 你想學到一種編程語言讓你當金飯碗用,拿高工資。  —  早早死了心算了。

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

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

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.

怎么開始?

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

從問題出發(fā)

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

比如說,如果你要處理 Excel,做各式各樣的報表?;蛘咭獜墓潭ǜ袷降?Excel 里面抽取數(shù)據(jù)。那你可能只要學習 VBA 就可以了,或者用 JAVA。因為 Excel 這種企業(yè)級的東西,你用回微軟自家的語言會方便些。企業(yè)級的 JAVA 語言也是不錯的選擇,因為已經(jīng)有很多寫好的工具,你學會拿來用就可以了。但是如果你非要選 Node.js 和 JavaScript 來處理,就真有點作死。

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

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

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

如何起步

現(xiàn)在互聯(lián)網(wǎng)如此發(fā)達,書,視頻,在線教育和練習編程開發(fā)的資源都相當?shù)枚啵瑢τ谝粋€稍微有點編程經(jīng)驗的人來說。自學應該完全不是問題,不愁沒有資源。但是,對于一個完全是自學起步,沒有任何編程背景的人來說,最好找一個靠譜的師傅來指引起步

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

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

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

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

最后,無論有沒有老師,學編程最重要就是:模仿,模仿,模仿;練習,練習,練習。


    ▲


作者簡介:

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
單片機C語言編程應注意的若干問題
小學生開始學Python,最接近AI的編程語言:安利一波Python書單
【免費贈書】2018年最新Python書單
抽獎 | 精選好書15本,愛學習的人都有好運
自學的c語言有完整版的嗎?
C語言篇····怎么學習C程序設(shè)計
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服