2012年4月9日 星期一

一個不會改變你思考方式的程式語言並不值得被學習

作者: SansWord (是妳) 看板: Soft_Job
標題: Re: [請益] 為什麼要有這麼多程式語言?
時間: Sun Apr  1 00:01:02 2012

※ 引述《northsoft (北方軟件)》之銘言:
: 如標題
: 我一直很好奇
: 為什麼有 PHP, Perl, Ruby 這麼多程式語言
: 如果Ruby是為了OO
: 為什麼不修訂PHP標準就好
: 又為什麼要有C, C++, Java, C#
: 如果說 Java是為了跨平台不用重編譯
: 那又為什麼Sun不做各平台的C++ compiler以及C++ run time environment就好
: 有了C++, 又何必保留C的存在? 重新定義C的標準不就好了, 何必要共存?
: 有沒有人可以分享一下這些神秘的歷史阿
引用Alan Perlis 的名言:

A programming language that doesn't change the way you think is not
worth learning.

一個不會改變你思考方式的程式語言並不值得被學習。


這麼多程式語言,反應了這個語言發明者對於 "如何解決問題" 的思考方式。


在此介紹幾種不同語言類型:
但是小弟才疏學淺,這樣的介紹稱不上是 "歷史", 至少時間序會很混亂。
我只就我所認知的分類做些介紹,希望能引出真正的大物來好好幫我們上一堂
歷史課。


A. 依解題邏輯分類:

1. Functional Language
   代表性語言:Haskell, OCaml, Standard ML, Scheme
   此類語言認為 [1;33;40m解決問題,就是打造一個函式。
   給予一個輸入,便依照問題類型給予適當的輸出。

   想當然爾,發明者跟數學家脫不了干係。

   此類語言一開始最大的特色是沒有變數與Assignment
   但是後來為了使用方便還是會有些妥協。

   但是有趣的是,在沒有Assignment的情況下,仍然能利用語言特性
   打造類似變數功能的Environment.  也因此能更嚴密的思考在語言執行中
   底層需要處理哪些事情。

   小弟大學時就用過Haskell當成Compiler刻過Mini-C Compiler,並且實現了Pointer 與
   Object-Orineted的相關功能。

   只能說,自斷雙手,才會發現其他東西也能長出手來呀。


2. Processual Language
   代表性語言:Machine Code, Assembly Language, C,
   我認定這類語言是從Machine Code -> Assembly Language -> High Class Language
   一路發展下來。

   一開始的電子計算想的是一套程序。
   而自從圖靈機(Turing Machine)的計算模型被奠定後。
   更可以有數學根據的說明一套計算流程,或著電腦所需要的操作其實只要有限幾個。

   因此, [1;33;40m解覺問題,就是安排一套運作流程。
   藉著按照特定順序給予指令,電腦執行後,便能解決問題。

   而這樣的語言後來也衍生了Object-Oriented, Aspect-Oriented, Feature-Oriented
   等思考面向,但是在我看來,都脫不了一開始 "安排一套運作流程" 的範疇。
   只是運作的流程從一開始操作記憶體位置,到操作變數、物件、
   甚至能細分流程的各面向,或個功能。實際上我覺得都還是類似的。

可是,如果以這樣的分類方式,大概無法說明原Po一開始詢問的各種語言

照原Po所提的幾種語言,我想提供另外一種分類的思考

1. 按照問題領域,也就是所謂的Domain-Specific Language.
   為了解決各樣問題,雖然所有問題都可以用一套語言來寫啦,也就是說
   其實我們的鍵盤只需要 0, 1兩個數字。
http://secretgeek.net/image/real-programmers-code-in-binary.jpg

   可是軟體業也是生產業,況且輪子這玩意兒造一次就夠了。
   針對不同領域的問題,自然使用特定語言才能更有效率的描述該問題。

   你的確可以用C, 不使用HTML來輸出類似網頁的東西。
   也可以不要用SQL, 用不同方式管理,操作資料庫。

   可是針對特定領域的語言總是能比較有效的解決該類問題。這類語言很多很多。

2. 為了特定原因:
   為了跨平台,Java 發展出了Virtural Machine 與 ByteCode

   或著不想要Compile或著環境不合適而有了Scirpting Language (Javascript, Ruby)

   為了Javascript太難以掌握而出現功能,語法較限縮的CoffeeScript

   為了讓網頁的外觀與資料分離而出現的CSS,
   為了彌補CSS的不足而出現能有變數、函式的的SASS

   覺得Java 太囉嗦而出現的Ruby

   語言的發展仍然蓬勃的進行,每個語言的出生,有可能是為了$$$
   (我絕對不是說抄很大的C#)

   也可能是為了某語言真的出現了瓶頸。

   當年Assembly 出現的時候,人們說終於可以Automaticly Programming.
   因為不再需要記得每種CPU的goto是怎樣的0, 1 組合,
   而只要使用 "goto" 這四個字母, 你看,這是多麼精巧。

   語言只會繼續往上疊加,為了人們思考方式的進步而繼續為大家服務著。


http://www.bobcongdon.net/images/tower-of-babel.jpg



參考資料:

http://en.wikipedia.org/wiki/History_of_programming_languages




--
[1;35m回憶 [37m不會消失...只會被蓋在灰塵下...

              只要沒有 [36m風 [37m去吹動~~一切....就可以 [;32m默默淡忘...

所以....不要成為那 [31m傷人 [37m的 [32m風 [37m吧.... ^.^                

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.245.65.175
→ SansWord:有點傷眼,鞭小力一點。小弟還在國軍Online,變笨許多。   04/01 00:01
推 robinliao:推,很棒的觀點~                                       04/01 00:09
推 raincole:我覺得你講的層次有點高過原PO想問的東西了……           04/01 00:21
→ raincole:原PO基本上就是問「為什麼不能修訂原語言 而要發展新的」  04/01 00:22
→ SansWord:那我覺得就很簡單,legacy問題。                         04/01 00:22
→ SansWord:或著說我花時間修訂了,我幹嘛不順便改個我愛的名字...XD  04/01 00:23
→ raincole:是啊 我也覺得 其實很大一方面是人(職場政治?)的問題     04/01 00:24
→ raincole:語言間的內涵有大到像是函數式vs程序式的 少之又少 XD     04/01 00:25
→ SansWord:如果要談的是 "為什麼公司用這個語言" 這種問題           04/01 00:26
→ SansWord:我還沒有職場經驗,可是可以想像人和政治問題才是主因吧   04/01 00:27
→ SansWord:聽說銀行業至今都還是用Fortran呀。                      04/01 00:27
→ SansWord:也聽說一些公司一定要用微軟方案,是因為出錯有微軟頂     04/01 00:28
推 Blueshiva:其實我很好奇微軟頂過什麼了 XD                         04/01 01:24
推 northsoft:高手~~                                                04/01 11:51
→ SansWord:『連Windows都會當機了,這個小當一下很正常啦!』        04/01 12:04
推 guestone:推                                                     04/01 12:53

沒有留言:

張貼留言

您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.