一種語言統治一切

隱藏在一層程式碼之下的是一種日漸衰弱的語言,渴望被學習。

一種語言統治一切

截至撰寫本文時,查詢「首先學習程式設計哪種語言」會傳回 517 億個搜尋結果。 這些網站中的每一個都會讚揚一種特定的語言,其中 90% 最終會推薦 Python 或 JavaScript。

言歸正傳,我想鄭重聲明,這 517 億個網站都是錯的,你應該先學習的語言是 基本邏輯.

僅僅知道如何編碼是不夠的。 市場上的機構和課程畢業生已經飽和,初級職位實際上已經不存在*。 要在當今世界取得成功,您必須同時具備編碼能力和先進的基本邏輯思維。

*在下文中,請記住,這是翻譯,作者和您所在國家的勞動力市場情況可能有所不同(以及其他細微差別),但這本身並不會使原始文章變得更糟 -約。 翻譯

我的第一堂電腦科學課

我第一次接觸電腦科學是在十年級時選修的。 第一天,走進教室,我高興地看到面前擺放著一大桶冰淇淋和各種配料。 等大家就座後,老師宣布:

「今天我們要嚐嚐自製的冰淇淋。 但有一個條件:你必須列出一份如何準備甜點的具體說明,我會遵循它們。”

“沒問題,”我想,“這節課不會太長。” 大約一分鐘之內,我就寫下了我夢想中的冰淇淋的完美配方:

  1. 舀三匙覆盆子冰淇淋放入碗中
  2. 打開巧克力醬,將兩湯匙加入同一個碗中
  3. 將鮮奶油加入碗中
  4. 撒上糖棒,然後在上面放一顆櫻桃

我的老師——這個可愛的比喻中的“計算機”——進行了比我以前見過的更具諷刺性、更真實的表演。 她開始用湯匙熱心地戳冰淇淋桶,甚至沒有碰到桶蓋。

“好吧,好吧,但首先你得打開它!” - 我驚呼道,試著盡快拿到這份禮物。

「你在說明書上沒有寫這個,我不能幫你做冰淇淋。 下一個!”

讓我們快轉到嘗試#2

  1. 取下蓋子打開覆盆子冰淇淋
  2. 舀三匙覆盆子冰淇淋放入碗中
  3. 打開巧克力醬,將兩湯匙加入同一個碗中
  4. 將鮮奶油加入碗中
  5. 撒上糖棒,然後在上面放一顆櫻桃

嗯,現在應該不會有什麼問題了。 為了以防萬一,我確保製作我的烹飪傑作的所有原料都是開放的。

老師打開蓋子,舀出三球冰淇淋放入碗中。 “終於,我美麗的冰淇淋開始實現了!” 然後她打開巧克力醬,在碗裡加入兩湯匙。 她沒有「用兩湯匙添加巧克力醬」——不這麼認為——當然,她把湯匙本身放進了碗裡。 它們裡面沒有醬汁。 再說一次,我沒有費心把所有的事情都寫下來。 以同樣的精神完成其餘的工作後,我收到了一碗冰淇淋和兩湯匙,在鮮奶油的海洋下幾乎不被注意到。 上面放著一對糖棒。

似乎這一刻我終於明白了:計算機是真空中的邏輯。 他不了解周遭的情況,也不做任何假設。 他只執行明確制定的指示並逐字遵循。

我的最終結果是經過一系列長期但必要的試驗和錯誤的結果:

  1. 如果您還沒有這樣做,請打開以下每個包裝:覆盆子冰淇淋、巧克力醬、生奶油、糖棒。
  2. 拿出一個碗放在你面前
  3. 取一個冰淇淋勺,將三匙覆盆子冰淇淋一一放入碗中。 將冰淇淋湯匙放回原位。
  4. 取一罐巧克力醬,舀出醬汁,然後將一湯匙的內容物倒入碗中。 再重複一次舀和倒的過程。 將湯匙和罐子放回原位。
  5. 將鮮奶油包裝倒置,將其放在碗上,倒在冰淇淋上 3 秒鐘,然後將包裝放回原位。
  6. 拿一罐糖棒,將大約四十根糖棒倒入碗中,然後將罐子放回原處。
  7. 從櫻桃碗中取出一顆櫻桃,將其放在冰淇淋上。
  8. 給學生一個裝有成品冰淇淋的碗和一個湯匙。

