一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

為什么你覺得舊代碼異?;靵y?因?yàn)樽x代碼更難

機(jī)器學(xué)習(xí)算法與人工智能 ? 來源:未知 ? 作者:李倩 ? 2018-05-23 11:07 ? 次閱讀

想要推倒舊代碼,

重寫代碼的程序員們,

請注意:

保持冷靜,繼續(xù)前行!

程序員都有一顆工程師的心,所以當(dāng)他們到一片新的場地想做的第一件事就是,將舊的一切推倒重來。是的,他們決不會滿足于簡單的增量勞動。

或許這種微妙的心理定位可以解釋:為什么程序員進(jìn)入新項(xiàng)目組后寧愿丟掉舊代碼重新寫,也不愿意修修補(bǔ)補(bǔ)。他們認(rèn)為舊代碼簡直一團(tuán)糟。

但是,事實(shí)上真是這樣嗎?你之所以認(rèn)為舊代碼一團(tuán)糟,其實(shí)是由編程的一個基本定律決定的,那就是:寫代碼容易,讀代碼難。

為什么你覺得舊代碼異?;靵y?因?yàn)樽x代碼更難。

這大概就是代碼Reuse難以實(shí)現(xiàn)的原因。 這就是你組里的每個人都喜歡用不同的功能將分割的字符串轉(zhuǎn)換成一個數(shù)組。比起猜測舊的功能是怎樣實(shí)現(xiàn)的,重新寫一個自己的功能要簡單和有趣多了。

作為這個公理的推論,你可以問問身邊的程序員他們正在奮戰(zhàn)的代碼怎么樣?「簡直是一塌糊涂!」他們肯定會這樣說?!肝液喼毕胪频怪貋?」

為什么認(rèn)為代碼這么糟糕呢?「額,看看這個功能,竟然有兩頁長!完全不知道這些東西為什么在這里!完全不知道這些API是干什么的?!顾麄儠@樣回答你。

曾經(jīng),Borland的創(chuàng)始人 Philippe Kahn當(dāng)初就是向記者們吹噓:Quattro Pro會比Microsoft Excel要好用得多,因?yàn)樗菑念^開始編寫的,全部都是新的源代碼!

但是,認(rèn)為新代碼比舊代碼好簡直就是荒謬。舊代碼是已經(jīng)運(yùn)行過的,測試過的。無數(shù)的bug在被發(fā)現(xiàn)前都上線運(yùn)行過,發(fā)現(xiàn)之后程序員們可能在花了好些日子才修復(fù)了這些bug。這種修復(fù)可能是一行代碼,也可能是幾個字符,無數(shù)的時間和精力都花在了這些bug修復(fù)上。

當(dāng)你決定拋棄這些舊代碼從零開始的時候,你也丟掉全部前任努力的結(jié)果。

新代碼一定比舊代碼的好嗎?NO,NO,NO重寫可能會帶來更大的風(fēng)險。

對技術(shù)領(lǐng)導(dǎo)者來說,重寫項(xiàng)目的代碼也是一個異常艱難的決定。因?yàn)閺墓緦用嬲f,重現(xiàn)代碼甚至?xí){產(chǎn)品的市場競爭力。一旦決定重寫代碼,那么與競品相比,你可能落后了2~3年——在軟件行業(yè),這時間可夠長的。

你理想中的新代碼會帶來產(chǎn)品功能的提升

但事實(shí)上,即便重寫的新代碼可以實(shí)現(xiàn)舊代碼的所有功能和需求,但是為產(chǎn)品帶來的市場競爭力只有邊際提升。因?yàn)橹貙懹玫男录夹g(shù)、新語言、新框架并沒有給產(chǎn)品帶來質(zhì)的飛躍。

更不用說在重寫的漫長過程中可能會遇到一些意外情況,比如:

缺錢:資金鏈的斷裂

缺人:核心程序員離職

最終導(dǎo)致效果不佳:達(dá)不到原產(chǎn)品應(yīng)有的所有功能和需求,白白浪費(fèi)了時間和金錢,也丟掉了市場競爭力。

所以重寫代碼意味著,你在把自己置身于非常危險的境地,可能幾年后你也寫不出比以前更好的代碼。你只是花了一大筆錢把已經(jīng)存在的代碼又寫了一遍。

當(dāng)你覺得眼前的舊代碼很爛時,該怎么辦?

你覺得舊代碼寫的很爛,那又怎樣呢?它們已經(jīng)上線,已經(jīng)在實(shí)際運(yùn)行中經(jīng)受住了考驗(yàn)。所以當(dāng)你發(fā)現(xiàn)前任留下的代碼亂七八糟的時候,不妨冷靜下來,從以下三個方面入手理解代碼、改善代碼:

1代碼的機(jī)構(gòu)有問題

