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

編程,更多?更好?更快?

企業(yè)動態(tài)
編程路上,如果一開始就像 “品質(zhì)” 組的同學(xué)那樣去追求完美,也許我們就會被定義 “完美” 的品質(zhì)所絆住。

[[202277]]

最近,讀到一個(gè)故事,是下面這樣的。

在一次陶藝課上,老師在***堂課時(shí)說,他會把班上同學(xué)們分成兩組。教室左邊這組,他們這門課的成績將會以最終完成的陶器作品數(shù)量來評定,而右邊那組,則會以最終完成的陶器品質(zhì)來評定。

進(jìn)一步說明,其評定過程是這樣的:這門課的***一天,老師會帶來一桿天平稱,用來稱量 “數(shù)量” 組的成果。如果 50 磅及以上,得 A,40 磅及以上得 B,30 磅得 C,如此類推。而 “品質(zhì)” 組只需要提交一件(僅一件)他們組認(rèn)為最 “***” 的作品即可,如果老師也認(rèn)為很不錯,就可以得 A。

時(shí)間很快過去,到了該交作業(yè)的日子。一個(gè)很有趣的現(xiàn)象出現(xiàn)了,“數(shù)量” 組如預(yù)期一般拿出了很多作品,但質(zhì)量***的作品卻也全部是由 “數(shù)量” 組制作出來的。按 “數(shù)量” 組的評定標(biāo)準(zhǔn),他們似乎應(yīng)該忙于粗制濫造大量的陶器,但他們每做出一個(gè)垃圾作品,都會吸取上一次制作的錯誤經(jīng)驗(yàn)教訓(xùn),再做下一個(gè)作品時(shí)得到改進(jìn)。而 “品質(zhì)” 組一開始就追求***的作品,他們花費(fèi)了大量的時(shí)間從理論上論證如何才能做出一個(gè)***的作品,而到了***拿出來的東西,似乎只是一堆建立在宏大理論上的陶土。

更多

當(dāng)我讀完這個(gè)故事,陷入了沉思,感到編程和制作陶藝是如此類似。《黑客與畫家》書里講,編程和畫畫近乎異曲同工,其實(shí)很多這種類似工匠型的技藝都有其相似之處。

很多人小時(shí)候都畫過畫,是的,我小時(shí)候也愛畫畫??匆娨环鶊D,拿上一只筆就可以開始臨摹。后來有了美術(shù)課,開始寫生,看見了,就能畫出來。但現(xiàn)在我卻不再畫畫了,為什么?因?yàn)?,現(xiàn)在我再回頭看曾經(jīng)畫過的畫,簡直就是一坨 “狗屎”。后來,長大了,成年了,讀完書、考上大學(xué),工作后,再想拿起筆去畫時(shí),發(fā)現(xiàn)還不如小時(shí)候畫的,所以我不再畫了。

為什么那時(shí)候(小時(shí)候)明明畫得不好,卻可以不停得去畫。也許這個(gè)問題有很多答案,但我想其中之一必然是:那時(shí)候,我們并沒有給自己施加任何的限制,沒有追求***的作品,沒有追求畫畫的意義,而僅僅是在探索與學(xué)習(xí)。一幅接一幅的畫,僅僅是這一次比上一次有所進(jìn)步,我們就會開心的大呼小叫。

某一天,我們長大了。我們知道了,畫畫是一種技藝,甚至是一種藝術(shù)。我們見過了真正可以稱之為藝術(shù)的畫作,我們也知道了如何才算是正確的畫畫,所有這些讓我們感到,曾經(jīng)的那支畫筆已經(jīng)重到讓我們不敢再輕易去拿起。

那些成名畫家的作品,如果按時(shí)間順序來排列展示,我們會發(fā)現(xiàn)每幅畫所用的技巧,都是建立在上一幅作品學(xué)到的東西之上。如果某幅作品特別出眾,你往往能在更早期的作品中找到類似的版本。

而編程這門技藝,也完全是一個(gè)類似的過程。我很慶幸我在初學(xué)編程時(shí),就像我小時(shí)候剛拿起畫筆,我只是在不斷通過編程訓(xùn)練來解答一個(gè)又一個(gè)書本上得來的困惑。后來,則是不斷寫程序來解決一個(gè)又一個(gè)工作中的問題。那時(shí),看到書上探討各種優(yōu)雅的代碼之道,編程的藝術(shù)哲學(xué),我卻完全不知道如何通往這座編程的 “圣杯”,看著自己寫出的蹩腳代碼,然后繼續(xù)不斷重復(fù)去制作下一個(gè)丑陋的 “陶器”。

而過去十多年的編程經(jīng)驗(yàn)印證了開頭的故事,在通往「更好」的路上,必然要經(jīng)過「更多」這條路。

更好

編程路上,如果一開始就像 “品質(zhì)” 組的同學(xué)那樣去追求***,也許我們就會被定義 “***” 的品質(zhì)所絆住。

編程的問題是,一開始我們并不知道什么是編程的正確方法,無論我們在開始動手編程時(shí)看過多少有關(guān)的編程理論、方法、哲學(xué)與藝術(shù)的書。這樣反而讓我們沒有什么約束,只管去盯住你要用編程解決的問題,把問題解決,把任務(wù)完成。

