一般搞學問的和搞技術的不能太書生氣,細化一些就是不要純粹地搞理論,可是我還是難免的要形而上的總結一下兩類人,一類就是搞windows的高手,另一類就是搞linux的大俠,其實刻意的區別這些真的沒有設麼意義,可是我寫此文的目的就是想藉此闡述一下linux和windows的根本思想和意義的不同。
搞windows的人我見的很多,也有不少堪稱為高手的朋友,他們的一致性特點就是對x86的intel彙編非常熟悉,也可以說是精通,他們的電腦上總是安裝著各種各樣的反彙編工具,令你眼花繚亂。當我看到這些人在使用這些工具看著天書一樣的**,我打心眼裡面佩服,他們從一些類似mov eax,0***xx的東西裡面就能窺視到**邏輯,這不能不讓人佩服,甚至他們可以窺視核心,有一本書叫做《天書夜讀》,他們幾乎都看過,沒有看過的是因為覺得那太小兒科了,搞windows的人精通十六進製制,好像他們是從50年代走過來的人一樣探查著底層的一切。誇完了他們就該損他們了,這個時候一分為二還是不錯的,他們即使精通x86的intel彙編,會使用各種除錯工具,也不見得他們知其所以然,可以說,microsoft的策略使得他們變得很可憐,他們迷失於**的細枝末節,將世界理解為intel的彙編,以為任何非intel彙編不可解決,他們很多甚至不知道sparc處理器和ppc處理的基本架構,甚至逮個處理器就找段間長跳轉指令,甚至給他們給計算機他們就找bios,甚至給他們個作業系統裝完驅動後不重啟總覺得不放心... 他們一旦遇到困難就開啟他們心愛的反彙編工具來****邏輯,即使是新手也不會忘了去瀏覽「看雪論壇」,總之他們就是程式設計師,就是程式設計者,離系統設計總是差那麼一大截。
現在看看linux的粉絲們,和windows粉絲不同,遇到問題時,他們不用動用任何反彙編工具,直接可以看到源**,我這裡所說的問題不單單是指linux自帶的程式和核心,還包括了任何可以在gnu和sourceforge上找到的東西,這樣,他們的思想就天生的比windows的粉絲們高那麼乙個層次,他們不用理解任何彙編就可以理解整個系統的架構,具有調侃意義的是,他們並不是不理解彙編,而是他們理解的彙編比windows粉絲們還要多,他們對彙編的理解不是為了解決問題,不是為了hack,而是為了設計乙個自己的系統,如果它們想hack,那麼用c已然足夠,linux的粉絲們不光知道x86,他們還知道x86不過是乙個最差勁的處理器,他們的心根本不在pc,而在整個it領域,他們對sparc玩得不亦樂乎,他們對c語言和彙編的整合得心應手,他們可以節省下來很多時間來進行思考和設計,他們不必為乙個序列號演算法茶飯不思...
windows的粉絲們總是被牽著鼻子走路,microsoft總是在推出新東西,出產新規範,粉絲們總是為可以在第一時間得到訊息而自豪,.net框架就是乙個例子,然後他們的行為就是拼命地學習,新手們總是會遇到乙個問題,就是程式設計或者執行時為系統找不到特定的庫而耿耿於懷,系統總是提示他們安裝一些新東西,然後這些新東西就成了他們炫耀的資本,初學者總是會遇到的另乙個問題就是安裝vs200x整合開發環境,大學生們的作業有的竟然是安裝vs200x。linux下的工作者完全不同,如果你安裝好了linux,並且是開發環境版本的,那麼你只管寫程式,然後man gcc,瞬間就可以把gcc玩弄於鼓掌之中,粉絲們可以將大部分時間用於自己的**邏輯了。眾所周知,linux的發行版眾多並且不統一,那麼程式設計者是否會因此為遭罪呢?不!雖然linux有很多發行版,但是如果你想開發乙個大眾的應用,那麼只要底層的api穩定並且統一,那麼你就是幸福的,幸運的是,linux遵循絕大部分的posix呼叫,而posix的意義大家都知道,很穩定,並且多年不變,於是乎,真正開發linux應用的可以不必太在意自己在用什麼發行版了。如果我看到乙個開發者在為開發乙個應用(涉及到開發核心模組)而為挑選發行版耿耿於懷,那麼我就太看不慣他了,windows的粉絲不要褻瀆linux了!發行版之所以這麼豐富,原因就是linux繼承了unix的優良基因,機制和策略相分離,其實unix也是有很多版本的,它們的核心實現有的也不同,但是它們的機制是相同的,某種意義上核心的東西也不一定都是機制,核心中也可以實現策略,比如sun的solaris,ibm的aix以及hp的hp的unix。
windows的dll是它的乙個很重要的特徵,但是同時也成了它的乙個地獄,具體原因我就不說了。之所以windows中有那麼多的庫可以被反彙編工具所除錯,那就是因為它有很多的dll,甚至有很多系統的dll,比如ntdll.dll,kernel32.dll,user32.dll等等,它們的存在也導致了一些可以勾住它們的小子被認為是高手,linux的情況呢,大大不同,你想執行read,那麼開源的glibc馬上導進系統呼叫,馬上進入核心,小子們就傻了,如何知道其中的奧秘呢?看**吧,除錯核心吧,於是小子們成了大俠,而勾住windows的dll的小子們卻迷失於intel彙編而被認為是高手後不可自拔!linux的glibc沒有那麼多閒事,但是在windows下呼叫標準c庫的read函式,那麼在進入核心之前會先進入ntdll.dll的readfile,後者再進入核心,其實這麼實現還是微軟不敢太得瑟,它完全沒有必要實現標準c庫的read而告之人們想要讀檔案就呼叫readfile,但是它還是用如此醜陋的方式相容了標準c。
最後是我的乙個經歷,我們專案組要上linux專案,組裡的乙個windows高手上去就找到了該專案相關的乙個專案的windows版本,開啟他們反彙編工具看了起來相關專案的dll庫,我問他時,他說想看看都呼叫了哪些api,可是他根本不知道那個相關專案是開源的...而且那麼為開發linux而挑選發行版的就是他...
分類器的兩類形式
在對gan進行學習的過程中參考了一些好的文章,在此總結出來自己認為有意義的學習筆記。參考原文 一 決策函式y f x 輸入乙個x,它就輸出乙個y,y與乙個閾值比較,根據比較結果判定x屬於哪個類別。例如兩類 w1和w2 分類問題,如果y大於閾值,x就屬於類w1,如果小於閾值就屬於類w2。二 條件概率分...
假設檢驗的兩類錯誤
棄真錯誤也叫第i類錯誤或 錯誤 它是指 原假設實際上是真的,但通過樣本估計總體後,拒絕了原假設。明顯這是錯誤的,我們拒絕了真實的原假設,所以叫棄真錯誤,這個錯誤的概率我們記為 這個值也是顯著性水平,在假設檢驗之前我們會規定這個概率的大小。取偽錯誤也叫第ii類錯誤或 錯誤 它是指 原假設實際上假的,但...
區分JSP中的兩類注釋方式
注釋對於程式猿來說在常見不過了,本文說說在使用jsp中是的一些注釋方式以及它們的一些區別,歡迎補充指正。首先在jsp頁面中,jsp作為一種特殊的servlet,先說說這種情況的注釋 1.整塊jsp 注釋 jsp 塊 2.單行jsp 注釋 jsp單行 3.多行jsp 注釋 jsp多行 以上三種就是js...