如果一段網(wǎng)絡(luò)代碼突然彈出了自己的對話框,應(yīng)該是UI代碼需要被處理。這些問題可以被解決掉,你要一次次小心地移動代碼,重構(gòu),改變接口。還需要一位細(xì)心的工程師立馬仔細(xì)地檢查這些改變是否有問題,從而不打擾到其他人。事實(shí)上,甚至比較大的結(jié)構(gòu)變化也可以不扔掉代碼來完成。

大牛程序員回憶說,曾經(jīng)在某個項(xiàng)目中,他和他的團(tuán)隊(duì)花了好幾個月重新架構(gòu)在一點(diǎn)上:把代碼動來動去、清理、創(chuàng)建有意義的基類,并創(chuàng)建了模塊之間的完美接口。但是他們始終非常小心翼翼,并沒有產(chǎn)生新的bug、也沒有丟掉任何舊代碼。

2代碼的效率不高

曾經(jīng),Netscape的渲染代碼被傳非常緩慢。但事實(shí)上,這只會影響該項(xiàng)目的一小部分,這部分是你可以優(yōu)化甚至重寫的。你完全不必重寫全部代碼。優(yōu)化速度的1%工作量,會讓你獲得99%的爆炸性提高。

3代碼寫得很丑

有些代碼真的寫的很丑,比如Joel曾參與一個項(xiàng)目,開始用下劃線做開始的成員變量約定,但后來改用更標(biāo)準(zhǔn)的「M_」。所以一半的功能用「_」開始,一半用「M」開始,這看起來真的很丑陋。但這個問題5分鐘就能解決,而不用從頭開始寫全部的代碼。

最后,你要記住,從頭開始再寫一遍并不意味著你會寫出比以前更好的代碼。因?yàn)槟銢]有參與到上一個版本的創(chuàng)建,所以你其實(shí)根本就不算有經(jīng)驗(yàn)。一旦你準(zhǔn)備推倒重寫,你可能會再犯一遍版本一犯過的錯,甚至?xí)a(chǎn)生更多的新問題。

面對糟糕的舊代碼,Keep Calm & Carry On !

在大型商業(yè)項(xiàng)目中,推倒重來是非常危險的行為。當(dāng)然,如果你是在做實(shí)驗(yàn),想到新算法可以隨時重寫。

如果你跳槽、或剛接手一個新項(xiàng)目,面對看上去異?;靵y的舊代碼,請冷靜下來,忍住推倒重寫的沖動,想想上面這些經(jīng)驗(yàn)之談。

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

    關(guān)注

    30

    文章

    4880

    瀏覽量

    70025
  • 程序員
    +關(guān)注

    關(guān)注

    4

    文章

    954

    瀏覽量

    30193

原文標(biāo)題:為什么程序員千萬不要重寫代碼?

