在我的職業生涯中,沒有一種技能比SQL更有用!

創業公司CitusData(CitusData 是一家將 PostgreSQL 商業化的初創企業,也是 PostgreSQL 社區領導者,不久前被微軟收購)的雲產品負責人Craig Kerstiens近日發文表示,在他十多年的職業生涯中學到了很多技能,但沒有一種技能比SQL更有用。他的文章在Hacker News上引起了熱烈討論,截至發稿之時已經收到779個點贊、372條評論,網友紛紛表示:SQL一直以來確實被嚴重低估了。下面就讓我們一起來看一下Craig是怎麼說的。

在我的職業生涯中,我學到了很多技能,但沒有一種技能比SQL更有用。SQL在我看來是最有價值的技能,因爲:

  1. 它對於不同的職業角色和學科來說都是有價值的;

  2. 一旦學會了就不需要重新再學;

  3. 它讓你看起來像個超級英雄。一旦你掌握了它,而其他人不懂,你就顯得特別強大。

讓我進一步探討這些問題。

SQL是一個可以到處使用的工具

無論你扮演的是什麼樣的職業角色,總能從SQL中找到一種方式讓你的生活變得更輕鬆。作爲一名產品經理,我要查看數據,分析產品的有效性以及制定產品路線圖。如果我們剛剛發佈了一個新功能,那麼是否有人使用過新功能的相關數據很可能被保存在關係數據庫中。如果我正在關注一些關鍵性業務指標(例如月增長),那麼這些數據很可能就存在某個關係數據庫中。我們面對的可能是一個支持SQL的記錄系統。知道如何以最原始的方式訪問它可以爲我節省大量的精力,因爲我不需要再向其他人索要這些業務指標數據。

在成爲產品經理之前,我已經在使用SQL來了解系統內部發生了什麼事情。對於工程師來說,使用SQL通常可以更快地獲取想要的信息。當Web應用程序的運行速度變慢時,瞭解應用程序中運行的SQL以及如何優化它是不可或缺的技能。當然,這超出了對SQL基本瞭解的範疇……但爲了加快查詢而添加索引而不是去折騰緩存,還是非常值得花費額外的時間去學習的。

SQL是永久不變的

記得大約在20年前,我創建了第一個網頁。當時覺得這是一件非常神奇的事情,然後我加入了一些JavaScript代碼,提示用戶點擊是否選項或輸入一些東西。大約10年後,jQuery出現了,雖然它有時候比較冗長,而且還需要學習一些新東西,但總體來說,它讓一切變得更好了,所以我決定花時間學習jQuery。然後是Angular、React、Ember,直到現在,我已經有了一個完整的管道,可以將基本的JavaScript代碼引入到我的網站中,但現實卻是我現在仍然在努力實現20年前的事情,就是讓用戶單擊是否選項。

