91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何能快速提升編程能力

multisim ? 來源:嵌入式客棧 ? 作者:逸珺 ? 2021-08-18 09:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有小伙伴問:如何能快速提升編程能力?這感覺永遠(yuǎn)沒有正確答案,每個(gè)人都有自己的套路,今天就來聊聊我對(duì)這個(gè)問題的看法:

學(xué)會(huì)高效讀代碼,就是一個(gè)不錯(cuò)的辦法。閱讀代碼,可能和寫代碼一樣重要!

為什么要會(huì)讀代碼?

考慮這樣一些場景:

Case 1: 你還在讀書,照著教程,照著例子,學(xué)習(xí)編程。剛開始,大概率是先讀別人的代碼,理解別人的代碼,而非一上來,就開始寫。

這是我YY的一個(gè)學(xué)寫代碼的學(xué)習(xí)模型,所以讀了,理解了,在自己就可以發(fā)揮了,然后書本上、他人的知識(shí),就流進(jìn)了自己的腦瓜了。

Case 2: 一個(gè)職場新人,一進(jìn)公司,就加入一個(gè)項(xiàng)目組,那項(xiàng)目代碼真是海了去了!然后老大可能給你一個(gè)小小的活,在現(xiàn)有基礎(chǔ)上,添加一個(gè)小功能。項(xiàng)目經(jīng)驗(yàn)少的童鞋,一下就傻眼了,特么的,這代碼這么多行,文件幾百上千!該從何入手呢?別說改了,看都看不懂!完了,試用期是不是就要被干掉?!

Case 3:你進(jìn)了一個(gè)小公司,技術(shù)管理混亂,前任已閃人,你受命接任一個(gè)一坨翔一樣的項(xiàng)目,那代碼寫的真是云里霧里,工期又緊,老板又逼著出貨,怎么辦?閃人?可是下家會(huì)更好么?跳槽往往是從一個(gè)坑里,跳到另一個(gè)坑里。所以讀吧,總是要讀的。。。

Case n: ......

學(xué)校往往教授的是如何寫代碼,可能從沒有教如何讀代碼。

然而,理想很豐滿,現(xiàn)實(shí)很骨感!工作中,你寫代碼的時(shí)間可能只占工作時(shí)間很少很少的一部分,大部分時(shí)間你可能都是在閱讀已有的代碼,當(dāng)然除非這個(gè)項(xiàng)目從0到1都是你一個(gè)人干,可即便是自己寫代碼,也是漸進(jìn)增長、不斷迭代的,也需要不斷反復(fù)閱讀自己寫的代碼。

再者,編程與寫文章,有異曲同工之處。編程與寫作相似之處,都是用語言表達(dá)寫作者的想法。

對(duì)于如何提升寫作,古人曾講:熟讀唐詩三百首,不會(huì)作詩也會(huì)吟?;叵雽W(xué)生時(shí)代,老師也常說:讀書破萬卷,下筆如有神!強(qiáng)調(diào)寫作需要大量閱讀,讀的多了,寫作能力也會(huì)相應(yīng)提升。閱讀之于寫作,相輔相成,互為促進(jìn)。

那么大量閱讀別人的代碼,也能提升自己的編程水平。閱讀代碼,個(gè)人覺得會(huì)有這樣些好處:

博采眾長

優(yōu)秀的源碼,就如傳世佳作一樣,值得反復(fù)揣摩,細(xì)細(xì)品味。其編寫技巧、設(shè)計(jì)范式、架構(gòu)思想,都具有極大的學(xué)習(xí)借鑒價(jià)值。比如一些優(yōu)秀的開源項(xiàng)目:Linux內(nèi)核、lwIP、u-boot等等。這些作品都匯集了全球優(yōu)秀頂級(jí)程序員的思想智慧。都是非常優(yōu)秀的作品,廣為流傳,廣為應(yīng)用。如果能花些時(shí)間去閱讀理解一下其代碼,一定是大有裨益的。

