歡迎來(lái)到合肥浪訊網(wǎng)絡(luò)科技有限公司官網(wǎng)
  咨詢服務(wù)熱線:400-099-8848

程序員篇——Bug出現(xiàn)了,你是怎樣應(yīng)對(duì)的?

發(fā)布時(shí)間:2020-12-28 文章來(lái)源:本站  瀏覽次數(shù):3002

應(yīng)用程序開發(fā)是一件十分有壓力的作業(yè)。代碼中出現(xiàn)bug是相當(dāng)普遍的現(xiàn)象。面臨bug,一些程序員會(huì)生氣,會(huì)懊喪,會(huì)心慌意亂,乃至?xí)幕乙鈶,而另一些程序員會(huì)仍然堅(jiān)持冷靜冷靜。因而,怎樣處理修正bug的過(guò)程也值得咱們細(xì)細(xì)琢磨。
這兒想給大家分享一些程序員修正他們的源代碼時(shí)所經(jīng)歷的想法。這是作業(yè)變得緊張時(shí)所觸發(fā)的輕松詼諧。一般說(shuō)來(lái),應(yīng)用程序終將能夠作業(yè),然后你也能夠進(jìn)入到下一個(gè)巨大的使命。
我信任很多網(wǎng)站開發(fā)人員和軟件工程師經(jīng)歷過(guò)這些艱苦,然后在事后一笑而過(guò)。

