不止在web设计领域,在所有编程之中都存在某种思维定势。可以这么描述这种思维定势:你学到的、掌握的越多,你能解决的问题就越多,你所掌握的技能的应用场景也就越多。这看起来理所当然,除非你在技术上钻研的更深。没错,学习新的语言和新的工具并广泛使用它总不是坏事。但往往会进入一个误区,就是,因为你了解它,所以你使用它,而不是因为你所掌握的技能和工具是“最适合”你的业务的。
我们来看一下Ajax,关于Ajax已经有太多太多的讨论了。我们知道,Ajax为无刷新的快速查询请求提供了可靠的解决方案。而如今因为Ajax的滥用以至于过分替代了传统的表单提交。我们遇到一个新技术、学习它、掌握它、应用它,然后“滥用它”。毕竟很多业务场景仅仅需要传统的表单提交,而不需要Ajax。说起来简单,实际上还有成千上万的滥用Ajax的案例场景,仅仅因为某个应用的开发工程师对Ajax的盲目尊崇。
同样的,Node也面临这样一个问题。当你初识Node发现它的种种好处,就想到处使用它。就会一股脑的将PHP或Perl程序换成Node。结果呢?糟透了。其实你已经害上了强迫症,总是想将Node用于有违其设计初衷的场景中:使用JavaScript提交大量数据给Node,或者通过Node返回给JavaScript大量的JSON数据,交给前端去作eval(),或者干脆使用Node作一个文件服务器用以返回HTML页面或做HTTP重定向。
但这些场景均不是Node所擅长的。Node更擅长处理体积小的请求以及基于事件的I/O,使用Node解决客户端和服务器之间的快速沟通,使用表单提交将大量的数据发送给服务器,使用PHP和Perl来处理重型数据库操作以及动态HTML页面的生成。使用Node运行于服务器端来处理体积不大的请求。不管是采用Rails还是Spring以及各式各样的服务端容器,只要按需索取即可。一定要明白你需要解决的问题是什么,基于此采取最佳解决方案,而不是基于你当下所掌握的技能来解决遇到的问题。
还有最后一点需要注意,当你越来越深入你的编程时,你会发现你不必每个工具、API和所使用的框架都达到精通。将刀用在刀刃上,不要将锤子当成钻头来使用。了解每个工具所适用的场景和能解决的问题,然后找到这个工具的最适合的应用场景。如果你想变成超人式的通才(程序员往往什么都想知道),你离“专家”也就越来越远,所谓专家,就是指在一两个方面达到非常精通。当然,每个老板都希望能找到超人式的通才,但这种人往往可遇不可求。所以我们要成为真正的专家,除了有所精通,还要克服某种思维定势。