我想的方向不太一樣。有一種重複,是像開發 Android app 這樣,每一個開發 app 的人都要繼承 Activity (或 Service etc),並部分 overwrite parent 特定的實作。當很多使用 API 的開發者都在一樣的地方做相同的 overwrite 時,也可以看作是重複。
不當的抽象可粗分為二,一為對抽象對象的錯誤解讀造成的不正確的抽象架構設計或不貼切的描述,另一種是為了避免重複而做的過分集中的抽象。我們當然能避免重複,而不重複的方法就是在抽象層做統一的描述,但這同時也造成了收斂。收斂和僵化是一體兩面,因此收斂的同時也減少了彈性;實務上的影響就是未來擴充的東西,一定要能夠被抽象描述表達,這其實是一種畫地自限。
舉個簡單的例子,幾乎所有繼承 Activity 的 app 都要 call onCreate() 的 super(),這也是一種重複,那為何不在 Activity 中就統一做掉?相信這除了是原設計 Activity 的人,希望能在 Activity class 中擁有足夠凝聚的描述,也是希望使用 API 的開發者能對 Activity 的使用有一個制式的規格可以遵循。
建構程式就像拼拼圖,抽象集中的程度好比拼圖塊的大小,較集中的抽象就是較大塊的拼圖,而拼圖塊如果都太大,可能就沒辦法拼成想要的樣子。但拼圖塊太碎,也同樣不好用,而且經驗淺的程式設計師面對太小的碎塊可能會無所適從。我覺得要做出好的取捨的心法是,朝兼顧彈性、易用性但又不鬆散的方向做設計,而不是單純考量如何讓抽象層最凝聚、濃縮 (過度抽象) 或讓使用者做最少操作 (彈性最差)。
It's like putting another I/O specific cache layer that supports plenty operations including batch between the kernel space and the user space, so that the transitions between the kernel mode and the user mode can be largely reduced. Relying on a bunch of magic, it increases the throughput of I/O operations.
最近發現 Kotlin 的設計商 JetBrains 自己有做了一個教學系統叫做 JetBrains Academy ,透過線上教學文件和自動審核程式的機制來讓你一步一步學習 Kotlin ,我覺得還蠻不錯的,只是每次 Submit 上去都要等蠻久的就是了 XD""""
目前支援 Java, Kotlin, Python 三種語言。
最近在 ARM Cortex-A8 的 Go 1.11 和 1.12 遇到疑似 GC 誤回收造成的 segmentation fault,目前不知道怎麼解,只好先降版回 1.9。
我目前也是用這個,Fira Code 看不習慣。Monaco 也不錯,不過它不是 free 的。
這邊有大全集,大家可以來挑自己喜歡的: What are the best programming fonts?1