【无中生有】---1---技术选型
在构建一个系统时,需要考虑的根本性因素就是所使用的技术的成本。而相关的成本因素都可以通过一定设定条件转换为金钱成本,包括时间、人力等几个主要成本因素。
不同的开发主体或者系统应用主体对不同成本因素的关注点不同的。
比如个人开发者一般比较关注金钱成本,倾向于使用能节省金钱的方案;而组织机构在预算充足情况下更倾向于使用能节省时间成本的方案。这只是技术选型考虑的大致两个成本选择倾向,进一步对成本因素进行分析,技术的支持度,人才培养的成本,系统维护成本则是需要考虑的三个重要维度。
正常情况下的项目,无论何种开发主体,人才培养成本(或者说学习成本)是首先需要注意的。一般来说完成一个功能通常会有多种选择,比如web系统,jsp的方案、asp.net的方案,perl或者phtyon的方案,都能完成。这时选择自己熟悉的语言技术体系显然是一个很明智的选择。跟随所谓的技术流行风尚,去争论什么语言的好坏,选择流行而非自己熟悉的技术去做开发显然不是理智的行为。
有些技术在初期开发使用时是很节省时间成本并且学习成本也很低,看例如hadoop、nosql等开源技术就具有很明显的此类特征。但是开源产品其实往往是最昂贵的,尤其是当你是在没有取得商业授权缺乏开发商的技术支持时,因为这时候开发者往往需要去深入了解系统的设计与实现,以便在发生问题时进行正确的维护--------当然,社区里也有大量的经验,不过当你的问题是第一次出现在社区中时就惨了。所以在初期昂贵的商业方案在后期往往是最易于运维的,开发商的售后支持人员往往是能给与你相应的支持。不过你也可以通过使用稳定版的开源产品来解决找个问题,追求技术的时尚并不一定总带给你好处,尤其是未经试运行时。
这又引伸出一个问题,技术的支持度。在IT领域总有几个语言的薪水高的让你恨不得立刻投身其中。然而仔细分析之后你却会发现问题,这些语言的雇主往往就那么几家,一旦脱离了那个产业圈子之后,你所学的技术就成了屠龙术,只是却找不到龙了。流行化的技术虽然无法让你鹤立鸡群,但是却能给予你的产品一定的安全性,以为流行化的技术许多的问题往往都能在社区中找打答案或者有相应厂商支持。
比如开源化的java,社区支持和厂商支持都很好。而以前比较的封闭的.net技术则有微软的大力支持。所以热衷于使用一些古董级语言进行开发的人员,往往会发现许多基础性的功能都需要自己造出来。而java、c#这类的语言,则有许多东西可以直接利用,很利于开发。
而分布式系统使用哪一种技术更有优势?此处只比较java 和C#。
1. 有许多优秀的开源项目都是java开发的,即使有C#版本的,往往也是采用语言翻译器转换的版本,所以如果系统使用的是java语言,则系统间的调用比较容易。
2. C#在windows上的版本,net的类库支持则是一个大亮点,避免了java类库许多基础功能不足的问题,但是此问题往往可以通过java类库积累或者第三方类库来避免。
3. 跨平台性,这个在mono出来以前是C#的一个死穴,C#的程序员总是被嘲笑为windows的程序员,不过,随着mono的快速发展,这个问题很快就会消失了,微软已经加大了力度来开源net。
4. C#的语法糖很多,适合比较懒的开发同学。
就目前形势来讲,这两个有些渊源的语言,已经越来越像了,很难分出伯仲了,不过受到大量优秀开源产品和优秀框架的支持,java还是更胜一筹。
由于以前的技术积累以C#为主,所以,随后的论述将以C#实现为主,在涉及到了实现有较大差异的地方则会对C#和java分开进行论述。
此系列以技术积累一般(没有超级牛人)的组织为目标,数据量根本就不打算向阿里和企鹅的方向去想,设计目标够用就行,没成为GCC流传度软件那样的妄想。
所以,如果不是那种会害人产生经济损失或者技术上确实太丢人的bug,希望大家拿砖轻砸。
版权声明:本文为博主原创文章,未经博主允许不得转载。