: 標題: [問卦] 真的有辦法用0跟1寫出程式嗎?
拒絕廢話:
可以,但可能不是你想像的那樣
: 大家都知道現在是數位時代,而數位時代根本的源頭是0跟1。
: 但是用0跟1根本寫不出想要的程式阿?
: 那當年人們是如何用0跟1寫出CPU的?
看本計概你大概就知道了
: 我已經將我想要的程式,轉換成滿滿的0跟1,但是根本沒法跑。
: 現代編譯器根本不是認識0跟1。
你可以用數學計算一切嗎?
一塊錢加一塊錢 = 兩塊錢 ; 1+1=2
一滴水加一滴水 = 還是一滴水; 但你列錯式子了
如果你把關注的點,放在 cc 數,那麼
1 cc 水 加 1 cc 水 = 2 cc 水; 這樣仍然可以用 1+1=2 來描述
今天我們如果編碼
1 編成 01
+ 編成 10
1 01
= 編成 11
2 編成
等等等等,2 是 10 才對;於是你思考更多規則
data op data, execute...
也就是語法;於是 + 號的 op 可以是 00
(減 是 01, 乘是 10, 除是 11 ; 可以的,只要定義明確就能執行
你可以開發自己的 cpu,用自己的機械碼)
一切定義明確後,照規矩當然可以表達出 1+1, 然後算出 2
但是你怎麼知道水的相加不是算滴數,而是算 cc 數?
這並不是電腦的知識,而是物理化學的知識
軟體若獨立於 domain knowledge 之外,是寫不好的
我們可以用望遠鏡(舉哈雷望遠鏡為例) ,觀看宇宙的遠端
但如果沒有光學知識,你寫不出讀取哈雷望遠鏡的軟體
那必需先是數位化的讀取,然後是基於光學知識的校正
所以我前公司另一位同事常跟我說,他在讀論文
因為我們開發一個運動手環,它卻可以量血壓
我們知道量血壓要用加壓帶去壓血管,充放器的過程不太舒服
傳統血壓計偶爾量一下可以,但運動手環帶在身上隨時量測
我們無法忍受每隔幾分鐘就加壓一次
必需用不加壓的技術測出血壓;看論文就有答案。。。
這又是 domain knowledge,懂電腦,懂軟體,你也寫不出來
-----------------------------
電腦科技,它了不起的地方在於,能夠轉移別人的經驗輕易給你使用
好像打仗,如果我給你一把刀,我就必需再給你一套刀法
如果你身體不好,刀法你練不起來,那麼一把好刀給你就是個屁
但如果我給你一枚飛彈,給你一套發射系統,然後告訴你:按下按鍵就會發射
行,這門檻很低,你一下就學會了
這是一套可轉移,威力強大的成品
而怎麼讓它的威力可轉移,花費了數代人無數的時間心力
最終,你可以不懂,它就是個黑盒子
但按照介面 api 的規定,它就會運轉
而就像 1cc + 1cc = 2cc 這樣,去抽出 1+1=2 的純數學描述
你也必需能把你的客戶需求,正確的抽取出 domain knowledge 描述,才有法子使用軟體
對工程師而言,個人生命有限
這一代的工程師,怎麼在自己生命結束之前,能把經驗轉移,
讓後代可以站在巨人肩膀上繼續堆疊,這是很重要的事
還記得我學過 list, 指標串列
就是一個元件,一個指標,這麼簡單的串起來
可是元件如果是 (int, pointer),我寫好後
下次的 list 可能是 (string, pointer), 我又要重寫一個
當時我一直想不清,針對 list 可以有各種運算,但難道我要一直造輪子?
可是明明隱隱約約有重覆的部份,不用一再重寫
最終出現了 (obj, pointer), obj 可以是任何型態物件
神了,再也不用重寫了,list 裡的排序,搜尋等等程序,寫一次就夠,以後引用就行
而新一點的語言甚至把這些內建
比如 python 裡,要做一個 list, 一道指令就形成了
然後搜尋及排序也一骨腦內建送給你了
愈來愈多方便的東西,威力強大,你不必寫,直接引用就好
但這些的確全都是 0 與 1 就能形成
只是 0 與 1 怎麼去形成,這中間有很多 domain knowledge,它不只是 0 與 1
精彩在這個地方
--------------------------
從仿生學來說,人類也是全都 0 與 1 啊
因為神經突觸在傳送資訊時,都是電訊號
有電,還是沒電;就算你說電壓有高低,那你用二進制編碼就行了
一方面 0 與 1 足以描述狀態,就能形容一個人
但另一方面,0 與 1 怎麼去形容一個人,這中間的 domain knowledge 你得去補
所以我說可以,但也不是你想像的那樣
你因為缺了 CPU 怎麼造出來的這段知識,所以你想不到
不過你也不必知道,用就是了
否則你得爬完整個電腦發展史
至少,計概裡從無到有,到現代,你要爬一陣子。。。
我不會造 CPU 我就會用了
這是一個成功的經驗抽象化
就像給我一枚飛彈再加一個按鍵一樣
容易轉移到我手裡使用
------------
但笨蛋還是會亂按,會射錯人
推文討論 1