C++ 程序員的 C# 轉型手冊
第一部分
本人之前曾經算是個C++高手,之前用過Fortran/Baisc/C,從C和C++居多,最后一句代碼寫在2003年的11月。主要編寫Server端的代碼,但和數據庫打交道很少,主要是業務模式、架構、底層這些內容;所學無外乎模板、虛函數、算法之類。
到2010年2月開始重新建起編碼,不過選擇了C#,開始編寫Web程序,而且必須與數據庫打交道,中間遇到不少困難,也遇到不少新技術和新環境,與同在路上的大家分享。
基本開發環境選擇
當初選擇了ASP.NET 3.5 + MVC2 + LINQ + SSE(Sql Server Express)+ Win7家庭高級版 + IE9,現在一年半下來,沒有太后悔的地方。
ASP.NET環境
ASP.NET 4.0是最新版本,建議從這里開始。這個沒什么好說的了,既然是新來的,就一定選新的技術,等學會了,也就變成成熟技術了;新學東西,就要學新東西,這是本人現在的立場,之前吃過虧,曾經抱著DOS和TurboC++不放,一直堅持到1999年……
MVC現在最新版本是MVC3。曾有文指出MVC很難學,而Code Behind相對容易理解。同意但同時應注意,這是針對首次學習語言就是ASP.NET/C#的人說的,如果本來學過C++,尤其曾經在C++中嘗試MVC思想的人,則似乎更容易理解ASP.NET MVC的做法,那點層次也繞不暈人,反而能以“物以稀為貴”增加競爭力。
MVC現在赫然列在ASP.NET首頁的醒目位置,日后必是MS平臺的主流。
ASP.NET官方主頁在這里,下載/討論都有;MVC3主要在這里,下載/教學/討論都有。
數據庫環境
對筆者而言,LINQ是個比較奇怪的東西,可以理解是“讓C#程序員不學習SQL就能訪問數據庫的方法”,非常推薦。個人在LINQ和EF(Entity Framework)中間做了很多猶豫,但最終結果是:除非做巨型的軟件,基本上LINQ就可以用,而且這東西幾乎沒有學習成本,說用就用。以后有需要,轉成EF也不浪費。
SSE是SS的免費版本,可以支撐10G空間,對一般的企業應用而言足夠了,推薦在SSE上面做開發/部署,直到遇到實質性障礙為止。
為什么不用MySql?選了LINQ,暫時只能選擇微軟系列的數據庫(或許已經出來LINQ to MySql了?沒注意),這個會造成一些困擾。但我因為那10G空間足夠用了,所以沒有看到MySQL與SSE的實際區別。
建議開始可以關注一下SSCE(SQL Server Compat Edition),是一個微軟新推出的免安裝自驅動的數據庫,最大空間支持2G。如果當初微軟就發布了SSCE,我會選擇SSCE而不是SSE(需要安裝),SSCE與SSE的基本性能相同,有一些限制但不大,而且隨時可以轉為SSE。現在一些Hosting的網站要么只提供收費的SS,要么提供SSE但也收取費用,而SSCE就不用擔心這些。
我的網站www.scrum.org.cn就是用的SSCE,此ISP提供的網站空間每月收費5美元,而Hosting的SSE也收費5美元,所以使用SSCE可節省掉這5美元,而幾乎沒有任何影響。
LINQ是隨著VS2010一起安裝的,不用單獨安裝,不知道官方網站在哪,亂搜就能找到一些教材;SSE在這里;SSCE在這里;兩者的區別在這里;安裝VS2010+SSE有可能出錯,請先看這里。
操作系統和瀏覽器環境
Win7家庭高級版聽起來很不專業,但到現在為止還沒有出現任何開發問題,到現在還沒有在本機部署過,不知道是否可以當作Server用,但至少開發起來沒有任何問題。
IE9肯定是不二選擇,調試環境比IE8方便。試過Chrome,發現MS肯定做了什么手腳,總之覺得沒有IE9方便。
IE9在這里,里邊有一些支持Html5/CSS3之類的內容,我還沒試過。
其他開發工具
Html
筆者第一次學用Html編寫Web,所以遇到很多困難,不過沒買書,而是在http://www.w3schools.com/(英文)http://www.w3school.com.cn/(中文)學的,左上角學習入口。
里邊有在線調試器,直接在里邊實驗,直到滿意為止,非常棒的網站。
中文網站有些內容不全,比如CSS3/Html5等,找不到就到英文網站看看。
JQuery和JQueryUI
JQuery是用來產生一些動畫效果的,比如鼠標滑過的時候顯示某些內容,點擊的時候讓某些東西顯示或不顯示,實現拖拽,等等。這一切發生在瀏覽器里邊,無需驚擾后臺。
JQuery是一種JavaScript工具包,而JQueryUI則是其處理界面部分的一個子集。后者能處理更復雜的事情,但也很難寫。筆者到現在沒好好寫過JavaScript(以后肯定免不了),如果不想深學,可以先學一點JQueryUI,一般情況下基本夠用。
JQueryUI在這里,很多Demo可以直接拷貝過來用。JQuery則在這里,本人只路過過,還沒有真正用過。
配置管理工具
一個人開發也要配置管理工具的,否則很容易出事。
開始我使用SVN Server + TortoiseSVN + 金山快盤,大致玩法如下:
先找一臺電腦做服務器,安裝上金山快盤,會產生一個20G的虛擬分區;把SVN Server安裝在這個分區上;然后再在客戶端機器上安裝Tortoise。每次提及變化,金山快盤都會將變化上傳到金山的服務器上,因此即使本地的服務器損毀,數據一樣在,很“云”。
在Windows上下載和安裝SVN Server及Tortoise的過程在這里,如果不用金山快盤,這些就夠了。
金山快盤在這里,剛開始只給2G空間,但稍微上傳點東西或每天登陸,就能獲得更多空間,現在本人稀里糊涂就有8G空間了,上限可達15G,完全夠用。金山是做安全出身的,把密碼設好點,基本不用擔心安全問題。這么大的空間,除了代碼,順便把很多項目文檔都一股腦扔到里邊了,才用了1.5G。建議企業也使用金山快盤做一個異地備份,安全放心。
后來發現自己不會玩Aphache,所以無法讓別人訪問我的服務器,而且本地服務器也沒有外網IP,在外面無法訪問,于是后來改成使用Hosting的免費服務器。
免費Hosting SVN服務器在這里:http://offers.assembla.com/free-subversion-hosting/,空間是1G,無用戶數限制,日后可以花錢升級,也可以不升級。
到此為止,基本上所需的環境就全部搭建起來了。
當然這一過程宜循序漸進,比如開始可以直接用金山快盤壓縮-拷貝-粘貼-上傳備份代碼。SVN可以等以后在弄,先把前面開發必備的東西搭起來,編寫個Hello World給自己打打氣再說。
發布工具
我自己的產品現在還沒有在外網發布過,但是卻發布過別人開發的產品,就是 www.Scrum.org.cn 上的MojoPortal(一款有點類似WordPress的建站工具,但是是用Asp.net開發的,和咱們自己開發的軟件是一個東西)。
發布工具優先選擇WebMatrix,比VS2010中自帶的好。它的工作原理,就是把某個目錄中的內容,發布到目的機器上,簡單得令人發指。
我在這里寫過一個簡單的文章(如果不用MojoPortal/SSCE什么的就無視之),記得第二次發布的時候,不要發布數據庫,因為目的機器上面的數據才是最新的。
如果數據庫結構變化了,只想更新結構不想更新數據……我也不知道怎么弄,還沒到這個地步,呵呵。
SSCE可以被發布到沒有安裝任何數據庫的目標機器上,很不錯。
第二部分
為了學習C#,買過書,上過網,問過問題,找過人,有的有用,有的幫助很大,有的沒什么用,下面記錄了我自己的過程;每個人會有所不同,請靈活掌握。
買什么書?
買過一本C#的書,看了沒有一周就擱下,幾乎再也沒有翻動過,后來就送人了。
C#和C++還是挺相似的,建議不要買書,而是常常逛逛網站,編編程序,時間長了就學會了。
看什么網站?
本人當年是看一本叫做《Nerd Dinner》的電子書,只有100多頁,但是卻從中同時學“會”了C#/MVC/ASP.NET/LINQ,當然所謂“會”,就是能手不著地地向前走,持續編寫代碼了。之后就沒有看過系統性的材料,而只徘徊于google/baidu。
電子書下載在這里http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf,在線版本在這里http://www.asp.net/mvc/tutorials/introducing-the-nerddinner-tutorial。
微軟網站上有很詳盡的ASP.NET MVC學習材料,比當年的MSDN強多了,網址在這里:http://www.asp.net/mvc,可惜好像沒有中文版本。不過考慮到無非是在屏幕上編寫代碼的問題,就當啞巴遇到聾子,干了這么多年C++了,也應該能學會的。
更多的學習資料,則在這里:http://www.asp.net/mvc/tutorials。
出了錯誤/問題到哪里找答案?
最開始我在前一家公司時,總是找一位高手問(他當年也是CSDN專家,不過后來工作忙不常寫東西了),后來發現每次問他,他總是當場到Google去搜,于是就很少去找他了。把問題拷貝到百度/Google里邊,幾乎立刻就找到無數答案。
推薦用VS2010英文版 + Google(英文Google:http://www.google.com/,如果被跳轉到中文Google,鏈接在中文Google的最左下角),因為很多很新的資料,都在國外先出現,順序經常是產品動向-產品發布-使用心得/問題問答-結集出書-翻譯成中文-有人看了-在百度上開始搜到相關內容。這個周期可能要2年的時間,所以對很新的技術而言,百度能搜到的內容比Google少很多。
后來發現很多問題的答案,都指向兩個網站:一個是前面提到的ASP.NET,另外一個是http://stackoverflow.com/,當然別在這里練習英文寫作,而是在其右上角的搜索框里邊,把幾個關鍵詞如“mvc controller redirect privous page”敲進去,幾百上千個問過的問題就出來了,挑幾個看上去靠譜的打開,多數回答都帶有代碼,而那個"Answer“是綠色的是被選為標準答案的(和CSDN很類似)。
如果還沒有找到答案,當然就可以來CSDN問問題了,不過是否有人會回答,何時回答,都不太受控,不如搜答案來得方便。是個沒辦法的辦法。