本文由 简悦SimpRead 转码,原文地址 kean.blog
学习iOS工程从未如此有趣
上周,我在Twitter上做了一个投票,要求大家分享iOS工程师的最佳学习材料,结果被大量的回复所淹没。 它非常有洞察力,我想把这些结果汇编成一篇文章会很好,我在这里做了,并加入了一些我自己的建议。
我需要你的帮助,Twitter。 对于初级/中级的iOS工程师来说,现在最好的学习资源是什么(可以是付费的)? > > - Alex Grebenyuk (@a_grebenyuk) November 9, 2021
最值得推荐 #
有几个异类得到了绝对大量的推荐。
Standford: CS193p - Developing App for iOS
初学者,免费 斯坦福大学的CS193p课程是迄今为止最值得推荐的资源。 我自己看了前几个视频,被它们的信息量所震撼。
斯坦福大学的手下来。 我向大家推荐这些讲座。 它是免费的,而且是一些最高质量的内容。 t.co/Msv1E7wb2M > > - Lauren N. Roth (@lauren_n_roth) November 9, 2021
关于这个课程,有几件事需要注意。
- 它的重点是SwiftUI。 我们仍处于过渡时期,大多数公司仍在使用UIKit,但已经值得在SwiftUI上投入时间。而且你在本课程中学习到的东西远不止SwiftUI。
- 本课程的主要目标受众是学生,它假定他们熟悉编程基础。 如果你要从头开始学习编程,你可能要考虑先通过其他资源。说了这么多,学习编程的最好方法是通过构建东西。
100 Days of Swift
初学者, 免费 第二大推荐课程是100 Days of Swift。 而且它并不是唯一的资源,Paul Hudson的Hacking with Swift。 在SwiftUI方面也有一个类似的课程--100 Days of SwiftUI,还有大量的其他文章和视频。
与Standford的课程不同,100 Days of Swift的重点不是应用开发,而是Swift本身。 如果你刚开始学习编程,这门课程很适合你。
强烈推荐@twostraws 100 days of swift t.co/Ud94Ju0aYg
还有@objcio课程t.co/DBs9fGdsi1 > > - inailuy☁️(@cloudssayhello) 2021年11月9日
t.co/50rv302VMv,参加100天的Swift课程。 还有一个100天的SwiftUI课程 > > - Nikolaj Nielsen (@NikolajMosb) November 10, 2021
Udemy - The Complete iOS App Development Bootcamp
初学者, 付费 付费课程获得大量推荐似乎并不常见,但这个课程是个例外,它进入了候选名单。 我没能亲自去看,但如果你看一下课程的内容,它确实看起来_完整_。 我认为,现在如果你想专注于当前的技术,比如UIKit,它可能是比Standford的CS193p更好的选择。
惊人而彻底。 这门课程是周围最好的课程之一。 t.co/y7IG0KD2fk @yu_angela @LondonAppBrewer > > - Greg Watkins (@GregWatkins69) 2021年11月10日
Ray Wanderlich
初级/中级, 免费/付费 这个网站不需要介绍。 我经常发现自己在日常工作中使用它。 Ray Wanderlich是寻找特定主题教程的首选之地。 但它的内容不止于此。 它还有课程、视频、文章,甚至还有书籍。 如果有一个你感兴趣的iOS主题,你有可能在这个网站上找到它。
第一方资源 #
我很惊讶没有人在主题中链接苹果官方文档。 如果我在6-8年前做了这个投票,我相信很多人都会跳出来推荐这个主题。 今天,有大量的第三方资源,往往比苹果提供的更好。 但尽管如此,苹果文档将永远是我获取所有苹果技术信息的主要来源。
-
苹果WWDC视频 - 可能是我的主要来源。 你经常可以找到其他地方没有的信息。 这有点不幸,因为在视频中找到你要找的东西可能很费时间。
-
Apple Developer documentation - 不像以前那么好了,但仍然是一个有价值的资源。
-
Apple Tutorials: Develop Apps for iOS - 苹果最近在教程创建业务方面的冒险。 我浏览了这些教程,它们制作精良,内容丰富,但有点枯燥。
-
The Swift Programming Language - 阅读这本书是我学习Swift的方式。 这本书简明扼要,写得很好,是一本必读的书。 你可以通过它来学习,而不是使用课程。
-
Swift Evolution --编程指南并没有涵盖所有内容,有时关于Swift最新功能的最佳信息来源可以是Swift Evolution的建议。
-
Human Interface Guidelines (HIG) - 设计是iOS开发的主要部分,经常依靠工程师来提供他们的意见。 这是任何苹果工程师必读的资源。
-
Apple Developer News and Updates - 将其添加到你的RSS阅读器,以了解平台的最新更新。 例如,关于切换到新的Xcode版本或SDK的最后期限。
-
Swift论坛 - 如果你想了解最新的建议,甚至参与讨论。 苹果平台上有很多技术,你不能只是去抢先学习所有的东西。 最好是当你有一个项目,你有一个需求。 当你有需求的时候,你就有了研究某种东西的所有动力。 写文章也可以是一个很好的动力。
其他建议 #
在最初的投票中,我收到了大量的建议。 在这里,我将列出那些没有入围的建议,没有特别的顺序。 需要提醒的是--苹果平台在不断发展,请确保你所阅读的内容是最新的。
- objc.io
- Donny Walls的博客和书籍
- Point-Free
- The Ultimate Kickstart Bundle * 飞行学校
- Swift by Sundel
- SwiftLee
- Let's Build that App * NSScreencast
- Big Nerd Ranch
- Sean Allen
- Essential Developer
- App Coda
- Matt Neuburg的书籍
- designcode.io
- Chris Ching的课程
- Develop in Swift Data Collections
- Swiftful Thinking
- Azam on Udemy
- Vincent Pradeilles
- Stewart Lynch
- Mark Moeykens
- Ben Scheirman
- 学习构建iOS应用程序
我想自己加几个链接。iOS Dev Weekly, NShipster, Use Your Loaf, Little Bites of Cocoa, Krzysztof Zabłocki, Ole Begemann, Increment 。
软件工程 #
软件工程不仅仅是学习一种编程语言和一个你正在使用的平台。如果你想在其他工程师中获得竞争优势,特别是在你没有CS学位的情况下,要投入时间学习基础知识。好消息是,学位被高估了 - 你可以自己学习他们的一切,甚至更多。你又不需要任何特殊的设备或其他东西。
你应该考虑学习的所有东西的一个不完整的列表(没有特定的顺序)。
-
Git。关于Git的资源有一大堆,但我发现Pro Git是最有见地的。
-
发布和分支策略。我认为Trunk-Based Development是最好的分支策略,特别是对于大型团队。
-
算法和数据结构。有很多方法来学习它们。我喜欢Steven Skiena的The Algorithm Design Manual和Thomas H. Cormen的Introduction to Algorithms 。前者更加平易近人。
-
Terminal和Bash。对我来说,Swift在很大程度上取代了Bash作为首选的脚本语言,但我仍然发现自己经常使用Bash。无论你的选择是什么,它也总是值得学习regex。
-
并发性和反应性编程。并发是UI开发中最具挑战性的方面,而且有大量的东西需要学习。Swift结构化并发、组合、并行编程、同步机制、线程。这很难,但要靠实践来实现。
-
连续的集成和交付。这不仅仅是工具,也是一种实践。你可以通过阅读Martin Fowler的文章了解到很多。如果你想深入了解,也有一些不错的书籍。但这也是工具。在iOS上,这主要意味着学习Fastlane和你选择的CI/CD工具。你可以先在GitHub上创建一个样本项目,并使用GitHub Actions设置一个简单的管道。
-
功能编程。它终于成为主流了。如果你使用Swift,你已经在使用函数式编程。但Swift并不是一种纯粹的函数式语言,学习一种函数式语言会有很多乐趣。我推荐计算机程序的结构与解释(Lisp版本)或Haskell(可能是目前最成熟、文档最完善的纯功能语言)。
-
软件联网。几乎每个应用程序都会使用网络。除了基本的HTTP和JSON之外,你一般不需要知道任何东西,但学习它在引擎盖下的实际工作情况是非常有趣的。我建议学习网络协议的基础知识。TCP/IP,DNS,通过HTTP规范。像Charles这样的工具可以让你检查网络流量。Wireshark可以帮助你学习网络协议。Postman是探索和测试API的最佳工具。OpenAPI是你记录API的方式。
-
最佳实践。我认为 "最佳实践 "往往弊大于利,尤其是走到了极端。但它们仍然是有价值的。我建议通过Steve McConnel的Code Complete,而跳过其他的东西。
-
过程。Atlassian在Agile上有一个相当不错的指南。
-
软技能。这可能比清单上一半的内容更重要。我不认为学习这些技能有什么捷径。你必须练习,并始终密切关注你正在做的事情。阅读以下书籍可以让你对工程的这一面有一些宝贵的见解。务实的程序员》、《神话人月》、《放牧的猫》、《团队的五个功能障碍》。
这个列表远非完整。在软件工程中,有各种各样的专业。只要你肯花心思,你可以学到任何东西。我认为增加新的视角是有价值的。例如,如果你是一名移动工程师,这并不意味着你不能探索一下后台开发以扩大你的视野(尤其是现在可以用Swift来做)。
访谈#
所以你学会了关于iOS和软件工程的一切,现在你已经完成了,对吗?并非如此。有软件工程,也有软件工程面试。两者之间有一些交集,但在面试中完成编码挑战与你通常在工作中做的非常不同。
主要的区别是速度。你不仅需要快速,能够在给定的时间内完成任务,而且还需要向面试官解释你的想法,这就更加复杂了。因此,在准备时设置一个计时器,优化速度并练习解释你正在做的事情是至关重要的。
幸运的是,有大量的工具可以帮助你准备面试。黄金标准是[Cracking the Coding Interview](www.amazon.com/Cracking-Co…? gclid=Cj0KCQiAhMOMBhDhARIsAPVml- Enj4_92p_aL0INssZJFmQR4bpQuhIu9TMlOySo3et6QtwnzR_dEqYaAqIgEALw_wcB&hvadid=241870593966&hvdev=c&hvlocphy=9003488&hvnetw=g&hvqmt=e&hvrand=16845426662624439861&hvtargid=kwd- 20040243067&hydadcr=16409_10304044&keywords=cracking+the+coding+interview&qid=1636928527&qsid=147- 7803069-3350963&sr=8- 1&sres=0984782850%2C1466208686%2CB09BGKJ3FL%2C0984782869%2CB09559NJKL%2C1537713949%2C1793296634%2C111941847X%2C1519089864%2CB00ISYMUR6%2CB08B3FWYBX%2C0578973839%2CB00U2YQ1Z2%2CB08VL1BLHB%2CB08X8ZXT15%2CB01D24NAL6&srpt=ABIS_BOOK), 这是最好的资源,可以帮助你准备。我还会推荐leetcode。另一个伟大的资源是技术面试手册。通过面试是一项特殊的技能,你需要分配时间来学习它,除非你想错过一些机会。
最后的想法#
每个人在软件工程方面的道路都是不同的。它是高度技术性的,需要大量的时间投入。但它也可以是非常有价值和有趣的。我希望你会发现这篇文章中的一些资源是有用的,它们会激励你去学习新的东西
如果你对清单有任何建议,请随时在GitHub上打开一个PR或在Twitter上联系我。我打算保持这个帖子的更新。