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

關(guān)于軟件開(kāi)發(fā)你真正需要知道的幾個(gè)事情

開(kāi)發(fā) 項(xiàng)目管理
我之所以寫這篇文章是因?yàn)橛幸粋€(gè)朋友最近決定躋身軟件工程行業(yè)。我的這位朋友聰明,精力充沛,品貌兼優(yōu),又善于學(xué)習(xí):每個(gè)人都認(rèn)為這樣的人才必將有一番作為。但是,在踏出第一步時(shí),他依然有很多東西需要學(xué)習(xí)。

我之所以寫這篇文章是因?yàn)橛幸粋€(gè)朋友最近決定躋身軟件工程行業(yè)。我的這位朋友聰明,精力充沛,品貌兼優(yōu),又善于學(xué)習(xí):每個(gè)人都認(rèn)為這樣的人才必將有一番作為。但是,在踏出***步時(shí),他依然有很多東西需要學(xué)習(xí)。

我和很多人一樣一開(kāi)始學(xué)習(xí)的是工具系列:語(yǔ)法和數(shù)據(jù)結(jié)構(gòu),調(diào)試器和編輯器。但實(shí)際上如何使用這些工具來(lái)編寫好的軟件——那種可以工作的,能夠解決問(wèn)題的,很長(zhǎng)一段時(shí)間不用維護(hù)的軟件——卻從來(lái)沒(méi)有正式教給我們。學(xué)習(xí)這門手藝需要?dú)v經(jīng)長(zhǎng)時(shí)間的挫折和痛苦。

下面我要講述一些在嘗試這門手藝之前你需要學(xué)習(xí)的東西。

[[188401]]

關(guān)于軟件你需要記住的最重要的事情是

沒(méi)有魔法

軟件100%和魔法無(wú)關(guān)(雖然我們說(shuō)它有很多創(chuàng)造性的手段?。D憧吹降拿恳粋€(gè)行為,你運(yùn)行的每一個(gè)效果,它之所以發(fā)生只是因?yàn)橐恍┐a使之發(fā)生的緣故,而且總是能夠跟蹤那些代碼。

當(dāng)然,這并不意味著跟蹤總是有用的。有時(shí)候你需要知道,有事情發(fā)生和它為什么發(fā)生并不真的相關(guān)。這導(dǎo)致我們陷入了下面的困境:

松鼠綜合癥

在你深入研究的時(shí)候,你會(huì)發(fā)現(xiàn)軟件充滿了無(wú)窮級(jí)數(shù)的干擾和如同鼠穴一般錯(cuò)綜復(fù)雜的走向。如果你放縱內(nèi)心想像松鼠一樣囤貨的欲望,你固然可以學(xué)到很多東西,但如果你能退一步,每隔一段時(shí)間問(wèn)問(wèn)自己是否真的需要探索這條特殊的鼠洞,那么你能收獲更多。嘗試停留在一個(gè)小的范圍內(nèi)可以幫助你達(dá)到

領(lǐng)域

軟件是極其復(fù)雜的,復(fù)雜到足以讓我們定期創(chuàng)建出沒(méi)有人能一次性明白的代碼。我們通過(guò)更小和更獨(dú)立的部分,通過(guò)定義各部分之間的接口來(lái)構(gòu)建軟件,實(shí)現(xiàn)其復(fù)雜。這樣一來(lái),如果你能在你的腦中適應(yīng)更小的一部分,那工作于那個(gè)塊和相信其他部分正常的時(shí)候多少更安全一點(diǎn)(至少當(dāng)一切順利的時(shí)候)。

完全獲取哪怕更小的塊中的一個(gè)到你的頭腦中也可以是很難的,但與此同時(shí),你可以做到一些諸如只知道你正在看的代碼行是錯(cuò)誤的,以及如何修復(fù)這樣的事情。那就是軟件的領(lǐng)域了。這非常重要,并非因?yàn)槟闳σ愿?,而是因?yàn)槿绻銢](méi)有身處那個(gè)領(lǐng)域,那么想要做對(duì)一切事情幾乎是不可能的。而這給我們帶來(lái)的是

中斷

中斷使得你腦中丟棄了一些來(lái)之不易的內(nèi)容,從而阻礙你完成任何事情。十分鐘的中斷當(dāng)然殺不光所有:但是它需要45分鐘才能讓你的腦子回到你中斷的地方。

這可能是有關(guān)軟件工作最難向人們解釋的事情——盡管大多數(shù)領(lǐng)域都有這樣的事情,但沒(méi)有我們這么悲劇。發(fā)生差異的部分原因是

直覺(jué)失敗

