發表文章

目前顯示的是 7月, 2008的文章

重要的事情先做

圖片
從事IT行業多年,我一直有一個深刻的感覺,資訊科技日新月異,要能夠掌握足夠的資訊技術,並且讓自己能夠在業界不至於被淹沒甚至能夠在眾多的強者中異軍突起,所需要花費的精神和時間有時候已經讓人喘不過氣。不管是哪一個領域,MIS、SI、Vender site、User Site、Consultant、Trainer我大多都有扮演過這些角色、或多或少也都能夠體會不同角色中的辛苦。 不過也可能是因為IT相關領域(特別是Developer)所需要涉獵的知識一直在變和增加,這些部分已經讓人耗費心力,使得IT人員在一些基礎的管理技能上,顯得有些缺乏。說真的,我認識的IT人員很少不是聰明人(意思就是大多數都是聰明人...我真怕現在很多人看不懂這樣的中文寫法...),我覺得大家都很Smart,但是往往由於缺少了一些基本的管理知識,在專案中常常變成無頭蒼蠅,忙碌,卻不一定能夠產生預期的效益。 關於這部分,我最近和一個同事提起,對於IT人員,不管是系統開發人員,或是MIS、你要妥善規劃你的時間,有一個很關鍵的技巧,就是把重要的事情放在前面, 重要的事情先做,一直是時間管理當中很重要的一個部分。 不知道你有沒有讀過一本很不錯的管理書,作者把事情分為四種,急迫但不重要的(P2)、重要但不急迫的(P3)、不急迫也不重要的(P4),即重要又急迫的(P1)。 我記得我以前曾經提過這個觀念,這個觀念對我有非常大的幫助,我一直想找時間與大家分享,回頭想想這四種事情,你會先做哪一種? 你在哪一類的事情上你花了比較多的時間??? 一般人P1一定會先做,這個毫無爭議,典型這類的工作是:家裡失火、急病住院…不過這些事情都不常發生,更具體一點的 工作 像是明天要交付驗收的專案、下午會議要用的報表…等,都屬於P1的範疇。 P1類型的工作往往不會佔用你絕大部分的時間,但是如果你發現自己手上每天的工作全都是P1,這表示你每天都在救火(我就看過這樣的MIS部門和專案公司,我可以肯定的告訴你,你絕對在這家公司待不久,搞不好這家公司或這個部門自己也撐不了多久,碰到這種公司,我會建議你趕快準備104…),如果手上的工作大部分都是P1,不用懷疑,你(或你們)的時間管理絕對有問題。 P1類型的工作,我認為在正常的公司當中一週不應該超過一、兩件,每件應該也都要能夠在三小時內解決。(否則他就不是P1,而是P3轉換成的P1,我待會解釋)

Silverlight 廣告

不知道大家有沒有看過這個...在網路上找到這個廣告... 嗯...我猜這應該算是廣告吧...好像有點無厘頭...不過算是挺有趣的... 呵呵,它的精神是...有了Silverlight之後, 一切都變得更簡單了...

關於如何選擇VB和C#

