国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

專業程序員必知必會的技巧:馴服復雜代碼

來源:懂視網 責編:小采 時間:2020-11-09 07:23:13
文檔

專業程序員必知必會的技巧:馴服復雜代碼

專業程序員必知必會的技巧:馴服復雜代碼:http://blog.csdn.net/hzbooks/article/details/8646593 你從入職第一天起就要應對復雜代碼。 若是還未遇到過無法理解的程序,那說明你編程的年頭還不夠長。在行業里,要不了多久你就會碰到讓人發懵的混亂代碼:巨獸、面條工廠、來自地獄的遺留系統。我曾接
推薦度:
導讀專業程序員必知必會的技巧:馴服復雜代碼:http://blog.csdn.net/hzbooks/article/details/8646593 你從入職第一天起就要應對復雜代碼。 若是還未遇到過無法理解的程序,那說明你編程的年頭還不夠長。在行業里,要不了多久你就會碰到讓人發懵的混亂代碼:巨獸、面條工廠、來自地獄的遺留系統。我曾接

根本原因是什么?天知道,只要重試次數夠多,你就可以掩蓋任何問題。但如車身修補一樣,某一位置的霸道膠水(Bondo)比實際殘留的車本身部件還要多。

更難找的問題發生在補丁并沒有解決問題根本原因的時候,問題通常根本沒有消失—它只是轉移到別處。在前面的對話中,重試100次可能很好地掩蓋了問題,但萬一需要101次重試怎么辦?經理只是隨便捏了個數字,這種膏藥式修補只會讓問題更難查。

沿著“快速修補”上行,我們現在得到了一個增加代碼規模的完整閉環。

走向清晰

提起復雜的反面,人們通常會想到簡單。但由于領域的必然復雜度,我們并不是總能寫出簡單的代碼。應對復雜更好的方法是清晰。你是不是明白自己的代碼要做什么?

明確兩點會有助于我們減少軟件偶然復雜度:清晰思考和清晰表達。

清晰思考

在分析問題的原因時,我們試圖做出像“保存時間的方式應該只有一種”這樣的清晰陳述。那為何UNIX C代碼里還混雜著像time_t、struct timeval和struct timespec這樣的結構呢?那并不是太清晰。

如何調和你的清晰陳述和UNIX計時功能的復雜度?你需要隔離復雜度,或將其抽象到單個模塊中。在C里,這可能是結構體和操作它的函數;在C++里,它會是一個類。模塊化設計讓程序的其余部分可以用一種清晰的方式推導時間,而不用了解系統計時功能的內部機制。

一旦能將時間作為程序的一個單獨模塊進行對待,你也就能證明你的計時機制的正確性。完成這一工作的最佳方式就是單獨測試,但是同行評審或書寫規格說明也行。當一組邏輯是隔離的而不是內嵌在一大段代碼體內時,它的測試和嚴格證明要容易得多。

清晰表達

隨著你清晰地思考模塊并將它與其余程序隔離,最終程序也就能更清晰地表達它的用途。處理問題域的代碼應該真正專注于問題域。

將輔助代碼抽出放入自己的模塊之后,剩余邏輯讀起來應該越來越像問題域的規格說明(雖然有更多分號)。

讓我們看看前后對比。我已經無數次看到過如下這種C++代碼:

[cpp] view plaincopy

  1. Time.cpp
  2. void do_stuff_with_progress1()
  3. {
  4. struct timeval start;
  5. struct timeval now;
  6. gettimeofday(&start, 0);
  7. // 干活,每半秒鐘打印一條進度消息
  8. while (true) {
  9. struct timeval elapsed;
  10. gettimeofday(&now, 0);
  11. timersub(&now, &start, &elapsed);
  12. struct timeval interval;
  13. interval.tv_sec = 0;
  14. interval.tv_usec = 500 * 1000; // 500ms
  15. if (timercmp(&elapsed, &interval, >)) {
  16. printf("still working on it...\n");
  17. start = now;
  18. }
  19. // 干活……
  20. }
  21. }

循環的關鍵是“干活”部分,但在實際干活之前有20行的POSIX計時代碼塊。這并沒有什么不對,但……就沒有一種方法讓循環保持對其問題域而不是對計時的關注嗎?

讓我們把所有時間代碼放入它自己的類:

[cpp] view plaincopy

  1. Time.cpp
  2. class Timer
  3. {
  4. public:
  5. Timer(const time_t sec, const suseconds_t usec) {
  6. _interval.tv_sec = sec;
  7. _interval.tv_usec = usec;
  8. gettimeofday(&_start, 0);
  9. }
  10. bool triggered() {
  11. struct timeval now;
  12. struct timeval elapsed;
  13. gettimeofday(&now, 0);
  14. timersub(&now, &_start, &elapsed);
  15. return timercmp(&elapsed, &_interval, >);
  16. }
  17. void reset() {
  18. gettimeofday(&_start, 0);
  19. }
  20. private:
  21. struct timeval _interval;
  22. struct timeval _start;
  23. };

我們現在可以簡化循環了:

[cpp] view plaincopy

  1. Time.cpp
  2. void do_stuff_with_progress2()
  3. {
  4. Timer progress_timer(0, 500 * 1000); // 500ms
  5. // 干活,每半秒鐘打印一條進度消息
  6. while (true) {
  7. if (progress_timer.triggered()) {
  8. printf("still working on it...\n");
  9. progress_timer.reset();
  10. }
  11. // 干活……
  12. }
  13. }

