成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不要相信懂C++的程序員

原創(chuàng) 精選
開發(fā) 前端
在本文一開始,我們就提到C++門檻極高,要想精通更加不易。不過(guò)最新趨勢(shì)又顯示,C++寶刀未老,尚有極大用武之地,那么到底學(xué)還是不學(xué),要不要選C++作為技術(shù)棧,似乎就是個(gè)問(wèn)題。
撰稿丨千山

當(dāng)前,程序員關(guān)于編程語(yǔ)言的選擇很多,Java、Python、C、Rust……直白地說(shuō),你不需要學(xué)習(xí)C++,也完全可以成為一名程序員。

但C++能經(jīng)歷四十余載光陰依然“生龍活虎”,那必然有其道理,所以依然有無(wú)數(shù)或聰明或勤勉或不信邪的有識(shí)之士前仆后繼,選擇挑戰(zhàn)C++。

眾所周知,C++很難。所以有人會(huì)語(yǔ)重心長(zhǎng)告誡后來(lái)者:珍惜生命,遠(yuǎn)離C++。也有人十年勤學(xué)歸來(lái),仍只是低調(diào)地提及“我有一定的C++基礎(chǔ)”。所以絕大部分時(shí)候,自稱自己“懂C++”的人很大概率只是個(gè)“懂王”。

圖源:quickmeme圖源:quickmeme

1、沒(méi)有人可以完全懂C++,C++之父也不能

早在2010年,Joomla開發(fā)組成員Louis Brandy就在其個(gè)人博客發(fā)表過(guò)一篇文章——《永遠(yuǎn)不要相信自稱懂C++的程序員》。沒(méi)想到相關(guān)話題最近在Reddit上又火了。

當(dāng)時(shí),Brandy解釋說(shuō),從C轉(zhuǎn)到C++的程序員會(huì)認(rèn)為他們了解這門語(yǔ)言,因?yàn)樗麄兛梢院芸焓炀毷褂盟!八麄冊(cè)谡f(shuō)謊。當(dāng)一個(gè)程序員繼續(xù)使用C++時(shí),他們會(huì)經(jīng)歷挫折的低谷,在那里他們才會(huì)接受語(yǔ)言的全部復(fù)雜性。”

圖源:Louis Brandy’s blog圖源:Louis Brandy’s blog

在Brandy的示意圖中,可以看到隨著學(xué)習(xí)的深入,越來(lái)越多的問(wèn)題開始涌現(xiàn)在學(xué)習(xí)者面前:令人困惑的模版錯(cuò)誤消息,有點(diǎn)過(guò)于“神奇”的引用類型,不知道怎么用的虛擬析構(gòu)函數(shù),糟糕的異常說(shuō)明符,靜態(tài)對(duì)象初始化問(wèn)題……

他提到,在面試中很容易分辨出C++程序員的學(xué)習(xí)階段。“只要提到C++是一種極其龐大和復(fù)雜的語(yǔ)言,經(jīng)歷低谷后的人可以給你列舉出他們?cè)阢@研這門語(yǔ)言時(shí)經(jīng)歷的127種形形色色的小挫折。”相對(duì)地,還未走過(guò)“絕望峽谷”的人往往持有一種迷之自信,他們通常會(huì)回答:“是的,我想是的。我的意思是,它就像帶有類的C。”

事到如今,C++變得更加像個(gè)包羅萬(wàn)象的龐然大物。對(duì)于Brandy的說(shuō)法,在Reddit論壇上引起了更多的討論。

有人認(rèn)為,Brandy的說(shuō)法有失偏頗。因?yàn)镃++太過(guò)巨大,除了興趣使然或者要賣課賣書的,沒(méi)有人會(huì)學(xué)習(xí)C++的全部知識(shí)。現(xiàn)實(shí)中更多的情況是——根據(jù)自身的需求學(xué)習(xí)某個(gè)知識(shí)子集。

雖然同屬C++領(lǐng)域,但因?yàn)槊總€(gè)人都有不同的知識(shí)子集,所以面試中常會(huì)遇到這種情況:面試官詢問(wèn)求職者他們的C++技能水平,比如按1-10分計(jì)算,自評(píng)分為多少。一般情況下,如果答案高于6,那么就到了談?wù)摷?xì)節(jié)的時(shí)候。只有談?wù)摷?xì)節(jié),才能真正理解每個(gè)人到底掌握的是哪一部分。

圖源:Reddit圖源:Reddit

這一觀點(diǎn)得到了很多網(wǎng)友的認(rèn)同。不少擁有C++多年開發(fā)經(jīng)驗(yàn)的程序員現(xiàn)身說(shuō)法,“了解使用C++并不意味著要了解語(yǔ)言的每一個(gè)細(xì)節(jié)”。