1.“我不知道是要?jiǎng)h去仍是要重寫它”
回顧從前老的源代碼,會(huì)有一種想要返工寫成較大塊集群的沖動(dòng)和誘惑。丑陋的邏輯語(yǔ)句,還有冗長(zhǎng)的語(yǔ)法,導(dǎo)致代碼十分難以閱覽!但話又說(shuō)回來(lái),假如代碼沒(méi)有壞掉的話,那就不要去修正它。這種洶涌澎拜的斗爭(zhēng)是我常常要面臨的,而且明顯會(huì)困擾許多軟件開發(fā)人員。
2.“關(guān)于起始結(jié)構(gòu)我應(yīng)該檢查Github”
我想大多數(shù)開發(fā)人員都知道Github,上面每天都有數(shù)量驚人的開源項(xiàng)目發(fā)布。任何言語(yǔ)的程序員都能夠經(jīng)過(guò)互聯(lián)網(wǎng)學(xué)習(xí)現(xiàn)有項(xiàng)目,加入維基評(píng)論,或者創(chuàng)建自己的代碼庫(kù)房。它是各種項(xiàng)目所需插件和模板的超棒資源。
3.“為什么這個(gè)腳本需求這么多庫(kù)?”
尤其是一些比較大眾化的言語(yǔ),如Java和Objective-C,庫(kù)的數(shù)量或許變得異常兇狠。當(dāng)構(gòu)建一個(gè)需求很多基礎(chǔ)的結(jié)構(gòu)時(shí),所需的庫(kù)的數(shù)量就變得清楚明了得多。即使是一些適用于JavaScript的插件,也會(huì)額定需求無(wú)數(shù)的文件。有時(shí),這會(huì)讓人覺(jué)得煩雜惱人——但至少是有用的!
4.“在互聯(lián)網(wǎng)的某個(gè)地方一定現(xiàn)已有了處理計(jì)劃!
我面臨扎手問(wèn)題的第一反應(yīng)是上網(wǎng)查。程序員會(huì)將他們遇到的問(wèn)題經(jīng)過(guò)帖子發(fā)布到論壇上,然后這個(gè)問(wèn)題最終得到處理并歸檔。谷歌搜索問(wèn)題關(guān)鍵字的好幫手,能夠點(diǎn)撥你往正確的評(píng)論方向走。不幸的是,有的時(shí)分卻是由于手頭沒(méi)有特定問(wèn)題的太多信息而找不著北。
5.“有沒(méi)有這個(gè)功用的插件?”
為什么要重新創(chuàng)造輪子?插件是擴(kuò)展任何程序或網(wǎng)站用戶界面的巨大資源。此外,它們還為開發(fā)人員供給了一些自定義和獨(dú)特的選項(xiàng)。萬(wàn)一真的沒(méi)有可用插件的話,沒(méi)什么不自己構(gòu)建一個(gè)呢?
6.“盡管網(wǎng)站能夠作業(yè),但我懼怕IE閱覽器。”
在Internet Explorer中烘托網(wǎng)頁(yè)的前史充滿的艱苦檢測(cè),是咱們有目共睹或親身體驗(yàn)過(guò)的。從5.5版別升級(jí)到IE9-IE10,總是需求爭(zhēng)取到更高檔閱覽器的支撐。web開發(fā)人員或許會(huì)懼怕調(diào)試網(wǎng)頁(yè),由于在IE6中翻開頁(yè)面是一個(gè)烘托噩夢(mèng)。值得幸虧的是,這樣的日子正在漸漸成為曩昔。
7.“關(guān)于邏輯表達(dá)式而言,這好像并不怎樣合乎邏輯!
關(guān)于if / else循環(huán),for循環(huán),while循環(huán),do循環(huán)等等,都有邏輯表達(dá)式。當(dāng)閱覽示例代碼時(shí),我企圖指出我的邏輯是怎樣作業(yè)的。NOT運(yùn)算符和比較標(biāo)記的數(shù)量又是如此之多。我常;剡^(guò)頭去更新我自己的邏輯以便于更好地適合未來(lái)的做法。
8.“我用30分鐘寫函數(shù),花2小時(shí)讓它作業(yè)。”
這難道不像咱們自己的編程故事嗎?你正興致勃勃地在構(gòu)建著什么,可是突然之間,函數(shù)輸出了一個(gè)喪命的過(guò)錯(cuò)。所以,現(xiàn)在你必須回過(guò)頭去刪去一些代碼塊,以找犯過(guò)錯(cuò)發(fā)生的行號(hào)。當(dāng)你總算找到罪魁禍?zhǔn),并處理它時(shí),盡管有種精疲力竭的感覺(jué),但也滿心安慰。
9.“在閱覽多篇博客文章之后,我意識(shí)到,我之前全都是錯(cuò)的。”
我常常會(huì)一開端就依據(jù)自己的編程思想,一頭扎進(jìn)去研討,可是這或許會(huì)導(dǎo)致麻煩,假如作業(yè)不像原先設(shè)想地那樣順利的話。現(xiàn)已有很屢次在我啟動(dòng)一個(gè)項(xiàng)目之后,陷入了困境,然后只好尋求博客和其他論文的支撐。然后我發(fā)現(xiàn)我的整個(gè)辦法實(shí)際上是過(guò)錯(cuò)的,而且從頭來(lái)過(guò)更簡(jiǎn)單!假如我開端的時(shí)分能先做一番研討的話,從長(zhǎng)遠(yuǎn)來(lái)說(shuō),反而節(jié)省時(shí)刻。
10.“Stack Overflow上和藹的人或許樂(lè)意幫助我。”
我現(xiàn)已數(shù)不清有多少次我經(jīng)過(guò)Stack Overflow處理了難題。社區(qū)里都是和藹和聰明的人,他們十分樂(lè)意供給幫助,假如你邁出第一步的話。在一切的在線論壇中,Stack Overflow絕對(duì)是對(duì)軟件編程以及前端/后端web開發(fā)支撐最廣泛的網(wǎng)絡(luò)。
11.“花費(fèi)大力氣才找出問(wèn)題的原因是缺少了右括號(hào)。”
調(diào)試是你必須要采取的過(guò)程。進(jìn)兩步,退一步。盯著代碼數(shù)個(gè)小時(shí),以為函數(shù)名或變量效果域中有哪里搞錯(cuò)了,最終才發(fā)現(xiàn)是遺漏了一個(gè)括號(hào),這味道,酸爽得不要不要的。一切這些時(shí)刻都由于一個(gè)小小的語(yǔ)法過(guò)錯(cuò)而糟蹋。
12.“喝杯咖啡,歇息一下!”
有時(shí)分,你僅僅需求站起來(lái),遠(yuǎn)離顯示器。將鼠標(biāo)懸停在鍵盤數(shù)個(gè)小時(shí),反而有助于打破常規(guī)。大多數(shù)健康輔導(dǎo)都會(huì)主張?jiān)蹅兠扛?0-60分鐘歇息一會(huì)?墒沁@一切都取決于你的需求,假如你覺(jué)得在程序中心歇息更令人懊喪的話,那就不要中止。
13.“我應(yīng)該把這個(gè)項(xiàng)目置之不理,以后再來(lái)處理它!
歇息的另一個(gè)挑選是脫離你的項(xiàng)目,而不僅僅是遠(yuǎn)離你的電腦。假如還有其他作業(yè)需求做,那么無(wú)妨去做其他作業(yè)。相關(guān)于現(xiàn)已花費(fèi)了5個(gè)小時(shí)來(lái)處理問(wèn)題仍然不得入門而言的話,這將能更好地分配時(shí)刻和資源。
14.“我很置疑古典音樂(lè)能否激發(fā)我的編程才能!
有一種說(shuō)法是,古典音樂(lè)能夠在生命的前期階段促進(jìn)植物生長(zhǎng)。我個(gè)人十分喜愛在寫雜亂筆記時(shí)傾聽古典音樂(lè)。爵士樂(lè)、鋼琴、大樂(lè)團(tuán),優(yōu)雅的音樂(lè)在全世界的人類文明中都有一席之地。那么,在編程的一起傾聽才智的音樂(lè)真的能夠讓你更才智地調(diào)試嗎?或許不會(huì),不過(guò)期望它不會(huì)讓你變得更笨拙。
15.“喝點(diǎn)酒吧,或許現(xiàn)在是查驗(yàn)鮑爾默峰值理論的好時(shí)機(jī)。”
很多讀者都聽說(shuō)過(guò)鮑爾默的峰值理論,依據(jù)一個(gè)特殊XKCD漫畫而得出。簡(jiǎn)略地說(shuō),這個(gè)理論以為程序員的編碼才能在喝了一定量的酒之后,會(huì)達(dá)到一個(gè)峰值。作者名叫史蒂夫·鮑爾默,他的行為乖僻,就像是一個(gè)醉漢,這有一定的挖苦意味,由于鮑爾默在微軟歷來(lái)就不是一名真實(shí)的程序員;蛟S咱們需求等候他人來(lái)實(shí)踐證明這個(gè)理論吧。
16.“是不是有人動(dòng)過(guò)了我的源代碼?”
這聽起來(lái)有點(diǎn)妄想和偏執(zhí),但有時(shí)你會(huì)不由自主地置疑,是不是有人在你補(bǔ)覺(jué)的時(shí)分,寫過(guò)這個(gè)東西了;仡欔傥魩字芑驇讉(gè)月做的項(xiàng)目會(huì)讓你的心不斷地往下沉。有時(shí)分你會(huì)發(fā)現(xiàn)一些你現(xiàn)已不記住增加的東西——乃至這個(gè)項(xiàng)目你最近一周才剛剛閱覽過(guò)!我為代碼而瘋狂,但你永久不會(huì)知道…
17.“我不知道這意味著什么!
你能遇到的最壞狀況是,你對(duì)你正在閱覽的源代碼徹底不知道該怎樣做;蛟S是你自己的項(xiàng)目,也或許是他人的項(xiàng)目,但問(wèn)題的根源是相同的,F(xiàn)在,你必須決定是否值得花更多的時(shí)刻去搜索代替計(jì)劃,或仔細(xì)檢查腳本以了解它是怎樣作業(yè)的。
18.“我需求Google過(guò)錯(cuò)信息!
在PHP中作業(yè)了多年之后,我不得不說(shuō),Google是我調(diào)試問(wèn)題時(shí)的最好的朋友。運(yùn)用Objective-C、C ++、Java、Python和其他首要言語(yǔ),也是如此。過(guò)錯(cuò)信息十分有幫助,可是除非你記住不同的代碼意味著什么,否則它讀起來(lái)更像是翻譯過(guò)的計(jì)算機(jī)言語(yǔ)。值得幸虧的是,有很多在線支撐能夠幫助咱們確認(rèn)這些過(guò)錯(cuò)信息的真實(shí)意義。
19.“我應(yīng)該停下來(lái),收工……但我真的很想處理它!”
咱們都有過(guò)極度心灰意懶,想要放棄的感觸,但總感覺(jué)功敗垂成不是正確的挑選。于是,你繼續(xù)埋首研討,并測(cè)驗(yàn)新的處理計(jì)劃來(lái)調(diào)試?墒牵偃邕@仍是意味著另一個(gè)小時(shí)的糟蹋呢?關(guān)于這樣的狀況我并不生疏,令人十分令人懊喪。
20.“哦,天哪,我以前為什么不寫點(diǎn)注釋呢?”
當(dāng)涉及到比較基礎(chǔ)的前端HTML / CSS / JS時(shí),咱們沒(méi)有必要寫注釋。但更雜亂的腳本和程序卻需求一定形式的條理安排,當(dāng)你在幾個(gè)月后,乃至若干年之后需求再回過(guò)頭來(lái)看的話。有時(shí)你會(huì)忘掉注釋函數(shù)及其參數(shù)、輸出格局,和其他的必要數(shù)據(jù)。這在一段時(shí)刻之后無(wú)疑會(huì)導(dǎo)致紊亂,而且,當(dāng)bug開端出現(xiàn)時(shí),你必須調(diào)試整個(gè)腳本來(lái)尋覓處理計(jì)劃。因而,要是有一些有幫助的注釋就會(huì)讓你獲益良多。
21.“20分鐘前它還能夠作業(yè)的……”
在構(gòu)建程序時(shí),或許最令人懊喪的部分就是,它從能作業(yè)到不能作業(yè)——而你沒(méi)有更新代碼的任何部分!我立誓這是真的。而且這是沒(méi)有任何意義的作業(yè)——或許是其他程序正在運(yùn)行緩存版別?有很屢次你更新了一丁點(diǎn)代碼,卻導(dǎo)致了整個(gè)程序潰散犯錯(cuò),徹底中止了作業(yè)?祻(fù)到最近可作業(yè)的復(fù)制文件,然后從那里開端一步步前進(jìn)。
22.“僅僅忘掉了一個(gè)分號(hào),然而整個(gè)程序卻因而而轟然倒下。”
簡(jiǎn)直一切我運(yùn)用的編程言語(yǔ)都需求結(jié)束符。盡管不是一切的言語(yǔ)都有,但在C/C ++中是很常見的。忘掉增加結(jié)束符,不過(guò)是一個(gè)很明顯的過(guò)錯(cuò)!可是解析器不知道這一點(diǎn),它會(huì)拋出一個(gè)喪命過(guò)錯(cuò)。于是,你不得不額定花20分鐘去搜索技術(shù)毛病,而原本只需求用1秒鐘補(bǔ)上那個(gè)缺少的分號(hào)即可。嗯,這就是調(diào)試軟件的趣味。
23.“我不知道讓他人來(lái)修正我的代碼,得花多少錢?”
延聘另一個(gè)開發(fā)人員的點(diǎn)子是挺誘人的,但從財(cái)政上看明顯沒(méi)有那么可行。而且假如你不親身體驗(yàn)的話,又怎樣能從這些過(guò)錯(cuò)中學(xué)到東西呢?當(dāng)你在經(jīng)歷屢次失利之后,總算理解了某個(gè)編程概念的時(shí)分,那感覺(jué)真是棒極了。盡管如此,我的腦海里仍然時(shí)不時(shí)地有一種“讓他人來(lái)修正代碼”的沖頭。
24.“快速閱覽Hackers News能夠進(jìn)步我的作業(yè)功率!
很多程序員最喜愛閱覽的,有關(guān)于軟件和創(chuàng)業(yè)公司等社會(huì)新聞的挑選是Hackers News頭版。它有很多關(guān)于自由職業(yè)、時(shí)刻管理、軟件開發(fā)、以及創(chuàng)業(yè)發(fā)布和融資的很多信息。盡管HN能夠經(jīng)過(guò)自我教育讓你感覺(jué)自己變得更有功率了,但一起它也會(huì)糟蹋你的時(shí)刻。每隔幾小時(shí)去快速閱覽下Hackers News也不是那么糟糕。
25.“這個(gè)API怎樣沒(méi)有文檔?!”
在運(yùn)用帶有壞文檔的插件或結(jié)構(gòu)時(shí),最令人懊喪的是,你必須靠自己去深化研討源代碼。我喜愛開發(fā)人員花時(shí)刻去專門規(guī)劃可用文檔頁(yè)面的項(xiàng)目。一切的參數(shù)和選項(xiàng)都解說(shuō)得清清楚楚,乃至或許會(huì)被用在一些示例代碼片段中。但可悲的是,現(xiàn)實(shí)并非總是如此。所以最簡(jiǎn)略的辦法是遠(yuǎn)離不良文檔,不自找麻煩。
26.“我真期望我保存了那個(gè)數(shù)據(jù)庫(kù)的備份副本……”
在編寫和調(diào)試代碼時(shí),我不會(huì)想到要備份。然而,數(shù)據(jù)備份供給了答應(yīng)咱們回過(guò)頭去修正的踏腳石。這在實(shí)時(shí)的服務(wù)器環(huán)境中尤為有用,由于有什么變化會(huì)當(dāng)即履行。以防萬(wàn)一,咱們應(yīng)該記住保存網(wǎng)站文件和數(shù)據(jù)庫(kù)的本地副本!盡管這會(huì)是一個(gè)惱人的使命,但其惱人程度遠(yuǎn)遠(yuǎn)比不上重建損壞的SQL數(shù)據(jù)庫(kù)。
27.“讓它正常作業(yè)的最快處理辦法是什么?”
在花費(fèi)數(shù)個(gè)小時(shí)苦苦思考自定義的處理計(jì)劃之后,很明顯你需求一種新的辦法。在規(guī)劃美麗的界面之前,程序員首先想到的是讓功用正常作業(yè)。確認(rèn)最快、最精確的處理計(jì)劃,并施行這個(gè)處理計(jì)劃讓其作業(yè)才是100%利用了時(shí)刻。然后,再轉(zhuǎn)移到美麗美觀方面。
28.“我敢打賭更新我的軟件將處理這個(gè)問(wèn)題。”
管理編程言語(yǔ)依靠和插件的團(tuán)隊(duì)并不需求常常發(fā)布版別。有時(shí),在你從計(jì)算機(jī)傳輸文件到實(shí)時(shí)服務(wù)器的時(shí)分,更新PHP /Ruby/ Python / SQL版別能夠處理調(diào)試問(wèn)題。本地更新很少能夠幫助修正源代碼中的bug,除非你的版別現(xiàn)已過(guò)時(shí)得無(wú)可救藥。所以,值得一試!
29.“我應(yīng)該更有條理而且去學(xué)習(xí)Git ……下周就去研討它!
開源版別操控包Git在程序員中十分受歡迎。相關(guān)于其他的競(jìng)爭(zhēng)對(duì)手,它供給了更簡(jiǎn)單的學(xué)習(xí)曲線,而且被許多在線代碼庫(kù)房,如Github上和Bitbucket運(yùn)用。開發(fā)人員很簡(jiǎn)單拖延去學(xué)習(xí)Git的行動(dòng),由于它關(guān)于初學(xué)者而言明顯是有難度的?墒且坏┠阒懒烁局噶,那么Git就是小菜一碟。而且它還能使調(diào)試版別操控愈加清晰。
30.“算了,我仍是從頭再開端吧!
有時(shí)分,在你絞盡腦汁花費(fèi)數(shù)個(gè)小時(shí)之后,或許要做的僅僅將你的作業(yè)文件移動(dòng)到歸檔目錄(或刪去它們),再?gòu)念^開端就能夠了。可是,考慮到從前現(xiàn)已消耗的時(shí)刻,你很難下定這個(gè)決心?墒,當(dāng)我束手無(wú)策時(shí),我往往會(huì)挑選從頭開端,由于這樣才有或許找到完結(jié)項(xiàng)目的正確道路。

上一條:系統(tǒng)途徑開發(fā)終究要不要規(guī)...

下一條:視覺(jué)引導(dǎo)番外篇——如何搭...