科学图书馆的代码大多是不
最近我一直机器学习、计算语言学,所以我最后研究了科学界编写的库和工具--例如斯坦福核心NLP库、GATE、Weka、jMusic等等。
人们普遍的感觉是,科学图书馆的代码大多是不好的。我不会指指点点,但大一新生的错误太多了--没有考虑线程安全、神秘、丑陋和/或类型复杂的API、缺乏类型安全性、变量和方法命名不当、选择糟糕/缓慢的序列化格式、向System.err(或Out)编写调试消息、缺乏文档、缺乏测试。
因此,使用这些库变得费时且容易出错。每隔10分钟,您就会看到一些编写得非常糟糕的代码,您没有时间来修复这些代码。这不仅仅是一件或两件事,你会在一个正常的开源项目中报告--这是一个整体的低质量水平。另一方面,这些库具有很大的价值,因为低级别的算法需要更多的时间,特别是如何实现,所以仅仅重用它们显然是正确的方法。有些图书馆甚至是原创的研究,所以你不能自己写,不花三年的时间写博士论文。
我不得不在这里提到心血--OpenSSL是由科学人士编写的,许多关于OpenSSL都不符合现代软件工程标准的主题已经写好了。
但这只是表面而已。一般来说,科学家不能写出好的代码。他们编写代码只是为了实现他们眼前的目标,然后要么扔掉它,要么自己继续使用它。他们不是软件工程师,他们似乎不关心代码质量、代码覆盖率、API设计。更不用说科学的基础设施、多服务器上的部署、环境管理。在科学界,这些事情很少正确地做。
https://www.douban.com/note/824582382/
这不仅在计算机科学和相关领域,如计算语言学,它无处不在,因为现在每一门科学至少需要计算机模拟。生物学、生物信息学、天文学、物理学、化学、医学等几乎每个科学家都必须编写代码。但他们并不擅长。
没关系--我们是软件工程师,我们把我们的时间和精力投入到这些事情上;他们是科学家,他们在他们的领域拥有丰富的知识。科学家们使用编程的方式,就像软件工程师使用公共交通工具一样--只是为了达到他们必须做的事情。科学家们不应该因为成为软件工程师而从他们的领域分心。
但问题仍然存在。不仅有不好的库,而且科学家编写的代码可能会产生错误的结果,缓慢地工作,或经常崩溃,这会直接减缓甚至阻碍他们的工作。
对于库,我们、软件工程师可以做出贡献,或者使用它们的公司可以指定一个工程师来改进这个库。重构,清理,文档,测试。库的作者将非常高兴有人美化他们的毛茸茸的代码。
另一个问题是更困难的--科学需要专门的软件工程师的资金,他们更愿意将这些资金用于实际的科学家。也许这是一个更好的投资,也许不是。我可以对自己说,我将很高兴加入一个研究小组,并帮助软件部分,同时获得该领域的知识。这将是迷人的,而且比写无聊的商业软件更令人兴奋。不幸的是,这种情况现在并不经常发生(几年前,我试过一次,但被拒绝了,因为我缺乏生