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

与 Ted Neward 的程序员访谈

starIconstarIconstarIconstarIconstarIcon

5.00/5 (19投票s)

2013年3月6日

CPOL

11分钟阅读

viewsIcon

24046

欢迎来到我们正在进行的CodeProject开发者访谈系列,在这个系列中,我们采访开发者,了解他们的背景、项目、兴趣以及让他们头疼的事情。在本期访谈中,我们采访了Ted Neward,“软件达人”。

欢迎来到我们正在进行的CodeProject开发者访谈系列,在这个系列中,我们采访开发者,了解他们的背景、项目、兴趣以及让他们头疼的事情。在本期访谈中,我们采访了Ted Neward,“软件达人”。

你是谁?

我叫Ted Neward,有些人称我为“达人”。有些人称我为“软件界的House医生”,但也有人称我为“软件达人”,这更有趣。(不过我确实保留了我像House医生一样的时刻的权利。)“Dudearino”、“Big Dude”和“Ted”也同样可以接受。

你知道,大多数时候人们怎么称呼我都可以——我几乎对任何称呼都来者不拒。

我在这里的雷德蒙德工作,但不是为“那些家伙”工作;我通过Neward & Associates, LLC为会议和杂志做咨询,以及大量的软件主题的演讲和写作。最近我与.NET咨询公司Neudesic, LLC合作。

我还在城里的Bellevue社区学院教授编程。

我正在为O’Reilly写一本关于哲学、心理学和软件交叉的书。

说真的,我只是闲逛,喝白俄罗斯人,你知道的,努力帮助人们找到真正能让整个系统融为一体的地毯。

您做什么?

我做的绝大多数事情都在公司防火墙内或保密协议下,所以很遗憾,我不能多说什么。(律师们真的需要学会遵守规定,伙计。)

我接触过的最商业化的项目是在我职业生涯早期,当时我为IntuitQuicken 5 for Windows做过合同工。那很有趣——那些16位C代码,他们“翻转了位”使其变为32位,但大部分仍然是他们从Quicken 1就开始打磨的C代码。很棒的东西,伙计。

如今,我做很多架构咨询、一些SOA、一些Java/.NET互操作、互联系统方面的东西、一些NoSQL,以及一些移动开发,比如iOS和Android。

我在会议上有一个名为Architectural Katas的工作坊,面向架构师或未来的架构师,让他们练习系统架构。很有趣。

我还做过很多其他事情,但那都是简历上的东西,伙计。很无聊。

您的开发环境是什么?

这很大程度上取决于项目——我在Java领域和.NET领域都花费了大量时间,并且我对很多不同的语言和框架进行研究,所以我实际上有很多不同的开发环境。

我有一台MacBook Pro,上面都运行着VMWare,还有几台PC笔记本:两台IBM Thinkpad T42p,因为那是一台出色的机器,我当年很喜欢它,一台Dell D630,我在某个地方淘来的,以及一台现在的联想W510怪兽,它是目前我用于运行各种语言和平台的VM的VMWare宿主机。

另外,我还有大约六个不同尺寸的Android平板电脑,另外六部Android手机,一台iPad,iPhone 4S,iPhone 3GS,几台iPod,我的办公室里可能还藏着一台Palm Pilot V,纯粹是因为它。

语言……我是一个语言“杂货商”,伙计。C#F#,Java,ScalaJavaScriptCoffeeScriptRubyGroovyNemerleBooClojureLispSchemeErlangHaskellLuaYetiFregePrologDROCamlGoogle GoDart……追踪和玩弄它们都很有趣。

我最喜欢做的事情之一就是定期去寻找更多语言来探索和把玩——例如,我正在考虑将Piet移植到.NET,纯粹为了好玩。而创造Piet的那个家伙还有一个名为Zombie的语言,我认为它从来没有过实现,所以我想为它做一个.NET或JVM的实现。也许改用Parrot。还不确定。

我唯一没怎么用过的语言是Perl。Perl很糟糕。

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

哦,我尝试接触它们——它们都有一些有趣之处。

我很快就会写一篇关于Oak的文章,这是一个非常有趣的、基于动态的Web框架,感觉很像Ruby,但你实际上是在C#中,并在ASP.NET中运行,它有一种很酷的“两全其美”的感觉。这感觉很有趣。

在Java领域,我正在尝试Play框架,这是一个Web框架,它充分利用了Scala的强类型静态类型系统;我认为一个等效的F#版本会非常强大。它还包含了Erlang大力推崇的消息传递语义(在一个名为Akka的库中)。

但目前我最感兴趣的是Elm,这是一个基于Haskell的语言,用于在Web上构建函数式响应式编程系统。当你第一次看到它时,会觉得有点诡异,因为你正在连接函数,这些函数将在特定的事件源(如鼠标位置、按钮点击等)产生的数据流中被触发,所以感觉你是在做事件处理,但它远不止于此。这和Erik Meijer在构建.NET的Reactive Extensions(以及JavaScript,现在还有Java一些其他地方)时所谈论的是完全一样的。

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

哦,伙计,它们都有各自的用处。一个人在编程练习中所做的任何事情,都是有原因的。只是有时候我们已经忘记了那个原因是什么。

匈牙利命名法在缺乏真正良好类型系统支持的语言中是有意义的,但在如今IDE中拥有像IntelliSense和“悬停提示显示对象类型”这类功能的时代。现在呢?这取决于它是否让你更容易看懂代码?还是必须先输入那些奇怪的小字符让你很烦恼?选择让你感觉良好且看起来正确的。

