2008年5月12日 星期一

如何挑一本好書,學習ASP.NET。個人觀點,非戰文。

如何挑一本好書,學習ASP.NET。個人觀點,非戰文。


不瞞您說,小弟也出過幾本書(電腦書),以我的身份來說這些事,其實很不客觀。

大家看看就好,不要開戰吵起來。......反正 Blog就是給大家各自表述的園地

以ASP.NET為例,什麼樣的電腦書適合「初學者」來閱讀呢?

-------------------------------------------------------------------------------------------------------------

1. 使用 Visual Studio來學習ASP.NET,不要用其他怪軟體

時代已經過去了,以前寫程式有很多開發工具能選擇。

現在的 Borland去哪裡了?微軟不光是OS、AP、現在就連 "開發工具"都一家獨大了。http://www.zdnet.com.tw/news/software/0,2000085678,20129203,00.htm

要學習 .NET,還在用 Express版,將來出社會,會有軟體公司用這種「精簡版」來開發程式嗎?

到時候重新學一遍,也是浪費時間。

去面試時,說自己只會用 Express版,哪個老闆敢用你?

更誇張的是:有人竟然用 DreamWeaver來學習 ASP.NET.......我真的只能用 Orz來形容。

DreamWeaver很強,是很棒的HTML網頁編輯器。但它用 User Control來方式推出自己的這種控制項與標籤。

初學者」用他來學習 ASP.NET,你將來怎麼辦?連正統語法都還沒學熟悉,就用第三方軟體的怪標籤,將來怎麼改?

的確,為了幫學校、學生省錢,很多電腦書採用這種免費下載的 Express版軟體,

但我個人認為:千省萬省,不要省工具(工欲善其事,必先利其器)。

微軟的官方下載網站 download.microsoft.com 可以下載試用版。就算每30 or 60天要重新安裝一次,「初學者」也要破釜沈舟搞定。

不然的話,連工具都選錯,將來怎麼辦?

不學第一手的知識,難道要學第二手的嗎?要學被修改、重整過的嗎?......形勢比人強,現在就是微軟包山包海的時代。

除非不學 .NET改走 Java路線。不然的話,還是以「正統資源」為主

2. 書本的範例放在哪裡?

很多書每一個功能都講了,最後幾章放幾個大的範例。

初學者」遇見這種書,下場大概只有一個。

  • COPY範例直接改,發現不會動......因為自己底子差(沒從頭開始讀書),也不知如何下手修改。
  • 然後,就有人開始罵書本寫的爛!!!以後只要是放購物車、聊天室當作書後範例的都是爛書!?

我要反駁一下:

如果我們改一改,把聊天室的範例,放在 Application/Session/Cookie這一章來解說,

根據我實際授課的經驗,學生不但學得好,而且很快就理解 Application/Session的差異與用法。

為什麼會這樣呢?

因為剛學完理論,立刻作一個有用的「習題」。學生記得牢,有感覺。

這範例(有用的「習題」)不是九九乘法表這種無趣的數學題,是真正網路上看的見的功能。....學生當然有興致。

把「大型範例」一股腦的全放在書本後面,「初學者」能力不夠,一遇見困難,根本不知道自己該回到哪一章去補強這些知識。

所以,與其提供一個超完美的聊天室(大型功能、鉅細靡遺),當成書本後面的「大型範例」。

倒不如把功能簡化,只求這個範例能「活用」目前的重點即可。

3. 什麼都講過一遍,但看完書之後,什麼功能都兜不起來

很多老師上課也是一樣,教程式總是要學生去解數學題,例如:找最大公因數、九九乘法表...等等。

每一種基礎語法都講了,結果真正寫程式時,愣住了。不知道要用什麼來寫?

等到我出社會,我才發現:基礎語法學"IF判別式"與"迴圈"兩個就夠用了。

學自己最需要的,學最實用的。與其「貪多嚼不爛」,不如學適合自己的。

那麼,初學者那裡知道自己需要什麼呢?......這問題很大,真的很大了。.....

我的建議是:多買書、多看,跟著書本進度來走。

一旦書本看的多,就會知道哪些「重點」是大家必提的共識!

4. 除了教科書之外,懶得買書,只想不勞而獲。

這兩年的電腦書市場,非常低迷不振。原因是學生不想買書,只想上網隨便看幾篇免費文章,抄抄改改就算了。

但因為「初學者」能力不夠,就算有大師分享範例,能力不夠一樣看不懂。

