编写跨windows/linux编程,浅谈WINDOWS与LINUX编程

看了一篇关于是该选择WINDOWS或者LINUX编程的贴子之后,突发感想,以自己曾经在WINDOWS与LINUX上都开发过程序的经历说一说自己的一些体验:

1.关于学习之路:据我自己观察,绝大多数LINUX程序员都是从WINDOWS程序员转过去的,所以就给大家一个错觉:似乎LINUX程序员水平比WINDOWS程序员高,LINUX程序员比WINDOWS程序员牛,其实这是有深层次原因的,因为LINUX程序员都会WINDOWS编程嘛,而且喜欢钻研的程序员才转向LINUX编程,这样一来,当然LINUX程序员平均水平就要比WINDOWS程序员高了啊,但另一方面,WINDOWS程序员中一样有很牛的人物。

2.关于编程规范:在WINDOWS编程中,相当注重变量命名啊之类的编程规范,我一直对那个什么匈牙利命名法不太感冒,所以这就是我为什么比较喜欢LINUX编程的原因之一(LINUX下的C语言程序普通都采用全小写字母加下划线连接方式命名变量,这一规范主要来自于LINUX内核源码习惯),虽然这种习惯不好,但个人比较懒,也比较喜欢自由,所以一直以来就没改掉这个不好的习惯,但幸运的是LINUX编程似乎不怎么重视这种规范,所以一直以来就得以让自己偷懒了,不知道是好或是不好。

3.关于应用范围:LINUX程序一般都应用在嵌入式领域与服务器领域,基本上都不怎么开发带有GUI的程序,本人对色彩的敏感度太弱,所以特别讨厌GUI程序开发,幸好LINUX给了我一条“活路”,这也算是我比较偏好于LINUX开发的原因之一了

4.关于C++与面向对象的思维:在LINUX下,C程序与C++程序差不多是五五开吧,而在WINDOWS上C程序已经快被边缘化了,所以有些WINDOWS程序员有了一种错觉:认为LINUX程序员不懂面向对象的思维,其实那只是少部分初级LINUX程序员容易犯的毛病,其实经验丰富的程序员非常懂得如何利用好C的特性实现面向对象,也懂得什么时候该利用C++语言的优势,从而将两种语言的优缺点结合在一起设计,我现在似乎养成了一种习惯,在需要有GUI的软件中,习惯于将逻辑层代码用标准跨平台的C++写成一个库,然后再用C接口来包装,这样就可以让GUI与逻辑层独立,并且这个逻辑层既支持C++的GUI库(诸如MFC,QT)又支持C语言的GUI库(诸如GTK+,MINIGUI)。

5.关于GUI:本人用过MFC,QT,GTK+,MINIGUI这几种库,分析过MINIGUI源码,无论是基于消息驱动机制(MFC,MINIGUI)或是基于事件的驱动机制(QT,GTK+,实质上事件驱动的本源还是与消息有关的,只是实现策略不一样而已),其本质都是差不多了,特别是当你分析了某种GUI源代码之后,你就会明白GUI是如何管理鼠标键盘,如何管理消息,如何实现屏幕显示的,到那时,你会觉得用哪种GUI都一样了,当然,每种GUI都有自己的优势与劣势,就个人喜好而言,本人还是喜欢用QT与MINIGUI这两种,会让我感觉用起来脉落清晰,写起代码来很顺

6.关于ATL,COM,DLL之类的东东:在LINUX上,就非常单一了,就是动态库,当你明白操作系统与编译器的原理之后,当你明白可执行文件结构,程序的执行流程,动态库的调用流程之后,就会明白本质上都差不多了,变换的仅仅只是表象而已,本人更喜欢LINUX上的那种“简单就是美”的理论,“机制而非策略”的设计理念正是我自身性格所追求的。

7.关于诸如网络IO模型之类的程序优化设计:其实程序的最终优化是需要体现在对操作系统,CPU的了解的基础上的,当你明白了内核是如何实现网络协议栈的,当你明白内核对于进程、线程的调度,当你明白系统调用或者API是怎么样一个过程,当你明白CPU的工作方式的时候,其它的表象一点儿都不重要了,重要的是你要设计出根据需求最适合于操作系统对于自身程序的调度的方式,那么你程序就是最优化的,任何一种模型无不是基于这种基础之上。。。。。。。

8.关于驱动与内核:本人以前也用过DDK,WINDOWS驱动编程的资源相当难找,我记得当时头都被整大了,绕来绕去头都晕掉了,主要是资料的问题,那一个月时间简直就是地狱般的折磨啊,所以至今我都佩服那些做WINDOWS驱动的人,个人还是喜欢LINUX下驱动的简洁性,结构清晰简单,函数被调用的轨迹了然于心,也许是个人对于内核的了解稍多一些的缘故吧,看不懂的时候再跟进内核一看,哦,原来是这么回事,啥都明白了。。。。。。

总之,虽然本人比较趋向于LINUX开发,但现在的工作是平台移植,驱动,LINUX/WINDOWS程序啥子都要做,混了这么多年,其实工作早已变成吃饭的一种手段了,做啥子都一样。。。。。。。

来源:http://topic.csdn.net/u/20080821/12/8703e212-6b27-41a2-8007-95c0dde2ab74.html

你可能感兴趣的:(编写跨windows/linux编程,浅谈WINDOWS与LINUX编程)