文章出處:【微信號:machinelearningai,微信公眾號:機(jī)器學(xué)習(xí)算法與人工智能】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    OLED代碼分享

    OLED代碼
    發(fā)表于 04-29 17:04 ?0次下載

    分析C語言代碼結(jié)構(gòu)的設(shè)計(jì)問題

    來分析一個C語言代碼結(jié)構(gòu)的設(shè)計(jì)問題。 這段代碼,使用了兩次malloc,分別給 p1 和 p2 申請了內(nèi)存。用完后,內(nèi)存釋放,防止內(nèi)存泄漏。 大家覺得,這樣的代碼設(shè)計(jì)有沒有問題。
    的頭像 發(fā)表于 02-11 09:31 ?262次閱讀

    代碼與傳統(tǒng)開發(fā)的區(qū)別 低代碼與無代碼開發(fā)的區(qū)別

    在軟件開發(fā)領(lǐng)域,傳統(tǒng)開發(fā)、低代碼開發(fā)以及無代碼開發(fā)是三種不同的開發(fā)方式,每種方式都有其獨(dú)特的優(yōu)勢和適用場景。 一、低代碼開發(fā)與傳統(tǒng)開發(fā)的區(qū)別 低代碼開發(fā)是一種新興的應(yīng)用程序開發(fā)方法,旨
    的頭像 發(fā)表于 01-31 10:48 ?418次閱讀

    Gmapping源代碼

    Gmapping源代碼.docx
    發(fā)表于 11-16 13:42 ?0次下載

    代碼整潔之道-大師眼中的整潔代碼是什么樣

    幾個月前寫了一篇文章“如何寫出難以維護(hù)的代碼”,從中能大概了解到不好維護(hù)的代碼是什么樣,有哪些壞味道,那肯定有人會反問,難以維護(hù)的代碼見的太多了,也知道長什么樣,但是對于好維護(hù)的代碼
    的頭像 發(fā)表于 09-09 16:30 ?553次閱讀
    <b class='flag-5'>代碼</b>整潔之道-大師眼中的整潔<b class='flag-5'>代碼</b>是什么樣

    ep100驅(qū)動器報警代碼

    EP100驅(qū)動器報警代碼的含義和解決方法會因具體的報警代碼而異。然而,基于參考文章和一般經(jīng)驗(yàn),我可以為提供一些常見的EP100驅(qū)動器報警代碼及其可能的原因和解決方法。 常見EP100
    的頭像 發(fā)表于 09-07 09:40 ?1150次閱讀

    ida反編譯出來代碼能直接用嗎

    一些有助于人類閱讀但不影響機(jī)器執(zhí)行的元信息,如注釋、文檔字符串以及某些編譯時優(yōu)化的細(xì)節(jié)。因此,反編譯出來的代碼可能無法完全還原原始代碼的意圖和結(jié)構(gòu)。 二、依賴性問題 即使反編譯出來的代碼邏輯上是正確的,也可能
    的頭像 發(fā)表于 09-02 10:55 ?1202次閱讀

    hex文件如何查看原c語言代碼

    直接將 .hex 文件轉(zhuǎn)換回原始的 C 語言代碼是不可能的,因?yàn)?/b> .hex 文件是二進(jìn)制文件,它包含了單片機(jī)程序編譯后的機(jī)器碼,這些機(jī)器碼與原始的 C 語言代碼在結(jié)構(gòu)和表達(dá)上存在巨大的差異。機(jī)器碼
    的頭像 發(fā)表于 09-02 10:37 ?3970次閱讀

    國內(nèi)低代碼平臺推薦--萬界星空科技低代碼平臺

    代碼平臺是一種應(yīng)用程序,它為編程提供圖形用戶界面,從而以極快的速度開發(fā)代碼,減少傳統(tǒng)編程工作。 這些工具有助于快速開發(fā)代碼,最大限度地減少手工編碼的工作量。這些平臺不僅有助于編碼,還有助于快速設(shè)置和部署。
    的頭像 發(fā)表于 07-18 15:39 ?482次閱讀
    國內(nèi)低<b class='flag-5'>代碼</b>平臺推薦--萬界星空科技低<b class='flag-5'>代碼</b>平臺

    該如何提高代碼容錯率、降低代碼耦合度?

    提高RT-Thread代碼的容錯率和降低耦合度是確保代碼質(zhì)量和可維護(hù)性的關(guān)鍵,下面列舉了幾種在編寫代碼時,提高代碼容錯率和降低耦合度的思路。讓我們一起來看看吧~一、提高
    的頭像 發(fā)表于 06-26 08:10 ?978次閱讀
    該如何提高<b class='flag-5'>代碼</b>容錯率、降低<b class='flag-5'>代碼</b>耦合度?

    vfs_uart中的代碼導(dǎo)致串口中斷異常怎么解決?

    (...);} 【5】如果此時cache禁用(例如在OTA升級),flash代碼不可執(zhí)行,就會導(dǎo)致異常! 總結(jié):ESP32由于flash用于XIP的設(shè)計(jì),同時又用于讀寫用戶數(shù)據(jù)和OTA。這雖然成本降低了,但引入非常多與此相關(guān)的BUG。
    發(fā)表于 06-21 07:32

    一站式統(tǒng)一返回值封裝、異常處理、異常錯誤碼解決方案—最強(qiáng)的Sping Boot接口優(yōu)雅響應(yīng)處理器

    1. 前言 統(tǒng)一返回值封裝、統(tǒng)一異常處理和異常錯誤碼體系的意義在于提高代碼的可維護(hù)性和可讀性,使得代碼更加健壯和穩(wěn)定。統(tǒng)一返回值封裝可以避免每一個接口都需要手工拼裝響應(yīng)報文;統(tǒng)一
    的頭像 發(fā)表于 06-20 15:42 ?814次閱讀

    探討AI編寫代碼技術(shù),以及提高代碼質(zhì)量的關(guān)鍵:靜態(tài)代碼分析工具Perforce Helix QAC &amp; Klocwork

    的過程,并回答這個問題: AI會取代程序員嗎? 什么是AI代碼生成? 近年來,生成式AI的應(yīng)用呈爆炸式增長,這主要因?yàn)?/b>現(xiàn)在有足夠的計(jì)算能力來運(yùn)行深度學(xué)習(xí)算法,而且訓(xùn)練機(jī)器學(xué)習(xí)模型所需的海量數(shù)據(jù)也在增加。 AI代碼生成是指使用生成
    的頭像 發(fā)表于 06-05 14:10 ?658次閱讀

    cyt4bb7cebq0代碼放在flash里執(zhí)行會導(dǎo)致異常的原因?

    切換的代碼都放在RAM里運(yùn)行么? 因?yàn)?/b>是要對flash進(jìn)行操作的,代碼也放在flash里執(zhí)行會導(dǎo)致異常。
    發(fā)表于 05-27 08:21

    藍(lán)牙遙控代碼及使用

    藍(lán)牙遙控代碼及使用
    的頭像 發(fā)表于 05-15 10:15 ?1500次閱讀