有一位讀者在幾周前來信詢問到這個問題,我答應他要在BLOG上好好討論這個部分。 我相信很多初學者最近特別碰到這個問題,面對在.NET上要採用哪一種開發語言而困擾。在回答這個問題之前,有一個前提是要先確定的,關於效能的問題在這兩個語言之間的選擇是幾乎不存在的,特別是由於硬體設備的關係,因此效能問題很容易補強,若要說效能,到目前為止中高階語言當中C++依舊是效能最好的,Assembly依舊是效能冠軍,但是你會不會用這兩種語言來開發資料庫應用程式,答案是你絕對不會,因為這樣太辛苦了,好,我們的討論就從這一個point開始。 正如同你不會用C++來開發資料庫應用程式一般,除非沒得選擇(某些平台上只能選擇C++),否則有太多更適合用來開發資料庫的語言,C#, VB, Java, delphi...幹嘛選C++? 但是有沒有人會說C++語言不好?不會的... 因為大家心裡都明白,不是好不好的問題,而是適不適合的問題!!! 那問題來了,如果答案這麼明確,為何還會有人討論C#和VB到底要選哪一個呢?不是就是適合不適合的問題嗎? 對,但是有一個小麻煩,是C#和VB都是.NET的官方語言,而兩種語言能做的事情幾乎一樣,花的工也差不多,那就讓人困擾了,到底要VB和是C#? 好,探索這個問題之前,我們要明白語言的背景和特色,C#是C Like語言,從C, C++之後,出現了很多C Like語言,C#和Java都是其中之一,他本質上是C的語法,但是沒有C++那麼難,C++當中有很多古時候C語言保留下來的特殊語法,這些語法相當簡約,例如A++,這代表A=A+1,除了A++之外,還有++A這種語法(難倒你了吧,很多人不知道兩者之間的差異...)。C語言又加上物件導向的觀念之後,難度瞬間提升幾十倍吧,很多專家腦袋裡想出來的許多天馬行空的可能,都在 C++上實現了,像是多重繼承這類的觀念,導致原本已經很簡約的C語法,變的進入障礙更高。 PS.你知道C語言為何要那麼簡約嗎? 因為在C發展的那個年代,很多時候無法用鍵盤直接輸入程式執行的,是透過讀卡機把程式輸入電腦裡,而字寫得越多,讀卡紙片就越厚,所以大家盡量把語法搞得越簡單越好... 而Java的出現,簡化了C/C++複雜的語法和架構,有那麼一點去蕪存菁的意味,更貼近商用(注意,是商用)領域,加上那一年internet盛行,所

VB當中的新語法(四) - Lambda

這個世界上很多東西是沒有道理的...不知道你是不是也會這樣覺得。 老實說,過去寫程式寫慣了的人,一開始看到Lambda運算式會覺得怪怪的,我先講它的意義,官方說法是,Lambda運算式可以簡化程式碼的寫法、增加可讀性(老實說我覺得簡化程式碼的寫法這件事情很少跟增加可讀性可以一起發生,通常程式碼越簡化,可讀性就越差...),對Lambda運算式來說,簡化程式碼寫法可能是做到了,增加可讀性我就很猶豫了,不過如果真要說起來,Lambda運算式的出現(或是為什麼在這個版本出現)其實說穿了還是跟LINQ有關... 先寫一個簡單的Lambda: Function(para1 As Integer) para1 + 1 MSDN上說,Lambda運算式是沒有名稱的函式,所以上面名稱不見了,return也不見了,其實你可以想成: Function 函式名稱 (para1 As Integer) Return para1 + 1 上面這樣的簡寫,只是把函式名稱和teturn拿掉,這樣就比較容易懂了。 例如,原本應該寫成    '計算身高體重的BMI值    Function BMI (height As Single,weight As Single)      Return weight / ((height / 100) ^ 2)    End Function 就變成(拉成一行)    Function(height As Single, weight As Single) weight / ((height / 100) ^ 2) 對照著寫就比較容易理解了,函式名稱不見了, 自然End Function也不見了,Return也不見了,差不多這樣,就是Lambda運算式了。 注意:另外一個很重要的是,函式寫在程式碼區塊外面,Lambda運算式則混雜在一般的程式碼裡面。(往下看,就會知道意思) 好,定義出來的Lambda運算式怎麼用呢? 最簡單的方式是在Lambda運算式的外面加上 ( ) , 變成 ( Lambda運算式 ) 然後再把參數給進去,所以就變成: (Lambda運算式) (Lambda運算式需要的參數值) 例如:   Dim ret As Single   ret = (Function(height As Single, weight As Sing

最後的演講(The Last Lecture)

