談寫指令碼、寫程式碼和程式設計三者的區別
就像一些人在論壇指出的那樣,三者之間的區別有時比較模糊,因為這三種說法有時候可以互相轉換。我可以同時在做寫指令碼,寫程式碼和程式設計這三件事。如何定義你是在寫指令碼,還是寫程式碼或者是寫程式,常常取決於你在開發什麼。
寫指令碼
傳統意義上的寫指令碼常常令人聯想到那些“不完整的”或者“受限制的”計算機語言,這些語言通常用來把一些不同的應用“粘合”到一起,或者只是寫起來快速並且隨意、能讓某些實際中的任務自動化執行的簡單的計算機語言。典型的例子有JavaScript,ActionScript, 和Shell指令碼。
是的,也許10年前JavaScript就已經被看成是一種“受限制的”語言,那時候它通常被用於快速的格式校驗或者給瀏覽器的文件內容加一些滾動效果,然而今天這些都已經是過去式了。但如今還有一些人認為JavaScript是一種“受限制的”語言,對於JavaScript的這種誤解常見於那些並不理解它或者只用過它來使顯示內容滾動起來的開發人員,還有一個原因是“JavaScrip”t中的後一個單詞是“Script(指令碼)”。關掉你瀏覽器裡的JavaScript,然後試試使用Gmail,Facebook或者Google+。你會發現JavaScript已經不再是一種“不完整的”或者“受限制的”語言,實際上如果沒有JavaScript,你的那些網頁應用反而會看起來是“不完整的”,不完整的就像1995年時候的網頁。如今,開發一款基於JavaScript的應用要求你像用C或者Java開發應用時那樣思考和設計,你需要使用那些應用於後臺的設計模式。說到後臺,現在你甚至可以讓JavaScript執行在伺服器端,所以可以只用JavaScript就寫出一個山寨的Gmail。
ActionScript也是這樣。開始時ActionScript作為一種用來寫Flash動畫、遊戲以及應用的指令碼語言而出現。大約10到12年前,我還把Flash和ActionScript混為一談。那時它執行不同的幀,並按照一幀一幀的原理來寫遊戲或者動畫。今天,ActionScript 3.0實際上已經不再是指令碼語言了,它和那些所謂完整的計算機語言是一樣的。它能被編譯並且執行在ActionScript虛擬機器上,完全就像Java程式碼在Java虛擬機器上編譯及執行一樣。在我看來,作為一種計算機語言,ActionScript和Java相比並沒有欠缺什麼。如果你還是認為ActionScript是一種“不完整的”或者“受限制的“語言,那麼請瀏覽Flex.orgShowcase,然後清理掉你那些陳舊的觀點,以便你能繼續閱讀這篇文章。
另一種關於寫指令碼的錯誤定義是,寫指令碼就是寫一些讓其他程式解析的指令,不過所謂程式碼其實都是這樣的,程式碼都是些讓其他東西執行的指令。那麼用於資料庫查詢的SQL指令碼呢?它也是一種用來寫一些告知諸如MySql或者Oracle等程式如何獲取資料的指令的指令碼語言。但是我們有Oracle指令碼員的說法嗎?我們只會說SQL程式設計師。並且沒有SQL程式設計師會說自己正在寫一個找X和Y的交點然後把它和B相連的指令碼。
那麼,到底什麼是寫指令碼?我認為寫指令碼就是寫一個或多個工具使得一個或者一系列任務自動化,而這和使用什麼語言來寫無關。我有時候很懶,如果可以的話我想要寫一個自動做早餐的指令碼。不必只侷限於命令列。用你覺得最合適的方法來嘗試實現你想要的自動化。有時候我用shell指令碼,有時可能是一個Excel指令碼,可能是PHP,可以是Java,甚至可能是C,無論什麼都可以。
寫程式碼
來談談寫程式碼吧。我本人並不喜歡寫程式碼。但有時候我也是一個碼農,這是工作的一部分。當我作為一名碼農時,我就像這個傢伙一樣:
所以,所謂碼農就是把一種語言編碼成另一種語言的人。可以是把英語譯成摩斯電碼,也可以是把英語譯成Java程式碼。當你寫程式碼時,你就是在把需求翻譯成你的應用所要執行的那個環境(伺服器,PC,iPhone,瀏覽器等等)能夠完全看懂的語言,這也就是所謂“程式碼猴子”的出處和我不喜歡寫程式碼的原因。有時候你要做的只是搞清楚你要做的是什麼並把它變成程式碼。
程式設計
給任何機器或者應用程式設計就是給它一套可以它可以執行的指令集。比如你最愛的咖啡機已經被編好程式使它可以在早晨7點15分準備好咖啡。比如你把自己喜歡的頻道都編入到你車裡的收音機裡。或者比如你告訴你的瀏覽器怎樣在網頁上顯示一個彈跳球的動態圖。
那麼,這篇文章的結論是什麼呢?結論就是寫指令碼、寫程式碼、程式設計都是一樣的,抱歉本文對此給不出什麼巧妙的解釋。歸根結底,無論你是在寫指令碼,寫程式碼或者是程式設計,你所做的都是給某個環境,像是個人電腦、機器人、或者瀏覽器,提供一套指令集讓它完成它需要完成的任務。這和高階語言還是低階語言無關,和語言是以”Script”結尾還是以“++”結尾無關,和執行在瀏覽器還是主機上無關,和被賣個無數人或者只有你一個人用無關。
我建議你不要用寫指令碼、寫程式碼或是程式設計來定義自己在做什麼。你是一個做軟體的工匠,用最適合於你所面臨問題的技術去設計並找到解決方案從而解決你需要解決的問題,這樣就可以了。