程式員奇談之我寫的程式不可能有bug篇

来源:https://www.cnblogs.com/w5942066/archive/2019/03/14/10531915.html
-Advertisement-
Play Games

程式員在普通人的印象里是一份嚴(ku)謹(bi)的職業,也是一個被搞怪吐槽樂此不疲的職業,程式員們面對複雜的代碼敲打電腦時連眉頭都不會皺一下,但是有一個詞卻是他們痛苦的根源,它就是Bug。 有不少的新手程式員,剛開始都是從修BUG開始做起的。 修bug有助於熟悉項目,瞭解大概哪些類參與了執行線路,相 ...


程式員在普通人的印象里是一份嚴(ku)謹(bi)的職業,也是一個被搞怪吐槽樂此不疲的職業,程式員們面對複雜的代碼敲打電腦時連眉頭都不會皺一下,但是有一個詞卻是他們痛苦的根源,它就是Bug。

有不少的新手程式員,剛開始都是從修BUG開始做起的。

修bug有助於熟悉項目,瞭解大概哪些類參與了執行線路,相互調用關係又是如何,結構設計上有什麼特點。

以前猿姐就聽過這樣一個故事

有三個程式員需要穿過一片田地,到達對岸的房子。

初級程式員看了一眼笑著說道:不遠,只需要十分鐘就行。

資深級程式員想了一下說道:我應該在一天內過去。”菜鳥程式員很驚訝。

大神程式員看了一眼田地,說:我覺得十五分鐘應該夠了,資深程式員冷笑了一聲。

於是,初級程式員出發了,剛走了一步就碰到了地雷,只好返回再次嘗試,最好,花費了一天的時間才過去,結果卻是傷痕纍纍。

資深程式員一齣發就匍匐前進,仔細地拍打地面,尋找地雷,只有在安全的時候才前進。他在一天的時間內小心謹慎地緩慢爬過了這片地,只觸發了幾個地雷。

大神程式員出發之後徑直穿過了田地,十分果斷。他只用了十分鐘就到了另一邊。

“你是怎麼做到的?”另外兩個人問道,“那些地雷怎麼沒有傷到你?”

“很簡單,”他回答道,“我最初就沒有埋地雷。”

哈哈是不是很有意思呢

開發應用程式是一個非常有壓力的工作。沒有人是完美的,因此在這個行業中,代碼中出現 Bug 是相當普遍的現象。

面對 Bug,一些程式員會生氣,會沮喪,會心煩意亂,甚至會灰心喪氣,而另一些程式員會依然保持冷靜沉著。因此,如何處理修複 Bug 的過程也值得我們細細琢磨。

猿姐想分享一些程式員修複他們的源代碼時所經歷的想法。我相信很多開發人員和軟體工程師經歷過這些艱辛,然後在事後一笑而過。以下你經歷過哪些?

1.“我不知道是要刪除還是要重寫它”

回顧從前老的源代碼,會有一種想要返工寫成較大塊集群的衝動和誘惑。醜陋的邏輯語句,還有冗長的語法,導致代碼非常難以閱讀!

但話又說回來,如果代碼沒有壞掉的話,那就不要去修複它。這種洶涌澎拜的鬥爭是我經常要面對的,而且顯然會困擾許多軟體開發人員。

2.“對於起始框架我應該查看 Github”

我想大多數開發人員都知道 Github,上面每天都有數量驚人的開源項目發佈。

任何語言的程式員都可以通過互聯網借鑒現有項目,加入維基討論,或者創建自己的代碼倉庫。它是各種項目所需插件和模板的超棒資源。

3.“為什麼這個腳本需要這麼多庫?”

尤其是一些比較大眾化的語言,如 Java 和 Objective-C,庫的數量可能變得異常凶猛。當構建一個需要大量基礎的框架時,所需的庫的數量就變得顯而易見得多。

即使是一些適用於 Java 的插件,也會額外需要無數的文件。有時,這會讓人覺得煩雜惱人——但至少是有用的!

4.“在互聯網的某個地方一定已經有瞭解決方案。”

我面對棘手問題的第一反應是上網查。程式員會將他們遇到的問題通過帖子發佈到論壇上,然後這個問題最終得到解決並歸檔。

谷歌搜索問題關鍵字的好幫手,可以指點你往正確的討論方向走。不幸的是,有的時候卻是因為手頭沒有特定問題的太多信息而找不著北。

5.“有沒有這個功能的插件?”

為什麼要重新發明輪子?插件是擴大任何程式或網站用戶界面的偉大資源。此外,它們還為開發人員提供了一些自定義和獨特的選項。萬一真的沒有可用插件的話,為什麼不自己構建一個呢?

