色偷偷91综合久久噜噜-色偷偷成人-色偷偷尼玛图亚洲综合-色偷偷人人澡久久天天-国内精品视频一区-国内精品视频一区二区三区

Hello! 歡迎來到小浪云!


10年 Windows 與 Linux 程序員的區(qū)別


來源:菜鳥教程

ID:runoob

如果一個(gè)程序員一直使用Windows進(jìn)行開發(fā),而沒有在Linuxunix環(huán)境中開發(fā)過,工作10年后的水平與在Linux或Unix環(huán)境中開發(fā)10年的程序員相比,通常會(huì)有很大差距。這篇文章并不是為了貶低在Windows下開發(fā)的程序員,可能會(huì)讓從事Windows開發(fā)的讀者感到不快,我無意冒犯,只是分享我的個(gè)人感受。

10年 Windows 與 Linux 程序員的區(qū)別我最初學(xué)習(xí)編程是在Windows平臺(tái)上,從VB開始,后來轉(zhuǎn)向Vc++,當(dāng)時(shí)使用的是VC6.0。在Windows上開發(fā)了5年后,我轉(zhuǎn)向Linux進(jìn)行開發(fā)。盡管我在Linux上開發(fā)時(shí)也曾參與過一些Windows項(xiàng)目,但在Linux上開發(fā)讓我學(xué)到了更多東西,從開源代碼中汲取了豐富的養(yǎng)分。我并不是說自己是高手,只是說在Linux上學(xué)習(xí),你的進(jìn)步會(huì)更快。

但我需要強(qiáng)調(diào)的是,我這里所說的情況是基于“在同樣勤奮,同樣努力程度,同樣基礎(chǔ)知識(shí),同樣工作年限,同樣是做應(yīng)用程序開發(fā)”的前提下。如果有不同的看法,希望大家在評(píng)論區(qū)發(fā)表意見。

可能大家會(huì)感到奇怪,為什么會(huì)出現(xiàn)這種情況呢?讓我慢慢解釋。

首先:閉源與開源

在Windows上開發(fā)的程序通常是封閉源代碼的,特別是10年前,幾乎找不到可用的開源軟件。現(xiàn)在情況有所改善,許多Linux上的開源程序被移植到Windows上,但Linux上的開源程序增長得更多。

在Windows上編寫應(yīng)用程序時(shí),需要使用mfc、WINSOCK、ODBC、FILE IO等,可以查找資料的地方主要是微軟的官方文檔MSDN,只有MSDN是最全面的,接下來是第三方網(wǎng)站如vckbase、CSDN、codeproject。這些網(wǎng)站上的代碼通常是針對(duì)特定小功能的演示代碼,代碼質(zhì)量和風(fēng)格各不相同,都是一些小demo,簡單研究后可以集成到自己的應(yīng)用程序中。

如何構(gòu)建一個(gè)完整且架構(gòu)良好的應(yīng)用程序,大學(xué)里不會(huì)教你,一切都得靠自己摸索。在公司項(xiàng)目中不斷提升,直到項(xiàng)目上線,后期維護(hù)和修改代碼時(shí),你會(huì)發(fā)現(xiàn)自己當(dāng)初的代碼架構(gòu)多么不合理,維護(hù)和修改是多么困難。

如果在互聯(lián)網(wǎng)上找不到所需的資料,就只能靠自己想出實(shí)現(xiàn)方法,雖然功能實(shí)現(xiàn)時(shí)可能會(huì)很有成就感,但當(dāng)你發(fā)現(xiàn)別人用了一個(gè)巧妙的方法實(shí)現(xiàn)同樣功能時(shí),你會(huì)突然意識(shí)到自己為何當(dāng)時(shí)沒想到這種方法呢?

在Windows上開發(fā),不容易找到可參考的開源項(xiàng)目,一切都得靠自己。但在Linux上就不一樣了,當(dāng)你要開發(fā)一個(gè)新項(xiàng)目時(shí),可以考慮是否有開源項(xiàng)目實(shí)現(xiàn)了類似的功能,可以下載源代碼進(jìn)行參考,詳細(xì)了解其中的算法、架構(gòu)設(shè)計(jì)等,這樣在開發(fā)時(shí)就會(huì)得心應(yīng)手,可以避免別人犯過的錯(cuò)誤,少走很多彎路。

其次:要學(xué)習(xí)的知識(shí)量不同

10年 Windows 與 Linux 程序員的區(qū)別學(xué)習(xí)Windows開發(fā),你需要掌握大量的Windows API。截至2009年9月,Windows總API數(shù)量為2258個(gè),且Windows API的參數(shù)多,參數(shù)類型復(fù)雜,記住這些內(nèi)容并不容易,至少和學(xué)習(xí)一門外語一樣難,大學(xué)英語四級(jí)要求掌握4500個(gè)單詞。可以想象,學(xué)會(huì)這么多API的用法是多么困難。

