讨论:如何选择语言,让你的软件流芳百世?
novakon2016/02/09软件综合 IP:广西
给几个指导性意见。
对“流芳百世”的定义标准很多,一个一个谈。


如果你的目的是让尽可能多的人,能够在尽可能多的场合使用你的软件产品,时下最好的选择是JavaScript。它可以在所有的浏览器中运行,界面通过html实现,学习门槛很低,效果也可以很好。
配合nodejs,你还可以用JavaScript撰写强大的服务器端程序,实现在线存取/查询功能,将你的软件产品变成互联网产品。


如果你的目的是写出超高性能的软件,在有限的CPU时间内完成尽可能多的任务,时下除了C/C++似乎没有什么其他选项。C语言能够在几乎所有的平台上编译。
(受益于google的V8引擎,目前浏览器端和服务器端的JavaScript都可以实现接近于原生C/C++的性能。除科学计算等需要超大量超高速数据处理的场合之外,JavaScript似乎是更好的选择)


如果你的目的是写出严格意义上没有bug,同时几乎不需要debug的软件,用来实现一些非常重要、非常危险的任务(比如核反应堆的控制),请考虑OCaml。
JavaScript无法显式定义类型;C语言允许使用与底层架构对应的几种类型(包括结构体、枚举)。前者导致极多的bug和极低的鲁棒性;后者因抽象层次不足而欠缺灵活。C++的对象并没有解决代码冗长的问题,对鲁棒性也毫无帮助。
OCaml则是一朵奇葩,它允许用简洁的语法为变量和参数定义灵活的类型,并且要求函数必须按照设定的类型覆盖输入参数的所有情况。比如某个输入参数是color,类似于 if(color=="red")return 5; 这样的程序在C语言里是完全合法的,但在OCaml里你将需要为color的所有可能输入值撰写处理代码,否则会导致编译错误。
好处是显然的:由于每个函数都能够处理所有的输入情况(否则无法编译),每个编译成功的OCaml程序,对于所有可能的输入,原则上不可能产生任何未定义的输出。换言之只要确保每一行代码正确,编译出来的程序就不会有隐藏bug。


使用的人数少,不等于这不是一门优秀的语言。OCaml是斯坦福的一门教学语言。真正的原因是,OCaml的行事风格,和人的思维方式相去甚远,既不像javascript那样喜欢“泛泛而谈”、“一概而论”,也不像C那样尊崇“百炼成钢”、“唯快不破”。然而正是这种反人类的风格,秒杀了人类思维的致命缺点(不严谨,缺逻辑)。


随笔漫谈,愿闻高见。
来自:计算机科学 / 软件综合
13
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
novakon 作者
8年3个月前 IP:广西
807943
如果要评价程序设计语言的三个特性,我认为分别是表达能力、执行性能、可维护性。
JavaScript拥有优异的表达能力(学得少,做得多,语法符合人思维模式),可接受的性能,糟糕的可维护性。为了防止犯错误,大家为JS开发了很多语法检查器,检查可能包含bug但被正常编译的情况。
C拥有优异的执行性能,可接受的可维护性(至少有类型检查),可接受的表达能力。
OCaml拥有优异的可维护性,可接受的表达能力,可接受的执行性能。

python、ruby往往被认为比JS具有更优异的表达能力,当然,也就意味着更恐怖的可维护性。

还是长者那句话:一个语言的命运啊,当然要靠自我奋斗,但是也要考虑历史的进程。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
8年3个月前 IP:广西
807952
有人说语言是服务于软件的性质,我觉得归根结底是服务于开发人员的思维方式。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
8年3个月前 IP:江西
807972
erlang/golang的高并发特性
lisp的函数式编程
这两个似乎还不能用其他语言代替
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
8年3个月前 修改于 8年3个月前 IP:浙江
807973
我比较推荐c/c++/java/c#等静态类型语言。即使是动态类型当道的领域,只要用的人足够多,应用足够广泛,一定会有人搞出静态类型的,比如typescript就是基于javascript的静态类型预编译语言。一个领域如果不出现静态类型语言,一定是因为用的人太少,应用不够广泛的原因。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
8年3个月前 IP:北京
807974
Bjarne Stroustrup说过
<code class="lang-">正如大多数其他新语言一样,Java的简洁性,一部分是幻觉,一部分是功能不完整。日后,Java必将大幅度(至少两到三倍地)增加其规模和复杂度,并采用很多实现相关的库。此乃每个商业上成功语言的必经之路,绝无例外。——以上预言是我2000年前说的, 现在,公元2012年,Java 7 的规范已经比 ISO C++11 的还要长那么一点点。</code>

这应该同样适用于JavaScript
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
8年3个月前 IP:广西
808012
关于OCaml部分,我更新一下:OCaml的主要能力是在设计阶段消灭由于人的疏忽导致的bug。也就是说OCaml程序可以存在有意而为之的bug。

对于一些超大规模、超高并行、超高可用性、但几乎铁定会存在bug的系统,Erlang是一个选择,它提供极强的容错性,设计者无法通过任何软件bug令系统崩溃。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金星凌日
8年3个月前 IP:陕西
808013
引用 warmonkey:
erlang/golang的高并发特性
lisp的函数式编程
这两个似乎还不能用其他语言代替
Lisp在函数式编程方面并非不可替代,Haskell才是最函数式的语言。
Lisp与其他语言最大的差别在于S-表达式。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
8年2个月前 IP:北京
808136
引用 novakon:
关于OCaml部分,我更新一下:OCaml的主要能力是在设计阶段消灭由于人的疏忽导致的bug。也就是说OCaml程序可以存在有意而为之的bug。

对于一些超大规模、超高并行、超高可用性、但几乎铁定会存在bug的系统,Erlang是一个...
说白了就是状态机喽?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
8年2个月前 IP:广西
808137
引用 1176764177:
说白了就是状态机喽?
显然不是嘛。可参考erlang创始人2003论文
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
8年2个月前 IP:北京
808138
引用 novakon:
显然不是嘛。可参考erlang创始人2003论文
看了下貌似做运算不用吧所有结果列出来
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暗夜幽灵
8年1个月前 IP:天津
813792
感觉上就是干啥活用啥语言,别拿编程语言干他不该干的活,比如c写网页,js写爬虫之类的事就行.
软件关键在于你做出的东西质量咋样
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan
7年6个月前 IP:四川
827100
话说OCaml被微软拿过来改成了F#。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
novakon
学者 机友 笔友
文章
1256
回复
8385
学术分
16
2008/03/29注册,2年3个月前活动

已走,勿送

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}