
C准确说是一门中级语言介于汇编和高级语言之间吧要求程序员了解计算机的内部数据存储。个人认为作为学生还是花功夫学C因为《设计模式》《数据结构》这些课程基本上还是C应付的比较好(我的切身体会学习 C认真阅读c primer而后配合 The ADAPTIVE Communication Environment (ACE)了解设计模式, 再看看《深入浅出STL》,就会发现其他语言都一样不变的是思想本身。在以下领域C有着根本性的优势低级系统程序设计、高级系统程序设计、嵌入式程序设计、数值科学计算、通用程序设计以及混合系统设计等等。让我们略微展开描述一下1. 低级系统程序设计C是迄今为止最好的低级程序设计语言。2. 高级系统程序设计包括操作系统核心、网络管理系统、编译系统、电子邮件系统、文字排版系统、图像和声音的编排系统、通讯系统、用户界面、数据库系统等等。3. 嵌入式系统包括照相机、汽车、火箭、电话交换机、汽车等等。4. 数值/科学计算包括仿真、实时数据获取和数据库访问等等。Bjarne的个人主页上有一页applications那儿列出了一些全部或大部分使用C编写的系统、应用程序和库。下面是一些例子1. Adobe Systems所有主要应用程序都使用C开发而成比如Photoshop ImageReady、Illustrator和Acrobat等。2. Maya知道“蜘蛛人”、“指环王”的电脑特技是使用什么软件做出来的吗没错就是Maya。3. Amazon.com使用C开发大型电子商务软件。4. Apple部分重要“零件”采用C编写而成。5. ATT美国最大的电讯技术提供商主要产品采用C开发。6. GoogleWeb搜索引擎采用C编写。7. IBMOS/400。8. Microsoft以下产品主要采用CVisual C编写Windows XPWindows NTNT4、2000Windows 9x95、98、MeMicrosoft OfficeWord、Excel、Access、PowerPoint、OutlookInternet Explorer包括Outlook ExpressVisual StudioVisual C、Visual Basic、Visual FoxPro.NET Framework类库采用C#编写但C#编译器自身则使用C编写而成。ExchangeSQL ServerFrontPageProject所有游戏......9. KDEK Desktop EnvironmentLinux。10. Symbian OS最流行的蜂窝电话OS之一。我通常使用C进行高端程序开发。“通常”一词没什么好说的有时只是出于公司文化或个人爱好方面的原因选用了别的语言而不是C或者相反。我所说的“高端”是指关键业务处理效率要求极高实时性要求高等等。我看见几乎所有严肃的工控系统软件和实时数据采集、处理和表现主要是图形软件都是采用C或C少部分采用Java编写而成的。据我的了解我原先所在的研究院几乎每一个研究所都在不同程度地使用C以及一些别的语言。想想看迄今为止现代Unix操作系统的各种变体上最常使用的是什么样的开发语言C/CC语言C语言是灵活但首先要看看使用者能不能发挥它的灵活性C语言够强大但要看看使用者有没有本事发挥它的强大功能。使用C语言和编译器编写一个快速的程序并不难不过编写一个强健而高效的大型程序就不是那么容易了。语言之间的区别绝非只是大括号和begin、end或Sub、End Sub之间的区别。选择了一种语言你就选择了一种思维方式一种程序设计思想。要想跳出语言的束缚首先要对语言有着深刻的认识和透彻的把握。世界上一些大师级的人物也常常毫不掩饰自己对某种语言我并没有专指C的偏爱。一些人对语言尚一知半解就大谈要跳出语言的束缚了 — 你无需跳出因为你根本不曾深入。纯粹的技术性学术性研究总能给人带来纯粹的快乐。C语言复杂至极可研究性极强但一般来说没有3~5年的持续学习、思考、使用是不可能真正掌握C的。我不是唯语言论或唯工具论者但我反对抹杀不同语言、不同开发工具之间的区别。抱持这种观点的人若非无知即是别有用心。这就好比杂牌笔记本电脑厂商最喜欢叫嚷“笔记本电脑已经进入同质时代”一样杂牌机怎么能和IBM相比选择C或选择Java要看你个人爱好和对将来的打算。虽然只是语言上的差别但由此决定的就业领域的确不一样。不管你走什么样的技术路线不管你用不用它做开发学习C总会带来长远的好处。一名熟悉C的开发人员假如他不是一个偏执狂的话再学习Java或C#都要容易得多。C不过是一门编程语言我们总是要用它来解决实际问题所以要学习开发工具比如Visual C了解操作系统比如API熟悉领域知识比如电力系统掌握其他软件技术比如数据库等等。编写真正的代码解决实际问题的能力才是衡量一名程序员是否有真水平的唯一标准。设计模式和统一建模语言设计模式Design Patterns和统一建模语言Unified Modeling LanguageUML是两个不同的概念。前者主要目标在于提供可重用的面向对象软件设计方案后者则是一种描绘软件蓝图的标准语言。当然了可以使用UML来描述设计模式的结构。UML所描述的模型可以映射成C、C#、Java等语言代码甚至可以映射到关系型数据库。映射过程可以是双向的一般都有相应的软件工具或插件支持。不同的语言特性有所差别这多少会影响设计模式在该语言中的实现方式、难易。比方说假如使用C语言来描述设计模式那么继承、封装和多态等特性就变成了需要研究的设计模式但在任何一门面向对象的语言中这都纯属多余。现在市面上还没有看到象样的以C#为手段讲述设计模式的书我没有看到但这并不打紧倘若有兴趣完全可以读一读《Design Patterns: Elements of Reusable Object-Oriented Software》中文版名《设计模式》机械工业出版社这本书尽管它主要以C和Smalltalk语言为讲解手段。设计模式本身无所谓好坏根据你要解决的目标问题选择适当的设计模式。系统架构在企业级软件开发中架构第一重要。架构有缺陷系统就存在硬伤。优秀的架构来自于优秀的设计。这一点毋庸置疑。任何成功的软件即使它没有明确地使用建模思想、架构方法但在骨子里、潜意识中大都具有良好的设计思想和架构。只有写过好多好多代码以后只有做过一些够份量的企业级项目之后才可能对软件架构形成清晰的认识。很难想像一个连几行像样的代码都没有写过的人对程序思想和架构却有着深刻的认识。这种人十有八九属于纸上谈兵之辈。我们时不时会看到这种情况软件的设计也不算太差但程序员要么不知道怎么写实现代码要么是代码写得缺乏效率或不够强健甚至有时连“架构师”自己对此都一筹莫展。 我们也常常听到一些声音不要太拘泥于语言技术细节了要从大处着眼要有大局观架构怎么怎么重要这些都是大实话。不过现实情况往往是很多程序员不是太拘泥于语言技术细节了而是对语言技术细节掌握得还远远不够。