IOS - 活动家资讯 //m.catawbaoil.com 传递会议价值_深度行业分析 Mon, 12 Jun 2017 07:05:38 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.8.2 //m.catawbaoil.com/wp-content/uploads/2021/11/cropped-logo-2-32x32.jpg IOS - 活动家资讯 //m.catawbaoil.com 32 32 专访 iOS 技术专家孙源:开发者的成长始于“死磕” //m.catawbaoil.com/61646.html Mon, 12 Jun 2017 07:05:38 +0000 //m.catawbaoil.com/?p=61646 Read More “专访 iOS 技术专家孙源:开发者的成长始于“死磕”” »

]]>
摘要:本文为 DevLink 专访系列,本期采访嘉宾是 iDev 苹果开发者大会《链接器:Linker 与 Loader 的前世今生》的讲师——孙源。在即将到来的 iDev 大会上,他将和大家聊聊 Linker 和 Loader 70 年来的发展历程,加深对 iOS 开发中静态链接、动态链接、程序加载等技术的理解,再结合实践,看看我们能利用链接器做什么有意思的事情。

本文为 DevLink 专访系列,本期采访嘉宾是 iDev 苹果开发者大会《链接器:Linker 与 Loader 的前世今生》的讲师——孙源。在即将到来的 iDev 大会上,他将和大家聊聊 Linker 和 Loader 70 年来的发展历程,加深对 iOS 开发中静态链接、动态链接、程序加载等技术的理解,再结合实践,看看我们能利用链接器做什么有意思的事情。

 

1、孙源老师您好,能否简单的介绍一下你自己?

我叫孙源,在网上的 ID 叫 sunnyxx,微博 @我就叫Sunny怎么了,会时常在微博上发一些 iOS 开发相关的东西,还有个博客 http://blog.sunnyxx.com 大多是比较偏原理性或探究性的文章,因为觉得去写网上随便就能搜索出来的东西不好玩儿,所以每篇文章都有很多自己的探索过程和理解。

做业务开发的时候发现有很多 UI 上的重复性工作,于是和 team 里同学一起搞了些通用的东西,用着还不错于是就开个源吧,就成立了一个名叫 forkingdog 的开源小组,在 http://github.com/forkingdog 上能找到。

时不时也会参加一下技术大会和一些线下的技术分享,比如这次的 iDev 大会。现在在桔厂工作,做一些技术深挖的事情,妄图搞个大新闻。

2、与具体的编程和实现不同,您这次分享的议题在大家看来更加偏重底层,关于链接器,似乎很多同学只有在学习编译原理时才会遇到,日常工作中则很少考虑这一层面的运行机制。您是出于怎样的考虑来分享这个议题的呢?

个人理解,技术想要进阶的话一定不能只停留在“应该怎样做”,而是对“为什么这样做”抱有很强的好奇心,当把所有的为什么都搞明白的时候,才能从更高的视角来看待程序、看待代码以及看待某个 bug。当探索到一定阶段后,会发现有一些问题是死活不能搞明白的,这是因为它们的答案在更底下的一层。

比如为什么 build 的时候会报 undefined symbol for architecture i386,有时候又会提示 duplicate symbol,为什么有些问题可以通过在 Other Linker Flags 里面加一个 -ObjC 搞定,调试时出现的 stub for objc_msgSend 代表什么,为什么安全大大们可以在非越狱机器上 Hook,让微信拥有自动抢红包功能?这些是日常开发息息相关的事情,若对链接过程有一定了解,相信这些问题都能迎刃而解。
3、一提到 iOS 编程技巧,很多人的意识里面就是一些界面及效果的实现,而对于底层技术就似乎很少有人进行深入研究了,您觉得造成这种局面的主要原因是什么;对刚刚开始 iOS 编程探索的新人,您觉得应该关注和持续学习哪些方面的知识,才能让自己成长为一个技术“大牛”?

网上也有很多朋友问我这个问题,苦于“技术不够进不了大公司”、“小公司每天做业务没时间提升自己”、“有时间的时候不知道如何入手,求推荐本书”等,我可以讲一下我自己的经历。

