《Unix编程艺术》Chapter14.
其实C还是非C并不重要。
重要的在于,你究竟要做什么?只有领悟了你究竟要做的目标,你要实现的东西才最重要。因为随后我们会为实现这个目标选择一个最合适的工具,这个工具是个集合,
包括但不限于各种开发语言,UI风格、还包括各种设计思想和编程模型、硬件和网络体系架构等等。
那么要如何选择工具集?
首先应该明确的了解备选工具集合中,每一项的特点。
以开发语言来说,我们应该了解,每个语言擅长和不擅长做什么,比如:
C/C++擅长于进行贴近硬件底层的设计,擅长于高性能,同时也有不错的移植性(很多嵌入平台上只有一个libc和gcc)。但是对于内存管理来说就比较糟糕,完全需要手动,即使C++也没有好多少。
C本身是个纯面向过程的编程模型,虽然可以通过结构体和函数指针模拟出面向对象的一些基础特征,但是代码要复杂不少。C++同时支持面向过程和面向对象,因为还含有面向过程元素的缘故,
对OO编程的支持受人诟病,我个人觉得C++的复杂度来源于其所支持的特性,而这些特性你可以有选择的使用,如果担心引入过度的复杂度,那舍弃某些特性即可(比如多继承,比如大量的运算
符重载等等),C++本身就被设计为在系统级编程上使用OO思维,而不是一个纯粹的面向高层应用开发的语言。相比来说,我个人认为,C/C++缺少能快速构建现代应用程序的标准库
(GUI元素、网络、线程之类)定义才是一个更严重的问题。
C#:擅长于进行Windows平台的GUI设计,提供了良好的面向OO的程序设计支持,同时提供了功能齐全强大的类库,是.Net架构下首选推荐的开发语言,具有自动内存管理能力,新版本可以直接
用于Web应用开发。但是C#开发的东西执行起来可能会慢一些,对资源的要求更大一些。移植性方面,似乎有了一些开源的C#实现?但其移植还明显是个问题。
我所了解的语言并不多,因此不在此继续列举,但是有一点很重要,那就是一旦确定了合适的工具集,而如果你对这组工具集还不够熟悉,那么我觉得你应该去学习他们,去了解和尝试他们,这
正是你放眼多彩世界的绝佳机会。我们中的不少人(包括我自己)在工作之后充满了惰性,当看到新鲜有趣的东西时不在有冲动,不愿意花时间去学习甚至只是体验下这些好玩有趣的东西,宁愿
抱着我们知道的那点东西墨守成规。甚至更多时候瞧不起使用先进语言和工具的人,觉得那些都是小孩子的玩具,自己手里的才是货真价实的干货。其实这有什么道理呢?语言之于开发人员,就像
螺丝刀之于电工,锄头之于农民一样,只是一件工具。我们可以钟情于某件工具,并因此去深究这件工具的来龙去脉(喜欢拖拉机?那么好奇拖拉机怎么造出来的,坏了能自己修理不?)但是不应
该对其产生排他的、敌视其他的、宗教迷恋般的狂热。
写这些除了《Unix编程艺术》Chapter14 读后感外,也是为了提醒自己注意几个问题:
1.应该多尝试不同的工具和语言,看看他们适合做什么? 以及更重要的,是什么促成了他们之间能力的分化?一门语言能达到某个目的,是因为它提供了什么样的基础元素和行为约束或者其他什么东西?
2.不要对现代的高级语言抱有敌视的念头,C/C++/ASM都是很不错的东西(还有CLI和GUI),但问题在于,我们要在什么环境下使用他们以及我们要用他们做什么?
3.选择工具集合前,应该先充分的明确我们想要达成的目标,如果对于目标都不明确,那么就不要随意的选择工具集合。
4.我只为有兴趣而去做,我不为了做而去做。
posted on 2012-03-01 10:32
无毁湖光 阅读(75)
评论(0) 编辑 收藏 引用