星期五, 7月 25, 2008

寫程式的胡言亂語

這是一篇有關programming的文章,不想看的可以跳過了XDXD,不過最近的我似乎很少寫這些文章。

最近一直在寫C# with .net compact framework,老實說,我一直被微軟的名詞搞的暈頭轉向,當我有問題只能靠著MSDN來解決的時候,有一種很深刻的無力感...不過我不得不說,Visual Studio .net 是一個很棒的軟體開發工具(雖然eating畫GUI時常常出現記憶體堆疊錯誤,她應該是畫太好...Orz),這部分是專題兼比賽關係,所以我大概等到比賽之後才會提及可以提及的部分,如果中華電信有保密條款之類的,我也只能說聲抱歉啦。

所以我想要提及一些我最近覺得很有趣的部分。寫程式越久只會覺得自己越來越不會寫程式,最近的興趣著重在兩個大重點functional programming 和 Refactoring。

functional programming 最近頗有復活的傾向,據我粗淺的知道(轉錄自某個老師告訴我的故事),上一次FP紅的時候是在一堆人瘋AI(Artificial Intelligence)時,Lisp是一個非常聞名的FPL,在1990年代附近一堆人在做這個題目,但是並不是有那麼實際的成果,結果做這類的題目變人人討打。FP其實專長並不止於此,就我的了解,讓你寫程式更像寫數學一樣,No side effect,lazy evaluation,等等之類的特性,使得近代的FPL極具威力,而跟現在主流的Imperative programming大異其趣,著實是一個讓我產生高度興趣學習的領域,據Josh Ko描述,有比較靠近主流的ML和pure FPL的Haskell,外加我自己所買的Erlang,我想我的學習會以後面兩個為主。到目前為止,我還是不會寫,或許過一陣子,可以自己試著寫出一堆有趣的東西。

舉個例子好了sum . map read . words $ "123 456"我當初看到這行程式碼我就哭了,這可是我第一次碰C寫的要死要活的題目,轉成簡單的C++ Code;

std::string s = "123 456";

s += " ";
int sum = 0, temp=0;
for(std::size_t i=0; i< s.length();i++){
if(s[i]>='0' && s[i]<='9') temp = temp*10 + s[i]-'0';
else{
sum += temp;
temp = 0;
}
}

當然,上述的程式碼沒有做任何的最佳化寫法,不然可以用C的atoi()之類的function,重點是,再看一次FP的程式碼,光看字面就可以猜到程式的意思了(要了解沒那麼簡單,我被Josh Ko搞死了好久...Orz),以後會盡量把自己學習寫FP的筆記放上來,我想我有很大的機率會喜歡上這種程式思維。

接下來回主流Imperative programming XD,昨天嘗試的把Refactoring從第二章推進到第八章,這是一本我很少數後會後悔大一沒有買來看的書(當初錯過Effective C++也沒那麼嚴重),裡面提到種種的方法太漂亮了,從function level的Composing Method到Object之間的Moving Features Between Objects& Organizing Data等等的方法,給我在OOP上很多體悟,也再一次深深的了解自己基本功的不足,舉個例子而言,一般寫身份字號產生器時,最難處理的是每個英文數字所代表的數字,我在寫作時就提出了一個很簡單的方法

// normal writing
char c = 'a';
int value = 0;
if(c=='a') value = 10;
else if(c=='b') value = 11;
/*...*/

// better writing
const int c_value[] = {10, 11 /*...*/};
char c = 'a';
int value = c_value[c-'a'];

這個方法在Refactoring也有收錄,名字為Substitute Algorithm(6.9),Refactoring並不會改變程式所要表現為何,很多時候會把一個複雜的function拆成由許多小function所組合,由專家告訴你如何測試及重構出一個更好的程式,在看這本書時,是一個很棒的體驗,縱使自己原本就會復審自己所寫的程式碼,我想我還是會不定期的看看這本書,會給我什麼體悟

