移动开发需要对底层有深入的研究吗?
Posted 乌戈勒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动开发需要对底层有深入的研究吗?相关的知识,希望对你有一定的参考价值。
上一年年末有一段时间一直在看一本《计算机网络》的书,大学的课本,项目组同事看到会觉得疑惑:我们搞移动应用开发的,有必要对这些网络基础这么熟悉吗?
其实对于这个问题,我之前也一直在问自己。
回答这个问题之前,先来看看移动开发到底是一个怎样的工作?
从事移动开发的人,一定对下面这样的开发流程非常熟悉:需求分析->业务梳理->搭建框架->业务层开发->改bug->发布项目。借助于大量优秀的第三方库/框架,开发人员可以将大部分的精力花在熟悉业务逻辑,实现业务功能上,而不需要过多的关注一些功能的底层实现原理,这是好事也是坏事,好在它加快了开发速度,减轻了开发人员开发压力,只要将精力集中在业务功能实现上就好,毕竟人都是懒的,不好在使得现在的开发人员渐渐开始依赖第三方库,成了所谓的“代码搬运工”,停留在如何使用api的层面,这是一个可怕的事情。
就拿一个电商类app来说,主要功能:数据的展示,以及图片的加载,再复杂一点的有IM和音视频。涉及到的大部分就是json数据的请求、图片的异步加载缓存等等,这些功能都有非常优秀的第三方库帮你实现,比如AFNetworking、SDWebImage等。
有了这些优秀的第三方库,开发者就变得越来越像一个代码搬运工,很多人不需要对这些功能的底层实现有所了解,也是可以进行开发工作了。
这让我想起了之前听得比较多的一句话:应届生可以做的事情,为啥我要以高于双倍的价格请你?
你可能会说:我搞了两三年移动开发,对很多底层的东西也不熟悉,照样没有什么影响,也是在频繁的使用第三方的东西,因为这些优秀的第三方库以及框架已经非常完善,能够满足我们项目95%以上的需求了。
貌似说得也对,我一度也是这样想的:移动开发本来就是在不断地做业务,业务层开发本来就不需要对底层有深入的理解。底层的东西已经被高度封装,提供给移动开发人员的已经是很上层的业务层的接口api,这些底层原理对于开发人员来说,相当于一个透明的存在。
刚毕业进入这个行业的前几年,我一直是带着这样的想法和心态在工作。可是工作一两年,来心态发生了变化,开发时间越长,自己就会越焦虑,越来越有压力。
因为我觉得自己的进步好像变慢了,你会问自己:
都工作了4年,你觉得自己比应届生有什么优势?“我比他们有经验啊”;
什么经验?“对开发语言、第三方库的使用以及项目业务的理解更加熟悉啊”。
但是细想一下,好像这些经验谈不上是明显的优势,应届生需要具备这些只是一个时间的问题,有些人可能只需要比你花更少的时间就可以具备这些经验,甚至比你更好。
如果与具备相同工作年限的开发人员比较,你又有什么优势呢?打个比方,如果公司需要开展一个新的项目,这个新的项目需要在原来的项目里面抽一部分开发人员出来,组成新的项目组,另外在新的项目组里面再抽一位同事出来担任项目负责人。
问题来了:这么多个拥有同样开发经验的组员中,到底应该让谁去担任这个负责人的角色呢?那就要看谁比较优秀了。
评定优秀的标准在哪里呢?你觉得一个只懂得业务逻辑的开发人员,是优秀的吗?他好像只是一个代码的搬运工,对于第三方框架的使用比较熟悉(仅仅是对接口的熟悉使用),太普通了。
我们或许换个角度回答这个问题,你觉得项目负责人是做什么的?他需要具备什么能力?
首先我觉得他需要具备一定的app架构搭建、模式设计的能力;是的,有了一定的开发经验,你在这方面会有一定的提升。你或许会说,外面很多优秀的第三方框架/库可以用。但是这么多优秀的库,到底用哪个?这就需要有所比较,怎样才能选择一个比较适合这个项目的框架/库,前提就是对这些框架/库有一定的了解,当然这些理解不能仅仅停留在接口设计层面,你起码要对这些框架/库内部源码有一定的熟悉,才能做出正确的比较。所以你也可以说,他需要具备可以为项目选择使用哪些框架和库的能力,其实就需要对一些底层原理有一定的理解。
举个栗子,网络请求比较优秀的第三方库有AFNetworking、ASIHTTPRequest,苹果自带的api有NSURLSession,那么项目里面的网络接口请求,你到底是自己写一套,还是用这些优秀的第三方库呢?如果是用第三方库,那应该用哪个呢?作为项目负责人,你必须慎重做出选择,因为一旦选择了某个库,接下来很长一段时间,项目就是用它了,这个影响可想而知有多大。想要很好的做出选择,首先肯定要对这些库有深入的理解,那不仅仅只是对库的接口设计进行分析,你还得对这些库的内部原理有一定理解,这样才能做出正确比较。对比AFNetworking、ASIHTTPRequest的不同,那你起码要对网络底层有一定的理解吧。我相信有自己封装过网络请求的库的人,他能更好对哪个库更加适合项目这个问题做出判断。
前面balabala说了一大堆,其实就是想表达一个意思:我觉得从事移动开发,不能仅仅停留在重复的实现业务功能的层面,不能仅仅停留在对开发平台、开发语言的熟练使用上。语言仅仅是一个工具,如果你过分依赖平台和语言,打个比方,如果哪天苹果倒闭了,你可能就要换一个平台和语言进行开发了,你觉得到时候你这么多年开发经验还会有优势吗?哪些东西是不变的,是计算机基础,是编程思想和方法,你需要对网络、数据库、线程、框架、设计模式、数据结构这些东西进行深入学习,这些才是万变不离其宗的精华。
说回我这几天为啥在看《计算机网络》这本书吧。
我现在做的项目是一个电商类app,里面用到一大堆的网络接口请求,用到ASIHTTPRequest这个比较老旧的第三方网络库,目前有一个比较新的而且更加适合我们项目的第三方网络库AFNetworking,想要替换过去。
过年前花了一个多星期,专门AFNetworking的源码的分析。json接口请求涉及http,二进制数据(图片、音视频流)涉及socket(TCP/IP)。
在细细研读源码的过程中,发现自己对于网络这块深入一点的知识的缺乏,所以在家里把大学的这本网络书本搜刮出来,进行重温。
以上是关于移动开发需要对底层有深入的研究吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何掌握 Framwork?《Android Framework 精编内核解析》,深入解析源码