2007年12月31日
想搬到BlogBus 去
理由如下:
1、BlogBus 速度很快
2、BlogBus 可以提供很好的API 調(diào)用,我可以利用JavaScript 整合許多別的應(yīng)用功能
3、BlogJava 這里的編輯器老出問題,還是我的FireFox 有問題?整得我很不爽
4、我的博客現(xiàn)在不光只有技術(shù)了,也不光只關(guān)注Java系列的了
新的地址為
http://phoenixtoday.blogbus.com/
看了部電影《鋼琴之森》,卻被它感動(dòng)了,觸動(dòng)很大,或許有些話說到心坎里了吧。
故事講述了兩個(gè)孩子,一個(gè)叫“海”,另一個(gè)叫“修”。他們都會(huì)彈鋼琴,“海”家里窮,卻從小與森林里的鋼琴一起長(zhǎng)大,對(duì)他來說鋼琴是親人,是樂趣,是享受,鋼琴是給自己彈的,鋼琴是存在于他每一個(gè)細(xì)胞中的;“修”從小練鋼琴,從生下來,鋼琴對(duì)他意味著日本第一,意味著成功,但鋼琴就是他的敵人,為了鋼琴,他放棄了太多太多,他刻苦練琴只為超越別人,拿得第一,彈鋼琴意味著只要不出錯(cuò),就是完美。森林里的鋼琴卻只有“海”才能彈響,無論“修”如何努力,森里的鋼琴選擇的只是“海”。
這個(gè)電影,先引發(fā)了我的回憶。記得小學(xué)我第一次擁有的學(xué)習(xí)機(jī),大部分時(shí)間,我是把它當(dāng)成游戲機(jī)的,可是看著那些動(dòng)來動(dòng)去的小人,心里總會(huì)犯嘀咕。后來,就照著學(xué)習(xí)機(jī)書本上的,照貓畫虎的寫了那么幾十行還是上百行的類Basic 程序,看著自己寫出來的“超級(jí)瑪莉”可以左右移動(dòng),還真的是有些激動(dòng),可是那時(shí)候的激動(dòng),卻遠(yuǎn)遠(yuǎn)及不上本科之后的那一次。第一次接觸真的電腦是在初一,一個(gè)電腦培訓(xùn)班里,對(duì)電腦有了概念,大致上就明白了一些基本操作和原理;后來有時(shí)會(huì)去網(wǎng)吧,再后來在初三擁有了自己的第一臺(tái)電腦,從此才走上了正軌。有了第一臺(tái)電腦后,不光用它來玩游戲,還開始買《大眾軟件》,慢慢的會(huì)的基礎(chǔ)知識(shí)越來越多,游戲也玩的越來越多,可是卻遠(yuǎn)遠(yuǎn)滿足不了自己的好奇心,到底這些游戲是怎么做出來的呢?初三的那一年,我將自己的理想從“科學(xué)家”細(xì)化為“計(jì)算機(jī)軟件學(xué)家”,呵呵,當(dāng)時(shí)真的不知道有程序員這個(gè)詞。大學(xué)報(bào)志愿,義無反顧的報(bào)考了計(jì)算機(jī)專業(yè),大一第一學(xué)期末,用C 語言寫出了自己平生第一個(gè)程序,望著幾百行的main 函數(shù),看著屏幕上閃動(dòng)的“Welcome” 心里真的激動(dòng)的不知道說什么好了。本科的計(jì)算機(jī)真的是偏理論也偏硬件,讓一向好強(qiáng)的我,為了在學(xué)業(yè)上有所作為,硬啃那些不喜歡的東西,好不費(fèi)力!大一、大二真的是迷茫,走了不少彎路,直到大三開始學(xué)Java ,開始自己尋找興趣的出路,才逐漸有了自己的發(fā)展。從小到現(xiàn)在,這條路走的還真的彎彎曲曲,沒有得到多少人的幫助,沒有得到好老師的指導(dǎo),一切靠自己摸索,就為了心中那兩個(gè)字“喜歡”。
“海”的那句“彈琴是為自己彈得,不是為別人”,讓我想到了自己。是啊,我寫程序,研究技術(shù),從來沒有想過為任何人,就為了自己那份喜歡,當(dāng)然這不是說,我寫好的程序給別人帶來了快樂,減少了別人的工作量我不開心,而是當(dāng)初就壓根沒想到,就是想這個(gè)場(chǎng)景可以用自己喜歡的技術(shù),可以這么做,可以做的更好,可以解決以前遇到的問題。而這幾年,身邊遇到了很多朋友,有時(shí)也跟他們交談,大部分人給我說他當(dāng)初選擇計(jì)算機(jī)的原因是因?yàn)?#8220;熱門”,少部分的人則是因?yàn)?#8220;這個(gè)行業(yè)可以賺錢”,還有幾個(gè)人我認(rèn)為是為了“超越身邊的人”。這些人,從來沒有覺得自己是真喜歡這個(gè)行業(yè),這樣做是有趣的,他們的動(dòng)機(jī)都是由外在因素引起的,必然不會(huì)長(zhǎng)久,無法堅(jiān)持十幾年、幾十年,甚至一輩子,因?yàn)闊衢T的條件會(huì)改變,別的賺錢的機(jī)會(huì)未來會(huì)更多,身邊的強(qiáng)人你永遠(yuǎn)超越不完。捫心自問,這真的是你喜歡的嗎,它對(duì)你來說真的是有趣的嗎?如果這個(gè)行業(yè)只能給你保證溫飽,就像很多數(shù)學(xué)家窮得叮當(dāng)響,你也會(huì)義無反顧的堅(jiān)守嗎?
“如果你彈不出自己的舒伯特,遲早有一天,舒伯特會(huì)找你要回曲譜”,是啊,如果你設(shè)計(jì)不出自己真正想做的程序,那么你的所學(xué)所做,又有什么意義呢?而你如果不喜歡自己現(xiàn)在所做,那么將來,你還能做出自己想做的嗎?“海”為了彈出自己的舒伯特,每天除了練琴還是練琴,加上自己固有的靈性,最后終于成功。“興趣”和“愛好”對(duì)于你所要堅(jiān)持的行業(yè)來說,是遠(yuǎn)遠(yuǎn)不夠的,你能夠在別人享受生活的時(shí)候,自己安靜的看書嗎?你能真的為了一個(gè)目標(biāo),每天堅(jiān)持寫代碼嗎?前幾天被同學(xué)笑了,因?yàn)槲艺f“我過年和平時(shí)一樣的,看看書,寫寫程序,沒啥不同的”,然后他們笑我“你的生活還真的無趣”,o(∩_∩)o...,其實(shí)他們不知道,這才對(duì)我是最有趣的,我每天都在享受著,每天都在過年。越深入這個(gè)行業(yè),越發(fā)現(xiàn)自己所學(xué)太少,時(shí)間太少,還有很多自己感興趣的東西,每一門想精深的東西,都還有那么多那么多知識(shí)。真的想早一些譜出自己的舒伯特,真的向往那一天,不知道何時(shí)真的能達(dá)到?努力吧!加油!
昨天,要寫一段程序完成一個(gè)定時(shí)任務(wù),是有關(guān)Socket 發(fā)送的。胖子給我發(fā)了一段現(xiàn)成的程序,這段程序基本上的功能是實(shí)現(xiàn)了,但是表達(dá)的并不是那么清晰,因此我想重構(gòu)一下。沒想到重構(gòu)的過程竟然花了一個(gè)多小時(shí),從晚上八點(diǎn)多,一下就寫到了十點(diǎn),但是重構(gòu)完后,感覺清晰多了。仔細(xì)想想收獲頗多,因此在這里寫寫經(jīng)驗(yàn)進(jìn)行總結(jié)。
重構(gòu)程序的目的,不是因?yàn)槌绦虿荒苡貌乓闳ブ貥?gòu),重構(gòu)的目的是因?yàn)橐弧⒛愕拇a,被人看的次數(shù),遠(yuǎn)比它用到的次數(shù)多;二、重構(gòu)有利于你發(fā)現(xiàn)問題,讓你的程序結(jié)構(gòu)優(yōu)化,因此可復(fù)用性更強(qiáng),遵守了知識(shí)的唯一性,DRY 原則;三、如果你要改動(dòng)這段代碼,那么先重構(gòu),使得你的代碼好改,這實(shí)際是在為你的未來減少工作量,而且一段優(yōu)秀的代碼,帶給你的價(jià)值,遠(yuǎn)比你每次都要Ctrl+C,Ctrl+V 大得多。
寫代碼,要讓你的代碼第一次呈現(xiàn)在別人面前的時(shí)候,像讀英語一般,那么你的代碼功底是足夠了。你的代碼就可以稱作你最好的文檔了,其余什么文檔,大可不必!
基于昨天的經(jīng)驗(yàn),我新總結(jié)了兩條:
一、經(jīng)常使用重構(gòu)方法extract method 的人,會(huì)發(fā)現(xiàn),總是可以省掉一些臨時(shí)變量。這是好事,但這可能會(huì)造成如下的結(jié)果:
method_one(method_two(method_three(method_four())))
也就是說,很可能會(huì)導(dǎo)致這種長(zhǎng)串的嵌套,導(dǎo)致程序可讀性的下降,使人看的暈頭轉(zhuǎn)向。那么如何解決呢,其實(shí)是一個(gè)度的問題。我給自己定了一個(gè)規(guī)矩,臨界點(diǎn)是三個(gè)函數(shù)這樣級(jí)聯(lián)起來,如果超過三個(gè),我就將它們拆開。比如說上面這個(gè)小例子,我會(huì)拆成:
arg = method_three(method(four));
method_one(method_two(arg));
雖然浪費(fèi)了一個(gè)臨時(shí)變量,但是這樣就可以讓人一眼看懂我的意思,可讀性提升,修改起來自然也會(huì)容易些。
二、寫過Java I/O 的人,肯定看到過這樣的程序:
Reader in = null;
Writer out = null;
try
{
in = new InputStreamReader(socket.getInputStream(),"utf8");
out = new OutputStreamWriter(socket.getOutputStream(),"utf8");
/**
* some TODOs here
*
**/
}catch(IOException ioe)
{
System.err.println("error message");
ioe.printStackTrace();
}
finally
{
try
{
if(in != null)
in.close();
if(out != null)
out.close();
}catch(IOException ioe2)
{
System.err.println("some error message");
ioe2.printStackTrace();
}
}
怎么說呢,這段代碼看上去,其實(shí)是夠好了,其實(shí)不重構(gòu)也是可以的。也許我偏執(zhí)吧,我認(rèn)為它不夠好,因?yàn)椋菏紫龋蠖蔚膖ry catch 的確會(huì)捕獲異常,但是這段代碼至少有好幾段是會(huì)獨(dú)立拋出異常的,這里包含了四個(gè)IO 實(shí)例的創(chuàng)建和銷毀,這四段代碼如果出錯(cuò)都會(huì)拋出異常,那么你捕獲的到底是哪個(gè)呢?其次,沒有把功能段合理分開,這段代碼的邏輯功能實(shí)際上是兩個(gè),一個(gè)是讀,一個(gè)是寫,那么合并在一起,首先順序很亂,其次容易讓閱讀的人產(chǎn)生困惑,從而造成代碼可讀性差。我是這樣做的:
private void writeFile(String fileName, String outStr)
{
Writer writer = null;
try
{
writer = new OutputStreamWriter(new FileOutputStream(fileName),
"utf8");
}
catch (UnsupportedEncodingException e)
{
System.err.println("不支持的編碼方式");
e.printStackTrace();
}
catch (FileNotFoundException e)
{
System.err.println("初始化文件失敗,或路徑不存在:" + fileName);
e.printStackTrace();
}
try
{
writer.write(outStr);
writer.flush();
}
catch (IOException e)
{
System.err.println("寫文件失敗");
e.printStackTrace();
}
finally
{
try
{
if(writer != null)
writer.close();
}
catch (IOException e)
{
System.err.println("關(guān)閉文件失敗");
e.printStackTrace();
}
}
}
類似的,也將讀的邏輯獨(dú)立抽出來,雖然,這不但沒使代碼的量減少,卻增加了很多try catch 模塊,不過邏輯上很完整,而且發(fā)揮了每個(gè)try catch 的最佳功效。我把它起名曰,我個(gè)人的偏執(zhí)情節(jié)吧。
困了,要睡覺了,本來還想將代碼從最初模樣,到最后模樣的過程復(fù)述一遍,改天有機(jī)會(huì)再說,精華都已經(jīng)說了。嘿嘿
今天早上打破了原本的計(jì)劃,對(duì)于網(wǎng)上看到的一位小狂人,發(fā)表了很多看法。中國IT 這個(gè)行業(yè)就是這樣的,普遍的年輕化,輕狂化,但是真正的大師卻少的可憐。看了看自己在豆瓣上的“想讀”列表,突然覺得時(shí)間大大的不夠,心里又激起了一層漣漪,打破了那片平靜。不過經(jīng)過一個(gè)小時(shí)的深入思考,我又重歸了那份平靜。
我是贊成中國道家學(xué)派的,人只有歸于平靜,身體和心靈都達(dá)到陰陽調(diào)和的狀態(tài),心情穩(wěn)定,脾氣溫和,頭腦冷靜,做事要循序漸進(jìn),才可以穩(wěn)穩(wěn)當(dāng)當(dāng),根基牢固。所以我個(gè)人并不羨慕暴發(fā)戶,也不羨慕那些少年得志的人。一個(gè)完整的、健全的人,成大事的人,是要體會(huì)人生的低潮期的。和命運(yùn)作斗爭(zhēng)的過程,你的思想和心智都會(huì)得到歷練,正如古人所說“天將降大任于斯人也,必先苦其心志,餓其體膚”,沒有經(jīng)歷過失敗的人,是很難長(zhǎng)久守住你的成功的。就像我上個(gè)禮拜讀的那本書里寫的故事一樣,一夜成名者,招致的嫉妒和怨恨太多,不是自己不夠優(yōu)秀,而是環(huán)境不允許你優(yōu)秀,終歸無以成大事。所以,做人還是要謙虛謹(jǐn)慎的,扎穩(wěn)根基,一步一步的來,厚積而薄發(fā)。
思考到這一步,心情從浮躁終歸于平靜了。所以還是應(yīng)當(dāng)遵循我的目標(biāo),一步步來,時(shí)間之與我,的確寸秒寸金,所以我不能把這些時(shí)間浪費(fèi)在對(duì)人生太多的感慨中,而應(yīng)當(dāng)去努力的尋覓,去體驗(yàn)生活,去做自己該做的事情!不去空嘆光陰似箭,也不去妄自菲薄!從現(xiàn)在開始投入到實(shí)際的工作中吧!