程式設計師你有資格驕傲麼?

2021-04-13 05:25:04 字數 3531 閱讀 4215

我遇到過太多太多自以為是的例子,有時候包括自己。

超級解霸之父梁肇新

在他書中提到程式設計師高階的幾個階段,我非常同意這位大師的觀點。

其中有個階段就是學習驅動程式和理解作業系統的核心,從

1990

年一直有以研究

linux

核心所引發的研究作業系統核心的一股風潮。

ring0

,ring3

,虛擬記憶體,系統呼叫,程序同步,缺頁等等,有一些聽起來很炫的專業詞彙,更有甚者,以為自己能說出這些詞,自己就是高手了。

ring0/3

,如果你不懂

intel ia-32

體系架構,那麼請你謙虛一點。

虛擬記憶體,

page pool

,page file

,swap partition

,如果你沒有仔細研究過當代

cpu中的

mmu的一些共性,當虛擬頁面不在時,

cpu如何響應,

cpu特權級如何切換。這些都是硬體知識。虛擬記憶體的管理涉及

ring0

核心的管理,和

ring3

普通程序管理,他們是關係?這些你都不懂,那麼請你謙虛一點。

系統呼叫,

intel cpu

的trap 0x80

是實現linux

系統呼叫的入口,然後

ring0

核心再進行一次派發,最後到達實現體。

windows

也是類似,他們執行在同乙個

cpu上,不可能有太大區別。當然這裡有安全機制,不可能讓你這麼容易就進入

ring0

胡作非為。如果這些你都不懂,那麼你就很難想象

windows

如此多的

dll是幹什麼的,他們之間的堆疊關係,

windows

豐富的api

都做了些什麼,在哪個

ring

執行,更很難想象,很多

api會引發一場轟轟烈烈的

ring3

到ring0

的切換。

ntdll.dll

這個連線

ring0

與ring3

的使者在幹什麼。

glibc

在linuxz

這個系統中的地位。如果你不懂,那麼請你謙虛一點。

程序同步,程序排程演算法,這個是現在的大學最喜歡教學生的部分,還會出很多顛過來倒過去的題讓學生作答。這些東西沒他們宣揚的那麼重要。

tanenbaum

教授在<>

中就是這樣說,「而實際系統中很重要的部分,如i/

o系統和檔案系統又以為缺乏理論性而被忽略」。在

1969

年貝爾實驗室第乙個

pdp-11

系統,後來被認為是

unix

作業系統第一版中,當時已經可以多程序同時執行,但是

multiprogramming

就不可以,就是因為還沒有設計出完善的檔案系統,這樣的問題直到

1972

年unix

系統被c

重寫時,問題才被真正解決。

缺頁,現代物理記憶體有限,只好用虛擬記憶體,沒程序

2gb,或者

4gb空間,說起來很容易,我只想問你理解麼?為什麼

wince5.0

程序是32mb

,6.0

是2gb?

微軟會做什麼調整?你能想象一下麼?如果你是微軟,那麼你怎麼做這個調整?

createprocess

底層實現中,程序空間記憶體分配原則就要改掉。

.exe

有兩個模型,乙個是在檔案系統中的模型,乙個是在程序空間的模型,他們往往會有差異,微軟建立在

coff

檔案結構基礎上的的

pe檔案結構是如何來說明她們的不同。

process loader

在作業系統中的地位。有次引發的

page on demand

策略的產生。多工不一定要實現缺頁,只要程序足夠小。但是多工,而且每程序空間都是

cpu所能承受的最大空間,這就必須有缺頁機制。如果你都不懂,那麼請你謙虛一點。

乙個作業系統是在另乙個作業系統裡面編譯完成的,你信麼?還有很多很多的知識,你懂麼?如果你說你都懂,好,那麼我告訴你,你也沒什麼了不起。哦你說你可以用

