Java和.net對比分析

.Net和Java是國內市場佔有率最高的兩門技術,對於準備學習編程語言的初學者來講,.Net和Java是初學者首先考慮的兩門技術,所以不少人一遍遍的問「學.Net仍是學Java」,社區中也天天都有「.Net控」在唱衰Java,也有「Java控」在唱衰.Net,一時間硝煙四起,讓初學者更加迷惑。html

    作爲一個.Net、Java、Delphi、Python、PHP等語言都進行過有必定複雜度的項目開發的人來講,我對任何一門語言都沒有宗教式狂熱崇拜,所以我也相對理性的對整個問題進行分析。前端

    從北京、廣州、上海等地區2010年的就業統計數據(因爲沒有找到更權威的數據,這些數據是我對主流招聘網站和技術網站的相關數據進行的並非太嚴謹的分析)來看,.Net和Java的職位數量比例爲2:3,從就業網站和主要技術社區數據來看,2010年.Net和Java的學習人員數量比例爲1:3。從數據上看,.Net的職位絕對數量比Java低一些,不過Java學習人員數量比.Net學習人員高出3倍,所以.Net職位的競爭激烈程度低於Java。java

 

    因爲.Net秉承了微軟技術的入門簡單的特色,通過短期的學習就能夠掌握拖拉控件的快速開發方式,不少人被.Net的快速開發方式所知足,認爲本身「學成了」,再也不深刻研究,所以人才市場上充斥着不少只會拖控件、而不懂.Net更深刻一步技術的.Net開發人員,好比不少ASP.Net的書上都是講ASP.Net服務端控件,不少所謂「精通ASP.Net」的人連什麼是Http、HTML、JavaScript、Dom等基本概念都稀裏糊塗,實際公司項目中不少功能點的實現不是簡單的拖一個ASP.Net服務端控件就能搞定的,所以看似學習.Net的人很是多,可是真正知足企業要求的人則比較少;而Java則入門門檻比較高,若是想要配置一個Hello World級別的學習環境就會涉及到不少技術,開發環境也要學習者自行配置,對於初學者來講可能花費一週時間都沒法配置一個最簡單的環境出來,Java的開發環境也不像.Net開發環境那麼可用性強,Java和.Net的區別就像Windows和Linux的區別,正由於Java學習門檻很是高,不少學習者被淘汰了下來,這樣可以撐過一個個難關學習下來的開發人員都是水平比較高的人員。所以.Net初級開發人員的工資平均是比Java初級開發人員的工資平均略低的。可是因爲.Net中高級人才很是缺少,所以掌握.Net深刻技術的開發人員在企業內部是很是吃香的,招聘人員常常發出這樣的感嘆「招合適的Java工程師能招來一堆,招合適的.Net工程師一個月都招不來幾個」。程序員

 

    .Net入門快,在.Net中微軟爲開發人員提供了一套最佳的技術架構搭配、集成的開發環境,用微軟的技術架構開發出的系統就能夠保證最好的效果,而不用像Java開發人員那樣去學不少開源框架再去學習搭建技術架構、開發環境,所以.Net學習週期比Java短,有了語言基礎後再進行集訓式的就業班學習,那麼.Net學習者學習3個月能夠進入就業,Java學習者須要5個月能夠進入就業。web

 

    微軟的本地化推廣工做作得很是好,所以學習.Net有大量的中文資料能夠參考,所以除非研究很高深的領域,不然中文資料基本能知足開發者的需求;而Java因爲走的是高端路線,所以除了初學者資料外,大部分Java資料都是英文的,學習Java須要參考不少英文資料。所以若是英文很是好的學員學習Java就會很輕鬆,而英文不是很好的學員學習.Net會更好。面試

 

    綜上,Java入門門檻比較高,須要有足夠的毅力和百折不撓的精神,只要你能堅持下來你就能夠將不少人在入門門檻上就將不少競爭者甩在身後。.Net入門門檻比較低,裝上VisualStudio就能夠立刻進行開發,不須要進行太多的配置、不須要學太多基礎知識,這樣能夠很輕鬆的掌握入門.Net學習,是有很成就感的事情,能讓你有興趣進一步學習,可是你不能止步於此,所以你會發現身邊也有無數的人也是「輕鬆入門」,你就須要繼續深刻學習,深刻學習一樣須要毅力和探索的精神,你要在這個階段上把絕大部分競爭者甩在身後,小吹一把:我教的有個學生面試回來講「在咱班裏比我感受我掌握的不是太好,可是和一塊兒參加面試的北大某鳥的學生比我簡直就是高手」,呵呵。在我講「.Net入門簡單」的時候,有學生問「.Net把問題都簡化了豈不是.Net程序員都不值錢了?」,個人回答是「微軟簡化的是重複性的東西和低級的東西,這樣咱們就能從這些低級的工做中脫身出來研究更深刻的東西,所以.Net把問題簡化了只是使得那些只沉迷於簡單的東西的人不值錢了,會使得研究深刻的人更值錢」,這就是「.Net入門容易,深刻一樣難」這句話的意思。有人會問「哪些知識屬於深刻的知識呢?」,好比你不只要會用ADO.Net,還要研究ADO.Net架構中的設計模式,再好比你不只要會拖拉ASP.Net控件,更要明白ASP.Net控件內部發生了什麼。這裏容許我作一個廣告,若是你想從學習一開始就儘快脫離控件型開發人員的行列,你能夠跟着視頻教程《傳智播客.Net視頻教程》學習,而後天天登錄博客園等高端.Net社區,你會發現你進步是很是快的。算法

 