当初刚毕业的时候,也自诩 iOS 技术掌握的还可以,去百度面了个试,被虐之后发现也就懂个皮毛,但没关系慢慢来呗,就去了一个小的游戏公司工作。当时和 iOS leader 对很多技术上的问题都有争执,年轻气盛,争论不过那就拿事实说话,回去就做很多功课、写各种 Demo、看各种文章来证明我是对的。后来发现证明自己的正确,并不如探索过程本身有意思,有一个疑问之后就去满世界找答案,找到答案之后就又对这个答案背后的原理产生了疑问,直到最后,发现我的问题在网上搜不到什么文章来解答,那好吧,我来写,于是搞了个博客记录那些网上并不好搜到的答案,还把探索过程写出来,好让其他人不用像我一样苦苦探索。比如当时很好奇,为什么 main 是程序的入口,在它之前到底发生了什么呢,这对于当时我的初级水平来说,搞清楚可是费了老劲了,一直追到 dyld 源码里面,终于搞清楚了前因后果,这种好奇-探索的过程一直持续到了现在。

所以所谓进阶的过程不就是死磕么,刨的越深嗑的越狠肯定进步越快,我们身处的技术环境就像一大片战争迷雾,如果不去好奇黑暗里藏的究竟是什么,那地图就永远只能开那么一小点儿了。


4、作为一个“大厂”的开发者,您觉得在大型公司工作,与在创业公司工作,有哪些不一样的地方?

更大的名气、更知名的项目、更加规范的流程和职责划分、更加明确的晋升方向。更多的人,找到气味相投的好技友概率更大,也会吸引更多厉害的人;同时也会带来更多的沟通成本,当一个项目人数到了一定规模的时候,沟通成本变得不亚于编码开发成本。大项目要拖着历史的包袱,对技术的选用会更加谨慎一些,比如 Swift 不是你想用,想用就能用,少了一些技术的灵性。我选择在大公司还因为创业公司很难有机会去让人专门的,全职的做技术深挖或技术储备的工作,也就是说,大公司更能给深度的技术以成长的温室和发挥的舞台。

5、对身处苹果生态链的一线开发者有什么要说的么?

现在的 iOS 开发日子可比几年前难多了,以前对语言熟练点、搭 UI 比较快的那就挺好找工作,现在一面面试是不是都得拿个 runtime、runloop 怼怼面试者,可见这个行业已经进入饱和的状态,再加上各种前端技术的冲击,有种 iOS 程序员分分钟要失业的感觉,需要掌握的技术栈多到学不过来,眼花缭乱。

我给大家的建议是以静制动,简单来说就是别整那些用不着的,把重点放在眼前能用上的技术,比如工作是做业务 UI,那就下功夫把 UI 做的又快又好,比如工作中的项目不能切 Swift,那就把 ObjC 搞的再清楚点,在技术发展百花齐放的时候,比的是谁学的精,而不是谁学的早或谁学的多,在没有定论之前切勿跟风,比如说前端技术能统一全栈,那起码它得先把前端自己统一了之后再来 iOS 和 Android 凑热闹吧?要练就的是扎实的基础和厉害的学习能力,所谓钉子理论,把眼前的扎深,以后不论技术怎么演变,花个一两周入下门应该就能上手了。

本篇文章仅代表嘉宾个人观点

]]>
靛青K专访:iOS届的字幕组 -- SwiftGG 要做更多事 //m.catawbaoil.com/61643.html Mon, 12 Jun 2017 07:01:54 +0000 //m.catawbaoil.com/?p=61643 Read More “靛青K专访:iOS届的字幕组 -- SwiftGG 要做更多事” »

]]>
摘要:本文为 DevLink 专访系列,本期采访嘉宾是 iDev 苹果开发者大会 RxSwift 讲师——靛青K。在即将到来的 iDev 大会上,他将为大家讲述为何仍然应当考虑使用 RxSwift 处理各种异步问题。

以下为采访内容,提问者:DevLink,受访者:靛青K。

1小青你好,能否简单的介绍一下你自己?

