www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式客棧
[導(dǎo)讀]會讀代碼,和會寫一樣重要

[導(dǎo)讀] 大家好,我是逸珺。
某日一好友,調(diào)侃我的筆名,說讀起來好像“抑菌”!嗨,還真是,不管了,“抑菌“抑菌吧。
寫號以來,有小伙伴問:如何能快速提升編程能力?這感覺永遠沒有正確答案,每個人都有自己的套路,今天就來聊聊我對這個問題的看法:
學(xué)會高效讀代碼,就是一個不錯的辦法。閱讀代碼,可能和寫代碼一樣重要!

為什么要會讀代碼?

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


這是我YY的一個學(xué)寫代碼的學(xué)習(xí)模型,所以讀了,理解了,在自己就可以發(fā)揮了,然后書本上、他人的知識,就流進了自己的腦瓜了。
  • Case 2: 一個職場新人,一進公司,就加入一個項目組,那項目代碼真是海了去了!然后老大可能給你一個小小的活,在現(xiàn)有基礎(chǔ)上,添加一個小功能。項目經(jīng)驗少的童鞋,一下就傻眼了,特么的,這代碼這么多行,文件幾百上千!該從何入手呢?別說改了,看都看不懂!完了,試用期是不是就要被干掉?!
  • Case 3: 你進了一個小公司,技術(shù)管理混亂,前任已閃人,你受命接任一個一坨翔一樣的項目,那代碼寫的真是云里霧里,工期又緊,老板又逼著出貨,怎么辦?閃人?可是下家會更好么?跳槽往往是從一個坑里,跳到另一個坑里。所以讀吧,總是要讀的。。。
  • Case n: ......
學(xué)校往往教授的是如何寫代碼,可能從沒有教如何讀代碼。
然而,理想很豐滿,現(xiàn)實很骨感!工作中,你寫代碼的時間可能只占工作時間很少很少的一部分,大部分時間你可能都是在閱讀已有的代碼,當然除非這個項目從0到1都是你一個人干,可即便是自己寫代碼,也是漸進增長、不斷迭代的,也需要不斷反復(fù)閱讀自己寫的代碼。
再者,編程與寫文章,有異曲同工之處。編程與寫作相似之處,都是用語言表達寫作者的想法。
對于如何提升寫作,古人曾講:熟讀唐詩三百首,不會作詩也會吟?;叵雽W(xué)生時代,老師也常說:讀書破萬卷,下筆如有神!強調(diào)寫作需要大量閱讀,讀的多了,寫作能力也會相應(yīng)提升。閱讀之于寫作,相輔相成,互為促進。
那么大量閱讀別人的代碼,也能提升自己的編程水平。閱讀代碼,個人覺得會有這樣些好處:

博采眾長

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

解決難題

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

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

開闊視野

很多時候,日常工作內(nèi)容或許只是很小的領(lǐng)域,修復(fù)一些小的bug,修改一些小的功能等。如果只專注這些小的點,個人成長一定會受到局限。
如果能善于發(fā)現(xiàn)一些新的感興趣的領(lǐng)域,并去閱讀相關(guān)的代碼,則一定會提升自己的編程能力的。
所以為什么要讀代碼呢?
  • 找bug
  • review別人的代碼
  • 學(xué)習(xí)
  • 維護等

如何閱讀代碼呢?

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

先粗后細

我一般拿到一份別人的代碼,會先去找這個項目的入口,先梳理個大概的脈絡(luò)。如單片機程序,一般會從下面幾個角度先掃一遍:
  • main在哪里?
  • 開了幾個任務(wù)?
  • 哪些是關(guān)鍵任務(wù),主要功能鏈是怎么樣的?
  • 任務(wù)間如何協(xié)作的?任務(wù)的執(zhí)行周期是如何安排的?
  • 使用哪些硬件外設(shè)?
  • 使用了哪些中斷?中斷與哪些任務(wù)發(fā)生了交互?
  • 從軟件角度看,大致有哪些子系統(tǒng)?
  • 是否有關(guān)鍵算法?
  • 是否使用開源組件?
  • ......
