自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

4個(gè)費(fèi)勁心思卻走向編程地獄的陷阱

開發(fā) 后端 前端
每個(gè)人都在自己的電腦前敲鍵盤(因?yàn)榻刂箷r(shí)間的逼近),在謾罵客戶的同時(shí),大口大口喝咖啡,眼睛里同樣布 滿血絲。沉睡中的開發(fā)人員于是問(wèn)恰巧出現(xiàn)的天使:“既然如此,那么,天堂的程序員和地獄的程序員之間的區(qū)別是什么呢?”“區(qū)別在于,”這個(gè)天使回答,“天 堂里的程序員能夠按時(shí)完成任務(wù)。”

優(yōu)化你的代碼、創(chuàng)建編程抽象、編寫跨平臺(tái)的應(yīng)用程序,幾乎所有遵守這些戒律的程序員不出意外都拿著一等票去往了一個(gè)沒有休憩時(shí)間,項(xiàng)目總能準(zhǔn)時(shí)完成,代碼庫(kù)永遠(yuǎn)不會(huì)過(guò)時(shí),而且他們也不必寫任何文檔的天堂——你懂的。

但是,要是情況不是這樣的呢?要是那些技術(shù)將你帶往的不是天堂,而是地獄呢?要是并非死后到達(dá)地獄,反而是現(xiàn)在呢?要是地獄充滿了無(wú)數(shù)的不眠之夜, 超出的***期限,破碎的自尊心和狂怒的項(xiàng)目經(jīng)理呢?我們更多地將到達(dá)地獄的原因歸咎于這樣一個(gè)事實(shí),當(dāng)涉及到一些具體——和常見——的情況時(shí),那些戒律將 成為坑死程序員的陷阱。更糟的是,你甚至不會(huì)意識(shí)到這一點(diǎn)。稀里糊涂,游戲就over了。

這些陷阱之所以陰險(xiǎn),是因?yàn)樗鼈冏屇阌X得你正在往正確的道路上走。但其實(shí)不然。這些坑死程序員的陷阱,簡(jiǎn)而言之就是,當(dāng)你做一些你認(rèn)為應(yīng)該做的事情時(shí),但卻沒有用你應(yīng)該做的方式。

 

[[164988]]

這篇文章探討了可以把程序員的生活變成人間地獄的4個(gè)正確做法。

  1. 優(yōu)化代碼

  2. 創(chuàng)建軟件抽象

  3. 使用編程工具

  4. 創(chuàng)建跨平臺(tái)的應(yīng)用程序

良好的意圖1:優(yōu)化代碼

優(yōu)化代碼本身沒有錯(cuò)。相反:表現(xiàn)力強(qiáng)的,高效的,和資源節(jié)約型的代碼是一個(gè)成熟大師的標(biāo)志。不過(guò)……希望你不會(huì)掉進(jìn)任何優(yōu)化的陷阱。

陷阱1:過(guò)早優(yōu)化

過(guò)早優(yōu)化是一個(gè)典型的程序員陷阱。即使是最博學(xué)和最有經(jīng)驗(yàn)的程序員也會(huì)掉入這個(gè)陷阱。了解處理器是工作的以及知道強(qiáng)大的算法,可以幫助編寫出高效又 有效的代碼。然而,那并不總是必要的:有時(shí)它甚至是一件壞事。因?yàn)槟愫茈y猜出薄弱點(diǎn)會(huì)在哪里,這意味著在得到它如何工作的詳細(xì)經(jīng)驗(yàn)證據(jù)之前,試圖優(yōu)化代碼 會(huì)導(dǎo)致問(wèn)題復(fù)雜、有bug的代碼。更不要說(shuō)浪費(fèi)在優(yōu)化中的時(shí)間了。

陷阱2:過(guò)晚優(yōu)化

有時(shí)候,程序員為了避免過(guò)早優(yōu)化,反而掉進(jìn)了過(guò)晚優(yōu)化的陷阱,過(guò)晚優(yōu)化通常發(fā)生在認(rèn)為優(yōu)化是項(xiàng)目***階段的地方。還等什么呢?過(guò)晚的優(yōu)化可能會(huì)讓你 不得不重寫至少三分之一的代碼。更糟糕的是,你可能還沒法寫出另一塊干凈的,可工作的代碼。浪費(fèi)了時(shí)間,錯(cuò)過(guò)了截止期限,迷失了自己。