正如牛頓所說:如果我能比別人看的更遠(yuǎn),只因?yàn)槲艺驹诰奕说募缟稀?/p>

解決難題

編程生涯中,總會(huì)遇到一些感動(dòng)束手無策的場景。github,搜索都已無能為力的時(shí)候。如果說還沒遇到,那一定是機(jī)緣未到~

比如做Linux編程的時(shí)候,遇到某個(gè)API出錯(cuò),或許在網(wǎng)上查找半天,都找不到答案。實(shí)在找不到答案了,嘗試讀一讀內(nèi)核底層相關(guān)代碼,有時(shí)候就能發(fā)現(xiàn)問題的原因。

開闊視野

很多時(shí)候,日常工作內(nèi)容或許只是很小的領(lǐng)域,修復(fù)一些小的bug,修改一些小的功能等。如果只專注這些小的點(diǎn),個(gè)人成長一定會(huì)受到局限。

如果能善于發(fā)現(xiàn)一些新的感興趣的領(lǐng)域,并去閱讀相關(guān)的代碼,則一定會(huì)提升自己的編程能力的。

所以為什么要讀代碼呢?

找bug

review別人的代碼

學(xué)習(xí)

維護(hù)等

如何閱讀代碼呢?

這里聊聊我的一些體會(huì),也未必都對(duì),也未必適合其他的朋友。分享以作交流,如有其他想法,也歡迎大家留言交流。

先粗后細(xì)

我一般拿到一份別人的代碼,會(huì)先去找這個(gè)項(xiàng)目的入口,先梳理個(gè)大概的脈絡(luò)。如單片機(jī)程序,一般會(huì)從下面幾個(gè)角度先掃一遍:

main在哪里?

開了幾個(gè)任務(wù)?

哪些是關(guān)鍵任務(wù),主要功能鏈?zhǔn)窃趺礃拥模?/p>

任務(wù)間如何協(xié)作的?任務(wù)的執(zhí)行周期是如何安排的?

使用哪些硬件外設(shè)?

使用了哪些中斷?中斷與哪些任務(wù)發(fā)生了交互?

從軟件角度看,大致有哪些子系統(tǒng)?

是否有關(guān)鍵算法?

是否使用開源組件?

......

先不關(guān)心很細(xì)的函數(shù)具體怎么寫,數(shù)據(jù)結(jié)構(gòu)是如何設(shè)計(jì)的?這樣,我大致能先有一個(gè)總體認(rèn)識(shí),然后在對(duì)自己感興趣的進(jìn)行細(xì)讀。當(dāng)然如果是review別人的代碼則就另當(dāng)別論了。

如果是Linux應(yīng)用程序,或者C++應(yīng)用程序,我也大致采用差不多的思路,先讀個(gè)大概,然后再細(xì)讀。比如對(duì)一個(gè)Linux應(yīng)用程序,會(huì)先了解這些方面的概要信息:

入口在哪個(gè)文件?一般都是main函數(shù)。

是否支持命令行傳啟動(dòng)參數(shù)?

是否是守護(hù)進(jìn)程?

開了哪些線程?

大致有哪些子系統(tǒng)?

使用了哪些開源組件?

是否使用驅(qū)動(dòng),是否有通訊等?

......

如果項(xiàng)目采用cmake或者makefile進(jìn)行組織的,那么先閱讀下makefile也會(huì)是了解項(xiàng)目概要信息的一個(gè)比較好的切入點(diǎn)。

善做筆記

在閱讀代碼的概要信息的時(shí)候,我比較喜歡做做筆記,畫畫圖。在閱讀代碼的時(shí)候,我比較喜歡先去研究代碼中的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)往往會(huì)體現(xiàn)作者抽象問題、對(duì)問題建模的一些思路,并使用UML圖畫出來,剛開始可能都不去看每個(gè)函數(shù)是怎么實(shí)現(xiàn)的,只關(guān)心與這些數(shù)據(jù)結(jié)構(gòu)相關(guān)有哪些函數(shù)以及數(shù)據(jù)結(jié)構(gòu)間關(guān)系。

“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.”

— Linus Torvalds

或許,有的朋友會(huì)說,UML不會(huì)。不會(huì)沒關(guān)系,用你習(xí)慣自己能看懂的方式都可以,而且即便是用UML也不必過分糾結(jié)繪制的圖是否嚴(yán)謹(jǐn)。甚至拿支筆在筆記上手繪也可以。不過個(gè)人更建議,盡量寫電子筆記,更容易保存和查閱。

閱讀某一個(gè)具體函數(shù)時(shí),如果函數(shù)內(nèi)或者模塊內(nèi)具有狀態(tài)機(jī),如果這部分是需要仔細(xì)理解的時(shí)候,我就會(huì)將其狀態(tài)機(jī)圖,先繪制出來。比如,之前寫的modbus協(xié)議中的狀態(tài)圖:

cf30fd6a-ff5a-11eb-9bcf-12bb97331649.png

這樣做有個(gè)好處,邊繪圖邊去理解代碼,就會(huì)加速對(duì)代碼的理解,對(duì)我來說,我如果只用兩只眼睛盯著看,和一邊看一比畫圖效率會(huì)低很多。

這樣做還有一個(gè)好處,可以將理解以圖的形式記錄下來,如果光用圖還不能表達(dá)清楚的時(shí)候,我還會(huì)再加點(diǎn)文字描述。時(shí)間過了很久之后,再來看代碼,可能之前的理解全忘了,可是如果有這樣一份圖文并茂的筆記,我就會(huì)很快找回記憶。

善用工具

比如source insght, vs code等工具,都是提高閱讀代碼效率的好工具。盡量熟悉如何使用鍵盤控制閱讀跳轉(zhuǎn),用熟了,效率倍增。

另外,還有些工具,可以自動(dòng)將代碼轉(zhuǎn)化成類圖等,比如visual studio,可以自動(dòng)繪制類圖,Enterprise Architect也具有根據(jù)代碼生成類圖的功能。具有此類功能的軟件還有很多。有興趣可以搜索一下。

多多調(diào)試

如果遇到有的代碼,怎么看也理解不了。這時(shí)候可以試著加些打印日志,運(yùn)行調(diào)試一下,也可以使用調(diào)試工具進(jìn)行斷點(diǎn)、單步調(diào)試,觀察程序運(yùn)行的軌跡,數(shù)據(jù)的變化情況,可能就找到了突破口。

或者嘗試對(duì)原有的代碼,做些小的修改,來印證理解,也是不錯(cuò)的方法。

一個(gè)經(jīng)常調(diào)試的程序猿,鍵盤上F10,F11這些鍵大都?jí)牡谋容^快。

總結(jié)一下

把自己閱讀代碼的一些體會(huì)分享一下,每個(gè)人都會(huì)有適合自己的方法。利用適合自己的方法,高效的閱讀代碼,是提升編程的一個(gè)行之有效的辦法。

如果我講的這些,如對(duì)你有所啟發(fā),也不妨點(diǎn)個(gè)贊或者再看,小小的鼓勵(lì)一下我。當(dāng)然你如愿意擴(kuò)散分享,那就感激不盡啦。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3716

    瀏覽量

    97191
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73988

原文標(biāo)題:程序員提高閱讀代碼能力的幾個(gè)方法

文章出處:【微信號(hào):A1411464185,微信公眾號(hào):multisim】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    軟通動(dòng)力ASDM平臺(tái)三大核心能力實(shí)現(xiàn)軟件工程效能提升

    (AI-First System Development Methodology & Platform),以AI 優(yōu)先的系統(tǒng)化研發(fā)方法為核心,憑借三大核心能力打造了專業(yè)的 AI4SE 解決方案,為企業(yè)構(gòu)建端到端的 AI 場景化研發(fā)能力,實(shí)現(xiàn)軟件工程效能的倍數(shù)級(jí)
    的頭像 發(fā)表于 02-27 11:34 ?328次閱讀
    軟通動(dòng)力ASDM平臺(tái)三大核心<b class='flag-5'>能力</b>實(shí)現(xiàn)軟件工程效能<b class='flag-5'>提升</b>

    嘗試將oreboot移植到visionfive上,請(qǐng)問如何能將其刷到內(nèi)存上?

    我在嘗試將oreboot移植到visionfive上,請(qǐng)問如何能將其刷到內(nèi)存上?可以使用secondboot來替換uboot嘛?大小有限制的嘛?
    發(fā)表于 02-06 06:13

    請(qǐng)問有沒有最小化系統(tǒng)程序,編程時(shí)可以快速設(shè)置?

    請(qǐng)問有沒有最小化系統(tǒng)程序,編程時(shí)可以快速設(shè)置
    發(fā)表于 12-23 08:16

    LoRaWAN網(wǎng)絡(luò),如何提升現(xiàn)代建筑的智慧服務(wù)能力?

    LoRaWAN技術(shù)助力建筑實(shí)現(xiàn)智慧運(yùn)維,提升安全、效率與維護(hù)成本。
    的頭像 發(fā)表于 12-12 17:18 ?2246次閱讀
    LoRaWAN網(wǎng)絡(luò),如何<b class='flag-5'>提升</b>現(xiàn)代建筑的智慧服務(wù)<b class='flag-5'>能力</b>?

    嵌入式應(yīng)掌握的幾種能力

    1. 編程語言 基本掌握嵌入式必備的編程語言。C語言為主,C++為輔。在資源有限的情況下,大多數(shù)嵌入式產(chǎn)品還是使用C語言為主的,特別是底層驅(qū)動(dòng)開發(fā)。上層應(yīng)用開發(fā)大多用C,在一些資源比較充足的平臺(tái)
    發(fā)表于 12-08 06:05

    芯盾時(shí)代助力遼寧某銀行提升移動(dòng)端安全防護(hù)能力

    芯盾時(shí)代中標(biāo)遼寧某銀行!芯盾時(shí)代設(shè)備指紋技術(shù)具備高精度的設(shè)備識(shí)別能力,通過基于自主研發(fā)的算法,結(jié)合后臺(tái)設(shè)備信息,為設(shè)備產(chǎn)生專有的ID,能夠幫助銀行提升移動(dòng)端安全防護(hù)能力,精準(zhǔn)區(qū)分合法與風(fēng)險(xiǎn)行為。
    的頭像 發(fā)表于 10-31 09:48 ?549次閱讀
    芯盾時(shí)代助力遼寧某銀行<b class='flag-5'>提升</b>移動(dòng)端安全防護(hù)<b class='flag-5'>能力</b>

    電網(wǎng)結(jié)構(gòu)優(yōu)化具體是如何提升新能源發(fā)電的消納能力的?

    電網(wǎng)結(jié)構(gòu)優(yōu)化提升新能源消納能力的核心邏輯,是 針對(duì)新能源消納的核心痛點(diǎn)(時(shí)空分布不均、出力波動(dòng)大、并網(wǎng)通道不足、局部承載有限),通過重構(gòu)電網(wǎng)的 “輸送路徑、分配方式、平衡機(jī)制、調(diào)節(jié)能力”,構(gòu)建 “能
    的頭像 發(fā)表于 10-14 17:40 ?1144次閱讀

    MT6501在線可編程角度編碼器:以獨(dú)特可編程特性提升汽車控制精度與可靠性

    在汽車工業(yè)蓬勃發(fā)展的今天,汽車的智能化、自動(dòng)化程度越來越高,對(duì)汽車控制精度與可靠性的要求也日益嚴(yán)苛。MT6501 在線可編程角度編碼器憑借其獨(dú)特的可編程特性,在提升汽車控制精度與可靠性方面展現(xiàn)出了巨大的潛力。
    的頭像 發(fā)表于 08-04 18:01 ?823次閱讀

    Cognizant籌辦最大規(guī)模氛圍編程活動(dòng)

    -Cognizant正在籌辦全球最大規(guī)模的氛圍編程活動(dòng),以提升數(shù)千名員工的AI素養(yǎng) 為抓住人工智能經(jīng)濟(jì)將創(chuàng)造的巨大機(jī)遇,Cognizant與Lovable、Windsurf、Cursor
    的頭像 發(fā)表于 08-03 18:44 ?669次閱讀
    Cognizant籌辦最大規(guī)模氛圍<b class='flag-5'>編程</b>活動(dòng)

    零基礎(chǔ)學(xué)習(xí)LuatOS編程快速上手開發(fā)實(shí)戰(zhàn)教程!

    無論你是剛接觸物聯(lián)網(wǎng)編程的新手,還是希望拓展技能的技術(shù)愛好者,本教程將為零基礎(chǔ)的讀者提供一條清晰的LuatOS學(xué)習(xí)路徑。從安裝開發(fā)工具到編寫第一個(gè)程序,我們將通過實(shí)例講解核心概念,助你快速實(shí)現(xiàn)從理論
    的頭像 發(fā)表于 06-13 17:27 ?621次閱讀
    零基礎(chǔ)學(xué)習(xí)LuatOS<b class='flag-5'>編程</b>:<b class='flag-5'>快速</b>上手開發(fā)實(shí)戰(zhàn)教程!

    DevEco Studio AI輔助開發(fā)工具兩大升級(jí)功能 鴻蒙應(yīng)用開發(fā)效率再提升

    對(duì)DeepSeek模型增強(qiáng)融合了RAG能力,從生成機(jī)制上協(xié)同降低模型幻象,并同時(shí)提升生成模型的準(zhǔn)確性和相關(guān)性。 RAG檢索增強(qiáng)的核心機(jī)制是通過“檢索-生成”分離架構(gòu),將模型輸出嚴(yán)格約束在可信數(shù)據(jù)范圍內(nèi)
    發(fā)表于 04-18 14:43

    入行嵌入式難度大不大?

    操作系統(tǒng)等知識(shí)。不過,目前有許多線上和線下的課程可供選擇,可以幫助初學(xué)者快速入門。 (二)轉(zhuǎn)行跨界 對(duì)于有其他專業(yè)背景或工作經(jīng)驗(yàn)的人來說,轉(zhuǎn)行嵌入式也是可行的。 如果你有一定的編程基礎(chǔ)或電子電路知識(shí)
    發(fā)表于 04-17 10:14

    如何提升自己的電路設(shè)計(jì)能力,以及編程能力

    想自己設(shè)計(jì)一個(gè)電路,但是不知道如何開始,需要哪些流程,電路相關(guān)的知識(shí)融合不到一起去,求教
    發(fā)表于 04-09 16:08

    接入DeepSeek后智慧場館的能力提升

    隨著人工智能技術(shù)的快速發(fā)展,以DeepSeek為代表的大模型技術(shù)正在為智慧場館建設(shè)帶來革命性的變革。通過接入DeepSeek的先進(jìn)AI能力, 智慧場館 在運(yùn)營管理、用戶體驗(yàn)、安全保障等方面都實(shí)現(xiàn)了質(zhì)
    的頭像 發(fā)表于 04-02 11:57 ?594次閱讀

    應(yīng)急指揮車信息化方案,助力提升應(yīng)急響應(yīng)能力

    隨著社會(huì)的快速發(fā)展和城市化進(jìn)程的加速,自然災(zāi)害、公共安全事件、重大事故等各類突發(fā)事件呈現(xiàn)多發(fā)態(tài)勢。面對(duì)這些突如其來的危機(jī),城市應(yīng)急響應(yīng)能力的高低直接關(guān)系到居民的生命安全和城市的正常運(yùn)轉(zhuǎn)。作為城市應(yīng)急
    的頭像 發(fā)表于 03-13 15:06 ?731次閱讀
    應(yīng)急指揮車信息化方案,助力<b class='flag-5'>提升</b>應(yīng)急響應(yīng)<b class='flag-5'>能力</b>