windows和Linux程式設計師到底有沒有區別?

2021-09-06 09:34:30 字數 2391 閱讀 5046

如果乙個程式設計師從來沒有在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性質的小東西,簡單研究看看**,就可以整合到自己的應用程式裡面。

如何構建乙個完整的應用程式,架構良好的應用程式,大學裡面不會教你,一切都得靠自己摸索。在公司裡面做專案獲得提公升,直到專案商用,後期維護修改**時,回頭看自己寫的**,才深刻體會到,自己當時寫的**架構是多麼的不合理,維護修改是如此的困難。

如果在網際網路上找不到自己需要的資料,就只能靠自己想一些實現的方法,雖然功能完成了,可能完成的時候還很有成就感,但是等那天你突然發現有人實現這個功能,並且用了乙個巧妙的方法,這時你才突然恍悟,我當時為何就想不到這麼實現呢?

第二:要學習的知識量不一樣

學習window下的開發,你需要學習很多的windowsapi。截止到2023年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來說,你是不是可以省下很多時間來學習其他知識呢?

下面我再列一下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,學習後, 讓我們的路越走越窄,沒有特別豐富的開源**可以參考,水平提高的速度很慢。

可喜的是,現在很多開源的專案被很多人移植到了windows下面,也有很多的開源專案是跨平台的,常用的是wxwidget介面庫,用法類似mfc,還有qt這個介面庫,也很強大,還有開源的3d引擎ogre,架構非常好,很值得學習其架構模式。但是linux下面的開源庫要遠遠比windows下面的開源庫豐富得多,我們可以方便地從高手的**裡面學習資料結構,學習設計模式,學習程式設計技巧,這也就是linux下面的程式設計師,可能會比windows下面的程式設計師水平更高的原因,畢竟見多識廣嘛,熟讀唐詩三百首,不會作詩也會吟啊!

windows和linux中程式棧空間

一般來說,我們所用的記憶體有棧和堆之分,其它的我們很少控制,棧的速度快,但是空間小 不靈活 而堆的空間幾乎可以滿足任何要求 靈活,但是相對的速度要慢了很多,並且在vc中堆是人為控制的,new了就要delete,否則很容易產生記憶體洩露等問題。系統 棧的位元組數 bits digits 以兆為單位的值...

Linux和Windows系統下簡單程式的編寫

二 windows系統下編寫簡單程式 1 到ubuntu乙個目錄下,然後滑鼠右擊,在此處開啟終端 2 進入root使用者sudo su 3 輸入sudo vim hello.c 建立hello.c檔案 4 進入vim下,從鍵盤輸入i,左下角出現 插入 表示進入編輯狀態 5 輸入 後,按esc推出編輯...

windows和linux執行程式的區別

乙個程式執行的過程是什麼樣的?如果簡單說,就是編譯器將 編譯成彙編 然後彙編 再通過彙編器變成機器碼,這樣cpu就可以執行這些機器碼了。上面的過程簡化了很多,如果詳細分析,要分為兩個部分 程式最終是通過裝載器變成指令和資料的,所以其實生成的可執行 也並不僅僅是一條條的指令。在linux下,可執行檔案...