我个人喜欢把花括号放在下一行,但说真的?用任何现代IDE,修复它就像打个字一样,我们为什么还在争论这些东西?

然后你还会遇到像VB、F#或Python这样的语言,它们没有花括号,只有关键字或缩进,这样就没有争议了。

您是如何开始编程的?

我写的第一款游戏叫Little Brick Out,那可以追溯到1978年我们得到的Apple II+。爸爸坚持认为,如果我想玩游戏,我必须先学会它是怎么构成的,所以他打印了它的Applesoft Basic源代码,并有点让我觉得,每次想运行一个程序都要看源代码。(我很快就明白了事实并非如此,但仍然……)然后我了解了Apple-Trek和其他几个游戏,我心想,“伙计!这太酷了——我想做我自己的版本!”

直到上大学第三年,我才真正考虑以编程为职业。我和我的两个室友当时正在构建一个电脑版的Supremacy(类似Risk但增加了经济和核武器),因为我们非常喜欢玩它。那全是C++和Windows,我们都是自学的。

我的一位室友看到一家本地公司招聘全职程序员的广告,伙计,他用“双重诅咒的挑战”让我去面试。你知道,在男人之间,没有比双重诅咒的挑战更严肃的了——输了就等于失去了男子气概。总是让赢家先拿第一片披萨。或者别的什么。所以我去面试了,当他们叫我回去进行第二次面试时,我有点震惊——在大概40个人中,我是4个进入决赛的之一。我没得到那个职位,但那让我觉得:“哇,人们会付钱给我做这个?”

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

看过我Twitter动态并阅读过我的博客的人大概知道我的看法;我最近写了几篇博客文章,谈论我在“软件工匠”运动中看到的一些固有的傲慢和自负(以及为了回应一些评论而写的“更多关于工匠精神”,以及我用来总结的“关于工匠精神的最后想法”)。

总的来说,我认为开发者社区是一群很酷的人,但我们太傲慢了。我是说,我坐在这里听软件开发者们说话,你可能会觉得我们是地球上最了不起的人,为什么政客、科学家和宗教领袖没有来找我们寻求解决所有问题的办法?

真实故事:2010年,我在新奥尔良参加TechEd,在新奥尔良水族馆举行了一场派对。那是在那里的BP石油泄漏事件发生后的一两个月,我和另外四个人站在BP赞助的“墨西哥湾生态系统”展览前。我们开始讨论BP本应采取哪些措施来阻止石油泄漏,突然我想到:“等一下,这里有五个人,他们没有海洋生物学、海洋工程、化学工程方面的背景,却像专家一样滔滔不绝地谈论那些对这个问题研究了毕生、正在努力解决问题的专家应该怎么做,好像我们自己知道似的。”

这让我大开眼界:我们软件人有一种非常惊人的倾向,喜欢告诉别人他们应该做什么、不应该做什么,或者应该怎么做、不应该怎么做,而且我们真的期望人们改变他们在工作或生活中的生活方式,仅仅因为我们告诉他们。然而,当医生跟我们说同样的话时,我们就会去上网搜索,来证明他们是错的,因为在互联网的某个地方,有人说了与那个毕生研究医学的人相矛盾的话。

这不是出于恶意。我们不是坏人。我们只是习惯了在技术领域充当专家,而这是一个很多人完全不了解的领域,我认为我们有点被诱惑成被看作是专家,以至于我们掉进了认为自己在所有领域都是专家的陷阱。然而,当你去看看我们领域真正的专家——StroustrupOderskySymeKernighanRitchie,所有那些人——你会惊讶于他们的谦逊。我希望更多的开发者花更多时间倾听而不是倾诉。

但尽管如此,我还有其他更愿意去的行业吗?绝对没有,伙计。每个团体或人群都有他们沃尔特,他大多数时候都太认真地对待事情,喊着“shomer shabbas!”好像那是借口,但你知道吗?在这个群体里,他很合适。我们不会多看他一眼(当然,除非他掏枪威胁我们说标记为“零”),这种接纳就是很酷。

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

我也在Managed Coder:给新程序员的建议中写过这个,如果你想看完整内容,但我会引用它

在我为一家名为Tangible Vision的初创公司工作的第一个专业编程工作中,我遇到了开发副总裁Hussein Dalmouti,他教会了我我认为一个程序员能学到的最重要的课程——“无我编程”。

无我编程的根源在于1971年Jerry Weinburg的书《计算机编程心理学》。Weinburg描述了一种高度依赖同行评审的开发环境。他创造这个词是为了描述在这个环境中工作了一段时间的程序员。其核心理念——当多双眼睛审视代码并或隐或显地评价它时,代码就会得到改进——与熟悉敏捷原则,特别是结对编程的开发者来说,听起来异常熟悉。

“但无我编程不仅仅是将你的代码展示给别人评判。30多年后,Lamont Adams在techrepublic.com上发表了一篇文章,提出了‘无我编程十大诫命’。

理解并接受你会犯错。

你不是你的代码。

无论你有多强的“空手道”,总有人会比你更强。

未经咨询,不要重写代码。

对待比你懂的少的人要尊重、谦逊和耐心。

世界上唯一不变的就是变化。

真正的权威只来源于知识,而非职位。

为你的信念而战,但优雅地接受失败。

不要成为“房间里那个爱出风头的人”。

批评代码而不是批评人——善待编码者,而不是代码。

我认为每个年轻的程序员都应该努力成为一个无我程序员——我认为遵循这一点只会带来好处。

并且休息一下。说真的。离开键盘,做一些完全与技术无关的事情。去打保龄球。读读《The Dude De Ching》。或者随便什么。

© . All rights reserved.