學習相關OOP的運用最大的問題是,我一定得知道這些事(Design Patterns, Refactroing ...),但是我又得忘掉他,然後在需要的時候想起來,而不是為了運用而運用,但是我想,或許我會在Refactoring改變一下作法,或許我很難體會怎麼用Design Patterns,但是我想我會很樂意的使用Refactoring來學會Design Patterns,這時候就不得不提到 "重構-向範式前進(Refactoring to Patterns)",我還沒閱讀,但是我覺得或許是一個行的通的閱讀。

還有很多想提的沒有提及,就下次再說吧。

---
好長的一篇XD

星期三, 7月 23, 2008

無言

繼主機掛點之後,螢幕(Benq FP71Q+)又壞了,跟上一次死在同一個錯誤,螢幕的開關壞了,距離上一次送修一年多。

我的桌上型電腦大概整組壞完了...有一種懶的修的衝動...

---
有一種很衰的感覺...Orz

星期日, 7月 20, 2008

程式與人生

原本想要回彰中講Generic Programming的,不小心講成這個XD

只能說自己在認識的人面前都會爆走,顯然是一個不太好的現象,講解的主軸還是GP,不過中間穿插了許多小故事,也講解了許多自己的想法,我想在這個blog再講一次。

我遇到許多人都跟我說要努力達成某件事,但是只有少數人能達到,沒到的人不是沒有這樣子想。
如果想要對自己構成某件改變,不改變自己的生活形態是不可能的,如果只有想一想之後,生活仍然一模一樣,我想不會有什麼改變。

要認真是一件好事,我想以後如果有類似問題,我會這樣子回答的。

---
所以我連NFS都戒掉了XD

星期五, 7月 18, 2008

表達

以前可以暢所欲言的我,似乎漸漸的消失。或許因為知道世界之大而安靜,保持更好的觀察與學習能力,在前進。

明天準備回去講我忘的差不多泛型程式設計,今天因為颱風只有中部停止上班上課。想一想還是頗要有趣的,一般都是其他地方停課的。還是說我可以就此偷懶,讓他們今天的上明天的課XD 不過人得認清現實,有這麼好嗎XD

時間充足的狀況下,我蠻願意準備這堂課給大家的。

---
似乎不會有時間充足的狀況

星期四, 7月 17, 2008

電腦

我的桌上型電腦掛的差不多了。

現在想想,這台當初升大一買的時候,可是一個不錯的配備,Athlon64 3500 + 1 GB DDR + Geforce 6200,在這台寫程式,著實十分快樂(不過那時候寫的程式老實說也不吃重),但是大一心情不好的時候,每天拿它來跑Need For Speed: Most Wanted跑到顯卡熱當為止,到大二之後,就不會這麼操了(和efang在一起了,沒時間玩XD),現在想想,大一操這麼兇的電腦,不掛也困難。

這個學期當機頻傳,不是顯示卡出錯,就是記憶體掛掉,昨天徹底掛點,開機時連逼聲都沒有,初步推測,主機板掛了,記憶體掛了一條(學弟幫忙測試得到的結果),顯卡應該也差不多了。想想,以前電腦掛掉,就會很有活力的自己下海測試,換零件,直到好為止,漸漸的,我只是想安心的寫程式,這學期用MB的時間非常長,所以連這台什麼時候掛的,我都不甚清楚,想想也甚為慚愧,疏於照顧自己的電腦,電腦也不太可能會乖乖幫你忙。

或許暫時還是以MB為主工作,等比賽比完,再來好好的修理它,總是要盡心盡力照顧好每一台電腦的。

---
感觸良多。

星期六, 7月 12, 2008

男人

Clara: 朋友問,男人都用下半身思考嗎?
yen3: 是啊,但是大部分有色無膽。

---
(茶)

乖乖

看了Zerolex的blog,我明天去買一包乖乖回來放好了。

乖乖傳奇

今天順利的和eating把GUI相關部分取得一個初步成果,接下來還是得忙自己的事了,efang回家,很多事在暑假得適應。明天還有事要做,得買兩本書,還好都不是自己買的XD。

---
研究 pkizzy 中。

星期五, 7月 11, 2008

Visual Studio + svn

Visual Studio .net 2005 or 2008 雖有 Team Suite 協助做版本控制,但是並不是一個非常好的選擇,當然,Team Suite(2008稱為Team System)還包括版本控制以外的功能,例如說可以做單元測試(Unit Class Test),等等之類的,由於Team Suite太肥了,我決定還是朝向軟體來協助。最主要的原因,要做到Team Suite的版本控制,Server端要裝Windows Server 2003,什麼鬼...Orz

Subversion(svn) 在 OpenSource 界是一個非常常用的工具,如果在純Windows的環境下,伺服器端,可以使用Apache + svn,是一個不錯的選擇。也可使用IIS + VisualSvn,網路上可以爬文,我就不再多廢話,我是使用後者(因為Server原本就有裝IIS,不想相衝)。

在Visual Studio .net 2005, 2008,皆可使用 Ankhsvn,這個軟體為一個plug-in的形式存在於Visual Studio中,不過並不是那麼穩定,可以使用TortoiseSVN來做為輔助(雖然大部分的狀況下他比前者還重要XD)。

如何讓很多人用在Visual Studio 用svn寫同一個專案,我試出來的方法為,先讓其中一個人建好project,用svn上傳之後,其他人先用TrotoiseSVN下載下來,之後直接開啟裡面的專案檔,在Visual Studio裡面即可設定好,可直接Commit,非常方便,不建議使用Anksvn來做設定新專案的動作,通常會有一些奇怪的事發生。

設定好了,大家可以快樂的使用svn來寫同一個專案了。

---
為什麼我覺得這篇的口氣很怪啊...Orz

星期四, 7月 10, 2008

最近

其實很多事很難以解決,明明每天都忙到很晚,感覺上總是沒什麼進度。或許只能說自己太久沒有上緊發條了。

Qt其實是一個很有趣的東西,我建議自己的學弟去學習,我自己還是在Google Static Map API上打轉,pre-fetch map其實有很多事可以考慮,可以試試。

開始閱讀和運動習慣,算了,想到再寫,超多事可以寫的,下筆此刻竟一個思緒也無。

---
無狀態

星期三, 7月 02, 2008

架構

人跟人之間的問題果然非常難,還是生程式架構比較簡單...Orz

---
雖然這次要生的架構也超難就是了

星期一, 6月 30, 2008

新工作環境


這幾天一直忙著趕期末project,今天算是稍微告一段落,跟Clara借來相機照一下自己的工作環境,大概暑假都會在此定居了。

目前只差床墊了,明天就會有嘍。

---
持續寫程式~

星期日, 6月 29, 2008

今日

我決定叫自己 Event-Driven Yen3。

---
狀況還蠻像的

星期五, 6月 27, 2008

大三下回顧

雖然還有一個project要完成,對我而言,大三下已經正式邁入一個尾聲。雖然這學期寫的程式都不大,但是也不少,雖不能輕鬆應付,但是也沒有遇到多大的問題,我想,cllee帶我們去比賽,在這個學期是有產生決定性的效用的。

思考了很多事,以學業上而言,有時候人不能思考太多事情,笨笨的去做,反而會有更多的效果,對於寫程式這條路而言,我才剛開始,我並不是跟Josh一樣很努力又有很好的結果,我是一個不怎麼努力的人,且很笨(笑)。早期大一大二閱讀的書到現在漸漸用的上了,不過卻有一股心虛的感覺,越用才越發現,原來以前的自己所學是不怎麼踏實的,但是也得說,如果以前不堅持看某些書的話,現在可能更無法把事情做好了。

對我而言,我希望盡量把我的現實面對生活拖到最後一刻,一直到現在,我還是可以很熱情的學習每一項東西,雖然這每一項東西考試不會考到,對於實質的生活不一定會有幫助,但是我喜歡。ycfu跟我說,你書看太多了,應該直接下去接個project來實作才對。這句話是對的,我理論不好,我寫程式也不行,有時候寫程式,下去寫就對了,並不用思考太多能與不能的問題。

最該感謝的還是cllee老師,在我覺得心情不好啊,人生徬徨的時候,找他聊聊,總是會給我一股最直接的力量,也感謝老師一直容忍我們進度落後,暑假我會一次補回來。

smallpig老師,對我而言,他是一個講話有點毒的老師(雖然blog一點都看不出來XD),不過從他的身上學到不少的現實生活的程式設計的想法與技巧,非常感謝老師,我這學期有一半的時間在寫他要求的程式,也可見我的功力不足,但也無妨。

ycma老師,有人說他悶騷,我覺得他是對某些技術存在著狂熱的老師,unix programming上的非常精采,雖然我們一直拖課,不然會聽到更多東西,但是這些事物帶給我是全新而不同的想法,也從老師身上學到很多編程技巧,雖然老師常常被我們嚇到XD。

efang,我很感謝,心情不好的時候,總是會陪著我,我會努力寫程式的。

eating,雖然你可能覺得你做不了什麼,但是一個安心寫程式的環境非常難求,沒有你,我也辦不到。

clara,雖然你常手殘XD,不過常常從你身上學到很多很有趣的程式想法,讓我的腦子開通了不少。

fire7617,雖然你常看我不爽,但是感謝你容忍我一直犯錯,我們要一起向前衝。

gb014388,全方位的心靈導師,以後還是靠你了XD。

其實,在這學期才完全想通一件事,我一直很想認真做專題,但是專題會卡到研究所考試,我的想法很簡單,我想把專題做好的原因是,我想做好一件事,做好一件事的態度會影響我一輩子,然而,今天考研究所是一個選項,當然,沒有考上是一件可惜的事,重點是我考研究所是為了什麼。在人生的目標前面,路不只有一條,但是我要選擇我做起來不會後悔的路,如果今天沒有做好該做的事,考上研究所也是沒有用的,做好該做的事,接下來才能談下一步,能影響人生的,往往是想法,而非現實生活的事物。我會試著努力準備研究所,但是,在把這一件事做好之後。

這個學期生活非常的簡單,連愛看的日劇都很少看了(這跟桌上型一直當沒辦法抓日劇看也有很大的關係XD),事情比以前多的狀況下,如果保持同樣的生活,能做的事只會比以前更少,得要有所交換,才有辦完成自己想要做的事。

---
好零碎,不過想法只有這些。

qt

php project暫告一段落,明天試著用Qt看看

---
大膽的嘗試。

星期三, 6月 25, 2008

開始

期末考的結束,代表寫程式的開始。

---
現在的壓力比期末考還要來的大。

星期二, 6月 24, 2008

觀察



由於blog去年有寫了Graph Algorithm的筆記,剛好今年smallpig也用了相同的簡報來上課,其實,由圖中就可以知道,系上大概什麼時候期末考XD

---
真明顯XD

星期一, 6月 23, 2008

期末考

好久沒有對某一科這麼堅持了,明明沒有考試就會過的科目...

---
下午的科目是該堅持一下了

星期六, 6月 21, 2008

日落

很高興認識Zerolex這位朋友,他在PHP和C上的功力非常好,不像我一個四不像的人XD 私下聊天才發現,他是一個很有趣的人,但有身為資訊人應有的堅持,假以時日,會閃閃發亮的。

---
已加入blog sidebar

星期四, 6月 19, 2008

花園克拉拉

Clara是我少數認識會寫程式的女生(沒辦法,資工系女生本來就少XD),在認識她的大部分,她的寫程式其實架構良好,問題都不大。

不過當她的程式有問題,就是大家該撞牆的時候了XD 這是因為絕大部分時候,她錯的並不是程式問題,也不是邏輯問題,也不是架構問題,而是

打錯字問題...Orz

打錯字倒也不是一個很大的問題,她的手殘從來不會拖超過第二天就可以找到,只是想做個紀念,因為這個學期好像四次還是五次她的程式有大問題都是打錯字XD 這某個層面而言也不錯,至少沒有很大的問題存在。不過當辛苦幾個小時之發現是打錯字的問題,我想這心情也頗難描述XD。

不過總和而言,她還是一個很寶的人,尤其在寫程式上XD

---
做個紀念XD

星期二, 6月 17, 2008

小小嘗試

發現這個blog的程式文似乎沒啥人在看,所以想做一點嘗試,因為自己的英文很爛,寫程式文時,又很容易中英夾雜,所以以後應該會試著用英文寫作。但是鑑於自己的英文實在是很爛,所以請大家多多指正了~

---
拜託大家了~XD