主頁 >  其他 > 做十年Windows跟十年linux的程式員差距有多大

做十年Windows跟十年linux的程式員差距有多大

2020-11-13 04:35:31 其他

如果一個程式員從來沒有在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下的開發, 你需要學習很多的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個,看看CreateFile的引數吧,
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多執行緒程式設計》,

作者:(美)Jim Beveridge & Robert Wiener 著,侯捷 譯 這本書,

//執行緒安全的作業執行緒函式 
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界面庫, 用法類似MFC, 還有qt這個界面庫,

也很強大,還有開源的3D引擎OGRE, 架構非常好,很值得學習其架構模式,但是linux下面的開源庫要遠遠比windows下面的開源庫豐富得多,

我們可以方便的從高手的代碼里面學習資料結構,學習設計模式,學習編程技巧,這也就是linux下面的程式員, 可能會比windows下面的程式員水平更高的原因

畢竟見多識廣嘛, 熟讀唐詩三百首,不會作詩也會吟啊!


如果你想轉linux卻不知道從哪開始,可以進群973961276跟大家一起學習linux,學習直通車>>c/c++ linux服務器高級架構師

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/212921.html

標籤:其他

上一篇:Nuxt Server Error的解決方案(前后端聯調的Bug定位與修復方法)

下一篇:談談從小公司進入大廠,我都做對了哪些事?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more