前言
又是一年開學季,回想去年,還是新生的我踏入校園,雖然腳下的路走得踏實,但是夢想的路,卻很迷茫。
熱愛編程,卻不知道如何入門,這大概是很多新生共同的疑惑,距離開學已沒多久,我帶的學弟學妹一隻手已經數不過來,總是給他們講著一樣的東西,突然想到,為何不直接把經驗寫下來,讓他們慢慢看,既能培養他們的自學能力,也可省下我的一些時間
編程其實並不難,先理解下面幾組概念
概念
檔案、檔案夾、路徑
很多同學使用的電腦都使用的是Windows系統,檔案是依據尾碼名分類的,不同尾碼名代表不同類的檔案,雖然這樣理解沒有錯誤,但其實是條彎路,沒必要這麼麻煩,檔案就只簡單的分為兩類,文本(字元)檔案 和 二進位檔案,雖然文字檔也是二進位儲存的,但是它的內容是人類能看懂的字元,比如英文,中文,或者其他有意義的符號集,這些符號雖然人類能看懂,但是電腦不認識,電腦只知道電路的開閉,也就是1和0,二進位檔案就是人類看不懂但是電腦看得懂的檔案,也就是全是010101的檔案。
檔案夾顧名思義就是用來裝檔案或檔案夾的,這個很好理解。
路徑,檔案和檔案夾儲存在硬碟中,硬碟可以理解為一座大城市,檔案和檔案夾就視作房屋,想要在一座城裡找到具體的某一間房,當然要知道這間房的具體地址才行,不然一間一間地去排查嗎,這個地址,也就是所說的路徑,想要在硬碟中找到某個檔案或檔案夾,就需要知道它們的路徑才行。
編輯器、編譯器、程式設計語言
前面說了檔案分兩類,一類是人能看懂但是電腦不能看懂的,一類是電腦能看懂人看不懂的。寫代碼,其實就是在編輯一個文字檔,會使用到編輯器,我們寫的代碼當然能看懂是什麼意思,但是電腦不懂代碼是什麼意思,那麼想要讓電腦知道代碼具體的意思,就需要一個“中間人”來做翻譯,這個“中間人”就是編譯器
所以,編輯器是用來編輯文字檔的(也可以編輯二進位檔案)
編譯器是用來將文本形式的代碼轉換成對應的機器碼的(轉換過程就叫做編譯)
程式設計語言有很多種,如 C/C++、 Golang、 Java 等等,但實際都是殊途同歸,不同語言適用的情境不同罷了,不同語言之間的根本區別,其實就是對應的編譯器(靜態語言是編譯器,動態語言是解譯器)不同,所以想使用一門語言進行編程,只需要有語言對應的編譯器(解譯器)就行了
圖解
一些簡單的概念講了,可能會有些難以理解,下面就配合圖片來解釋,形象一點
尾碼名不同的三個檔案
但其實都是文字檔
二進位檔案
有意義的執行結果
編輯器開啟二進位檔案(為了方便,二進位碼通常用十六進位簡短表示)
檔案夾
檔案和檔案夾的區別,前面有d的表示directory,即檔案夾
路徑
使用編輯器編輯文字檔
甚至編輯二進位檔案(通常意義不大)
PS:好用的編輯器推薦,Sublime Text,VS Code,Atom,非圖形介面編輯器Vim(神器,強推)
編譯器一般都是命令列調用,圖示為調用gcc編譯C代碼
調用Go編譯器編譯Go代碼
PS:經常聽到的IDE這個詞,其實是 Integrated Development Environment(整合式開發環境)的縮寫,也就是 編輯器 + 編譯器 + 許多提高效率的小工具
完整流程圖示
Mac
先找到內建終端(任何shell應用都可以)並開啟
開啟後看到類似視窗
- 輸入
cd Desktop
並敲一下enter鍵
- 輸入
touch hello.c
並敲一下enter鍵,可以發現案頭上多了一個叫做test.c的檔案hello.c
- 使用文字編輯器開啟這個檔案當然,用其他的編輯器也都是可以的
- 在開啟的編輯視窗裡面輸入下面圖示內容注意其中的符號都是半形符號
- 輸入完成後,儲存(command + S),然後關閉視窗
- 在剛才的終端視窗中輸入
gcc -Wall hello.c -o hello
並敲一下enter鍵
可以發現案頭上出現了一個hello檔案,就是剛才用gcc編譯出來的可執行檔
- 再在終端中輸入
./hello
並敲一下斷行符號鍵
可以看到,終端中輸出了Hello World字樣
如果上面這些步驟都能夠理解,那麼相信你應該知道如何在Mac上進行簡單的編程了
Windows
- 安裝編譯器
- 建立檔案
- 編輯檔案
- 編譯產生可執行檔
- 測試回合
Linux
Linux 和 Mac 都是有強大的終端的,操作基本一致,參照Mac
程式設計語言特點介紹
學校開設
咋們系大一上學期開設C++的基本文法課程,只講 類和對象(不包括) 之前的內容,但推薦自己把全書看完,全書因為內容淺顯易懂,對自己要求高的同學,建議一周閱讀完,能力有限的同學,建議兩周讀完,讀完後進行自學(如果不知道讀完之後學什麼,可以聯絡你們的學長)。
大一下學期開設Java課程,講的內容也只是基礎文法。
學習完一門語言的基礎文法後推薦學習資料結構和演算法
C
- 接近底層,可以在裸機上跑
- 進階語言中效率最高,達到彙編的80%
- 面向過程
- 沒有GC,很多指標需要自己釋放,需要程式員很細心
C++
Java
- 完備的類庫
- 優秀的生態
- Apache、Alibaba 等優秀公司
- 使用者基數大
- JVM 各種配置
- 運行在虛擬機器上,跨平台
PHP
- 動態程式設計語言
- 編程範式難以統一
- 物件導向部分設計過於複雜
- 對 MySQL 支援好
- 解釋執行,需要單元測試覆蓋率保證
JavaScript
- 優秀的生態
- 全棧
- EggJS/Ant Design/Element UI
- 函數第一,相對不易理解
- 語言規範仍在快速發展
Python
Golang
- 靜態類型
- 編譯完成的二進位對系統零依賴
- 代碼規範統一
- 簡化到極致的併發模式,內建的 HTTP 支援
- 促進 Docker、雲的發展
- 面向介面
書籍推薦
程式設計語言入門
《The C Programming Language》
資料結構與演算法
《演算法導論》《大話資料結構》《演算法》(第四版)《演算法競賽入門》(第一二版)
電腦理論
《深入理解電腦系統》《電腦群組成原理》《編譯原理》
網路
《TCP/IP詳解》(卷一二)《電腦網路(自頂向下)》《圖解HTTP》
資料庫
《資料庫系統概論》
Linux
《鳥哥的Linux私房菜》《深入理解Linux核心》《Linux核心源碼解析》