罗马不是一天建成的,VC++的也不是凭空产生的——它一直标榜自己的从C发展而来的。VB好像是专门为了羞辱VC++而创建的。C#呢,是微软类C语言的新秀——其实也不新了。乱吧?貌似挺乱的,其实这里有章可循。

  纯粹的C++是从C发展而来的,是要用OO这个理念来度化广大C程序员,让他们离苦得乐的。纯粹的C++语言很单纯,很好,不像VC++那么面目可憎。但是,语言都离不开类库和开发环境,否则就不足够复杂,不足以处理复杂的大系统。我刚刚看了STL,内容太少。MFC才能满足日常所需——有人跟我提过QT,我没玩过,暂时也不想玩。但是MFC貌似太复杂了,是的,不是太困难,而是太复杂。它把太多东西暴露给开发者,还告诉开发者可选,这其实很操蛋。每个人都有选择综合症!!!这又契合了我的口头禅——没有复杂性,不足以解决问题;有了复杂性,我们的多数经历都被消耗在复杂性带来的副作用上。

  VB是据说这个地球上用的最多的语言,我不想去考证这一点。但是我能理解,因为它简单。并且它的子集被用来作为Office套件的粘合剂(VBA)。还是PowerShell出来之前,Windows许多内嵌脚本的官方语言(VBScript)。照我来说,VB最适合非应用软件开发人员啦。“不要问我从哪里来,我的故乡在远方”。用就行,别问那么多。它的简单照亮了VC++的笨拙和臃肿。

  C#是个好语言,也是我之前用得最多的语言。它也摒弃了C++的复杂性,舍弃了一堆一堆的宏定义。将所有的数据和操作都拿类包装起来,不说再说什么全局的。也不再分什么头文件和实现文件。它的设计理念是尽量简单、自然,易于理解和使用。把库建在大一统的.Net Framework上,使用Visual Studio这个微软独有的IDE,不让你多花一点力气在跟主题无关的事情上。它被垢鄙的地方主要是性能问题,当然这是VC++的主场。但我想说其实考虑了性能、并做了适当优化的C#程序并不差,适合大多数情形。让我YY一下,我觉得花同样的时间,C#的程序员的代码质量会稍微高些,因为打击他们自信心、分散他们注意力的东西太少了。

  与C相比,C++有了面向对象这个利器,使它在建模和代码复用等很多方面有了突飞猛进。但它保留了大量的宏定义,以及全局函数。甚至还有意打破封装,搞出了友元这种机制。从C++到VC++,不单是多了个IDE和MFC类库,它还搞出来一堆的基础类型。此外它修改甚至隐藏main函数,让人如坠雾中,实在可恶。

  但是,一好遮百丑。希望它宣称的性能能够让我们愿意承受这些苦痛,阿门!

VC++ 学习笔记(二):VC++与C、VB和C#的更多相关文章

  1. VC++ 学习笔记(序):神一样的语言

    总的来说,我觉得VC++是一门神一样的语言——它是公认最强大.最复杂的:它一切以效率为第一要务,却又不肯落伍,拼命兼容现在的新的语言设计特点.本来在别的语言很容与就避开的问题,在这里要用很高的技巧去设 ...

  2. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  3. VC学习笔记:对话框

    VC学习笔记:对话框 SkySeraph NOV.11st 2009 HQU Email-zgzhaobo@gmail.com  QQ-452728574 Latest Modified Date:O ...

  4. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  5. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  6. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  7. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  8. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  9. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  10. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

随机推荐

  1. 【6_100】Same Tree

    Same Tree Total Accepted: 97481 Total Submissions: 230752 Difficulty: Easy Given two binary trees, w ...

  2. 从原生APK反编译,拿到界面,用于mono for android

    从原生APK反编译,拿到界面,用于mono for android 1.用apktool反编译apk,得到xxx.apk.de 2.从xxx.apk.de\res\layout 3.复制所有xml到M ...

  3. 在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  4. Lintcode 175 Invert Binary Tree

    I did it in a recursive way. There is another iterative way to do it. I will come back at it later. ...

  5. 【Python自动化运维之路Day6】

    1.递归思考题,阶乘 使用递归方式(函数)计算: 1*2*3*4*5*6*7*8*9*10的值 def func(num): if num==1: return 1 return num*func(n ...

  6. 递归获取XML元素

    看到的一道题,用递归获取XML元素.... static void Main(string[] args) { string xmlContent = @"<FileSystem> ...

  7. Hbase split的三种方式和split的过程

    在Hbase中split是一个很重要的功能,Hbase是通过把数据分配到一定数量的region来达到负载均衡的.一个table会被分配到一个或多个region中,这些region会被分配到一个或者多个 ...

  8. 配置Hadoop开发环境(Eclipse)

    参考博文: http://blog.csdn.net/zythy/article/details/17397153 http://www.tuicool.com/articles/AjUZrq 注意事 ...

  9. DDD Example

    PART 1: http://www.infoq.com/presentations/model-to-work-evans PART 2: http://www.infoq.com/presenta ...

  10. 插件~使用ECharts动态在地图上标识点~动态添加和删除标识点

    之前写过一个Echarts的文章,没有基础的同学可以先看这<上一篇>,对于一个地图和说,我们在初始化之后,你可能被在地图上标识出一些点,当然这根据你的业务去标识,而如果每次更新数据都加载全 ...