自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

首選C++,徹底麻了!

譯文 精選
開發(fā) 前端
如果我可以重新開始我的旅程,我會選擇不同的道路嗎?當(dāng)然,我會直接跳到Python或web開發(fā),但考慮到我的興趣和專業(yè)領(lǐng)域,我最終還是會選擇C++。

作者丨SteelPh0enix

編譯丨諾亞

出品 | 51CTO技術(shù)棧(微信號:blog51cto)

“作為初學(xué)者,我應(yīng)該選擇什么語言?”

網(wǎng)上沖浪時,我經(jīng)常看到上面這樣的疑問。作為一個同樣在這個選擇上掙扎許久的人,我最終選擇了C++。我想,我可以就這個特定的選擇以及它如何影響我之后的學(xué)習(xí)談一下個人看法。

本文將圍繞以下四點展開:

  • 這是個陷阱!
  • 你為什么要這么做?
  • 那么,還有什么其他選擇呢?
  • 當(dāng)真正有意義的時候,再將C++作為首選

一、這是個陷阱!

通常來說,選擇C++作為你的初始語言并不是一個好主意。在用C++工作了很長一段時間,并嘗試了許多不同的編程語言之后,我覺得C++就像是用劣質(zhì)膠帶粘在一起的一團亂麻,不知怎么地仍然堅持著,甚至可能在最近的變化中朝著相對較好的方向發(fā)展,但對于初學(xué)者來說,真的算不上一個好選擇。

二、你為什么要這么做?

在大多數(shù)情況下,我總是會聽到一些具體的論點,試圖努力地證明選擇C++作為入門也不錯。比如:

1.它非???!

這是很常見的誤解。語言本身并沒有快慢之分。當(dāng)然,有些語言可以比其他語言更快地解析或解釋,但這并不意味著用語言A編寫的程序總是比用語言B編寫的程序快,反之亦然。一個好的做法是問自己“為什么?”和“什么時候?”為什么用A語言編寫的程序可能比用B語言編寫的同等程序更快/更慢?它在多大程度上對性能有意義?但這不是新手應(yīng)該關(guān)心的事情。一般來說,作為初學(xué)者,你不應(yīng)該關(guān)心“語言性能”,因為這是你在學(xué)習(xí)編程時最不需要擔(dān)心的事情之一。一開始,真正的性能主要取決于代碼中使用的數(shù)據(jù)結(jié)構(gòu)和算法,而不是語言的選擇。   

2.學(xué)習(xí)C++會教你一些底層的概念,比如指針和手動內(nèi)存管理!

它的確可以,但是問題在于:你大多數(shù)時候不需要知道這些低級的概念來編寫軟件和學(xué)習(xí)編程。每天都有成千上萬的程序員在不知道指針是什么,或者如何手動管理內(nèi)存的情況下編寫出完美而有效的代碼。這并不是為了編寫工作代碼而必須知道的東西。這對你來說可能永遠(yuǎn)都沒有用。固然,知道指針和手動內(nèi)存管理在很多情況下是有用的,但對于初學(xué)者來說,這不是剛需,因為即使在C++中,你通常也不想手動管理原始指針和內(nèi)存分配。

3.游戲編程是在C++中完成的——通常伴隨著“性能”參數(shù)。

這個論點有時也站不住腳,因為有許多非常流行的游戲引擎提供了一種更適合新手的游戲開發(fā)方法。Godot是最好的例子之一,因為它有自己的工具集,可以使用自己的GDScript語言,也可以與其他語言和工具一起使用。我知道有很多人在使用C++進行游戲開發(fā),他們也有自己的觀點——相對接近硬件。但我仍然堅信,如果你想學(xué)習(xí)“編程”和“游戲開發(fā)”,這可能適得其反,因為在學(xué)習(xí)你真正想學(xué)的東西之前,它帶有“必須學(xué)習(xí)C++”的沉重包袱。

4.我懂一些C語言,所以C++只是一個擴展,所以我會學(xué)習(xí)它。

事實并非如此,這樣的想法會迫使你走上一條很難回頭的道路。注意,不要把C++看作是C的補充,因為這就像把龍看作是他珍貴的金山的補充一樣愚蠢。如果執(zhí)意如此,你將目睹你無法理解的恐怖。

四、那么,還有什么其他選擇呢? 