啥?您不信?......上網找找黃忠成老師的「 GridView 範例集」,我看看有幾個人能看懂八成以上。

(除非基礎很扎實,學得好,不然的話,高階的範例就算人家願意公開,我們都沒能力吸收起來)

也因為學生不想買書,所以書商大量推出「教科書」內容,減少店頭販售的電腦書(偏偏店頭賣的電腦書,走向都專業一點)。

這種「教科書」內容,大致如下:

  • 適合一學期教學(所以內容不可能太多)。
  • 講「淺」不談「深」。有些談、有些不談。(我不清楚出版社為何挑中這幾章的內容來談?)
  • 功能大部分都有講,但前後不易整合。

我看過一本ASP.NET教科書,裡面不談ADO.NET與GridView的,想想看,這種教科書能學到什麼?

但很奇怪喔,裡面卻談了AJAX、Master Page與File。(我也不清楚:初學ASP.NET,書裡面為何要放這幾章?為何某些內容又不提?.....我也不懂。似乎純粹只是為了一學期講完來考量的)

以我為例好了,我當年學ASP,花最多時間在ADO上面。 .NET剛出來,我也是花最多時間看ADO.NET的東西。

當年,市面上每一本中文書,我都買了(不論內容深淺)。原文書能找到電子檔的,我盡量找來看。

書本內容沒有好壞,只有「自己有沒有認真看完」!中文書,再怎麼說都是自己母語,閱讀速度最快,入門最簡單)

所以,聽到出版社的人員跟我反應:現在資訊科系學生不愛去店頭買書的。......我真的嚇一跳,連書都不買了,那「初學者」要怎麼從頭學起?

寫程式這條路,1. 絕對不可能只學一兩學期的,2. 更不可能一本書就能搞定(寫程式的道路上,沒有一本搞定的聖經)。

如果您心裡面有上面這兩個念頭,那死期將近。

初學者」要把程式學好,就是要不斷地看書、找資料、參考別人範例、參與討論.....

業界的工程師因為有案子的壓力,自然而然會做這些事,所以能力累積得很快。

初學者與學生沒有立即的壓力,如果手邊又沒書參考,那麼經驗的累積會非常~非常~慢~

如果自己又不看書,那麼成長幾乎是停滯不動的

=======================================================

越寫越擔心,很怕有人立刻開戰........幹剿起來

=======================================================

提了這些問題,那麼我的解法在那邊?

其實,2001年我就遇見這問題了。那時候我寫了一段時間的Web程式,被調去資策會的教育訓練中心當講師。

我心裡也毛毛的。尤其是前一位老師,聽班主任說:上第一節課就被學生抗議轟下台。

(因為500小時的就業輔導班,學費很貴,要價十幾萬。學生很認真的~)

我那時候,基本程式只談IF判別式與迴圈。SQL指令只談基本語法(因為有其他專任老師教過資料庫與SQL了)

第一、二個範例,就是 Master-Detail。

第三個範例,就是資料新增。

....然後是簡單的搜尋引擎、會員註冊與功能(Session & Cookie)、留言版、關連式資料庫、其他常見的網站功能。

那時的班主任也很怕,我下這種猛藥(前三個範例,前三節課的內容)。學生一旦學不會立刻又抗議了

沒想到情況出奇的好!因為這些範例,每個網站都有,都用的到。所以學生學習興致高。

我又刻意把範例的難度降低。日後慢慢加入新功能,最後補齊。學生學起來都不錯,回家作業都能完成。

最後,要畢業前的專題,竟然通通都選Web專案來作。可見他們對於Web Programming有興趣、也有信心能做好。

=======================================================

後來出書,也想依循這個範例與進度。

但是作不太到。

因為出版社還是希望保留「概論、介紹、基礎語法、基礎SQL」等等,這些章節不能少。如此一來,篇幅又佔去不少

要求一本書不能超過600頁。......加上學校老師又給一堆建議(有趣的是,不同的老師給的建議還相互抵觸).......

最後,一碗湯要上桌前,多少還是走味了

如同黃忠成老師所說的:「書的讀者層 也是一個讓計劃無法如期實行的原因,

教會讀者們如何運用一個技術是一回事,培養他們成為高級設計師又是另一回事,

Step by Step是一個入口,Deep Inside是一個出口,兩個門都得有人帶,

但是!!走進來的人 多過於 走到出口的人,一大半的人都是轉頭而去的