但SQL卻幾乎沒有真正發生什麼變化。但需要注意的是,它其實已經發生了一些變化——有了現代的SQL(https://modern-sql.com/),但我仍然認爲它不如其他語言那麼引人注目。每隔幾年就會出現一個新標準,偶爾還會出現一些新的東西,比如對窗口函數或CTE(公用表達式)的支持,但SQL的基礎是永久不變的。學習SQL一次,就可以在你的職業生涯中重複使用它,不需要再重新學習。但不要誤解了我的意思,我其實很喜歡學習新東西,但我會選擇學習一些真正有用的新東西,而不僅僅是另一種完成同樣任務的方法。

SQL讓你看起來像個超級英雄

SQL是一個被低估的技能,大多數應用程序開發人員不願意去學它。因爲很少有人真正瞭解SQL,所以你的SQL技能可能看起來比實際的更優秀。過去,在一家擁有數百名工程師的公司裏,不管是初級工程師還是高級工程師,他們每週都有好幾次會問我這個問題:“嘿,你能告訴我怎麼寫好這個查詢嗎?”因爲你擅長其他人不擅長的事情,你就可以爲他們提供幫助,而當你向他們尋求幫助時,你的生活會變得更輕鬆。

所以,如果你還不精通SQL,那麼還在等什麼,你想讓自己看起來像一個SQL蠢貨嗎?

HackerNews網友怎麼看?

網友slap_shot:

SQL是我所知道的最神奇的概念之一。它已經有近五十年的歷史,而且沒有被其他東西替代的跡象。我們已經創建了無數種技術來存儲和處理數據,但似乎總是嘗試在這些技術中重新實現SQL(例如Hive、Presto、KSQL,等等)。

我經營着一家爲企業構建分析基礎架構的初創公司。我們非常重視SQL,也非常贊同Craigs的這篇文章,它比以往任何時候都更加真實。

與典型的軟件工程師相比,分析師和數據科學家在企業中編寫的SQL代碼越來越多。

MMP數據倉庫(redshift、bigquery、snowflake等)的出現使得即使是預算最有限的公司也能夠使用SQL來存儲和查詢大量數據。SQL比以往任何時候都更強大,更有價值。

如果你仔細研究一家典型的企業,你會發現大多數軟件工程師並不擅長SQL。他們爲什麼要擅長SQL呢?大多數複雜的查詢都是分析查詢。ORM已經提供了大多數原本需要通過應用程序代碼來實現的基本函數。

或許與Craig的觀點不一致的地方在於我們已經爲大部分後端工程師、前端和移動端工程師抽象了SQL。你可以成爲一名優秀的開發人員,儘管對SQL不太瞭解。

另一方面,大量“數據工程師”擁有初級或中級的HDFS、流式數據或其他各種NoSQL技術的知識。他們通常比初級工程師對原始SQL瞭解得更少,因爲SQL一般排在他們的大數據工具之後。

現在似乎精通SQL的人不多,如果你真的瞭解SQL,那麼你就擁有了巨大的力量。

網友redicalbyte:

如果你能理解SQL,它會讓你大吃一驚。你需要從多個角度考慮事情,就像函數式編程範式或遞歸,一旦你真正“瞭解它”,你就會覺得自己像個絕地大師。

可惜的是,絕大多數SQL用戶並不那麼精通。要精通SQL很難,因爲只能通過長時間的實戰才能掌握好它,而且需要應付足夠複雜的數據模型。

如果不是因爲在前兩份工作中每天都處理數據模型,我可能永遠不會精通SQL。

網友grigjd3:

作爲一名後來纔開始學習SQL的軟件工程師,我非常不同意這種觀點。在某些方面,SQL是一門非常好的語言,它比Python或Scala等工具更容易用來探索和操作數據。但這並不意味着Python或Scala就不好,但我確實看到有一些問題非常適合使用SQL接口來解決。

網友neokanitian:

“學習SQL一次,就可以在你的職業生涯中重複使用它,不需要再重新學習”。

與其他抽象概念一樣,SQL是數學理論的實際表達。SQL使用Zermelo-Fränckel(ZF)集合論來推理數據集。

雖然我們很容易對隨意做的事情(實際上是隨意試錯)提出嘗試性的實現,但衆所周知,要開發出ZF這樣的系統公理化是非常困難的。數學不會改變,而且很難被打敗。這就是爲什麼基於數學的知識和技能可以跨越整個職業生涯而不需要重新學習。

當David Child在1968年3月的論文“一組理論數據結構的描述”中解釋說程序員可以使用集合理論表達式而不是通過導航固定結構來查詢數據時,SQL邁出了第一步。1968年8月,Childs發表了“集論數據結構的可行性。一種基於重構集合理論定義的一般性結構”。

1970年,Ted Codd在其著名的論文“大型共享數據庫數據的關係模型”(ACM通訊,第13期,1970年6月6日)中明確提出,依賴集合理論構造的數據獨立性是關係模型的主要目標之一。

基於Codd的工作,IBM的Donald Chamberlin和Raymond Boyce在20世紀70年代早期開發了後來成爲SQL的東西。

網友JimmyAustin:

我在大學畢業後加入了一家諮詢公司(這家公司足夠大,你們應該知道它)的分析團隊,他們使用的是MS SQL Server。

數據清理? 使用SQL。特徵工程?使用SQL。

存儲過程管道被存儲在其他存儲過程中。其中一些存儲過程太過複雜,以至於它們輸出了包含700多個特徵的表,查詢代碼有幾百行那麼長。

每個輸入、存儲過程和輸出都有時間戳,因此修改一個腳本需要修改其下游的每個存儲過程。我要求使用git的呼聲沒有受到重視(需要提升團隊中每個人的技能)。

這可能是我生命中最糟糕的一年。到最後,我使用T-SQL構建了一個可以生成T-SQL腳本的框架。在項目的最後一週(每週60到70小時),項目的合作伙伴看到使用這個框架編寫的存儲過程,要求將它們全部轉換回原始SQL。幾個星期後,我換了個團隊。

這件事情的唯一好處是,我現在很擅長SQL。它確實是一個非常強大的工具,更多的開發者應該使用它。

網友hardwaresofton:

在我看來,SQL是有史以來在關係數據庫方面發明和廣泛實現的最強大的查詢語言。每當看到有人重新發明自己的查詢語言時,我幾乎總是嗤之以鼻(就像他們要發明自己的配置語言)。

Prometheus和GraphQL是最明顯的例子。

Kafka意識到了這一點,基於他們自己的東西來提供SQL功能,也就是KSQL。

英文原文:

http://www.craigkerstiens.com/2019/02/12/sql-most-valuable-skill/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章