補(bǔ)丁

但是何時(shí)優(yōu)化太早何時(shí)優(yōu)化又變得太晚是不容易弄清楚的。所以睜大你的眼睛,隨時(shí)保持警惕!

  • 不要立即對(duì)代碼進(jìn)行優(yōu)化,想一想以后有沒有其他更好更合適的時(shí)間

  • 沒有正當(dāng)理由不要推遲優(yōu)化

  • 記住20/80法則:專注于那些雖然只占代碼的20%,卻對(duì)結(jié)果有著80%影響的代碼(可以使用分析器)

良好的意圖2:程序抽象

要是你仍然不得不使用goto語(yǔ)句來(lái)設(shè)置周期呢?或者,要是你不能夠改變你的集合大小呢?試想一下,要是你需要預(yù)留一些內(nèi)存,復(fù)制老集合到內(nèi)存中,添加新的元素,并釋放未使用的內(nèi)存。完全是一個(gè)噩夢(mèng)!

抽象可能是編程中***的禮物。但是如果涉及我們將要討論的這些情況,就另當(dāng)別論了。

陷阱1:過(guò)于復(fù)雜

有些人認(rèn)為,專門的函數(shù)是弱者所為,這就是為什么他們要編寫不管情況如何都可以完成任務(wù)的***化的廣義函數(shù)。在著手于主要功能之前,他們先寫了一個(gè) 通用框架。這樣做為什么不好?這么說(shuō)吧,他們的代碼只有30%被使用,而且沒有人會(huì)需要一個(gè)通用的功能。所以這樣費(fèi)心費(fèi)力值得嗎?

為了制作俄羅斯方塊,加載20個(gè)類、采用12種不同的圖案、使用你自己的DSL來(lái)解析其他的DSL、創(chuàng)建一個(gè)跨平臺(tái)的框架來(lái)可視化周期性圖形,這便是過(guò)于復(fù)雜的典型例子。那些有這個(gè)美國(guó)時(shí)間堅(jiān)持走這條路的程序員肯定以為自己是長(zhǎng)生不死的。

陷阱2:忽視抽象

相對(duì)有經(jīng)驗(yàn)的程序員更容易被受過(guò)度復(fù)雜這個(gè)陷阱的誘捕,那么他們經(jīng)驗(yàn)不足的同行們則更容易完全忽略抽象。

往往在程序員剛開始使用一種新的編程語(yǔ)言來(lái)工作的時(shí)候,就是這個(gè)陷阱虎視眈眈最容易捕獲獵物的時(shí)候。由于判定學(xué)習(xí)新語(yǔ)言的抽象會(huì)花費(fèi)太多時(shí)間,所以 就降低了其在優(yōu)先事項(xiàng)清單上的地位。另一方面,舉個(gè)例子,當(dāng)你從C轉(zhuǎn)移到C ++,或當(dāng)你從一種操作語(yǔ)言轉(zhuǎn)移到Haskell語(yǔ)言時(shí),忽略迭代器會(huì)嚴(yán)重限制你。內(nèi)置的語(yǔ)言工具和第三方的庫(kù)和框架,實(shí)際上通過(guò)使得代碼更短,更簡(jiǎn)單, 更高效而改善了代碼。

補(bǔ)丁

這里有一些需要謹(jǐn)記的事情。

  • 研究你的編程語(yǔ)言用于執(zhí)行的抽象

  • 不要為了使用抽象而使用抽象

  • 保持簡(jiǎn)單愚蠢(KISS原則)——在設(shè)計(jì)工作中,這意味著系統(tǒng)的主要目標(biāo)和價(jià)值在于它的簡(jiǎn)單,所以如果不會(huì)丟失任何重要的東西的話,那么請(qǐng)忘記抽象

  • 你將不需要它(YAGNI原則)——在你開始工作于一個(gè)新功能之前,先好好想想你是否真的需要它

良好的意圖3:使用編程工具