可能由於我最近都是在講.Net的課程,對.Net的描述中有或多或少的偏向,可是拋去我的因素考慮,我沒有暗示Java好仍是.Net好,請根據本身的狀況進行選擇。並且.Net和Java並不像360和QQ那樣必須兩者選其一,並不像不少初學者認爲的那樣「學一門語言就靠這門語言吃一生」,工做中極可能這個項目用Java,那個項目用.Net,所以你能夠喜歡某個語言,可是不要抱着一門語言不放,更不用擔憂「Sun被Oracle收購了,Java是否是完了?」、「我學.Net,若是微軟沒落了我是否是就失業了」之類的問題,不一樣語言只是不一樣的工具,換了一個新的工具能夠很快的熟悉新的工具,大部份內容都是相通的,好比java中的web開發很熟悉了,轉而用ASP.Net也會發現大部分東西都是和JavaWeb同樣的,很快就能上手ASP.Net,難道你如今用的是諾基亞手機,你會懼怕諾基亞倒臺你就不會用手機了嗎?「Java完了、微軟死了」這類問題不是開發人員去關心的事情,而是華爾街那些金融大鱷去考慮的問題,我們只管用技術去賺錢養家就是了。shell

學了.Net能作什麼開發數據庫

 

.Net目前主要的開發方向是:Web開發、桌面系統開發、移動開發。編程

Web開發通俗的說就是開發網站,包括相似於大衆點評網等這樣的互聯網以及OA等內網系統,Web開發是目前.Net開發的主要方向,大部分招聘.Net的職位都是作Web開發,以我教的傳智播客.Net班爲例,2010年幾個就業班的學員90%以上找到的都是Web開發方向的職位。

 桌面系統通常指的是使用WinForm技術開發Windows軟件,好比以Windows軟件形式運行的倉庫管理系統、圖書管理系統等,也就是通常說的C/S開發(不嚴謹的說法),目前不少公司都有WinForm開發的產品,不過因爲大部分公司的產品都開始轉向基於Web的版本,WinForm版本都處於維護狀態,所以基本再也不招聘WinForm版本的新員工。

