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问问题了,不过是否有人会回答,何时回答,都不太受控,不如搜答案来得方便。是个没办法的办法。