有过一段时间编程或使用计算机经验的童鞋可能会发现一个问题。就是计算机技术在快速变化,而反映到软件开发上,也是一样的。开发语言也在变化和进化。类库框架也在演化,甚至连IDE也不再是古老的记事本了.
为什么会这样呢?原因很简单,计算机科学是一门新生事物,从诞生到现在才短短几十年.我们查下资料会发现,最早诞生的编程语言Fortran,1966年才标准化,这个年纪甚至比大多数程序员的父母还年轻.
现在比较流行的C#和JAVA,JAVA算是哥哥,是1995年出生的,是标准90后,今年刚成年,18岁了.小弟弟C#是2000年生的,是00后,是个只有13岁的小屁孩.
由此可见,短短时间内发展出来的技术,指望他们很成熟,一次到位是不现实的,就象看小孩子一样,几年不见又长个了,性格脾气又变了.而其它行业的一些技术和规范,长的可能有几千年的历史,短的也有几百年了.很多东西可能在你有生之年,也见不到多大变化.
编程语言还在快速发展变化之中,带来的结果就是你可能刚用上不久,就会发现它有这样或那样的不方便,功能限制.代码重复等.所以人们为了复用,又在语言的基础上形成类库,类库再庞大点就是框架,框架再庞大点就是平台(当然这个表达不一点准确).
然而随着复用的增加,库和框架迅速膨胀,变得复杂,难于使用.这又反过来推动,推出更具有表达性的语言,以减少对库的依赖.编程语言和库就这样螺旋式上升演化.
当然,这种快速的演化,给程序员带来了一些困惑,甚至会出现这么一种情况,你还没有来得及适应新的变化,它居然就过时了.更新的语法,更新的库,更新的框架出现了.
面对这种情况要怎么处理?如果减少学习投入,达到高效.我们可以观察下,语言和库(框架或平台)的差别.以下为减化,对库,框架,平台统称API.
我们以C#和.Net平台为例.C#的版本,会不断引入关键字,比如泛型<>, 比如Lambda =>, 这种关键字的引入,其实就是引入了重要的表达概念,同时写出的代码也增加了"词汇".然后我们再看API, 每一个API调用,也是在引入一个功能,概念或"词汇", 比如Console.Write, 比如List,它们都增加了最初这个编程语言所能表达的深度和广度.
这里面还是有些重要差别,语言的进化相对还是缓慢的,是按个位数顶多十位数进化的, 而API的进化快,,动辄千位数万位数.语言更有表达性,API更有替代性.语言更通用.比如Lambda =>, 你可以用在更多地方,而API范围较窄,比如Console.Write主要用于控制台输出显示.
另一个重大差别是,语言具有空间复杂度,大多数关键字和概念会产生交叉,复杂度是按几何级数增长的.而API的复杂度大多限制在了一个层面上,复杂度一般是按代数级数增长的.
由此可见,在编程过程中,应该对语言和API要有所区别,在使用上也应该这样,要重言语,轻API,语言有的功能,就没必要再用API,对API的使用应当够用即可.在学习过程中,应该多重视语言本身,对于API,其实使用很简单,一般都是一致性的类或函数调用.差别在于它们能完成的任务能解决的问题,所以对API主要要学习他们能解决的问题范围,再根据工作需要有所侧重,用于暂时用不上的,没必要花太多精力.
纵观各技术论坛门户,对语言本身探讨较少,对API的使用充斥满各个角落,当然原因是一般语言语法有限,而库,框架,平台,产品,多如牛毛,浩如烟海,而在工作中,不得不用各种库,框架,平台,产品,从而造成了迷失.感觉要学习掌握的太多,量太大,耗费了无数程序员的时间和精力.
当然以上结论仅仅代表本人的思考,仅供参考.