有人坦言:“自2004年以來(lái),我在工作中使用C++作為我的主要語(yǔ)言。但仍然不能說(shuō)我100%知道它。(因?yàn)檫@其中)隱藏著許多錯(cuò)綜復(fù)雜的陷阱。”

更有人勸誡:“沒(méi)有人真正‘懂’C++,如果你想知道程序員的話是否有價(jià)值,問(wèn)他們是否懂C++,如果他們有信心說(shuō)‘是’,那就對(duì)他們所說(shuō)的其他一切持保留態(tài)度。除非你和Bjarne Stroustrup交談。”

不過(guò)很快就有人回復(fù):即使是C++之父,也承認(rèn)過(guò)對(duì)C++并非全知全能。根據(jù)江湖傳說(shuō),Bjarne Stroustrup對(duì)自己C++水平的評(píng)分為7/10。他曾提到,世界上可能只有4個(gè)人完全理解它,但他不是其中之一。

綜合來(lái)看,討論清楚地指出了C++程序員的高標(biāo)準(zhǔn),幾乎沒(méi)有人會(huì)質(zhì)疑C++程序員對(duì)于其他語(yǔ)言的學(xué)習(xí)能力。

2、越過(guò)Java爬至榜三,下一版本節(jié)點(diǎn)已定

1979年誕生的C++固然強(qiáng)大,但畢竟也“年過(guò)不惑”,因此唱衰的聲音一直未絕。我們不時(shí)可以看到“C++已經(jīng)過(guò)時(shí)了”,“C++還能活多久”,以及“C++是否會(huì)被XX語(yǔ)言所取代”等言論。

大佬如Linus Torvalds也曾批評(píng)過(guò)“C++標(biāo)準(zhǔn)太復(fù)雜導(dǎo)致不合格使用者太多,容易誤用和濫用語(yǔ)言特性”,他建議,在系統(tǒng)編程里直接用C就可以,非系統(tǒng)編程里,應(yīng)該選擇一種有垃圾收集的語(yǔ)言,C++語(yǔ)言的特性基本無(wú)用,只會(huì)搗亂。

近年來(lái)大公司如微軟,也在出于內(nèi)存安全性的考慮力挺Rust。去年微軟Azure CTO Mark Russinovich 在推特公開呼吁停止使用C和C++創(chuàng)建新項(xiàng)目。今年5月,微軟透露正基于Rust改寫Windows 11內(nèi)核,部分替代之前的C++,看起來(lái)進(jìn)展良好。

那么C++是真的不行了嗎?并非如此。在TIOBE官網(wǎng)最新公布的7月編程語(yǔ)言排行榜中,C++超越Java位列第三,而且與排名第二的C差距僅為0.76%。

圖源:TIOBE圖源:TIOBE

可見,C++的發(fā)展之勢(shì)依然非常穩(wěn)健,甚至?xí)r不時(shí)會(huì)有略有回升。這種情況下如果還有人覺(jué)得這是一門垂死的語(yǔ)言,不免有點(diǎn)“豬鼻子里插蔥——裝象”的嫌疑。

那么這么多年來(lái),是什么讓C++保持這種長(zhǎng)盛不衰的勢(shì)頭呢?“從小處著手,闡明基本原則,明確長(zhǎng)期目標(biāo),并根據(jù)現(xiàn)實(shí)世界中實(shí)際使用的反饋進(jìn)行開發(fā)。”C++之父如是說(shuō)。

Stroustrup曾表示:“從一開始我就知道,不可能構(gòu)建理想的語(yǔ)言,因此我必須以漸進(jìn)式發(fā)展為目標(biāo):改進(jìn)。說(shuō)真的,我并不相信完美語(yǔ)言的想法:要怎樣就算是完美呢?對(duì)誰(shuí)來(lái)說(shuō)(是完美的)?”為了應(yīng)對(duì)不斷變化的挑戰(zhàn),與時(shí)俱進(jìn)是必須的。

回顧一下歷代版本(C++按發(fā)布年份命名,遵循3年一個(gè)版本周期),可以發(fā)現(xiàn)其中幾個(gè)重要節(jié)點(diǎn)。

C++11:這個(gè)版本可以說(shuō)是C++發(fā)展史中的里程碑。C++11有許多功能從根本上改變了大家對(duì)C++的傳統(tǒng)印象,甚至有人說(shuō)此后的C++都不像C++了。比如,C++11帶來(lái)了TR1的組件,還有移動(dòng)語(yǔ)義,完美轉(zhuǎn)發(fā),可變參數(shù)模板,但這還不是全部。C++11甚至還提供了一個(gè)內(nèi)存模型作為基本的線程基礎(chǔ)和一個(gè)線程API。

