编程十年 (8):歪打正着C#

编程十年 (8):歪打正着C#

思路回来,接着混吧。2002年,大二。学校开设了面向对象和编译原理的课程。早在学习VB的时候,我就听说过面向对象的概念;而在大一的时候,也知道了编译器是一个神奇的玩意儿,能写出编译器才算牛逼。所以,我打算好好学一下这两门课。

面向对象使用Java语言授课,那个时候虽然Java出现已经有些年头了,但对于我们还是一个新鲜玩意儿。另外,那个时候的Java还处在一个频繁发展的时期,学校课程安排的是Java 1.1,但实际上课的时候Java已经发展到了1.4(应该叫Java2了吧),后来很快Java5、Java6就出来了。所以,学习起来还是比较痛苦的。那个时候虽然网络已经比较发达了,但因为上网只能去机房或者网吧,而在网吧学习太过另类,所以网络并没有在学习Java上帮太多忙。

另外,IDE也成为我无法对Java产生浓厚兴趣的原因之一。上课时老师推荐的开发环境是BlueJ,我至今也不明白为什么要给我们推荐这个环境,这玩意是以速度缓慢著称的,以当时学校机房的机器配置,打开BlueJ要花大概3到5分钟的时间。而那个时候Eclipse在校园里还不是很流行。

幸好学校机房装有Visual Studio,里面包含了一个Visual J++。其实我也不知道J++和Java有关,完全是凭猜测,在Visual J++里写了一段Java代码,发现还真能兼容。于是那会儿的作业基本上是在Visual J++里完成的。所以说到底,还是被绑在了微软的平台上。

我不喜欢Java还因为它的语法和程序组织结构。抛出的异常都要列在方法头里——在写方法头的时候我怎么知道要抛哪些异常?通常都是随心所欲地抛出异常;或者根据对错误情况的细化,会改变抛出异常的类型。所有这些都势必要修改方法头,这对快速构建都会产生不小的影响。关键字太过冗长——虽然extends、implements看上去非常直观,但不免有点Basic的影子,与C奉行的简约风格格格不入。每个文件只能放一个公共类——这意味着,不管我的试验性程序有多么短小,只要出现了多于一个的公共类,就必须建立多个源文件。如果没有一个顺手的IDE,编译起来会比较麻烦。这个特征使得学习Java的成本无形中增加了不少。

不过,Java语言有一点我非常之欣赏,就是去掉了C/C++语言中头文件的概念,方法不必事先声明,只要在整个程序的作用域中进行了定义,就可以直接调用。本来嘛,方法定义里已经完全包含了声明中的所有信息,何必单独写一份声明呢?

这里提到C++,是的,在这个时候我已经接触过一些C++的知识了,也看过了两本著名的C++图书——《The C++ Programming Language》和《Thinking in C++》。但也只在Turbo C++里写过少量练习程序,没做过什么实际的东西。

当然,以上种种只是我个人对Java的感受而已,并不代表这种语言不好。所以各位偏爱Java的看客敬请蛋定,就当是哥蛋疼好了。

正好同年开设了编译原理课程,在学习的过程中不免YY着自己能写一个编译器出来。对于Java的不喜爱,也加深了我YY的情结。于是,我开始幻想有一门新奇的面向对象语言。这门语言应该像C一样简约,包括关键字和符号(而且能用符号的地方绝不用关键字);像VB一样直观,面向对象中提到的属性、方法、事件必须样样俱全;像Java一样新潮,不用写方法声明。当然,关键字最好能与C/C++统一,不要像Java那样管using叫import,管namespace叫package……(又忍不住蛋疼了,淡定,淡定。)

当然,YY是YY,日子还得过。最终的结果是,编译原理上了几节课以后就再也不去了,学完了词法分析就放弃了。写程序依然是用C,但不停地在学C++;对Java只能是不冷不热,凑合着学够考试就完了;而遇到需要GUI的程序,还是得请出眼看就要被束之高阁的VB。