c+彙編實現上面東西,那麼我告訴你,你同樣沒什麼值得驕傲的,這個世界上很多人都能寫自己的核心,注意我說的是「核心」,僅僅指「核心」。你能寫只能說明你的程式設計功底很深,你能預見這些技術難題。補充一下,這些「技術難題」在現代根本不是難題,但確實是幾十年前的技術難題。說明你把「古人」的解決這些問題的方法掌握了,計算機對你已經很通透。但是程式設計師的最高境界你仍未達到。核心只是整個作業系統中的一部分,是核心部分,注意不要被「核心」二字迷惑,它只是指地理位置的核心,並不是指重要性的核心。你可知道微軟的

office

套件比他的

xp professional

貴很多。相信不用我說你也可以理解。說明微軟在

office

上所花的心血絕對不亞於乙個作業系統。從這些「高手」認為,核心最牛,可是你看

office

這樣應用程式會比你的核心複雜,你信麼?有幸您寫乙個能和微軟這麼強大的

office

出來,在下一定跪拜師學藝。就不說

office

,就說xp

作業系統,核心是什麼,

ntoskrnl.exe

乙個2mb

的檔案,好了不用我多說,你也能很清楚掂量核心的地位。核心以外,作業系統要提供友好的介面,豐富的

api,安全機制,大量可用的應用程式等等這些才是大頭。乙個不懂電腦的人,你和他說作業系統,他不會懂。你說對他重要麼?不重要。「能用,好用」這才是重要的,你那些後台努力的驕傲就收起來吧。享受一下使用者說這個東西好的感覺。

程式設計師最高境界不會再關心這些,什麼語言?什麼系統?什麼核心?什麼驅動?什麼應用?那是一種對大局的把握。對乙個龐大軟體的設計能力。不過沒有前一階段的積累,你也決不可能到達這個階段。因為假如讓你來設計這個龐大系統,你會有很多自己的技術問題還沒有解決,你根本不敢亂想。很多人或者公司也做大系統,為企業定製。那也許不是我說的龐大系統。你注意到,你的系統裡只涉及若干東西,資料庫操作,瀏覽器等等。我想大概

oracle

算是這樣龐大軟體了。當然

office

,3dmax

,maya

,proe

,apache

等等應該都算。他們的設計者是真正的高手。

工作經歷告訴我,對硬體的控制並不是什麼難事,乙個驅動程式你能做,往往只是指你能做硬體控制部分,和作業系統的部分也往往是別人都寫好的**,並不是你設計的,如果這部分你也可以設計,那你也是高手,可以小驕傲一下。所以收起驕傲,停止說這個驅動簡單,那個驅動簡單,我看哪怕是乙個完整串列埠驅動的設計者,也絕對是行業中的高高手。奉勸那些為

windows

,linux

或者wince

寫驅動程式的程式設計師,謙虛點,不要一搞就瞧不起做應用程式的。去看看

apache

之父的言談,就知道什麼才是真正的高手。

程式設計師,你有多特別

作為乙個程式設計師,因為思維的習慣,容易導致很多性格特點。以下是我覺得比較突出的 個人觀點 1.固執。當決定一件事的時候,別人很難說服你,即使是上級的意見也很難讓你認可。如果上級壓力夠大,你可能會屈從,但是內心裡覺得那不是我要做的。固執是不隨大流的必要條件之一,反之不固執的人易隨大流,難會與人隔絕,...

25 做程式設計師,我驕傲了嗎?

程式設計師,計算機語言的王者,日常交流的青銅 大家是不是都感覺 程式設計師的世界裡都是枯燥乏味的 畢竟他們每天24小時 15個小時都用在 身上了 與 鬥智鬥勇了這麼多年 可以說是 屢戰屢敗 了 有人問 程式設計師辛苦嗎?每天不是在加班,就是在加班的路上。程式設計師怎麼會辛苦呢?其實吧,程式設計師壓力...

我是程式設計師麼?

我是程式設計師麼?好像這是個很傻瓜的問題!曾經,我也認為這是個很傻瓜的問題,因為很長一段時間,我都以軟體工程師自居,畢竟 工程師 這三個字聽起來要比 程式設計師 好聽的多。更何況中國的名片管理制度不夠嚴格,別說我想說自己是軟體工程師,就算印個伊拉克 可能也會有人給我印。只要我掏錢。不過,現在我不這麼...