先不關(guān)心很細的函數(shù)具體怎么寫,數(shù)據(jù)結(jié)構(gòu)是如何設(shè)計的?這樣,我大致能先有一個總體認識,然后在對自己感興趣的進行細讀。當然如果是review別人的代碼則就另當別論了。
如果是Linux應(yīng)用程序,或者C 應(yīng)用程序,我也大致采用差不多的思路,先讀個大概,然后再細讀。比如對一個Linux應(yīng)用程序,會先了解這些方面的概要信息:
  • 入口在哪個文件?一般都是main函數(shù)。
  • 是否支持命令行傳啟動參數(shù)?
  • 是否是守護進程?
  • 開了哪些線程?
  • 大致有哪些子系統(tǒng)?
  • 使用了哪些開源組件?
  • 是否使用驅(qū)動,是否有通訊等?
  • ......
如果項目采用cmake或者makefile進行組織的,那么先閱讀下makefile也會是了解項目概要信息的一個比較好的切入點。

善做筆記

在閱讀代碼的概要信息的時候,我比較喜歡做做筆記,畫畫圖。在閱讀代碼的時候,我比較喜歡先去研究代碼中的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)往往會體現(xiàn)作者抽象問題、對問題建模的一些思路,并使用UML圖畫出來,剛開始可能都不去看每個函數(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
或許,有的朋友會說,UML不會。不會沒關(guān)系,用你習(xí)慣自己能看懂的方式都可以,而且即便是用UML也不必過分糾結(jié)繪制的圖是否嚴謹。甚至拿支筆在筆記上手繪也可以。不過個人更建議,盡量寫電子筆記,更容易保存和查閱。
閱讀某一個具體函數(shù)時,如果函數(shù)內(nèi)或者模塊內(nèi)具有狀態(tài)機,如果這部分是需要仔細理解的時候,我就會將其狀態(tài)機圖,先繪制出來。比如,之前寫的modbus協(xié)議中的狀態(tài)圖:

這樣做有個好處,邊繪圖邊去理解代碼,就會加速對代碼的理解,對我來說,我如果只用兩只眼睛盯著看,和一邊看一比畫圖效率會低很多。
這樣做還有一個好處,可以將理解以圖的形式記錄下來,如果光用圖還不能表達清楚的時候,我還會再加點文字描述。時間過了很久之后,再來看代碼,可能之前的理解全忘了,可是如果有這樣一份圖文并茂的筆記,我就會很快找回記憶。

善用工具

比如source insght, vs code等工具,都是提高閱讀代碼效率的好工具。盡量熟悉如何使用鍵盤控制閱讀跳轉(zhuǎn),用熟了,效率倍增。
另外,還有些工具,可以自動將代碼轉(zhuǎn)化成類圖等,比如visual studio,可以自動繪制類圖,Enterprise Architect也具有根據(jù)代碼生成類圖的功能。具有此類功能的軟件還有很多。有興趣可以搜索一下。

多多調(diào)試

如果遇到有的代碼,怎么看也理解不了。這時候可以試著加些打印日志,運行調(diào)試一下,也可以使用調(diào)試工具進行斷點、單步調(diào)試,觀察程序運行的軌跡,數(shù)據(jù)的變化情況,可能就找到了突破口。
或者嘗試對原有的代碼,做些小的修改,來印證理解,也是不錯的方法。
一個經(jīng)常調(diào)試的程序猿,鍵盤上F10,F11這些鍵大都壞的比較快。

總結(jié)一下

把自己閱讀代碼的一些體會分享一下,每個人都會有適合自己的方法。利用適合自己的方法,高效的閱讀代碼,是提升編程的一個行之有效的辦法。
如果我講的這些,如對你有所啟發(fā),也不妨點個贊或者再看,小小的鼓勵一下我。當然你如愿意擴散分享,那就感激不盡啦。
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