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

与 John Simmons 的程序员访谈

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.98/5 (52投票s)

2011 年 9 月 14 日

CPOL

10分钟阅读

viewsIcon

70585

欢迎来到我们的 Code Project 访谈系列,在该系列中,我们将与开发人员谈论他们的背景、项目、兴趣和讨厌的事物。在本期中,我们将追踪 Code Project 会员 John Simmons。

欢迎来到我们的 Code Project 访谈系列,在该系列中,我们将与开发人员谈论他们的背景、项目、兴趣和讨厌的事物。在本期中,我们将把目光锁定在 Code Project 会员和“不法程序员” John Simmons 身上。

John 已经是 Code Project 的会员十多年了,虽然他只写了 50 篇文章(这本身就非易事),但他提供了 3,900 多个问答来帮助其他遇到困难的程序员。

你是谁?

我叫 John Simmons,目前正在占用 德克萨斯州圣安东尼奥 的宝贵空间。我目前在 General Dynamics 工作,担任高级软件工程师,负责空军的一个合同,隶属于 空军教育与训练司令部

您做什么?

我在这个行业工作了 30 年,所以这个列表有点长。我最初是一名国防承包商,在 圣迭戈 编写用于先进 海军战术数据系统 的测试代码和文档(在 AN/UYK–7 舰载大型机 上,然后转到 IBM 360/370 系统的主要操作和开发。我于 1988 年获得了我的第一个实际 PC 编程工作,用 Turbo Pascal(适用于 DOS)编写遗嘱规划,并在大约 1990 年转向 C++/Windows 编程。我从事那份工作 12 年。

之后,我搬到了德克萨斯州,从事了为期一年的预防保健软件,接着又从事了三年的嵌入式软件(使用 Windows CE 的专有版本)以及实时图像捕获/传输。我的代码在 F–16FA–18 战斗机(可能还有其他战斗机)上运行,并负责伊拉克战争开始时我们在电视上看到的所有目标图像。接下来是三年编写部队准备软件,这是我最后一次使用 C++ 和 MFC 的工作。

之后,我转为纯粹的 .NET 开发,用一年时间编写实时流媒体视频加密/解密,用 WPF 编写电信计费管理程序,最后是我现在从事的,用 ASP.NETSilverlightWinForms 进行财务管理软件开发。不幸的是,所有这些都是用 Visual Basic 编写的。

您的开发环境是什么?

在工作时,硬件是一台双核机器,配有几块小型硬盘(不大于 160GB)和 4GB 内存,我们运行的是 Windows 7。每个人都有双 22 英寸显示器。我们正在使用 Visual Studio 2010,但我们所有的网站内容仍然是 .NET 2.0,尽管我们还有几个 Silverlight 4 模块。还有一个非常老的 VB6 应用程序,没有人喜欢维护,还有一些 DTS 包(他们现在称之为 SSIS),后端是 AccessSQL Server 2005 的混合体。

在家里,我的主力电脑有一台 3.2GHz 的四核 AMD CPU,16GB 内存。我的其他六台机器没有一台内存低于 4GB,即使是我的自制 NAS 和 pfSense 防火墙机。我还有一个专用的 Web 服务器,这样我就可以测试 Web 部署,用于网站、Silverlight 模块和 Click-Once WinForms 应用程序。总共有大约 14TB 的可用硬盘空间。所有非设备类的机器都运行 Windows 7 Ultimate。当然,我安装了所有最新的 Microsoft 开发工具和 SDK。

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

现在很难跟上。我不太喜欢 ASP.NET(网页的无状态性对我来说是一个持续的困扰——抱歉,没有更好的方式来形容它),虽然我确实有点讨厌 XAML,但 Silverlight 对我们的网站来说是更好的选择,因为空军中的每个人都被强制使用 IE。

考虑到目前的预算问题,我们认为我们永远也无法获得聘请更多人手来开发更新技术的资金。因此,我不得不在家进行所有探索。不过没关系,因为最重要的是,编码是我业余时间喜欢(并偏爱)做的事情。我认为这让我与其他许多程序员与众不同。

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

我最讨厌的代码是没有注释或注释太稀疏。我最近不得不对一个 ASP.NET 网页进行大量修改,该网页 a) 没有支持性设计文档,并且 b) 完全没有注释。更糟糕的是,其中一个文件超过 4,500 行长。我想找到并勒死负责那份代码的人。

在我自己的代码中,我喜欢为类变量使用“m_”,否则通常使用驼峰命名法。当我在工作代码时,我会坚持文件中使用已有的命名约定和编码风格。

对于缩进,我将 IDE 设置为保留制表符(设置为四个空格),看起来是这样的:

if ()
{
     // do something
}
else
{
}

我尽量让我的方法只做一件事,即使一个方法只在一个地方被调用,我也把它变成一个方法,因为它简化了调用它的代码。

我使用“//————————–”来开始一个方法,因为它在快速滚动浏览文件时很容易看到,并且我总是尝试使用 XML 注释以实现 IntelliSense

您是如何开始编程的?

