您的位置:首頁>科技>正文

非科班如何學程式設計

最近幾年, 程式師這個職業逐漸升溫, 學程式設計的人也越來越多, 國外有個非盈利的開源社區, 叫做FreeCodeCamp, 目的是教人零基礎學程式設計,

現在已經彙聚了26萬之多的人數。

我在深圳南山科技園上班, 南山這邊的寫字樓也是越修越多, 從科技園北區一路向南走, 你會發現又多了好幾個片區, 在建的和新建的都有, 例如深圳灣片區, 軟體基地片區等, 我總在想, 修這麼多寫字樓, 有那麼多科技公司嗎?有那麼多程式師嗎?也許現在沒有, 等到修好就有了, 這代表了這個行業的發展速度。

隨著人工智慧, 虛擬實境等技術的爆發, 電腦領域迎來了新一輪的技術革命, 因為世界在發展, 電腦處理的事情也會越來越複雜, 電腦語言的發展趨勢必定會越來越簡單, 不然開發的人力成本會越來越高, 於是學習電腦的門檻會越來越低, 結果是, 我們的下一代人人都會使用電腦程式設計,

程式設計變成了生存的基本技能, 所以:未來的文盲不是不識字的人, 而是不會程式設計的人。

作為一名程式師, 我對這個職業的自豪感在近幾年裡不斷提升, 記得剛畢業那會, 我經常會被金融行業的同學“鄙視”, 因為待遇差距大, 為了取得心裡平衡, 我只能用行業差距來安慰自己。 而幾年後, 互聯網行業已然沖到了行業榜的前列。 曾經經常聽到一句話:程式師吃的是青春飯, 如果30歲前不轉行或做管理, 那麼一定是死路一條, 現在幾乎沒聽過這樣的言論了。 相反聽得最多的就是:嫁人就嫁IT男。

說了這麼多, 你一定對程式設計產生了好奇, 也許你會問:非科班出生, 如何才能學會程式設計?學程式設計難嗎?這個問題的答案和你的目標有關, 假如你想成為一名程式師, 我會告訴你很難, 例如在FreeCodeCamp上學完所有課程, 需要2000個小時, 學完後你就有能力找到一份相關工作, 而堅持2000小時對於一個人來說並不容易——假設你每天花2小時, 需要3年。

其實程式設計和成為一名程式師是兩碼事,

就像用英語對話和成為一名英語翻譯者是兩回事一樣, 衡量程式師的標準往往更多, 要求更嚴格, 花的時間自然也更多, 很多人在這條路上走得很辛苦, 原因在於知識點多, 無法看到全域, 很容易就陷入其中而無法自拔, 或者即便看到了全域, 也要一項項的學完, 即使學完了, 還是不知道如何完整的完成一個作品。 拿前端工程師舉個例子, 一個合格的前端工程師, 要具備OS, HTML, CSS, Javascript, JQuery, Ajax, 資料庫, 良好的編碼風格, HTTP, Websocket, 網路安全, git等眾多技能, 從一個初學者的角度來看, 光看完這些專有名詞就已經嚇尿了, 所以, 花2000小時來成為一個程式師, 是必要的。

程式師的門檻高, 一般人不一定要以此為目標, 就像我寫作, 也並不代表我要改行成為一個作家,

而想學會程式設計, 卻是一件很容易的事情, 我理解的程式設計是具備程式設計能力及擁有電腦思維, 換句話說, 就是利用電腦提升你的工作效率, 減少重複勞動, 從而把更多的時間用在創造上面。 當然, 如果你具備了程式設計能力, 同時有意成為程式師, 從這個起點上過度會簡單得多。

我認為具備程式設計能力很簡單, 是因為我們幾乎每天都在使用電腦, 使用電腦和會程式設計之間其實只隔了一張紙, 那張紙, 就是圖形介面, 你覺得難, 是因為我們被圖形介面馴化了, 在羅振宇和羅永浩的《長談》節目中, 他們談到對馴化的理解

有一種人30多就開始當領導, 帶team, 這種人就是被公司馴化的人, 就是雖然看著我們在合作,但是自己的能力就逐漸沒有了。時間一長,你會喪失基本的生存能力。好比你有了秘書久了,什麼訂酒店之類的事情自己反而不會處理。窮查理寶典的查理芒格,他一個多麼富有的人,出門還做經濟艙。李笑來就說自己最怕被金錢馴化,無論富有還是貧窮,我們都值得警惕這一點。職場的人到今天為止最怕的就是馴化。

