一個新手如何選擇自己的第一門編程語言
剛想要入門的軟件工程師經常會的問題就是,他們應該首先學習什么編程語言,這個可能是學習編程過程中面臨的最棘手的問題之一,以至于很多老程序員也沒有辦法給你很明確的回答。實際上,你選擇哪一種編程語言作為開始并不重要,今天將和大家討論一下如何選擇你的第一個編程語言。
編程語言不是工作
初學者高估這個決定的重要性的主要原因是,他們不了解程序員的工作。作為一個軟件軟件工程師,人們付給你錢不是因為你會使用編程語言,而是因為你可以通過教機器如何解決問題來創造價值。在你的職業生涯中,你會學習如何使解決方案更簡單,當復雜性不可避免時,你會學習如何將其分解,將一個復雜的系統分解成更簡單、更易于管理的部分。你還會學習如何在不增加理解難度的情況下向你的軟件添加功能,最重要的是,如何讓別人也可以這樣做。
這些技能都是完全獨立于任何編程語言的,它們完全取決于你是否能夠理解軟件需求、編寫算法、將解決方案分解為更小的邏輯單元,以及理解軟件是如何工作的,專注于這些方面,會讓你的編程生涯走的更遠。
一個良好的心態
我并不是說編程語言一點都不重要。我所主張的是一種心態,即把語言視為我們可以使用的工具,而不是你工作的全部,沒有人會認為選擇最好的手術刀是醫生工作中最重要的部分,因為你絕對不會信任一個連手術刀都不會拿的心臟外科醫生。
在選擇第一門編程語言時,你幾乎沒有任何信息,因此這種心態就變得更加重要。人們往往害怕在錯誤的編程語言上浪費時間,然而他們沒有看到的是,每個人都有選擇錯誤語言的經歷,而且這與他們的工作沒有絲毫關系。
之所以會出現這種情況通常有以下兩種原因:人們最終會了解一個之前都不知道的新領域(比如你可能在研究一年后,才對數據科學有所了解);他們學習了更多已知領域的信息之后,找到了會使數據科學更容易的Python庫。
更換語言是工作的一部分
將語言視為工具的另一個原因是,你需要經常更換編程語言,在過去的幾年里,每次我加入一個正在進行的項目,我都必須學習一些新的語法。在一個例子中,我的新產品的首要任務之一是修改一個每天被數千萬用戶使用的功能,該功能是建立在一個我完全沒有聽過的編程語言之上。
另外,即使你沒有切換項目,對于團隊來說,在活躍的代碼庫中添加新語言,從而需要團隊成員學會新語法也是很正常的,因為某種新語言的出現可以減輕每個人的工作負擔,或者是某個重要人物決定采用某種徹底改變行業格局的語言(比如蘋果在完全由Objective-C主導的OS中添加了Swift的支持,Google在Android中添加Kotlin的原生支持)。
考慮到當今市場存在這么多編程語言,以及所處地區的發展動態,迅速掌握新語言的能力成為了一項不可或缺的技能有人甚至會說,一開始選擇錯誤的語言對你有好處!
不同語言之間比你想象的更為相似
上一節描述的場景可能聽起來非常令人難以接受,但別擔心,我并不是說你每次都必須從頭開始學習一種全新的思維方式,事實上,快速學習新語言并不難,因為編程語言往往遵循類似的模式,需要學習一次,就可以在其他地方使用。為了說明這一點,我們來看一看用以下兩種完全不相關的語言實現同一個簡單的算法。
Typescript實現查找最小值的算法
Kotlin實現
這只是一個例子而已,在現實世界中,代碼庫必須處理大量的概念,這些概念在這些代碼片段中沒有涉及。但是,這兩種方法看起來非常相似——當你向代碼中添加更高級的概念時,情況往往也是如此。
事實上,除非你一直在學習非常奇怪的東西,否則無論你在哪里,過渡到一門新語言都應該是很簡單,盡管對于任何人來說,掌握一個新的編程語言可能需要一段時間,但一個有經驗的開發人員應該能夠在第一次使用一種新語言后幾天內編寫生產級代碼。
如何選擇編程語言
我們已經確定了語言并不是工作中最重要的部分,你大可不必因為選擇第一個編程語言而糾結,但是,這仍然是你成為一名開發者之前所必須做的,那么,你如何決定呢?這里有一些建議:
(1) 選擇適合領域的語言
有些人一進入計算機科學,就確切的知道他們想要構建什么樣的軟件,如果你屬于這種類型,就選擇該軟件領域最常見的編程語言,如果你想成為一名Web開發人員,學習Javascript,如果你想成為Android開發人員,則可以選擇Kotlin,如果想成為一名數據科學家,你可能更應該了解Python。
(2) 選擇一些簡單的語言
學習算法思維和解決問題的能力已經夠難了,同樣,編程語言應該是一種工具,因此,盡量選擇低級語言像 C++ 這樣的低級語言可能非常強大,而且很實用,但我建議你從 Javascript 或 Python 等腳本語言開始學習,它們的入門門檻極低,可以讓你專心學習核心的編程概念,而不是處理內存管理和底層機器問題。
(3) 選擇好找工作的語言
雖然ALGOL開發人員可能也有市場,但你更應該找一個可以被廣泛采用的現代語言,如果不確定要選擇哪一種編程語言,你就選擇更流行的,這樣一來,當你遇到問題時,有一個強大的社區支持你,同時也會讓你更容易找到第一份工作。
結論
最后我想通過列舉自己的編程語言史來結束這篇文章,認為這很重要,因為我的人生軌跡就是一個活生生的證明。我學的第一門編程語言是C++,其次是Java,這是兩種非常好的語言,擁有龐大的用戶基礎和一些非常強大的項目。但說實話,在過去的10年里,我們沒用它們寫過一行代碼,在我的目前的職業生涯中,我還沒有在非學術環境中使用它們,盡管如此,我依然不后悔學習使用它們,它們是一種工具,為我提供了表達編程概念的方法。
因此,如果你是完美主義者,希望想清楚你應該學習哪種編程語言,那么最終答案是:隨便選擇一種即可。