终于,我对没法用C/C++写出GUI程序忍无可忍了。起因是期末的课程设计,必须用面向对象语言实现——开明,并没有限制必须用Java;但是却明确说明不可以使用VB。作出的程序必须要有GUI界面——这无疑相当于给我这个排斥Java的人判了个死刑。虽然当时为了计算机图形学课程的作业,我用C写了一套窗口库(基于graphics.h的),可那只是基于DOS的,只能显示简单的窗体和控件,与当时Windows系统上流行的程序相去甚远。而且,因为对内存管理并不是特别熟,所以内存泄露问题也很严重,程序跑个几分钟就会死掉,只能勉强应付有一两个窗口的小程序。

无奈之下,只好求助于Visual C++。我在上大学期间,也看过一些Visual C++的书,但这类书往往都只介绍MFC,所以我一直也没搞清楚Visual C++和C++的关系,不过用VC可以开发GUI程序,这我倒是记住了。由于是VB出身,所以我理所当然地认为所有的GUI开发都应该是通过拖控件、处理事件的方式完成的;于是我兴致满满地打开Visual C++,摸索着创建了一个MFC程序,然后就傻眼了——没有窗体设计器啊;运行起来也和VB写的程序不一样,不是一个空空的、有着控件背景色的窗体,而是一个白白的窗口,还自带菜单和工具栏。我觉得不行,这么凭空摸索不是事儿啊,必须看书。

上大学有了图书馆,能免费借书看了,我基本上也不怎么买书了。而且以那时候的经济条件(虽然家里条件已经好起来了,但父母对我依然很苛刻),我的生活费勉强够活着就不错了,也只能去图书馆借书看。

谁曾想,不想用Java而想用VC应付课设的人那么多,图书馆的VC书竟然被借光了。当然,这也有数理学院的贡献,据说他们也要做课设,也要用C++。

北工大的图书馆挺高级的,在借阅区外面有一小块区域,有几台电脑,可以查询要借的书在哪个位置,也能预约和续借图书,可谓方便之极。但我在往来于查询中心和书架之间几个来回之后,我苦恼的放弃了。其实,电脑上的查询系统还是很智能的,能告诉你每本书的状态。但是,很多书明明没有标记成已借出,在书架上却找不到,这是为什么呢、为什么呢、什么呢、么呢、呢……

于是我干脆放弃查询了,锲而不舍地穿梭于计算机分类的各个书架中,口中念念有词:Visual C++、Visual C++……终于,功夫不负有心人,我找还真到了一本。就是看上去不是很专业——为了美观,竟然把C++的两个加号重叠起来了,印成了C#。算了,有总比没有强,就是这本了。

上学的时候看书很没有章法,通常就是拿起来乱翻,就算偶尔有顺序地看书,也是要跳过目录前言甚至第一章的。于是麻烦了,我直接从书上找到第一段示例代码,就开始往Visual C++里敲。敲着敲着我就纳闷儿了,C语言不是以main函数开始的么,怎么书上写的是Main?有可能是用Word写的书,被它的“自动句首大写”搞的吧,我假装安慰自己。

结果可想而知,程序根本没法运行。我把责任归于出版社,怎么能这么不负责呢,虽说代码只是对其他内容起到辅助的作用,但也要保证正确啊。于是这本书就被我丢开了,和那些没人看的教科书一起埋没在电脑的后面。

不过,这次注定我和.NET有缘。不久之后的一天,我在宿舍玩电脑的时候突然内急,大号。话说我在上大学之前就已经养成了每天至少一次大便的规律,这习性至今都让我沾沾自喜,尤其看到什么十男九Z、十女十Z之类的说法时。而且,我在便便的时候还有一个好习惯,就是看书。这一日,因为内急发作,慌不择路之下随手从电脑后面抄出一本书,拽上点卫生纸就杀奔了厕所。

第一波攻势来得急迫且猛烈,我无暇顾他,专心迎战。汹涌的先锋军冲过之后战场进入了平静期,我缓缓地吐了口气,给自己点上一支烟,然后开始研究手里这本书。所谓无巧不成书,有缘千里来相会——慌乱之下竟然把这本打算放弃的“烂书”拿来了。但是没办法,人在蹲坑身不由己,看吧。

因为实在懒得看代码,干脆看看前言吧——这玩意儿也只有上厕所的时候才会想看。这一看非同小可,前言的一开始讲了一个有趣的故事,我这才恍然大悟。原来Visual C#是微软新推出的一款语言,这只是整个.NET平台的冰山一角而已。然后就是长篇累牍的吹捧,说C#是如何如何先进,如何如何面向对象等等。我突然闪现过一个念头,这语言和我当初YY过的那种语言有点像。

