雪花新聞

怎麼實現我不管,這纔是我要的最好的計算機語言!

2019-05-19

今天把福川送的《Kotlin核心編程》掃完了,正好也想借這個機會,順道聊聊自己對計算機語言的預期和喜好。

kotlinbook

首先說說寫這本書的作者團隊,從書裏的言辭和內容中也能看出,這個團隊在Java,Scala和Kotlin生態裏都有涉獵,應該是從Scala轉Kotlin的,所以能夠對ADT, Higher-Kinder Functions, Type Theory等理論都能夠如數家珍,至於Actor-based Concurrency, 那當然更是今天Scala生態的Akka莫屬了。

整本書雖然我讀起來很順,但我覺得不一定適合新手,如果你之前對Scala語言和生態有涉獵,那麼,自然可以做到“曾經滄海難爲水”了,因爲很多Kotlin的語言特性跟Scala真的很像,甚至可以直接按照Scala的知覺寫代碼, 比如類型後置,比如String Interpolation, 比如val/var, 應該說, Kotlin勝在語言的設計初衷: 兼容Java,實用主義 , 這其實是Scala那幫SB社區Leaders永遠趕不上的(雖然我一直是Scala粉兒,但我該罵還是要罵), 但是, 理想是美好的, 現實是殘酷的,從我的角度來看,Kotlin語言還是無法滿足我對一門理想的計算機語言的預期, 因爲現在很多的計算機語言設計者根本就沒有把計算機語言當一個產品來做,一個好的產品首先就應該是簡單,別搞那麼多烏七八糟的語法和語法糖,別搞那麼多亂七八糟的理論和tricky的技巧,寫了tmd這麼些年代碼,你我都應該明白, 所有的奇技淫巧,都抵不過大巧若拙, 所有的語言爭吵,都抵不過老子什麼最熟就擼哪個。

Kotlin雖然有簡單的一面,但我也看到了很多不那麼簡單一隅, data class X | annotation class X | enum class X | sealed class X , 這些我認爲是好的設計,因爲從語法到語義直覺上都是一致的,所以簡單, 但像enum裏面定義複雜邏輯, 語法糖一大堆, lazy/lateinit, companion object, extends針對interface和class不一致, pattern match更是二流角色,所有這些,我覺得都是值得詬病的, 詬病的背後就是:

如果一門計算機語音就是一個產品, 開發人員就是使用產品的人,對於使用產品的人來講, Don’t Make Me Think纔是直接訴求, 你跟我抱怨實現有限制, 實現背景有什麼意義呢? 換句話說,難道還是你自己對自己的產品和實現的把控能力不行嗎?這其實跟公司裏很多開發抱怨說產品經理拋給他們的永遠是一句“怎麼實現我不管”不是一個道理嗎? 從用戶的角度來說,產品經理說的難道不對嗎? 怎麼實現就是你研發的事情啊?

對一門計算機語音的設計者來說也是一個道理, 語言難用,學習曲線高,說到底都是你這個產品經理的問題, 要麼是產品設計有問題,要麼你團隊的能力有問題,起碼對問題域和編譯器原理和工程都把控不足。

但話又說回來了, 現實其實就是這麼不完美, 每一門語言就像每一個人一樣,有好的一面,也有不好的一面, 當現實沒法改變的時候,我們就得挑各個實體好的那些面來用:

我們需要精英,但我們不需要僞精英,真正的精英是能夠通過機制、手段和教育將大多數非經營的人組織起來成事,即那種“料民力則無事不成”的人,而不是那些高舉精深的概念和不實用的複雜技術吹噓炫耀的人, 從語言的設計者羣體來講, Scala就屬於後者,Golang/Kotlin顯然更追求實用和拿結果。

Keep It Simple, Stupid, easier said than done!

相關文章