最近我被一家公司拒了。
为了申请这家公司我花了三个半月的心血。我事先研究了这个公司的一切,对它了如指掌。他们的创始人在网上公开发表过的任何东西我都可以倒背如流。
不过我还是想的太美了。
就像在博客上写文章一样,我写了很多实际的代码和例子来介绍怎样改进他们的应用。
而且,尽管我把所有精力都花在了解这家公司上,我还大声对自己说,想拿到这份工作绝不轻松。尽管我不觉得这样会有什么用,但说出来的确感觉舒服许多。
在我关注他们几个月之后,我终于引起了他们的注意。我和他们的CTO愉快地通了次电话,他要求我去参加他们的代码笔试。
我花了一个星期的时间写出了完美的答案,他们的团队对此也非常满意。于是我自信心大增,觉得应该可以安心了。
然后我参加了他们的一对一编程测试。
两天后,我收到了一封拒信。他们告诉我,我不适合他们公司。也就是说,我花了两千小时上了一堂只有一个小时的课。
我瘫倒在沙发上。他们说得对,我不适合他们的需要——我只是花了几个月的时间来说服自己罢了。
回想起来,很容易发现我当初的行为是多么不理智、多么充满风险。我猜测,那时的我很害怕被拒绝,因此才会尽一切努力去避免被拒绝。
而绝大多数其他人都在往相反的方向努力,即把简历群发给尽可能多的公司。虽然收不到任何回应。
在这次惨痛的被拒后,我开始更理智地思考这件事(仿佛我还有其他选择一样......)。最终,利用它,我作为iOS开发者加入了一家我真正适合的公司。
这篇指南的目标?
我的策略不需要多广的人际网络,对于在寻找全职工作的人都是适用的。尽管不需要认识别人,但懂得如何沟通和自我营销却非常有用。
你需要准备好自己——也就是说,要做到至少以下之一:
发布一个应用并使之可以下载;
发布开源项目,或为开源项目做贡献;
作为某个领域的话题领袖发表的文章;
或其他任何与工作经验有关的东西。
如果你没有任何卖点,那我也帮不了你。
读完这篇指南你会了解到,在2018年,你都需要什么,才能在那些做消费者应用的公司里获得一份iOS工作。
关于我
我从iOS4时代就开始编写应用了。我没有大学学位,没有过全职经历,也从来没有在“敏捷”环境工作过,甚至没有在大型团队中工作过。
许多公司都因为我的简历上没有大型团队工作经验、没有大学学位而拒绝了我。
但我也不是一无所有。我的应用达到了一百万下载量(https://medium.com/@thecaraway/how-i-lean-startupd-my-way-to-240k-on-the-saturated-app-store-92862ba3c6fc)。我与人共同创办了一家创业公司(虽然启动资金很少),还作为自由职业者为一些很棒的客户工作过——我有许多不错的公开项目能展示我的技能。
终于我在主流技术市场中找到了工作(位于德克萨斯州Austin),但我同时也得到了许多远程工作的机会。我得到的工作是一份高级职位,但我认为这些经验也能帮到初级和中级程序员。
在开始真正的内容之前,我想说:
获得工作的最重要一点就是:记录一切!
记下每个公司的要点,跟踪每份简历和求职信的效果,每次面试之后都要做记录,这样才能最快地成长。
研究你的iOS简历
我不想重新发明轮子,所以如果你有时间可以读读这篇开发者简历指南(https://medium.freecodecamp.org/how-to-write-a-good-resume-in-2017-b8ea9dfdd3b9)。
你要是没时间,可以看看我求职成功的这份简历(稍微修改过):
简历应当简明易读。用易读的格式列出你的成就,并着重标示出使你出色的那些成就。
你的简历应当有以下内容:
教育背景(如果你有学位,或者上过重要的课程);
工作经历;
开源贡献(要提供链接);
你开发的应用(尽可能提供链接);
最相关的技术技能(尽可能少);
任何其他值得一提的东西(如参加的俱乐部,你创办的开发者聚会,你获胜的黑客马拉松等)。
不要写你是高级还是初级,让简历自己展示出这一点。
准备几个不同版本的简历。每份简历都应当按照适合公司的方式修整细节。
这并不是要你撒谎,而是要按照公司最希望看到的方式去推销你自己。
其他加分项目
1、建立个人网站。
个人网站可以展示简历中无法展示的东西。可以看看我的网站(http://robcaraway.com/about/)。我去InMotion Software(http://www.inmotionsoftware.com/) 的办公室面试时,他们当场打开了我的个人网站页面,几天之后我就被聘用了。
这个个人网站的例子也不错(https://peterlyons.com/)。个人网站要保持整洁,并且要用那些公司最想听到的方式来表达你自己。
如果不得不撒谎,那很可能你不符合那个职位的要求。没关系,调整一下自己的期望就好。
如果你不擅长网站开发,那可以在Squarespace或Wordpress等地方建网站。
如果你懂得网站开发,一定要自己建网站。我的是用Node.js和Hexo建的。这样就能表现出我能够在必要情况下跳到另一个编程领域中。这一点当然应该让雇主知道。
2、建立强大的LinkedIn个人页面。
如果你觉得LinkedIn很“弱”,那就是给自己找麻烦了。我在LinkedIn上得到了好几份工作机会。
比如,看看我的这个(https://www.linkedin.com/in/rob-caraway/)。不需要成为LinkedIn专家,我也是去年刚刚开始建这个页面而已。
保持上面的信息最新,而且要拍一张好看的照片。我自己拍了张作为头像,找个图像编辑软件修一下,再多练练怎样才能拍出好看的照片。
给个人页面上加入特定的关键字,能让你出现在特定的搜索结果中。
如果你生活的地方竞争不如Austin激烈,那你应该能很快脱颖而出。
申请工作的聪明方法
下面是找到iOS开发者工作的好办法:
在Angel.co(https://angel.co/)上找工作(选择你的领域,选中“Remote OK”的工作);
搜索“iOS Developer jobs [你想去的城市]”,Google、Glassdoor、ZipRecruiter和Indeed都会出现相关的结果;
搜索“remote iOS Jobs”;
如果你在stackoverflow上建了不错的个人页面,可以看看它网站上的工作;
GitHub同理;
在LinkedIn Jobs上搜索iOS developer;
在相关的技术活动中建立人际关系。
还有最后一点:通常每个城市都会有本地的技术网站,比如Austin的BuiltInAustin(https://www.builtinaustin.com/jobs)。我实际上就是在这个网站上找到我现在工作的公司的。
把相中的工作保存在文档中(我用的是Apple Notes)。要记录下他们的网站、应用、Glassdoor评价,以及任何你喜欢或不喜欢这家公司的东西。
确定合适的申请频率,要留出足够的学习时间。
对于我来说,一周申请两到三个公司很合适。但如果你已经有全职工作了,那么也可以每两周申请一次,或者更慢的速度,只要你能保持速度就好。
想一想每个公司有什么你喜欢的地方。也许你对他们的产品并不完全感兴趣,但你可以喜欢他们的技术,公司的文化,你能学到的东西,或助人为乐的人们。
写求职信
在研究之后,你应该能发现公司的闪光点。这些闪光点可能是招聘广告中提及的内容。
用这些闪光点来表述你为什么适合他们,你希望他们怎样回复你。
求职信要用休闲的语气,没人愿意读500字的空洞官话。
把笔记中关于公司的亮点找出来,然后选出一两条吸引你的。用你自己的话简短介绍为什么你适合这家公司。
下面是使我获得电话面试的求职信:
注意即使有错别字也不要紧(尽管还是没有错别字最好)。
注意我是如何描述我缺乏团队合作经验的:描述成我渴望并希望克服的东西(其实也是事实)。
像简历一样,求职信也要写多个版本,并用电子表格记录下哪个可行,哪个不可行。
准备代码笔试
代码笔试是个能用自己的时间完成的小型编程练习(通常会有个宽松的截止期限),用来测试你的知识和编程技巧。
代码笔试通常会包含一两个视图控制器的题目,并会涉及到一两个相关的技术(如networking和core data等)。
我不想泄漏每家公司的代码笔试题,但我认为,即使是我申请过的公司,他们也希望面试者能够更好地准备他们需要的知识。
所以这里我不会介绍细节,但我要列出我参加过的代码笔试中的一些重点:
AutoLayout(https://www.raywenderlich.com/125718/coding-auto-layout)和Autoresizing(https://stackoverflow.com/questions/12986130/proper-autoresizingmask)视图;
调整文字大小适合不同的屏幕(动态文本,https://www.raywenderlich.com/77092/text-kit-tutorial-swift);
使用基础API进行网络调用;
使用TableView和CollectionView;
用Core Data、UserDefaults或Archiving持久化数据;
知道如何使用故事板,也要学会手动编写试图和控制器;
Size classing(https://www.raywenderlich.com/162311/adaptive-layout-tutorial-ios-11-getting-started);
异步加载图像并显示在主线程上;
给TableView或CollectionView增加无限滚动;
代码模块化,不要把所有东西都写在同一个视图控制器中,知道如何构建不可修改的模型和服务层对象。
同样的知识点也会出现在面试中。
写出完美代码是不可能的,也没必要。
但当写出不完美的代码时,可以加上 // TODO 或 // FIXME标记,并写上你希望如何改进,告诉团队你做出这些妥协的理由。
代码笔试还会测试你是否能做出人们喜欢的产品。如果你知道怎样快速、顺利、漂亮地做出产品,那就做出来给他们看(即使他们不要求这么做,并且你有时间),除非他们明确说不需要。
怎样进行一对一编程面试?
并不是每个公司都会做这一步,但做好准备很有必要。
一对一编程的题目可能是你在编程笔试中写出的代码,也可能是类似于你加入公司后的工作内容的题目。
不幸的是这一部分很难“作弊”。你必须依靠本能,因为你做出的任何行为都会被别人看到,无法改变。
但不要有压力,而且要享受做题的过程。如果你之后觉得还有可以改进的地方,一定要记录下来。
可以找个朋友在一些项目上做练习,练习得越多越好。
准备面试
需要准备的知识点有:
算法复杂度的O表示方法,比如Swifft或Objective C中的O;
数据结构;
用Swift建立链表;
Swift中struct和class的对比;
理解Swift标准库的数据结构的原理(最基本的理解);
MVC,MVVM(https://www.raywenderlich.com/192471/design-patterns-by-tutorials-mvvm);
编写你在编程笔试中写过的代码;
或者编写代码解决公司可能会遇到的类似问题;
你的兴趣和目标与公司的目标的契合程度;
很可能会被问及“你五年后的职业目标是什么”的问题。
建立对公司感兴趣的过程通常是个“假装”的过程。你对公司的研究越多,对如何给公司做贡献的途径研究得越多,你的兴趣就越能“神奇地”与他们契合。
不过也不要太努力。那些在Glassdoor上差评很多或目标不明确的公司应当尽力避免。
从我发现的情况来看(尽管并不一定绝对正确),越是大公司,面试就越学术向。可以准备下那些大公司的“脑筋急转弯”题目。
小公司的面试通常是非正式的,因为他们不需要这样做。
其他重要的准备方式:
阅读《Advanced Swift》(https://www.objc.io/books/advanced-swift/);
在闲暇时间做在线的swift题目(https://www.hackingwithswift.com/test);
阅读《Cracking the Coding Interfview》(https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850/ref=pd_lpo_sbs_14_t_0?_encoding=UTF8&psc=1&refRID=DC92Y76B7Z8DXK6VWH9T),特别是关于数据结构和算法复杂度的部分。
最后的感想
不要太专注于一份工作,也不要对所有工作都不在乎。要找到平衡点。
完全遵从这个过程能够不断进步。我面试成功的那份简历与我最初的简历截然不同,我也学到了如何用平静的态度去对待面试。
让过程给你插上翅膀。每次失败都会让你更进一步,所以重要的是你在这个过程中学到的东西,而不是是否得到了那份工作。
最后,如果你在Austin区域,可以来我们公司:InMotion Software(https://www.builtinaustin.com/company/inmotion-software/jobs),我们这里的工作很愉快!
原文:https://blog.usejournal.com/a-complete-guide-to-getting-hired-as-an-ios-developer-in-2018-d7dcf50dc25
作者:Rob Caraway,iOS开发者,作品已达到一百万的下载量。
译者:弯月,责编:郭芮
CSDN 公众号秉持着「与千万技术人共成长」理念,不仅以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让所有的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。
如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。
————— 推荐阅读 —————