最近幾年, 程式師這個職業逐漸升溫, 學程式設計的人也越來越多, 國外有個非盈利的開源社區, 叫做FreeCodeCamp, 目的是教人零基礎學程式設計,
我在深圳南山科技園上班, 南山這邊的寫字樓也是越修越多, 從科技園北區一路向南走, 你會發現又多了好幾個片區, 在建的和新建的都有, 例如深圳灣片區, 軟體基地片區等, 我總在想, 修這麼多寫字樓, 有那麼多科技公司嗎?有那麼多程式師嗎?也許現在沒有, 等到修好就有了, 這代表了這個行業的發展速度。
隨著人工智慧, 虛擬實境等技術的爆發, 電腦領域迎來了新一輪的技術革命, 因為世界在發展, 電腦處理的事情也會越來越複雜, 電腦語言的發展趨勢必定會越來越簡單, 不然開發的人力成本會越來越高, 於是學習電腦的門檻會越來越低, 結果是, 我們的下一代人人都會使用電腦程式設計,
作為一名程式師, 我對這個職業的自豪感在近幾年裡不斷提升, 記得剛畢業那會, 我經常會被金融行業的同學“鄙視”, 因為待遇差距大, 為了取得心裡平衡, 我只能用行業差距來安慰自己。 而幾年後, 互聯網行業已然沖到了行業榜的前列。 曾經經常聽到一句話:程式師吃的是青春飯, 如果30歲前不轉行或做管理, 那麼一定是死路一條, 現在幾乎沒聽過這樣的言論了。 相反聽得最多的就是:嫁人就嫁IT男。
說了這麼多, 你一定對程式設計產生了好奇, 也許你會問:非科班出生, 如何才能學會程式設計?學程式設計難嗎?這個問題的答案和你的目標有關, 假如你想成為一名程式師, 我會告訴你很難, 例如在FreeCodeCamp上學完所有課程, 需要2000個小時, 學完後你就有能力找到一份相關工作, 而堅持2000小時對於一個人來說並不容易——假設你每天花2小時, 需要3年。
其實程式設計和成為一名程式師是兩碼事,
程式師的門檻高, 一般人不一定要以此為目標, 就像我寫作, 也並不代表我要改行成為一個作家,
我認為具備程式設計能力很簡單, 是因為我們幾乎每天都在使用電腦, 使用電腦和會程式設計之間其實只隔了一張紙, 那張紙, 就是圖形介面, 你覺得難, 是因為我們被圖形介面馴化了, 在羅振宇和羅永浩的《長談》節目中, 他們談到對馴化的理解
有一種人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下
將處理後的圖片上傳到七牛雲存儲(可選)
回之前的目錄
最終程式如下,我用數位標記了以上每一步,對應的代碼是怎樣的
到這一步,你就是一個擁有程式設計能力的人了,後續,如果你想繼續深入,也只需要你具備一個特質即可,那就是不斷探索——例如,如果有一天你寫的小程式足夠多時,你可能需要做一個介面,或頁面來管理你的程式,那時,你就真正從命令列跨越到了圖形介面