原文出處:http://www.dotblogs.com.tw/code6421/archive/2008/05/07/3855.aspx

實在是心有戚戚焉。

不論如何,初學者多買書、逼自己多學習、多看......是必要的。

這年代,想要前五年薪資比人家高,工作比人家好找。

資訊軟體科系是熱門的,絕對沒問題。No Pain, No Gain!

=======================================================

ASP.NET 2.0與3.5十分雷同。如果我粗淺的分類,ASP.NET 3.5 = ASP.NET 2.0 + AJAX + LINQ + 新的控制項

那麼許多 ASP.NET 2.0的書還是很有購買的價值。

初學者,要學的簡單、學得廣泛。

董大偉老師的書,厲害!(博碩出版,ASP.NET 2.0深度剖析範例集)

能力夠了,聖殿祭司的書可以補強(基峰出版,ASP.NET 2.0專家技術手冊)。

這兩本都很讚。(但順序如果相反,我不保證不會走火入魔,因為聖殿祭司的書,部份章節有難度)

黃忠成老師的書,也是很難得的鉅作。除了可以學到很多底層的細節之外,更可以考驗自己的能力到達什麼位階。

最後打一點廣告,我的書快出來了

=======================================================

覺得市面上的書都不好,怎麼辦?

=======================================================

當您覺得市面上的中文書都不好的時候,有些方向供您參考:

第一,直接看原文書。用英文寫書,很直接,會比中文更能直指核心。這一點,相信在大學看過原文書的人,都有感覺。

第二,直接看微軟MSDN的文件,有中文的(但是,翻譯得很不順,有些細節講得太細。但範例&程式碼都很值得學習)。

