专访 iOS 技术专家孙源:开发者的成长始于“死磕” - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
hushuqi
V2EX    iDev

专访 iOS 技术专家孙源:开发者的成长始于“死磕”

  •  1
     
  •   hushuqi 2016-11-01 22:50:16 +08:00 5583 次点击
    这是一个创建于 3271 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    由 DevLink 主办的 iDev 苹果开发者大会 将于本周六、日在北京国际会议中心举行,本次大会特约讲师孙源的演讲题目为:《链接器: Linker 与 Loader 的前世今生》。

    以下为采访内容,提问者: DevLink ,受访者:孙源。


    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 凑热闹吧?要练就的是扎实的基础和厉害的学习能力,所谓钉子理论,把眼前的扎深,以后不论技术怎么演变,花个一两周入下门应该就能上手了。




    本篇文章仅代表嘉宾个人观点
    大会的详细信息请见: http://idev2016.devlink.cn/

    8 条回复    2016-11-04 09:58:49 +08:00
    free9fw
        1
    free9fw  
       2016-11-02 00:22:03 +08:00
    受益颇深,感谢阳神
    waterinet
        2
    waterinet  
       2016-11-02 09:40:54 +08:00
    "练就的是扎实的基础和厉害的学习能力"
    说得在理!
    banxi1988
        3
    banxi1988  
       2016-11-02 10:03:20 +08:00
    写得不错.
    itqls
        4
    itqls  
       2016-11-02 10:50:36 +08:00
    现在一面面试是不是都得拿个 runtime 、 runloop 怼怼面试者 . 说得对 ....
    crashX
        5
    crashX  
       2016-11-02 14:54:42 +08:00
    《链接器: Linker 与 Loader 的前世今生》,看题目跟《程序员的自我修养》差不多,那我为什么不去看更专业的人写的书?
    hushuqi
        6
    hushuqi  
    OP
       2016-11-02 16:02:34 +08:00
    @crashX 只是题目,内容跟《程序员的自我修养》完全不一样啊。。。再说了,为什么作者不专业呢?
    game3108
        7
    game3108  
       2016-11-02 16:20:47 +08:00
    同为 iOS 开发,一只关注着 sunny 还有 yy 大神,学到了很多东西。
    guowilling
        8
    guowilling  
       2016-11-04 09:58:49 +08:00
    向大神学习.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1176 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:44 PVG 01:44 LAX 10:44 JFK 13:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86