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

開(kāi)發(fā)者一犯再犯的15個(gè)菜鳥(niǎo)錯(cuò)誤

開(kāi)發(fā) 前端
在我還20出頭不懂事的時(shí)候就我就在犯這些錯(cuò)誤,我全都遇到過(guò)。但是大多數(shù)錯(cuò)誤我還是一犯再犯。編碼的人還在編碼,而菜鳥(niǎo)一直都在犯菜。有時(shí)候,甚至經(jīng)驗(yàn)豐富的老鳥(niǎo)也會(huì)犯一些菜鳥(niǎo)犯的錯(cuò)誤。但是大多數(shù)時(shí)候犯的是同一個(gè)錯(cuò)誤。

在我還20出頭不懂事的時(shí)候就我就在犯這些錯(cuò)誤,我全都遇到過(guò)。但是大多數(shù)錯(cuò)誤我還是一犯再犯。

[[208474]]

編碼的人還在編碼,而菜鳥(niǎo)一直都在犯菜。有時(shí)候,甚至經(jīng)驗(yàn)豐富的老鳥(niǎo)也會(huì)犯一些菜鳥(niǎo)犯的錯(cuò)誤。但是大多數(shù)時(shí)候犯的是同一個(gè)錯(cuò)誤。

這些錯(cuò)誤基本上是屬于戰(zhàn)略上的。你應(yīng)該先用版本控制管理好你的代碼,但是即使你管理好了你的代碼你還是有可能犯這些戰(zhàn)略上的錯(cuò)誤,然后就像一個(gè)孫子一樣受罪。

菜鳥(niǎo)錯(cuò)誤1:把Make或Shell當(dāng)成構(gòu)建工具

如果你不是使用C或者C++語(yǔ)言,Make就不是那么適用了。Make總是為每個(gè)文件重新加載一個(gè)編譯器進(jìn)程。大多數(shù)現(xiàn)代語(yǔ)言并不是設(shè)計(jì)成為每個(gè)文件加載單獨(dú)的進(jìn)程,而且你要是想在Java這樣的語(yǔ)言中使用Make解決dependency的問(wèn)題幾乎是不可能的。

我曾經(jīng)在一個(gè)大型網(wǎng)絡(luò)設(shè)備公司工作過(guò),并且通過(guò)把它的構(gòu)建轉(zhuǎn)換到Ant(一個(gè)Java構(gòu)建工具),使構(gòu)建進(jìn)程從3小時(shí)縮短到了20秒。

以一個(gè)shell腳本來(lái)結(jié)尾也是一步錯(cuò)棋。最近我為一個(gè)實(shí)驗(yàn)室寫(xiě)了一個(gè)shell框架,因?yàn)槲也幌胫皇菫榱艘粋€(gè)小實(shí)驗(yàn)室,但卻要所有人都要去下一整個(gè)Java工具集,我原以為是一步好棋,但是其實(shí)我真是干了件蠢事兒(一如既往),因?yàn)樗蕾?lài)的這個(gè)軟件的下一個(gè)版本打破了一切(一如既往)。如果我吸收了它并提供了一個(gè)現(xiàn)代化的構(gòu)建工具,它應(yīng)該是能夠更新dependency的。

菜鳥(niǎo)錯(cuò)誤2:把IDE用作構(gòu)建工具

大多數(shù)的IDE具有一些神奇的構(gòu)建/部署功能。這在初期可能是件好事,當(dāng)然僅僅用來(lái)測(cè)試你自己的代碼是非常不錯(cuò)的。但是最終會(huì)產(chǎn)生依賴(lài)項(xiàng),而且其他人也會(huì)參與編寫(xiě)你的代碼。然后你就會(huì)搞不清它為什么是在這臺(tái)設(shè)備上編寫(xiě)而不是另一臺(tái)。你需要一個(gè)IDE之外的可重復(fù)構(gòu)建的工具,它應(yīng)該要可以在連續(xù)集成工具上運(yùn)行。

菜鳥(niǎo)錯(cuò)誤3:終止AWS實(shí)例