而學(xué)習(xí)Linux開發(fā),需要掌握的API數(shù)量相對(duì)較少。Linux內(nèi)核API總共只有335個(gè),但這些API主要用于編寫驅(qū)動(dòng),開發(fā)應(yīng)用程序基本用不到。開發(fā)應(yīng)用程序主要使用c語言API,而Linux所有的C語言API只有279個(gè),也就是說,只需要掌握不到300個(gè)API,就可以在Linux上順利開發(fā)應(yīng)用程序。與學(xué)習(xí)Windows上那一大API相比,你可以節(jié)省很多時(shí)間來學(xué)習(xí)其他知識(shí)。

下面舉個(gè)簡單的例子:

CreateFile ReadFile OpenFile WriteFile DeleteFile ReadFileEx WriteFileEx CloseHandle

這些是Windows上對(duì)文件操作的API,總共8個(gè)。看看CreateFile的參數(shù):

代碼語言:JavaScript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制“`javascript 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 );

 這些參數(shù)的意義和類型,你需要花多少時(shí)間來掌握呢? <p>再看看Linux上對(duì)文件操作的C語言API:</p><p>fopen fwrite fread fclose</p><p>總共四個(gè),參數(shù)如下:</p><p>代碼語言:javascript代碼運(yùn)行次數(shù):0<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="<a href="https://www.php.cn/link/c9041cfd2a40932691855abd98fd219a">http://www.w3.org/2000/svg"><path</a> d="M6.66666 10.9999L10.6667 7.99992L6.66666 4.99992V10.9999ZM7.99999 1.33325C4.31999 1.33325 1.33333 4.31992 1.33333 7.99992C1.33333 11.6799 4.31999 14.6666 7.99999 14.6666C11.68 14.6666 14.6667 11.6799 14.6667 7.99992C14.6667 4.31992 11.68 1.33325 7.99999 1.33325ZM7.99999 13.3333C5.05999 13.3333 2.66666 10.9399 2.66666 7.99992C2.66666 5.05992 5.05999 2.66659 7.99999 2.66659C10.94 2.66659 13.3333 5.05992 13.3333 7.99992C13.3333 10.9399 10.94 13.3333 7.99999 13.3333Z" fill="currentcolor"></path></svg>運(yùn)行<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="<a href="https://www.php.cn/link/c9041cfd2a40932691855abd98fd219a">http://www.w3.org/2000/svg"><path</a> clip-rule="evenodd" d="M4.5 15.5V3.5H14.5V15.5H4.5ZM12.5 5.5H6.5V13.5H12.5V5.5ZM9.5 2.5H3.5V12.5H1.5V0.5H11.5V2.5H9.5Z" fill="currentcolor" fill-rule="evenodd"></path></svg>復(fù)制javascript FILE *fopen( const char *filename, const char *mode );</code>

兩個(gè)參數(shù),你需要花多少時(shí)間來掌握呢?可能有人會(huì)提出意見,說這些C語言API也能在Windows上運(yùn)行。

沒錯(cuò),是能在Windows上運(yùn)行,但僅掌握這些跨平臺(tái)的C語言API就夠了嗎?難道所有在Windows上開發(fā)的人都喜歡用C語言API,不會(huì)用Windows本身的API嗎?你不需要學(xué)習(xí)Windows的API嗎?你的同事使用了CreateFile這個(gè)函數(shù),你不需要搞懂它嗎?你不需要看同事的代碼嗎?你不需要去維護(hù)別人寫過的代碼嗎?

如果你還是這么想,我還可以舉其他例子。下面是兩個(gè)在Windows上創(chuàng)建線程的例子,第一個(gè)是創(chuàng)建安全工作線程,第二個(gè)是創(chuàng)建界面線程,還有一個(gè)函數(shù)我沒有列出,是創(chuàng)建不安全的工作線程的,具體原理可以參考《win32多線程程序設(shè)計(jì)》,作者:(美)Jim Beveridge & Robert Wiener 著,侯捷 譯。

代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制javascript //線程安全的工作線程函數(shù) uintptr_t _beginthreadex( void security, unsigned stack_size, unsigned ( start_address )( void ), void arglist, unsigned initflag, unsigned *thrdaddr ); //界面線程函數(shù) 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上開發(fā),我們必須掌握這兩個(gè)創(chuàng)建線程的函數(shù)。當(dāng)然,你也可以只知道 _beginthreadex 來在Windows上通用,但當(dāng)看到別人的代碼使用CreateThread時(shí),你可不要不習(xí)慣,MFC中很多人用CreateThread。掌握這么多API是不是很累?就像你上學(xué)時(shí)背單詞一樣累。</p><p>下面列出Linux上創(chuàng)建線程的函數(shù):</p><p>代碼語言:javascript代碼運(yùn)行次數(shù):0<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="<a href="https://www.php.cn/link/c9041cfd2a40932691855abd98fd219a">http://www.w3.org/2000/svg"><path</a> d="M6.66666 10.9999L10.6667 7.99992L6.66666 4.99992V10.9999ZM7.99999 1.33325C4.31999 1.33325 1.33333 4.31992 1.33333 7.99992C1.33333 11.6799 4.31999 14.6666 7.99999 14.6666C11.68 14.6666 14.6667 11.6799 14.6667 7.99992C14.6667 4.31992 11.68 1.33325 7.99999 1.33325ZM7.99999 13.3333C5.05999 13.3333 2.66666 10.9399 2.66666 7.99992C2.66666 5.05992 5.05999 2.66659 7.99999 2.66659C10.94 2.66659 13.3333 5.05992 13.3333 7.99992C13.3333 10.9399 10.94 13.3333 7.99999 13.3333Z" fill="currentcolor"></path></svg>運(yùn)行<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="<a href="https://www.php.cn/link/c9041cfd2a40932691855abd98fd219a">http://www.w3.org/2000/svg"><path</a> clip-rule="evenodd" d="M4.5 15.5V3.5H14.5V15.5H4.5ZM12.5 5.5H6.5V13.5H12.5V5.5ZM9.5 2.5H3.5V12.5H1.5V0.5H11.5V2.5H9.5Z" fill="currentcolor" fill-rule="evenodd"></path></svg>復(fù)制```javascript int pthread_create( pthread_t <em>restrict thread, const pthread_attr_t </em>restrict attr, void <em>(</em>start_routine)(void<em>),  void </em>restrict arg);

