九色91_成人精品一区二区三区中文字幕_国产精品久久久久一区二区三区_欧美精品久久_国产精品99久久久久久久vr_www.国产视频

Hello! 歡迎來到小浪云!


10年 Windows 與 Linux 程序員的區別


來源:菜鳥教程

ID:runoob

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

10年 Windows 與 Linux 程序員的區別我最初學習編程是在Windows平臺上,從VB開始,后來轉向Vc++,當時使用的是VC6.0。在Windows上開發了5年后,我轉向Linux進行開發。盡管我在Linux上開發時也曾參與過一些Windows項目,但在Linux上開發讓我學到了更多東西,從開源代碼中汲取了豐富的養分。我并不是說自己是高手,只是說在Linux上學習,你的進步會更快。

但我需要強調的是,我這里所說的情況是基于“在同樣勤奮,同樣努力程度,同樣基礎知識,同樣工作年限,同樣是做應用程序開發”的前提下。如果有不同的看法,希望大家在評論區發表意見。

可能大家會感到奇怪,為什么會出現這種情況呢?讓我慢慢解釋。

首先:閉源與開源

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

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

如何構建一個完整且架構良好的應用程序,大學里不會教你,一切都得靠自己摸索。在公司項目中不斷提升,直到項目上線,后期維護和修改代碼時,你會發現自己當初的代碼架構多么不合理,維護和修改是多么困難。

如果在互聯網上找不到所需的資料,就只能靠自己想出實現方法,雖然功能實現時可能會很有成就感,但當你發現別人用了一個巧妙的方法實現同樣功能時,你會突然意識到自己為何當時沒想到這種方法呢?

在Windows上開發,不容易找到可參考的開源項目,一切都得靠自己。但在Linux上就不一樣了,當你要開發一個新項目時,可以考慮是否有開源項目實現了類似的功能,可以下載源代碼進行參考,詳細了解其中的算法、架構設計等,這樣在開發時就會得心應手,可以避免別人犯過的錯誤,少走很多彎路。

其次:要學習的知識量不同

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

而學習Linux開發,需要掌握的API數量相對較少。Linux內核API總共只有335個,但這些API主要用于編寫驅動,開發應用程序基本用不到。開發應用程序主要使用c語言API,而Linux所有的C語言API只有279個,也就是說,只需要掌握不到300個API,就可以在Linux上順利開發應用程序。與學習Windows上那一大API相比,你可以節省很多時間來學習其他知識。

下面舉個簡單的例子:

CreateFile ReadFile OpenFile WriteFile DeleteFile ReadFileEx WriteFileEx CloseHandle

這些是Windows上對文件操作的API,總共8個。看看CreateFile的參數:

代碼語言:JavaScript代碼運行次數:0運行復制“`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 );

 這些參數的意義和類型,你需要花多少時間來掌握呢? <p>再看看Linux上對文件操作的C語言API:</p><p>fopen fwrite fread fclose</p><p>總共四個,參數如下:</p><p>代碼語言:javascript代碼運行次數: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>運行<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>復制javascript FILE *fopen( const char *filename, const char *mode );</code>

兩個參數,你需要花多少時間來掌握呢?可能有人會提出意見,說這些C語言API也能在Windows上運行。

沒錯,是能在Windows上運行,但僅掌握這些跨平臺的C語言API就夠了嗎?難道所有在Windows上開發的人都喜歡用C語言API,不會用Windows本身的API嗎?你不需要學習Windows的API嗎?你的同事使用了CreateFile這個函數,你不需要搞懂它嗎?你不需要看同事的代碼嗎?你不需要去維護別人寫過的代碼嗎?

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

代碼語言:javascript代碼運行次數:0運行復制javascript //線程安全的工作線程函數 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是不是很累?就像你上學時背單詞一樣累。</p><p>下面列出Linux上創建線程的函數:</p><p>代碼語言:javascript代碼運行次數: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>運行<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>復制```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);

你只需要知道這個函數就行了。

C語言API的大部分可以在Windows上運行,但在Windows上學習開發,你不僅要懂得C語言API,還需要花更多時間學習Windows系統本身的API。你可能會說,這樣應該是Windows上學得更多,但我想要說的是,你掌握的API很多,但對于一個軟件來說,最重要的是系統架構數據結構,好的架構設計對后期的代碼維護和功能修改至關重要,這也是新手寫的代碼到最后連自己都很難維護的原因,更不用說讓別人來維護了。

API相當于基本功,系統架構數據結構是內功,基本功練得越快,我們就有更多時間來練習內功。練習內功,我們需要多向高手學習。

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

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

*聲明:推送內容及圖片來源于網絡,部分內容會有所改動,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。

  • END –

相關閱讀

主站蜘蛛池模板: 国产精品欧美一区二区三区不卡 | 91玖玖 | 中文字幕欧美日韩 | 久久久久久久久久久久亚洲 | 成人欧美一区二区三区黑人孕妇 | 在线免费观看成人 | 亚洲电影一区二区三区 | 99视频| 一区二区三区四区免费观看 | 中文字幕 亚洲一区 | 韩日av片| 国产天天操| 99精品欧美一区二区三区综合在线 | 九色porny自拍视频 | 欧美性久久| 在线看亚洲 | 在线成人www免费观看视频 | 青娱乐一区二区 | 日韩在线看片 | 四虎最新地址 | 欧美日韩一本 | 免费毛片网站在线观看 | 99精品视频一区二区三区 | 午夜久久久 | 久久99国产精品久久99果冻传媒 | 精品国产鲁一鲁一区二区张丽 | 久久青青| 欧美性大战久久久久久久蜜臀 | 黄色一级在线播放 | 成人一区二区三区 | 在线午夜 | a级黄色网 | 五月婷婷导航 | 国产高清美女一级a毛片久久w | 91网站在线观看视频 | 人人做人人澡人人爽欧美 | 亚洲成人黄色 | 亚洲精品久久久一区二区三区 | 亚洲二区精品 | 日韩高清国产一区在线 | 97人人超碰 |