“Terminate”在AWS中意味著“delete everything”——而不是其他大多數(shù)工具中的“終止進(jìn)程”的意思。

我參與的***個(gè)亞馬遜網(wǎng)絡(luò)服務(wù)項(xiàng)目中,有一個(gè)開(kāi)發(fā)者推測(cè)到一個(gè)可以閱讀屬性的工具應(yīng)該是可以安全運(yùn)行的。很不幸的是,如果你不小心閱讀了terminate屬性,它就會(huì)馬上終止實(shí)例。他在所有一切上都運(yùn)行了,然后終止了100多個(gè)實(shí)例。AWS大大減少了犯這類(lèi)錯(cuò)誤的幾率,但是實(shí)際上“terminate(終止)”確切地說(shuō)應(yīng)該被稱(chēng)為“destroy permanently(***地毀滅)”因?yàn)殚_(kāi)發(fā)者terminate(終止)進(jìn)程時(shí)是知道它們是可被以重啟的。但是假如你終止了一個(gè)AWS實(shí)例,你就永遠(yuǎn)失去了它們。

菜鳥(niǎo)錯(cuò)誤4:測(cè)試你在乎的所有內(nèi)容

上述的開(kāi)發(fā)者還非常容易犯一個(gè)菜鳥(niǎo)問(wèn)題:他把所有我們?cè)诤醯臇|西都測(cè)試一遍。正確的做法是他應(yīng)該創(chuàng)建一個(gè)單獨(dú)的實(shí)例,在這個(gè)實(shí)例上進(jìn)行測(cè)試。即使你認(rèn)為你所做的是沒(méi)有害處的,你還是應(yīng)該在安全的環(huán)境測(cè)試你的假設(shè)。

菜鳥(niǎo)錯(cuò)誤5:追求絕對(duì)的數(shù)據(jù)完整性

我看到不止一位開(kāi)發(fā)者使用READ_SERIALIZED 以及table locks,因?yàn)樗麄儤O度追求數(shù)據(jù)完整性。當(dāng)然還有很多其他的生產(chǎn)鎖強(qiáng)迫癥。其實(shí)它們都屬于糟糕的模式設(shè)計(jì)以及對(duì)數(shù)據(jù)、并發(fā)和風(fēng)險(xiǎn)的不現(xiàn)實(shí)理解。

菜鳥(niǎo)錯(cuò)誤6:把你的代碼放進(jìn)HTML或把HTML放進(jìn)你的代碼

不論是ASP,JSP,PHP,CGI,或者是直接碼,總是有辦法把代碼塞到HTML里面,而且?guī)缀蹩偸怯修k法寫(xiě)一些類(lèi)似out.println(“This is a terrible idea”);.這樣的東西,我曾經(jīng)有段時(shí)間是這么干的——差不多是1995年吧……

然而現(xiàn)在有更多現(xiàn)代的排列。我曾看到看有些人用JavaScript做一些非常惡心的事情都挺似曾相識(shí)的。我們當(dāng)然可以找到很多更好的辦法,例如:一個(gè)標(biāo)簽庫(kù) ,一個(gè)事件處理器,啥都行,就是HTML 代碼不行!

菜鳥(niǎo)錯(cuò)誤7: 使用全能列表

我承認(rèn)在我不確定數(shù)據(jù)是如何形成時(shí),我會(huì)在原型代碼中做這件事,但一旦我知道,我就很快放棄這種做法。一般使用高級(jí)語(yǔ)言的人都會(huì)犯“這”樣的錯(cuò)誤。“這”樣的錯(cuò)誤是什么呢?基本上就是,他們不用地圖, 關(guān)系樹(shù), 或者set,而是把所有東西都列在一張表上,然后所有東西都由你自己整理。更糟糕的是,你選擇一個(gè)數(shù)組返回列表,并繼續(xù)插入中心附近的某個(gè)地方。

這種代碼的麻煩在于, 它往往會(huì)導(dǎo)致生產(chǎn)。不過(guò), 我想在某些時(shí)候, 在操作系統(tǒng)中加載測(cè)試?yán)厥掌骰騼?nèi)存管理是很好的!!!

