裘千丈还是裘三尺——用挖矿的比喻说平台与门槛

先摆明观点:强烈反对 .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

posted @ 2012-11-28 15:09  xiaotie  阅读(11245)  评论(118编辑  收藏  举报