0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

windows和Linux程序员到底有没有区别?

马哥Linux运维 来源:未知 作者:李倩 2018-06-27 15:14 次阅读

如果一个程序员从来没有在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,CSDN,codeproject 这几个网站。但是从这些网站找到的代码,都是针对一个特定的小功能,为了演示如何实现这个小功能而写的代码,写代码的水平参差不齐,风格各异,都是一些demo性质的小东西,简单研究看看代码,就可以集成到自己的应用程序里面。

如何构建一个完整的应用程序,架构良好的应用程序,大学里面不会教你,一切都得靠自己摸索。在公司里面做项目获得提升,直到项目商用,后期维护修改代码时,回头看自己写的代码,才深刻体会到,自己当时写的代码架构是多么的不合理,维护修改是如此的困难。

如果在互联网上找不到自己需要的资料,就只能靠自己想一些实现的方法,虽然功能完成了,可能完成的时候还很有成就感,但是等那天你突然发现有人实现这个功能,并且用了一个巧妙的方法,这时你才突然恍悟,我当时为何就想不到这么实现呢?

在Windows下面开发,不太容易找到可以参考的类似你要完成功能的开源项目。一切都得靠自己。但是在Linux下面就不一样了,当你要开发一个新项目时,可以想想有没有什么开源项目也完成了类似的功能,可以下载到源代码来做一个参考,对其中的算法、架构设计等做一个详细的了解,然后自己开发的时候就会比较得心应手了,可以避免别人犯过的错误,少走很多弯路。

第二:要学习的知识量不一样

学习window下的开发,你需要学习很多的WindowsAPI。截止到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来说,你是不是可以省下很多时间来学习其他知识呢?

下面我就举个简单的例子:

CreateFile ReadFile OpenFile WriteFile DeleteFile ReadFileEx WriteFileEx CloseHandle

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

HANDLE WINAPI CreateFile( __inLPCTSTR lpFileName, __inDWORD dwDesiredAccess, __inDWORD dwShareMode, __inLPSECURITY_ATTRIBUTES lpSecurityAttributes, __inDWORD dwCreationDisposition, __inDWORD dwFlagsAndAttributes, __inHANDLE hTemplateFile );

这些参数的意义和类型,请问你需要花多少时间来掌握呢?

我们再看看Linux下面对文件操作的C的API有几个,

fopen fwrite fread fclose

共四个,我们再看看参数吧,

FILE *fopen(constchar*filename,constchar*mode );

两个参数,请问你需要花多少时间掌握呢?可能有的人会提出意见,说上面C的API也能在Windows下面运行啊。

没错,是能在Windows下面运行,但是你就掌握这跨平台的C的API够吗?难道所有在Windows下面开发的人都喜欢用C的API,不会用Windows本身的API吗?你不需要学习Windows下面的API吗?你的同事使用了CreateFile这个函数,你不需要搞懂它吗?你不需要看同事的代码吗?你不需要去维护别人写过的代码吗?

如果你还是这么想,那我还可以再举其他例子!就拿创建线程的例子吧,下面是2个在Windows下面创建线程的例子,第一个是创建安全工作线程,第二个是创建界面线程,还有一个函数我没有放下面,是创建不安全的工作线程的,具体的原理大家可以参考《win32多线程程序设计》,作者:(美)Jim Beveridge & Robert Wiener 著,侯捷 译这本书。

//线程安全的工作线程函数uintptr_t _beginthreadex( void*security, unsignedstack_size, unsigned( *start_address )(void* ), void*arglist, unsignedinitflag, unsigned*thrdaddr ); //界面线程函数HANDLE WINAPI CreateThread( __in LPSECURITY_ATTRIBUTES lpThreadAttributes, __in SIZE_T dwStackSize, __in LPTHREAD_START_ROUTINE lpStartAddress, __in LPVOID lpParameter, __in DWORD dwCreationFlags, __out LPDWORD lpThreadId );

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

下面我再列一下Linux下面创建线程的函数,

intpthread_create(pthread_t *restrict thread,constpthread_attr_t *restrict attr,void*(*start_routine)(void*), void*restrict arg);

看到了吧,你只需要知道这个就可以了。

C的API绝大部分都可以在Windows下面运行,在Windows下面学习开发, 你不但要懂得C的API,你还需要多花时间来学习Windows系统本身的API, 你可能要说,这么说应该是Windows下面学得多啊,我要说的是你掌握的API是很多,但是对于一个软件来说,最最重要的是系统架构、数据结构,架构设计得好,对后期的代码维护、功能修改都很关键,这也就是新手写的代码到最后连他自己本人都很难维护的原因,更别说让别人来维护了。

API相当于基本功,系统架构、数据结构是内功,基本功练得越快,我们就越有更多的时间来练习内功。练习内功,我们要多向高手学习。

在学习Windows下面开发应用的道路上,我们需要掌握更多的API,学习后, 让我们的路越走越窄,没有特别丰富的开源代码可以参考,水平提高的速度很慢。