Swift 开发者,目前在 ENJOY 进行相关产品的开发,最近在写一本关于 iOS 响应式相关的书籍(当然是基于 RxSwift 了),目前也在学习写其他技术栈的 Hello World 。

2作为一名 iOS 开发者,同时也是 SwiftGG 的成员,您的微博里面多数内容都是有关 Swift 的,能否说说您如何看待 Swift 这个新生的开发语言?与 Objective-C 相比,它的优势在哪里?

Swift 的前景非常好,毕竟它是“剽窃”了各大现代语言的优势,相比 Objective-C 具有 Optional 、protocol 等优势,但我个人最喜欢的是带有关联值的 enum ,这样的 enum 极大的提高了代码的可读性。

3您本次的分享主题是关于 RxSwift 和响应式编程的,能否给大家剧透一下为什么会选择这样的分享主题,主要的分享重点会在哪里?

我们可能经常听到用 RxSwift 处理异步是多么多么的优雅,特别是链式处理异步的回调。但我在实际开发中,发现它有更多可玩性,使用 RxSwift 远不只是单纯的处理异步,它可以帮助我们优雅的处理各种复杂的逻辑。我希望能以这样的一种分享,大家可以看到 RxSwift 更强大的一面。换句话说,本次分享会从不同的角度实践,带来更多头脑风暴,诱惑大家先用起来。

4现在很多公司大部分还是使用 Objective-C , 作为开发者自身而言,如果要引入响应式编程,那么是用 ReactiveCocoa 呢? 还是 RxSwift ?

对于使用 Objective-C 团队,我的建议是使用 ReactiveCocoa 2.x 版本。当然如果会有新项目,我建议使用 Swift 3 开发,引入响应式编程我更推荐 RxSwift ,相比 ReactiveCocoa 的使用会更优雅一些,同时还有很多 ReactiveX 的相关参考。这里更正一个大多文章提到了 RxSwift 对于 Cocoa 的支持不好的事情,事实上在 iOS 和 macOS 开发都是需要再引入 RxCocoa 的这个库的,这是特别为 Cocoa 做的响应式支持的框架。

响应式的实践,我更建议先在一些 demo 或者较小的项目中应用起来,在积累了一定经验后,再应用到更大的项目中。不熟悉的技术应用到实际工程中,还是比较坑的。但这不影响我们学习新的技术,在觉得可以用到工程时,那么用起来一定是最好的。

5跟我们讲讲 SwiftGG 翻译组的故事吧?

SwiftGG 已经成立一年多了!起源是,梁杰带领大家翻译完 Swift 2.0 的官方文档,翻译文档就结束了有些可惜,于是成立了翻译组,为大家带来更多国外优秀的博客翻译。目前已经完成了 330 余篇文章的翻译。年初进行了很多讨论,决定开展线下 T 沙龙以更好的促进技术交流。

6我们知道 SwiftGG 翻译了很多优质的海外开发资源,未来 SwiftGG 的方向是什么?

我们仍然是以翻译文章为主,未来将和国外更多优秀的博主谈授权,为大家带来更多精彩的文章。同时我们现在在进行一些文档、书籍的翻译工作,目前在进行的是将 JSPatch 和 Element 文档翻译成英文、翻译一本 iOS 安全方面的书籍(即将出版)。

目前在进行线下 T 沙龙的实践,未来我们想做更多有意思的事情,比如开展 Android 、Web 等方面的沙龙。记得喵神(onevcat)和我说的一句话是:“国内的演讲相比国外差距还是很大”,我们希望通过沙龙可以提高大家的分享、交流、演讲水平,把我们的演讲推荐到国内、国外各种大会中。

7对身处苹果生态链的一线开发者有什么要说的么?

我不算是一个老司机,但对于一线开发者们,我想表达的是:

  1. 多向前端学习
  2. 时刻要追求新的技术,找到自己感兴趣的点,并研究下去
  3. 对于任何一个方向的学习,我们都应当注意深度和广度的发展
  4. 要将基础打扎实
  5. 尽可能地多交流
  6. 最重要的,不断的追求极致。

本篇文章仅代表嘉宾个人观点

]]>