返回介绍

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

发布于 2025-01-22 00:38:47 字数 3337 浏览 0 评论 0 收藏 0

前言: 《我和编程语言的爱恨情仇(上) 》发布以后,下集久久不出,很多人都抱怨了, 让大家久等了。

这一集主要讲讲我和 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 在云端的系统级编程中也有应用啊。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文