噓 hegemon: 笑死,動態型別用最兇的是蛇蛇跟Js吧 11/23 10:15
蛇蛇是啥?
→ hegemon: Java是到jdk後面幾個版本才支援動態好嗎? 11/23 10:15
噓 alihue: java 哪裡支援動態...java var 那只是語法糖,但實際上完 11/23 10:17
→ alihue: 全是靜態好嗎 11/23 10:17
→ hegemon: 很多人吃這個語法糖吃得很開心,認為是進步的象徵,笑死 11/23 10:24
噓 SuperCry: 牛頓早就被超越了 11/23 11:11
→ kiv9137: 蛇 => python 11/23 11:11
謝~
噓 mirror0227: 好啦我先 11/23 11:20
推 maik060: 上半部講的很關鍵, 下半部又嗆, 只能推了 XDD 11/23 11:23
推 ab4daa: 戰啦 11/23 12:31
噓 strlen: 下一篇 為了配合你們智商才發明出自然程式語言 不然我們都 11/23 13:32
→ strlen: 寫組語長大的 11/23 13:32
→ strlen: 下下一篇 配合你們才出組語 我們都直接看機器碼 11/23 13:33
→ strlen: 喔對阿 設計螺絲釘的比建築師的智商還高 11/23 13:35
艱苦人 你又來了 太久沒被修理 皮又在癢了
→ strlen: 癢喔 來幫我抓抓 11/23 14:40
→ casd82: java的var是type inference 不是 dynamically-typed 11/23 20:26
→ casd82: 動態靜態本來就各有所長戰這個很無聊 11/23 20:27
→ hduek153: 看到中間就笑了 誰支援一下工程師鄙視鍊 11/23 21:52
噓 snow0112: 牛頓定律早就被認為是過時了吧 11/24 00:39
→ superpandal: 以認知來講 型別並不會讓你更容易看的懂 命名才是 11/24 07:12
→ superpandal: offer的舉例就兩件事情 怎麼會那些判斷因素與型別可 11/24 07:13
→ superpandal: 以類比呢 11/24 07:13
這是認知科學中,一個兩觀的問題
人對於事物的認知,通常可以有兩種層次,兩種觀點:構造觀、功能觀
例如:
衣服是布料做的(構造觀),衣服可以用來保暖、修飾(功能觀)
車子有四個輪子(構造觀),車子可以代步,幫忙交通(功能觀)
在程式設計的領域中,命名通常代表了對參數的功能觀(功能認知)
而參數的型別,則代表了對參數的構造觀(構造認知)
這兩觀互相獨立,互不干擾,兩觀的認知都有,代表你對它的了解很透徹
只有功能觀,有時候夠用,有時候不夠用
例如,呼叫Library,函式的命名可以讓你知道函式的功能抽象
(要達到這個目的,前提是命名要很精準扼要,爛命名就不行了)
(如果函式的功能太過混雜,那麼命名要做到精準扼要,其實也不太可能)
(所以系統架構組織設計很重要,函式功能分割規劃很重要)
(低耦合性、高內聚性很重要,越扯越多...etc. 說不完)
對於一個函式的使用者而言,通常只要知道函式的功能抽象,就足夠了
但是對於函式的實作者來說,功能觀只是基本的出發點
他還必須對函式的構造(構造觀),有一定的了解,才可實作函式
對於參數的操作,也是一樣的道理,參數的命名通常代表了參數在系統中的功能角色
好的參數命名可以讓我們從命名知道,這個參數是在做什麼的
但卻無法讓我們知道參數所占記憶體的大小,數值的上下限,系統對數值的處理方式等
基本的參數特性資訊
如果要處理是類似資料結構,記憶體配置等,這種底層基礎的操作,
那麼光是掌握到命名(功能觀),其實是不太夠的
推 CoNsTaR: 如果你有 first class types,你就會學到“構造”(types 11/24 10:30
→ CoNsTaR: )和“功能”(calc)是等價的,在本質上沒有區別 11/24 10:30
→ CoNsTaR: 只是一般的語言強迫把它們斷裂成 type 和實作兩個東西, 11/24 10:30
→ CoNsTaR: 規定某些地方只能寫 type,其他地方只能寫 value 而已 11/24 10:30
推 CoNsTaR: 不懂在吵為什麼要 typecheck 的人怎麼不去吵為什麼需要編 11/24 10:36
→ CoNsTaR: 譯器或直譯器 11/24 10:36
→ CoNsTaR: 要證明你的 type 是正確的就是 typecheck,要證明你的實 11/24 10:36
→ CoNsTaR: 作是正確的,就是看能不能編譯成執行檔(編譯式),或是 11/24 10:36
→ CoNsTaR: 能不能跑起來(直譯式)啊 11/24 10:36
個人是非常不喜歡匿名函數的玩法
匿名函數完全以「實作」來作為操作的標的,
與用「函數名稱」來操作比起來,它既沒有抽象,也沒有辨識認知上的簡化
對於認知的操作來說,會非常的辛苦,而且沒有效率
例如,我在想:如果要將這句話:「把『車子』開過來」以匿名函數的方式來表達
也就是用車子的「構造描述」來代替「車子的命名」來操作
這句話將會變成什麼模樣
這種玩法,基本上是違反認知科學的效益原則的
有人玩得很高興,不知道他們的腦袋在想什麼
推 CoNsTaR: 如果你是在跟人講話,用你的方式可能比較好,但是你的程 11/24 12:31
→ CoNsTaR: 式要拿來跑的,不是拿來讓電腦“認知”的,每個東西是怎 11/24 12:31
→ CoNsTaR: 麼被構造的、怎麼被推導的就該被講清楚,和認知科學一點 11/24 12:31
→ CoNsTaR: 關係也沒有 11/24 12:31
人在讀寫程式的時候,就是人跟程式在講話,這個環節太重要了,怎麼可以忽略
程式語言的發明,是為人而生,還是為電腦而生
對於電腦來說,機器語言就夠了
程式語言在開發的時候,本來就要考慮人的認知習慣,怎麼會跟認知科學沒有關係
程式語言的世界中,奇門遁甲的東西太多了,有些東西的確為人類帶來了方便
也有些東西,我一直在懷疑是不是專門發明用來整人的
噓 CoNsTaR: 那請問你 λx. x+1 這個函數你要取什麼名字 = = 11/24 13:46
→ CoNsTaR: 你有 100 個地方需要這種小運算需要 delegate 的你就要 11/24 13:46
→ CoNsTaR: 用 100 種名字宣告 100 個函數? 11/24 13:46
這個問題太簡單太低級了
如果是重複性高的小運算,用巨集就可以了
如果是重複性不高的小運算,通常就沒有切割包裝成函式或巨集的效益性
→ CoNsTaR: 然後函數取對名子電腦就知道要怎麼跑了? 11/24 13:46
重點在人的認知習慣,不在電腦,沒有認真看本文齁
噓 CoNsTaR: 喔喔原來是 csfgsj,不小心和你認真了 11/24 13:47
奇摩子不爽了,為何不能理性討論呢?
→ strlen: 扯智商的在跟人家講理性討論 笑死 11/25 11:10
艱苦人每天都在吸笑氣,笑了那麼久,到底死了沒有
→ superpandal: 你構造內還是得看命名阿 基本型別你不看命名有什麼快 11/25 18:43
→ superpandal: 速的認知 已經結網成功能怎麼會變成一種單純的屬性 11/25 18:44
→ superpandal: 相近的功能(構造)以假亂真造成這社會的亂象 11/25 19:10
我沒有說死說一定要功能命名呀!
當下物件的構造最能代表物件,當然就用構造命名
命名的來源可以是各式各樣的東西,如構造、功能、性質、外觀特徵等
重點是,對使用操作來說,那一個最具有代表性、辨識性,用起來最方便
以水管的管件來舉例,例如:彎頭、三通、大小頭
這些就是構造命名,並且從構造命名可以很輕易的推斷它們的作用及功能
但是像api這一類的東西,通常是以功能命名的方式比較適合
PS:熊熊想到念國中時,訓導處的管理組長,綽號叫「大龜頭」
這個綽號雖然不雅,但卻是一個很成功的命名,它來自被命名物件的外觀
只要說到大龜頭,大家都知道說在誰,這個綽號流傳一屆又一屆,全校都知道
※ 編輯: csfgsj (218.32.249.24 臺灣), 11/26/2020 09:51:02
→ superpandal: 我說的是命名重要的多 如果你認為構造功能是種型別 11/28 07:19
→ superpandal: 那物件很適合你 我認為的是開發方面物件不是都是優點 11/28 07:20
→ superpandal: 有基本的就可以了 其他看函式 11/28 07:20