最近買了一本書,最後的演講(The Last Lecture),老實說,最近發生的事情讓我對人生的不可測開始有著另一層看法,有時候營營汲汲,所換來的回頭看看實在也不知道到底值得不值得,不過說真的,事情發生了,才會有這個想法,有些事情不是臨到頭了,恐怕一輩子也沒那個感覺。 回頭說這本書,書附贈了一片DVD,其實已經很多人在網路提起這個故事,我想說的是,當你看這個影片的時候,主講者在台上侃侃而談自己的故事時,你不知道的是,其實他有數次感到身體相當不舒服,幾乎要倒下,但還是硬撐完了全程,所以你看到的,是一個看似正常人一般的演說者,而不是一個生病的人。 讓我想到我小時候的英文老師,外表看起來很像一個糟老頭(年紀很大、臉上有點像是沒剃乾淨的白色的鬍鬚),他第一次走進教室我還以為是工友走錯了,但是沒想到他就是我們的英文老師,進門第一句話就是道道地地的帶有英國腔的英文(如果我沒記錯他是留學英國的),說真的,事隔多年,我對他沒什麼印象了,只記得他不只一次的說如果他可以選擇,他希望要死在講台上(因為他覺得自己教書很多年了,老囉~),他說他當了一輩子的老師,再也沒什麼比死在講台上(例如突然間心臟病發作)更圓滿的了... 自己有幸當講師之後,開始覺得也許站在講台上真的是需要一點對演說、教育由衷的喜好和興趣的,特別是和學員之間的互動,往往是吸引講者能夠一直努力下去的動力,我喜歡帶稍微小班一點(就是我有機會可以跟每一位學員說話的那種編制)的學員,很慶幸絕大部分的資訊課程都是這個編制,在這個過程中,其實是很愉快的,如果同時又真的能夠給學員一些幫助,那我覺得就更加的完美了。 每一個工作都能夠對社會有一些幫助,不過很少像教育工作那麼立即和明顯,我相信有一天回頭看,應該會讓自己感到安慰。人生並不長,時間有限,在埋首程式堆裡面的生活當中,偶而能夠和其它的開發人員有一些互動,又能不時幫助人,其實是蠻令人欣慰的。 BTW,這本書和影片可以買來看看,挺讓人深省的。我們有太多的書籍告訴我們怎麼寫程式、怎麼賺大錢、不過關於怎麼過日子的書籍,恐怕相對的少了很多,有時候放在書店的架上也不是非常顯目,不過,留一點時間給自己,看看這類的書籍,對自己好一點,因為有時候人生,並不全然會照著我們自己所編寫的劇本上映。

VB當中的新語法(三) - 擴充方法

圖片
在VB的幾個新語法當中,擴充方法也是很有趣的功能之一,某種角度來說,它讓我在上課時幾乎已經要丟一在一邊的Module關鍵字又重新開啟了另一個重生的機會。 簡單的說,擴充方法就是以額外的程式碼替原有的Class(不管你有沒有這個Class的原始程式碼,不管是原本系統的Class或是你自己寫的)增加新的Method。 作法是開啟一個新的Module檔案,並在當中建立一個Method,例如: Module IntergerExtensions    <System.Runtime.CompilerServices.Extension()> Public Sub Show(ByVal para As Integer )     MsgBox(para)   End Sub End Module 請注意,一定要宣告在Module當中,並且加上 <System.Runtime.CompilerServices.Extension()> 特徵關鍵字 。由於這個函式的參數是 Integer ,如此一來,就會自動幫原有的 Integer 類別增加了一個 Show 方法,因此你在撰寫主程式的時候,會發現只要用到integer的變數,打個點,就可以自動帶出 Show 方法: 當然,並不是Integer就真的有這個新的Method,更不是繼承的觀念,純粹只是Compiler和IDE進行某種程度的 "混淆視聽" 之後的結果。IDE負責讓你在開發的時候有intellisense可以用,Compiler則負責去解讀這種特殊的語法轉換成一般呼叫函式的程式碼。 使用的方法就是那麼簡單,即可讓原有的Class增加新的功能,別忘了,使用前要在主程式中Import這個Module。例如: Imports WindowsApplication1.IntergerExtensions (由於我的程式的root Namespace是WindowsApplication1,而Module Name是IntergerExtensions,因此我會這樣寫) 說真的,這個功能我覺得放在Module當中還蠻有點道理的,因為擴充方法其實是Public Shared 型別,且實務上我們可以把一些常用的Method(Sub或Fucntion)集中在一個或數個Module當中,賦予適當的Module Name

從Silverlight 2.0的新功能,遙想Web的未來

