主頁 > 移動端開發 > 做十年Windows跟十年linux的程式員差距有多大

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

2020-11-13 04:20:47 移動端開發

如果一個程式員從來沒有在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/yidong/212900.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)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more