65.9K
CodeProject 正在变化。 阅读更多。
Home

与 Ravi Bhavnani 的程序员访谈

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (42投票s)

2013 年 3 月 13 日

CPOL

10分钟阅读

viewsIcon

45128

欢迎继续阅读我们的 CodeProject 开发者访谈系列,在该系列中,我们与开发者探讨他们的背景、项目、兴趣和最令人头疼的问题。在本期中,我们与 Ravi Bhavnani 进行了交流。

欢迎继续阅读我们的 CodeProject 开发者访谈系列,在该系列中,我们与开发者探讨他们的背景、项目、兴趣和最令人头疼的问题。在本期中,我们与 Ravi Bhavnani 进行了交流。

你是谁?

我叫 Ravi Bhavnani。大约六年前,我搬到了加拿大多伦多。我是 Dayforce 的首席软件开发人员。Dayforce 是一家公司,它使企业能够通过单一界面管理几乎所有的人力资源需求。在加入 Dayforce 之前,我在商业智能和数据可视化技术的市场领导者 Dundas Data Visualization 工作。在 Dundas,我参与了构建 Dundas Dashboard 的团队。Dundas Dashboard 是一个平台,能够为仪表板解决方案提供支持,帮助公司快速发现关键趋势并做出更好的业务决策。在加入 Dundas 之前,我在波士顿地区从事软件行业近二十年。

自 2000 年以来,我一直只在大公司和初创公司工作,因为我认为它们提供了大型企业中不常有的充满活力和激情的环境。我认为,管理良好的初创公司的文化可以让开发人员通过直接影响他们正在构建的产品的功能和特性,为公司的成功做出重大贡献。在初创公司工作还可以让开发人员近距离(而且很少见)地了解将一个好想法转化为成功产品所涉及的方方面面。这正是我所谓的“分号之后的内容”。

除了三年来涉足 Java 领域之外,我自 1992 年以来一直在为 Windows 开发。在那之前,我曾用 C/C++OPS5Lisp 编写人工智能应用程序。

您做什么?