現(xiàn)在有無(wú)數(shù)的工具和庫(kù),要么它們本身可以幫助完成任務(wù),要么可以讓工作變得更輕松。了解如何使用這些工具是技能集合的關(guān)鍵因素。當(dāng)然,這里也有一些陷阱是需要警惕的。

陷阱1:“我需要的一切已經(jīng)有人寫好了”

那些覺得一切都已經(jīng)有人寫好了的程序員,喜歡使用他們那套現(xiàn)成的第三方工具。有時(shí),而且特別是那些有經(jīng)驗(yàn)的程序員,總是伴隨著盲目地迷信于其他人的 代碼(他們下意識(shí)地認(rèn)為在某個(gè)地方有一群高智商的家伙編寫了毫無(wú)瑕疵的庫(kù))。但是,這是否真的值得你下載一個(gè)30+MB的庫(kù)只因?yàn)橐粋€(gè)小小的梅森旋轉(zhuǎn)算 法?你是否真的需要boost、Qt和STL來(lái)寫“Hello, world!”?其他人寫的代碼并不一定好,并且我也不愿意去調(diào)試別人寫的代碼。如果你發(fā)現(xiàn)自己在IDE中沒有自動(dòng)更正就無(wú)法寫好一行代碼,那么說(shuō)明你已 經(jīng)身陷這個(gè)陷阱而不自知。

每隔一段時(shí)間,程序員必須能夠推倒重來(lái),雖然……這也會(huì)成為陷阱。

陷阱2:重新發(fā)明輪子

重新發(fā)明輪子的通常是那些缺乏經(jīng)驗(yàn)或正在學(xué)習(xí)新語(yǔ)言半途中的程序員。他們重新寫了很多函數(shù),忘記了第三方庫(kù)中已有的相同功能的函數(shù)。他們相信,他們 的語(yǔ)言和標(biāo)準(zhǔn)庫(kù)已經(jīng)具備了所有他們可能需要的東西,而自動(dòng)更正工具,例如IDE則是為那些天才準(zhǔn)備的,調(diào)試器和分析器則時(shí)刻等待著那些不記得自己的代碼是 如何工作的人。

還需要我提一提這個(gè)陷阱出現(xiàn)的次數(shù)嗎?不僅如此,重新發(fā)明的輪子往往新不如舊:新的解決方案比標(biāo)準(zhǔn)方案要差得多。這和測(cè)試和教育項(xiàng)目無(wú)關(guān),當(dāng)然,有時(shí)候重新發(fā)明輪子是必不可少的,甚至是有益的:這適用于不需要常規(guī)項(xiàng)目的地方。

補(bǔ)丁

你必須知道如何使用***的工具,以及如何正確使用這些工具。但另一方面,你不能完全依賴他們。

良好的意圖4:跨平臺(tái)

理想的應(yīng)用程序應(yīng)該在許多操作系統(tǒng)和設(shè)備上都工作良好,對(duì)吧?是的,只要這個(gè)標(biāo)準(zhǔn)不會(huì)給你帶來(lái)麻煩。

陷阱1:過(guò)度跨平臺(tái)

“不要坐在這把椅子上:它是給大家看的,不是讓你坐的”(在一家現(xiàn)代藝術(shù)博物館中,其椅子藝術(shù)品上的告示上如此寫道)。那椅子就是“超級(jí)***跨平 臺(tái)”應(yīng)用程序的形象比喻。它不會(huì)正常工作于任何原先計(jì)劃設(shè)計(jì)的操作系統(tǒng)上,在電腦、平板電腦和智能手機(jī)上同樣如此。那么,為何會(huì)如此呢?類似于這樣的應(yīng)用 程序是一些經(jīng)驗(yàn)不足或過(guò)于自信的開發(fā)人員所編寫的,他們相信自己創(chuàng)建的代碼可以工作在所有的平臺(tái)上而無(wú)需任何自定義。它們也是由一些懶惰的開發(fā)人員編寫 的,自以為可以運(yùn)行在盡可能多的操作系統(tǒng)和平臺(tái)上,而不必花時(shí)間移植。

可能也會(huì)有例外。但是,大多時(shí)候試圖迫使應(yīng)用程序可工作于所有的操作系統(tǒng)和所有設(shè)備,只會(huì)讓你看著森林而找不到樹木。***,你只能茫茫然地帶著上面一段我們提到的那把跨平臺(tái)椅子離開。