移動開發主要指的是手機開發。.Net手機開發目前主要是WindowsMobile的開發,目前中國大陸地區Windows Mobile開發的工做很是少。微軟在今年(2010年)推出了WindowsPhone7(簡稱WP7)手機操做系統,微軟在WP7手機操做系統的推出上繼續採用了微軟一向的「落後半步、後發制人」的戰略,微軟慣於後發制人,好比當年就曾經用IE乾死了曾經領先一時的Netscape瀏覽器,再好比.Net更是從先行者Java口中奪下了半壁江山。所以我我的很是看好WindowsPhone的前景,預計在2011年末WindowsPhone將會在移動市場上掀起狂瀾,對移動開發感興趣的朋友能夠提早關注一下WindowsPhone的開發。 

        微軟在技術的延續性上作的很是好,不管是Web開發仍是WinForm開發仍是移動開發,他們採用的技術都是相通、相近的。由於他們都是基於同一個.Net Framework進行開發的,調用的語法、類都是同樣的,學習的時候只要學習特有的小部份內容就能夠了,好比訪問數據庫都是ADO.Net、系統間通信都是WCF。對於想學習.Net抓緊找工做的同窗能夠先以Web開發方向爲主要學習方向,關於Web開發方向要學什麼東西、怎麼學,我將會在下一篇文章中介紹。

         移動開發市場將會愈來愈大,微軟如今推廣WindowsPhone的力量很是大,並且商業策略很是厲害,所以我預計在2011年末WindowsPhone將會在移動市場上掀起狂瀾,到時候WindowsPhone開發也將會帶來很是多的工做機會。

        若是對WindowsPhone開發感興趣,能夠在把Web開發掌握熟練後提早作知識儲備。由於WindowsPhone界面用Silverlight,能夠先學習Web下的Silverlight,這樣也不須要安裝額外的開發環境,掌握了Silverlight再學WindowsPhone開發就會輕鬆不少了。

        對於移動開發來說並非只有手機客戶端的開發,還會涉及到服務端的開發,因此ADO.Net、XML、WCF、ASP.Net等服務端編程技術一樣須要學習。WindowsPhone是移動設備操做系統,手機做爲一種移動終端,必須與服務器端結合才能發揮巨大的做用。WindowsPhone是爲移動互聯網時代量身打造的,移動互聯網時代的服務模式是「手機終端+互聯網絡+應用軟件」,也就是所謂的「雲終端+服務器」。好比開發一個查詢公交線路的手機軟件,WindowsPhone端只是一個交互和展現頁面,具體查詢、運算邏輯是放在服務器端的,手機端軟件向服務器發出查詢請求,服務端進行查詢、運算,而後將運算結果返回給手機端軟件,由手機端軟件進行顯示。除去手機單機遊戲、短信管理、播放器等徹底不須要服務端支持的應用以外,大部分手機應用都是須要服務端支持的,好比鄰訊、淘寶手機客戶端、金蝶隨手記、手機版金山詞霸、新浪手機微博等。WindowsPhone只是承載移動終端軟件的操做系統,而服務端技術用於開發互聯網絡應用,因此將來移動互聯網時代軟件的主流應用模式將是「手機客戶端+互聯網絡應用服務端」,這種模式要求作移動互聯網開發的程序員不但要掌握WindowsPhone這樣的手機終端軟件技術還要掌握開發互聯網絡應用的服務器端技術。

.Net應該學什麼怎麼學(一)

