学无止境

学无止境

被访者简介:Natasha Murashev 作为一个俄国妹子在美国学了三年心理学后成功混入 FBI 担任行动计划专家,之后辗转 Google 等知名企业后,现在在 Captial One 从事 iOS 开发。作为一个 iOS 开发的一年级生,Natasha 已经取得了非常多的成就,并且维护了一个 Swift 周报。

Natasha,感谢你抽出宝贵的时间!你能简单介绍一下最近你的工作和开发者社区中做的事情吗?

我是 Captial One(第一资本金融公司,是美国一家金融控股公司,专营信用卡、房屋贷款、汽车贷款、银行等金融产品,名列财星500大之一。) 的一名 iOS 工程师,我们正在财政领域做一些令人激动的原生应用 。工作之余,我一般会起的很早,写写博客,学习或者创造点什么,可以说早上是我成长的时间。

你为什么会进入 iOS 开发这个领域呢?

我一直渴望学习,从我刚开始开发的时候就是如此。我在我的上一家公司主要是写 Ruby on Rails,他们有段时间很难招到 iOS 开发者,所以他们问有没有谁想转 iOS 开发的。那时我就开始想这个事情了,于是我报名了 Mobile Makers Bootcamp。我被录取后,就去找我的老板商量,他给我放了两个月的假,这期间我去芝加哥参加了为期 8 周的全职培训课程。我非常喜欢这段经历,有老师教给我很多最佳实践,和自己零零碎碎学习相比,我以非常快的加速度在学习。当我回来之后,我加入了 iOS team。

你能告诉我们一些有关 Bootcamp 的事情吗?你在那来学到了什么?

我们学习了很多 Objective-C,这是我刚开始遇到的最大挑战,因为它看上去实在太吓人了。早上学习到的新知识,会立刻在下午应用上:我会和其他人一些写一些小的 App 。我们每周都要完成一个 App ,在 Bootcamp 的最后我们还需要在 App Store 上架一个 App。

你是如何开始编程的,为什么呢?

这要说到我去旧金山玩的一个周末了,我立刻就爱上了那里的技术氛围 -- 积极而又富有创造力的氛围。我参加了很多线下聚会,学到了很多关于创业公司的东西。再后来我搬到了这里,不到一年的时间我就和一些朋友开始为一家创业公司工作。我那个时候还不太会写代码,但是我不喜欢帮不上忙的自己,所以那之后我很快就开始学习编程了。

所以你是自学了 Rails 然后找到了一份 Rails 开发者的工作?

是的。最初我是从斯坦福大学的一门用 Java 教学的课程入门的。它是一门在线课程,结束后我就开始学习 Rails 了。我能以 hack 的方式把东西串起来并工作。但是我知道这不是我想要的编程方式。那时,Dev Bootcamp 刚出来,我申请了,并在第二阶段课程结束。对我来说那是一个能以更聪明的方式来学习编程的机会。

顺带问一句,你在大学是学什么专业的?

心理学,它实际上是最有用的专业了。

人们对程序员有种很刻板的印象,认为他们独自找个地方宅起来编程就够了 (原文说的 basement,算黑吗?)。但是现实生活中你需要和其他人一起工作。在团队中工作更多的是关于群体动力学(一个心理学术语,或称团体动力学、集团力学,在共同工作时会出现的各种心理学和社会学现象、机制和过程的学科)和团体迷失 (另一个心理学术语,是一个心理学现象,指的是团体在决策过程中,由于成员倾向让自己的观点与团体一致,因而令整个团体缺乏不同的思考角度,不能进行客观分析)。有时候加入一些不同意见是非常重要的,因为相处久了,大家会变得只会认同某些事情,而这些事情并不一定总是对的。还有很多是关于领导力的,比如关心他人,建立良好关系等;这些都是每天编程之外需要考虑的。

因为你有心理学背景,你有什么对付编程中的起起伏伏的秘诀吗?比如那些你完全不知道发生了什么的沮丧时刻?

这实际上是我开始学习编程遇到的最大困难了,因为我不熟悉它们。在学校里,有个很简单的公式:刻苦学习 = 考试好成绩。甚至在我开始编程前的其他工作中,也是类似线性的过程 -- 事情总会变得更好。

我刚开始编程的时候,有时候会有这种情况:今天感觉自己已然站在世界的顶点,无所不能,而第二天就感觉完全不能写代码。最重要的事情是一直在学习如何 Debug,每次只走一小步,并且怀疑你的全部假设。

除了这些,冥想 -- 即只专注于呼吸,或者简单的走开,或者休息一下,对我很有帮助。有时候直接去睡觉是更好的选择。第二天你会发现问题很容易就被解决了。对我来说,这部分已经成为我在编程过程中最喜欢的挑战了。

你对最近新出来的东西怎么看,比如 Swift,WatchKit 和 iOS 8?你对它们感到兴奋吗?

所有吗?我喜欢学习。这是我作为程序员最喜欢的一点了。我在我做过的其他工作上并没有体会到这一点,但是编程的话,有更多起起伏伏和学习的机会。举列来说,Swift 表面上看起来很简单。当它公布的时候,所有的 Javascript 程序员都在说:“哈,我现在也是 iOS 开发者了”。但是呢,我用了一段时间发现,Swift 实际上比 Objective-C 更难。Objective-C 很简单,你只能做这么多事情。但是 Swift 是一个全新的世界格局,并没有最佳实践。有点像狂野的大西部,你的选择太多了。

拿 WatchKit 来说,虽然现在还非常简单,但是它未来的前景非常好。我只是拿到了一个 FitBit 设备,它无缝同步数据方式实在是不可思议的。我对 Apple Watch 跟踪并且无缝同步这些数据​​感到很兴奋。