我前妻厌倦了我总是在修理我的车(我当年非常喜欢 第一代野马),她唠叨我“找个别的爱好”。于是,我一时冲动,买了一台 Atari 400。之后,我报名参加了一个当地的计算机贸易学校,并最终购买了一台 Apple IIe。我为它买了所有炫酷的附加设备,包括一个 80 列卡、一个 C/PM 卡AppleCat 300 波特调制解调器Beagle Brothers 软件是“它”。然后,我发现了 Turbo Pascal(是的,适用于 C/PM)。这就是我称之为我的起点——一个在 C/PM 上花费 30 美元的 Pascal 编译器。

我的第一个 PC 程序是一个用于更改 Turbo Pascal 2.0 IDE 使用的颜色的实用程序。我这样做是因为有人说这不可能。事实上,这个实用程序为我在 CodeProject 上赢得了“不法程序员”的用户 ID。当我发布代码并基本上对那个唱反调的人回应说“哼哼,我做到了你说不可能的事”时,那家伙用一个刻薄的评论回应,并希望像我这样的人都被贴上不法分子的标签。BWAA-HA-HA-HA-HA!!!

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

接触其他程序员是一个显而易见的优势,它能让你对自己能力感到良好,也能让你在遇到真正能运用新概念和新技术编写代码的人时感到谦卑。随着年龄的增长,我发现处理新东西越来越困难,所以我只在绝对必要时才这样做。

年轻一代愿意接受来自雷德蒙德(Redmond)的任何教条,这会迫使我进行一种反思,促使我坚持熟悉较新的东西,这很好。这种情况更多地来自在线社区,而不是当地的程序员,他们大多数时候会陷入一种他们不愿(或不被激励)摆脱的舒适区。

我讨厌那些似乎不明白研究和参考是快速发展的开发生态系统中程序员的*基本*组成部分的新人。像我这样的老家伙*被迫*阅读书籍和购买 MSDN 库,然后艰难地解决我们遇到的问题。我们别无选择。如果我在 80 年代和 90 年代能有类似谷歌的东西,我*愿意*付出一切。而这些新家伙正在浪费这个资源。真的很可惜。

其次,在 问答区 发布问题的学生程序员似乎有一种优越感,并且毫不犹豫地索要完整的家庭作业代码——甚至更糟的是,他们询问毕业设计项目的想法。我对此深恶痛绝,而且*完全*不尊重这样做的人。我想我只是老了,脾气变坏了。

我唯一真正使用的关于论坛的编程网站是 The Code Project。在某个地方有长期任期是很好的,总的来说,其他参与者都是好人。(也许我囤积弹药的倾向能吓退狼。)我从 CodePlex 获取一些代码,并在网络上找到我自己的问题的答案,但 CodeProject 是我的首选网站。我在 LinkedIn 上,但我不怎么关注它。总的来说,我鄙视社交网络网站及其代表的一切。

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

这可能是你问过的最难的问题,我无法只给一个建议,所以这是我的列表:

0)不要浪费时间“专业化”。事情发展太快了,如果你在学习新东西时有任何固执己见,当新东西出现(或变得必要)时,你将严重妨碍你找到工作的能力。我在各种环境下,研究过十几种不同的主题,并使用多种语言在多个平台上工作过。变化发生。你应该能够改变以适应你所面临的需求。

1)你没那么了不起。无论你的“技能”多么“高超”,你并非无所不知。我从事这一行 30 年了,我忘掉的知识比我现在知道的还要多。我父亲常说:“别让你那张鳄鱼嘴掏空你蜂鸟的屁股。”如果你无法胜任新任务,请直接说出来,并接受那些拥有你不知道的知识的家伙的帮助。同时,要积极主动,用自己的钱去获取知识。我在家编写代码。我*在家*学习了 WPF,因为我知道我会在即将进行的任务中需要它。我*在家*学习了 Silverlight。事实上,我所知道的关于 PC 编程的一切,都是我在自己的时间、用自己的电脑和金钱学到的。

2)学会自己找到答案。谷歌是一个*神奇*的资源,只要稍加努力搜索,我几乎总能找到答案。

3)学会适应。很多时候,你会像疯了一样地编写代码,然后遇到一个重大的障碍。大多数情况下,障碍是想象出来的,主要是因为你一直在沿着一个特定的思路思考,但却遇到了与你这个月可爱的 paradigma 不符的东西。不要害怕走出由专家和理论家设定的武断界限。你有一个工作要做,有时你必须冲破荆棘,做一些被“其他人”(又名“行业专家”)视为“糟糕的做法”的事情。

这是其中的一个推论,即找到解决给定问题的不同方法。最简单的方法是,如果你不能 2+2=4,那么你可能需要 7-3,或者 20/5。换句话说,跳出框框思考,解决问题。

4)不仅要成为一个好的调试器,而且要成为一个*出色*的调试器。你大部分的编码时间将用于追踪问题,我说的不是那些有霓虹灯招牌大声喊着“我在这儿”的明显大错误。我说的是那些狡猾的小坏蛋,它们会让“微妙”这个词成为一种轻描淡写的说法。我曾经花了*两周*的时间才在 MFC 的 CString 类 中找到一个 bug。毅力是关键。

© . All rights reserved.