编程,我的看法

dzhigner

Moderator
编程对于自然语言处理、语料库研究等领域而言是一门重要的技术。

说这句话大概是“安全”的,不过我不敢断言说“必要”的技术,因为可以获取的工具很多,灵活驾驭这些工具一样可以解决很多问题。不过每一种成型的工具都有其局限性,某些情况下难以满足一些特殊的要求。比如lemmatization词条归类,免费的工具很少有在用户界面上提供这种功能的。如果需要更复杂的归类,比如用同义词典或wordnet等语义网络词典来对词条归类分析就更麻烦了。这个时候,编程就能派上用场了,可以自己开发工具,也可以从网上找到一些很有用的工具包,把其中的模块整合到自己的程序中。而且对应于现在大多数流行程序设计语言的NLP工具几乎都能找到,典型的有perl和后起之秀python。Java工具也有很多,而且有可能还有大的发展,因为热衷于Java的人太多了。

刚才提到“自己开发工具”,这个事情的确不容易,会编程离能开发软件还有相当的距离。然而所谓程序并非一定要达到软件的标准。很多编程的结果是寻找某种solution。举个例子,昨天我从一个电影资料库下载了几百个脚本,都是网页形式的,我编了个程序把其中有用的文本部分自动提取出来,做成了一个很毛糙的电影脚本语料库。这个solution仅仅是一段代码,必须在IDE(集成开发环境,程序的编辑器)里执行,但最终目的达到了。程序设计语言是一种随时可以解决问题的工具,就像工具包里的螺丝刀,这也是为什么人们对编程语言的RAD(快速应用开发)性能如此感兴趣的一个原因。此外,学编程还有个好处,对程序设计的认识可以极大的帮助我们理解现成软件工具的工作原理,开发解决方案的经验更能够强化我们使用各种工具的能力。

新兴的高级程序设计语言都声称自己是优秀的RAD工具,不过我认为每个人对琳琅满目的程序设计语言很可能有自己的感觉。很多人说perl的源代码很难读,我没这感觉。Python的口碑相当好,不过对我来说python是块最难肯的硬骨头,不知怎么搞的,Python写的代码我常常读不懂,更别说写代码了。顺便说一句,如果是从C语言开始打基础的,大概没我这么费劲,我是从Pascal开始的,后来自学了Visual Basic和perl。只懂“高级”语言(程序设计语言的高级和低级有特殊的意思,高级语言容易学,直接对硬件编程的汇编语言就是最“低级”的,很难掌握。),所以程序设计的能力一直停留在“低级”阶段,有过做软件的想法,现在看来能力还不够。不过我毕竟不是职业程序员,也不是靠做软件生活,所以用RAD来做一些solution对我而言足够了。

从使用RAD编程来开发解决方案的角度,我固执地推荐Visual Basic。虽然在语料库或NLP程序设计这个方面Visual Basic一直是个冷门。我想原因不外乎有这样几种:商业软件,不免费。速度不够快。长期被业内人士定位为数据库界面开发工具。功能的确有限。难以跨平台,加上不是免费的,对软件的传播也有限制。不过理性地看,对编程语言的评价常常是以软件设计为视角的,而且Visual Basic一直在发展,现如今其功能几乎可以和其他.NET框架中的语言不相上下。而且也许是出于宣传目的,微软已经推出了免费版本,拿来在很多领域中当RAD工具还是相当够用的。

当然了,我推荐Visual Basic的主要目的还是在于它很好学,虽然VB.NET和原始版本的VB比起来的确麻烦了一点。不过Basic语言不愧其名。为什么这样说呢?现在的程序设计流行OOP(面向对象),VB也不例外,但Basic家族的语言始终在传统的“面向过程”程序设计模式保持着高度的直观和易学易用性。OOP是一种很好的程序设计模式,但入门的难度比较大,我认为OOP对程序设计的系统化思维要求教高,到不是说OOP的概念本身多难懂。所以高度强调OOP的程序设计设计语言很可能使用起来还是没那么随意。虽然perl和python之类的在这方面也不差,但看起来Basic还是简易一些。Perl的灵活的确搞的代码看起来很“玄”;Python,偏激地说,我很不喜欢,用缩进的方式定义语句块终究是很别扭的,我看不如Perl和Java里的大括号或者Basic和Pascal里的Begin...End之类的结构。而且Python所谓集结了很多语言的优势,同时也集结了很多语言的难度,处处弥漫着C语言的低级复杂和OOP的抽象。

Visual Basic好学,但的确在我们的研究领域里还没那么好用,目前主要是因为参考资料少,过去是因为功能不够强大。功能这方面,现在可以说没问题了。VB和C#等语言一样都是.NET的成员。用.NET来开发的NLP等软件或工具包越来越多,主要是C#,但绝大多数功能用VB.NET完全可以调用。免费的VB.NET IDE用起来很舒服的,尤其是自动代码提示,一直是微软编程工具的强项。

不过话又说回来,如果从VB.NET开始学Visual Basic,肯定也会面对不少难度,那主要是因为.NET不太好学,VB语言本身还是很容易上手的。从零开始的初学者也可以从Visual Basic的老版本开始,比如VB6.不过,如果学编程有比较深入的目的,比如将来想开发成型的软件的话,Basic 语言绝对不是个好的起点。如果不满足于只使用别人的软件,想找个顺手的程序设计工具,Visual Basic 是个相当好的选择。[未完。。。]
 