圖形介面讓我們使用電腦的方式更為傻瓜化,人們會認為日常使用的電腦軟體(例如Word)和程式設計是兩碼事,而在我看來,他們的本質是一致的,都是利用電腦幫你做事,抽象點來說,就是你給予它一定的輸入,它會回饋給你相應的輸出。具體一點,面對圖形介面的馴化,我們應該怎麼做呢?

除了日常使用的軟體外,拋棄圖形介面,思考下一步操作,用命令列該怎麼完成。

這裡命令列相對於圖形介面來說,是一個人機字元交互介面,在不同的作業系統上,命令列程式也有區別,在macOS上,我們一般使用zsh,Linux上使用Bash,而Windows上則使用PowerShell或sygwin,在你的電腦上安裝對應的命令列工具,就可以開始了。

作業系統中的一切都被抽象為檔,檔是用一種樹形結構來組織的,而我們日常的操作基本上也可以看做是對檔的操作,所以,拋開圖形介面,你可能首先要弄清楚:

如何定位到一個目的檔案

如何執行一個可執行檔,同時讓另一個檔作為這個程式的輸入,例如用MS Word打開一個word檔

如何更新一個可執行檔

安裝一個程式,電腦裡多了哪些檔

如何刪除一個檔

如何搜索電腦裡有沒有一個檔

如何找出資料夾下含有“TODO”字樣的檔

……

不用圖形介面後,你可能會遇到很多這樣的操作,千萬不要想一次性學玩,最好的辦法是,遇到一個學一個,記在本子上,下次用的時候,直接用,忘記了再查一下你的本子。

那麼問題來了,你可能會問:這不是更麻煩了嗎,我在圖形介面操作一個檔可能需要1秒中,現在用命令列,至少要10分鐘……不要小看這些命令操作,它們除了可以單獨使用,還可以組合起來使用,即把前面一個命令的輸出,作為下一個命令的輸入,下面這個例子可以很好的進行說明:

某一個資料夾中有各種各樣的檔,除了檔,還有子資料夾,現在你想把資料夾下所有.torrent種子檔打包到一個壓縮包中

如果你用圖形操作,你的步驟是:

挨個打開每個資料夾,把.torrent檔複製到另一個空資料夾中

將新資料夾壓縮

而命令列只需要一行命令:

僅僅一個命令的組合,就可以產生驚人的變化,前提是你要知道基本的命令怎麼寫。那麼你又可能會問了:我想學的是程式設計,這些命令和程式有什麼關係?回答這個問題之前,我們要先認識一下什麼是程式。剛才說了程式都有一個共同的特徵:給它一些輸入,它便會對這些輸入進行處理,最後產生一些輸出。下面是重點,基本上所有的程式語言都提供三種語句:

順序

分支

迴圈

利用這三個語句可以完成一切流程,也就是說,所有的程式都是由這三種語句組成的,它們形成了程式的邏輯,可以把順序、分支、迴圈理解為一種控制命令。瞭解了基本命令和控制命令後,把它們按照邏輯組織起來,就是你的程式了,你看簡單吧。可能你還會問,我這學的是什麼程式設計語言?在電腦中,這是最基本的程式設計,我們叫它Shell程式設計。

創建一個臨時目錄,例如uploads_temp

將這些圖片等比例壓縮成寬度為400圖元的圖片

轉換後的圖片檔放在uploads_temp下

將處理後的圖片上傳到七牛雲存儲(可選)

回之前的目錄

最終程式如下,我用數位標記了以上每一步,對應的代碼是怎樣的

到這一步,你就是一個擁有程式設計能力的人了,後續,如果你想繼續深入,也只需要你具備一個特質即可,那就是不斷探索——例如,如果有一天你寫的小程式足夠多時,你可能需要做一個介面,或頁面來管理你的程式,那時,你就真正從命令列跨越到了圖形介面