C++20:這同樣是個(gè)大版本,帶來(lái)了比C++11更為龐大的更新。以Big Four——概念(Concept)、范圍庫(kù)(Ranges Library)、協(xié)程(Coroutines)、模塊(Module)為代表的新特性帶來(lái)了諸多驚喜。

概念讓你能為模板編寫要求,革新了我們思考和編寫通用代碼的方式;新的范圍庫(kù)使其能夠直接在容器上表達(dá)算法,使用管道符號(hào)組合算法并將其應(yīng)用于無(wú)限數(shù)據(jù)流;協(xié)程能夠以同步語(yǔ)法寫異步代碼的特性,使其成為編寫異步代碼的好工具;模塊將克服頭文件的限制,同時(shí)承諾實(shí)現(xiàn)更快的編譯時(shí)間,以及宏的隔離。

也正是因?yàn)镃++20的大動(dòng)作,導(dǎo)致C++23注定要給C++20修Bug,加上疫情也導(dǎo)致C++23的諸多討論只能在線上進(jìn)行,影響了效率,因而C++23最終缺少T0級(jí)特性,是一個(gè)中等偏小的發(fā)行版。值得注意的是,不久前ISO C++標(biāo)準(zhǔn)委員會(huì)舉行了線上會(huì)議,正式敲定了C++26的時(shí)間表(詳情可見《下個(gè)版本已定!C++自救新動(dòng)作!》),預(yù)計(jì)這將是一個(gè)中等/中等偏大的版本。

綜上所述,你可以說(shuō)C++變得比以前“臃腫”了,也可以說(shuō)它不如鼎盛時(shí)期有活力了,畢竟如今的語(yǔ)言選擇太多了,但是如果說(shuō)它快要滅絕了,顯然是不客觀的。

3、學(xué)還是不學(xué),這是一個(gè)問(wèn)題

在本文一開始,我們就提到C++門檻極高,要想精通更加不易。不過(guò)最新趨勢(shì)又顯示,C++寶刀未老,尚有極大用武之地,那么到底學(xué)還是不學(xué),要不要選C++作為技術(shù)棧,似乎就是個(gè)問(wèn)題。

1)可以不學(xué)

首先,需要明確的是,當(dāng)前編程世界百花齊放,你可以選擇任何適合你的語(yǔ)言。畢竟,編程語(yǔ)言只是程序員在需要時(shí)學(xué)習(xí)的工具。如果Python更適合你,為什么一定要選C++呢?

2)要學(xué)的話,明確適用領(lǐng)域

脫離適用領(lǐng)域討論語(yǔ)言從來(lái)都是空談。如何選擇語(yǔ)言往往取決于你在做什么。“C++從未像Java或JavaScript那樣流行,但其實(shí)也不應(yīng)該將它們放在一起比較,因?yàn)楦饔袑9ァ++不適合快速編寫性能平平的程序。它是為具有運(yùn)行時(shí)要求和獨(dú)立性的持久系統(tǒng)而設(shè)計(jì)的。”這是某位開發(fā)者在Quora的C++話題下的觀點(diǎn),可謂一針見血。在需要極高的性能和控制性的應(yīng)用場(chǎng)景里,比如操作系統(tǒng)、游戲引擎、嵌入式程序等等,C++絕對(duì)當(dāng)仁不讓。

3)對(duì)難度做好預(yù)期

C++是公認(rèn)的較難學(xué)習(xí)的編程語(yǔ)言,有人戲稱,“在C++中你找不到任何一件簡(jiǎn)單的事”。所謂的“X天速成”“X課包會(huì)”顯然不適用于此。

圖片圖片

圖源:Reddit

在線學(xué)習(xí)平臺(tái)Springboard曾比較過(guò)“最難學(xué)習(xí)的5種編程語(yǔ)言”,C++力壓Prolog、Haskell,成為Top1。主要理由是:

  • 它具有復(fù)雜的語(yǔ)法以支持多功能性
  • 它是一種寬容的語(yǔ)言——你可以做任何技術(shù)上可能的事情,即使邏輯上不正確
  • 最好由已經(jīng)有 C 編程基礎(chǔ)的人來(lái)學(xué)習(xí)

4、學(xué)好C++有哪些額外回報(bào)

開發(fā)框架Neutralinojs的作者Shalitha Suranga曾在博客中表示,“學(xué)習(xí)C++是所有努力成為編程專家的程序員的必修課”。為此,他列舉了學(xué)習(xí)C++的若干豐厚回報(bào)。

激勵(lì)你學(xué)習(xí)計(jì)算機(jī)科學(xué)基礎(chǔ)知識(shí)。C++提供了比C語(yǔ)言更高級(jí)、對(duì)人更友好的抽象。但是,C++鼓勵(lì)人們像C語(yǔ)言一樣使用指針和手動(dòng)管理內(nèi)存。另外,C++標(biāo)準(zhǔn)庫(kù)的設(shè)計(jì)注重計(jì)算機(jī)科學(xué)概念、性能和靈活性,而不是僅僅注重開發(fā)的便利性。

