Linux简称:L,Windows简称W
一、Linux和Windows在使用上的差别:L不容易上手,命令多不说,而且还有点麻烦。而且在使用完了以后还要卸载。这对于一般的普通用户来说,是一件很麻烦也很不情愿见到的事情。而对于W,就不用我多说了。其次,在使用上,L多数时候是使用文字界面,靠键盘输入命令来进行操作。虽然L也有IDE界面,可其在使用和外观上没有W做得精细、美观和便捷。而W则是使用鼠标,利用图形界面来完成大部分的操作。这对于大多数用户来说,是很关键的。
二、对于Linux来说,其外部支持的软件不是很多。在推出自己的软件时,经常会同时推出L和W版本。但却很多的公司却因为软件开发成本、市场销售等原因,往往只推出W版本。因此,现在市面上公开销售的L版本的软件寥寥无几。而W版本的则是漫天乱飞。
3、系统安全级别的差别:L的安全级别比起XP以前的系统都高。当然,和高级W服务器是不能比的。但L的安全级别和NT在一个级别上。有的时候在某些地方甚至要比NT的高。现在在很多的网络服务器或是数据服务器上,L使用得很多。当然,事物都没有完美的。L的高安全性也带来了L在使用上的复杂性。 这是L的普及没有W的普及快、广的原因之三。
如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大。我写这篇文章并不是想贬低windows下面开发的人,做windows开发的人看了可能会感觉不舒服,我并不是这个意思,我只是说说我自己的感受,我最早开始学习编程也是在windows下面的, 学的是VB,后来转到VC++,当时用的是VC6.0, 做windows下面的开发5年后转入linux下面做开发的,开始在linux下面做开发的时候, 也做过很多windows下面的项目,在linux下面做开发确实比我在windows下面做开发多学到了很多的东西,从开源代码里面吸取了丰富的营养,我不是说我是个高手, 只是说在linux下面学习,你会进步的更快。
不过我需要强调一下,“大部分情况下”,意思就是说“在同样勤奋,同样努力程度,同样基础知识,同样工作年限,同样是做应用程序的开发” 的情况下,如果说的不对,希望大家在下面发表看法。
可能大家会奇怪, 为何会出现这种情况呢 ?
听我慢慢道来!
第一:闭源与开源
windows下面的程序基本都是封闭源代码的,特别是10年前,在windows下可以说找不到可用的开源的软件,现在的情况比以前好多了, 很多linux下面开源的程序被移植到windows下面来,但是linux下面开源的程序增加的更多了。
以前在windows下面写应用程序, 需要用到MFC,WINSOCK,ODBC,FILE IO等, 可以找资料的地方主要是微软官方的文档MSDN,也只有MSDN才是最全的地方,下来是第三方网站 vckbase, 优快云, codeproject 这几个网站。都是针对一个特定的小功能,为了演示如何实现这个小功能而写的代码,都是一些demo性质的小东西,简单研究看看代码就可以集成到自己的应用程序里面。如何构建一个完整的应用程序, 架构良好的应用程序, 大学里面不会教你, 一切都得靠自己摸索,在公司里面做项目获得提升,直到项目商用,后期维护修改代码时, 回头看自己写的代码, 才深刻体会到,自己当时写的代码架构是多么的不合理,维护修改是如此的困难。如果在互联网上找不到自己需要的资料,就只能靠自己想一些实现的方法,虽然功能完成了, 可能完成的时候还很有成就感,但是等那天你突然发现有人实现这个功能,并且用了一个巧妙的方法, 这是你才突然恍悟, 我当时为何就想不到这么实现呢? 在windows下面开发, 不太容易找到可以参考的类似你要完成功能的开源项目。一切都得靠自己。但是在linux下面就不一样了, 当你要开发一个新项目时, 可以想想有没有什么开源项目也完成了类似的功能, 可以下载到源代码来做一个参考, 对其中的算法, 架构设计等做一个详细的了解,然后自己开发的时候就会比较得心应手了,可以避免别人犯过的错误,少走很多弯路。
第二:要学习的知识量不一样
学习window下的开发, 你需要学习很多的Windows API,截止到2009年9月,Windows总API数量为2258个, 并且Windows API 的参数多, 参数类型复杂,要记住这么多东西不是一件容易的事情,至少也和学习一门外语一样,大学英语四级要求掌握的总词汇量达到4500个单词。可想而知, 学会这么多的API用法,有多难了吧。那么学习linux下, 要掌握多少API呢 ? linux下的内核API, 全部算下来也才335,但是这些内核的API只有编写驱动的时候才能用到, 开发应用程序基本用不到内核的API,开发应用程序的API基本都是C的API,而 Linux所有的C的API个数是279个, 也就是说你只需要掌握不到300个的API, 就可以顺利的在linux下面开发应用程序了,相比学习windows下面的那一堆API来说, 你是不是可以省下很多时间来学习其他知识呢?
下面我就举个简单的例子:

