Lesson 4. 怎麼會有這麼多程式語言?
程式語言基礎與簡介
去去武器走!(武器就飛走了)
疾疾,護法現身!(護法就現身了)
抓取 後台數據
算出 每日用戶數量 和 留存率
輸出 圖表
抓取 google搜尋"遊戲酒吧"的結果
分析 總共有幾頁
分析 各個詞出現的次數
算出 每個詞的頻率
輸出 圓餅圖
建立 網頁
功能 會員, 文章, 資料搜集, 分析
名稱 我的部落格
建立
很底層的語言,一個指令只做一兩件事情
start:
mov AL, 5 //把5移到AL裡面去
mov CL, 6 //把6移到CL裡面去
add AL, CL //AL = AL+CL
cmp AL, 100 //拿AL跟100比較
jlt start //jlt = jump if less than, 如果剛剛比較的結果AL<100,就跳到start去
end //結束
開始:
把 5 移到 AL 裡面
把 6 移到 CL 裡面
把 AL 跟 CL 相加,存回AL
把 AL 跟 100 拿來比較
如果 比較的結果是小於的話,跳到標籤"開始"
結束
AL跟CL是"暫存器"的名稱,可以想像成是有一塊記憶體
其實就是一個放資料的地方
讓你可以把資料儲存在那邊
叫做高階語言是相對於比較底層的組合語言
大家都看到了,組合語言一行指令做的事情很少
而且可讀性很差,十分難維護,因為我們需要更方便的語言
大家常聽到的C++, Java都是屬於高階語言
int a = 5;
int b = 6;
while(a<100){
a+=b;
}
start:
mov AL, 5
mov CL, 6
add AL, CL
cmp AL, 100
jlt start
end
右邊的程式碼跟左邊的比起來
是不是好懂多了呢?而且比較容易一眼看出在幹嘛
其實高階語言的那些程式碼,都會經過一道手續叫做編譯
編譯是什麼?編譯就是把高階語言的程式碼,變成組合語言
沒錯,所以底層還是組合語言
只是用一些語法包裝起來,讓程式的可讀性變得比較高
Reverse engineering
剛剛說過,你可以把程式碼編譯之後變成組合語言
接著再產生執行黨來執行程式
相反的,也可以把程式逆向回去,變成組合語言的程式碼
這就是逆向工程!
應用比較多的地方,就是軟體破解
if(已經註冊過){
給予完整版權限
}else{
跳出註冊視窗
}
cmp AX, 1 //拿AX(是否註冊過的結果)跟1比較
jeq vip //如果相等,代表註冊過,跳去vip的block
jmp askRegister //不相等,跳到要求註冊的區塊
cmp AX, 1 //拿AX(是否註冊過的結果)跟1比較
jeq vip //如果相等,代表註冊過,跳去vip的block
jmp askRegister //不相等,跳到要求註冊的區塊
cmp AX, 1 //拿AX(是否註冊過的結果)跟1比較
jnq vip //如果不相等,跳去vip的block
jmp askRegister
以上只是概念性的說法,算是破解的其中一種方法
事實上,事情並沒有那麼簡單(但的確有些就是這麼簡單)
你得要先從茫茫的程式碼海裡面找到關鍵的這一段
並且這個程式要真的這樣寫才行
但通常是不會啦,還會再多做更多層的保護
避免軟體被破解
歷史悠久的程式語言,相信資工系學生一定不陌生
有人稱之為「中階語言」,因為比起其他高階語言更接近底層
越接近底層的語言越難,但也可以做越多事情
C通常應用在一些硬體或韌體的開發上面
int main(){
for(int i=1;i<=10;i++){
printf("hello world\n");
}
}
多了++就知道一定比較新比較厲害
跟C的差別在於語法以及多了「物件導向」這個概念
這概念很難解釋所以我就不講了,有興趣可以自行估狗
C++通常拿來寫一些桌面應用程式
int main(){
for(int i=1;i<=10;i++){
cout << "hello world" << endl;
}
}
Java厲害之處在於跨平台,因為它編譯出來的不是組合語言
而是一種叫做byte code的東西,可以想成是java版的組語
然後會跑在java的虛擬機上面,所以只要電腦有裝java虛擬機
就一定可以跑java的code
import java.util.*;
import java.lang.*;
import java.io.*;
class hello{
public static void main (String[] args){
System.out.println("hello world");
}
}
跟Java沒什麼關係,而且差很多,不要搞混了
原本只能用在瀏覽器,所以不被重視
但近幾年因為Google開發的v8引擎太厲害
所以可以在瀏覽器外執行,稱之為node.js,這一兩年很夯
for(var i=1;i<=10;i++{
alert("hello world!");
}
英文中是紅寶石的意思,發明者是一個日本人
特色是有很多特殊的語法,可以很直覺,簡便的寫程式碼
跟寫網頁的框架Rails搭配可以說是威力無窮
近幾年來Ruby on Rails是最夯的快速網頁開發首選
10.times{
puts "hello"
}
顧名思義,就是一個會讓你的頭腦爆炸的程式語言
有一堆奇怪的符號,分別代表著不同指令
可以做的事情很有限,畢竟只是個為了好玩的語言
++++++++[>++++[>++>+++>+++>+<<<<-]>+
>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-
.<.+++.------.--------.>>+.>++.
同上,一個為了好玩的程式語言
指令是空白、tab鍵跟換行
所以程式碼你什麼都看不到
恭喜你現在成為一個空有理論(而且也不是很扎實)
而完全沒有實作基礎的人了!
這一堂課的目的在於讓大家初步認識什麼是程式語言
以及介紹一些常見或是好玩的程式語言
如果有更深的興趣,可以自己上網開始找資料
或是參加一些線上課程,開始自己的程式設計之路