和一个真正iOS开发的差异?

学习iOS的这段时刻, 我一直在考虑和感触着自己和一个真正做了几年iOS的dev之间的差异.

一起也在反向考虑, 我自己和一个新学Android的人, 又有什么差异.

或许在技能转型中, 这些学习的考虑和阵痛都是有共性和不可避免的.
在此共享一下感触, 假如有人也有技能转型, 能够看到有些心路历程是不可避免的, 不必焦虑.

当然我也在考虑一个技能人是不是应该不断转型, 仍是在一个方向深耕, 这是另一个杂乱的话题了, 这儿按下不表.

东西环境类

东西和环境, 这是上手一个新技能要面临的第一个问题.

比方:

  • IDE运用和快捷键, 怎么debug.
  • build不过的种种原因等.
  • iOS的真机调试有更多的约束, 需求profile证书等, 不像Android似的插上线就能build.
  • tv怎么pair.
  • pod和swift package这两种不同的依靠, 都是怎么引证本地和更新的.
  • 单元测试不能连着真机跑, 要在模拟器上跑等.
  • Xcode的一些设置和format东西的运用.

走运的是, 这些问题根本上上网搜就会得到答案, 假如搭档有空就能够帮忙回答.

东西运用和build相关的问题根本上处理几次就会记住, 不要被这些问题吓倒.
有时候由于Xcode的晋级或许库的改动, 也会重复遇到各种新问题, 这时候镇定冷静, 查找测验就能够了.

言语类

其实任何现代化的言语都是讲道理的, 所以并不难学.
Swift和Kotlin很像, 能够类比着学.

的确会有一些不相同的语法和关键字.
我的主张仍然是跟上一条相同, 先学个根底, 就能够干活, 有些特殊的能够现学现查.

假如你作业在一份已有的代码库, 那就更走运了, 里边充满了现有的例子.

有一些常用的套路, 比方if let, guard let, enum的取值.

还有delegation和protocol, extension等, 看代码就会发现这些是比较常用的.

还有或许会令初学者望而生畏的是, 一些UIKit的办法或许会呈现一些乖僻的符号, @啊#啊什么的, 那些也是记住固定的写法就行了, 都是固定场合, 没有什么特别可怕的.

可是假如真的遇到OC的代码, 仍是有一点可怕的, 我还没学.

最终值得注意的是Swift和iOS中的代码风格和命名规范.
比方我从前给一个办法命名getXXX()返回一个值, 被主张去掉get, 由于那是java和android的习气, 他们习气直接用名词. (可是除了get认为, fetch或许request等动词又能够用, 我不理解, 可是我尊重.)

代码风格或许每个项目都有自己不同的要求. 我还没有研讨过到底哪个才是宇宙最正确.
只能逼上梁山地尽或许遵守, 然后等待着下一个android写法被发现.

也不必特别忧虑, 只要代码明晰, 命名有意义, 问题不大.

常识

常识类的学习似乎是十分的平面, 你不知道什么常识点, 你看了看文档/博客/视频教程, 你知道了, 学习完成, 技能点点上.
常识类的学习主张相同也是用最快的时刻知道最根底的内容, 然后挑要点了解常用重要的, 其他遇到再说.

由于你或许没有那么多的时刻, 你总是要有个优先级.

假如没有人或许什么任务给你划要点那么你能够自己划, 我比较走运的是Android和iOS其实平行的两个渠道, 那么我常常会想象假如我要给一个Android初学者制定学习方案我或许会让ta学什么, 然后去找iOS中对应的什么.

拿iOS来说, 它是一个mobile渠道, 它有自己官方的UI类库, UIKit或许SwiftUI.
那咱们就能够: 学UIKit的根底, 几个根本控件, 了解tableView, collectionView. 学习网络请求, 学习常用的库的运用.

这些都能够结合实践项目, 项目中用什么就优先学什么.

一个完好常识系统的构建是需求时刻的.

其实我乃至有点置疑”完好的常识系统”自身或许就是一个假出题. 即便在Android渠道作业了这么些年, 其实许多方面我都不太了解, 由于没有实践进入过, 所以也谈不上完好.
或许对Android来说, 我了解的只是一个常识的头绪, 知道哪一部分大约有些什么, 知道哪些地方是我的未知领域.

和有经历的iOS dev相比, 常识的缺少的确会对作业效率产生一些影响.

  • 比方要我或许需求花一些时刻了解一些根底常识和已有做法.
  • 在遇到问题的时候, 或许会由于一个我不知道的问题而卡住(比方单元测试挂了, 我在研讨测试自身, 而实践上是由于选错了设备), 而对其他人来说或许很简单.
    对于常识来说最困难的部分是你不知道你不知道什么.

这些必经的过程都是无法避免的, 只能见一次学一次了.

通用编程逻辑

幸好还有一些通用的编程逻辑是适用的.
有经历的开发比纯新手开发的优势就是在这块.

面向对象的逻辑, SOLID准则, 代码明晰易读的规范等, 有许多的才能和经历都是能够复用的.

而且由于Android和iOS如此相像, 这部分可移植的经历还比较多.

比方页面切换, 网络请求和认证, 数据追踪sdk, 本地存储.
更广义层面的各品种MVVM模式, 模块化拆分等.
大体的套路都是相似的, 只不过是有详细完成方法的差异.

假如是前后端技能栈切换, 或许还会有一个整体思路的切换.

假如你是一个有经历的人, 那么换一个技能栈, 必定会有一些你能够移植复用的经历, 处理问题的思路等, 乃至你自己或许没有意识到.

心态

的确会有焦虑, 尤其是当自己碰到问题总是需求求助别人的时候.

为了缓解这种焦虑, 通常的做法是(听上去有点老套, 可是咱们复习一下):

  • 假如是通用问题, 利用查找引擎, 和自己已有的经历和常识测验处理一下. (假如成功了会增添自信心).
  • 合理发问题和求助于搭档. 在不过多耽误人家时刻的情况下, 而且提供一些有价值的头绪. (另外, 找一些看上去和善的搭档.)

在内心里合理化这个犯错以及发问的行为:

  • 每一次问题的提出和处理都是一个学习内化的过程.
  • 假如犯相同的错误也不必太自责, 记忆都是在重复中得到强化的. 而且的确有时候虽然被提醒过可是得自己亲自犯了错才会加深印象.
  • 保持空杯心态. 有时候会想到自己的工龄和年龄而焦虑, 可是空杯心态让咱们保持年轻和生机.

虽然这块听上去像鸡汤相同, 可是我觉得仍是挺重要的.

总结

其实对于一个有学习才能的开发者, 转换任何一个新的技能栈, 把握根底和上手做详细的任务其实并不难. 只要任务拆分得足够细.

难的是一个全面的常识系统和实践上手的作业经历, 针对许多实践的困难问题的处理.
由于你并不知道有什么和用什么, 以及通常是怎么做的.
这些的确是需求时刻慢慢积累的, 否则程序员的饭碗也太好抢了.

不断地学习的确是一个程序员(或许说任何工作)不可避免的工作.

以上, 一点不成熟的个人感触.