于是我迫不及待地打扫战场冲回宿舍,电脑也不玩了,直接把自己扔到床上继续研究这本书。在快速浏览了一些讲语法的内容之后,我爱上了这门语言。

posted @ 2011-04-26 22:50 Anders Liu 阅读(8941) 评论(60) 编辑 收藏

 回复 引用 查看   
#1楼 2011-04-26 22:55 刺客之家      
沙发,顶一下,写的很好~
 回复 引用 查看   
#2楼 2011-04-26 23:02 toEverybody      
楼主被C#华丽的外表迷住了哈...其实C++/C才是王道
C#并没有象微软吹棒的那么好

 回复 引用 查看   
#3楼 2011-04-26 23:12 _Luc_      
"Java语言有一点我非常之欣赏,就是去掉了C/C++语言中头文件的概念,方法不必事先声明,只要在整个程序的作用域中进行了定义,就可以直接调用。本来嘛,方法定义里已经完全包含了声明中的所有信息,何必单独写一份声明呢?"

声明和实现相分离,算是某种程度的封装吧,也便于阅读理解
我倒是很怀念这种方式,先写接口,再写实现,可以从较高的层次来考虑代码

能在大二就把那本C++编程语言看下来,LZ很厉害

 回复 引用 查看   
#4楼[楼主] 2011-04-26 23:28 Anders Liu      
引用toEverybody:
楼主被C#华丽的外表迷住了哈...其实C++/C才是王道
C#并没有象微软吹棒的那么好

各有各的好吧。C#或者说整个.NET,还是很有内涵的,并不只是外表美丽。
最近在重看《The C++ Programming Language》,觉得C++确实很牛逼,原来并没有深刻体会。不过,真得有很高水平才能驾驭,一般人来不了。但偏偏是一般人太多了,所以感觉C++的光芒被抑制了。

 回复 引用 查看   
#5楼[楼主] 2011-04-26 23:33 Anders Liu      
引用_Luc_:
"Java语言有一点我非常之欣赏,就是去掉了C/C++语言中头文件的概念,方法不必事先声明,只要在整个程序的作用域中进行了定义,就可以直接调用。本来嘛,方法定义里已经完全包含了声明中的所有信息,何必单独写一份声明呢?"

声明和实现相分离,算是某种程度的封装吧,也便于阅读理解
我倒是很怀念这种方式,先写接口,再写实现,可以从较高的层次来考虑代码

能在大二就把那本C++编程语言看下来,LZ很厉害

最近重学C++,觉得你说的的确有理。
大二只是看过那本书,可能并不能说是“看下来”,现在重看倒是感受颇深。

 回复 引用 查看   
#6楼 2011-04-26 23:42 Repository      
于是我兴致满满地打开Visual C++,摸索着创建了一个MFC程序,然后就傻眼了——没有窗体设计器啊;

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

那个时候vc6.0早出来了吧,这么会没有窗体设计器,MS vc5.0也有吧

 回复 引用 查看   
#7楼[楼主] 2011-04-26 23:59 Anders Liu      
引用Repository:
于是我兴致满满地打开Visual C++,摸索着创建了一个MFC程序,然后就傻眼了——没有窗体设计器啊;

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

那个时候vc6.0早出来了吧,这么会没有窗体设计器,MS vc5.0也有吧

你说的是“对话框设计器”吧?那玩意只有在设计资源的时候能用。

 回复 引用 查看   
#8楼 2011-04-27 05:04 草头蕾      
@Anders Liu
同意楼主。C++就是把瑞士军刀,C#是双筷子,瑞士军刀很吊,而且什么都能做,但是我吃饭还是用筷子呵呵。

 回复 引用 查看   
#9楼 2011-04-27 08:09 Treenew Lyn      
@草头蕾
说的好。就算你是军人,你还是得用筷子吃饭。

c#的优雅,其实真的不错。

 回复 引用 查看   
#10楼 2011-04-27 09:00 YLH      
c/c++、java、c#各有特点,适用场合也不同。尺有所短寸有所长吧,呵呵!
 回复 引用 查看   
#11楼 2011-04-27 09:17 Assion Yang      
大学帮学java的学长做c#毕业设计的飘过
 回复 引用 查看   
#12楼 2011-04-27 09:18 廁所里的燈      
楼主太经典了,哈哈 支持下,转载到空间分享
 回复 引用 查看   
#13楼 2011-04-27 09:33 burellow      
哈哈,我看到后半部不禁地乐了:-)
 回复 引用 查看   
#14楼 2011-04-27 09:36 孙长宇      
太……太巧了,恭喜楼主。
 回复 引用 查看   
#15楼 2011-04-27 09:37 zchajax      
C/C++确实蛮牛,C#也很不错,不过我还是对java情有独钟,每个人喜欢的编程语言千差万别,掌握编程思想和技巧才是王道,感谢楼主分享自己的经历,学习了
 回复 引用 查看   
#16楼 2011-04-27 09:43 乐章      
"竟然把C++的两个加号重叠起来了,印成了C#" 太有才了
顶一下, 2002年,工作第2年,好像年底开始接触C#
 回复 引用 查看   
#18楼 2011-04-27 09:46 ahyanglf      
没基础的,是否可以直接上c#呢?
 回复 引用 查看   
#19楼 2011-04-27 10:11 春风化雨9527      
惊奇啊……我们的经历非常的相似。
 回复 引用 查看   
#20楼 2011-04-27 10:17 Tony Zhou      
引用乐章:"竟然把C++的两个加号重叠起来了,印成了C#" 太有才了


 回复 引用 查看   
#21楼 2011-04-27 10:40 秋色      
vb的一摊子人。几乎全部转c#了。
偶也是其中之一。
不过现在看起来mfc也不是曾经这么难了。

 回复 引用 查看   
#22楼 2011-04-27 10:56 醉风客      
我也是和你一样的感受 楼主
 回复 引用 查看   
#23楼 2011-04-27 11:05 深潭      
现在用C#开发,但是还是想从事C++开发。感觉C++开发的偏底层,有技术含量。
 回复 引用 查看   
#24楼 2011-04-27 11:30 小胆粗心      
你转行了啊,从猫扑儿转到程序员了。
 回复 引用 查看   
#25楼 2011-04-27 12:36 小城故事      
现在回想起来,没学计算机专业也许是好事
 回复 引用 查看   
#26楼 2011-04-27 12:51 镆铘      
"竟然把C++的两个加号重叠起来了,印成了C#"
确实有才。

 回复 引用 查看   
#27楼 2011-04-27 12:56 Crazy Ma      
C++开发桌面程序还是不错的
但是web的就不行了
而现在web程序是主流
所以未来c#才是王道

 回复 引用 查看   
#28楼 2011-04-27 13:55 take it and go      
其实我觉得C#蛮好用的,但是太局限于windows了
 回复 引用 查看   
#29楼 2011-04-27 14:11 陈梓瀚(vczh)      
@Crazy Ma
神马未来,现在就是了。话说C++也不是啥都没用,游戏服务器你还得做的……

 回复 引用 查看   
#30楼 2011-04-27 14:15 风云      
感受颇相似!
 回复 引用 查看   
#31楼 2011-04-27 14:17 pulihe      
c#用.net库很好用
朋友用java,用apache的common包,也很好用
我觉得语言好不好用,就看有没顺手的包给你用

 回复 引用 查看   
#32楼[楼主] 2011-04-27 14:29 Anders Liu      
引用pulihe:
c#用.net库很好用
朋友用java,用apache的common包,也很好用
我觉得语言好不好用,就看有没顺手的包给你用

还真不一定。。。比如perl,我看着就头疼;比如vb.net,.net甚至有专门给vb使用的库,但还是写着不爽。

 回复 引用 查看   
#33楼 2011-04-27 14:30 Jeffrey Zhao      
引用toEverybody:
楼主被C#华丽的外表迷住了哈...其实C++/C才是王道
C#并没有象微软吹棒的那么好

王道你妹,真王道的话您这个天天鼓吹C/C++的高手也不用混.NET社区了,哇哈哈哈……

 回复 引用 查看   
#34楼 2011-04-27 14:37 Jeffrey Zhao      
@Anders Liu
语言能力很能影响类库框架设计的好不好用的。

 回复 引用 查看   