上篇《學了.Net作什麼開發》中我講到了目前.Net開發主要方向是Web開發,所以在本篇中我將主要講解作Web開發要學哪些東西,怎麼學,因爲內容比較多,我將分幾回發。下圖是我推薦的學習內容和學習順序(除了這裏列出的內容,要走向高手之路確定還有更多技術須要學習,我這裏只是對於初學者列出的主幹學習內容,並非所有):

    開發者口中的.Net全稱是.Net Framework,在中國大陸,通常將.Net讀做「道特耐特」(中文音標比英文音標更好讀,呵呵)或者「點耐特」。.Net是微軟推出的一門技術,它是一個技術平臺,基於這個平臺進行開發能夠簡化不少工做。關於到底什麼是.Net,不是一兩句話能說清楚的,並且也沒辦法讓初學者理解到底什麼是.Net,所以你只要記住.Net這個詞,隨着咱們越學越深刻,你就會理解.Net究竟是什麼東西了。

    基於.Net平臺上有不少語言,好比C#、VB.Net、IronPython、F#、Powershell等,F#、Powershell是知足特定用途的語言,IronPython、IronRuby等並無普遍應用,VB.Net是僅次於C#的第二大基於.Net的語言,不過按照微軟的戰略是把主要精力放到C#上,VB.Net只是微軟爲了將VB開發人員平滑的轉移到.Net平臺下的語言。所以對於語言來講你們學習C#便可。C#在中國大陸的叫法通常是「C sharp(C煞普)」,也有少數人讀成「C井」,我不推薦這種叫法。

    初學者可能會弄不清C#和.Net的關係,.Net是一個技術平臺,而C#是這個技術平臺上的一門語言,就像Windows是一個操做系統,而Word、QQ、FireFox則是在Windows上運行的一個程序。初學者沒必要糾結於這個概念,不是很明白也不要緊。

    .Net的開發工具是VisualStudio,VisualStudio如今有VisualStudio200五、VisualStudio200八、VisualStudio2010等版本,注意不要糾結於「到底裝VisualStudio2005仍是VisualStudio2008,據說有的公司還在用VisualStudio2005」、「究竟是用新版本的VisualStudio2010仍是用VisualStudio2008」這樣的問題,由於這些版本並無本質的不一樣,使用方法都相似,就像你會用WindowsXP,換了Windows7之後通過短暫的熟練會用Windows7了同樣。由於VisualStudio2010比較消耗資源,若是你的計算機配置較好能夠安裝VisualStudio2010,若是配置較差則推薦安裝VisualStudio2008。

     要學習Web開發必定要按照正確的順序進行學習,不少人被一些《21天精通***》這樣的垃圾書的影響,不學C#、不學.Net Framework、不學Dom,直接上來就學ASP.Net,拖兩個控件、配兩個屬性、雙擊控件寫一個事件響應方法,就開始自誇「精通ASP.Net」了,照着書控件拖來拖去,但是連C#、.Net、ASP.Net、HTML、JavaScript以前的關係是什麼都不清楚,鬧出了不少笑話。欲速則不達,速成的結果就是之後浪費更多的時間,回想這麼多年你走過的路,有多少次爲了走快點就跳着走,最後又浪費時間返工的事情,按照正確的順序才能更快、更好的掌握.Net。

    有的人可能認爲「我不想成爲高手,有一口飯吃就好了,會拖控件就好了唄」,千萬不要覺得會「不拖控件的開發」就是高手了,高手沒有那麼好當的。我沒有奢求學編程的人個個都是以「成爲世界頂尖級程序員」、「國內.Net開發者中的知名開發者」爲目標,這個也不現實,大部分人學編程只是看作軟件開發工資不低,想賺幾年錢娶媳婦生娃,這種想法並非多沒出息的想法,畢竟「老婆孩子熱炕頭」是最樸實的幸福,你不須要揹負「振興中國軟件產業」這種的重任,可是最起碼應該找到一份不錯的工做,工做幾年之後能有錢交得起房子首付(對於大部分人來說,可以交得起首付成爲房奴都是很奢侈的事情)、每個月供月供吧,若是隻會拖控件的話就不是能不能成爲高手的問題,而是能不能養家餬口的問題了。

     下面來詳細講解學習的各個步驟:

1、C#面向過程編程。

    學習C#語言分爲C#面向過程編程和C#面向對象基礎兩部分。聽到「C#面向過程編程」有人會問了「C#不是一門面向對象的語言嗎,哪兒來的面向過程編程?」,其實面向對象不是代替面向過程的,面向對象是面向過程的一個補充和發展,面向過程就是代碼逐行執行,面向過程就是if/else,面向過程就是for循環,面向過程就是變量、函數,C#中最基礎的也是if、for、變量、函數等這些東西,這些東西就是C#的面向過程部分。對於編程的初學者來講,最難的不是類、繼承、控件、ASP.Net、AJAX之類神乎其神的東西,而是「程序化的思惟方式」,也就是怎麼把一個問題的解決方式用計算機的思惟方式進行描述。

    我接到過不少想深刻學習.Net學生的諮詢,當我問到「你的.Net基礎怎麼樣」的時候,不少人都回答「學過C#、.Net、ASP.Net,感受基礎還行」,可是我給了他一個很簡單的題,好比「用for循環累加的方式計算1到100之間整數的和」、「提示用戶輸入兩個數字,而後程序打印兩個數字的和」,不少人都作不出來。

    對於初學者來講先不用管面向對象、ASP.Net之類的東西迷惑,先學習用最樸實的for、if來編寫程序,經過親手編寫練習題代碼來逐漸造成程序化的思惟方式,這個階段也不要使用「看起來很酷」的WinForm或者ASP.Net頁面來作,由於那樣就會涉及到這個階段不須要去了解的問題,先編寫最簡單的控制檯程序就能夠。推薦你們看我錄製的視頻教程《【傳智播客.Net視頻】第1季C#編程基礎》,這個教程針對C#零基礎的同窗進行講解,而且在課程中給出了很是多的練習,必定要本身親手把代碼熟練的寫出來,記住是親手寫出來,而不是照着個人代碼抄,更不能是看懂了個人代碼就覺得本身掌握了,要知道「看懂了」和「會寫了」之間差着十萬八千里呢。對於初學者來講一開始寫那些練習可能有點困難,先理解我寫的代碼,而後本身總結成「先***後***,再***,若是***則***」這樣的用語言描述的算法,而後照着算法描述本身寫代碼,發現有地方寫起來遇到問題的話再參考個人代碼,最後作到不用看個人代碼、不用看算法描述也能把代碼寫出來,這樣第一階段的任務就完成了。下面列出我視頻教程中的一些練習題,你們能夠自測看這個階段本身是否合格:

練習1:提示用戶輸入用戶名,而後再提示輸入密碼,若是用戶名是「admin」而且密碼是「888888」,則提示正確,不然提示錯誤,若是用戶名不是admin還提示用戶用戶名不存在。

練習2:提示用戶輸入年齡,若是大於等於18,則告知用戶能夠查看,若是小於10歲,則告知不容許查看,若是大於等於10歲,則提示用戶是否繼續查看(yes、no),若是輸入的是yes則提示用戶能夠查看,不然提示不能夠查看。(給出測試用例。)

練習3:從一個整數數組中取出最大的整數

練習4:計算一個整數數組的全部元素的和。

練習5:將一個字符串數組輸出爲|分割的形式,好比{「浮雲」,」神馬」,」穿梭」}數組輸出爲「浮雲|神馬|穿梭」。不要使用String.Join等.Net內置方法。

練習6:有一個整數數組,請聲明一個字符串數組,將整數數組中的每個元素的值轉換爲字符串保存到字符串數組中。

練習7:將一個字符串數組的元素的順序進行反轉。{"3","a","8","haha"} 轉換爲{"haha","8","a","3"}。提示:第i個和第length-i-1個進行交換。

 

學C#基礎的時候的參考書推薦以下兩本:

(1)《C#圖解教程》,這本書講的清晰易懂,不過部份內容安排順序不合理,你們按照我視頻中的順序進行學習就能夠。

(2)《C#入門經典》適合零基礎的大部頭,不過很是厚,採用的是老外的描述方式,中國人讀起來有點彆扭,並且中文版翻譯的不是太好。

.Net應該學什麼怎麼學(二)

接上篇《【我來解惑】.Net應該學什麼怎麼學(一)》

2、C#面向對象基礎

       初學者學面向對象的時候不必(也作不到)把面向對象學的很是透、很是深,由於若是想深入的理解面向對象,必需要有大量的編程經驗才能真正體會面向對象究竟是怎麼回事、有什麼好處。之前聽到過有人建議初學者學習設計模式,我認爲純屬誤人子弟,對於初學者來講沒有大量的編程經驗,根本看不懂設計模式在說什麼。這個階段只要弄明白怎麼聲明類、什麼是訪問級別(主要是public、private)、什麼是屬性、字段、方法、什麼是繼承、什麼是override就能夠。面向對象有三個特性:封裝、繼承、多態。對於初學者來講理解多態是很是困難的也是沒太大必要的,這個階段只要能掌握封裝和繼承就能夠。

 

3、簡單的WinForm編程

       WinForm是.Net中用來構建Windows窗體應用程序的技術,對於目前國內市場來說通常也就是用來桌面版管理系統等的技術。有人會問「咱們不是學B/S的ASP.Net開發嗎?爲何還要學C/S的WinForm?」,必定要注意我在這段的標題寫的是「簡單的」WinForm。和ASP.Net比較起來,學WinForm須要學習的前置知識很是少,能夠很是快的入手開發,而學習ASP.Net則須要先學習HTML、JavaScript、Dom等知識。這個階段的學習重點不是WinForm自己,而是經過WinForm在案例中理解類、對象、屬性、方法、事件、索引器等概念,咱們是「借殼學習」,所以不用對WinForm的深刻技術(好比控件美化、佈局、PInvoke、托盤編程、高級控件、ActiveX等)浪費時間去研究。初學者很難把握WinForm學習的度,仍是推薦你們參考看我錄製的視頻教程《【傳智播客.Net視頻】第3季WinForm基礎》。

