对于语言的思考
前些日子,前端的显示的众多js脚本需要做一次合并压缩,这个任务是"踢"给我了.当时选择压缩技术的时候,选择了比较安全的YUI compressor .查了下这个压缩软件的API,众所周知的是,YUI这个压缩工具是基于java的,以jar包形式出现的.当时网上众多的例子中没有搜索到合并js文件的命令.说下我的应用场景吧.我们大概是想,写一个批处理去做压缩这件事情.
源代码更改后,执行下脚本程序就可以生成这样的压缩文件出来.比如在js文件夹下有xx1.js,xx2.js,...以此类推大约有10个左右的js文件.首先我们的js文件名称不是有规则的.我们需要合并的js也有一些其他的要求.比如jquery.min.js也在js文件夹下,而这个文件是不要求压缩的.这就带来很多的潜在问题.YUI 这个压缩工具好像没这个功能.当时我第一个反应就是写个java project 然后引入YUI的jar包,写个IO程序,再搞个yasuoList.xml或者随便个配置文件.把能想到的都搞进去.
到最后,我们没有用到java project ,也没有用太多的高深的命令,只是cmd命令下的copy /a命令,以二进制的形式将几个文件合并到指定文件中.这个合并的任务就解决了.YUI 压缩下合并后的文件,一切就完事大吉了.
突然想起来,很多年前,老师对我们说的,语言其实也就是个程序员跟电脑沟通的工具,比如java,可能是修大水管的老虎钳,让其拧一个小螺丝,肯定是没有问题的.但是真的需要这样的大号老虎钳吗?很明显,其实不需要的.只要用一个小号的螺丝刀,随便拧两下就扎实了.效果还要好的多些.
很多人本科毕业的人去报一些计算机的培训学校.专门去学习一门语言比如java,比如Object-C,都是冲着毕业以后,大学其实没有教什么给你这样的一个理念.包括培训机构都是如此宣传的,大学里面教的跟实际工作是完全脱轨的.只有去培训学校培训一门专门的语言才能拯救你的人生.很多还在大学的学生,学习一门语言,也是想着,这门语言的将来就业的前景如何.我觉得他们走了弯路.
其实之前我没有上大学,我上的是专科,专科的教育更像是是应工作教育,他们教语言,停留在语法,逻辑上面,以完成功能模块开发为主.教课书一般都是老师自己编的,一本书摊开来,40%以上都是核心代码.
我一直希望老师教的反而不是这些,而是相对枯燥的算法导论,数据结构,高等数学,物理学在计算机的应用体现,设计模式,数据库理论.很多工作的人认为这些其实不重要,你在工作中不会用到.认为这样的东西都是扯蛋的.
的确,在工作不会用到这样的东西,在工作最多的其实也就是for,if,这样的语句,然后写一条线性向下的逻辑代码.这就等于大多数公司的业务逻辑.最多再涉及到IO设计等等.这就是码农的工作.
其实大家有没有想过.比如,将for循环遍历排序的算法,优化成二分查找,或者快速排序算法,整个软件的性能,可能因为你的一个算法优化,整体性能提高了30%.再比如你在做一个业务逻辑可以抽象话成一个栈模型的时候,你是使用系统自支持的,进程阻塞等待,还是使用一个栈的模型去接受业务处理任务,然后推栈一个个任务无阻塞的处理?如果你这么做了,我觉得,你已经不是一个码农了.你已经是个优秀的程序员了.
前些日子同样看到的是,一种新的职业的诞生,算法设计程序员,为什么这样叫,因为他在公司的定位是结合业务逻辑,帮助公司设计优秀的算法,提升软件的整体性能.其实本来这就是程序员应该干的事情.但是由于大部分人的浮躁心理,一门心思的只想着语言,他的api是什么,如何用,很多公司面试的时候都是抱着java虚拟机原理解析,Think in java这样摆在神坛上的书去面试刚刚入门的程序员的.这只催生了更多的人在不了解的情况下,死记硬背这些知识.没有属于自己的理性思考.为什么会这样.
我想对于一门语言的理解,应该建立在切实的使用这样的语言编程了2年左右的编程.当然不是重复的编写类似的东西,而是经常使用这样的语言去解决日常工作的一些问题,才对这门语言有更深的了解,才可以跟面试官聊聊虚拟机原理,think in java这样的书籍,我想他们有属于自己的理解和见解,甚至使用的编程平台的不一致,也有不同的看法.比如linux跟Windows,他们在设计的时候就有这不一样的设计.我想再牛的虚拟机也没办法保证,同样的代码在这两种系统中的性能表现等是一致的.
为什么微软等公司在中国的公司叫研究院,而不是XX技术有限公司等等.这个跟程序员面对编程的态度是有很大的关联的.
推介大家有时间看看编程珠玑,代码之美.多了解数学,物理,化学在编程中的体现,很多时候会有意想不到的收获.而不是花大把的时间关注语言,比如第三方的框架,包,库等.那些东西,会用就可以了,或许有一天,不知不觉中,你已经可以写出比这些类库更加优秀的第三方类库了?不是吗?