成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

每個(gè)程序員都可能犯過的10個(gè)錯(cuò)誤

開發(fā) 后端
本文列出的 10 個(gè)錯(cuò)誤,并不局限于C#,Delphi,JavaScript 等——幾乎涵蓋了所有的編程語言。是不是大吹大擂,歡迎各位品鑒……

[[128377]]

1. 面向編譯器寫代碼,而不是面向用戶

當(dāng)人們使用編譯器創(chuàng)建自己的 app 時(shí),在把自己的想法訴諸于機(jī)器代碼的過程中,常常會(huì)將那些可以使得編程更為簡單卻又冗長的語法遺忘于腦后。

無論你使用的是單字母的標(biāo)識(shí)符還是更易于人腦理解的標(biāo)識(shí)符,對(duì)于編譯器而言,毫無區(qū)別。編譯器不在乎你寫的是否是優(yōu)化表達(dá)式,也不在乎你是否用括號(hào)封裝了子表達(dá)式。編譯器要做的就是將這些人腦可讀的代碼,解析為抽象的語法樹,并將這些樹轉(zhuǎn)換成機(jī)器代碼,或某種中間語言。

那么,為什么不使用更可讀或者語義更明顯的標(biāo)識(shí)符呢——而不要僅僅是I,J或x。老實(shí)說,現(xiàn)在我們用來等待編譯器完成轉(zhuǎn)換標(biāo)識(shí)符的時(shí)間幾乎是微不足道。但是,這么做卻可以大大減少你和其他程序員用于閱讀理解這些源代碼所用的時(shí)間。

還有一個(gè)類似的觀點(diǎn)是:或許你可能已經(jīng)記住了相關(guān)的運(yùn)算符優(yōu)先級(jí),于是省略了表達(dá)式中一些不必要的括號(hào),但是卻沒有考慮到后面的程序員有可能會(huì)誤讀你的代碼,并就它是如何工作的作出一些無效的假設(shè)。

我的想法是,假設(shè)大家都知道,乘法(或除法)優(yōu)先于加法和減法。其他任何我放到表達(dá)式中的內(nèi)容我都會(huì)用上括號(hào),以確保能真正表達(dá)我的意思,其他人也能真正理解我的想法。

有研究表明,有的代碼維護(hù)所需要的時(shí)間甚至超出其編寫時(shí)間的五倍以上。所以將代碼寫得易于閱讀和理解是非常有意義的。

2. 函數(shù)方法過于龐大

有一個(gè)經(jīng)驗(yàn)法則就是,我們寫的程序不應(yīng)該過于龐大。而且我們也可以發(fā)現(xiàn),現(xiàn)在方法趨向于越來越小巧——有時(shí)候僅僅只是幾行代碼。

從本質(zhì)上說,要想快速把握程序的目的和意義,只需要一定的代碼就夠了。長方法不但令人難以接受,而且往往最終趨向于支離破碎。

其原因也非常簡單:長方法既難以理解,又難以維護(hù),甚至還難以正常測試。

有一個(gè)相當(dāng)不錯(cuò)的測量方法可以衡量你的代碼的復(fù)雜程度,以及出現(xiàn) bug 的概率—— 循環(huán)復(fù)雜度。

該方法由 Thomas J. McCabe Sr 于 1976 年開發(fā)。循環(huán)復(fù)雜度使用方便簡單,能讓你在匆忙之中盡可能地保證代碼運(yùn)行正常。只需要數(shù)一數(shù)代碼中‘if’語句和循環(huán)的數(shù)量,再加1,就是該方法的 CC 值。

當(dāng)然這只是對(duì)代碼執(zhí)行路徑數(shù)量的粗略計(jì)數(shù)。不過,如果你的某個(gè)方法其循環(huán)復(fù)雜度值大于 10,我建議你重寫。

3. 過早的優(yōu)化