4、經常使用.Net Framework類

       .Net Framework中的類是.Net中最豐富、最有價值的內容,.Net Framework中的類是和表現層無關的,也就是不管是在控制檯中、WinForm中仍是ASP.Net中均可以調用這些類,好比把一個字符串轉換爲整數都是使用Convert.ToInt32()這個方法,所以千萬不能由於你是在控制檯程序中寫這些類就認爲本身在「編寫DOS程序」。

       .Net Framework是很是龐大的,擁有上萬個類,不必把這幾萬個類掌握,在這個階段把經常使用的.Net Framework類掌握了,會對後續階段的學習很是有幫助。這些類包括:String類經常使用方法、StringBuilder類、IO類(FileStream、File、Path)、XML操做類、集合類(ArrayList、List<T>、Dictionary<K,V>)等。

 

5、SQL語句

       這個階段主要學習SQL語法,可以掌握常見的SQL語法。數據庫管理系統有MSSQLServer、Oracle、MySQL、DB二、Access等,這些不一樣的系統對於數據庫管理員來講使用方法各異,可是對於開發人員來講差很少,由於都是用的統一的操做語言「SQL」,經過SQL這門通用的語言,你能夠和不一樣的數據庫進行溝通,因此只要掌握了.Net開發最經常使用的MSSQLServer,之後根據工做的須要使用其餘的數據庫管理系統會很是簡單。

       如今企業招聘.Net開發人員的時候對於數據庫考查很是多,甚至不少公司的筆試題中有1/3都是關於SQL語句、存儲過程的,所以對於準備學習後找工做的同窗來講必須把這部份內容學好。

       這部份內容主要學習:MSSQLServer的簡單管理,Select、Insert、Update、Delete語句,學完了這些內容就能夠繼續學習後續的ADO.Net了。學有餘力的同窗能夠學習Join、Union、子查詢、存儲過程等高級的內容。

       這部份內容學習時你們能夠參考個人《程序員的SQL金典》這本書(我將近期發佈這本書的所有免費電子版)和《 【傳智播客.Net視頻】第4季SQL從入門到提升》。這套視頻教程。

6、ADO.Net

       ADO.Net是.Net中用來訪問數據庫的技術,經過ADO.Net咱們就能經過程序告訴數據庫「請把年齡大於20歲的人員返回給我」。在學習ADO.Net以前必定要把經常使用的SQL語句掌握了,千萬不能學了一句Select * from Persons就來學ADO.Net,不然可能會出現下面這個真實的故事中的笑話了:

       我之前碰到過一我的寫一個「查詢學號爲S001的學生的姓名」的功能,他這麼寫程序(示例性代碼,不嚴謹):

SqlCommand cmd = conn.CreateCommand();

cmd.CommandText = 「Select * from Persons」;

SqlDataReader reader = cmd.ExecuteReader();

while(reader.Read())

{

String no = (string)reader[ 「No」];

if(no==」 S001」)

{

       string name = (string)reader[ 「Name」];

    MessageBox.Show(name);

}

}

       看到這種寫法相信全部人都要崩潰了,由於好像歷來沒學過where語句同樣。所以必須在把經常使用的SQL語句掌握之後再來學ADO.Net。

       這階段的學習主要學習使用SqlConnection、SqlCommand(ExecuteNonQuery、ExecuteReader、ExecuteScalar)等類的使用、參數化查詢等,掌握DataSet方式使用離線數據集,可以本身從頭寫一個SqlHelper類出來便可。

       (注:這段我描述的是ADO.Net基於接口的編程,屬於深刻一點的知識,對於初學者來講若是看不懂也不要緊,不用糾結於此)SqlConnection、SqlCommand等類是ADO.Net中用來鏈接MSSQLServer的類,鏈接Oracle等數據庫則使用OracleConnection、OracleCommand等類,雖然看似不一樣的類,可是因爲ADO.Net經過IDbConnection、IDbCommand等接口統一了類的方法,因此OracleConnection、OracleCommand等類的用法和SqlConnection、SqlCommand基本同樣,並且若是經過DbProviderFactories進行基於接口的ADO.Net編程,那麼編程的時候就是使用IDbConnection、IDbCommand接口,幾乎不用管SqlConnection、OracleConnection等這些不一樣的類。學有餘力的同窗能夠深刻研究一下ADO.Net的接口編程,會對你理解設計模式有很大的幫助。

 .Net應該學什麼怎麼學(三)

