<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          轉(zhuǎn)行了!

          共 5996字,需瀏覽 12分鐘

           ·

          2021-11-15 09:25

          大家好,我是二哥呀。

          微信上收到一個(gè)讀者的私信,他正在一所 985 高校讀研,專(zhuān)業(yè)是機(jī)械工程,想轉(zhuǎn)行做軟件開(kāi)發(fā),問(wèn)我該選擇 C++ 還是 Java

          那考慮到還有不少讀者有類(lèi)似的問(wèn)題,我這里就把我之前的回答整理一下發(fā)出來(lái),希望能給大家一些參考和啟發(fā)~

          一、編程語(yǔ)言之間的區(qū)別

          眾多的編程語(yǔ)言(C/C++、Java、Python、JavaScript)當(dāng)中,到底哪一門(mén)適合自己?其實(shí)會(huì)困擾很多初學(xué)者。借這個(gè)機(jī)會(huì),就簡(jiǎn)單給大家普及下。

          C語(yǔ)言就好像是編程界的大叔,因?yàn)槟觊L(zhǎng)、穩(wěn)重,被尊稱(chēng)為前輩。它更偏向于底層,用于系統(tǒng)和硬件編程。

          C++算是 C語(yǔ)言的同室宗親,從小就受到 C語(yǔ)言的各種關(guān)照,自己也比較上進(jìn),練就了無(wú)數(shù)禁咒級(jí)別的魔法,擁有更強(qiáng)大的力量,廣泛應(yīng)用于游戲開(kāi)發(fā),以及追求極致性能的應(yīng)用開(kāi)發(fā)。

          Java 雖然在名字上和 C/C++ 風(fēng)馬牛不相及,但其實(shí)有著頗深的淵源。Java 更喜歡跨平臺(tái),也更愿意設(shè)身處地地為他人著想,所以在編程語(yǔ)言中的呼聲很高,有帝王之相。Java 可以用來(lái)做網(wǎng)站、做軟件、做安卓、做游戲,幾乎可以勝任所有工作。

          Python 看起來(lái)似乎很年輕,但其實(shí)比 Java 還要年長(zhǎng)幾歲,隨著大數(shù)據(jù)、人工智能的興起,Python 重新贏(yíng)得了人們的青睞和信任,屬于典型的大器晚成,在人工智能、深度學(xué)習(xí)、自然語(yǔ)言處理等領(lǐng)域有著得天獨(dú)厚的優(yōu)勢(shì)。

          JavaScript 從名字上看好像是 Java 的小弟,但它們之間的關(guān)系也僅限于此。JavaScript 面向的是前端開(kāi)發(fā)者,可以說(shuō)有瀏覽器的地方就離不開(kāi) JavaScript。

          對(duì)于初學(xué)者來(lái)說(shuō),如果非要選擇一門(mén)編程語(yǔ)言來(lái)作為入門(mén)語(yǔ)言的話(huà),我認(rèn)為 C++ 應(yīng)該排在最后。從崗位的選擇上來(lái)看,前端無(wú)疑選擇 JavaScript,后端可選 C語(yǔ)言和 Java,算法選擇 Python。等有了 C語(yǔ)言的基礎(chǔ)后,再學(xué) C++ 的阻力就會(huì)小很多。

          JavaScript 在這些編程語(yǔ)言當(dāng)中是最特殊的,代碼編寫(xiě)、代碼運(yùn)行和代碼調(diào)試都可以直接在瀏覽器的開(kāi)發(fā)者模式下進(jìn)行,對(duì)于初學(xué)者來(lái)說(shuō),這一點(diǎn)極其重要,因?yàn)榱钊诵臒┑拈_(kāi)發(fā)環(huán)境配置就省去了。

          C++ 和 Java 之間的區(qū)別可以追溯到它們各自的傳統(tǒng),如果想知道 C++ 和 Java 之間有哪些細(xì)微的區(qū)別,可以到維基百科上看這個(gè)條目:

          https://zh.wikipedia.org/wiki/Java%E5%92%8CC%2B%2B%E7%9A%84%E5%B0%8D%E7%85%A7

          二、學(xué)C++的看不起 Java的?

          為了幫大家對(duì)編程語(yǔ)言有一個(gè)初步的認(rèn)知,前面順帶分析了C語(yǔ)言、Python 和 JavaScript。針對(duì)讀者微笑的情況,我們來(lái)重點(diǎn)討論一下 C++ 和 Java。

          編程界有一個(gè)固有的偏見(jiàn),就是大多數(shù)人會(huì)默認(rèn) C++ 可以輕松轉(zhuǎn) Java,但 Java 轉(zhuǎn) C++ 很難。理由是,Java 程序員在軟件工程上的修煉比 C++ 更充分,但在內(nèi)存管理和硬件優(yōu)化上有著明顯的不足。

          但 Gosling 曾說(shuō)過(guò)一句話(huà):“語(yǔ)言只是實(shí)現(xiàn)目標(biāo)的工具,而不是目標(biāo)本身。”

          因此,我們學(xué)編程的這群人不應(yīng)該有這種偏見(jiàn),應(yīng)該針對(duì)自身的情況,做出最有利于自己的選擇,因?yàn)槊恳环N編程語(yǔ)言都有自己的應(yīng)用領(lǐng)域,而每個(gè)人的能力又千差萬(wàn)別。

          如果你是計(jì)算機(jī)科班生,天賦很高,自己對(duì)編程也有濃厚的興趣愛(ài)好,也想挑戰(zhàn)自己,那么可以選擇 C++。

          C++ 的應(yīng)用范圍非常廣,能應(yīng)對(duì)多方面的需求,比如說(shuō)網(wǎng)絡(luò)、通訊、圖像、游戲、桌面等等,像操作系統(tǒng)的部分內(nèi)核也都是由 C++ 編寫(xiě)的。Java 的 Hotspot 虛擬機(jī),整體上都是用 C++ 實(shí)現(xiàn)的,只有非常少量的匯編。

          除此之外,下面這道選擇題無(wú)疑更富有哲理性:

          Java 相比較于 C++,除了語(yǔ)言本身之外,我覺(jué)得最大的優(yōu)勢(shì)在于 Java 擁有著強(qiáng)大而豐富的開(kāi)源生態(tài),就 Spring 這一體系的框架足以吊打任何對(duì)手。

          英語(yǔ)里有個(gè)單詞——accountable,這東西不太好翻譯,直譯比較難把真正要表達(dá)的意思傳遞出來(lái),用通俗一點(diǎn)的話(huà)講,叫做——指望得上。

          Java 就是一種指望得上的編程語(yǔ)言

          往小了說(shuō),個(gè)人開(kāi)發(fā)者可以到 GitHub 上 down 下來(lái)一套源碼,改上三五個(gè)月,就能交付一套成熟而完善的系統(tǒng)。

          往大了說(shuō),阿里這家國(guó)內(nèi)互聯(lián)網(wǎng)頭部公司,主要的技術(shù)棧就是 Java,就不說(shuō)它的產(chǎn)品了,光它的開(kāi)源項(xiàng)目,我都能掰扯一整天。

          • Canal,主要用途是基于 MySQL 數(shù)據(jù)庫(kù)增量日志解析,提供增量數(shù)據(jù)訂閱和消費(fèi)。
          • EasyExcel,一款快速、簡(jiǎn)單避免 OOM 的 java 處理 Excel 工具。
          • Arthas,一款能夠分析、診斷、定位 Java 應(yīng)用問(wèn)題的診斷工具。
          • FastJson,一款json 解析庫(kù),幾乎由溫少一人開(kāi)發(fā)和維護(hù),強(qiáng)的一筆。
          • Druid,為監(jiān)控而生的數(shù)據(jù)庫(kù)連接池。
          • Nacos,一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。
          • RocketMQ,一款高性能、高可靠、高實(shí)時(shí)、分布式的消息隊(duì)列,目前已成為 Apache 的一個(gè)頂級(jí)項(xiàng)目。
          • Dubbo,一款高性能、輕量級(jí)的開(kāi)源 Java RPC 框架

          如果你肯花一點(diǎn)時(shí)間到 GitHub 或者碼云上逛一逛的話(huà),就會(huì)發(fā)現(xiàn),原來(lái) Java 的世界如此龐大和美好!

          有人說(shuō),C++比 Java 難學(xué),但其實(shí)要加一個(gè)前提條件,就是如果你不下狠功夫,不去花時(shí)間和精力的話(huà),不管是 C++,還是 Java,都很難學(xué)。很多初學(xué)者在遇到 C++ 中的指針、虛函數(shù)、動(dòng)態(tài)綁定的時(shí)候,會(huì)怵得慌,我敢肯定,他在遇到 Java 中的并發(fā)編程、JVM 時(shí)也會(huì)怵得慌。

          只不過(guò),Java 對(duì)于初學(xué)者更友好一點(diǎn),C++ 對(duì)高階程序員更開(kāi)放一點(diǎn)。

          當(dāng)然了,無(wú)論選擇哪一門(mén)編程語(yǔ)言,我覺(jué)得抽象思維能力是非常的重要的,這也是計(jì)算機(jī)領(lǐng)域最重要和最基礎(chǔ)的能力。你得把現(xiàn)實(shí)世界里復(fù)雜的問(wèn)題抽象化,然后轉(zhuǎn)換成計(jì)算機(jī)能夠運(yùn)行的語(yǔ)言,從高級(jí)編程語(yǔ)言,再到匯編語(yǔ)言,最后到機(jī)器語(yǔ)言。

          三、到底該選擇 C++ 還是 Java

          看到這,大家不會(huì)以為二哥是個(gè) Javaer,就推薦讀者選擇 Java 了吧?

          這個(gè)讀者的情況是,他之前已經(jīng)把 C++ 的基本編程語(yǔ)法學(xué)完了,希望能找一個(gè)計(jì)算機(jī)和機(jī)械結(jié)合的工作,所以我給他的建議是繼續(xù)學(xué)習(xí) C++。

          因?yàn)樗旧淼膶W(xué)歷是過(guò)關(guān)的,985 的研究生,盡管是非科班,但編程的門(mén)檻已經(jīng)可以輕松跨過(guò)了。再加上他想要從事計(jì)算機(jī)和機(jī)械相結(jié)合的工作,那 C++ 無(wú)疑是更合適的,畢業(yè)后可以轉(zhuǎn)型做工業(yè)領(lǐng)域的 C++ 軟件開(kāi)發(fā),很多工業(yè)軟件方面招C++的挺多的。

          機(jī)械專(zhuān)業(yè)有C語(yǔ)言的功底,學(xué)習(xí) C++ 以及數(shù)據(jù)結(jié)構(gòu)與算法就不會(huì)有特別大的阻力。再加上有單片機(jī)的基礎(chǔ),深入搞一下 Linux 往嵌入式方向發(fā)展也是可以的。

          或者可以轉(zhuǎn)機(jī)器人、自動(dòng)駕駛,因?yàn)楹芏嗟讓拥目刂扑惴◣?kù)是都是基于C/C++開(kāi)發(fā)的,比如快速傅里葉變換算法、矩陣計(jì)算、特征值求解等等。機(jī)器人非常關(guān)鍵的一點(diǎn)是對(duì)性能非常苛刻,性能要求嚴(yán)格的地方,C/C++就是王者。

          再或者可以直接轉(zhuǎn) Linux C++ 服務(wù)器端開(kāi)發(fā)(也就是在 Linux 進(jìn)行 C++編程),這條路也是非常吃香的。

          四、C++ 學(xué)習(xí)資料推薦

          學(xué)習(xí) C++ 語(yǔ)法,首推《C++ Primer 第五版》。我在參加第一份工作的時(shí)候,就買(mǎi)過(guò)一本《C++ Primer 第四版》,這本書(shū)一直不舍得扔,盡管它已經(jīng)非常破了,但我們之間的感情是深厚的,畢竟跟隨我輾轉(zhuǎn)了好幾個(gè)城市了。

          這本書(shū)非常全面地講解了 C++ 的語(yǔ)法以及 C++ 的各種特性,如果能堅(jiān)持看完的話(huà),幫助會(huì)很大。如果時(shí)間比較充分的話(huà),建議至少看兩遍。如果時(shí)間比較緊張的話(huà),至少通讀一遍吧,要能把握住這本書(shū)的大體框架,然后結(jié)合個(gè)人的實(shí)際情況選擇性地看一些重點(diǎn)章節(jié)。

          然后是《Effective C++》,侯捷老師譯的,這本書(shū)主要講解了編寫(xiě) C++ 代碼需要注意的一些條款,和《Effective Java》 屬于同一個(gè)系列。

          第三本是《STL源碼剖析》這本書(shū),侯捷老師寫(xiě)的,這本書(shū)講了C++的底層實(shí)現(xiàn),包括各種容器(vector、list、heap、deque、Red Black tree、hash table、set/map)的實(shí)現(xiàn)、各種常見(jiàn)算法(排序、查找、排列組合、數(shù)據(jù)移動(dòng)與復(fù)制技術(shù))的實(shí)現(xiàn)等。

          第四本《深度探索C++對(duì)象模型》,侯捷老師譯的,這本書(shū)講解了 C++ 面向?qū)ο筇匦缘牡讓訉?shí)現(xiàn)機(jī)制,讀起來(lái)雖然有點(diǎn)晦澀,但讀完后就會(huì)搞明白“代碼跑起來(lái)的時(shí)候?qū)嶋H發(fā)生了什么”。

          既然有三本書(shū)都是侯捷老師的,那再刷一刷侯捷老師的視頻,豈不是效果更佳?不過(guò),由于涉及到版權(quán),國(guó)內(nèi)的 B 站、A 站都下架了相關(guān)的視頻資源,包括:

          • 《C++面向?qū)ο蟾呒?jí)編程》
          • 《STL》
          • 《C++ 內(nèi)存管理》
          • 《C++ 11 新特性》
          • 《C++ 程序的生前死后》

          我從網(wǎng)上 down 了一份,保存到了本地。大家需要的話(huà),可以在后臺(tái)回復(fù)「侯捷」關(guān)鍵字拉取下載鏈接。

          五、計(jì)算機(jī)基礎(chǔ)

          其實(shí)不管是學(xué)習(xí) Java,還是學(xué)習(xí) C++,還是任何一門(mén)其他的編程語(yǔ)言,有時(shí)間有精力的話(huà)都要學(xué)習(xí)計(jì)算機(jī)基礎(chǔ)。

          1)數(shù)據(jù)結(jié)構(gòu)與算法

          我畫(huà)了一張腦圖,里面幾乎涵蓋了所有數(shù)據(jù)結(jié)構(gòu)與算法書(shū)籍中都會(huì)講到的知識(shí)點(diǎn)。

          書(shū)的話(huà)推薦小爭(zhēng)哥的《數(shù)據(jù)結(jié)構(gòu)與算法之美》,由淺入深的一本書(shū),讀起來(lái)就像打游戲刷boss一樣,沒(méi)有其他算法書(shū)那種嚼蠟感。

          視頻課的話(huà)推薦浙大的數(shù)據(jù)結(jié)構(gòu)課,講解簡(jiǎn)明易懂,B 站和 mooc 上都可以觀(guān)看。

          https://www.bilibili.com/video/av18586085/

          學(xué)的差不多后就到 LeetCode 上刷題,刷題的過(guò)程中可以同步學(xué)習(xí) STL 源碼剖析,雙管齊下后的結(jié)果就是你在編寫(xiě) C++代碼的時(shí)候更加游刃有余。

          刷題可以分為兩種方法,一種超級(jí)兔子系,一種超級(jí)烏龜系。兔系追求的是暴力,可以照著答案去刷,刷多了就自己慢慢領(lǐng)悟了;龜系講究的是質(zhì)量,追求最優(yōu)解,一道題可能要做多種解法。

          2)操作系統(tǒng)

          操作系統(tǒng)是管理計(jì)算機(jī)硬件和軟件資源的程序,是計(jì)算機(jī)的基石,也是校招面試中考察的核心知識(shí)點(diǎn)。當(dāng)學(xué)了 C++ 基礎(chǔ)語(yǔ)法后,再加上數(shù)據(jù)結(jié)構(gòu)與算法的基礎(chǔ),操作系統(tǒng)這塊硬骨頭就不那么難啃了。

          推薦兩門(mén)視頻課,先看一門(mén)國(guó)內(nèi)的,再看一門(mén)國(guó)外的,中西合璧,藥效持久。

          國(guó)內(nèi)的推薦哈工大的《操作系統(tǒng)》實(shí)驗(yàn)課,分為四個(gè)部分:

          01、操作系統(tǒng)基礎(chǔ)篇

          https://mooc.study.163.com/course/1000002004

          02、操作系統(tǒng)之進(jìn)程與線(xiàn)程

          https://mooc.study.163.com/course/1000002008

          03、操作系統(tǒng)之內(nèi)存管理

          https://mooc.study.163.com/course/1000003007

          04、操作系統(tǒng)之外設(shè)與文件系統(tǒng)

          https://mooc.study.163.com/course/1000002009

          國(guó)外的推薦 MIT(麻省理工學(xué)院)的 6.S081(Introduction to Operating System,操作系統(tǒng)導(dǎo)論)這門(mén)課:

          https://www.bilibili.com/video/BV19k4y1C7kA

          可以配合這份 30 萬(wàn)字左右的中文在線(xiàn)閱讀文檔一起刷,

          https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/

          我還整理了一份操作系統(tǒng)的核心知識(shí)點(diǎn),大家需要的話(huà),可以在后臺(tái)回復(fù)「操作系統(tǒng)」關(guān)鍵字拉取下載鏈接。

          針對(duì) Linux 的話(huà),可以先看《鳥(niǎo)哥的 Linux 私房菜》,主要是了解基本的 Linux 命令,進(jìn)一步學(xué)習(xí)的話(huà),可以看《UNIX環(huán)境高級(jí)編程》,如果還想對(duì) Linux 內(nèi)核原理進(jìn)行深度學(xué)習(xí)的話(huà),可以看一下《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》,這本書(shū)可以幫助你快速建立起比較完善的知識(shí)框架。


          3)計(jì)算機(jī)網(wǎng)絡(luò)

          計(jì)算機(jī)網(wǎng)絡(luò)和操作系統(tǒng)有一個(gè)共同點(diǎn),就是它們有著相當(dāng)復(fù)雜的體系結(jié)構(gòu),很多初學(xué)者都會(huì)覺(jué)得比較難,那可能是沒(méi)有產(chǎn)生足夠的求知欲。

          也許你可以這樣問(wèn)自己一下:那些 P 站上的小電影,是怎么傳輸過(guò)來(lái)的呢?

          這么一問(wèn),是不是瞬間就支棱起來(lái)了?

          入門(mén)的話(huà),推薦三本書(shū),《圖解 HTTP》、《圖解 TCP/IP》、《網(wǎng)絡(luò)是怎樣連接的》。第三本書(shū)雖然名字上沒(méi)有帶圖解,但其實(shí)可以歸為一個(gè)系列。

          如果想看視頻的話(huà),推薦 B 站上的《計(jì)算機(jī)網(wǎng)絡(luò)微課堂》,有讀者在留言區(qū)這樣評(píng)價(jià)說(shuō):“吹爆,這種課才應(yīng)該是真正的國(guó)家精品課程”:

          https://www.bilibili.com/video/BV1c4411d7jb

          學(xué)習(xí)完前面這些,就基本上掌握了計(jì)算機(jī)網(wǎng)絡(luò)的理論知識(shí),如果還想對(duì)網(wǎng)絡(luò)編程進(jìn)行實(shí)戰(zhàn)的話(huà),可以看一看《Unix 網(wǎng)絡(luò)編程》這本書(shū)。

          4)數(shù)據(jù)庫(kù)

          要想學(xué)好數(shù)據(jù),首先要學(xué)習(xí)一下 SQL,書(shū)的話(huà)推薦《SQL 必知必會(huì)》;視頻的話(huà)推薦一個(gè)老外的視頻課(中字版啦),內(nèi)容制作得非常棒,所以完全不用擔(dān)心聽(tīng)不懂,這個(gè)視頻的整個(gè)畫(huà)面制作得非常舒適,觀(guān)感非常好。

          https://www.bilibili.com/video/BV1UE41147KC

          然后再學(xué)習(xí)一下市場(chǎng)占有率非常高的 MySQL,書(shū)的話(huà)推薦《高性能 MySQL》;視頻的話(huà)推薦尚硅谷的一個(gè),一位女老師講的,質(zhì)量也非常不錯(cuò)。

          https://www.bilibili.com/video/BV12b411K7Zu

          六、學(xué)習(xí)建議

          1、自學(xué)才是硬道理。強(qiáng)大的自學(xué)能力是獨(dú)自解決問(wèn)題的根本,程序員需要擁有強(qiáng)大的自學(xué)能力。

          2、一個(gè)人可以走得很快,但一群人才能走的更遠(yuǎn)。最好加入一些有氛圍的技術(shù)交流群,結(jié)交一兩個(gè)有能力的同階段的人,切磋精進(jìn)一下。

          3、入門(mén)階段,coding 為主,視頻和看書(shū)為輔,不要搞反了。記住這個(gè)公式:只看+不練=假把戲。

          4、如果你以后不想當(dāng)一個(gè)優(yōu)秀的工程師,不想在計(jì)算機(jī)這條道路上走得更遠(yuǎn),只想躺平當(dāng)個(gè)平平淡淡的碼農(nóng),那么我推薦一條路:跟著老師一步步走,跟著大學(xué)的教學(xué)方案,一步步走就行了。

          5、學(xué)習(xí)的最好方法就是逐步擴(kuò)大勝利戰(zhàn)果,先從最小的勝利開(kāi)始,讓自己感受到學(xué)習(xí)的快樂(lè),盡快地進(jìn)入到一種正反饋的狀態(tài)當(dāng)中。

          6、羅馬不是一天建成的,請(qǐng)保持耐心。


          沒(méi)有什么使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧?kù)o的港灣,我是不系之舟

          推薦閱讀

          瀏覽 67
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  老太色HD色老太HD. | 欧美一级特黄A片免费看视频 | 亚洲国产成人一区二区 | 天天干天天草天天摸 | 国产精品久久毛片 |