除了C++之外,還有什么選擇?關(guān)于這個問題,我將根據(jù)個人觀點來回答,我也會努力解釋為什么我是這樣想的。

1.Python

有些人會告訴你Python很爛。然而,我要告訴你,我喜歡Python,因為它很少讓我失望。當(dāng)我需要寫一個簡單的工具來自動做一些事情,我希望它在任何地方都能工作時,Python 就是我的夢中情“語”。

它的長期支持、龐大的社區(qū)、包管理器和現(xiàn)有的工具使我很難不向初學(xué)者推薦這門語言。它的語法確實非常具體,有些人甚至?xí)f它很奇特,但是在使用它一段時間后,只有當(dāng)我不得不將代碼塊移動到不同的位置并手動修復(fù)每個縮進時,它才會讓我感到惱火。它甚至有類型提示和易于使用的工具,以確保你遵守鍵入規(guī)則,有些人可能會覺得非常有用。

不過,對于初學(xué)者來說,你很可能希望將重點放在龐大的PyPI存儲庫上,以便為自己編寫一些有用的東西。它的文檔也相對不錯,甚至有一個教程讓你入門,但如果你完全是IT新手,我建議你尋找一個更適合你的知識水平的入門教程,因為“官方”的教程不是很面向新手。

2.JavaScript

它是通往廣闊 Web 應(yīng)用程序世界的非常簡單的門戶,但不僅如此,因為現(xiàn)在你幾乎可以在任何地方插入 JavaScript......我個人不是這種語言的粉絲,但從我所看到的,我發(fā)現(xiàn)從 JavaScript 開始的人有一定的“自由”,可以在他們想要的任何地方使用這種語言。我更支持JavaScript作為初學(xué)者,而不是C++,但是要注意這種語言自帶的許多陷阱。這基本上適用于任何語言,但大開發(fā)不會告訴你這一點!

3.Kotlin

如果你想學(xué)習(xí)Java,不管你有什么緊迫的理由,盡量放棄Java,學(xué)習(xí)Kotlin吧!如果你想制作Android應(yīng)用程序,并且你更愿意使用官方工具而不是一些web開發(fā)工具,Kotlin就是你的理想之選。它的Java遺產(chǎn)使它成為一種相當(dāng)不錯的入門語言,因為你既有一門漂亮的現(xiàn)代語言,也有很好的現(xiàn)代語法和有用的功能,使用起來非常愉快,還有一個龐大的庫存儲庫,其中一些庫在Kotlin出現(xiàn)之前很久就編寫了。我很少使用這門語言,但我?guī)缀跸硎苁褂盟拿恳豢獭?/p>

4.C

你想和你的硬件保持密切的關(guān)系嗎?如果是,這就是一門合心意的語言。平心而論,C確實缺乏真正的泛型,但這并不妨礙人們現(xiàn)在使用它。

