其他
我和编程语言的爱恨情仇(下)
这一集主要讲讲我和Java, Ruby 的故事。
不知道为啥, 这句话对身为微软粉的我刺激颇大, 久久的回荡在脑海里, 引导着我走向Java之路。
其实作为备受C++蹂躏的程序员,第一次来到Java世界,感动的简直要哭了:
语法如此简单!
没有指针 !
不用自己管理内存 !
还有强大的内置类库可用啊, 看看这String类这么多好用的方法。
还有这完全不用考虑容量大小的List,Map, Stack 集合框架。
还有这无数开源的小工具,再加上这庞大的生态系统。
作为Java程序员, 我感到了码农翻身做主人的幸福感。
被Java打了鸡血以后, 我开始一头扎入《Effective Java》, 《Java编程思想》,《Java核心技术》, 《深入Java虚拟机》,《expert one-on-one J2EE Development without EJB》等书籍当中。
这一次吸取了C++的教训, 不仅看书, 还浏览JUnit源码,Spring源码, Hsqldb源码, Jive的源码, 再加上工作中写的大量代码, 终于可以得心应手的使用Java来编程了。
我最早用Java 开发Applet, 对,就是那个运行在浏览器中的小玩意, 但是很快就发现这东西在一个内网里, 让自己人用用还行, 千万不能面向互联网用户。 一是速度慢, 二是丑,加载等待的时候有个巨丑的灰色区域, 用Java 的 Swing/AWT写出的界面实在是不敢恭维, 更不要说和那些美轮美奂的Web页面相比了。
后来就明白,Java 最适合的还是后端的编程,别让它干那些它不想干,也干不好的事情, 例如桌面编程。
我自己也不太清楚为什么, 对于编写界面好像天生有一种抵触, 也可能是大学自学了一点photoshop , 把我给吓住了:一点简单的特效都做不出来。
从此明白了做一个好的设计对我这等土包子太难了,那是有艺术细胞的人应该做的事情, 所以我一头扎入了后端的世界, 抛弃了界面,从此乐此不彼。
后端编程不仅仅是SSH框架, 还有很多事情需要处理, 像负载均衡,灾难恢复,缓存,消息,分布式,数据备份,搜索等等, 这慢慢的引导着我走向架构之路。
在新技术层出不穷的IT业,每天恨不得出现100个新框架, 后端的技术相对还是稳定的, 这些知识介于业务层和系统层之间,值得发掘和积累。
有人戏称,用Java 编程就像穿着西装,正襟危坐,一本正经的敲代码,说的是Java语言本身有些“守旧”的传统, 为了保持向后的兼容,牺牲了灵活性。
很多时候你用Java 解决一个问题,基本上只有那么一种方案, 照着规矩做就是了, 不像Ruby ,对一个问题有各种解决方案, 有时候得靠项目的约定来规范下。 这么说来Java 本身的特点也导致了适合大型项目的团队合作开发。
Java 踏准了互联网的浪潮,迅速发展, 让人没想到的是竟然还入侵了移动开发领域, 现在Java 是第一大编程语言,并且已经保持了很多年了, 语言成熟,工具成熟,社区成熟, 我估计这个势头将来还要继续保持下去。
对我而言,用Java 做了很多项目以后, 最后变成了赖以谋生的工具,说实话,这个工具真心不错。
这是第一次接触Ruby, 确切的说是Ruby on Rails (简称RoR) 。
由于不懂Ruby, 文章看起来很吃力, 只是记住了一个命令: scaffold (现在应该不用了), 可以通过一个命令分分钟生成一个Web项目的绝大部分MVC模板代码, 包括简单的CRUD 和数据库表的建立, 直接可以运行, 然后码农去修改、补充业务逻辑就可以了。
相比Java , 既需要把框架搭建起来,还需要埋头写View层, 业务逻辑层,数据存取逻辑, 想从头把一个CRUD运行起来,颇费一番周折, 显得比较笨拙,比RoR的慢好多。
RoR这种紧密的集成能力是J2EE的技术栈相形见绌, 当时流行这么一张图, 非常的形象:
读过以后我才慢慢的体会到了Ruby这们动态语言的好处和它惊人的开发效率, 一言蔽之: RoR 总结了Web开发领域的一些最佳实践, 简直就是Web开发的DSL(领域特定语言) !
码农翻身注:限于篇幅,我会专门写一篇文章描述下DSL, 简单类比的话, SQL就是对数据库操作的DSL , 没有SQL, 码农需要自己直接去读数据库的表,写程序对两个表做关联join, 有了SQL ,只需要声明性的告诉数据库:把这个两个表按某某字段join起来就可以了
RoR利用Ruby 语言近乎“变态”的灵活性, 以及“约定重于配置”这样的实践, 把Web开发简化到了极致。
可是动态性是一把双刃剑, 由于缺乏编译器的类型检查, Ruby的很多错误只能在运行期暴露出来 ,Java 的IDE (像Eclipse)提供的重构的能力, Ruby 就很难做到。
在修改Ruby代码的时候,似乎又回到了提醒吊胆的时代,生怕代码改动带来意想不到的结果。
由于缺乏静态检查, 只好把运行时检查给写好了,这就是单元测试, 对Ruby来说,测试代码量和业务代码量1 比 1 是非常正常的事情, 有的甚至是2:1 。
你给我一段没有单元测试的功能代码, 我还真不敢贸然动手去改。
动态语言都有这样的劣势, 但我们主要还是要利用他们的优点,让我们的编程生活更加舒适,不是吗?
有人会说Ruby 性能不佳,确实是这样,如果把视野放的宽广一点,其实对一个系统来说,性能的瓶颈不再于计算,而在于IO ,像数据库,网络等。 把架构设计好了,其实Ruby系统的整体性能也不错。
我个人非常喜欢Ruby , 用它写出的代码简洁,优雅,富有表现力。
这是一门能带来乐趣的语言,非常值得学习。
哦对了, 著名的开源云服务平台Cloud Foundry 就是用Ruby 写的, IBM基于Cloud Foundry 架构了BlueMix 这个PaaS的云服务, 是公司主推的战略产品 , 你看Ruby 在云端的系统级编程中也有应用啊。
(完)
你看到的只是冰山一角, 更多精彩文章,尽在“码农翻身” 微信公众号, 回复消息"m"或"目录" 查看更多文章
有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan QQ: 14703250
掘金是一个高质量的技术社区,从 Swift 到 React Native,性能优化到开源类库,让你不错过互联网开发的每一个技术干货。长按图片二维码识别或者各大应用市场搜索「掘金」,技术干货尽在掌握中。