Windows 程序员如何才能转到 Linux 开发?
原文如下:我从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个,这就是我坚持我自己无错化程序设计方法的威力。
原文如下:我从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开发工程师,编码这个事情,举一反三。PS:Windows程序员,只要搞端MVC,自己也搭过这样子一个框架,能力绝对米有问题!从最开始的折腾编译环境(IDE)到回归程序员的核心工作 -- 编码。Linux、Windows下其实都是一个事儿。从Windows转Linux开发,也有不一样的地方,主要开发方向的不同1.Linux 应用开发 集中在嵌入式Linux中,多是C/C++开发语言,一个Makefile走天下2.Linux Server开发 开发语言就五花八门了,C++/Java/JS/PHP从前景上看,搞Server端开发会比较吃香。
别去写什么 OS X 或者 gnome/kde下面的 GUI,写桌面学不到 linux的精髓,直接写 server代码: 1. 实现简单的 HTTP服务器(支持 GET/POST/CGI),然后用浏览器访问,里面有个CGI留言板。2. 实现一个简版 REDIS,或者给 Redis加10条命令,或者把后面存储引擎换成 unqlite,再开源3. 给 apache实现一个 module,可以支持 lua来写服务。4. 给 nginx写一个 python模块,可以python来写服务。5. 用 C/C++/go写个代理翻墙软件,跑在你的海外租的 vps上。6. 实现一套简单的 TCP RPC框架,并再基础上做一个简单聊天。7. 阅读 Linux代码,应用层实现一个 Linux的定时器。----------------随便找了几个简单的,有意思的东西做一下。等你有了概念以后,可以尝试一些其他东西增加熟练度:1. 构建分布式架构,比如用脚本模拟实现一个分布式文件系统。2. 构建个简单的游戏服务器,比如模拟写个 RPG服务端,可以用 telnet玩。3. 实现个简单的的分布式发布订阅系统。随便接入,任意PUB/SUB,有冗余。4. 做一个 MySQL前端,可以分解任务,拆分到各个节点上执行,并将结果合并返回。找个好点的工作应该不难了。
菜码农一枚,仅针对C++强答一发,大牛们请轻喷。1、挑一些比较复杂的STL容器实现一遍,比如std::map / std::tuple 等等2、写一个异步io框架(包括socket),可能这个比较泛,领会精神就行。3、把Windows的GDI+和Linux的x11封装成统一的接口,用来绘图(封装好就行了,边写边做测试)如果能用上述接口写个简单的窗口那就最好了。是的你没有看错,每个像素都要你亲自来绘制)如果跨平台没弄过的话,两种方式,一种么函数内部 #ifdef 掉,另一种外面做个os的枚举,在全局范围#ifdef掉,然后里面写上typedef current_os_platform xxx / yyy, 然后所有的接口都泛型,分别对两个OS进行特化实现,当然编译速度可能比较感人……光速逃……
魏傅脑得: 程序员日常工作中所用到的知识技能,是无法顺利成长为软件架构师的.这就好比大楼的建筑设计师和垒砖工人的区别,他们的知识体系和思维方式,是截然不同的.程序员按照上级的要求实现具体的程序功能,很少需要知道为什么这样做,他们只需要考虑技术实现就可以了;而架构师的职责是进行系统分析和架构设计,并对整个项目进行把控,对项目组成员进行各类管理工作.
长垣县19837409553: 关于从IT程序员转行到其他行业 - ?
魏傅脑得: T的范围太广泛了,电脑的话,也要分厂家、区域分销、代理、店面、组机配件、维修等等.从总的方面来讲,现在都还挣钱.但因为硬件价格越来越透明,利润也越来越薄,所以在食物链低端的生存相对比较艰难.但如果你有渠道或者固定的企业资源的话,空间还是很大的.这个行业总体来说,人员基数比较大,竞争相对比较激烈,如果你处于食物链顶端的话,前途会非常好.因为我一直做的是渠道,主要维护客户关系,有提成,收入会不错.干的年份久点,渠道把握做的好的话,跳槽的目标可以是相关产品的公司分总.
长垣县19837409553: 游戏服务器程序员从win开发转到linux下需要掌握哪些? - ?
魏傅脑得: 针对你的4个问题.1.Vim2.学习使用gdb 3.别只限于写逻辑.看1下《unix网络编程》4.装1个llinux发行版.学习的最好办法就是使用 把自己曾写过的windows版本移植到linux上.这是对你的建议. 如果真心想做技术,学习并使用是唯1的办法.伪装是装不了1辈子的.
长垣县19837409553: 做程序员的转到哪一行比较好? - ?
魏傅脑得: 对于程序员来说,职业转换并没有想象的那么难,各行各业都需要与IT打交道,职业选择的途径还是很多的.除非是刚入行不久的新人,否则,从一个完全陌生领域开始即无必要,也不明智.转行的基本思路是在自己的知识技能、工作经验、客...
长垣县19837409553: 程序员怎样才能出国工作? ?
魏傅脑得: 国内程序员来说,通常有三种途径去出国工作. 1.进入跨国公司工作一年以上,然后内部转组到国外的部门.例如,进入微软中国工作一年后,申请转组到国外总部工作,...
长垣县19837409553: 程序员 如何转行 - ?
魏傅脑得: 你做几年了?其实想想,一年轻人,年轻气盛,如马奔腾,一直扒在电脑前何必呢,如果你有几年经验了,又有管理能力,可以试一下项目管理,要不就转行做软件销售,软件实施,做些业务,如果可以的话就去组织团队创业吧...
长垣县19837409553: 如何从开发WinXP应用程序快速转到WinCE平台 - ?
魏傅脑得: 先说开发工具,目前用得比较多的开发工具有EVC4(SP4)、VS2005、VS2008和Platform Builder. 其中Platform Builder主要是用来定制操作系统的,虽然也支持编写应用程序,但用得相对较少.记得没错的话,它还得先编译系统,才能新建应...
长垣县19837409553: 如何从一个程序员转变为产品经理? - ?
魏傅脑得: 那么,程序开发团队就相当于是司机.打车的可以不会开车,但是要到目的地,知道上面的东西,可以省钱,省时间.司机可以接不同的人,不同的路线,只要能走到目的地就行.”那么司机如何变为那个打车的人呢?知乎上一群专业人士展开...
长垣县19837409553: 怎样成为程序员? - ?
魏傅脑得: 如何才能成为一名真正的Web程序员 程序员可以分为很多种,像Unix程序员、Windows程序员,或是C++程序员、Delphi程序员,等等.今天我想谈的是Web程序员,一名真正的Web程序员应该懂得那些方面的知识,应该注意学习哪些东西. ...
长垣县19837409553: 如何成为一个程序员? - ?
魏傅脑得: 一个程序员应该具备的基础知识和概念: 1、计算机是有什么组成的,CPU是什么东西,其工作原理是什么. 2、机器语言和微指令集的概念. 3、程序的概念. 4、汇编语言是低级语言但不是机器语言. 5、高级语言主要有那些?(C,C++,...