計算機在上述兩種情況下做的事情是相同的,但考慮第二個例子對程序可維護性帶來的影響:
  • Timer類的測試和證明可獨立于它在程序中的使用方式。
  • “干活”循環內的計時有了有意義的語義—triggered()和reset(),而不是一堆獲取、增加和比較函數。
  • 現在對于計時的終止位置和(捏造的)循環實際起始位置都清晰了。
  • 當工作在巨大丑陋的代碼上時,依次考慮:這段代碼想表達什么含義?它有沒有辦法說得更清楚一點?如果它是清晰表達的問題,你需要把那些礙事的代碼段抽象出來,同前面展示的Timer類一樣。若代碼還是有點混亂,那可能是沒有清晰思考的產品,需要在設計層面返工。

    行動指南

    聚焦于可被隔離和嚴格推導的一個編程方面,如計時。挖掘你正在從事的項目,識別出這樣的代碼段:若那部分邏輯被抽象到自己的模塊,它能否表達得更清晰。

    動手嘗試更模塊化的方法:選一組混亂的代碼,分離必然復雜度和偶然復雜度。在這一刻不要操心細節,只看如何可以清晰地表達必要的業務邏輯,假設你有獨立模塊來處理支撐邏輯。

    ------------------------------------

    本文節選自《程序員修煉之道:專業程序員必知的33個技巧》“技巧4:馴服復雜度”。

    書名:《程序員修煉之道:專業程序員必知的33個技巧》

    原書名:New Programmer's Survival Manual: Navigate Your Workplace, Cube Farm, or Startup

    作者:Josh Carter

    譯者:胡鍵

    頁數:212

    定價:49.00元

    ISBN:9787111411642

    豆瓣收藏:http://book.douban.com/subject/21323647/

    PDF下載:http://vdisk.weibo.com/s/paFl8

    當當購買:http://product.dangdang.com/main/product.aspx?product_id=23185207

    內容簡介:

    這是每一位致力于成為專業程序員的軟件開發新手都應該閱讀的一本書。它是資深軟件開發專家Josh Carter 20余年編程生涯的心得體會,從程序員成長的視角,系統總結和闡述了專業程序員在專業技能、編程工具、自我管理、團隊協作、工作態度以及需要采取的行動等方面應該掌握的33個非常重要且實用的技巧。作者以自己以及身邊的同事積累下來的經驗、犯過的錯誤為素材,旨在為新人們引路,讓他們在能力修煉的過程中少走彎路!

    全書分為四個部分:第一部分(技巧1~14),從編程技能和工具使用兩個方面總結了14個技巧,包含如何正確地書寫代碼、測試驅動設計、管理代碼復雜度、改善遺留代碼、代碼評審、開發環境優化、自動化等;第二部分(技巧15~24),從自我管理和團隊協作兩個方面總結了10個技巧,包括如何樹立自我形象、壓力管理、建立良好人脈和高效會議等;第三部分(技巧25~30),介紹了典型高科技公司的組織結構以及你在整個公司中的位置,并且闡述了薪酬分配的問題;第四部分(技巧31~33),介紹了在日常工作中如何持續改善自己的工作和學習狀態。

    作者簡介:

    Josh Carter,資深軟件設計師,具有超過20年編程行業從業經驗。熱衷于編程和追逐前沿技術,但同時謹記史蒂夫?喬布斯的箴言“真正的藝術家能讓產品面市”。他還涉足工程管理領域,曾經主管大型企業軟件開發團隊。目前已出版多本關于計算機軟件的技術書籍,同時他還在主流計算機雜志的技術專欄發表文章。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    專業程序員必知必會的技巧:馴服復雜代碼

    專業程序員必知必會的技巧:馴服復雜代碼:http://blog.csdn.net/hzbooks/article/details/8646593 你從入職第一天起就要應對復雜代碼。 若是還未遇到過無法理解的程序,那說明你編程的年頭還不夠長。在行業里,要不了多久你就會碰到讓人發懵的混亂代碼:巨獸、面條工廠、來自地獄的遺留系統。我曾接
    推薦度:
    標簽: 技巧 代碼 程序
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产高清特黄无遮挡大片 | 一区二区视频在线观看高清视频在线 | 另类国产精品一区二区 | 国产成人精品三级在线 | 亚洲图欧美 | 亚洲一区 中文字幕 久久 | 综合欧美日韩 | 亚洲精品123区 | 欧美色第一页 | 国产在线播放一区二区 | 91精品国产91久久 | 亚洲a∨精品一区二区三区下载 | 大香伊人久久 | 欧美成人禁片在线www | 国产精品毛片va一区二区三区 | 日韩第四页 | 自拍自偷| 在线中文字幕第一页 | 四虎成人精品免费影院 | 欧美一级淫片吊带丝袜 | 国产欧美日韩另类va在线 | 最近韩国日本免费观看 | 亚洲视频一区二区三区 | 91中文字幕在线播放 | 亚洲 欧美 中文 日韩专区 | 精品一区二区三区在线播放 | 午夜欧美在线 | 伊人网伊人影院 | 国内精品一区二区2021在线 | 91福利一区二区 | 国产日韩欧美精品 | 国产网站免费观看 | 国产一区二区日韩欧美在线 | 玖玖国产精品 | 国产日韩欧美一区二区三区视频 | 亚洲欧美一| 国产成人精品曰本亚洲 | 国产精品久久久久无码av | 国产精品毛片va一区二区三区 | 性刺激欧美三级在线现看中文 | 国产网站免费观看 |