陷阱2:只適用于WIN 32

另一個(gè)要避免的陷阱是發(fā)布只能和特定操作系統(tǒng)、特定鼠標(biāo)、特定鍵盤和特定虛擬現(xiàn)實(shí)頭盔一起工作的軟件。你想要為每個(gè)目標(biāo)平臺(tái)重寫所有或大部分的代碼嗎?有人強(qiáng)迫你為你的編譯器/解釋器使用不同尋常的擴(kuò)展嗎?你是故意編寫很難轉(zhuǎn)移的代碼嗎?那么你被困在了這個(gè)陷阱中。

補(bǔ)丁

  • 花時(shí)間搞清楚你的目標(biāo)操作系統(tǒng)和平臺(tái)是什么

  • 準(zhǔn)備修改部分代碼,或者甚至寫一個(gè)單獨(dú)的版本

  • 不要太執(zhí)著于任何特定的平臺(tái)

有沒有可能避免每一個(gè)陷阱呢?我不確定,但我知道的是,總有辦法讓你走出這些陷阱。凡事預(yù)則立,對(duì)吧?

***,請(qǐng)?jiān)试S我以一個(gè)“程序員的天堂與地獄”的故事結(jié)尾。

開發(fā)人員夢(mèng)到天堂里的程序員:每個(gè)人都坐在自己的電腦上,一口一口灌著咖啡,眼帶血絲……***的時(shí)間限制正在逼近……開發(fā) 人員驚醒過(guò)來(lái),繼續(xù)睡,又夢(mèng)到了地獄中的程序員:每個(gè)人都在自己的電腦前敲鍵盤(因?yàn)榻刂箷r(shí)間的逼近),在謾罵客戶的同時(shí),大口大口喝咖啡,眼睛里同樣布 滿血絲。沉睡中的開發(fā)人員于是問(wèn)恰巧出現(xiàn)的天使:“既然如此,那么,天堂的程序員和地獄的程序員之間的區(qū)別是什么呢?”“區(qū)別在于,”這個(gè)天使回答,“天 堂里的程序員能夠按時(shí)完成任務(wù)。”

編程陷阱會(huì)浪費(fèi)時(shí)間。如果你想在***期限前完成任務(wù)的話,那么請(qǐng)避免這些陷阱!

譯文鏈接:http://www.codeceo.com/article/4-good-intention-to-programming-hell.html
英文原文:FOUR GOOD INTENTIONS PAVING THE ROAD TO PROGRAMMING HELL

 

 

 

責(zé)任編輯:王雪燕 來(lái)源: 碼農(nóng)網(wǎng)
相關(guān)推薦

2018-11-18 16:31:14

Kubernetes監(jiān)控容器

2009-06-16 13:48:42

Java多線程

2009-02-03 09:15:20

C#VB.NETLinq

2010-07-14 17:03:52

編程語(yǔ)言

2019-04-24 15:20:44

Shell腳本編程Linux

2024-01-22 08:20:40

Python編程語(yǔ)言代碼陷阱

2011-08-31 09:03:09

ScalaAndroid編程語(yǔ)言

2012-01-05 09:35:52

語(yǔ)言開發(fā)工具新型語(yǔ)言

2020-07-09 13:53:11

機(jī)器學(xué)習(xí)技術(shù)工具

2020-10-31 22:01:40

NoSQL數(shù)據(jù)庫(kù)

2020-03-03 10:17:00

云計(jì)算公共云

2016-01-11 10:56:42

BYOD自帶設(shè)備

2022-10-11 07:20:56

YAML字符串語(yǔ)言

2021-07-16 10:27:07

ITIT領(lǐng)導(dǎo)IT管理

2012-05-08 13:14:05

JavaComparable

2019-10-13 16:53:51

機(jī)器學(xué)習(xí)模型數(shù)據(jù)

2020-10-18 06:56:08

編程代碼開發(fā)

2024-10-31 09:51:28

2017-09-08 15:43:44

編程程序搜索

2019-06-10 09:45:55

升職職業(yè)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)