這一點(diǎn)非常簡單。當(dāng)我們?cè)诰帉懘a的時(shí)候,有時(shí)我們會(huì)自作聰明地對(duì)某些代碼過于注重細(xì)節(jié)過于精益求精,雖然看上去這些“明智”的代碼比原先寫的那些提高了速度,但是你忽略了一個(gè)事實(shí),這些“明智”的代碼往往是難以閱讀難以理解的——而且真正節(jié)省的時(shí)間往往只有幾毫秒。這就是所謂的過早的優(yōu)化。

著名的計(jì)算機(jī)科學(xué)家 Donald Knuth 曾經(jīng)說過,“過早的優(yōu)化是一切罪惡的根源”。

換言之就是:我們的代碼需要清晰、干凈,然后再重點(diǎn)找出真正的瓶頸并對(duì)其進(jìn)行優(yōu)化。千萬不要試圖過早的優(yōu)化。

4. 使用全局變量

話說回來,有的編程語言是完全沒有局部變量這個(gè)概念的,所以不得不使用全局變量。關(guān)于全局變量,雖然我們可以在子函數(shù)中使用它,但是卻沒辦法聲明這一變量只能在該函數(shù)中使用。盡管如此,全局變量依然非常受歡迎,因?yàn)槲覀冎恍杪暶饕淮危纯傻教幨褂茫r(shí)省力了有木有。

但是它的優(yōu)點(diǎn)也是它的缺陷,這也是關(guān)于全局變量最糟糕的事情——我們沒有辦法控制它的改變,也沒辦法控制何時(shí)去訪問變量。假設(shè)某個(gè)全局變量在調(diào)用到程序之前賦予了一個(gè)特定的值,但是很可能調(diào)用完了之后值就變了,而你卻毫無察覺。

5. 不進(jìn)行評(píng)估

你的目標(biāo)是寫一個(gè)應(yīng)用程序,你斗志昂揚(yáng),愈戰(zhàn)愈勇。但是突然間,你發(fā)現(xiàn)了性能問題和內(nèi)存不足的問題。

進(jìn)一步的調(diào)查表明,盡管你的設(shè)計(jì)對(duì)于現(xiàn)在這樣小型的用戶數(shù)量、記錄、條目運(yùn)行良好,但是卻不適合大規(guī)模的情況——Twitter 就是例子。又或者它現(xiàn)在在你的 8GB RAM 和 SSD 的 3GHz PC 上運(yùn)行順暢,但一旦到普通的 PC 上,它會(huì)比烏龜爬還要慢吞吞。

所以,部分設(shè)計(jì)進(jìn)程還是需要評(píng)估,需要一系列的封底計(jì)算。有多少用戶需要同時(shí)處理多少個(gè)用戶?需要處理多少記錄?目標(biāo)響應(yīng)時(shí)間又是多少?等等。

盡量對(duì)這些類型的問題進(jìn)行評(píng)估,這樣就可以對(duì)應(yīng)用程序中的一些技術(shù)問題做一些更進(jìn)一步的決策,如不同的算法和緩存。不要什么亂七八糟的都納入到開發(fā)中去——你還需要好好評(píng)估目標(biāo)和目的。

6. 大小差一錯(cuò)誤(數(shù)組邊界溢出)

這個(gè)錯(cuò)誤基本上每一個(gè)程序員都犯過,通常在寫循環(huán)的時(shí)候,由于循環(huán)變量的步長增加過多或過少,導(dǎo)致循環(huán)遍歷元素的次數(shù)發(fā)生錯(cuò)誤,產(chǎn)生數(shù)組溢出的異常。

這個(gè)錯(cuò)誤會(huì)導(dǎo)致遍歷數(shù)組元素時(shí)訪問不存在的元素,或者遺漏應(yīng)該遍歷的元素。產(chǎn)生這個(gè)錯(cuò)誤的原因就是你忘記了數(shù)組下標(biāo)是從 0 開始還是從 1 開始了。

7. 淹沒異常

現(xiàn)在的編程語言大多使用異常系統(tǒng)作為錯(cuò)誤報(bào)告技術(shù),而不再是以往傳統(tǒng)的傳遞和檢查故障代碼。現(xiàn)在的編程語言使用新的關(guān)鍵字來處理和捕獲異常,其名稱為 throw、try、finally 和 catch 等。

