出色的 SQL 編碼師成長進階路線

  • 2019 年 12 月 25 日
  • 筆記

學習就是一個不進則退的過程,不是帶節奏,而是事實。

更高一級的工程師,需要克服的困難,讀的書,讀的 paper,會逐級加深,比如你還在讀數據庫實現的時候,人家已經在研究分佈式存儲的原理與實現了。

你說不想那麼累,只想找一種半衰期長的技術混口飯吃,也是一種生活態度。沒有什麼不好,只是個人興趣罷了。

你或許產品觀很強烈,對產品的理解跟二爺甚至喬幫主那麼深邃,是個出色的產品經理;你或許會三四門外語,跟印度人,法國人,德國人能吵得火熱,周旋於各種 Party, 出入各種高端酒會,偶爾用 SQL 查下ROI,那也非常了不起。

SQL 乃至整個技術體系,並不是唯一吃飯的傢伙什,別把技術太神話了。人家微商一部手機,一個朋友圈,照樣也是月入十萬。如果你認為做技術是聖神的,是唯一的致富途徑,那你會失望的。那不過是一種選擇罷了,恰巧是你喜歡的一個玩具,還恰好能養活你,稍微花點時間,還能靠它養活一家子,何樂不為呢!

但,如果你以上特質都沒有,你爹也不是李剛,那麼技術可就是你唯一快速立足於社會的手段了。這話不是我說的,吳軍在他的得到專欄里講過,無資源,無家庭背景,無乾爹的三無人員,快速養活自己的方式,就是學門手藝,然後去大城市找一份工,先幹着。

說到手藝了,就有精湛與平庸之分。從平庸過渡到精湛,都是手藝人的追求。有些人悟性極高,師傅領一領,就入門了,加上自己摸索的也勤快,一門手藝,比如 SQL,兩年就完全精通了,很多 OCP 都是兩年精通。而有些悟性低一些的,資質平庸的人,比如我吧,玩了五六年,才覺得有些入門了,十來年才敢說自己算是有點經驗的愛好者。這不是我低調,也不是矯情,是事實。

人家日夜趕工,腦子好使,冬天我還貪戀溫暖被窩的時候,人家在看書;我在星巴克喝咖啡,或拿着 Costa 咖啡在電影院連着追星球大戰,變形金剛,復聯的時候,人家在客戶現場解決問題,周末無休隨叫隨到。憑什麼不給他們精通呢!

所以入門的第一關,就是要花時間,看書做例子,提問,交流。

怎麼判斷自己是不是在入門還是進階,或者門都沒入呢?

嘗試回答下面的問題,如果不能隨即答出來,那說明沒入門:

1)如何創建一個單值函數(scalar-valued function)和一個表值函數(table-valued function) 2) Left Join 與 Inner Join 之間的區別 3) 返回的結果集超過了1萬條,如何分頁顯示

不看書,不查百度,谷歌,能把下面的題目答對,基本可以斷定你是在進階階段。

1)不用循環,寫一個順序生成任意指定範圍內日期結果集的腳本 2)已知按月存儲的訂單金額表,有年,月,銷售金額主要字段,不用 Join 求解環比增長額

那麼精通呢:

1)已知 select max(InsertDate) from auditLog 已經運行了 30 分鐘,請問你會從哪些方面入手調優? 2)如果有兩張表,各有 10 億和 2 億條數據,如果將 2 億條數據合併到 10 億那張表中? 3)看看這道題,你能答出來不? 這題價值 100 RMB

價值 100 RMB 的一道 SQL 題

精通往上再高一層呢?

這一層只在 Qcon 上見到過,在 Github 開源的 Hive/Spark SQL 源代碼中見到過,在阿里開發的 oceanbase 項目中見到過。 據說能隨意改變數據層的訪問,自動化識別分區,分表,分庫,智能路由每套數據接口。