[Android开发学iOS系列] 和一个真正iOS开发的区别?
和一个真正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模式, 模块化拆分等.
大体的套路都是类似的, 只不过是有具体实现方式的区别.
如果是前后端技术栈切换, 可能还会有一个整体思路的切换.
如果你是一个有经验的人, 那么换一个技术栈, 一定会有一些你可以移植复用的经验, 解决问题的思路等, 甚至你自己可能没有意识到.
心态
确实会有焦虑, 尤其是当自己碰到问题总是需要求助别人的时候.
为了缓解这种焦虑, 通常的做法是(听上去有点老套, 但是咱们复习一下):
- 如果是通用问题, 利用搜索引擎, 和自己已有的经验和知识尝试解决一下. (如果成功了会增添自信心).
- 合理提问题和求助于同事. 在不过多耽误人家时间的情况下, 并且提供一些有价值的线索. (另外, 找一些看上去和善的同事.)
在内心里合理化这个犯错以及提问的行为:
- 每一次问题的提出和解决都是一个学习内化的过程.
- 如果犯同样的错误也不用太自责, 记忆都是在重复中得到强化的. 并且确实有时候虽然被提醒过但是得自己亲自犯了错才会加深印象.
- 保持空杯心态. 有时候会想到自己的工龄和年龄而焦虑, 但是空杯心态让我们保持年轻和活力.
虽然这块听上去像鸡汤一样, 但是我觉得还是挺重要的.
总结
其实对于一个有学习能力的开发者, 转换任何一个新的技术栈, 掌握基础和上手做具体的任务其实并不难. 只要任务拆分得足够细.
难的是一个全面的知识体系和实际上手的工作经验, 针对许多实际的困难问题的解决.
因为你并不知道有什么和用什么, 以及通常是怎么做的.
这些确实是需要时间慢慢积累的, 否则程序员的饭碗也太好抢了.
不断地学习确实是一个程序员(或者说任何职业)不可避免的事情.
以上, 一点不成熟的个人感受.
[Android开发学iOS系列] 和一个真正iOS开发的区别?的更多相关文章
- iOS 10 的一个重要更新-开发 iMessage 的第三方插件
苹果官方的 Messages 在 iOS 10 推出了非常重大的更新,可能主要是想从其他 IM 巨头手里抢点市场份额回来,包括 Facebook Messenger, Wechat 和 Snapcha ...
- 【Android Studio安装部署系列】一、JDK开发环境搭建
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio安装后自带jre,这个自带jre的版本号肯定比最新的版本号要小. 但是如果项目中没有用到新版本jdk的特 ...
- 通过游戏学javascript系列第一节Canvas游戏开发基础
本节教程通过一个简单的游戏小例子,讲解Canvas的基础知识. 最终效果: 点击移动的方块,方块上的分数会增加,方块的行进方向会改变,并且方块的速度会增加. 在线演示 源码 HTML5引入了canva ...
- 如何用Baas快速在腾讯云上开发小程序-系列2:搭建Phabricator开发管理平台
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/905333001487424158 来源:腾云阁 h ...
- C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识)
前言 上篇文章地址: C#开发移动应用系列(1.环境搭建) C#开发移动应用系列(2.使用WebView搭建WebApp应用) 今天我们来讲一下如何使用Camera来调用照相机扫描二维码. (Tips ...
- C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))
前言 上篇文章地址: C#开发移动应用系列(1.环境搭建) C#开发移动应用系列(2.使用WebView搭建WebApp应用) C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识) 写完这篇 ...
- 【Android Studio安装部署系列】目录
概述 从刚开始使用Android Studio到现在,下面所有目录下的操作,当时习惯性的把每一个整理成一个文档(其实就是简单文字描述+截图):有些地方当时是一知半解,现在会稍微明白一些.正好赶上现在有 ...
- 步步为营 SharePoint 开发学习笔记系列总结
转:http://www.cnblogs.com/springyangwc/archive/2011/08/03/2126763.html 概要 为时20多天的sharepoint开发学习笔记系列终于 ...
- [Android开发学iOS系列] 工具篇: Xcode使用和快捷键
[Android开发学iOS系列] 工具篇: Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd + N: 新建文件 Option + Cmd + N: 新建文件夹 Cmd + / : 注释 ...
- [Android开发学iOS系列] iOS写UI的几种方式
[Android开发学iOS系列] iOS写UI的几种方式 作为一个现代化的平台, iOS的发展也经历了好几个时代. 本文讲讲iOS写UI的几种主要方式和各自的特点. iOS写UI的方式 在iOS中写 ...
随机推荐
- r0capture 原理分析
r0capture 是比较好用的抓包工具 仅限安卓平台,测试安卓7.8.9.10.11.12 可用 : 无视所有证书校验或绑定,不用考虑任何证书的事情: 通杀TCP/IP四层模型中的应用层中的全部协议 ...
- KVM整理
管理命令: virsh list --all 查看所有虚拟机状态 virsh start vm1 VM1开机 virsh shutdown vm1 VM1关机 virsh destroy vm1 强制 ...
- 聚焦企业流程智能化发展新趋势,中国信通院2022 RPA创新产业峰会即将开启
机器人流程自动化(Robotic Process Automation,RPA)是数字时代的重要劳动力之一,流程的自动化.智能化运行是企业释放运营能效.提升客户服务水平的重要路径. 近年来,各行业对R ...
- sentinel的见解
Sentinel 是面向分布式.多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制.熔断降级.热点流量防护等多个维度来帮助开发者保障微服务的稳定性. 在 Sentinel 里面,所 ...
- 问答:C程序为何for循环和while循环无法相互替代?
百鸡百钱问题: C代码: include <stdio.h> main() { int cock, hen, chicken; for(cock=0;cock<=20;cock++) ...
- C#项目管理引用的dll文件
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期使用. 设置dll路径 参考C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁中间的 方法一:配置App.config文件的pri ...
- Dreamweaver基础教程:学习HTML
目录 HTML简介 HTML实例 HTML 标签 HTML元素 HTML 属性 HTML网页结构 <!DOCTYPE> 声明 HTML 基础 HTML 标题 HTML 段落 HTML 链接 ...
- redis三主三从详细搭建过程
搭建Redis三主三从集群的详细步骤如下: 准备环境: 确保你有六台服务器或虚拟机,每台服务器上都已经安装了Redis.这些服务器将用于搭建三主三从的Redis集群. 确保所有服务器之间的网络连接正常 ...
- python的软连接的操作方法
详细:切换python的版本 cd /usr/bin/ ls -l python* sudo rm -rf python sudo ln -s /usr/bin/python3.7 /usr/bin/ ...
- Android Webview判断网页加载完毕
原文: Android Webview判断网页加载完毕 - Stars-One的杂货小窝 书接上文,在Android WebView获取html源码 - Stars-One的杂货小窝此文讲到没有一个可 ...