在撰寫本文前,我搜索了「我應該學習哪一種編程語言」這個詞條,發現會產生5.17億個結果。而每一個頁面都在口若懸河地介紹某種語言相對於其餘語言的優點,其中90%會推薦Python或JavaScript。算法
恕我直言,我並不認同這5.17億個搜索結果,並建議你最應該學習的第一種編程語言——邏輯。編程
知道如何編寫代碼已經再也不是一種優點了。市場上充斥着各類培訓機構、學習班培訓出來的人員,「初級軟件開發人員」的職位已經不復存在。要想在今天的市場上取得成功,你不但須要知道如何編碼,而且還須要學會運用邏輯思惟模式。數組
我第一次接觸「計算機科學」是在我十年級的選修課。上課第一天,我欣喜地看到我面前有各類各樣的冰淇淋和各類聖代配料。在咱們都坐下以後,個人老師宣佈:數據結構
「今天,咱們要製做聖代。有一個條件:你必須寫一份關於如何準備聖代的具體說明,而後我就會照着作。」框架
固然沒問題,我想,這簡直是一件垂手可得的事兒。而後在不到一分鐘的時間裏,我就草草記下了一套「完美」的聖代製做指南:數據結構和算法
而後,個人「老師」(嗯,我願意用這個可愛的比喻稱呼我電腦)作出了我所見過的最準確的諷刺表演——她開始惡狠狠地戳冰淇淋盒蓋,但沒法穿透它堅硬的外表。編程語言
「好吧,首先取下蓋子,」我說,彷彿急切地想要享受一頓美食。工具
「你沒有向我提供那些指示,因此,很不幸,沒能給你作一個聖代,下一個!」學習
此次我確信我有打開盒蓋這個條件了。我甚至在添加每一個項目到個人傑做前,就已經確保它們都被打開了。測試
她打開蓋子,舀了三勺黑莓冰淇淋,把它們放進碗裏。從這一步看,起碼個人新生聖代開始誕生了。
緊接着,她打開熱巧克力,把兩個湯勺放入個人碗裏。不是兩湯勺的熱巧克力,請注意——是兩個現實中的湯勺,沒有熱巧克力。
看起來我又一次沒作到給予足夠具體的指令!
當所有都完成以後,我獲得了一碗冰淇淋,上面放着兩個金屬勺子、一坨鮮奶油和大約300片糖屑。
到這個時候,我終於明白了:計算機是一個純粹的邏輯實體。它沒有上下文,也沒有假設。它對一組很是具體的指令作出響應,並最終在Terminal中運行。
我最終制定的冗長卻必要的聖代製做指南:
最後一個步驟很是重要,由於若是沒有這個步驟她將會開始吃掉個人聖代。
這就是計算機編程的現實情景。請爲計算機提供密集的詳細指令集。本質上來講,這就是全部編程語言分解成的指令。
軟件開發如今已經到了不能做爲一個單獨的行業來討論的地步,就像「軟件開發人員」這個職位名稱太寬泛同樣。兩名開發人員在擁有不連貫的技能集的狀況下能夠看做是具備相同市場競爭力,這意味着在開發中,職業生涯不只僅是取決於編碼的能力。熟練的開發人員擁有一種與編程無關的通用屬性——邏輯。
最好的開發者是批判性思惟的專家。這是相當重要的,由於大多數軟件項目都是沒有文檔記錄的、支離破碎的災難。它們須要一個批判性的思考者來拼湊信息,並在須要的時候填補空白。落後的開發者是那些不能將這些點鏈接起來的開發人員。
全部這一切都歸結於另外一個大膽的聲明: 計算機科學的基本原理對於編碼能力是相當重要的,並且將永遠是相當重要的。
流行語言隨潮流而變化。框架變得過期,企業經過混合技術來應對不斷變化的需求。惟一不變的是什麼?基本原理——這就是他們的定義!
對於那些沒法深刻思考的人來講,請考慮使用這些工具來提升您的編程批判性思惟:
瞭解您的運行時間複雜度
程序的運行時間複雜度也稱爲Big-O
,能夠表示爲在任何實例上執行的與輸入大小(n)相關的步驟的數量。首先,請始終監視您的程序的運行時間。
瞭解您的數據結構
數據結構是每一個複雜程序的核心。知道在什麼場景中使用哪一種結構自己就是一門藝術。數據結構與運行時間複雜度直接相關,由於選擇錯誤的結構會使程序陷入停頓。數組查找是 O(n) ,這意味着隨着輸入的大小增長,使用數組的開銷也會增長。散列查找O(1)
,所以不管所述散列中的鍵數是多少,散列鍵的查找時間都將是恆定的。
我曾經有一些候選人認爲數組的搜索時間比散列更快。這就是一個警告我不要僱傭他們的直接信號——所以,請了解你的數據結構。
讀/看/聽
像Udemy,Pluralsight和CodeAcademy等網站是學習一門新的編程語言的絕佳資源。要了解基礎知識,請參閱有關通用工程概念、最佳實踐和編碼風格的書籍。工程師們最強烈推薦的書籍是《Design Patterns》,《Refactoring, Code Complete, Clean Code》, 和 《The Pragmatic Programmer》等。最後,每一個工程師都應該在他們的辦公桌上保留一份《Introduction to Algorithms》,並妥善保存。
實踐!
未曾瘋狂練習拉小提琴,就不可能成爲一名小提琴大師。像HackerRank,CodeWars,CoderByte,TopCoder和LeetCode這樣的網站上有成千上萬個挑戰問題,旨在測試您對數據結構和算法的瞭解。我發現使用這些網站的最佳方法是本身嘗試解決問題,並將解決方案放在Github上,而後查看該問題的頂級解決方案,看看其餘人是如何解決的。這就引出了個人最後一點建議:
查看其餘人的代碼
在軟件開發過程當中,您可能犯的最大錯誤就是單獨行動。軟件開發在很大程度上是一項衆包工做。咱們一塊兒創建標準,一塊兒犯錯誤,並隨着時間的推移(經過屢次失敗)來學習什麼是有效的。花時間閱讀熟練的開發人員的代碼老是有回報的。只要確保它是好的代碼。
========================================================================================
我能給你留下的最好建議就是永遠不要爲你所知道的事情感到羞恥。正如我所提到的,這個行業規模龐大,有着龐大到可怕的語言,內容密集。須要花費大量的時間和精力來進行理解和學習。得到熟練則須要更多的努力,而且須要花費更多的精力來達到精通。
當我到達那裏時,我會告訴你的。
========================================================================================
掃碼關注京東雲開發者社區,天天都有精彩行業信息哦!