就是雖然看著我們在合作,但是自己的能力就逐漸沒有了。時間一長,你會喪失基本的生存能力。好比你有了秘書久了,什麼訂酒店之類的事情自己反而不會處理。窮查理寶典的查理芒格,他一個多麼富有的人,出門還做經濟艙。李笑來就說自己最怕被金錢馴化,無論富有還是貧窮,我們都值得警惕這一點。職場的人到今天為止最怕的就是馴化。

圖形介面讓我們使用電腦的方式更為傻瓜化,人們會認為日常使用的電腦軟體(例如Word)和程式設計是兩碼事,而在我看來,他們的本質是一致的,都是利用電腦幫你做事,抽象點來說,就是你給予它一定的輸入,它會回饋給你相應的輸出。具體一點,面對圖形介面的馴化,我們應該怎麼做呢?

除了日常使用的軟體外,拋棄圖形介面,思考下一步操作,用命令列該怎麼完成。

這裡命令列相對於圖形介面來說,是一個人機字元交互介面,在不同的作業系統上,命令列程式也有區別,在macOS上,我們一般使用zsh,Linux上使用Bash,而Windows上則使用PowerShell或sygwin,在你的電腦上安裝對應的命令列工具,就可以開始了。

作業系統中的一切都被抽象為檔,檔是用一種樹形結構來組織的,而我們日常的操作基本上也可以看做是對檔的操作,所以,拋開圖形介面,你可能首先要弄清楚:

如何定位到一個目的檔案

如何執行一個可執行檔,同時讓另一個檔作為這個程式的輸入,例如用MS Word打開一個word檔

如何更新一個可執行檔

安裝一個程式,電腦裡多了哪些檔

如何刪除一個檔

如何搜索電腦裡有沒有一個檔

如何找出資料夾下含有“TODO”字樣的檔

……

不用圖形介面後,你可能會遇到很多這樣的操作,千萬不要想一次性學玩,最好的辦法是,遇到一個學一個,記在本子上,下次用的時候,直接用,忘記了再查一下你的本子。

那麼問題來了,你可能會問:這不是更麻煩了嗎,我在圖形介面操作一個檔可能需要1秒中,現在用命令列,至少要10分鐘……不要小看這些命令操作,它們除了可以單獨使用,還可以組合起來使用,即把前面一個命令的輸出,作為下一個命令的輸入,下面這個例子可以很好的進行說明:

某一個資料夾中有各種各樣的檔,除了檔,還有子資料夾,現在你想把資料夾下所有.torrent種子檔打包到一個壓縮包中

如果你用圖形操作,你的步驟是:

挨個打開每個資料夾,把.torrent檔複製到另一個空資料夾中

將新資料夾壓縮

而命令列只需要一行命令:

僅僅一個命令的組合,就可以產生驚人的變化,前提是你要知道基本的命令怎麼寫。那麼你又可能會問了:我想學的是程式設計,這些命令和程式有什麼關係?回答這個問題之前,我們要先認識一下什麼是程式。剛才說了程式都有一個共同的特徵:給它一些輸入,它便會對這些輸入進行處理,最後產生一些輸出。下面是重點,基本上所有的程式語言都提供三種語句:

順序

分支

迴圈

利用這三個語句可以完成一切流程,也就是說,所有的程式都是由這三種語句組成的,它們形成了程式的邏輯,可以把順序、分支、迴圈理解為一種控制命令。瞭解了基本命令和控制命令後,把它們按照邏輯組織起來,就是你的程式了,你看簡單吧。可能你還會問,我這學的是什麼程式設計語言?在電腦中,這是最基本的程式設計,我們叫它Shell程式設計。

創建一個臨時目錄,例如uploads_temp

將這些圖片等比例壓縮成寬度為400圖元的圖片

轉換後的圖片檔放在uploads_temp下

將處理後的圖片上傳到七牛雲存儲(可選)

回之前的目錄

最終程式如下,我用數位標記了以上每一步,對應的代碼是怎樣的

到這一步,你就是一個擁有程式設計能力的人了,後續,如果你想繼續深入,也只需要你具備一個特質即可,那就是不斷探索——例如,如果有一天你寫的小程式足夠多時,你可能需要做一個介面,或頁面來管理你的程式,那時,你就真正從命令列跨越到了圖形介面

Next Article
喜欢就按个赞吧!!!
点击关闭提示