与 Mike Ash 的程序员访谈






4.94/5 (13投票s)
欢迎来到我们持续进行的 Code Project 访谈系列,在这个系列中,我们与开发者们交流他们的背景、项目、兴趣以及让他们头疼的事情。在本期中,我们采访了 Mac 和 iOS 开发者 Mike Ash。
欢迎来到我们持续进行的 Code Project 访谈系列,在这个系列中,我们与开发者们交流他们的背景、项目、兴趣以及让他们头疼的事情。在本期中,我们采访了 Mac 和 iOS 开发者 Mike Ash。
你是谁?
我的名字是 Mike Ash,在编程社区里更常为人所知的名字是 mikeash。我住在亚历山大(Alexandria),一个华盛顿特区(Washington, DC)的郊区,是一名软件工程师,在 Plausible Labs(Plausible Labs)工作,这是一家位于纽约和旧金山的工人所有制合作社(cooperative)。
由于在我说出这些之后,下一个问题总是要问在这种情况下合作社究竟是什么意思,所以我的意思是,我们基本上没有层级,我们很大程度上通过共识来管理,每个人都有权参与公司决策。我对 PL 来说还很新,但到目前为止,它似乎运行得非常好。
您做什么?
我最近在 PL 的大部分时间都在开发一款名为“Comics”(Comics)的移动应用,我们为 comiXology(comiXology)开发这款应用。他们是数字漫画的顶级发行商,包括漫威(Marvel)和 DC(DC)等大牌,Comics 应用是他们在 iOS 和 Android(包括 Kindle Fire)上的数字购买和阅读平台。
我花了大量时间在这两个版本上,主要是后端方面,比如下载和存储系统。我擅长处理比特和字节,但不太擅长人机交互,所以更隐蔽的领域是我的专长。我很幸运能在 PL 与极具才华的设计师和 UI 程序员共事,所以我们涵盖了所有的方面。
在 2011 年夏天加入 PL 之前,我在 Rogue Amoeba(Rogue Amoeba)工作。他们是一家小型独立公司,专注于面向消费者的 Mac 音频软件,包括录音、编辑和广播音频的软件。同样,我倾向于更专注于后端方面,包括音频处理代码和网络代码,我很乐意地说,他们生产的几乎每款产品我都参与其中。他们是一个很棒的团队,产品也很棒,值得去看看。
我还为 Mac 和 iOS 开发了相当广泛的开源库。同样,我的代码倾向于低级别的后端内容。这里没有自定义按钮!我最受欢迎的库可能是 MAObjCRuntime,这是一个面向对象的封装器,围绕 Objective-C 运行时(Objective-C)的各种内省功能,以及 MAZeroingWeakRef,它为 Objective-C 添加了归零弱引用支持。(Objective-C 现在通过 ARC 内置了归零弱引用,但仅限于最新的操作系统版本,并且仅在使用 ARC(ARC)时。我的库没有这些限制,因此在针对旧版本时可能很有用。)我的库可以在我的 GitHub 仓库(my GitHub repo)中找到。
您的开发环境是什么?
我的主要工作电脑是一台 2008 年的 Mac Pro(Mac Pro),这是一台 8 核 2.66GHz Xeon(Xeon)机器,配备 16GB 内存和 256GB SSD 作为主启动驱动器。它速度极快,通常能应对我交给它的任何任务。我连接了两个 23 英寸的显示器,通常一个用于编写代码,另一个用于查阅文档、辅助代码、聊天等,但我在这方面不是很固定。
对于 Mac 和 iOS(iOS)开发,我使用 Xcode(Xcode)。我不喜欢 Xcode,尤其认为 Xcode 4 在 UI 和稳定性方面是一个重大的倒退,但市面上并没有太多其他选择。我很有兴趣尝试 JetBrains AppCode(JetBrains AppCode),但还没有真正有机会去好好地使用它。
对于 Android(Android)开发,我使用 IntelliJ(IntelliJ)。它并不是一款非常 Mac 风格的应用程序,但在习惯之后,我发现它相当不错。我之前使用 Eclipse(Eclipse)进行 Android 开发,但它速度更慢,并且在与我的 Android 设备连接方面更难搞。
我也会做一些 Python(Python)开发,主要是维护我的网站和一些业余项目。为此,以及一些小型的 ObjC 程序,我使用 SubEthaEdit(SubEthaEdit),这是一款轻量级的 Mac 纯文本编辑器,以其实时协作编辑功能而闻名。我几乎从未使用过协作编辑功能,这让我有点难过,但它是一款不错的简单文本编辑器。
当然,我也需要这些移动应用的测试硬件。我收藏了相当多的设备,包括几台 iPad、一台 Kindle Fire、一台 Galaxy Tab(Galaxy Tab)和两部 iPhone。
您对哪些新工具、语言或框架感兴趣?
IntelliJ、Java(Java)以及整个 Android 生态系统对我来说仍然很新。我真正认真开始做 Android 是在几个月前。与 iOS 开发相比,它是一个有趣的大杂烩。一方面,拥有垃圾回收、命名空间等现代语言特性非常棒。另一方面,缺乏 Lambda 表达式是一个严重的痛点,而 Java 整体的冗长有时也令人厌倦。
在完全不同的新工具方面,我也开始玩一些 Arduino(Arduino)。那种小规模的硬件类工作非常有趣。不幸的是,我很难想出一些真正有趣的实际构建项目,但到目前为止,我构建了一个硬件 CPU 负载监视器,使用一排 LED 作为实时图表,以及一个自动音频切换器,根据哪个端口正在播放音频,在两个输入端口之间切换一组扬声器。
您最讨厌的编码习惯是什么?
我不确定我有什么特别讨厌的编程习惯。总的来说,我尽量保持灵活,使用任何必要的技巧来完成工作,并努力适应我正在合作的团队和代码库。
我想,如果我有什么特别讨厌的编程习惯,那会是那些过于专注于自己的特定技巧和流程而忽视了工作本质的人。花半个小时争论星号应该放在哪里是没有效率的!任何有能力的程序员都应该能够适应细微的风格或技术差异,而且谁知道呢,如果你尝试用别人的方式去做,你甚至可能学到新东西。
话虽如此,虽然我不太在意你如何实现它,但你的代码必须清晰。我绝不容忍那些(幸运的是很少见的)认为缩进普遍不必要,变量名可以随意取自他们最喜欢的电视节目角色的程序员。我不会说你必须按照我的方式格式化代码,但你最好至少以某种方式进行。
您是如何开始编程的?
我的编程历史相当长而乏味。我最初在 Commodore 64(Commodore 64)上使用 BASIC(BASIC)。我并没有深入研究,但那是我的第一次尝试。
然后我转向了 Apple IIGS(Apple IIGS),最初在那里使用 BASIC,然后是 Pascal(Pascal)。仍然没有深入太多,但我确实制作了几个简单的游戏和其他玩具。
在那之后,我得到了一台 Mac,并开始用它编写 Pascal,然后(向上?向下?)转为 C。我在 OS X 最初发布时转向了 Mac OS X 和 Objective-C,并以此为基础。
开发者社区是如何影响您的编码的?
开发者社区教会了我很多。官方文档和示例只能带你走这么远,纯粹的独立探索也有其局限性。我从同行那里学到了有趣、巧妙且极其有用的技巧。
我主要使用 Twitter(Twitter)、GitHub、IRC 和我自己的博客(blog)来做这些事情。我很幸运我的博客有许多非常聪明且信息量很高评论者。
另一方面,至少 iOS 社区总体上对苹果的热爱程度超出了我的想象。苹果与 iOS 开发者社区的关系一直充满争议,从乔布斯最初“绝妙的解决方案”(让每个人都做 Web 应用)到痛苦且愚蠢的应用商店审核流程。然而,在所有这些情况下,总有响亮的声音为那些直接损害我们的举动辩护,甚至赞扬苹果。
我认为,太多的 iOS 开发者将苹果视为他们家乡的体育队,将苹果的成功视为自己的成功,将苹果的失败视为自己的失败,并将自我形象与母公司密不可分。总的来说,我认为这种态度让苹果能够对其生态系统施加比否则更大的控制力,并且远远超过了对独立第三方开发者真正健康的程度。
您会对一个新兴的程序员提供什么建议?
对于崭露头角的程序员,我的建议是永远不要停止探索,永远不要害怕尝试新事物,多阅读,多阅读,多阅读。我经常看到人们建立一个小的舒适区,然后就再也不离开。这是一个很容易陷入的陷阱,但如果你这样做,你就会错过很多做有趣事情的机会。
面对神秘的事物,去弄清楚!例如,当人们遇到苹果代码中的一个神秘崩溃,在调试器中看到汇编转储,就束手无策并停止尝试。不要这样!汇编并没有什么神奇的。你可以在一下午就学会基本知识,这些知识将为你的一生服务。显然,寄存器、条件跳转和直接内存访问与我们大多数人所处的更柔和的面向对象世界相去甚远,但它并不更难,只是不同!
对于不熟悉的语言、不熟悉的算法、不熟悉的数据结构,甚至是其他任何事物,情况也一样。每次遇到它们,都是一个成长的机会,一个学习的机会,一个让你做得更好的机会。有些东西可能仍然超出了你的理解能力或知识水平,但不要仅仅因为某样东西很奇怪就认为就是如此。
最后,不要害怕尝试。编程很可能是存在过的最宽容的创意活动。如果你搞砸了,通常什么都不会发生。没有人会死亡,设备不会被毁坏,也不会释放出有毒化学物质。你甚至都不会浪费任何材料!你能想象一个建筑师通过建造一座试验房来测试一种设计技术,看看结果是否好吗?所涉及的时间和金钱成本是惊人的,如果真的出了问题,甚至可能有人受伤或死亡。但作为一名程序员,做同样的事情是实际且常规的。
许多人会花几个小时研究一个只需要 20 分钟就能测试出来的问题。阅读很好,但你会达到收益递减点,而实验可以教会你很多东西。失败的代价很低,所以要好好利用!