可喜的是,现在很多开源的项目被很多人移植到了Windows下面,也有很多的开源项目是跨平台的,常用的是wxWidget界面库,用法类似MFC,还有qt这个界面库,也很强大,还有开源的3D引擎OGRE,架构非常好,很值得学习其架构模式。但是Linux下面的开源库要远远比Windows下面的开源库丰富得多,我们可以方便地从高手的代码里面学习数据结构,学习设计模式,学习编程技巧,这也就是Linux下面的程序员,可能会比Windows下面的程序员水平更高的原因,毕竟见多识广嘛,熟读唐诗三百首,不会作诗也会吟啊!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 互联网
    +关注

    关注

    54

    文章

    10905

    浏览量

    100726
  • Linux
    +关注

    关注

    87

    文章

    10988

    浏览量

    206724
  • WINDOWS
    +关注

    关注

    3

    文章

    3438

    浏览量

    87142

原文标题:10年 Windows 与 Linux 程序员的区别

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [转帖][转载]程序员的职业生涯到底有多长

    [转载]程序员的职业生涯到底有多长   周末的时候,闲来无事,看了些关于程序员吃得是青春饭,超过三四十岁就得转行等等话题,写了点东西发发,希望对大家有所帮助,其实
    发表于 09-17 19:02

    程序员有没有高富帅?程序猿如何能够升级为糕富帅?

    前几天在论坛里看到一个冷笑话,一位妈妈说自己儿子:“你什么都好,就不该是个程序员。” 可是,有些开发者朋友说,程序员中有相当一部分是生活得还不错的,甚至是高富帅。 所以想问问大家,程序员中究竟
    发表于 11-24 17:00

    程序员有没有高富帅?程序猿如何能够升级为糕富帅?

    前几天在论坛里看到一个冷笑话,一位妈妈说自己儿子:“你什么都好,就不该是个程序员。” 可是,有些开发者朋友说,程序员中有相当一部分是生活得还不错的,甚至是高富帅。 所以想问问大家,程序员中究竟
    发表于 11-24 17:00

    揭秘项目经理和程序员到底什么怨?

    揭秘项目经理和程序员到底什么怨?段子1:程序员和项目经理上了火车…… 一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现列车上几乎都坐满了,只有两个在一起的空位,这个空
    发表于 11-08 10:59

    Linux与Unix到底有什么不同

    Linux 与 Unix 到底有什么不同?
    发表于 05-08 14:36

    RISC-V到底有没有前途?

    讨论:RISC-V到底有没有前途?
    发表于 11-26 21:15

    ARM与单片机到底有区别

    初学者必知:ARM与单片机到底有区别?1、软件方面这应该是最大的区别了。引入了操作系统。为什么引入操作系统?有什么好处嘛?1)方便。主要体现在后期的开发,即在操作系统上直接开发应用程序
    发表于 07-16 06:54

    程序员为什么喜欢Linux

    为什么程序员喜欢Linux:1、免费程序员动手能力强,喜欢折腾,但是到处要钱,这就有点不开心了。Linux 系统完全免费。你无须为使用的操作系统或软件花费一分钱。除了免费获取软件产生的
    发表于 10-28 09:55

    Linux到底有什么优势

    嵌入式Linux的开发和研究是Linux领域研究的一个热点,目前已开发成功的嵌入式系统有一半以上都是LinuxLinux到底有什么优势,使
    发表于 11-04 08:44

    同样是10年,WindowsLinux程序员有什么不同

    如果一个程序员从来没有Linux,Unix下开发过程序,一直在Windows下面开发程序, 同
    的头像 发表于 06-28 07:37 2336次阅读

    “菜鸟”程序员和“大神”程序员到底有什么区别

    现在社会上有很多程序员,那您是否可想过程序员为什么会有不同的水平?你又是哪一类的程序员?“菜鸟”程序员和“大神”程序员差在哪里?
    的头像 发表于 05-14 08:48 3467次阅读

    程序员到底想要什么

    很多人应该都是很意外走上开发的这条道路,大家有没有想过,到底自己想要什么,作为一个程序员,你到底想要的是什么,在微博上面发过这个感慨。有人说:
    的头像 发表于 02-10 14:56 1195次阅读

    微辰金服|信用卡到底有没有年龄限制

      我们申请信用卡到底有没有年龄限制?今天微辰金服就为大家介绍一下信用卡到底有没有年龄限制。  银行要求信用卡的申请人是在18到60岁之间,而部分银行会把这个年龄宽度放松到65岁,除了年龄之外
    发表于 02-18 14:05 251次阅读

    4G网络到底有没有被降速

    近日,网上一则“运营商为了推广用户升级5G网络,强制降低4G网络速度”消息成为业界焦点,更是有不少用户表示自己的4G网速有所减慢,4G网络到底有没有被降速?造成这种现象的原因究竟是什么?
    的头像 发表于 09-02 10:32 3694次阅读

    比特币到底有没有价值?

    比特币到底有没有价值?这个问题至今困扰着很多人!你要说它没有价值,可眼看着比特币在近期曾飙升至5.8万美元新高,令全球资本趋之若鹜。可你要说它有价值,我们既看不见也摸不到,感觉更像是击鼓传花的空气币。
    的头像 发表于 03-02 09:41 4502次阅读