上面这些API是windows下面对文件操作的API, 总共是8个,看看CreateFile的参数吧,

这些参数的意义和类型, 请问你需要花多少时间来掌握呢 ?
我们在看看linux下面对文件操作的C的API有几个,
fopen, fwrite, fread, fclose 共四个,我们在看看参数吧
FILE *fopen( const char *filename, const char *mode ); 两个参数, 请问你需要花多少时间掌握呢。
可能有的人会提出意见,说上面C的API也能在windows下面运行啊? 没错, windows下面运行,但是你就掌握这跨平台的C的API够吗? 难道所有在windows下面开发的人都喜欢用C的API, 不会用windows本身的API吗?你不需要学习windows下面的API吗? 你的同事使用了CreateFile这个函数, 你不需要搞懂他吗? 你不需要看同事的代码吗? 你不需要去维护别人写过的代码吗?
如果你还是这么想,那我还可以再举其他例子!就拿创建线程的例子吧,下面是2个在windows下面创建线程的例子, 第一个是创建安全工作线程, 第二个是创建界面线程,还有一个函数我没有放下面, 是创建不安全的工作线程的,具体的原理大家可以参考《win32多线程程序设计》,
//线程安全的工作线程函数

//界面线程函数

做windows下面的开发, 上面两个创建线程的函数我们都必须掌握。当然了, 你也可以只需要知道 _beginthreadex 来在windows下面通吃,但是当看到别人的代码使用CreateThread的时候, 你可不要不习惯,MFC里面很多人都用CreateThread。 掌握这么多的API累吧 ? 就和你上学的时候背单词一样累。
下面我在列一下linux下面创建线程的函数

看到了吧, 你只需要知道这个就可以了。
C的API 绝大部分都可以再windows下面运行,在windows下面学习开发, 你不但要懂得C的API, 你还需要多花时间来学习windows系统本身的API, 这么说应该是windows下面学得多啊, 我要说的是你掌握的API是很多, 但是对于一个软件来说, 最最重要的是系统架构,数据结构,架构设计的好, 对后期的代码维护,功能修改都很关键, 这也就是新手写的代码, 。
API相当于基本功, 系统架构, 数据结构是内功,基本功练的越快,我们就越有更多的时间来练习内功。练习内功,我们要多向高手学习。
在学习windows 下面开发应用的道路上, 我们需要掌握更多的API, 学习后, 让我们的路越走越窄, 没有特别丰富的开源代码可以参考, 水平提高的速度很慢。
可喜的是, 现在很多开源的项目被很多人移植到了linux下面, 也有很多的开源项目是跨平台的, 常用的是 wxWidget界面库, 用法类似MFC, 还有qt这个界面库, 也很强大,还有开源的3D引擎OGRE, 架构非常好,很值得学习其架构模式。但是linux下面的开源库要远远比windows下面的开源库丰富得多, 我们可以方便的从高手的代码里面学习数据结构,学习设计模式,学习编程技巧,这也就是linux下面的程序员, 可能会比windows下面的程序员水平更高的原因, 毕竟见多识广嘛, 熟读唐诗三百首,不会作诗也会吟啊!
1.太杂,实现同一个功能系统API都好几个,各种参差不齐的轮子又好几套,社区活跃不够,新手很难从迷宫里找到最优实践。反观现在IOS 前端,要么一个问题只给一个解,要么就有活跃的社区用脚投票,选出当前最优解。 2.闭源 闭源 闭源!!!重要的事说三遍,现在刚入门的小盆友也许还觉得开源挺多的,5年前抑或10年前的时候,能有几个优秀的开源软件??chrome当时开源,造成多大轰动??开源绝对不是为了抄袭代码,一是为了学习思想,二是为了评估自己水平,假如新手的能力从A到Z也许需要经历26层次,他通过阅读各层次的开源代码,就能不断跳级,并且他自始自终明白自己的目标是Z。而闭源环境下,很多新手还在A就以为自己已经吊得不行了,固步自封。 3.社区活跃度不够,这个和很多有关系,当时社交网络不行,无法诞生高度活跃的社区。又没有好的包管理器,好的第三方库只能靠口口相传,整个win环境感觉就是一个一个堡垒,甚至一个50人左右的公司都能弄个技术堡垒出来,里面的人看不懂外面的框架,外面的人也没机会去看里面的东东
对程序员来讲,开发思想、架构、代码就是财富,别老丢弃你的劳动成果,要学会保护你的劳动成果。
不要轻易换笔记本电脑,。这年代外语、学历、职称、驾驶证还是蛮重要的。
谈女朋友要看准,下手要稳准狠。这个对程序员很多重要哦 嘿嘿
工作不要更换得太过于频繁,要对身边的人好,要得到老板的信任、同事的认可及支持、珍惜良好的工作环境。 钱很重要,命也很重要,
注:正在学习C/C++ linux的小伙伴需要学习资料的可以私信“资料”,免费分享全套学习资料哦