裘千丈還是裘三尺——用挖礦的比喻說平台與門檻


先擺明觀點:強烈反對 .NET社區面臨的問題及其對策 一文中對“門檻”的定義,照這個觀點下去,會害死很多人的。

wps_clip_image-26693

從一個比喻開始:一個平台就是一個礦區,程序員就是在礦區里挖礦的人。這里就衍生出幾個問題:

(1)這個礦是貧礦還是富礦;

(2)挖礦怎么個挖法;

(3)礦好不好挖。

第一個問題是平台的前途問題,是大局層面的。第二個問題是方法問題,戰術層面的。第三個問題牽扯到這幾天討論的熱火朝天的門檻問題。

一個個談。

一、貧礦與富礦

貧礦與富礦可以從兩個方面來看,第一,在主流觀點中這個礦是貧礦還是富礦,第二,對你來說這個礦是貧礦還是富礦。

(1)主流觀點。一般來說,你這個平台適合做什么,前景如何,會有一種主流觀點。這個主流觀點不管它對不對,它會引導大部分資源的流動。比如,主流覺得 php 做 web 開發更適合,主流覺得 .net 做中小型管理系統中小型網站開發更適合,主流覺得 java/c++ 更適合做超大規模系統的后台,主流覺得開發android應用用java,開發ios應用用 objc。主流觀點,它會引導着人力、資金、注意力等資源的分配。

(2)你的角度。主流的角度不是個人的角度。這里有分幾種情況。

(a) 主流是易變的。比如,ios起,symbian 落。再比如,我畢業那陣,國企啊、公務員啊都沒人去,礦主還在苦逼的熬着。

(b) 就算主流是正確的,也會造成富礦挖的人多,貧礦挖的人少,平均到人頭上挖的都差不多多。

(c) 彼之砒霜,我之蜜糖。他要挖金子,這礦黃金含量很低,對他來說是貧礦。而你是來挖鈾做原子彈的,你說這是貧礦還是富礦?

二、怎么挖

挖礦有兩種挖法:鑽地和刨墳。

wps_clip_image-440

一種是裘千丈(求千丈)式挖法。鑽地,往深里挖,挖千丈深。一種是裘三尺(求三尺)式挖法,刨墳,刨三尺深,全部都刨一遍。

對一個平台來說,挖的越深一般收獲越大。用礦區的比喻就是,這個礦越往深處密度越大,寶貝越多。

大家都知道鑽地比刨墳要好,但為什么刨墳還很流行呢。試着分析一下:

(1)找工作,你不知道他們要面試啥,所以要刨墳式學習;

(2)寫技術書,鑽地書很難寫,讀者群體也少,書少,銷量很差,而刨墳書好寫,覆蓋面也廣,讀者群體也多,所以書多,賣的也多;

(3)培訓,為了求就業率,要刨墳式培訓;

(4)布道。鑽地式沒幾個人能看懂,影響聲譽;刨墳式全說一通顯得牛啊。

(5)鑽地式很多是 know how,是不外傳的,避免宣傳的。

三、好不好挖

這里就牽扯到什么是“門檻”。用鑽地式觀點來看,門檻是拿個鍬挖個坑的難度,而用刨墳式觀點來看,門檻是拿個鍬刨一遍的難度。我們來看“.NET社區面臨的問題及其對策”一文的原話:

