Friday, August 5, 2011

程式設計 遇上小提琴

程式設計 遇上小提琴
"Victor's個人部落格,關於程式設計與小提琴"

" 我是Victor Lin,Now.in的創辦人,興趣是程式設計,Python目前是我最喜歡的語言,從國一開始寫程式到現在已經有十個年頭,不過還有很多要學習,除此之外偶爾用小提琴製造一些噪音也是我的興趣之一 "


很棒的部落格,寫python,程式觀念,應用等等

推薦文章 那些在Now.in學到的 – Software engineering practices
"邊移動邊開火才是正確的方式,這有一部份的想法是來自約耳談軟體,如投影片所看到的,一開始先從最核心的功能做起就好,然後看使用者的反應與需求再來改版與新增功能,盡量保持每個開發循環很小,才能抓到使用者所要的"




.

李大師您多久沒寫程式了 ? 一百個你不應該繼續用Dev C++的理由

李大師您多久沒寫程式了 ? 一百個你不應該繼續用Dev C++的理由


學生連開新專案都學不會?

Dev C++最大一個特色就是不用開新專案就能編譯並執行程式,在我所知道的IDE裡這是極少數有這樣特性的環境,至少以現代的眼光來看盡是如此,如果是遠古時代的Turbo C之類的就不用比了,因為這樣特性的使然,一堆學生連開新專案都不會,你或許會說,不會開新專案又怎樣?

不會開新專案問題就大了,不管是debugger、編譯器設定、函式庫連結,這些都得先建出一個專案才能進行設定或使用,不管是Visual C++、Eclipse、Code::Blocks等你所能找到的所有現代IDE都是如此,連開新專案都不會就在寫程式就好像連走路都不會就在跑步一樣的糟糕

多數不清的臭蟲和怪異的行為

因為Dev C++專案已經陣亡多年,所以其中有數不清的臭蟲還有詭異的行為都沒有被修正,通常遇到了就像是鬼打牆一樣,debugger也是問題百出,常常有些同學的程式有問題拿來問我,我在檢查了多次都找不到問題所在,接著拿到其它的IDE下就能正常執行,最後發現其實是Dev C++本身的缺陷所引起的,只能苦笑著說是Dev C++發生鬼打牆,這對初學者有什麼影響?

這影響可大了! 初學者連最基本的東西都不會,他們需要的是一個可以信賴的環境讓他們可以知道什麼是對的什麼是錯的,但是今天這個環境連什麼是對的什麼是錯的都沒辦法確定,這樣有可能可以學好程式設計嗎? 有可能嗎?

無法教會學生使用除錯器

除錯器(debugger)是學習程式到底是如何執行的,以及找到錯誤的好幫手,有一點程度的程式設計師都知道這叫trace,也就是追蹤,但是因為Dev C++本身的問題,其除錯器的功能殘缺就算了,還有一大堆未知的臭蟲在其中,更慘的是搭配先前不用建專案就能執行,就算建了專案還得手動加入除錯的選項才能使用,使得用Dev C++教會學生正確地使用除錯器根本就是天方夜譚。

Monday, August 1, 2011

程式設計心法:化繁為簡,執簡御繁

程式設計心法:化繁為簡,執簡御繁(上)

程式設計心法:化繁為簡,執簡御繁(下)

"開發系統時,通常必須面對各式各樣看似十分繁雜多變的需求,但往往需求與需求之間本質上又有共通之處,倘若能夠掌握,就能更輕易處理這多變的需求。 "

"倘若,發現了qsort()的實作有問題或需要加以擴充,只需要修改這唯一的一份qsort(),其餘呼叫qsort()來針對不同型別進行排序的程式碼,完全不需要更動,重複程式碼在維護上的問題也完全消失。 "

"我們需要針對五花八門的型別進行快速排序,這是可以看到的繁複表象,但在繁複的表象之中,有一個很簡單的核心,就是快速排序的演算法本身。倘若我們能夠像這個例子中一樣的「化繁為簡」,那麼便能夠憑藉著既單純又簡化的核心,「執簡御繁」。 "


"此即本文所想要表達的重點,當你能夠「捕捉事物的共通性」建立起程式的核心時,就可以進一步透過「界定事物的相異性」,為不同的需求建立起搭配核心一同使用的殼。 "


"核心所表示的特質就是共通性,而殼所實作的,便是不同需求之間的差異性。「化繁為簡」意謂著透過分析的手段,從看似繁瑣的諸般變化找出共通性,簡單地說,共通性就是化約後的純淨表示。"


"在概念的階層分類體系中,愈往上層愈是一般化,愈是抽象,因為它代表的是底下所有概念的共通概念。而愈往階層分類體系的下方移動,概念就愈具象,所涵蓋的範圍就會愈來愈小。

物件導向的繼承機制,其實就是試著支援人類早已習以為常的知識分類方式。而且物件導向的精神在於,讓程式員試著以理解真實世界的方式,來描述解決真實問題的電腦系統。繼承機制的支援,希望程式員能夠更自然地運用概念分類階層,以真實世界的方式理解軟體系統的開發。"