這份清單絕不是全面的。有很多被認(rèn)為“適合初學(xué)者”的語言沒有出現(xiàn)在這個列表中,只是因為我從來沒有使用過它們,或者工作了太久,以至于我的知識儲備已經(jīng)不適應(yīng)其當(dāng)前的發(fā)展?fàn)顟B(tài)(比如C#,我想說點什么,但我真的不能)。

請注意,我在這里的重點是推薦一種相對容易學(xué)習(xí)和使用的語言,基本標(biāo)準(zhǔn)是它有一個大的社區(qū)和大量的學(xué)習(xí)資源。C++在這些方面都缺乏,這使得以“正確”的方式學(xué)習(xí)現(xiàn)代C++變得異常困難。而且,公平地說,這使得在C++中做任何事情都變得不合理地復(fù)雜和痛苦。

曾經(jīng)嘗試過從頭開始設(shè)置具有自動單元和集成測試的C++項目嗎?我做了,但都以失敗告終。不是因為這是不可能的,而是因為我寧愿選擇一種支持開箱即用的語言(至少是單元測試)。

四、當(dāng)真正有意義的時候,再將C++作為首選

任何規(guī)則都有例外,當(dāng)然也包括我的“不允許初學(xué)者使用C++”規(guī)則。

對我來說,最明顯的例外是把嵌入式編程作為你想做的事情。這也是為什么C在我的列表上的原因——因為C比C++簡單得多,所以它開始可能是一個更好的主意。但是,如果你想使用Arduino,就像現(xiàn)在大多數(shù)初學(xué)者一樣,只堅持使用C沒有什么意義,因為你已經(jīng)可以訪問C++中功能強大且相對易于使用的功能(并且可能必須使用,這取決于你使用的庫)。當(dāng)然,你可能沒有標(biāo)準(zhǔn)庫及其花哨的功能(我認(rèn)為這是一件好事),但你仍然擁有模板、lambda表達式、constexpr和許多更酷的功能。如果你想擺弄硬件,那么學(xué)習(xí)C++對你來說可能是不可避免的。

另一個明顯的情況是“你必須學(xué)習(xí)它,因為學(xué)校/大學(xué)/工作/我和一些C++開發(fā)人員一起做的業(yè)余項目”?;蛘吣憧赡苤皇欠浅?、非常、非常強烈地、奇怪地專注于學(xué)習(xí)C++。對此,我沒有解藥。我只有一個建議:盡量堅持使用現(xiàn)代的資源,不要被過時的、早于C++11的教程和那些名聲可疑的書籍所吸引。

而且我真的想不出還有什么其他的情況能讓C++真正有意義。

不久前,我曾說OS-dev是一個很好的利基,但你也可以用C來做OS-dev,還有別忘了Rust,如果你問我的話,我認(rèn)為這比C++更明智。借用檢查器可能很難,但它就在那里,永遠(yuǎn)不會離開你。你想從C或C++中得到同樣的承諾嗎?還是自行配置吧。而且它還不如Rust為你的代碼所做的一半好。圖形編程和游戲開發(fā)?是的,也許吧。如果你仍然年輕天真,這聽起來是個不錯的選擇——你甚至可能毫發(fā)無損地走完這條路。但話又說回來,你可能不會。我還是會先看看其他的選擇,因為很多人用C++做,并不意味著你也必須用C++做。

我可能聽起來像一個非常討厭C++的人,說實話,也不盡然。我花了好幾年的時間學(xué)習(xí)這種語言,其中一半的時間我都在與它抗?fàn)?。我會后悔?我很后悔沒有早點改變方向,但我想說的是,我從C++中學(xué)到的很多東西在某些時候都很有用。我能在學(xué)習(xí)不同語言的同時學(xué)習(xí)這些東西嗎?是的,其中一些,但不是全部。

如果我可以重新開始我的旅程,我會選擇不同的道路嗎?當(dāng)然,我會直接跳到Python或web開發(fā),但考慮到我的興趣和專業(yè)領(lǐng)域,我最終還是會選擇C++。

我也不是說永遠(yuǎn)不應(yīng)該學(xué)習(xí)或使用C++。它有自己的東西,有一定的通用編程經(jīng)驗和建立軟件項目的經(jīng)驗,就有可能使用它。但是你首先需要這些經(jīng)驗和知識,與其他可用的方法相比,在C++上一條道走到黑可能無助于你獲得這些知識。

參考鏈接:https://steelph0enix.github.io/posts/choosing-first-language/?ref=dailydev

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2021-12-26 21:49:19

微信面試參數(shù)

2023-02-08 07:05:44

2024-01-23 18:50:28

UbuntuRust語言

2022-07-27 10:34:29

GoogleC++系統(tǒng)

2020-01-21 22:25:00

機器學(xué)習(xí)人工智能計算機

2023-11-03 08:10:49

ThreadLoca內(nèi)存泄露

2024-01-15 07:05:50

開發(fā)大事務(wù)數(shù)據(jù)庫

2023-05-11 08:08:18

MySQL主從復(fù)制

2022-12-16 15:25:00

AIScience

2011-07-14 17:45:06

CC++

2022-08-14 20:57:49

多線程代碼

2023-09-26 08:36:31

ES6 模塊JS 題目

2010-01-21 14:07:14

CC++聲明

2010-01-21 09:34:57

C++語法

2010-01-27 16:05:06

C++堆棧

2024-02-22 10:34:00

NULLC++nullptr

2021-08-12 11:05:07

C++語言內(nèi)存泄露

2024-02-18 12:39:15

C++autodecltype

2010-01-26 15:51:06

C++變量

2011-07-15 00:47:13

C++多態(tài)
點贊
收藏

51CTO技術(shù)棧公眾號