Windows程序员如何转向Linux开发应用?
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-29
这是一封发到邮箱里面的邮件,感觉有点代表性,这里做个统一回答,一家之言哈,欢迎拍砖. 原文如下: 我从csdn学习大本营得到您的信息.不好意思打搅您. 我现在用c 在linux下开发大型应用程序.我想请教是否值得深入学习linux kernel. 我没有特别多的时间.另外我有多年Windows下开发应用程序的经验. 我的回答: 呵呵,我感觉这还是一个学习方向的问题. Linux这几年,发展越来越好了,至少在很多应用服务器市场,Linux已经取代Windows成为第一选择,另外,在嵌入式环境,Linux也是逐渐成为主流.这导致很多原本是Windows的程序员,工作需要,逐渐走向Linux开发,这中间当然涉及到一个学习的问题.我本人也算其中一份子吧. 我本来一直做Windows开发,在这之前,在DOS下用过gcc开发,还翻译了djgpp的库函数手册,也算有点基础.不过,在07年公司安排我在Linux下正式开发商用服务器的时候,我心里还是很打鼓的.也面临着一个学习的问题. 看看市场上的书籍,很乱,我当时花了一整天在汉唐书城,仔细分析Linux开发相关的书籍,我发现分几种,是shell编程,这个我看了有半个小时,就觉得没用,这貌似给网管员用的,我做传输服务器用不到,连带着,正则表达式,我觉得对我用处也不大.真的要做复杂条件筛选,我的习惯是写个词法分析程序,自己来分析,也花不了多少时间,,我一直就没学正则表达式,呵呵. 然后是C和C 编程相关,我仔细看了,发现一说到开发,就讲到Linux kernel,这部分显然是操作系统的知识,我仔细想了想,发现自己的问题并没有得到解决.就算我知道了kernel怎么工作,里面有什么开发技巧,对我的工作并没有什么帮助. 我当时做的是分布式数据库的传输服务器部分,这部分讲究多线程,高效能,但还是局限在应用层,并没有多少涉及到kernel的东东.我觉得用处不大. 反而我觉得我有必要对socket编程重新补一补了.经过挑选,我给自己选了一本《UNIX网络编程》的第1卷网络通信篇,第2卷是进程间通讯,我觉得我的程序用多线程跑已经很好了,线程本身就是共享内存的,无需考虑太多异步通讯,,我的习惯,进程间通讯,一般直接使用socket,这个放之四海皆真理,,好处是我的进程可以跨机器随意部署,只要我提供IP地址,进程间就可以互相通信,协同工作.,我只买了第1卷,就是专门讲socket的,这是好书,我现在没事还要拿出来看一看. 另外,我又给自己挑了一本《Unix编程艺术》,这本也是好书,我以前就发现,Dos程序员有Dos程序员的习惯,Windows的有Windows的习惯,这些方言,习惯,教科书是没有的,找有经验的程序员问,而这本书恰好就是专门讲这些问题的.比如DOS时代,硬盘通常很小,用户分盘又很乱,我们要是想向磁盘存个临时文件,最好找C盘,连D盘都是很多计算机没有的.而Windows下系统提供了服务,可以通过api查询系统临时文件目录,就好多了,而Linux下呢,是约定俗成,大家都用/var来做临时目录,这就是风俗. 嗯,这本书我看了以后,遵守了一半,呵呵,也没全遵守,它强调程序都是过滤器,从信息流中过滤自己有用的信息,加以处理,但是,不准破坏信息流,并且强调信息流无缝流转到下家,这个我很同意,这也是我这几年逐渐领悟到的一个程序设计原则.不过,它强调搭积木我就不太同意了,Unix的程序员,有个坏习惯,对管道很滥用,这就造成了很多程序都是小程序,通过管道勾搭到一起,完成一个强大的功能,这个呢,见仁见智,在某些场合合用,但我的开发领域,我强调强大的系统分析能力,一体化的系统设计思考,强调从系统设计阶段就杜绝很多潜在的逻辑bug,简单说,我对系统各个模块之间的和谐性看得很重,因此,这条我就没有遵守. 嗯,还有就是它强调简洁开发,我呢,也只同意一半,把程序写简洁,每个函数,每个类,都很简单,减少bug,这个我是同意的,不过,简介到变量名函数名都净是缩写,人都看不懂,就太离谱了.呵呵,我的习惯就这样,别人的东西好,对我有用,我就用,我觉得有异议,并且认为自己的理由更站得住脚,我就坚持自己的.并且,一切从实践中看,计算机是最公平的,乱写程序,就算是大师也照挂,小心翼翼地写程序,即使是刚入行的小弟,也能写出很漂亮的程序.就这样,我借着这两本书慢慢看,然后,大多数习惯还是Windows的,到现在我开发,都是VC下编辑程序,然后写个makefile,ftp到虚拟机去编译执行,也走到今天了. 后来发现,我没有学习shell,我没有学习kernel,我没有学习很多教科书上规定学习的东东,我的程序居然也完成了,我们的工程在去年,9轮测试,只发现51个bug,属于C和C 这边的bug,只有7个,这就是我坚持我自己无错化程序设计方法的威力. 当然,这中间也学了一点很重要的东东,Windows和Linux,在锁、线程、socket访问这几个点上差别很大,毕竟是两种系统,库都不一样,我这里着重做了一些学习和开发,设计了一套跨平台工程库,然后就解决了问题. 至于多任务开发,这方面本来就是我的强项,我自己的内存池、线程池和任务池,再配合跨平台库,基本上就无缝转换了,呵呵,又有多大的问题? 后来还有个后话,某一天我自己买了块arm,装了嵌入式Linux操作系统,把我的程序放过去,就改了一点,把线程池300条线程预备限额改为30条,马上就可以运行了,顺利得出乎我的意料. ,根据我的经验,其实Windows程序员转Linux没多难的.把住我上面说的几点,坚持自己正确的方法,尊重对方的方言习惯,跨平台开发,其实很easy. 嗯,我的新书《0 Bug -- C/C 商用工程之道》,其实主要就是讲解我的这些理解的,里面的内容包括商用系统开发思维,无错化程序设计方法,跨平台工程库,内存池,锁论,线程池,任务池等,尤其是对于时间片的理解,对于多线程的并行程序开发,我分享了很多自己的实战经验,你的问题,在我的书里基本上都是现成的答案.这本书由电子工业出版社出版,预计11月份面世,等书出来,建议买本来看看.不贵的,我考虑到大家经济压力别太大,已经让出版社尽量压低成本,不要把书做得太贵. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: Linux ext3文件系统 rm恢复下一篇: mysqlsniffer用法
关于Windows程序员如何转向Linux开发应用?的所有评论