針對的回答是這篇
https://www.zhihu.com/question/39932462/answer/141569893
簡單轉貼下回答內容:
題目:為什麼我們需要了解寫程式的歷史
----------------------------------------------------------------------------------------
作者:jing zhou
鏈接:https://www.zhihu.com/question/39932462/answer/141569893
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
歪個樓
我反而不是這麼認為它(指寫程式的歷史)沒有什麼用
而我是想的是把整個計算機的歷史
包括程式語言都我自己親自走一遍
這樣能更好的理解什麼
類似於為什麼會有 heap(堆積) stack(堆疊)啊 資料結構啊其他等等這些東西
因為我覺得我們現在學習都是從中間插入進去
學習很多東西不去看的話理解不深?或者不透徹?
所以我覺得 我像這樣去走一遍 從 01 開始
----------------------------------------------------------------------------------------
我的評論
**********************************************************************
其實不那麼做的原因很簡單
就像費曼對物理學的貢獻
也許比較大的反而是費曼物理學講義
費曼物理學講義把常人所學過的物理換個方式講
激發了後繼者的學習興趣
以直接貢獻上來說不如拿諾貝爾獎的原因
但間接貢獻上是蠻大的
(像讓大家再次認真關注下過往學過的東西可以怎麼解釋、看待)
可是呢...
寫程式這件事情原則上都是踩在前人的肩膀上
一個fopen()實作涉及許多非常細節的內容
如果有寫過COBOL的
它有些語法是跟硬碟有關的
有點忘記
好像有行是 數字 clusters
那些細節幾乎不是一個人所能處理得來的
所以我們很難實際把那些事情走過一次
(另一個原因是真的那麼走過的人很少
走過的人本身也可能不是很清楚自己具體是怎麼走過去的,難以傳承)
回到COBOL與硬碟有關的語法
那我們是怎麼處理那些語法的呢?
其實很簡單,抄過往經過時間驗證的程式寫法
然後不去改動它,也不去理解它就這樣繼續下去
畢竟若寫的程式是學習性質的
就算寫得很差也看不出問題在哪
這解決方法看起來很難令人接受
但很多時候我們確實是這樣在學東西的
什麼「知其然,更要知其所以然」的說法
通常是有人在某天突然頓悟了某個道理後
突然發現這道理可以解釋很多東西後再加上去的成果
(所以哪天那說法出問題後也不用太過訝異
因為先後順序、因果關係本來就不是那樣
就像是人類也是莫名其妙的生起火之後
過了很久才知道以前是怎麼生起火的
然後現在對於火究竟是什麼也沒有個很明確、公認的說法)
不過,還是很期待有人能用現在的機器或者是虛擬機
把C語言、LISP、Prolog等以組合語言實作一次並比較
(而不是用C語言去實作出LISP語法)
命令式語言跟函數式語言因為記憶體處理的方式聽說不太相同
同樣是遞迴,意義差很多
Haskell可以只寫[1,2..],就讓電腦無限顯示後面的數字
實際上你可以把那個寫法改成非常大的數字
也就是每次遞增一個long存不下的數字
還是照樣能無限顯示出下一個該出現的數字
唔,這是為什麼呢?
我很好奇!!
**********************************************************************
(知乎好像沒辦法輕鬆找出一個知乎用戶的評論
我猜測是數據量的困擾
所以特別寫在這邊
而且評論的存在也相對不安全
(回答通常只會被修改、摺疊,但評論很常被刪除)
雖然我覺得有時知乎很多亮點是在回答的評論中
像以前看到的
生物學家 李雷(雖然知乎上這好像容易重名) 的
「世界紀錄從來就不包含中國人,就像是亞洲歌王並不把印度、中東算在內」
應該還有很多很亮的評論
不過一時想不起來
知乎有時也會玩類似 野...的接龍啦!!)
推薦延伸閱讀
「為什麼C語言條件式會有捷徑判斷這功能」
要知道
C語言基本上就是組合語言的美觀寫法
其實這題有另一篇回答寫的比較詳細
但我暫時找不到那篇
不過兩者概念相同
我們C語言在處理 if(A && B)時
較常見的做法是
把它拆成
if(A)
{
if(B)
}
再翻成機械語言(當然通常會先翻成組合語言)
由上述的拆法
我們可以顯然地得到結果
如果A敘述不成立時
我們根本不會去執行B敘述
因次if (A && B)的A、B是一段程式碼時
只要A不成立
B就不會執行
也就是說B這個照直覺應該不管怎樣都會被執行的敘述
因此被跳過了、斷開魂結、斷開鎖鏈
所以在C語言中
if(A && B)、 if(A || C)都有這特性
這特性被稱為快捷判斷、捷徑判斷等(可能還有別的稱呼,但我聽過的是這兩種)
(以現代來說,如果有人寫的程式充分運用這個特性的話
應該是很令人抓狂的
好在現代人寫應用程式時,也已經很少直接使用C語言
我說的是應用程式
因此開發板那種就別提了
雖然就算是Arduino、樹莓派用的印象中也跟C語言不太一樣
但是蠻類似的啦
不過我這麼說可沒建議各位用Arduino、樹莓派等時瘋狂運用捷徑判斷的特性)