接上篇【我來解惑】.Net應該學什麼怎麼學(二)

7、HTML、JavaScript、Dom

       HTML是對網頁長什麼樣子的一個描述,也就是「這裏顯示一個超連接、那裏顯示一個按鈕」都是經過HTML來進行描述的。HTML作出來的頁面是靜態、不變化,若是要實現「點擊【計算】按鈕的時候讓表格放大顯示」這樣的動態效果,則要經過程序操做Dom,通常使用JavaScript這種腳本語言來操做Dom。

 

       若是不想成爲只會拖控件的開發人員的話,須要在學習ASP.Net以前把HTML、JavaScript、Dom這些好好學習。提到這一點有同窗可能會提出異議「不是這樣的呀,ASP.Net已經封裝的很好了,拖幾個控件上來就能夠了,ASP.Net都幫咱們生成HTML了,也不用學JavaScript,動態效果寫C#代碼就能夠了」。

       ASP.Net中這種拖ASP.Net控件的開發技術就叫作WebForm,微軟的WebForm封裝是很是偉大的技術,可以將複雜的Web開發簡化到能夠像開發WinForm程序同樣點擊,不得不佩服微軟技術的強悍。使用WebForm咱們就能夠進行傻瓜化的開發,要是天天的工做、作每一個項目的時候都能一直這樣「傻瓜」下去也是很美好的,可是很不幸有一些場合中是不能使用這種傻瓜化的開發方式的,舉幾個例子:

 

例子1:在網站的註冊頁面中讓用戶所在的省、市,提供兩個下拉列表框(DropDownList),一個爲省的列表框,一個爲市的列表框,當用戶選擇不一樣的省的時候,市列表框中就列出這個省下的全部市供用戶選擇。

對於這樣一個功能點,若是隻會拖控件的人極可能會這麼寫(假設省列表框id爲ddlProvince,市列表框id爲ddlCity),在Page_Load中加載省列表到ddlProvince,而後在ddlProvince的SelectedIndexChanged事件中響應ddlProvince的選擇變化,當ddlProvince選擇變化後根據選中項來填充ddlCity。用這種方法實現最大的缺點就是頁面會頻繁的刷新,每次選擇省之後頁面都會唰一下的刷新一次,這在網速比較慢或者服務器壓力比較大的時候是很慢的,並且用戶體驗不好。這種狀況用JavaScript操做Dom的方法來操做纔會比較好。

 