菜鳥(niǎo)錯(cuò)誤8: I<3繼承

哇哇哇!你上了一節(jié)關(guān)于decomposition的課之后,你決定你的***步是把一切組織成***的階級(jí)等級(jí)。你忘記儲(chǔ)存東西或者使你的項(xiàng)目正常運(yùn)作——不,你只是想讓大家來(lái)了解你的大腦是如何運(yùn)作的,并牢記一組丑陋的并行類(lèi)結(jié)構(gòu)。我的天哪!你還是快點(diǎn)去DMTF(Desktop Management Task Force 桌面管理任務(wù)組)工作吧!

換句話說(shuō),你可以用你屎一樣的標(biāo)準(zhǔn)來(lái)讓大家頭痛。但是我勸你***不要這么做!

菜鳥(niǎo)錯(cuò)誤9: I <3函數(shù)式

你剛剛學(xué)到了所有關(guān)于函數(shù)編程的知識(shí)。你認(rèn)為面向?qū)ο缶幊淌莻€(gè)大錯(cuò)誤,所有的東西都應(yīng)該是無(wú)狀態(tài)的和功能性的。那我只能說(shuō)你很棒棒哦!

除非我需要在代碼中添加更多的東西,否則如果我必須解開(kāi)每一個(gè)函數(shù)調(diào)用來(lái)添加它,那么你就失敗了。你失敗得很慘哦。

菜鳥(niǎo)錯(cuò)誤10: I<3 全球性

寫(xiě)代碼很難,思考很難,決定某件事的邊界很難。但是你選擇不去掙扎,而是直接選擇那些***眾的邊界。你浪費(fèi)了內(nèi)存,你的代碼不能并行, 有線程沖突。但是到時(shí)你可別想置身事外哦~

菜鳥(niǎo)錯(cuò)誤11:使用巨型對(duì)象

有一次, 當(dāng)我和一個(gè)新來(lái)的實(shí)習(xí)生一起工作時(shí)。我告訴他工作可能會(huì)往幾個(gè)方向走。其中之一是它們可能會(huì)向會(huì)話拋出一個(gè)巨型對(duì)象,然后想為什么“群集不起作用”以及為什么他們的內(nèi)存不夠了。

果然,我們發(fā)現(xiàn)一個(gè)帶有數(shù)以百計(jì)的狀態(tài)變量和方法的類(lèi)文件來(lái)置換它們。當(dāng)然,它們正在把它推送到會(huì)話中。這些東西大部分都不需要在會(huì)話中進(jìn)行,基本上是為了形成一個(gè)由手工編寫(xiě)的二級(jí)數(shù)據(jù)庫(kù)緩存。這對(duì)內(nèi)存是一個(gè)巨大的浪費(fèi),并且復(fù)制它不僅浪費(fèi)內(nèi)存還會(huì)造成高成本的不必要的會(huì)話復(fù)制。

菜鳥(niǎo)錯(cuò)誤12:死于1000個(gè)對(duì)象

就像你能擁有的太少,你可以擁有太多。死于1000個(gè)對(duì)象傾向于菜鳥(niǎo)錯(cuò)誤8:i<3繼承,但是我也親眼見(jiàn)過(guò)在沒(méi)繼承的時(shí)候出現(xiàn)類(lèi)似情況。如果你所有的類(lèi)文件代碼都不到100行,但是你卻有成百上千個(gè)這樣的文件,這樣也是錯(cuò)誤的……

菜鳥(niǎo)錯(cuò)誤13:我可以合并線程嗎?

大多數(shù)應(yīng)用程序代碼都可以用單線程的世界視圖編寫(xiě)。但是當(dāng)你開(kāi)始寫(xiě)應(yīng)用的服務(wù)器、數(shù)據(jù)庫(kù)或者其他底層代碼時(shí)就不能這么干了,大多數(shù)商務(wù)軟件都可以用類(lèi)似的底層代碼來(lái)編寫(xiě)——所以你不用寫(xiě)這些直接轉(zhuǎn)到多線程就好了。

所以***別寫(xiě)了。尤其是現(xiàn)在,不寫(xiě)線程代碼、分發(fā)和利用線程變得越來(lái)越容易??纯碨park是如何工作的吧:你不必把混亂的線程都編織到一起。

菜鳥(niǎo)錯(cuò)誤14:row locks的使用

這對(duì)SQL服務(wù)器還有DB2用戶來(lái)說(shuō)確實(shí)是個(gè)大問(wèn)題。默認(rèn)數(shù)據(jù)庫(kù)設(shè)置用于大多數(shù)平臺(tái)上的行鎖(DB2在其他平臺(tái)上進(jìn)行頁(yè)面鎖定,這肯定更糟糕了)。Oracle的默認(rèn)設(shè)置就沒(méi)那么傻了。網(wǎng)上曾經(jīng)對(duì)行鎖和快照隔離進(jìn)行過(guò)爭(zhēng)論。從理論上來(lái)說(shuō)行鎖效率更高—但是你有多一條帶有爭(zhēng)議性的線程都不行(也就是:大多數(shù)軟件的現(xiàn)狀)。

更不用說(shuō)大多數(shù)開(kāi)發(fā)者根本不知道”snapshot isolation”的實(shí)際意義,也不知道如何開(kāi)啟它。所以工作就常常是在負(fù)載過(guò)輕的狀態(tài)運(yùn)轉(zhuǎn)著,因?yàn)樗鼈冇玫氖莚ow locks b。好好搞清楚snapshot isolation的意義和使用方法吧。千萬(wàn)別用row locks。

菜鳥(niǎo)錯(cuò)誤15:序列的使用

來(lái),跟我念:我將不會(huì)為特殊鍵使用數(shù)據(jù)庫(kù)序列,除非我真的需要序列化的值(也就是在極少數(shù)的情況下。)那就是鎖定和遠(yuǎn)程處理在同一個(gè)包的時(shí)候,這就非常令人痛苦了!

你可以使用一個(gè)安全的隨機(jī)生成器支撐的128位的UUID,而不是用單線程處理數(shù)據(jù)庫(kù)序列生成器的一切。如果你怕被復(fù)制的話,要么你數(shù)學(xué)很差,要么你并不像重視你的生活那樣重視數(shù)據(jù)。即使在你生成了萬(wàn)億個(gè)ID之后,你還是有更大的可能性被流星擊中你的大頭哦~

希望你能尊重你自己,你的職業(yè),還有在你之后的維護(hù)人員。所以千萬(wàn)別干傻事兒,但即使你可能是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,有時(shí)也還是會(huì)犯這些低級(jí)錯(cuò)誤的。

責(zé)任編輯:未麗燕 來(lái)源: InforWorld
相關(guān)推薦

2011-04-18 12:55:04

JavaScript開(kāi)發(fā)者

2018-04-04 09:55:18

語(yǔ)言PHP易犯錯(cuò)誤

2013-08-06 14:20:51

Web

2013-12-27 09:03:47

開(kāi)發(fā)項(xiàng)目

2015-03-25 11:12:35

iOS開(kāi)發(fā)

2014-10-09 09:29:25

AngularJS

2011-03-17 15:25:31

2015-04-21 12:54:21

2018-10-16 11:03:19

API開(kāi)發(fā)者AR

2022-12-14 07:31:35

JavaScript錯(cuò)誤關(guān)鍵字

2011-03-24 09:25:54

程序員編程

2021-10-11 08:20:30

Javascript 高階函數(shù)前端

2011-11-17 17:35:12

jQuery

2011-03-16 09:33:45

數(shù)據(jù)庫(kù)開(kāi)發(fā)錯(cuò)誤

2013-12-24 09:24:01

開(kāi)發(fā)者

2021-05-10 10:01:04

JavaScript開(kāi)發(fā)技巧

2020-10-09 09:44:25

JavaScript 開(kāi)發(fā) 應(yīng)用

2020-11-20 20:49:49

Python開(kāi)發(fā)代碼

2022-09-15 17:08:20

JavaScripWeb開(kāi)發(fā)

2011-05-10 08:47:55

開(kāi)發(fā)者HTML 5W3C
點(diǎn)贊
收藏

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