許多我們認(rèn)為的“直覺(jué)”的確有效利用了我們大腦中的結(jié)構(gòu)——歷經(jīng)超過(guò)百萬(wàn)年進(jìn)化,已經(jīng)變得高度優(yōu)化——來(lái)幫助我們管理我們周圍物理世界的復(fù)雜性。但是,從事電腦工作并不是我們周圍物理世界的一部分:我的筆記本電腦創(chuàng)建了她自己的世界延伸,而我必須去這個(gè)延伸的世界工作。

軟件工程的力量在于那個(gè)世界的擴(kuò)展是非常非常具有可塑性的——這力量是驚人的。不過(guò),詛咒之一就是由于我們不再工作于物理世界,我們的直覺(jué)就不再有用,這讓一切都變得很難理解,除非我們做一些額外的工作來(lái)確保我們的直覺(jué)可以幫助我們。

打破我們直覺(jué)的主要事情之一是

時(shí)間是不可思議的

現(xiàn)在的時(shí)代計(jì)算機(jī)的運(yùn)行是極其快速的。即使你手機(jī)運(yùn)行的時(shí)間尺度比我們的大腦快十億倍:一秒時(shí)間傳遞給我們就像過(guò)了31年,不論是給予還是獲取,僅僅一個(gè)傳遞過(guò)程。這意味著我們不能實(shí)時(shí)觀看計(jì)算機(jī)正在做什么。

相反,我們不得不發(fā)明方法強(qiáng)制機(jī)器來(lái)匹配我們極其緩慢的步伐,通常為要求計(jì)算機(jī)等我們,或記住它正在做的一切事情且留下日志可供我們稍后讀取。當(dāng)然,這些技術(shù)是如此地拖累事情的發(fā)展,以致于任何與時(shí)間相關(guān)的問(wèn)題通常都會(huì)消失,或者至少看起來(lái)不同。

極端的話,我們最終還是盲人摸象,一點(diǎn)也不知道為什么代碼之所以脫離軌道。為了避免出現(xiàn)這種情況,我們不得不做一些真正的事情來(lái)安排代碼向我們解釋其決定。這工作往往很難且沒(méi)有吸引力——但它至關(guān)重要,因?yàn)槭艿搅艘韵露傻闹卮笥绊?/p>

墨菲定律

在計(jì)算機(jī)運(yùn)算中,墨菲定律可以重新表述為“如果你不能證明它是不可能的,那么它一定會(huì)發(fā)生——而且往往很快。”還記得十億分之一的加速嗎?如果你一秒內(nèi)做十億次操作,且每次99.99999%%可靠,那么你會(huì)發(fā)現(xiàn)每秒出現(xiàn)了100個(gè)故障。

我們對(duì)于概率和機(jī)會(huì)的認(rèn)知已經(jīng)根深蒂固:“不太可能”真正的含義是“在我思考的時(shí)間里可能不一定“。徹底地改變時(shí)間尺度,那么所有都將改變。

即使沒(méi)有改變,然而,故障仍然是一個(gè)問(wèn)題,因?yàn)?/p>

原罪

每次你寫代碼,你就會(huì)寫bug。這是一個(gè)真理。不管你多么高級(jí),不管你多么優(yōu)秀,不管什么,不管怎么樣,你無(wú)法寫出***的代碼。這是人性的一個(gè)特點(diǎn)。

所以你不能避免寫出bug。

但是你可以明智地減少bug:

1.注釋

在代碼中注釋的目的不是為了解釋代碼做什么——可以讀取代碼!注釋目的是為了解釋當(dāng)你寫代碼的時(shí)候是如何思考的。

為什么你認(rèn)為代碼做到這一點(diǎn)很重要?其它地方發(fā)生了什么事使之變得有必要?在這種情況發(fā)生后其他人要小心什么后效?代碼有沒(méi)有按照你喜歡的方式做事情,亦或是用一種讓你擔(dān)心的方式?你為什么選擇這種方式?還有什么其他的方法可供你選擇?也許其他方法中有更好的?當(dāng)時(shí)你在想什么?

在寫完代碼的半年后,你可能已經(jīng)不記得上述任何問(wèn)題的答案,哪怕是你自己的代碼。所以,要寫下來(lái)。這是無(wú)價(jià)的,當(dāng)你試圖弄清楚有些事情為什么壞了的時(shí)候。

2.測(cè)試優(yōu)先

你可以編寫測(cè)試的代碼以確保其他代碼可正常工作。這樣做出人意料的重要,但我們大多數(shù)人往往在這方面做得很糟糕,因?yàn)槲覀兛倳?huì)去做其他的事情。所以先要寫測(cè)試。這是知道確保寫測(cè)試的唯一途徑。