構(gòu)建輕量級(jí)、高性能的解決方案。大多數(shù)現(xiàn)代編程語(yǔ)言專注于用類似偽代碼的語(yǔ)法來(lái)隱藏底層技術(shù)細(xì)節(jié),而在性能、輕量化和靈活性方面考慮不多。但是,C++仍然可以生成輕量級(jí)的二進(jìn)制文件,是編寫性能優(yōu)先的軟件系統(tǒng)的最佳選擇。

讓你更快地學(xué)習(xí)其他編程。C++是一種多范式、多功能的編程語(yǔ)言。換句話說(shuō),你可以在用C++編寫代碼時(shí)制定自己的編程風(fēng)格和最佳實(shí)踐。學(xué)習(xí)C++標(biāo)準(zhǔn)庫(kù)和開發(fā)模式需要扎實(shí)的計(jì)算機(jī)科學(xué)知識(shí)和技術(shù)能力。因此,當(dāng)你精通C++時(shí),學(xué)習(xí)一門新語(yǔ)言往往輕松許多。

與操作系統(tǒng)API交互的最佳語(yǔ)言。每個(gè)操作系統(tǒng)都為開發(fā)者提供了一個(gè)可編程接口,用于處理操作系統(tǒng)級(jí)的操作。所有這些API都暴露了基于C/C++的接口,因?yàn)槊總€(gè)操作系統(tǒng)都是用C/C++編寫的。

有助于做出更好的技術(shù)決策。解決編程問(wèn)題的方案往往不止一種。C++很復(fù)雜、速度快,但讓程序員可以充分控制程序的執(zhí)行,按照自己的意愿優(yōu)化代碼。因此,你需要謹(jǐn)慎地作出技術(shù)決策,根據(jù)自己的偏好,為自己的需求選擇最佳的C++特性。

參考鏈接

https://www.tiobe.com/tiobe-index/

https://analyticsindiamag.com/dont-trust-a-programmer-who-knows-c/

http://modernescpp.com/index.php/c-23-the-next-c-standard

https://www.springboard.com/blog/software-engineering/top-programming-languages/

https://levelup.gitconnected.com/why-every-programmer-should-learn-c-during-their-careers-959e1bc2ea68

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

2012-11-08 09:49:30

C++Java程序員

2013-04-22 09:05:11

程序員

2021-02-26 10:41:59

C++程序員代碼

2013-04-09 09:54:34

程序員

2010-01-12 10:40:22

C++程序員

2010-01-14 18:07:30

C++語(yǔ)言

2016-03-25 11:57:23

Java程序員C++

2010-01-12 14:30:41

C++程序

2011-11-02 09:57:28

程序員

2020-11-11 11:25:27

Redis數(shù)據(jù)技術(shù)

2011-05-24 17:20:57

程序員

2011-03-30 09:26:20

c++程序員

2010-01-14 13:24:49

CC++語(yǔ)言

2016-11-07 20:43:37

C程序員Protocol Bu

2020-12-08 10:35:29

程序員IT數(shù)據(jù)分析

2010-04-01 09:17:02

C++程序員

2011-04-26 10:00:23

C語(yǔ)言程序員

2020-12-11 07:10:03

程序員

2019-11-18 10:16:37

工程師開發(fā)網(wǎng)絡(luò)

2011-12-20 09:01:25

.NET
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 青青久久久 | 91中文字幕 | 伊人在线| 日韩中文字幕久久 | 久久久久国产精品一区二区 | 国产黄色大片在线观看 | 国产成人精品午夜 | 成人做爰www免费看视频网站 | 一区二区三区在线免费观看视频 | 91日韩| 欧美高清视频 | 亚洲在线免费 | 中文字幕在线观看www | 精品国产乱码久久久久久影片 | 国产精品久久久久久久久久久久冷 | 精品国产一区二区在线 | 久久亚洲精品国产精品紫薇 | 久久乐国产精品 | 日韩爱爱网 | 国产一级在线观看 | 亚洲人成人一区二区在线观看 | 狠狠久| 亚洲一区在线播放 | 欧美影院| 亚洲视频国产视频 | 国产日韩一区二区三免费高清 | 午夜免费视频观看 | 日韩精品在线看 | 欧美精品一区二区免费视频 | 亚洲精品在线国产 | 亚洲人人 | 成年人免费在线视频 | 91亚洲精品国偷拍自产在线观看 | 日日夜夜精品视频 | 日韩成人影院 | 在线视频一区二区 | 国产日韩欧美一区二区 | 中文字幕av中文字幕 | 日韩中文在线 | 日日欧美 | 精品欧美一区二区三区免费观看 |