例子2:ASP.Net WebForm中可使用UpdatePanel控件很輕鬆的實現AJAX效果,不用懂JavaScript、Dom、Json,把控件用UpdatePanel包裹起來AJAX效果就出來了。可是用UpdatePanel實現AJAX只能在對性能要求不高的場合使用,若是要開發互聯網應用等對性能要求很是高的場合,UpdatePanel控件是無法使用的。這時候就須要手寫實現AJAX,而手寫AJAX則須要對JavaScript、Dom很是熟悉。

 

       即便所有使用ASP.Net WebForm控件實現,也是須要對HTML熟悉才能夠的,好比不可能項目中使用ListView控件默認生成的代碼,都須要手動調整ListView的模板,而調整模板就須要手寫HTML,不是什麼都「拖一拖」就行的。微軟如今還推出了一個WebForm的兄弟產品:ASP.Net MVC,ASP.Net MVC並非替代WebForm的,各有所長,可是由於ASP.Net MVC的優勢,之後確定會有愈來愈多的項目使用ASP.Net MVC。在ASP.Net MVC中就沒有WebForm中這麼傻瓜化了,不少地方須要手寫HTML代碼,這就對HTML等要求更高。

 

       上面講了HTML、JavaScript、Dom的重要性,下面來說一下具體要學哪些東西、怎麼學。須要提早說明:Web開發中一個很是麻煩的一點就是HTML、Dom在不一樣瀏覽器有少許的差別性,也就是一段代碼可能在IE中和FireFox中的效果不同,對於初學者來講暫時不須要管那些差別性,下降學習中沒必要要的難度,學習的時候以一個瀏覽器爲主就能夠了。

       剛接觸HTML的人可能感受比較難,可是一旦熟悉了這種標籤式的用法,HTML就變得很是簡單了,HTML中標籤比較多,標籤的可用屬性更多,作爲一個初學者不必把全部標籤、屬性都學習了,並且也不可能都掌握,把最經常使用的標籤以及它們的經常使用屬性掌握了便可,主要的標籤有:p、br、div、font、a、input、img、li、table、select、textarea、span。學習HTML的時候必定要堅持手寫HTML,千萬不要用VisualStudio、Dreamweaver等中的可視化的拖放方式來編寫HTML頁面,若是隻會在設計器可視化拖出HTML頁面的話,後面的學習會困難重重。HTML學習的一個目標就是可以徹底手寫一個不少網站都有的那種靜態註冊頁面出來。

       HTML中還有一個知識點:CSS,CSS是用來對頁面進行美化的描述語言,經過CSS咱們可以將按鈕設置爲紅色或者給一個圖片加上金色邊框。CSS中有很是多的樣式名,不須要掌握這麼多樣式名,學習的時候只要過一遍,大概知道每一個樣式名是作什麼的就能夠;也不須要學習怎麼將頁面作的看好,不須要研究那些好看的CSS效果究竟是什麼作出來的,由於那些工做是美工作的事情,即便是沒有美工的小公司開發人員只要學會怎麼「偷」別的網站作好的特效就能夠了。初學者只要掌握幾種CSS選擇器和Div+CSS佈局就能夠。

       和ASP.Net後臺用C#寫代碼不同,對於Web前臺頁面的動態效果通常使用JavaScript(不用學已經在Web前端中被淘汰的VBScript)來編寫,所以須要首先掌握JavaScript語言,JavaScript和C#的語法同樣都是C語言發展過來,不少語法都和C#差很少,所以不用再從頭學JavaScript語法,只要學習JavaScript和C#相比特有的語法就能夠。JavaScript語言也有不少能夠很深刻研究的東西,好比閉包、面向對象的實現等,可是除非作Web遊戲開發、開發JavaScript庫等對JavaScript要求很是高的領域,若是是開發互聯網站、業務系統等(這佔到公司項目中的大部分)對JavaScript並無過高的要求,只要熟悉一下JavaScript的語法就能夠,而後在後面的Dom中經過練習逐步熟悉JavaScript。對於初學者來講JavaScript到底學到什麼程度是夠用了是很難界定了,你們能夠參考《【傳智播客.Net視頻】第7季JavaScript》這套視頻教程,而後學Dom的時候參考《【傳智播客.Net視頻】第8季Dom》進一步練習就能夠。

       不少初學者剛接觸Dom的時候老是想弄明白「到底什麼是Dom」,勸你們不必糾結於這些概念,只要知道它是幹什麼的就能夠,「經過JavaScript調用Dom中的屬性、方法就能夠動態的操做HTML頁面」、「getElementById就是Dom、btn1.value=’abc’就是dom、btn1.onclick=myclick就是dom」,經過練習你就會明白這一點就能夠了,我們不是編教科書的,不用搞那些無聊的概念定義。

       Dom的東西很是多,仍是那個原則,不用什麼都記住,主要掌握下面幾點:事件、動態設置事件、setInterval定時器、event對象、getElementById、動態建立Dom元素(createElement、innerHTML、innerText)。掌握這些東西仍是要經過大量的練習來掌握的,只要能把第8季Dom這套視頻中的練習熟練寫出來這幾個階段的目標就達到了。

       JQuery目前是最火的一個JavaScript的庫,千萬不要覺得是一個新的語言,聽到過不少「Jquery是JavaScript的終結者,Jquery取代了JavaScript」的說法,卻不知,Jquery只是個JavaScript的一個封裝庫,儘快Jquery語法看起來很是奇怪,可是Jquery確實是徹底符合JavaScript語法的一個封裝庫。Jquery只是對Dom操做的一個封裝,學以前須要Dom基礎,不然學起來會很暈。我不建議初學者學完了Dom之後當即學Jquery,仍是用Dom多寫一些程序之後再來學Jquery纔會掌握的又牢靠又快速,我講課的時候就在講完了Dom之後隔了8天的.Net高級技術纔講Jquery也是基於這個考慮。學習Jquery時的推薦看《【傳智播客.Net視頻】第9季JQuery》這套視頻,而後參考書能夠看《鋒利的JQuery》。

相關文章
相關標籤/搜索