關(guān)于異常處理值得一提的是,它們的作用是展開堆棧,從嵌套程序自動(dòng)返回,直到異常被捕獲并處理。不再需要你檢查錯(cuò)誤條件,從而導(dǎo)致代碼深陷錯(cuò)誤測試的泥沼。

通過正確地運(yùn)用異常處理,我們能夠使得軟件更為強(qiáng)大。比如說 catch 能讓我們捕獲異常,并根據(jù)異常類型執(zhí)行某種行為。

關(guān)于異常處理,程序員犯的最大的錯(cuò)誤有兩種。第一種是程序員對(duì)于他們 catch 的異常了解得不夠清楚具體。捕獲過于籠統(tǒng)化的異常類型可能會(huì)導(dǎo)致你在不經(jīng)意間處理掉一些最好能夠保留的特定異常。而這樣做,可能會(huì)導(dǎo)致這些異常被淹沒,丟失。

第二個(gè)錯(cuò)誤更為有害:程序員不想要任何異常離開自己的代碼,因此捕獲之后忽略了它們。這就是所謂的空 catch 塊。他們可能是這樣想的,只要 throw 某些類型的異常就可以了:于是名正言順地忽略了這些異常。

而現(xiàn)實(shí)是,這可能會(huì)導(dǎo)致其他致命的運(yùn)行時(shí)異常——如內(nèi)存不足的異常,代碼無效的異常等等,從而使得程序無法正常運(yùn)行。因此,調(diào)整異常 catch 塊時(shí)應(yīng)盡可能的具體化。

8. 純文本格式存儲(chǔ)密碼

數(shù)據(jù)安全性是永遠(yuǎn)值得探討的話題,其重要性是不言而喻的。在這里,我要鄭重告訴你的是,千萬不要將密碼用純文本格式保存。

密碼的標(biāo)準(zhǔn)是,先存儲(chǔ)經(jīng)過加密后雜亂無章的原始密碼,然后再輸入通過相同加密方法后的雜亂的密碼,看看它們是否匹配。

還不清楚這樣做的害處,那么給你個(gè)提示:如果某個(gè)網(wǎng)站承諾,如果你忘記了原始密碼,他們會(huì)給你發(fā)送電子郵件告訴你,那么遠(yuǎn)離這種網(wǎng)站。這可能會(huì)出現(xiàn)巨大的安全問題。假設(shè)有一天,該網(wǎng)站會(huì)被黑的話,那么你所有的登錄信息都會(huì)被泄漏出去,而你除了忍氣吞聲惶惶而不可終日卻毫無辦法。所以,千萬不要接觸這類網(wǎng)站,同樣的,也不要在你的 app 里用純文本的格式存儲(chǔ)密碼或其他的“秘密”。

9. 不驗(yàn)證用戶輸入

以前的程序是單用戶的,于是我們對(duì)用戶輸入往往不以為然:畢竟,如果程序崩潰的話,只會(huì)影響到一個(gè)人的使用。我們的輸入驗(yàn)證僅限于數(shù)值驗(yàn)證、日期檢查,或其他類型的輸入驗(yàn)證。

文本輸入往往不會(huì)特別驗(yàn)證。不過后來出現(xiàn)了網(wǎng)頁。于是,你的程序有了遍布世界的用戶。而一些惡意用戶則會(huì)通過輸入數(shù)據(jù)到你的程序,以試圖接管你的 app 和服務(wù)器。

新型的攻擊大多是因?yàn)槿狈?duì)用戶輸入的檢查。其中最著名的是 SQL 注入,通過標(biāo)記注入,不好的用戶輸入可能會(huì)引發(fā) XSS 攻擊(跨站腳本)。

