查看原文
其他

我和编程语言的爱恨情仇(下)

2016-08-05 刘欣 码农翻身
前言: 《我和编程语言的爱恨情仇(上)》发布以后,下集久久不出,很多人都抱怨了, 让大家久等了。 
这一集主要讲讲我和Java, Ruby 的故事。
1赖以谋生的Java 
我第一次听到Java是在大学宿舍里, 精瘦的室友躺在上铺在翻一本可能是图书馆借来的Java书,  突然间大叫一声“原来Java就是虚拟机啊”。
不知道为啥, 这句话对身为微软粉的我刺激颇大, 久久的回荡在脑海里, 引导着我走向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 做了很多项目以后,  最后变成了赖以谋生的工具,说实话,这个工具真心不错。 
2优雅的Ruby 
2005年,正沉浸在Java的幸福感当中的时候,看到了一篇英文文章, 说的是有个新语言开发速度是Java 的10倍 ,  这简直是当头一棒,我赶紧下载文章并且打印出来,拿回去仔细研读。 
这是第一次接触Ruby, 确切的说是Ruby on Rails (简称RoR) 。  
由于不懂Ruby,  文章看起来很吃力, 只是记住了一个命令: scaffold (现在应该不用了),   可以通过一个命令分分钟生成一个Web项目的绝大部分MVC模板代码, 包括简单的CRUD 和数据库表的建立, 直接可以运行, 然后码农去修改、补充业务逻辑就可以了。
相比Java , 既需要把框架搭建起来,还需要埋头写View层, 业务逻辑层,数据存取逻辑, 想从头把一个CRUD运行起来,颇费一番周折, 显得比较笨拙,比RoR的慢好多。
RoR这种紧密的集成能力是J2EE的技术栈相形见绌, 当时流行这么一张图, 非常的形象:
这两本Ruby 的书就是 《Programming Ruby》,《应用Rails进行敏捷Web开发》, 非常经典 。
读过以后我才慢慢的体会到了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
公众号:码农翻身“码农翻身”公众号由工作15年的前IBM架构师创建,分享编程和职场的经验教训。

推荐一个叫掘金的开发者社区,很多技术干货,  我的文章也会在这里分享 : 

掘金是一个高质量的技术社区,从 Swift 到 React Native,性能优化到开源类库,让你不错过互联网开发的每一个技术干货。长按图片二维码识别或者各大应用市场搜索「掘金」,技术干货尽在掌握中。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存