在 Dayforce,我从事公司的企业产品 Dayforce HCM 的开发工作。我的日常工作涉及多种编码方式:设计供其他开发人员使用的平台组件、构建新功能、修复 bug 以及研究将在产品未来版本中使用的较新技术。我专门使用 Microsoft 技术栈(例如 SQL ServerC#.NETSilverlightWCFASP .NET MVCWPFWindows Forms),以及平台无关的技术,如 JavaScript 及其各种客户端框架。

我还经营自己的公司 Matrix Software,通过该公司销售 FooBar,这是一套适用于 Windows 的个人生产力工具,集成了工具栏。我还因开发了几个流行的免费 Windows 应用程序而闻名,特别是 WeatherMateTakeStock

您的开发环境是什么?

在工作单位,我使用一台四核 i7 处理器、10GB 内存、运行 Win7 的电脑,配备 128GB SSD 和 7200 RPM 1TB 硬盘(加上所有必需的网络存储)以及两个 1920 x 1200 显示器。这是所有开发人员的标准配置。我们的机器配备了标准的开发工具(VS2010 + VS2012、SQL Server 2012、Silverlight SpyFiddlerBeyond Compare 等),并且所有开发人员都配备了 MSDN 订阅。我们使用 TFS 进行问题跟踪和配置管理。

在家中,我使用一台四核(8线程)3.2GHz i7 Brix Pro 电脑,配备 16GB RAM 和一块 500G 快速写入的三星 SSD,运行 Win7,以及一个 23 英寸 1920 x 1200 显示器。我还有一台运行 WinXP 的旧电脑,用于测试。我的大部分数据存储在外部西部数据硬盘上,几乎我所有的源代码都托管在 Microsoft 的 TFS Online 上。我仅使用 VS2013。

您对哪些新工具、语言或框架感兴趣?

在工作方面,我已将重点从 Silverlight/WCF/SQL 链转移到开发一个与所有主流浏览器和移动客户端兼容的、由 ASP .NET MVC 支持的多客户端框架。我还使用(并且非常钦佩)Xamarin 框架,通过 C# 和 Visual Studio 构建跨平台移动应用程序。

您最讨厌的编码习惯是什么?

实际上,我有两个。

最令人头疼的问题 #1:真正的程序员不写注释

是吗?

在开发者中流传着一个流行的传说,讲述了那些为了工作数周不眠不休、只靠咖啡因、啤酒和披萨维持生命、写出性能极佳、一次性成功且几乎没有(甚至没有)bug 的代码的“忍者程序员”。好吧,向各位忍者程序员致敬。但如果我必须维护或使用你们的代码,那代码最好有注释。许多开发者回应说,精心选择的类名、属性名、方法名和参数名不需要注释。有些人甚至会邪恶地狞笑着声称,“代码本身就是注释”。对此我回应说,如果你是唯一将要使用或维护这段代码的人,并且你确信七年后当你被迫重新审视这段代码时,你永远、永远不会忘记你那令人印象深刻的递归正则表达式逻辑的复杂性——因为一位愤怒的客户打电话给你的 CEO,威胁要散布你的产品有多么糟糕的消息(无论它是否真的糟糕),那么好吧——就不用费心写注释了。

最近,我参与了一个决定淘汰一个大型 UI 组件供应商的决策,因为他们的文档不够完善。如果我需要花费数天时间来弄清楚如何使用某个东西(或者它有什么作用),你猜怎么着?我会选择替代品。或者自己动手。这种情况经常发生。跟上时代——不要让这种情况发生在你的身上。

牙医告诉我们:“你不必给所有的牙齿都刷牙——只需刷你想要保留的牙齿。”我的软件类比是:“你不必给所有的代码都写注释——只需给你不希望丢弃并重写那部分代码写注释。”

所以,给你的代码写注释。当你更改代码时,也要更新你的注释。你凌晨 2:30 的紧急 bug 修复将会感谢你。

最令人头疼的问题 #2:愚蠢的用户不配拥有我的酷炫应用程序

我的第二个最令人头疼的问题与编码无关——而是开发者的傲慢。当我于 1987 年在 DEC 开始第一份工作时,我知道我在这方面做得很好。我写出的代码一次就能成功。我写代码很快,并且通常能提前完成任务。我的代码很少有 bug(而且确实有注释)。我了解 VAX/VMS 运行时库的晦涩细节,这些细节令我的同事们惊叹,并引起了工程经理的注意。我是一名忍者开发者。我很酷。我很潮。但我完全不明白。因为我并不太关心我的最终用户。

我经常听到开发者将他们的用户描述为“愚蠢”和“笨”。一些开发者似乎普遍认为,“如果用户不够聪明,无法弄清楚如何使用我的应用程序,那么他们就不应该使用它。”而且,正如上帝创造了小绿苹果一样,事情很可能会这样。只是,如果你没有用户,你就没有收入。无论你是否喜欢,决定权在于用户,而不是反过来。

如果你的产品足够幸运,是该领域的主要(或唯一)参与者,你可能可以通过强迫用户适应你的应用程序的工作方式来维持。但最终,一个竞争对手(可能不像你那么聪明,但却能响应客户需求)将向你的客户提供一个更易于使用的替代方案,并会将该客户抢走。

所以,要谦虚,当你的最终用户说话时,要认真倾听。你的收入将会感谢你。

您是如何开始编程的?

我偶然开始接触编程。

我刚刚开始攻读电气工程学位,在我的一门数值方法课程中,我遇到的第一个作业是高斯消元问题。我理解理论,但需要在两天内解决十二个线性方程。当我找到讲师时,他很快就解开了我的困惑:“哦,写一个 FORTRAN 程序,然后用十二组数据运行它。”只有一个小问题。我不知道 FORTRAN。或者任何其他编程语言。

于是我放弃了这门课,并要求计算机科学系推荐一门 FORTRAN 的先修课程。我仍然记得当我提到“FORTRAN”时收到的那种鄙视的眼神。我的计算机科学顾问说:“我们在这里教授结构化编程,而不是 FORTRAN”,然后把我注册进了 Pascal 101。第二天,我发现自己身处一个全是新生的班级里,也许是唯一的在读研究生——或者至少是唯一留胡子的学生。

我的 Pascal 讲师(三十多年后我才找到他)以一句简单的指示开始课程:“清空你们的头脑——因为我要教你们如何思考。”这是一见钟情——逻辑的纯粹性以及控制流和程序验证的数学完美,为这个毛头小子打开了一个 hitherto 未被探索和未知的快乐世界。

总之,我很快将我的专业领域转向了计算机科学,并将我几乎所有清醒和呼吸的时间都投入到这个精彩领域的理论和实践中。三十年后,我仍然花费我大部分的空闲时间编写代码,构建免费实用工具,并更新一些 CodeProject 文章。生活中我别无所求,只想构建软件。

我的第一门编程语言是 Pascal,尽管到 1983 年我已转向 C(当时是新秀)。

我的第一台系统是一台 IBM-AT(1985 年型号,80286 CPU + 80287 FPA,6 MHz,512KB RAM,CGA 显示,1.44MB 和 360KB 5.25 英寸软盘驱动器,20MB Seagate 硬盘),一台 Princeton Graphics System 彩色显示器,以及一台 Okidata Microline 132 点阵打印机,它的声音听起来就像打了鸡血的牙医电钻。整套设备花费了我 5000 美元。我拥有的唯一软件(除了 MS-DOS)是 PC-Write 和 Lattice C 编译器。软件花费了大约 300 美元。

开发者社区是如何影响您的编码的?

我一直对开发者社区免费分享知识的行为感到惊奇和感激。自从大学毕业以来,我学到的所有软件开发知识都归功于我的同事们和我在网上互动过的开发者的慷慨。我一直试图在能力范围内回报他们,但如果你在记分,你会发现我欠了很多。

我也很高兴能成为一个几乎没有性别、年龄或种族歧视的行业的一员。你在家说什么语言,长什么样子都不重要。如果你热衷于编写代码,我愿意认识你。

您认为自己在 10 年后会是什么样子?

很难推测。大约每五年,我都会问自己五年后我在做什么,而我每一次都猜错了。但我知道我希望自己五年后在做什么:经营自己的软件开发公司,或者成为一群同样充满激情的开发者的一部分,构建专注于移动 UI 的企业应用程序。我一直很喜欢编写前端代码,并且我对平板电脑/手机/可穿戴移动技术的未来感到好奇。我认为我想成为其中的一部分。我也认为我想帮助孩子们学习编程。

您会对一个新兴的程序员提供什么建议?

编写代码。大量的编写。

只有通过编写代码并分享你的作品,你才能学习——从你的同行、你的用户(如果你有幸拥有一些)和你的竞争对手那里学习。而且不要害怕批评;它是你获得的最有价值的反馈。虽然我喜欢收到告诉我某人多么喜欢使用我免费软件的电子邮件,但我绝对喜欢当有人报告一个晦涩的 bug 或给我提供改进我应用程序的建议时。

© . All rights reserved.