与 Steve Smith 的程序员访谈





5.00/5 (11投票s)
欢迎来到我们的Code Project系列访谈,我们将与开发者们聊聊他们的背景、项目、兴趣和烦恼。本期我们与史蒂夫·史密斯进行访谈,他是一位连续创业的软件开发企业家,目前是Telerik服务团队的执行副总裁。
欢迎来到我们的Code Project系列访谈,我们将与开发者们聊聊他们的背景、项目、兴趣和烦恼。本期我们与史蒂夫·史密斯进行访谈,他是一位连续创业的软件开发企业家,目前是Telerik服务团队的执行副总裁。
你是谁?
我叫史蒂夫·史密斯,我是一位戒除中的连续创业者。我目前是Telerik服务团队的执行副总裁,在那里我很幸运能和我的妻子(也是服务团队的执行副总裁)米歇尔一起工作。
我们过去曾经营并出售过多家公司,包括ASPAlliance.com、Lake Quincy Media和NimblePros。最近,NimblePros被我们最喜欢的NimblePros客户之一Telerik收购。在此之前,ASPAlliance.com和Lake Quincy Media都被我最喜欢的开发者网站之一The Code Project收购了。
您做什么?
我为付费客户做的第一个项目之一叫做“四面墙”,因为它管理着The Limited各个品牌的报关收货仓库内发生的一切。这是一个很棒的第一个项目,也是我第一次真正学会使用ASP (经典)。我几乎是独自完成了整个项目,因为客户所有的开发资源都忙于强制性的Y2K千年虫危机规避工作,因此我作为顾问被请来完成这个项目。
也正是在这个时候,我参与并最终接管了ASPAlliance.com,我从1999年到2009年运营着它。
ASPAlliance.com是另一个早期项目,通过维护这个网站,我学到了很多关于构建Web应用程序和ASP.NET的知识。不幸的是,业务的广告方面开始真正起飞,大约2002年以后,我大部分的开发精力都投入到构建AspAlliance广告网络的广告平台上了。最终,这发展成了Lake Quincy Media及其专有的广告平台AdSignia,该平台于2005年从零开始重写。
AdSignia让我学到了很多关于可扩展软件开发的知识,因为它基本上必须为Lake Quincy Media广告网络内的数百个开发者网站提供每个页面视图的多个请求。如果广告服务器速度慢或出现错误,可能会影响所有这些网站。我对代码质量、性能和可伸缩性主题的热情就是从我使用这个平台的经验中发展起来的。2009年The Code Project收购Lake Quincy Media(和ASPAlliance.com)后,我继续使用并改进AdSignia。
最近,我的工作重点是开发者培训和软件项目评估。在培训方面,我为Pluralsight编写了几门课程,内容都是我认为每位开发者都应该知道的主题,比如面向对象设计的SOLID原则和设计模式。我还开设了关于看板基础知识以及Web应用程序性能和可伸缩性的课程,我还在开发一门关于C#中N层应用程序开发的课程。
从评估的角度来看,我最近与几位客户合作,目标是评估他们代码库中的风险,以便项目利益相关者能够就他们投资的回报做出明智的决定。这是我们在NimblePros提供的一项服务,Telerik Services也提供这项服务,除了代码本身,可能还会涵盖流程和实践。
您的开发环境是什么?
我有好几台电脑,我猜这并不罕见。在办公室,我有一台基于四核i7处理器,配备12GB内存的机器,家里也有一台类似的。两种情况下我都配了两台24英寸显示器。我运行Windows 7,大部分软件开发工作都在Visual Studio 2010中进行。我还相当喜欢我的华硕Zen超极本,这是我几个月前收到的,现在已经用了不少,包括用于一些演示。无论哪种情况,机器的主硬盘都是SSD,我发现这在机器的响应速度上产生了非常显著的差异,从而提高了我的生产力。
我最擅长C#和ASP.NET,最近是MVC。我是测试和可测试代码的坚定支持者,我主要使用NUnit和Moq来完成这些任务。我也是DVCS的粉丝,首选Mercurial,但我也在学习Git,目前不得不使用非DVCS系统真的让我以小增量工作的方式感到不便。
您对哪些新工具、语言或框架感兴趣?
我目前正在大量学习JavaScript,包括客户端和使用Node的服务器端。
我还在学习使用 Telerik 的 KendoUI JavaScript 框架构建单页应用程序和 MVVM,我还为此玩过 Knockout。
除此之外,我正尽力增加对 Telerik 工具的了解,这些工具包括组件、我们的 Sitefinity CMS/应用程序平台以及用于测试、分析、模拟、报告、开发移动应用程序的工具,可能还有一些我遗漏的或暂时不能谈论的东西。
您最讨厌的编码习惯是什么?
我是《代码整洁之道》(这本书和更普遍的概念)的忠实拥护者。这本书包含许多宝贵的信息,我认为它是开发人员的必读书籍。我的两个个人痛点是不恰当的注释使用和区域。我过去曾撰写过整篇文章,讨论何时为代码添加注释和我对区域的看法。
简而言之,注释应该告诉读者“为什么”,而不是“是什么”。代码的功能应该一目了然,如果不是,那么就重构代码,而不是通过添加注释来弥补,就像给猪涂口红一样。添加注释是为了解释为什么做出某个特定的设计选择,或者当执行某些不直观的操作时,这样其他开发人员就不会不恰当地“优化”代码。删除那些没有增值的注释,因为它们只是噪音。
区域(在C#和VB中)是应对不整洁代码的权宜之计。有很多方法与当前类不相关吗?把它们扫到 #region 地毯下。有一个很长的方法,你无法一次性看完?不要重构它,只需添加区域。类变得如此庞大以至于你无法轻松找到任何东西?不要将类分解成更小、更内聚的类,只需使用区域来掩盖真正的问题。我实际上做了一个关于区域的调查,收到了400份回复,如果你感兴趣可以去看看。
关于大小写和缩进风格,我倾向于遵循所用语言的主流风格。这意味着C#和JavaScript的风格略有不同,举例来说。
我从来不在乎缩进是用空格还是制表符,但如果你非要逼我表态,我可能会支持每级缩进2个空格,因为它更适合书籍和窄列。
我避免使用匈牙利命名法,因为我们很久以前就超越了任何人能合理地与三个字母代码关联的类型数量,而且由于我打字很快,并且我使用带有语句完成功能的现代IDE,如果我真的需要包含有关变量类型的信息,我会将其作为后缀。例如,我不会使用`lblName`和`txtName`以及`Name`(或者`strName`——实际存储名称的字符串),而是使用`NameLabel`、`NameTextBox`和`Name`。这种方法的一个好处是它们在语句完成时都分组在一起,另一个好处是无需不断为我们编写的每个控件或对象发明新的微小缩写。
哦,如果你仍然坚持匈牙利命名法,你可能会惊讶地发现,现代操作系统也允许文件名长度超过8个字符,所以你也可以在那里输入完整的描述性名称。
我另一个不算代码上的烦恼是URL中使用www。它在90年代(上个世纪)可能有意义,但今天如果我让你访问codeproject.com,你真的需要我用前缀指出它在万维网上吗?不幸的是,我认为www可能由于其在Microsoft.com、Facebook.com和Google.com等网络巨头中积累的惯性而继续存在。但至少,确保你公司的网站在没有www的情况下也能工作,即使它会静默重定向到较长的版本。Twitter至少重视短URL,足以去掉无用的www,即使用户坚持输入它。
您是如何开始编程的?
我上学时在Commodore Vic–20上,在家在Apple II+上开始编程。在这两种情况下,我都学会了使用某种形式的Basic(带行号!)来执行极其简单的任务或在屏幕上绘制ASCII艺术。
在那个时代,我最引以为豪的成就可能就是开发了我自己的秘密俱乐部程序(一个受密码保护的单用户程序,没有持久化机制),我的一些朋友来我家时可以登录。一旦登录,其实也没什么可看的,除了更多基于文本的菜单和“俱乐部活动”信息。
后来在学校我学习了Turbo Pascal,并开始学习如何使用软件解决实际问题。
高中毕业后,我主要对物理学感兴趣,但我获得了空军后备军官训练队的全额奖学金,要求我主修计算机科学,所以我决定两者兼顾。不久之后,我在芝加哥大学入学,但在一次令人惊叹的惨败中,空军后备军官训练队奖学金未能兑现,我最终转学到俄亥俄州立大学,并在那里最终获得了计算机科学工程学位。所以,尽管整个奖学金的闹剧非常糟糕,但我至少可以在一定程度上感谢空军在大学里指引我走向计算机科学。
我所学的关于编写优秀代码和软件开发实践与流程的大部分知识都是在大学毕业后获得的。我当然认为我的学位很有价值,但作为软件开发人员的雇主,我对大多数本科生或刚毕业的开发人员的习惯和实践常常感到失望。我真希望像OOD的SOLID原则、简单设计规则和单元测试这样的内容能够涵盖在旨在为学生在软件开发领域就业做准备的学位课程中(我理解这不一定等同于计算机科学)。
开发者社区是如何影响您的编码的?
开发者社区对我的职业生涯产生了巨大的影响。我很幸运早期就参与了ASPAlliance.com,这其实纯属偶然,当时我只是想找个地方托管一些代码示例,这样每次去新客户那里都能带上它们。最终,在ASPAlliance上设置一些空间(基本上我有一个博客)的这个决定,促成了我后来在行业和社区中的许多联系。它把我介绍给了一群ASP专家,他们最终成为了ASPInsiders小组,该小组至今仍活跃(并且催生了微软内部许多类似的内部人士小组,其中许多小组的私人邮件列表由我管理)。
正是我参与这个小组以及ASP/ASP.NET产品团队,才使我于2001年首次获得微软MVP。后来,我参与ASPAlliance和其他社区/有影响力的项目,促使我于2005年受邀加入微软区域总监计划。
在Twitter出现之前,我的即时通讯联系人列表是我与这个地域分散的社区保持联系的主要方式。现在,除非我真的需要私下与某人交谈,否则我很少使用即时通讯,而Twitter已成为一般对话的主要渠道。
如今,内部项目私人邮件列表和Twitter上的公开讨论,连同博客写作、阅读博客和博客评论,是我与开发者社区互动的主要方式。我不再倾向于花太多时间在论坛上,因为电子邮件和Twitter都更具平台无关性和移动友好性。
您会对一个新兴的程序员提供什么建议?
永远不要停止学习,永远不要认为自己无所不知,以至于无法向他人学习。永远不要害怕提问,并通过你最舒适的渠道了解开发者社区中的其他人。你永远不知道某个特定的联系最终会对你的职业生涯产生巨大的影响。这是一个相当小的世界,互联网使其变得更小,所以避免过河拆桥也很重要。最后,努力提高你的沟通技巧(书面、口头、演讲,所有方面)——这些将永远在你的职业生涯中为你提供帮助。