你可以說.NET是個技能,.NET是個平台,那作為一個技能、一個平台,.NET好學嗎?說實話,我一開始覺得.NET不就是一個幾門語言(C#, VB.NET, J#)都能隨便用的玩意嗎?但越學越發覺很多東西不是那么回事,越學越覺得很多東西其實並不懂,就是這種感覺,所以呢,我覺得門檻並不低。我就沒搞懂,為啥這么多人覺得.NET入門簡單了,你們說的入門到底指啥?會寫console?會寫winForm?會寫個排序?我對入門的理解是對大部分需求場景能夠經過少量時間的研究學習后進行處理,基本不需要別人幫助,如果用HR的話來說是熟悉,談不上精通,但絕對不是了解、知道,那種寫個hello world在我看來,連知道都談不上,這誰不會寫?!更何況.NET基本上2年就有一次大更新,當我們還沉浸在.NET 2.0的時候,微軟已經出了3.0, 4.0,大量的概念引入,這么多東西你都知道個1、2、3了?我不信。怎么沒見中國有幾個大牛寫出標志性的.NET開源應用呢?

是不是就是刨墳式觀點?

只要能挖個坑,就可以開始往深處挖了,為什么都要把大部分礦區都挖一遍呢?“當我們還沉浸在.NET 2.0的時候,微軟已經出了3.0, 4.0,大量的概念引入,這么多東西你都知道個1、2、3了?”這是不是刨墳式問題呢?用鑽地式角度來看,會反問,我為什么要知道那些?

刨墳會導致什么問題呢?

(1)門檻高。全刨一遍,當然費事了,費時間費腦汁;

(2)價值不多。假設10個人挖礦,全都鑽地式挖,可以把一個礦區都挖個底超天。全都刨墳式挖,也就挖三尺。總體價值少很多。

(3)競爭激烈。

而用鑽地式挖法:

(1)門檻低。挖個坑就可以開始了。

(2)價值高。你挖這里,他挖那里,N個人加起來比刨墳式挖的多得多。

(3)競爭不激烈。

但也不是說刨墳式沒價值,最好是這樣的比例:十個人中一兩個協調,八九個鑽地挖礦。

四、我的觀點

我的觀點就是:(1)不被主流觀點誤導,判斷這個礦對自己是貧礦還是富礦;(2)鑽地為主,沒工作時刨刨墳無所謂,有事時還是盡量鑽地,鑽地應該是主流;(3)門檻就是找個點挖個坑的難度,不是刨一遍的難度。

我的工作牽扯到三個平台/語言:.net/c#,flash,c/c++。用刨墳式來說,這三個東西我是一個都沒有入門:

.net/c#:winform半生不熟,webform垃圾,asp.net mvc 不會,wpf垃圾,silverlight不會,wcf,wf 不會,js半生不熟,html垃圾,linq不會,orm不會,連visual studio也只用3個快捷鍵,其中兩個還是ctrl+c,ctrl+v。

Flash:這個最奇葩,我應該是資深Flash程序員里唯一的一個不懂Flash的程序員。前一個Flash指的Flash平台,后一個Flash指的大眾心中的Flash(工具、動畫等)。

C/C++:不得不說,C/C++怎么操作字符串,怎么寫文件,我都不熟悉。

其實很多東西以前都會,都刨過,只是現在都忘記了,風流總被雨打風吹去

下面說說我挖的坑。

(1)C/C++是老早以前挖的地。學校里學了,學了后沒怎么用。后來有了幾個項目,我負責核心算法和性能優化,算是知道怎么用C/C++寫算法。

(2)Flash是挖的第二塊地。這是回小城市后挖的,這里我們可以辯證的看看貧礦與富礦。

富礦挖的人多,貧礦挖的人少:Flash這幾年在程序方面的需求比較多(相對C#和java來說很少),但是程序員很少,活好接。

彼之砒霜,我之蜜糖:我的方向是圖像,Flash正好是一個可Web演示的圖像平台,而我在小城市,我的客戶是全世界,我要向他們展示我的東東,沒有比Flash更好的平台了。

刨墳與鑽地:寫傳統Flash的,用的最多的是MovieClip吧,可是說實話,這個類我壓根沒用過。不用它,那么就是用Flex的了?Flex是Flash官方的RIA解決方案,我也就簡單用過。刨墳式的話,你得懂MovieClip或Flex或者兩個都懂,我是前者不懂,后者半生不熟,壓根就“沒入門”。鑽地式的話,我為啥要懂這些?我不做動畫,不用懂MovieClip。Flex做的東西尺寸大性能慢,尺寸大不適合網上傳播,性能慢給人影響不好。鑽地式的話,我只用會as3,再知道點數據綁定,然后寫出了自己用的UI框架,比Flex輕量,性能高,發布尺寸小,客戶很喜歡,自己用的也挺好的。此外,我還懂怎么在Flash里集成C++,Flash怎么和外界環境交互,這是和我業務相關的,Flash里集成C++可以復用算法和提高性能,而和外界交互牽扯到向外面暴露API,這樣,我就可以做Web應用賣了。為什么非要懂MovieClip和Flex呢?這兩個東西關我屁事。

(3)C#,從刨墳向鑽地的轉變。

C#從1.0版本就在用了。以前一直是刨墳式學刨墳式用,刨墳沒啥用,后來才改成鑽地式學和鑽地式用。現在會的用的主要還是.net 1.1 的那點功能,.net 2引入了泛型,但因為泛型不支持指針類型自己山寨了個模板機制在用,MS后來引入的那些東東,目前在用的就lambda表達式、擴展方法這兩個語法糖。還有就是寫點簡單的winform演示,連用WPF也是用winform方式用的,事件編程,不用綁定。為什么不學WPF呢?學習成本高,衡量了之下覺得不值得學,學習它,還不如去刷件流沙外套去。

現在用C#的主要場景就是用它來寫算法。這里就可以看出C#和Java的區別,C#有值類型,有指針,可以自己控制unmanaged memory的申請和釋放,這對圖像類應用太重要了。我們假設一幅圖像占1M內存,某算法的過程中要創建100次這般大小圖像再摧毀100次,在C#中用unmanaged memory 繞過gc輕松搞定,你要交給gc去搞的話,那就太不靠譜了。刨墳看的話,C#和Java都差不多,99%的基因一樣,但按照鑽地的角度,從我的坑來說,Java和C#完全就是猴子和人的區別。

為什么用C#寫算法不用C/C++呢?

(a)C#寫算法舒服,和用C++的心情就不一樣。算法這種東西靠靈感的。

(b)C#的開發效率要數倍於C++;

(c)C#適合快速迭代,這在進行算法預研非常重要;

(d)越來越多的桌面應用在改用C#開發,他們接受C#寫的算法。

以上三個坑,合起來又是一個大坑:

(a)用C#研究算法寫算法;

(b)如果客戶不接受C#版,比如移動開發,比如對方用的VB或者VC,或者要到移動平台上用,那么翻譯成C/C++版(一個算法代碼就那么多,而C# unsafe和C/C++很類似,翻譯工作量不大);

(c)將上面翻譯的C/C++版集成到Flash里面,這樣可以通過Web看效果;

(d)也可以自己用這些算法寫Web應用或者移動應用賣錢。

分工:

(a)決策角色C# —— 寫算法,速度快,煩心事少,舒心;

(b)執行角色 C/C++ —— 硬通貨,可以在最廣泛的平台上跑,包括Flash平台;

(c)演示角色 Flash —— 無人值守的在線演示

這個坑還要繼續向下挖。下一步打算定義一套C#子集功能,只用該子集功能寫算法,然后寫一個工具,能夠將該子集完備的翻譯成等價的C/C++代碼,有haxe這個先行者做借鑒,難度小很多。如果能實現的話,這就三位一體了。

這樣一來,核心競爭力一目了然。

這只是一個點的挖掘空間,還是非主流的,就可以挖這么多出來,可見.net可以挖掘的地方很多很多。

總結

門檻就是挖個坑的難度。.net 挖個坑難度很低,門檻確實低。並不要求什么都懂,只需要能夠開鍬挖你的坑就行了。繼續挖與其說難不難,不如問有沒有毅力和恆心。挖坑挖到底,還學毛的技術啊,有毛的技術可學啊,到了這個層面,只有一個詞可以形容了——達文西

wps_clip_image-27882


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM