加入收藏 | 设为首页 |

南阳天气-做十年 Windows 程序员 VS 做10年 Linux 程序员,究竟谁凶猛?

海外新闻 时间: 浏览:237 次

假如一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 相同是作业10年, 大部分状况下与在linux,unix下面开发10年的程序员水平会不同很大。我写这篇文章并不是想降低windows下面开发的人,做windows开发的人看了或许会感觉不舒服,我并不是这个意思,我仅仅说说我自己的感触,我最早开端学习编程也是在windows下面的, 学的是VB,后来转到VC++,其时用的是VC6南阳天气-做十年 Windows 程序员 VS 做10年 Linux 程序员,究竟谁凶猛?.0, 做windows下面的开发5年后转入linux下面做开南阳天气-做十年 Windows 程序员 VS 做10年 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下的开发, 你需求学习许多的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来说, 你是不是能够省下许多时刻来学习其他常识呢?

下面我就举个简略的比如:

CreateFile

ReadFile

OpenFile

WriteFile

DeleteFile

ReadFileEx

WriteFileEx

CloseHandle

上面这些API是windows下面对文件操作的API, 总共是8个,看看Cre南阳天气-做十年 Windows 程序员 VS 做10年 Linux 程序员,究竟谁凶猛?ateFile的参数吧,

HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, __in DWORD dwDesiredAccess, __in DWORD dwShareMode, __in LPSECURITY_ATTRIBUTES lpSecurityAttributes, __in DWORD dwCreationDisposition, __in DWORD dwFlagsAndAttributes, __in HANDLE hTemplateFile);

这些参数的含义和类型, 请问你需求花多少时刻来把握呢 ?

咱们在看看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多线程程序规划》,

//线程安全的作业线程函数 uintptr_t _beginthreadex( void *security, unsigned stack_size, unsigned ( *start_address )( void * ), void *arglist, unsigned initflag, 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下面创立线程的函数

int pthread_create( pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg);

看到了吧, 你只需求知道这个就能够了。

C的API 绝大部分都能够再windows下面运转,在windows下面学习开发, 你不但要懂得C的API, 你还需求多花时刻来学习windows体系自身的API, 你或许要说, 这么说应该是windows下面学得多啊, 我要说的是你把握的API是许多, 可是关于一个软件来说, 最最重要的是体系架构,数据结构,架构规划的好, 对后期的代码保护,功用修正都很要害, 这也便是新手写的代码, 到最后连他自己自己都很难保护的原因, 更甭说让他人来保护了。

API相当于根本功, 体系架构, 数据结构是内功,根本功练的越快,咱们就越有更多的时刻来操练内功。操练内功,咱们要多啻向高手学习。

在学习windows 下面开发使用的道路上, 咱们需求把握更多的API, 学习后, 让咱们的路越走越窄, 没有特别丰厚的开源代码能够参阅, 水平前进的速度很慢。

可喜的是, 现在许多开源的项目被许多人移植到了linux下面, 也有许多的开源项目是跨渠道的, 常用的是 wxWidget界南阳天气-做十年 Windows 程序员 VS 做10年 Linux 程序员,究竟谁凶猛?面库, 用法相似MFC, 还有qt这个界面库, 也很强壮,还有开源的3D引擎OGRE, 架构非常好,很值得学习其架构形式。可是linux下面的开源库要远远比windows下面的开源库丰厚得多, 咱们能够便利的从高手的代码里边学习数据结构,学习规划形式,学习编程技巧,这也便是linux下面的程序员, 或许会比windows下面的程序员水平更高的原因, 究竟见多识广嘛, 熟读唐诗三百首,不会作诗也会吟啊!

别的想要成为一个优异的、有才能程序员,做软件开发的话,就来学习C/C++吧!假如感觉自学C/C++比较困难的话,能够重视加私信笔者【编程沟通】能够收取相关材料!不论你是转行仍是找作业,咱们都一同生长前进。别的笔者再共享两张C言语C++的学习道路,期望对你有协助!