与 Andreas Håkansson 的程序员访谈





5.00/5 (10投票s)
欢迎来到我们持续进行的 Code Project 开发者访谈系列,我们在此与开发者们交流他们的背景、项目、兴趣和痛点。在本期节目中,我们采访了 Andreas Håkansson。
欢迎来到我们持续进行的 Code Project 开发者访谈系列,我们在此与开发者们交流他们的背景、项目、兴趣和痛点。在本期节目中,我们采访了 Andreas Håkansson,他也是两个广受欢迎的开源 Web 开发项目:Nancy 和 MefContrib 的创建者。
你是谁?
我叫 Andreas Håkansson,我居住和工作在 瑞典,是一名高级软件工程师。我在旅游行业工作,为我的雇主控制的众多品牌开发 电子商务 解决方案。
我对技术和软件开发充满热情,我也是开源软件的坚定拥护者,我大部分个人编码时间都花在开源软件上。我有点像一个框架迷,设计框架是我非常喜欢做的事情。
您参与过哪些项目?
在工作中,我为旅游行业的各种品牌开发各种网站,包括面向消费者 (B2C) 和面向企业 (B2B) 的网站。这项工作涉及从后端到前端开发的方方面面,全部在 Windows 环境下,使用 .NET Framework 和 Visual Studio。个人方面,我花了很多时间在我的开源项目(Nancy 和 MefContrib)上,同时使用 .NET Framework 和 Mono。
MefContrib 是一个由社区开发的、用于 Managed Extensibility Framework 的扩展集合。我开始探索 MEF 时,它大概还在 Preview 2 版本(我想)。我几乎花了太多的时间深入研究代码,找出如何让它做一些它并非为此而设计的功能(例如,使用 XML、流畅的接口以及任何你想要的方式来配置你的组合)。我很幸运地与 Glenn Block 建立了深厚的友谊,他当时是 MEF 团队的产品经理,这使我能够向团队提供大量反馈和各种用例的“烦人”问题。
后来,Piotr Włodek 加入了我,成为团队的核心成员。目前,MefContrib 包含了一些 MEF 的独特补充,例如(并非全部功能都列出):
-
基于约定的配置
-
IoC 容器桥接器,让 MEF 和你的 IoC 容器在组合应用程序时协同工作
-
自定义目录,例如可过滤目录,以及一个非常有趣的 InterceptingCatalog,它允许你使用 MEF 执行类似 AOP 的操作,并使用 Castle DynamicProxy 和 LinFu DynamicProxy 来劫持部件的创建。
Nancy 是我近一年前开始的最新开源项目。Nancy 是一个轻量级的、仪式感低的框架,用于在 .NET 上构建基于 HTTP 的服务。该框架的目标是尽可能地不干扰用户,并为所有交互提供一个超级用户友好的路径。
过去一年,这个项目经历了相当疯狂(以积极的方式)的发展。一旦我将项目的第一个骨架推送到 GitHub 并写了一篇博文,它就像火箭一样起飞了。很多人立即开始使用并玩耍它,社区几乎在第二天就诞生了。
该框架被设计成可以在任何地方运行,并且开箱即用,我们支持在 ASP.NET、WCF、自托管和 OWIN 之上运行,这使得 Nancy 可以在 .NET 和 Mono 上运行(进而可以在 Linux 和 OS X 等其他操作系统上运行)。它是为了拥有一个小的核心,然后根据需要添加一组扩展来增加功能而构建的。这方面的良好示例包括视图引擎和不同形式的身份验证(表单、基本身份验证等)。
此后,在社区的帮助下,Nancy 发展壮大了很多。后来 Steven Robbins(又名 @Grumpydev)加入了我,成为核心开发人员。如今,Nancy 是一个非常成熟的框架,支持所有主要的视图引擎、IoC 容器、模型绑定、安全、Cookie、CoffeeScript、Sass、protobuf,等等。
您的开发环境是什么?
一点都不花哨。在办公室,我运行一台四核 CPU、8GB RAM 的 PC;在家,我有一台双核机器(很快要升级)和 4GB RAM 以及一个 SSD。两台机器都运行 Windows 7 x64,配备 Visual Studio 2010 和 .NET Framework 4.0。
我很幸运地工作在一个不会固守使用旧框架版本或 Visual Studio 版本的地方。一旦新版本发布,我们就会尽快升级到最新版本。我猜我在某种程度上被宠坏了,能够将最新的好东西用于生产代码,而不必使用在 Windows XP 机器上运行 Visual Studio 2005 的 .NET Framework 2.0。
在工作中,我每天都会进行 C# 和 VB.NET(遗留代码)编程,但下班后,我更喜欢完全使用 C#。我们在工作中也充分利用开源框架,例如 NHibernate、FakeItEasy(由我的朋友和同事 Patrik Hägne 开发)、Autofac 以及其他许多框架。
您对哪些新工具、语言或框架感兴趣?
它们全都要?我喜欢尝试新事物,这既是诅咒也是祝福。我是 TDD 的忠实拥护者,目前正在探索 NCrunch 和 Mighty Moose,以减少仪式感,同时提高 TDD 的效率。
我绝对想花更多时间在 Ruby 上,并更深入地研究 JavaScript(如今 JavaScript 社区发生着一些真正令人惊叹的事情!)。我也希望有足够的时间认真投入学习 MonoDroid 和 MonoTouch。仔细想想,我也想花更多时间学习 Objective-C。我知道基础知识,但这主要是基于阅读,而不是实践经验。
您最讨厌的编码习惯是什么?
Steven Robbins 称我为“人类 StyleCop”,因为我痴迷于代码结构和一致性,所以我想这就是我的头号编码痛点!
您是如何开始编程的?
是我的父亲教会了我如何写代码。我七八岁的时候,他买了一台 Amiga 500。几年后,我开始对他正在进行的编程产生兴趣。当时主要是用一种叫做 AMOS 的基本语言进行编程,后来我使用了其他语言,如 Blitz Basic(我喜欢那种伪 Basic 语言!)、Amiga E、C/C++ 以及像 ARexx 这样的脚本语言。
我进入 PC 领域比较晚。我花了很多时间留在 Amiga 社区,但当我转向 PC 时,我开始使用 VB、Pascal 和 Delphi(后两者我只是玩了一下,从未认真做过什么)。最终,在 .NET Framework 的第一个公开版本发布时,我转向了 .NET 和 C#。
开发者社区是如何影响您的编码的?
我不得不说,在线社区对我的编码产生了最大的影响。 Twitter 使我能够与全球各地的开发者建立联系,其中许多人要么是各自领域的专家,要么是我正在使用的工具的作者。
在 Twitter 上认识的许多人后来又通过电子邮件、即时通讯和 Skype 建立了联系。最大的问题从来不是没有可以交流的对象,而是要弄清楚他们是否因为时区不同而醒着。这是一个令人欣喜的问题!
GitHub 是对我产生巨大影响的第二个在线资源。他们真正将社交编码提升到了一个新的水平,并且仍然是我参与的开源工作的绝佳资源。
作为一名程序员,如果你不利用社交网络在开发社区中建立联系,那么你肯定在打压自己。
您会对一个新兴的程序员提供什么建议?
这很简单!努力成为一名 多语言程序员。接触其他范例和方法论非常有益。无论你选择从哪种语言开始,一旦你感到舒适,就应该开始关注其他语言。
不必精通所有语言,但可以阅读关于它们的信息,并花点时间玩玩它们。它们会影响你日常编写代码的方式,并最终让你成为一名更好的开发者,用你选择的语言编写出更好的代码。