第三,上網討論,很多論壇的問與答,都是很難得的經驗。這些討論,很難有書本會講得這麼細節。(小朱在「旗標」有出版一本問題集,很不賴。http://www.microsoft.com/taiwan/msdn/books/asp.net/asp.net4.htm

有本事覺得市面上的中文書,都搔不到自己癢處。 我想您的基本能力應該是沒問題了。


但是,很可惜的,我最常看見的「初學者」,都是不買書,甚至書都沒看就亂問一通了。

沒有基本能力,就想上網找免費資源了。

看過武俠小說的人都知道,底子不好又四處亂練功,下場就是......(科科~~)

並不是我們藏私。而是BLOG、討論區或是網頁,要做到「圖文並茂」真的好難好難。

沒有基礎能力的話,我講到嘴破,甚至直接給程式碼,還是無法解惑

總之,打好自己的底子,培養基本能力,是每一個初學者的基本功。

沒有一種能力,是會憑空得來。是不需努力就會有的。

投資自己,是一輩子最有積效的事。

相關的文章:

http://www.allenkuo.com/EBook5/view.aspx?TreeNodeID=7&id=9

http://blog.blueshop.com.tw/topcat/archive/2007/12/06/53569.aspx

如何使用 .NET,從檔案中讀取 XML

如何使用 .NET,從檔案中讀取 XML


原始的 Books.xml文件如下:

01 xml version="1.0" ?>
02 -
04 - <bookstore>
05 - <book genre="autobiography">
06 <title>The Autobiography of Benjamin Franklintitle>
07 - <author>
08 <first-name>Benjaminfirst-name>
09 <last-name>Franklinlast-name>
10 author>
11 <price>8.99price>
12 book>

13 - <book genre="novel">
14 <title>The Confidence Mantitle>
15 - <author>
16 <first-name>Hermanfirst-name>
17 <last-name>Melvillelast-name>
18 author>
19 <price>11.99price>
20 book>

21 - <book genre="philosophy">
22 <title>The Gorgiastitle>
23 - <author>
24 <name>Platoname>
25 author>
26 <price>9.99price>
27 book>
28 bookstore>

資料來源: http://support.microsoft.com/kb/301225/zh-tw

完整的程式碼清單

Imports System.Xml

Module Module1

Sub Main()
Dim reader As XmlTextReader = New XmlTextReader("books.xml")

Do While (reader.Read())
Select Case reader.NodeType

Case XmlNodeType.Element '註解:Display beginning of element.
Console.Write("<" + reader.Name)
If reader.HasAttributes Then '註解:If attributes exist
While reader.MoveToNextAttribute()
'Display attribute name and value.
Console.Write(" {0}='{1}'", reader.Name, reader.Value)
End While
End If
Console.WriteLine(">")

Case XmlNodeType.Text '註解:Display the text in each element.
Console.WriteLine(reader.Value)

Case XmlNodeType.EndElement '註解:Display end of element.
Console.Write(" Console.WriteLine(">")
End Select
Loop
Console.ReadLine()

End Sub

End Module

另外一個範例,也是透過 XMLReader.Read()方法來作

http://msdn.microsoft.com/zh-tw/library/system.xml.xmltextreader.read(VS.80).aspx

下列範例讀取 XML 檔案 並顯示每一個節點。

Option Strict
Option Explicit

Imports System
Imports System.IO
Imports System.Xml

'Reads an XML document
Public Class Sample
Private Const filename As String = "items.xml"

Public Shared Sub Main()
Dim reader As XmlTextReader = Nothing

Try
' Load the reader with the data file and ignore all white space nodes.
reader = New XmlTextReader(filename)
reader.WhitespaceHandling = WhitespaceHandling.None

' Parse the file and display each of the nodes.
While reader.Read()
Select Case reader.NodeType
Case XmlNodeType.Element
Console.Write("<{0}>", reader.Name)

Case XmlNodeType.Text
Console.Write(reader.Value)

Case XmlNodeType.CDATA
Console.Write("", reader.Value)

Case XmlNodeType.ProcessingInstruction
Console.Write("", reader.Name, reader.Value)

Case XmlNodeType.Comment
Console.Write("", reader.Value)

Case XmlNodeType.XmlDeclaration
Console.Write("'1.0'?>")

Case XmlNodeType.Document

Case XmlNodeType.DocumentType
Console.Write(", reader.Name, reader.Value)

Case XmlNodeType.EntityReference
Console.Write(reader.Name)

Case XmlNodeType.EndElement
Console.Write("", reader.Name)
End Select
End While

Finally
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub
End Class

類別說明

XmlTextReader

讀取字元資料流。它是順向讀取器,含有傳回內容和節點型別中之資料的方法。文件類型定義 (DTD) 或結構描述不受支援。若 XML 文件含有 DTD,則 DTD 將會被剖析,但不會用來進行驗證或加入預設屬性。http://msdn.microsoft.com/zh-tw/library/system.xml.xmltextreader.read(VS.80).aspx

XmlNodeReader

透過 XML 文件物件模型 (DOM) API 提供 XmlReader,就像 XmlNode 樹狀結構。在 XmlNode 中取得,並傳回它在 DOM 樹狀結構中發現的任何節點,包括實體參照節點。它不支援 DTD 或結構描述驗證,但是它可以解析定義於 DTD 中的實體。http://msdn.microsoft.com/zh-tw/library/system.xml.xmlnodereader.read(VS.80).aspx


Windows 2008果然是好樣的!

Windows 2008果然是好樣的!


同事去參加微軟研討會,拿到試用版的 Windows 2008 / Vista 兩者的視窗畫面都雷同。

如我所預料,就跟當年的 Windows 2003 / XP一樣

當年的 Windows 2003很精簡、畫面跟XP一樣漂亮,但開關機更快。

不需要的服務,Win2003不會主動裝上去(就不會浪費資源,也不會有安全問題)

今天同事裝好這兩套新的OS,跟大家報告一下:

Windows VISTA安裝完成,一開機 860MB RAM.....挖勒!Orz

Windows 2008好樣的!一開機完成,有裝IIS,只有396MB RAM。果然棒!

測試機器:Intel 2.4G CPU + 2GB RAM。

比較有趣的是,Win2008一安裝好之後,就是SP1的版本了......哈哈!(原因請看這裡-- http://os.yesky.com/windowsvista/360/7811360.shtml

我剛好也在昨天幫我的 Vista(合法購買的版本喔!)裝上SP1,挖勒!光是SP1就五百多MB,天啊!

有傳說中,Vista+SP1以後效能大幅提昇的感覺嗎?........恩!我相信評比數據上會有提升,但使用感覺上就不要有太多期盼

關於相關文章,請參考這篇Windows Vista減少不必要的服務、最佳化(優化) (我猜啦,Win2008閱讀此文也有幫助)

電子時報的報導-- http://app.digitimes.com.tw/ShowNews.aspx?zCatId=821&zNotesDocId=0000051444_A4S2NK32NV5NNMX3TKX9C

天極網的報導-- http://os.yesky.com/win/213/7652713.shtml