最後一點尤其重要,因為如果沒有它,老師倒數第二次就開始吃我的冰淇淋。

但這就是程式設計。 為計算機創建一套仔細的指令的壓力。 本質上,這就是每種程式語言的歸結:編寫指令。

程式設計職業

程式設計已經到了很難作為一個行業來討論的地步,就像很難用「程式設計師」這個詞來描述工作一樣。 兩個開發人員可以同樣受到市場的需求,了解完全不同的語言,這意味著開發能力比了解特定語言更重要。 所有成功開發人員共有的一個普遍屬性是 基本邏輯.

最好的程式設計師是能夠從新角度看待程式碼的人。 這一點非常重要,因為大多數軟體產品都是未記錄的不良程式碼片段的集合。 他們需要不斷地聚集在一起,並根據需要填補空白。 那些無法用一條線將不同點連接起來的人將不得不永遠處於觀望狀態。

所有這些讓我想到了另一個聲明,這次是粗體的: 基礎知識對程式設計師來說一直是並且將會是最重要的.

語言來來去去。 框架正在變得過時,公司正在透過改變他們使用的技術堆疊來回應需求。 有沒有一件事是永遠不會改變的? 是的──基礎知識,之所以稱為基礎知識,是因為它是一切事物的基礎!

如何提升基礎知識

一種語言統治一切克里斯多福攝 耶施克 上 Unsplash

如果您正在尋找提高基本邏輯思維的起點,請嘗試從這裡開始:

了解程序的複雜性

也叫 大O. 「演算法複雜度」是指執行程式所需的時間對其輸入資料大小的依賴性 (n)的。 密切關注正在使用的演算法的脈搏是重要的一步。

了解您的資料結構

資料結構是每個現代程式的核心。 知道在哪種情況下使用哪種結構本身就是一門學科。 資料結構與運行時複雜性直接相關,選擇錯誤的結構可能會導致根本的效能問題。 尋找數組中的元素是 O(N),這表明使用數組作為輸入資料的成本很高。 哈希表查找 - O(1),這意味著在這種情況下搜尋值的時間不取決於元素的數量。

人們來找我接受採訪,並聲稱透過數組搜尋比透過哈希表搜尋更快。 這是最明確的跡象,表明您不應該僱用他們 - 了解您的資料結構。

讀/看/聽

類似的網站 UdemyPluralsight и CodeAcademy - 學習新程式語言的絕佳選擇。 但對於基礎知識,請參閱有關一般編碼原則、實踐和風格的書籍。 最推薦的書籍是《設計模式》、《重構》。 改進現有程式碼」、「完美程式碼」、「乾淨程式碼」和「實用主義程式設計師」。 最後,每個開發人員都應該保留一份“演算法「 在眼前。

實踐!

不打破雞蛋就無法煮炒蛋。 類似的網站 HackerRank代碼大戰CoderByte, TopCoder公司 и 力碼 提供數千個有趣的謎題來測試您對資料結構和演算法的了解。 試試你的運氣來解決你喜歡的問題,將你的解決方案發佈到 Github 上,然後看看其他人是如何解決它的。 這引出了最後一點:

閱讀別人的程式碼

在發展道路上,你可能犯的最大錯誤就是單打獨鬥。 軟體開發很大程度是團隊的努力。 我們一起制定標準,一起犯錯,儘管失敗,但我們一起變得更好。 花時間閱讀別人的程式碼將會得到豐厚的回報。 只要確保它是好的程式碼即可。

好吧,我能給的最好建議就是永遠不要因為自己還不知道某件事而感到羞恥。 正如已經說過的,我們的產業規模龐大,技術量無窮無盡。 建立整體圖景需要花費大量的時間和精力,成為某個特定領域的專業人士更需要花費大量的時間和精力,而磨練自己所在領域的技能則需要花費更多的時間和精力。 當我自己實現這個目標時,我會讓你知道。

來源: www.habr.com

添加評論