#35楼 2011-04-27 14:38 netguid      
老赵激动啊
 回复 引用 查看   
#36楼 2011-04-27 14:44 wanghui      
“北工大的图书馆挺高级的”。让我想起我们那时候的工大,图书馆都是当自习室用的,一进去,每个座位上都放着东西,什么书呀、本呀、书包呀、还有扑克牌,都是占座位的。现在的图书馆是新盖的?
 回复 引用 查看   
#37楼 2011-04-27 14:57 刘亚      
哇塞~连载,编程十年了,我才两年学习中,老前辈哦~
 回复 引用 查看   
#38楼[楼主] 2011-04-27 15:24 Anders Liu      
引用刘亚:哇塞~连载,编程十年了,我才两年学习中,老前辈哦~

千万别这么说,园子里前辈太多了。。。我自娱自乐顺便娱乐大家而已……

 回复 引用 查看   
#39楼 2011-04-27 15:30 刘亚      
引用Anders Liu:
引用刘亚:哇塞~连载,编程十年了,我才两年学习中,老前辈哦~

千万别这么说,园子里前辈太多了。。。我自娱自乐顺便娱乐大家而已……

谦虚了~没有你那么多的历程,我直接学了C#,哈哈~

 回复 引用 查看   
#40楼 2011-04-27 15:40 聆听自然      
引用Jeffrey Zhao:
引用toEverybody:
楼主被C#华丽的外表迷住了哈...其实C++/C才是王道
C#并没有象微软吹棒的那么好

王道你妹,真王道的话您这个天天鼓吹C/C++的高手也不用混.NET社区了,哇哈哈哈……



这个。。。。。。

 回复 引用 查看   
#41楼 2011-04-27 15:51 taia      
引用Tony Zhou:
引用乐章:"竟然把C++的两个加号重叠起来了,印成了C#" 太有才了



哈哈,N年前(01年),高中的同学看我看C++的书后对我说 "听说出了一门新语言叫C#(读音C井)" 然后我回答道"是人家印书的时候把两个+号连在一起了吧"

 回复 引用 查看   
#42楼 2011-04-27 15:52 ubunoon      
引用Anders Liu:
引用toEverybody:
楼主被C#华丽的外表迷住了哈...其实C++/C才是王道
C#并没有象微软吹棒的那么好

各有各的好吧。C#或者说整个.NET,还是很有内涵的,并不只是外表美丽。
最近在重看《The C++ Programming Language》,觉得C++确实很牛逼,原来并没有深刻体会。不过,真得有很高水平才能驾驭,一般人来不了。但偏偏是一般人太多了,所以感觉C++的光芒被抑制了。


C++太复杂,导致应用开发太麻烦,对于桌面程序,VC的开发不如BCB,可惜BCB也不如意。

 回复 引用 查看   
#43楼 2011-04-27 16:05 梅桦      
我也是02年大二。当时是在图书馆看到了C#。很厚的一本,是对我C#的启蒙书。当时,名字空间是什么意思,我搞了两个月才明白。哈哈。
 回复 引用 查看   
#44楼 2011-04-27 16:07 梅桦      
引用聆听自然:
引用Jeffrey Zhao:
引用toEverybody:
楼主被C#华丽的外表迷住了哈...其实C++/C才是王道
C#并没有象微软吹棒的那么好

王道你妹,真王道的话您这个天天鼓吹C/C++的高手也不用混.NET社区了,哇哈哈哈……



这个。。。。。。

很反感有些人说这个王道,那个王道。哪有这么多的王道?!骂的好

 回复 引用 查看   
#45楼 2011-04-27 17:09 伊羽      
与楼主有相似经历……
我是高中时候我是想学C,结果摸到本了C#的书

 回复 引用 查看   
#46楼 2011-04-27 20:39 明媚阳光      
我一直对c++情有独钟,总觉得c#编写出来的程序运行太慢了
 回复 引用 查看   
#47楼 2011-04-27 21:22 Repository      
引用Anders Liu:
引用Repository:
于是我兴致满满地打开Visual C++,摸索着创建了一个MFC程序,然后就傻眼了——没有窗体设计器啊;

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

那个时候vc6.0早出来了吧,这么会没有窗体设计器,MS vc5.0也有吧

