E151f6fce5fffbef8827d9b687ffccc2
重学安卓:这是一份 简洁有力的 认知地图

前言

很高兴见到你!

在过去的 2 个月中,我们跟随《重学安卓》专栏的脚步,一起复盘了 视图控制器 的 生命周期、状态管理、路由导航,以及 面向标准化的 Jetpack 架构组件的 最佳实践

从 8 月份起,陆续有读者在评论区 积极地留言和参与讨论,其中不乏有 细心阅读 和 不懈思考、抛出疑问 的,对此我感到非常欣喜。😉

为答谢读者一直以来的支持,我决定撰写一篇特供稿。本篇不是专门讲解哪个知识点,而是 站在移动开发架构师的角度,以终为始地 为大家阐明软件开发的全貌:也即,当我们谈论软件开发时,我们究竟在谈什么;当我们学习移动开发时,我们又是在学什么。

如果在进阶过程中,你仍然对软件开发感到迷茫、不明白究竟要掌握到何种程度“才算可以”,那么这篇文章就是专门来为你解决这个困扰。

文中目录一览

  • 前言
  • 软件开发是一项数字化工程
  • 软件的本质是数据的交互
  • 安卓不过是 Google 在地上画了个圈
  • 重学安卓的认知地图
  • 重学安卓专栏目录一览

软件开发是一项数字化工程

在正式地开始讲解之前,先介绍一下近期我经历的事。

上个月中旬,在友人的介绍下,我 承接并在 3 周的业余时间内 独立负责了 29 个页面、34 个 API、涉及 350 余个细节 的中大型电商软件《FairyTales》的开发

上周五 出于无聊查了下,惊觉自己注册了一年的 GitHub 账号,Java 专区开源贡献排名,竟已挤进世界前 500。

感叹之余,如梦初醒。虽说我是个“做移动开发的”,追根溯源,我是一位 基于 Java 等编程语言,致力于快速、稳定、不产生预期外错误地 完成数据交互 的 数字化工程师。

是的,你没看错,说到底,软件开发是一项基于编程语言的数字化工程

在你感到迷茫的时候,不妨跳出具体的编码,闭上眼睛,在脑海中想象一台手机和电脑,连接上网络后,所发生的事。

· · ·

很困难吗?或许是吧。

最开始我也不习惯,可是你要相信自己的想象力,绝不能轻视。

图片援引自《大雄的月球探险记》

这里有 2 条 别人从未给你介绍过的 正确信念,我分享给你。带着这个信念,再没有什么能难得住你:

1.软件的本质就是数据的交互。当你对软件开发感到迷茫,不妨问问自己:

​ 1.1.我知道为什么能拿到数据吗?

​ 1.2.拿到的数据,我知道为什么能在设备中访问和跨域通信吗?

​ 1.3.我知道该以何种方式去 路由和展示拿到的数据吗?为什么?

2.安卓绝非凭空创造而来。

​ 2.1.安卓的缘起,不过是 Google 为了在智能手机领域 有着受自己控制的 一席之地,而自立的平台。

​ 2.2.其中涉及的方方面面,绝非完全从零开始、凭空创造,一定是基于移动平台的特殊环境、从各个领域已有的成熟标准中东拼西凑、借鉴而来。

​ 2.3.所以安卓绝不是不可学习、不可掌握、永无止境的。它就是早已成熟的图形图像、多媒体、地理等各大行业标准,在这个被称为 Android 的平台上的一个具体应用。

如果光是阅读了上述 2 条信念,你还是不太理解的话,那接下来我就为你解析一下这其中的含义。

软件的本质是数据的交互

首先,如果说,是什么决定了作为数字化工程师的信心的话,我想那一定就是:我能拿到数据,我知道怎么去访问和通信,我还知道怎么去路由和展示拿到的数据

因为,做到这点,基本上就完成了“先搭个框架跑起来看效果”的目的。

这个阶段的最高境界就是,多达二三十个页面的复杂 Demo 很快就跑起来,并且稍微修改一下就直逼设计稿。

那怎么做到这一点呢?

1.我能拿到数据

这涉及到 组成原理、编程语言、操作系统、HTTP、TCP/IP、SQL 等知识。

首先,如果我不是给合作方代工、没有现成的 API 通过 SwaggerUI 给我访问,我是否有能力获取到数据?

Web 开发的小伙伴可能对此有一定经验,例如通过爬虫等手段,去爬取目标服务的数据。

这里有个业界顶级的案例分享给大家 —— 28 位数字化工程师对网易云音乐多达 134 个 API 的调研成果:

https://github.com/Binaryify/NeteaseCloudMusicApi

当然,我绝不是鼓励大家去做“非法”的事,只是为了强调一个事实:

top Created with Sketch.