曾經(jīng),還在學(xué)校學(xué)習(xí)編程時(shí),有一個(gè)期中課程設(shè)計(jì)。我很快完成了一個(gè)這個(gè)課程設(shè)計(jì)中的編程作業(yè),而另一位同學(xué),剛剛看完了那本經(jīng)典的設(shè)計(jì)模式書。他嘗試在用書里學(xué)到的新概念來設(shè)計(jì)這個(gè)編程作業(yè),并且先又用 UML 畫了一大堆交互和類圖,去推導(dǎo)設(shè)計(jì)的***與優(yōu)雅。然后興致勃勃的向我(因?yàn)槲覄偤米谒赃?講解他的***設(shè)計(jì),然后我若有所悟,覺得里面確實(shí)有值得我改進(jìn)的地方,準(zhǔn)備吸收一些我能聽明白的東西,重構(gòu)一遍已經(jīng)寫好的作業(yè)程序。

后來,這位同學(xué)在動手實(shí)現(xiàn)他的***設(shè)計(jì)時(shí),發(fā)現(xiàn)程序越寫越復(fù)雜,交作業(yè)的時(shí)間已經(jīng)不夠了,只好借用我的不***的***版代碼改改湊合交了。而我這在***版代碼基礎(chǔ)上,又按領(lǐng)悟到的正確思路重構(gòu)了一次,交了作業(yè)。而巧的是我的***版代碼,又流傳到了另外幾個(gè)同學(xué)手上,幾乎也就改個(gè)名字就當(dāng)成作業(yè)交了。但是,我們那門課的老師有一個(gè)專門識別類似作業(yè)程序代碼的程序,檢查出了相似度極高的那幾個(gè)同學(xué)的作業(yè),都是我的***版代碼,結(jié)果所有人都被打回重做了一遍,而我暗自慶幸,還好我又重構(gòu)一次。

編程,其實(shí)一開始哪有什么***,只有更好。之后,工作了,我做了大量的不大不小的項(xiàng)目,然后發(fā)現(xiàn)這些項(xiàng)目都有很多類似之處。每次,即使項(xiàng)目上線后,我也必然重構(gòu)項(xiàng)目代碼,提取其中的可復(fù)用代碼,然后在下一個(gè)項(xiàng)目中使用。循環(huán)往復(fù),一直干了七、八年。我想,很多程序員都有類似的經(jīng)歷,而把這件事干得最有名且***的是江南白衣的 SrpingSide(一個(gè)以 Spring Framework 為核心的,Pragmatic 風(fēng)格的 JavaEE 應(yīng)用參考示例,是 JavaEE 世界中的主流技術(shù)選型,***實(shí)踐的總結(jié)與演示。) 開源項(xiàng)目。

在這個(gè)過程中,我漸漸成型了屬于自己的編程價(jià)值觀:沒有***的解決方案,任何方案總是有這樣或那樣一些因子可以優(yōu)化。一些方案可能面臨的權(quán)衡取舍會少些,而另一些方案則會更糾結(jié)一些。但所有的方案,我都做了取舍。

好不是***,好是一個(gè)過程。

更快

當(dāng)做了足夠多,并且到了足夠好的時(shí)候,自然能做到更快。

影視作品里,總是用一種敲擊鍵盤的快來表達(dá)黑客高手編程的快。但實(shí)際編程***的瓶頸在頭腦,而非手指。如前,程序員反復(fù)提取、重構(gòu)與優(yōu)化的代碼,***就成了自己專屬的工具箱和腳手架。遇到類似的問題、場景,要么直接就能復(fù)用,要么稍微改改也能使用,這樣才能做到快。

所以,為什么會有不要重復(fù)發(fā)明輪子的說法,我們要把寶貴的思考力用在更新的問題上,而非已經(jīng)解決的問題上。為什么需要盡早并經(jīng)常性的重構(gòu)代碼,扔(重構(gòu)刪除)掉一些代碼,就是扔掉負(fù)擔(dān),然后走的更輕松,留下(重構(gòu)復(fù)用)另一些代碼,讓未來走得更快。

有時(shí),好幾年后,我還會看幾年前的代碼。剛開始幾年,我老是罵自己太蠢,怎么當(dāng)年寫這么蠢的代碼。再過了一些年,偶爾我會驚喜的暗贊當(dāng)年還是有聰明的時(shí)候,對于一些當(dāng)時(shí)就思考理解得很費(fèi)力的地方居然留下了注釋,還有故意寫了一些看起來很 “蠢” 但是很容易閱讀和理解的代碼,而不是寫一些 “聰明”(不聰明的普通人不太看得懂)的代碼。當(dāng)時(shí)的這些 “蠢” 反而讓后來去改進(jìn)、修復(fù)和重構(gòu)時(shí)能更快。

【本文是51CTO專欄作者胡峰的原創(chuàng)文章,轉(zhuǎn)載請聯(lián)系作者本人獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2010-02-06 10:54:38

Android進(jìn)程

2009-12-30 10:46:01

Ubuntu目標(biāo)

2010-02-02 13:59:11

Python編寫

2010-01-06 13:57:03

解析JSON

2022-06-28 16:21:43

MongoDB數(shù)據(jù)庫

2010-01-20 17:32:16

C++函數(shù)

2010-02-03 17:51:42

Ubuntu Linu

2010-02-03 09:27:21

編寫Python程序

2012-11-02 13:44:57

大數(shù)據(jù)語音搜索Google

2013-10-18 10:27:11

VDI部署VDI

2010-01-26 09:40:23

C++代碼

2024-05-14 10:21:14

Web 框架Node.jsJavaScript

2011-01-21 12:03:46

2024-05-20 12:51:21

數(shù)據(jù)訓(xùn)練

2011-02-18 11:30:17

AndroidApp Store

2016-10-25 12:39:37

Windows優(yōu)化桌面

2015-07-23 10:14:29

QQ瀏覽器9.0

2009-12-07 16:23:46

WCF編程

2015-05-22 16:26:06

802.11ac無線

2018-11-12 00:23:44

谷歌Android開發(fā)者
點(diǎn)贊
收藏

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