回覆: 编程,我的看法

looking forward to the complete version of this article~
Could you please also recommend how the greenhand/newbie should learn a programming language?
 
回复: 编程,我的看法

Python 语法相对容易一些;Perl 时间长了,回头去看,即便自己写的代码,都觉得吃力。
 
回复: 编程,我的看法

As a learner of English language, I began to study language when being a postgraduate student, and now, I want to know something about programming. So what should I do to learn programming for language study?
Thanks for any suggestions.
 
回复: 编程,我的看法

就做界面来说,还是VB/C#来得方便;文本处理,我还是用perl顺手,用的时间长,先入为主,况且还有CPAN那么庞大的modules,基本上是想要什么就都有什么。其实这些大多数程序设计语言结构都差不多,咱们语言处理用的字符串,文件处理,regex, 哈希/词典,基本上除了C以外的大多数语言都直接支持(像C++的stl,java,VBscript),只要使着顺手就行,界面或者使用windows的桌面开发,像VB/Delphi等可视化环境就行,最不济,就用浏览器界面,用perl等做cgi。最有趣的是,我有个朋友就用专用prolog干活。因为学人工智能定子句时,用得顺手,现在做界面也用Visual prolog。要说这个prolog跟上面咱们常用的语言可真是完全不同!!!
 
回复: 编程,我的看法

vb,.net, asp, php, jsp, java, perl, AS3, delhpi, python ... 说编程语言的话,太多了。
不管什么语言,处理的都是字符与数值。
总之,不管白猫黑猫,抓到耗子就是好猫。这是我的看法。:)
 
回复: 编程,我的看法

[后续]
上次没写完,写的也不够清楚。这次争取说的更清楚一些。还是老话题,关于Visual Basic,再把我要表达的主要意思强调一下:其实也不是想要把VB排到头里,在缺少现成的软件,需要构建一些不是特别复杂的解决方案时,VB是最易用的,而且最容易入门的语言之一。只是在我们这个研究领域的上下文VB是个冷门,所以想在这个方面专门说说。关于我所谓“不是特别复杂”并不容易定性,用我自己的体验来做例子吧。学习VB的时候,我用VB6的常规方法(VB6其实也有些很邪门的hacks,不过只有高级程序员们才能搞明白)尝试写过concordancer和词频统计等解决方案,不太成功。VB6的速度慢,而且其自身和其他可调用的组件在做文本处理这方面有些薄弱。后来升级到VB.NET之后又做过类似的一些试验,可以应用.NET的很多强大功能,制作过程似乎更简单,而且性能比起VB6不知提高了多少倍:最近我在1GB内存的电脑上做了个简单的实验,对一个文本库进行操作,逐行读取文本,搜索一个关键词,并显示包含该词语的行。该文本库里有完整的Brown、Frown、Flob语料库一些零杂文本文件。起初的设计的是多线程模式读取大量文本,希望能大幅度提高处理文本文件的速度,后来发现单线程的速度也不差,整个检索过程不到一秒钟就完成了。因为IDE很好用,微软的对象浏览器和Intellisense(自动代码提示)实在太好用了,写代码的过程也相当轻松。另外,看到网上有一些JAVA写的NLP工具包,想看看能不能把代码翻译到VB.NET,就尝试着从一段Java代码翻译了一个porter stemmer(一个词削尾算法),这次尝试过程还算顺利,没遇到难以转换的语句。上面的试验显然不够科学,但我认为可以下个粗浅的结论:对于NLP和语料库的解决方案而言,VB的老版本的确薄弱,但VB.NET够用了,而且免费的IDE功能足够强大。[开会去了,还没完。。。]
 
回复: 编程,我的看法

就做界面来说,还是VB/C#来得方便;文本处理,我还是用perl顺手,用的时间长,先入为主,况且还有CPAN那么庞大的modules,基本上是想要什么就都有什么。其实这些大多数程序设计语言结构都差不多,咱们语言处理用的字符串,文件处理,regex, 哈希/词典,基本上除了C以外的大多数语言都直接支持(像C++的stl,java,VBscript),只要使着顺手就行,界面或者使用windows的桌面开发,像VB/Delphi等可视化环境就行,最不济,就用浏览器界面,用perl等做cgi。最有趣的是,我有个朋友就用专用prolog干活。因为学人工智能定子句时,用得顺手,现在做界面也用Visual prolog。要说这个prolog跟上面咱们常用的语言可真是完全不同!!!

Prolog很有意思,我正在琢磨。。。。
“基本上除了C以外的大多数语言都直接支持(像C++的stl,java,VBscript)”的确如此,不过某些语言处理文本的时候慢。
 
回复: 编程,我的看法

编程对于语料库语言学的发展创新有很大的作用。我的导师就很精通编程,经常可以根据自己的需要来编程然后再对语料作比较成熟和符合自己想法的研究。作为语料库语言学的学习者和爱好者,我们是该学好这个编程。
 
回复: 编程,我的看法

多数人学的主要是怎样使用各种工具完成自己的任务,当然懂得一些基本的编程知识对理解工具的使用也有很大好处。多数人不是工具的开发者,但许多工具尤其是开源的那些允许用户hack,这是很宝贵的,如果懂得必要的编程知识可以利用这一点,更好地实现自己的想法。各种编程语言都有自身的优势,对搞语料库的人而言最重要的完成任务,perl就是个很好的选择:貌似丑陋但能很好工作的骆驼。
 
Back
顶部