| 赞 | 0 |
| VIP | 6 |
| 好人卡 | 8 |
| 积分 | 1 |
| 经验 | 47949 |
| 最后登录 | 2020-5-5 |
| 在线时间 | 705 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 60
- 在线时间
- 705 小时
- 注册时间
- 2007-12-23
- 帖子
- 874
|
本帖最后由 gonglinyuan 于 2016-4-17 10:52 编辑
对不起啊,前面因为是点评有200字节限制(还是UTF-8编码的200字节,所以也就六七十个汉字),所以很多事情都没有讲清楚。
首先我是高中生,没有搞过ACM,只参加过高中生级别的的学科竞赛,见识当然不如LZ。而且这种比赛对语言要求不高,虽然用的是C++但是从头到尾其实只会用到C语言的那些基本语法,甚至指针都很少碰(因为查错麻烦)。因此我是一点都不依赖IDE的(如果这个project所有代码都是我自己写的,也用不着什么IDE),因为比赛的时候根本没有什么正常的IDE可以用,基本都用VIM等普通编辑器(还没有插件),查错也用命令行的GDB;甚至有人用没有语法高亮和自动缩进的编辑器(比如notepad)、全靠看代码静态查错找BUG,照样能拿奖牌;因此您应该可以看出这种竞赛和编程语言几乎完全无关了。因此我真正学习语言的时间也就1年不到,所以我们应该是站在同一条起跑线上的,我也没有理由“抵触新知识”、“固步自封”、“带着偏见和预设立场看事情”。
我的看法完全来自个人的体验,表达的也是个人的观点。因为像我们这样的人没有资格评判一个语言的好坏——连Linus Torvalds看待语言问题都很敏感偏激,更何况我们呢。后面我说的也是自己的个人观点。
1. Java。Java我算是学得比较系统扎实的。写Java代码的量也比较大,如果包括注释、JavaDoc、和deprecated的内容,几个Project加起来应该已经有1M字节了。我写Java,先是SublimeText,然后转到Eclipse,后来别人在我面前拼命鼓吹IntelliJ Idea,我就转到了Idea。以前从来看不起IDE的我因此发生了改变,毕竟在学习C和C++的时候我从没有见到过这么好用的IDE,就算是用Visual Studio写C++,感觉也很别扭,总觉得VS不懂我内心在想什么。而Idea给我的感觉就是掌握了读心术。但其实Idea的好用和语言是分不开的。比如Java有严格的命名规范,所以Idea在定义变量的时候会“知道”你会给这个变量起什么名字,然后帮你补全;因为Java比较重视类型,所以Idea能够提醒程序员哪个转换是unchecked的,然后建议你加上@SuppressWarning("unchecked")的annotation来取消这个警告。剩下还有几个跟IDE无关的特性。比如Java要实现同一个功能基本就只有一种写法,所以不同的人写出来的代码都是“千篇一律”的,可以毫无障碍地阅读别人写的代码
2.Ruby。写ruby就完全是另一种感觉了。RGSS自带的还好,fiber不fiber也无所谓了,反正我自己是懂的。但是每次从网上下载别人写的脚本,总是很令人费解。因为Ruby做一件事情有多种方法,比如if可以写前面也可以写后面,比如and和&&都能表示逻辑与(虽然有微妙的区别,但是很多情况下可以通用),明明自己的语法已经支持代码块的结构了却还要支持C风格大括号;for each有N种写法;命名规则也是过于“灵活”了,方法名里面又有等号、又有问号、又有感叹号的……的确,这是一种自由。但是我觉得,如果先学习规矩,再谈自由会比较好。这样的程序员就比较自律,不容易写出您所说的“难看的实现”,写出来的代码也比较优雅。比如现在Ruby程序员基本都是先学过一门静态语言的,通常是Java或者C。
3.JS。JS的语法很奇怪,这应该没有人敢否认。比如参数数目不检查,利用函数原型实现面向对象等。虽然这些特性都有一定的道理,但是的确和绝大多数common sense的语言都是不一样的(硬要说我C本位我也没有办法,不过现在TIOBE前4的语言都是C风格)。另外,我写JS和Java用的是同一个IDE(虽然版本不同,Java的IJ是2016社区版,JS的IJ是2014 ultimate破解版),但是感觉完全不一样;JS的IDE不像写Java的时候那样智能了。同样是调用一个函数,有JSDOC的时候,它会贴心地帮我检测每一个参数的类型;没有JSDOC的时候,我把明显错误的类型传进去都不会有任何提示(比如这个函数是 fun(a,b) {return a+b;},我传进去的a是一个函数都不会有提示);至于我说过的那个events的问题,我之前没有把后面的代码打出来,因为点评有字数限制。在后面的代码中,我通过数组下标访问events;这显然是不合理的,难道数组下标能访问一个普通函数?不过这也不怪IDE,根本原因是JS语言本身
同样是MOD和插件社区,Minecraft官方没有提供任何API,完全靠modder的反编译,然后强行阅读混淆的代码进行开发(虽然有MCP这种反混淆包,但是反混淆也不完全,很多方法的参数还是乱码),已经发展出了一个庞大的MOD社区,curseforge上活跃着上千的MOD,有些MOD已经经过了5年的发展变革,仍然历久弥新;比如IndustrialCraft-2,它们的CI上已经有超过800个build版本,如果算上IndustrialCraft-1,版本数目应该已经上千了;虽然作者换了几批,这个MOD至今还在活跃更新。github甚至一度推出了Hacking Minecraft的专题,来介绍各大Minecraft相关的开源项目,比如botania、buildcraft、forestry这些开源MOD。这要归功于Java代码极高的可重用性,和一系列高效、自动化的开发工具。试想一下,RPG Maker的Ruby脚本和数据库怎么可能传到github上让大家来合作开发?RPG Maker MV的JS代码可能有这种可能性,因为数据库和脚本不再用二进制存储了,但是RGSS是永远做不到的。
以上都是我个人编写代码过程中产生的想法,但是我写过的Ruby和JS都只有几十k而已,所以不能代表这两种语言的客观情况;如果我的经历可以给准备学习这两种语言的同学提供少量参考,就已经是我的荣幸了。另外,不管RM系列用什么语言,就冲着RM自带的图形化地图编辑器和数据库,我也会坚持使用这个看起来简单低幼的游戏引擎的,估计大家也是和我一样的想法吧。 |
|