如果我没记错的话,你最开始对它很失望,但是很快又激动起来了,没说错吧?

是的,WatchKit 缺少了一些他们宣称的一些特性。比如,没有针对 Digital Crown(Apple Watch 的旋钮表冠)或者 Tactic feedback (压力反馈,Apple Watch 可以通过不同力度的触摸来表现不同的交互)的 API。现在给出来的都是些很基础的 API,比如在 Apple Watch 上展示一个地图,iOS 系统会截一张地图的图片然后发送给 Apple Watch。后来我们举办了一个关于 WatchKit 的黑客马拉松,就算是用这么简单的 API 大家也做出了很多很酷的东西。

当 Swift 出来的时候,你很快就在社区中变得很瞩目,这是你“故意”的吗?

事实上我已经写了好一整子博客了。当我开始编程的时候就开始写了。这是我巩固知识的一种方式。现在我学到了什么,我就会把它写下来,这已经变成我的惯例了。所以 Swift 出来的时候,这是一种很自然的延伸。而且由于 Swift 太新了,有很多地方值得写,你会因为找不到答案而变得很抓狂。

你在 Swift 社区获得的知名度改变了你什么吗?

我只是接着做我一直以来在做的事情。我的确开了一个技术周报,但这也是我学习方式的一部分。要说新的内容话,我开始做一些演讲了。演讲很有趣,也能很好的巩固我的知识。因为当你需要教别人的时候,你需要真正了解你要讲的东西。在 WatchKit 黑客马拉松上,我们赌了一回,因为它的发布日期并不确定。到最后,我不得不在 3 天的时间内学会 WatchKit 并且教学。不过我很喜欢这种压力,因为它强迫我去学习;反过来,与 3 天成为 WatchKit 专家相比,如果只是自学的话,我可能会花费更长的一段时间,而且也不一定能学的更好。

现在,每个人都在学 Swift,或许在未来的几年内会有确定的一些模式。你认为我们还会像这样保持社区的开放吗?

我开始有种感觉,Swift 会给我们更多的选择以好的方式来解决特定的问题。在 Objective-C 里,大部分方法方式都很清楚,但是 Swift 允许一些不同的风格。希望这能够让大家学习不同的东西并保持思想的开放。

今年就要马上结束了,你有什么新年目标或者具体的计划吗?

是的,我的确有个清单。它很大一部分是要保持健康。Swift 是如此的令人兴奋,我一直在敦促自己并学习。但是我也希望自己能快点回归到正常的睡眠周期。因为我发现如果你睡眠充足,实际上你能完成更多的目标,尽管很多时候这并不符合直觉。另一件主要的事情是花更多的时间来学习。Swift 引领我进入了一个我想学习的新世界。以我现在的编程经验肯定会错过一些内容,所以我会专注这方面内容的学习,然后灵活运用它们,写出更好的代码。

你有什么长期的目标吗?

我并不喜欢想太长远,因为事情变化太快了。这有点像代码:你不得不推倒重写。对我来说,更重要的是每天能保持好的状态而不是有一个大大的目标。每天醒来我会问自己,我开心吗?我知道哪些事情能让我高兴:比如学习,保持健康,还有旅行。这些是以保持自我为中心的的三件大事。我觉得通过学习更多我还能收获更多,或许一年后,我会专注在真正创造和发布一些东西。

你会预见自己会做一些和编程完全不同的事情吗?

大概不会,我真的很享受编程。也许 10 年之内还会一直享受吧,谁知道呢?我不知道我是否还能找到一个领域能让我学无止境。我也一直对学习硬件的一些东西感兴趣,不过我认为我会和软件一起来学习。只要我不断的学习新的知识,不断挑战自己,我很乐意继续现在做的事情,稍微偏离一点我的舒适区会让我很开心。

当你学习 iOS 或者 Rails 的时候,有没有一些人或者说导师确实启发了你?

我从和那些比我经验丰富的人结对编程之中学到了很多。结对编程真的能加速学习过程。当我遇到问题或者 bug 的时候,我会为找到一个解决方案而高兴不已。但是更资深的程序员会从不同的视角来看待它 -- 不仅仅要能解决问题,从长远来看它应该也是一个好的解决方案。对于 Swift,我从社区里学到了很多,它太新了,所以我正在尝试读更多的书以及向那些比我优秀的人学习。

当你结对编程的时候,你有学到什么大的教训吗,抑或是更多的小细节?

我很注重细节,所以我喜欢学到的小细节或者小技巧。比如,我的同事告诉我在 Xcode 中可以打开 Clang analyzer 来获得更好的编译警告信息。如果他不告诉我,我也不会知道,甚至也不会去 Google 这类事情。当你结对编程的时候,你会学习到那些人们已经习以为常或者认为理所应当的小细节。事实上,我最受欢迎的一些博客文章大部分都是关于这类小细节的,尽管我最开始假定是:除了我可能大家已经都知道了。

至于说大的事情,我在 Capital One 的一个同事向我展示了如何在真实环境下应用 MVVM 这个设计模式。我听过这个术语,也听说 Facebook 也在讨论它,但是我并不确定它是如何工作的,在他的指导下我过了一遍一个实际的实现,这真是太赞了。现在我在不同的 App 里一直在使用 MVVM 模式。

还有什么你想分享给大家的吗?

哈,成为一名 iOS 开发者很有趣。对于那些正在思考是否要转 iOS 开发的人,我想说的是:这很有挑战,同时也会是一段令人兴奋的旅程。

译者的一些私货:

最早是通过 Google 知道她的博客的,一篇讲解很清楚的关于 UIEdgeInSet 的文章,后来就订阅了她博客的 RSS,也在 twitter 上 fo 了她,再后来就是 Swift 和 WatchKit 的文章了~。


原文 Infinite Things to Learn