圖片
  Silverlight 2.0比起1.0令人驚艷不少,在1.0當中幾個過去被談到缺少的機制,在2.0大幅度補齊,其中與開發資料庫應用程式有關的,莫過於Data Binding技術以及IsolatedStorage機制。   透過Silverlight 2.0當中的Data binding技術以及IsolatedStorage機制,我們可以很輕鬆的建立出類似左邊這樣的用戶端資料處理介面( 按這裡試用看看 ),不僅程式碼相當簡單(不到百行吧),而且在UI上更勝ASP.NET與傳統的WinForm程式一籌。   除此之外,程式碼的撰寫以及維護和除錯,都比ASP.NET要容易不少,過去很多台灣和大陸地區的開發人員對於在Silverlight 1.0當中的中文字顯示和輸入問題的疑惑,相信在看到這個2.0的範例後這些疑慮你可以一掃而空。   透過IsolatedStorage機制,讓開發人員可以大方的把需要保存的資料存放在用戶端,不需要在意它的存放位置。若您不喜歡這樣的方式,你也可以透過WCF從伺服器端將需要的數據下載,暫存在用戶端的記憶體或是HD當中,透過程式碼來操作。   除了UI絢麗性與親和度大幅超過ASP.NET之外,我個人比較喜歡的原因是靈活性和自由度,有點讓我回想起從前開發WinForm的隨心所欲的日子.....   說真的,HTML給ASP.NET Developer的限制,以及為了模擬WinForm或是提高Web開發環境中的UI的效能而硬生生所加入的AJAX技術,已經讓原本應該要 "簡單輕巧" 的Web應用程式變的龐大而複雜不已,面對這樣的問題,有兩派不同的路線正在彼此較勁。   如果你觀察ASP.NET這幾年來的演變以及ASP.NET 3.5 extensions的出現,你會發現這一派儼然已經透過種種疊床架屋的技巧,把原本簡單的ASP.NET演變成可以開發大型應用程式的技術平台。本來ASP.NET在2.0前的訴求就真的比較適用於開發小巧的網頁或是輕量級的企業入口網站或是portal應用(OK,也因為這樣很多case被JSP搶去了),但是現在在3.5 extensions當中加上了LinqToSQL(以及ADO.NET Entity framework),加上了Data Services、加上了Dynamic Control、加上了MVC

Silverlight 2.0 中的 UserControl 開發與使用方式

圖片
先前介紹過的Silverlight 2.0 中的 UserControl 開發與使用方式的教學影片已經上檔了,請參考底下網址,而詳細的內容說明在本期的RunPC當中介紹。 http://www.microsoft.com/taiwan/msdn/elearning/Teaching/Silverlight/video10/

關於Microsoft .NET Framework 3.5 Service pack 1 Beta與ASP.NET 3.5 Extensions

Ok, bate 1 出現了,那距離正式推出又邁進了一大步。 Microsoft .NET Framework 3.5 Service pack 1 Beta當中有什麼呢?對於 ASP.NET開發人員來說,其中包含了一些相當重要的部分: ASP.NET Dynamic Data ASP.NET AJAX 增強功能 ASP.NET AJAX script combining ADO.NET Data Services The ADO.NET Data Services Framework 上面這些玩意兒根本就是從ASP.NET 3.5 Extensions搬過來的,正如同我們過去說的,目前MS的改版越來越快,ASP.NET 3.5這個版次其實有點吊詭,儘管跟著NET Framework把版本編號帶到了3.5,但是在新功能上卻沒有太大改變,而真正石破天驚的則是ASP.NET 3.5 Extensions, 如果依照目前我們所看到的態勢,ASP.NET 3.5 Extensions中的上述幾個功能,將會出現在.NET 3.5 Service pack 1 當中。 在三月的時候,我曾在微軟的研討會當中跟各位介紹ASP.NET 3.5 Extensions,接下來我會在 BLOG上花更多的篇幅討論關於ASP.NET 3.5 Extensions(也就是.NET Framework 3.5 Service pack 1 )的部分,ASP.NET更多的新功能看來正要開始出現。