引发我这些思考的,是最近一篇InfoQ的文章:《语言约束和责任感,我们应该信赖谁?》,还有就是前两天我浅尝即止的scala语言。还有一些长久以来的思考片段。
1、以前我说过一句话:“语言是强框架,而框架是弱语言”。当时我提出这个思路的时候,其实还存在这一个误区,也就是认为很多框架级的设计,是可以引入语言层面的。这也就是我在设计DJ这个语言的时候,将许多TDD、DBC、AOP的思想引入语言层面的原因。当时我还举了java的exception的例子,证明将原本的开发中的常见问题,变成一种强制的语法限制,是一种明显的进步。
2、但是,现在的我,不再这么极端的赞同语言约束了,原因是我变成了越来越坚定的ruby程序员。在开发的过程中,我有时候不得不使用java的类库,但是,我完全不喜欢用java来调用它们,而是宁可使用jruby来做开发,很重要的一个原因,就是因为ruby不会强制要求我catch
exception。
3、引申一下,当年我说的话,还是对的,但是要进一步深化:词法的限制、语法的限制、类库的限制、框架的限制、编码约定、编程习惯。是多个不同层次的约束。一层比一层更加弱化。而解决各种不同的问题,需要在不同的层次,来设计约束。如果强行提高约束的“强度”,就会设计出很傲慢的语言或者框架来。
4、打个比方,代码缩进是一个很好的编程习惯,但是像python那样,将缩进要求变成语法强制规定,就是过了。
5、再打个比方,处理exception是一个良好的编程习惯,但是并非所有的exception都需要处理,java规定,
不处理异常,就不能通过编译,就是过了。
6、再说说语法设施的问题,像lisp那样的语言,属于极简主义,几乎全部的语法设施,就是左右圆括号和逗号。而像我们现在习惯的方括号、花括号、冒号、=>、->、::等等则一概没有。这样就会造成lisp的程序阅读非常吃力,满屏的圆括号,让人迅速的就晕掉了。另一方面,我最近在看的scala,则定义了太多的语法设施。在看起来的时候,也很容易眼晕。在这方面,我觉得ruby做到了很好的折中。
7、今天看到云风的一篇blog《捣糨糊》,谈的是一个过度设计的问题,C++的程序员,很容易将那些先进的东西,用到简单的事情上,当然,java程序员也是一样。而在我看来,有很多种需求的情况,有些情况非常适合用过程式思维来解决,有些非常适合以OO的方式来思考,有些非常适合以函数式的方式来思考,还有些问题,只要精通正则表达式,就是几行代码的事情。而一个好的语言,就是妥善的,不别扭的支持各种不同的编程思维模式。当然,ruby在这方面,我觉得的确做得很棒。
8、前两天gigix发了一篇blog《对象健身操:拒绝else》,还有在InfoQ的几篇文章,似乎还要向if、for宣战。我的看法是:反对if行动:
http://tr.im/syd1 反对for行动: http://tr.im/syd7 拒绝else: http://tr.im/sydk
//面向对象之“三反五反”?关键字都是基础设置,如何用在程序员自己!好的语言,要支持各种编程思维模式,而好的程序员,则要会善用各种不同的编程思维模式来解决不同领域的问题,面对任何问题,都只会挥舞一把榔头,毕竟是欠缺火候的。
9、每一种语言,都有其特殊与特长,好的程序员,耍刀像刀,耍剑像剑。当然,不是说所有的语言都是一样好的,我毕竟还是更喜欢ruby一些。可以拿来像刀一样耍,也可以像剑一样耍,这个感觉很棒。
分享到:
相关推荐
【标题】:“基于nlp自然语言识别词云联想”是一个大学生课程设计项目,它利用了自然语言处理(NLP)技术来实现词云联想。词云是一种数据可视化方式,通过以不同大小的词语来表示文本数据中的关键词频率,而联想功能...
【压缩包子文件的文件名称列表】中,"java联想(中文).chm" 可能是一个包含Java编程语言与联想官网源码相关教程或文档的Microsoft帮助文件。CHM格式是HTML帮助的压缩版,通常用于存储技术文档。用户可以从中查找API...
安卓藏文联想输入法是专为安卓设备设计的一款输入法应用,旨在提供高效、便捷的藏文字输入体验。这款输入法结合了先进的联想技术,能够根据用户输入的前几个字符,预测并显示可能的完整词汇,极大地提高了输入速度和...
2. 信息检索:在信息检索系统中,BAM可以通过双向联想帮助用户快速找到相关的信息。 3. 自然语言处理:在理解和生成自然语言时,BAM可以捕捉词汇和短语之间的语义关系。 4. 控制系统:BAM可用于设计自适应控制系统,...
6. **多语言支持**:对于全球化的搜索引擎,需要支持多种语言的搜索联想,这就需要处理不同语言的分词规则和语法特性。 7. **性能优化**:由于搜索联想功能需要在短时间内处理大量数据,所以性能优化至关重要。这...
联想7215打印驱动是针对联想品牌的一款打印机型号——联想LJ7215所设计的专用驱动程序。在计算机与打印机之间建立有效通信的过程中,驱动程序扮演着至关重要的角色。它允许操作系统识别和控制硬件设备,确保硬件能够...
总的来说,联想输入法的实现涉及了C#语言、WPF框架和动态链接库技术,通过这些技术的综合运用,实现了高效的中文输入体验。开发者需要理解C#的编程基础,熟悉WPF的UI设计,以及掌握如何使用和创建DLL库,才能有效地...
在本项目中,“Lenovo模仿联想官网html+css.zip”是一个包含HTML和CSS文件的压缩包,用于重现联想官方网站的布局和设计。HTML(HyperText Markup Language)是用于创建网页的标准标记语言,而CSS(Cascading Style ...
开发者需要熟练掌握编程语言,如JavaScript、Java或Python,以及相关框架和库,来构建这样的功能。 总的来说,"联想功能插件"涉及的技术包括但不限于数据处理、算法设计、用户行为分析和前端交互设计。通过分析和...
联想KS-9271键盘驱动则是专门为这款键盘设计的软件组件,它确保Windows操作系统能够正确地识别和配置键盘,提供完整的按键功能,包括多媒体快捷键等特殊功能。 描述中提到的“支持win10/7”意味着这款驱动程序兼容...
7. **性能考虑**:在设计联想提示功能时,要考虑到性能和效率问题。例如,对数据库查询进行优化,使用索引加速,或者预计算联想词,减轻实时查询的压力。 通过上述步骤,我们可以实现一个基本的搜索输入框关键词...
联想服务器SR650,型号7X06,是一款专为高效能、高密度计算和存储优化设计的双插槽机架式服务器。它在企业数据中心、云服务提供商以及大型企业环境中都有着广泛的应用。这款服务器的强大性能和可靠性,离不开一套...
【联想移动保险箱】是一款专为联想移动U盘设计的管理工具,旨在提供安全、便捷的文件存储和管理服务。这款软件集成了多种实用功能,旨在优化用户在U盘上的数据操作体验,确保数据的安全性。 一、核心功能 1. 文件...
【智慧联想浏览器5.0】是一款专为联想用户设计的早期浏览器版本,相较于其后续的6.0版本,它保留了一些独特的特性和功能。这款浏览器以其便捷性、易用性和定制化服务在用户中获得了良好的口碑。以下是关于这款浏览器...
这个函数可能涉及到字符串匹配算法,如Trie树、动态规划等,用于快速找出与输入关键词相关的联想词汇。同时,JavaScript还可以用`innerHTML`或`textContent`属性来修改HTML元素的内容,从而实现实时显示查询结果。 ...
这些驱动程序是设备驱动软件,它们翻译了计算机发送的打印指令,并将它们转化为打印机可以理解的语言,使得打印过程能够正常进行。 2. **M7455DNF打印机**: 联想M7455DNF是一款多功能激光打印机,具备打印、扫描...
本文将深入探讨联想官方蓝色水晶鼠标指针这一主题,旨在提供关于鼠标指针设计、使用和优化的相关知识。 首先,我们来理解鼠标的指针。在计算机操作系统中,鼠标指针是一种图形用户界面元素,它代表了用户的交互焦点...
除此之外,手册还会涵盖联想的品牌语言和口号的使用规范,以及如何在特定场合下进行品牌延伸设计,如赞助活动、展览展示等。这些都体现了联想对品牌管理和传播的专业性和严谨性。 总的来说,《联想品牌手册》是企业...
在本次调研活动中,消费者对联想笔记本电脑外观设计比较满意,但有部分顾客对联想 笔记本的外观设计提出了有些的看法,比如在设计和色彩方面提出力求更新,突出其个 性的建议等。 消费者主要是通过商业广告及他人...
这个特定的BIOS更新可能包含了一些修正和改进,特别是针对联想电脑在安装64位Windows 7或Windows 10时遇到的问题。 描述中提到的“解决无法安装64位 Win7 Win10的问题”,暗示了某些联想用户在尝试安装这些操作系统...