你说的是“对话框设计器”吧?那玩意只有在设计资源的时候能用。
呵呵,没错,它能节约很多时间!

 回复 引用 查看   
#48楼[楼主] 2011-04-27 23:42 Anders Liu      
引用ubunoon:
引用Anders Liu:
引用toEverybody:
楼主被C#华丽的外表迷住了哈...其实C++/C才是王道
C#并没有象微软吹棒的那么好

各有各的好吧。C#或者说整个.NET,还是很有内涵的,并不只是外表美丽。
最近在重看《The C++ Programming Language》,觉得C++确实很牛逼,原来并没有深刻体会。不过,真得有很高水平才能驾驭,一般人来不了。但偏偏是一般人太多了,所以感觉C++的光芒被抑制了。


C++太复杂,导致应用开发太麻烦,对于桌面程序,VC的开发不如BCB,可惜BCB也不如意。

是的,后来有朋友给我推荐过BCB,感觉还是不爽,他用的貌似是Delphi的VCL库,不如直接用Delphi来的痛快,但不幸的是当我接触到Delphi的时候,我已经看过了《Borland传奇》,知道Anders已经被微软挖走了。果不其然,不久后Borland就卖掉了Delphi……

 回复 引用 查看   
#49楼[楼主] 2011-04-27 23:43 Anders Liu      
引用明媚阳光:我一直对c++情有独钟,总觉得c#编写出来的程序运行太慢了

但是C++编译慢啊……

 回复 引用 查看   
#50楼 2011-04-28 11:42 Yao,Mane      
学了不少,这是我唯一真正爱过的语言,有时候觉得写代码真的很鸟,很爽!
 回复 引用 查看   
#51楼 2011-04-28 17:31 Areyan      
引用乐章:"竟然把C++的两个加号重叠起来了,印成了C#" 太有才了

:)

 回复 引用 查看   
#52楼 2011-04-28 22:11 wang_gary      
单口相声
 回复 引用 查看   
#53楼 2011-04-29 09:31 kingmoon      
哈哈果然学编程的都是为了满足虚荣心,我搞C#原因也和你差不多,不过我没搞过VB我是C/C++出身的,搞了3年C++,觉得自己算法数学不行,又不高嵌入式,希望搞桌面之类的程序,C/C++当然在这方面很欠缺了....唉和你一样的理由进入了C#领域...至于我不搞java是因为我太崇MS了,觉得java在win上绝对发挥不比C#好哈哈
 回复 引用 查看   
#54楼 2011-05-01 09:27 涵曦      
"于是我干脆放弃查询了,锲而不舍地穿梭于计算机分类的各个书架中,口中念念有词:Visual C++、Visual C++……终于,功夫不负有心人,我找还真到了一本。就是看上去不是很专业——为了美观,竟然把C++的两个加号重叠起来了,印成了C#。算了,有总比没有强,就是这本了。"
哈啊哈!C# , C++

 回复 引用 查看   
#55楼 2011-05-01 16:00 mrxliu      
果然有相同经历啊,我想继续摸C的,没想到被别人扔了本所谓的C#项目书过来,刚开始用C的方式无论如何都理解不了,为什么struct里还能有方法?为什么我见到的指针都没了?不都是C吗?为什么vs这个IDE比visual c++漂亮这么多,接着一连串问号就在我脑子里了,神马数据库?神马sql,那些是神马?晕了我半年年才晕出来。。
 回复 引用 查看   
#56楼 2011-05-05 14:56 向恺然      
还是非常喜欢C#的,.net这个平台很不错,不用整天和语法较劲,可以专心做点东西。
 回复 引用 查看   
#57楼 2011-05-05 16:52 banana.totolv      
good
 回复 引用 查看   
#58楼 2011-05-11 21:14 SirKevin      
支持一下~~~
 回复 引用 查看   
#59楼 2011-05-12 18:03 LkSh      
引用草头蕾:
@Anders Liu
同意楼主。C++就是把瑞士军刀,C#是双筷子,瑞士军刀很吊,而且什么都能做,但是我吃饭还是用筷子呵呵。

很棒的对比。

 回复 引用 查看   
#60楼 2011-07-31 18:12 思念死水微澜      
LZ很搞笑哦
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2029855 yVWGCp02noY=