6.“雖然網站可以工作,但我害怕 IE 瀏覽器。”

在 Internet Explorer 中渲染網頁的歷史充滿了艱辛考驗,是我們有目共睹或親身體驗過的。

從 5.5 版本升級到 IE9、IE10,總是需要爭取到更高級瀏覽器的支持。Web 開發人員可能會害怕調試網頁,因為在 IE6 中打開頁面是一個渲染噩夢。值得慶幸的是,這樣的日子正在慢慢成為過去。

7.“對於邏輯表達式而言,這似乎並不怎麼合乎邏輯。”

對於 if / else 迴圈,for 迴圈,while 迴圈,do 迴圈等等,都有邏輯表達式。當瀏覽示例代碼時,我試圖指出我的邏輯是如何工作的。

NOT 運算符和比較標記的數量又是如此之多。我經常回過頭去更新我自己的邏輯以便於更好地適合未來的做法。

8.“我用 30 分鐘寫函數,花 2 小時讓它工作。”

這難道不像我們自己的編程故事嗎?你正興緻勃勃地在構建著什麼,但是突然之間,函數輸出了一個致命的錯誤。

所以,現在你必須回過頭去刪除一些代碼塊,以找出錯誤發生的行號。當你終於找到罪魁禍首,並解決它時,雖然有種精疲力竭的感覺,但也滿心安慰。

我常常會一開始就根據自己的編程思想,一頭扎進去研究,但是這可能會導致麻煩,如果事情不像原先設想地那樣順利的話。

已經有很多次在我啟動一個項目之後,陷入了困境,然後只好尋求博客和其他論文的支持。

最後我發現我的整個方法實際上是錯誤的,而且從頭來過更容易!如果我開始的時候能先做一番研究的話,從長遠來說,反而節省時間。

來源  https://post.mp.qq.com/kan/article/2063422179-295542592.html?_wv=2147483777&sig=ee208a49a460584bd6d97e6651f38a19&article_id=295542592&time=1552472230&_pflag=1&x5PreFetch=1

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 處理時間是常見的需求,總結下Date類的相關知識 構建時間對象 "Date" 對象基於1970年1月1日(世界標準時間)起的毫秒數。 構建對象實例有多種方式: 1. 不傳入參數,預設以系統當前時間返回一個時間對象. 返回的是一個 對象實例 ,控制台列印了時間字元串,是預設調用了 方法。 2. 傳入 ...
  • 按照iview官網介紹寫的form表單驗證,但是無論填寫與否都不進行校驗,找了很久的原因,突然才發現一個關鍵的地方,一定要加props!!! https://blog.csdn.net/xuaner8786/article/details/80008925 這是網友總結的iview表單驗證註意點,我 ...
  • call()、apply()的區別: 相同點: 1.call()和apply()都可以用來間接調用函數,都可以顯式調用所需的this。即,任何函數可以作為任何對象的方法來調用。 2.兩個方法都可以指定調用實參。 區別: call()和apply()的基本區別:在於將參數傳遞給函數。 call():使 ...
  • 1.var是全局聲明,let是塊級作用的,只適用於當前代碼塊 if(){}內就是let作用於的塊 2.var變數會發生變數提升,let則不會進行變數提升 如果是 let a =2 則會提示報錯 3.var 會造成重覆賦值,迴圈里的賦值可能會造成變數泄露至全局 4.let在一個塊級作用只能賦一次值,並 ...
  • 關鍵步驟: 1.傳兩個參數:pageCount (每頁條數)、pageIndex (頁碼數); 2.bind方法的調用 本例對特別請求特別多數據時,該方法大有用處。僅作參考。如有疑問,請聯繫。。。 ...
  • 對象就是無序鍵值對的集合 ...
  • 1. ios中音頻不自動播放; 原因:出於節省流量的初衷,ios系統禁止音視頻自動播放。 解決方案:使用微信的JS-SDK。 DEMO: 先引入微信的JS-SDK, 然後在wx.ready中調用play方法播放。 2. 微信升級到7.0版本以後,填寫表單信息彈出鍵盤會把頁面頂上去,鍵盤消失的時候頁面 ...
  • 第一次寫博客,想了半天先從簡單的三層架構開始吧,希望能幫助到你! 簡單介紹一下三層架構, 三層架構從上到下分:表現層(UI),業務邏輯層(BLL),數據訪問層(DAL)再加上數據模型(Model),用ef訪問資料庫,Model也就是與資料庫表映射的實體。廢話少說,上代碼。 Model層 為方便說明, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...