如何熟練掌握多種編程語言
學習一種新的編程語言很像學習說一種新的自然語言。
但是,正如我確定我的許多雙語和通俗的朋友會同意的那樣,有時在兩種或多種語言之間切換可能會造成混淆。
例如,我的母語是英語,但是我在學校里被法語浸入法登記。雖然這肯定能使我精通兩種語言,但在我用英語工作時確實產生了一些意想不到的后果。在最長的時間里,我會在許多單詞上加上E或將美元符號放在一組數字的末尾(32美元而不是32美元),這都是法語的要求,但并不存在用英語。經過時間和實踐,這些混淆最終消失了,我現在可以無縫地(或多或少)在兩種語言之間切換。
我已經注意到這種情況再次發生,盡管這次,我正在嘗試從C#和Java的結構化世界過渡到Python。在上大學時,我所有的課程都圍繞嚴格的編程語言(例如C#)進行。現在,我正在嘗試向數據科學過渡,而我目前正在學習Python。對于喜歡井井有條的事物的人來說,Python是一場噩夢。對我來說,嚴重缺乏分號,花括號和類型變量。好像我正在學習一種新語言(Python),這與我的母語(C#)完全不同。
學習類似的編程語言(例如C#,Java和JavaScript)類似于學習類似的自然語言。例如,通過了解法語,我很容易掌握類似的語言,例如意大利語,葡萄牙語和西班牙語。但是,學習一種與我所知道的語義不同的編程語言(Python)類似于學習冰島語或普通話對我的法語背景沒有多大幫助。
但是,正如我過去發現的那樣,學習一種新的編程語言與學習一種新的自然語言相同。此外,能流利使用多種編程語言涉及一些與我能流利使用多種自然語言時相同的基礎知識和技巧。
首先學習靜態類型和語法特定的語言
幾乎每篇標題為"我應該首先學習哪種編程語言?"的文章表明Python是某人學習的理想的第一語言。盡管我同意Python具有簡單的語法和靈活性,因此它是一種很好的第一語言,但我相信以后將不再需要學習一些編程基礎知識。
因此,我將提供一些違反直覺的建議:首先學習靜態類型的和語法特定的語言。
與其學習會束手無策的語言,并為您提供進入編程世界的舒適途徑,不如學習一種會因分號而忘記分號或因為數據類型不正確而拒絕工作的語言。錯誤。
靜態類型的語言
靜態類型的語言(例如C#和Java)要求將數據類型分配給它們的變量。數據類型包括字符串,整數和布爾值,僅舉幾例。變量綁定到它們在初始化時分配的數據類型,并且不能更改,否則,在運行之前,代碼中將引發錯誤。
另一方面,動態類型化的語言(例如Python)不需要在變量初始化時分配數據類型。將在運行時(在程序已編譯并運行之后)檢查變量類型,以查看類型是否正確。
通過學習如何使用靜態類型的變量,您將對將來可以建立的數據類型有基本的了解。例如,JavaScript是一種快樂的小編程語言,將整數和字符串加在一起沒有問題。但是,不了解數據類型會在以后出現錯誤時引起問題。通過嚴格地學習并獲得對數據類型的深刻理解,當您學習動態變量語言時,可以輕松地避免很多麻煩,因為該語言具有可以隨時更改數據類型的變量。此外,首先學習靜態類型的語言將為您的編碼過程邏輯添加一層。
特定于語法的語言
學習新的自然語言時,首先要學習字母,然后再學習該語言的單詞,句子結構,標點符號和語法。
學習編程語言是相似的,因為每種語言都有必須使用的特定語法,代碼才能正常工作。換句話說,每種編程語言都有一種方式,使它喜歡構造其句子并形成其段落。
某些語言(例如Java和C#)的語法非常具體,如果您忘記了一個分號(分號通常放在代碼行的末尾,類似于句號),則它們將無法工作。放在句子的末尾以表示其結尾)。其他語言(例如Python)相對沒有必須遵循的語法結構。例如,與C#相比,Python相對沒有分號,并且幾乎沒有花括號來組織其代碼。
首先學習語法特定的編程語言將使您對編寫代碼時需要遵循的適當結構有充分的了解。通過了解適當的縮進結構,以分號結尾的代碼行的必要性以及在大括號內編寫函數的要求,您將能夠編寫出以下代碼:易于理解,更有條理,易于維護和調試。此外,這將為您提供一個模板,當您開始嘗試使用語法上不那么嚴格的新語言時,可使用該模板編寫代碼。
從本質上講,現在就學習該學科,然后再獲得回報。
能夠流利使用您的母語
很難說一門世界上每一種語言的生活,而不是很好地講一種語言,不是嗎?此外,如果您只懂每種語言,那么您對任何人都不會有用嗎?由于您既不會掌握很大的詞匯量,也不會對任何特定語言有很強的理解力,因此您甚至無法在Google Translate中輸入內容來嘗試與來自世界各地的人進行交流。可能是你們兩個最終都會非常困惑!
我認為,編程語言也是如此。與其嘗試學習幾種不同的語言,而又不熟練地理解其中的任何一種,不如精通您的母語或所選語言。
我并不是建議您必須精通一種編程語言,然后再學習另一種。但是,在嘗試學習一種新語言之前,您應該對一種語言的編程概念有深刻的了解。
為什么?好吧,當您學習一種語言的代碼基礎時,可以假定另一種語言的基礎基本相同。例如,if / else語句在您遇到的每種編程語言中都執行相同的功能,但是唯一的區別在于您用于傳達它們的語法。例如,C#中的if / else語句要求使用大括號來組織語句,而Python中的if / else語句沒有大括號,而是使用單個冒號和代碼縮進來分隔每個語句。從根本上講,該語句在兩種語言中的工作方式相同。
就像您學會用母語說"你好"和"再見"一樣。一旦理解了這些詞的含義以及如何使用它們,就可以學習如何用多種不同的語言說"你好"和"再見"。這些單詞在不同的語言中將具有相同的含義,唯一的區別是您使用不同的語法編寫它們并按照不同的約定使用它們。
通過了解您的第一種編程語言是偏愛單個類還是多個類,具有特定的變量命名約定,或者是否需要面向對象的結構,您將逐漸掌握第一語言和后續語言。。精通一種語言后,隨著您對編程語言之間的差異有了更深入的了解,您將能夠更快地了解其他語言的細微差別。
不要用重音編碼
說自然語言時,如果有人說的很重,您就可以理解。例如,即使我說法語很重,我也被母語為法語的人所理解。因為我使用的是法語約定,所以即使我使用了回旋的句子結構或錯誤地讀了一個單詞,他們也理解了我想要傳達的內容。
為了能流利使用一種新的編程語言,您不能像使用已經知道的語言一樣對其進行編碼。如果您這樣做,則可能是該語言不一定會理解您要執行的操作,或者它會以非常低效的方式來執行您要執行的操作。
在我使用Angular作為系統前端時,我在大學的頂峰項目期間陷入了這個陷阱。我當時非常了解JavaScript,并且知道Angular與JavaScript相似,所以我嘗試使用與JavaScript相似的約定在Angular中進行編碼。對我來說不幸的是,嘗試使用重音符號無法產生良好的代碼,這可能是由于不了解Angular的約定。我的代碼全部用Angular編寫,但是用沉重的JavaScript口音講話。
換句話說,請不要重復我的錯誤-按照原意使用新語言,并且不要帶有重音符號。
通過使自己沉迷于新語言并強迫自己理解其所有獨特約定,您將學習如何以預期的方式使用該語言進行編碼,而無需將其用作已經知道的語言。這將使您能夠流利地使用多種語言,而不會用濃重的口音講所有這些語言。
例如,如果英語是您的母語,但是您決定快速學習其他五種新語言,那么您最終可能會說俄語,意大利語,斯瓦希里語,意第緒語和阿拉伯語,而且所有這些都帶有強烈的英語口音并使用英語約定。如果您選擇學習俄語的慣例,那么俄語母語的人就會明白您的意思。其他語言也是如此。如果您嘗試使用典型的英語句子結構說斯瓦希里語,那么肯尼亞的某個人可能不會理解您。
花些時間閱讀編程語言提供的文檔,并對該語言的特定約定有所了解。這不僅會使您更加流利的語言,而且在與理解該語言并希望您能夠遵守其約定的其他人一起進行團隊項目時,也將使您變得更有價值。
您最初可能不得不強迫自己編碼時沒有任何口音,但是當您可以輕松地從一種語言切換到另一種語言時,辛勤的工作將獲得回報。
最后的想法
本文概述了成為多語言編程語言時遇到的一些更獨特的想法,使之成為多語言編程語言。這些提示都對我有很大的幫助,但是如果我不提及其中一些更常規的提示,那將不會是一本非常有用的文章:
- 閱讀語言文檔,閱讀源代碼,使用自己的新語言用"單詞"復制代碼示例,為新語言編寫備忘單等,從而完全沉迷于該語言。
- 繼續使用各種語言(例如Youtube,Medium和StackOverflow)使用新語言編寫編碼教程。學習新的編程語言時,您需要樂于助人。換句話說,積極學習將成為您的朋友。
- 使用您正在學習的新語言重新創建您已經完成的項目(甚至是簡單的項目),并盡力使用新語言。
- 參加要求您使用新語言的黑客馬拉松,Kaggle競賽和編碼挑戰。
- 與非常了解該語言的人合作。與那些精通我要學習的語言的人一起,我從配對編程中學到了很多東西。在他們編寫特定代碼的過程中聽到他們的思考過程,使他們對語言的工作原理以及為什么他們以特定方式編碼解決方案有了很多了解。
我能提供的最佳建議是堅持不懈。學習新語言很困難,編程語言也不例外。如果需要一點努力學習,請不要放棄該語言。幸運的是,互聯網上的多種資源可以幫助使學習過程更輕松,更直觀。
最重要的是,在學習新語言時,請不要忘記應用可用的建議和工具。從長遠來看,您不僅會更好地理解語言,而且還將成為更好的開發人員或數據科學。
原文鏈接:
https://towardsdatascience.com/how-to-become-fluent-in-multiple-programming-languages-9f473c146b90