你只需要知道這個(gè)函數(shù)就行了。

C語言API的大部分可以在Windows上運(yùn)行,但在Windows上學(xué)習(xí)開發(fā),你不僅要懂得C語言API,還需要花更多時(shí)間學(xué)習(xí)Windows系統(tǒng)本身的API。你可能會(huì)說,這樣應(yīng)該是Windows上學(xué)得更多,但我想要說的是,你掌握的API很多,但對(duì)于一個(gè)軟件來說,最重要的是系統(tǒng)架構(gòu)數(shù)據(jù)結(jié)構(gòu),好的架構(gòu)設(shè)計(jì)對(duì)后期的代碼維護(hù)和功能修改至關(guān)重要,這也是新手寫的代碼到最后連自己都很難維護(hù)的原因,更不用說讓別人來維護(hù)了。

API相當(dāng)于基本功,系統(tǒng)架構(gòu)數(shù)據(jù)結(jié)構(gòu)是內(nèi)功,基本功練得越快,我們就有更多時(shí)間來練習(xí)內(nèi)功。練習(xí)內(nèi)功,我們需要多向高手學(xué)習(xí)。

在學(xué)習(xí)Windows應(yīng)用開發(fā)的道路上,我們需要掌握更多的API,學(xué)習(xí)后,讓我們的路越走越窄,沒有特別豐富的開源代碼可以參考,水平提高的速度很慢。

可喜的是,現(xiàn)在很多開源項(xiàng)目被移植到Windows上,也有很多跨平臺(tái)的開源項(xiàng)目,常用的有wxWidget界面庫,用法類似MFC,還有qt這個(gè)強(qiáng)大的界面庫,以及開源的3D引擎OGRE,其架構(gòu)非常值得學(xué)習(xí)。但Linux上的開源庫要比Windows上的豐富得多,我們可以方便地從高手的代碼中學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)模式和編程技巧,這也就是Linux上的程序員水平可能會(huì)比Windows上的程序員更高的原因,畢竟見多識(shí)廣嘛,熟讀唐詩三百首,不會(huì)作詩也會(huì)吟啊!

*聲明:推送內(nèi)容及圖片來源于網(wǎng)絡(luò),部分內(nèi)容會(huì)有所改動(dòng),版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜。

  • END –

相關(guān)閱讀

主站蜘蛛池模板: 成人在线网址 | 18到20女人一级毛片 | 亚洲欧美日韩国产精品影院 | 色狠狠久久综合网 | 亚洲激情影院 | 老司机亚洲精品影院在线观看 | 中文字幕色网站 | 99成人国产精品视频 | 伊人网五月天 | 日韩 欧美 国产 亚洲 中文 | 中文字幕国产综合 | 国产第一页久久亚洲欧美国产 | 亚洲日日| 三级网站免费 | 色综合天天综合网国产国产人 | 综合网中文字幕 | 国产一区2区 | 香港三级日本三级三级韩级一 | 一区二区免费视频 | 日韩欧国产精品一区综合无码 | 久青草网站 | 免费三级黄色片 | 中文国产成人精品久久久 | 三级黄色片在线免费观看 | 日韩免费一级片 | 成年日韩免费大片黄在线观看 | 国产免费一区二区在线看 | 黄色a一级片| 成年女人色毛片免费看 | 日韩高清一级毛片 | 亚洲第一综合色 | 久久综合九色综合国产 | 在线观看视频一区二区三区 | 久久99国产精品成人欧美 | 国产成人精品本亚洲 | 综合天天 | 夜夜躁狠狠躁日日躁2021 | 国产一级久久免费特黄 | 国产成人精品久久一区二区三区 | 亚洲粉嫩 | 精品国产欧美一区二区最新 |