3.生活更輕松

計(jì)算機(jī)速度很快,沒(méi)錯(cuò)吧?并且正在變得越來(lái)越快。你的大腦卻沒(méi)有越來(lái)越快。所以不要挑選那些使計(jì)算機(jī)更輕松的優(yōu)化工具——挑選為人類而制造的工具。

C語(yǔ)言就是一個(gè)很好的例子。它被設(shè)計(jì)得不易用來(lái)工作,它被設(shè)計(jì)成更適合實(shí)現(xiàn)在40年前的機(jī)器上。因此,用C語(yǔ)言寫代碼意味著你要將所有的時(shí)間用于思考執(zhí)行機(jī)制,而不是針對(duì)于你需要解決的問(wèn)題:how,而不是what或why。停止使用C語(yǔ)言的日子好像已經(jīng)過(guò)去了10年。這些天,我大多用的是Python,這更能幫助你去好好思考what和why,而不是how。

有些純粹主義者會(huì)跳出來(lái)說(shuō)“但是Python比C語(yǔ)言慢!”——他們一點(diǎn)也沒(méi)錯(cuò)——但在2016年,95%的世界已經(jīng)對(duì)此不在意了。電腦是如此之快以致于可以彌補(bǔ)Python的低效率,并且在大部分時(shí)間中做到足夠快。像Python這樣的面向優(yōu)化開(kāi)發(fā)性能,而不是處理器性能的語(yǔ)言,才是正確的權(quán)衡。

4.解決方案而不是寫代碼

寫代碼比解決問(wèn)題更容易。

代碼往往具有良好定義的輸入和輸出,一種可預(yù)測(cè)如何使用的方式,以及一個(gè)你可以說(shuō)你已經(jīng)完成了寫代碼這一任務(wù)的時(shí)間。問(wèn)題就混亂得多,會(huì)涉及到個(gè)人和組織,并且有真實(shí)世界的約束,例如讓人們實(shí)際使用你已經(jīng)建立的東西。

解決問(wèn)題比編寫代碼更重要。人們很容易忘記這一點(diǎn),所以要謹(jǐn)記這一點(diǎn)。

***,還有一件可能比其他剩下沒(méi)有談?wù)摰臇|西更重要的事情:

5.不要放棄

軟件正在日新月異地變化和發(fā)展。你永遠(yuǎn)不可能掌握所有。事實(shí)上,直到你準(zhǔn)備放棄的那一刻,你依然沒(méi)有資格說(shuō)你已經(jīng)懂得夠多。不斷學(xué)習(xí),不斷拓寬你的視野,保持睜大你的眼睛。

這個(gè)世界上總有一個(gè)地方,會(huì)讓人們低下頭來(lái)專注于一個(gè)小小的領(lǐng)域,但在我的經(jīng)驗(yàn)中,有更多的地方值得人們?nèi)ヘ澙返貙W(xué)習(xí)并致力于解決碰到的任何問(wèn)題。

總而言之,移動(dòng)你的手指來(lái)改變世界意味著嚴(yán)肅的大腦延伸和新信息的不停涌入。但是盡管如此,它是如此致命的酷。

歡迎加入!

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

2011-04-25 09:49:20

代碼測(cè)試

2020-05-21 08:47:11

工程師開(kāi)發(fā)技術(shù)

2013-12-02 14:07:02

Hadoop大數(shù)據(jù)集群

2017-02-09 14:46:25

Git事情

2012-03-16 21:08:25

手機(jī)

2013-08-28 10:44:01

LinuxLinux桌面

2024-06-04 16:51:11

2019-10-23 14:26:32

云計(jì)算解決方案云服務(wù)

2019-09-09 14:50:40

網(wǎng)絡(luò)攻擊信息安全技術(shù)

2020-04-26 20:00:14

EmacsLinux

2021-09-18 11:09:44

人工智能AI深度學(xué)習(xí)

2023-01-30 11:43:04

開(kāi)源代碼

2014-07-31 17:13:50

編碼程序員

2022-03-10 06:41:06

SOC網(wǎng)絡(luò)安全

2015-06-30 10:59:22

MobileWeb適配

2023-02-10 08:44:05

KafkaLinkedIn模式

2019-12-10 15:36:36

人工智能機(jī)器人技術(shù)

2018-09-29 15:27:05

BinderAPPAndroid

2017-03-28 15:47:17

數(shù)據(jù)治理數(shù)據(jù)庫(kù)

2018-05-16 09:41:13

神經(jīng)網(wǎng)絡(luò)NN函數(shù)
點(diǎn)贊
收藏

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