我的技术十年(3) - 开发语言
软件开发语言,体现的是作者软件开发及设计的思想。开发语言派系林立,但是又都自成体系。
语言有很多层次分类,以下仅从前后端角度列举我常用的语言或者框架.
后端
Java
Java是个老兵,但也不断的在冒新芽。强大的工业级开源社区保证了Java体系的健壮,诞生了一大批优良的框架,如Spring, Hadoop。
我经历的项目大概70%以上都有Java的参与。
Java语言在传统后端语言中算是入门比较简单,开发比较省事的类型。但是其强大的虚拟机同时也是资源消耗大户,对于小型、快速开发类型的项目并不一定合适,
Python
Python是门相当强大的小众语言,其支持命令式、面向对象、函数式编程的特点使其应用相当广泛。
Python很多情况可代替shell脚本,自动运维方面不少开源框架都是Python写的。
正式因为以上原因,我主要用Python来做些脚本化程序,如抓数据、做自动化打包、自动化发布、服务器初始化等。
Ruby
Ruby和Python地位类似,但是更强调OOP。著名的Ruby on Rails框架影响了一大批后来者。
由于很多开源Web软件都是Ruby写的,如gitlab,所以搞懂Ruby对这些软件的使用大有裨益。
Nodejs
把JS这种原本设计简陋的前端语言用在后端,之前是没人敢想的事情。然而Chrome的V8引擎出来后有人想到了这个事情,而且效果出人意料。
后端的Nodejs默认还是单进程单线程的事件处理机制,但是类似Nginx的事件机制,处理效率相当高。
目前的Nodejs社区比很多年前的Java社区还要热,不管是前段后端,甚至完全没有经验的人都可以参与进去,发布自已的node组件。
同时Nodejs改变了前几年的发展缓慢做法,新特性、标准的不断引入让其有了更强大的底气。
我用Nodejs写过好几个中小项目,做API服务、渲染网页等。Promise、Generator等异步编程方式的引入让异步代码书写友好很多。
PHP
提到PHP,大概很多人想到的就是WordPress等一众写博客、开网站的开源软件。
虽然多进程模型让PHP处理高并发并不像其他后端语言那么高效,但是对于一般中小网站服务这种场景确实足够了。
当然,像facebook那种从头写个PHP虚拟机来提升PHP能力的案例也有,但并不具有普遍性。
我用PHP也是因为公司用到了一款OC电商软件,甚至最后重写来提升其不足之处。
PHP优点很明显,缺点也很明显。不过没必要太较真,取其精华,去其糟粕就可以了。
脚本
常用的脚本有windows的批处理脚本和linux的shell脚本。
相对来说,shell脚本要强大的多,也是我的最爱。
当然,其实服务端运维、自动化处理等很多场景是必须要编写shell脚本的,所以不爱也不行 ㄟ( ▔, ▔ )ㄏ
前端
Extjs/Dojo
Extjs和Dojo都是很强大的前端JS组件库,适合重逻辑、交互的后台系统。
Extjs是我最早接触的前端JS框架,并用其实现了几个强大的后台管理系统。其组件化、OOP思想在那时候还是比较有特色的。
jQuery
jQuery追求简单高效解决问题。链式写法,统一的作用域,方便的插件书写机制等,无不透露出其设计思想。
由于以上原因,jQuery在前端社区中相当普及。各种开源小插件基本能满足绝大部分网站开发需求。
当然,也是由于jQuery的入门简单,包括插件机制其实也比较简陋,所以容易造成各个插件产生冲突。
bootstrap
前端的UI库相当多,bootstrap是其中的典型代表之一。是快速构原型网站的绝佳库。
angularjs1/2
虽然作为实验项目启动,但是angularjs 1的设计思想确实影响了一堆前端框架。双向绑定相比jQuery等的dom查询、修改做法绝对能实现指数级的效率提升。
但是angularjs1的基础设计造成了其性能一直有问题。
于是angular团队提出了angularjs2的开发计划,优先考虑性能问题,拥抱最新js标准(支持es6/TypeScript),通过webpack高效合并压缩,并解决浏览器兼容性问题。
虽然angular2不兼容angular1,可能导致之前在angular1上的投资打水漂,但是新框架的高起点、高标准肯定会给后续的采用者带来较长期的红利。
ionic1/2
ionic是基于angular基础上开发的移动端UI框架。由于完全采用原生语言开发APP成本高昂,以ionic为代表的高质量框架很瘦欢迎。
ionic2在迁移到angular2上后,配以全新的ionic-native插件生态,以一个更强大的姿态展现给了开发者。
vuejs1/2
vuejs可以看做国内的angularjs/reactjs,其设计思想也基本参考这些国外流行框架。
可能因为是国人打造的,而且质量也不错,所以目前国内还蛮流行。
reactjs/react-native
reactjs推出堪称里程碑式的事件。虚拟dom这种设计真的是很天才。
reactjs作为性能优先的前端框架,加上没有造太多概念,而是拥抱js标准,所以入门很快,目前使用的个人和公司都很多。
react-native是虚拟dom设计之后自然延伸到原生APP开发的产物。
只写JS,但是拥有媲美原生开发的性能,相当美好。
grunt, gulp
两个流行的前端构建工具,可以写自动化的前端处理流程,如压缩,编译less、sass等。
gulp相比grunt,使用了管道的概念来更方便的组织任务流,相对更易编程实现。
seajs/requirejs -> browserify/webpack
seajs/requirejs是前一代前端代码模块化的工具。其CMD/AMD依赖声明方式可以很有效的理清前端模块逻辑。
browserify/webpack的出现带来了更智能的方案,可以实现代码预编译,正式环境只用跑处理过的压缩代码,可以运行得更快更兼容。webpack相对于browserify,可以更好的使用nodejs的资源和规范统一前后端。