這兩種類型都依賴于用戶提供包含了 SQL 或者 HTML 片段的文本,來作為正常表單輸入的一部分。如果應(yīng)用程序不驗(yàn)證用戶輸入,直接就拿來用,那么很可能就會(huì)執(zhí)行篡改的 SQL,或者產(chǎn)生一些被攻擊的 HTML/JavaScript。

這反過來可能會(huì)使得 app 崩潰,或被黑客接管。為了避免這些情況,所以我們應(yīng)該時(shí)時(shí)驗(yàn)證或消除用戶輸入。

10. 不與時(shí)俱進(jìn)

上述這些我總結(jié)的內(nèi)容或許并不新鮮——你可能已經(jīng)在其他的書籍或網(wǎng)頁上涉獵過。但是隨著時(shí)代的發(fā)展,會(huì)有越來越多的新的設(shè)計(jì)和編程技術(shù)面世。

而你如果還抱著一些陳舊的逐漸在被淘汰的技術(shù)不放,不愿意學(xué)習(xí)和了解新的編程方法和技術(shù)——那么你終將會(huì)被拍死在沙灘上。對(duì)于程序員,學(xué)習(xí)是永恒的課題。例如 TDD 和 BDD,SLAP 和 SOLID 方法,以及各種敏捷技術(shù),都是我們應(yīng)該學(xué)習(xí)的技術(shù)。

我們應(yīng)該時(shí)刻保持對(duì)最新的編程藝術(shù)和實(shí)踐的同步。

英文原文:10 mistakes every programmer makes

譯文鏈接:http://www.codeceo.com/article/10-mistake-every-programmer-make.html

翻譯作者:碼農(nóng)網(wǎng) – 小峰

責(zé)任編輯:王雪燕 來源: 博客園
相關(guān)推薦

2015-04-17 09:47:57

2019-01-23 17:53:05

程序員技能溝通

2014-05-13 13:09:23

Python程序員

2021-06-04 10:15:17

JavaSQL編程語言

2015-10-08 15:57:30

程序員錯(cuò)誤

2011-06-29 09:27:10

2019-08-09 10:52:58

Linux內(nèi)核Spark

2015-08-27 16:15:10

程序員面試錯(cuò)誤

2016-02-29 11:24:23

程序員閱讀經(jīng)典書籍

2015-06-12 11:22:52

程序員程序員跳槽

2020-10-05 21:13:37

程序員技能開發(fā)者

2014-10-22 10:54:14

程序員

2022-12-06 07:40:08

研發(fā)事故開發(fā)

2015-11-05 09:19:12

程序員jQuery技巧

2015-01-14 10:17:28

高級(jí)程序員

2012-01-11 13:37:37

程序員

2020-04-20 18:15:46

開發(fā)自信技術(shù)

2020-11-10 17:08:58

程序員極客網(wǎng)友

2020-09-03 12:54:37

Python程序員macOS

2021-09-02 08:40:10

程序員錯(cuò)誤
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 成人毛片视频免费 | 亚洲一区自拍 | 伊人天堂网 | 成人av一区二区三区 | 美女久久久久久久久 | 红色av社区 | 成年免费大片黄在线观看岛国 | 午夜不卡一区二区 | 久久99视频精品 | 国产激情免费视频 | 亚洲精品9999| 国产xxxx搡xxxxx搡麻豆 | 91精品国产日韩91久久久久久 | 日韩国产欧美一区 | 在线激情视频 | 91在线影院| 国产1区在线| 免费一级黄色录像 | 成人在线视频免费观看 | 狠狠操狠狠搞 | 伦理午夜电影免费观看 | 久草资源在线视频 | 97免费视频在线观看 | 亚洲一区二区久久久 | 天天拍天天操 | 一区二区三区四区在线 | 高清久久久 | 欧美精品三区 | 免费看av大片| 免费的av网站 | 久久伊人青青草 | 免费黄色片在线观看 | 91福利网址 | 视频1区| 老司机免费视频 | 三级在线观看 | 黄色网址在线免费观看 | 天天插天天操 | 国产亚洲一区精品 | 亚洲精品粉嫩美女一区 | 亚洲www啪成人一区二区 |