John D. Cook 程序员访谈






4.94/5 (16投票s)
欢迎来到我们的 Code Project 访谈系列。我们将与开发者们交流他们的背景、项目、兴趣以及让他们头疼的问题。在本期中,我们采访了 Code Project MVP、“数学教授、程序员、顾问、经理和统计学家” John D. Cook。
欢迎来到我们的 Code Project 访谈系列。我们将与开发者们交流他们的背景、项目、兴趣以及让他们头疼的问题。在本期中,我们采访了 Code Project MVP、“数学教授、程序员、顾问、经理和统计学家” John D. Cook。
你是谁?
我叫 John Cook。我在网上使用我的中间名首字母“D”,因为世界上有上百万个 John Cooks。
我在MD Anderson 癌症中心工作,位于[德克萨斯州休斯顿]。我们正在寻找更好的方法来开展临床试验,以评估新的癌症治疗方法。我们希望找到新药物的安全剂量,确定新疗法是否更有效,或者确定谁最有可能从治疗中获益。我们使用贝叶斯统计学来做到这一点,这需要大量的计算。
大部分工作是科学计算。但由于我们使用这些新方法来治疗患者,因此我们还需要将所有数字运算包装成用户友好的软件,让研究人员能够进行临床试验。除了软件开发,我还做一些研究和教学工作。
[更新:2013 年 1 月,我离开了 MD Anderson,成为一名独立顾问。此后我所做的工作与此处描述的类似。]
您做什么?
我的第一份专业编程工作是使用C++和MFC开发 Windows 桌面软件。我曾从事用户界面和DSP(数字信号处理)方面的工作。后来我用ASP做了一些 Web 开发。
我来到 M. D. Anderson 是为了管理生物统计学的软件开发。这在某种程度上对我来说是回归本源。我最初是数学专业,然后离开学术界成为一名程序员。现在我又回到了数学和软件开发领域。我参与或管理的大部分软件项目都是用于模拟和进行临床试验的。其中一些软件可以在这里找到。我专注于数值算法和模拟。我共事的人在 UI 开发方面更擅长,所以我把这部分工作交给他们。
您的开发环境是什么?
我主要用 C++ 编写科学软件,这些软件从C#调用,可以是ASP.NET,也可以是从WinForms应用程序调用。最近我用 C# 编写了一些数值代码;当整个应用程序,从后端到 UI,都用同一种语言编写时,这很方便。当我做研究时,我使用Python(SciPy,matplotlib等),有时也使用Mathematica或R。
我们的开发硬件没什么特别之处,但我们的执行环境则更有趣一些。有时我们的模拟软件运行在 Linux 集群上,有时运行在 Windows 服务器上,有时运行在Condor集群上,该集群利用台式电脑的空闲计算能力。
我使用Visual Studio进行 C++ 和 C# 开发。我使用Emacs处理其他所有事情。
您对哪些新工具、语言或框架感兴趣?
我曾经使用过几十种语言和工具。我奉行“为工作选择最佳工具”的理念,会在不同的环境中使用不同的工具处理不同的任务。这变得太麻烦了。我熟悉很多东西,但没有一样精通。现在我试图精通一小组工具。我正在更多地使用 Python 和 Emacs。最近我一直在学习更多关于 Python 的 matplotlib 和Emacs 的 org-mode。
您最讨厌的编码习惯是什么?
一个让我感到头疼的问题是过度设计的 OOP,在可以用简单函数就能很好完成的任务中使用类。
另一个让我头疼的问题是 GitHub 项目,里面只有一堆代码,没有任何描述。
您是如何开始编程的?
我的第一台电脑是TI–99 4a,是我叔叔送给我的。我用BASIC为它编写小程序,并用磁带录音机保存它们。
大学时我一度决定再也不想碰编程了。它太难了,而且我做得不好。后来当我需要写一些软件供自己使用时,我才重新开始编程。有一次我意识到编程确实很难,但对每个人来说都很难,我想也许我并不算太差。所以我算是重新开始编程了两次。第二次我用 C 和awk在 Unix 上编程。
开发者社区是如何影响您的编码的?
我从开发者社区那里收到了很多有用的反馈,这些反馈来自我的博客上的评论。当我在上面犯错时,有人会很快地以友好的方式告诉我。或者他们会指出我从未想过的替代方案。然而,有一件事让我觉得恼人,那就是一小部分程序员纠结于一些咬文嚼字的细节而忽略了帖子的重点。
至于 Twitter,我有一个十几个账号,发布与数学或编程相关的小技巧和事实:一个关于概率,一个关于正则表达式,等等。我从这些账号那里得到了很多很好的反馈。人们当然会纠正我的错误,但我也能看到人们认为什么有趣或有用。当你有无法精确表达以至于无法进行有效搜索的问题时,Twitter 非常有用。有时一个简单的回复告诉你该搜索哪个关键词就非常有价值。
在网络之外,我从 SciPy 社区学到了最多。原因之一是这些人对数学和编程感兴趣,所以我和 SciPy 社区比与更广泛的社区有更多共同之处。我参加过微软的会议,虽然我使用微软产品,但这些活动中的绝大多数人并没有编写我所写的软件。
我喜欢 SciPy 社区对其工具持开放态度。他们显然喜欢 Python 总体以及 SciPy 本身,但他们也使用其他工具。他们似乎相当客观地看待 Python 的优点和缺点。我在其他社区没有看到过这么多的客观性。
您会对一个新兴的程序员提供什么建议?
学会用书面语清晰地表达自己。买一本Strunk and White的书,每年读一遍。
如果你是一位才华横溢的程序员,但你不能或不愿意用英语写作,你的影响力将是有限的。