最早的Android开发理念...

因为是「最早」,所以这篇讲的东西以经被大家(包含Google自己)用新工具给取代、或是直接给丢到垃圾桶里面了。
文章开头就提前告知,免得阅读完有觉得被浪费时间的感受。

就我个人的「狭隘」经验来看,一个专案团队中,好像除了极少数工程师以外,没有人喜欢「工程」「工程逻辑」「工程开发」这种东西。
就连工程师自己——以Android开发来看——会喜欢、会钻研、会用工程角度去思考的也慢慢变成少数。(或是说单纯的「不讲这套的工程师太多了」。)
因为.......从PM或某些管理者角度来看,商业逻辑的进度好掌握,可能每周都可以看到工程师工作的成果稳定的朝着规格书的样貌一点一点「增长」,然後固定会议上都可以有个很漂亮的进度报表展现出来,像是「A功能本周已经完成,并且可以测试。预计下周开始制作B功能,下下周可以测试。」

但如果用工程逻辑的方式......(以下的需求为举例。)
「这个专案要求不要让画面因为资料传输读取而锁住,要可以在传输资料时持续的使用整个APP,即使离开了启动传输资料的功能也要把传输完成、而不是终止传输,如果传输完成後当下还在启动传输资料的功能,要即刻在画面上更新资料显示传输结果.........所以必须要让资料传输不会被Activity限制住,能够反应或侦测到启动它的Activity是处於何种状态.........」

现在有了RxJava或DataBinding,能够上面这个要求的工程师好像变成了「只是通过基础门槛」而已.......(等一下评论这点。)
但在没有这些套件的年代,要做这件事情必须要(以下只是一种「我认为最简单的」「不吃效能」「又不会造成Leaking、资料无法回收而霸占记忆体」的策略)「将所有资料传输都交给某个Service执行,而Service执行完任务不呼叫CallBack,而是发出Intent给BroadcastReciever,将所有更新资料任务都交由Broadcast执行,如果BroadcastReciever中不存在对应Intent的任务,就不会有事情发生。所有的任务会有Stack/List/Map的方式公开让所有Context进行存取删除............」
只是如果这样做,大概两个礼拜就过去,这两个礼拜中间每天都会看到PM气呼呼地跑来质问工程师到底都在做些什麽、为什麽都没有东西可以展示、为什麽专案永远只有一个空画面和意义不明的按钮......

学漫威来个「If...」吧!

如果这个专案当初碰到一个完全不知道、没想到、想到了也不敢做(我上述列出的工程架构)的工程师,凡是碰到连线就只想着去弄个Volley/OkHttp...之类的套件,然後「Activity关闭时就把Activity夏启动的连线终止」、再顺便跟PM「讨论」说「这个需求技术上真的不可行、不稳定、不可靠!请重新跟客户讨论吧!」
然後.......可能经历过一两次这样的需求、换过三四个工程师後,PM们会自以为很专业的学会了「哎~Android做不到啊!客户提出这种需求时就挡下来吧!」
真是「美好」「和谐」「大家都感觉很良好」的发展啊!

但事实是........
PM会自以为很专业的在会议上把Android工程师叫起来,自以为很专业的说「你真的认为客户这个要求办得到吗?」然後傻傻没进入状况的工程师会挖挖鼻孔心里好奇「你们找我来不就是要我做这些事情吗?」、嘴巴讲「当然,有点难度,但绝对可以做。」
然後.........(倒带!快速回顾接下来两个礼拜PM整天抓狂的画面。)等过了两个礼拜後,连线核心完成,开始施作「可以让客户实际看到摸到的功能」时......第一周,PM会继续骂「专案从一开始进度就慢了两个礼拜!请你再快一点!(而且连线功能肯定会出问题!效率这麽差的工程师是能做好什麽啊!)」......第二周,PM会继续骂「专案从一开始进度就慢了两个礼拜!请你再快一点!(而且连线功能肯定会出问题!效率这麽差的工程师是能做好什麽啊!)」......第N周,PM会继续骂「专案从一开始进度就慢了两个礼拜!请你再快一点!(而且连线功能肯定会出问题!效率这麽差的工程师是能做好什麽啊!)」......专案开始验收前,PM会继续骂「专案从一开始进度就慢了两个礼拜!请你再快一点!(而且连线功能肯定会出问题!效率这麽差的工程师是能做好什麽啊!)」......专案验收结束,PM会请工程师进小会议间,语重心长的说「专案从一开始就很不稳定,我个人审慎评估後认为问题都出在你的没效率上,所以你就做到今天。请去打包然後准备跟坐你隔壁的新工程师XXX交接一下你完成的东西.....」

…………….

这样的专案算是成功还是失败呢?

(By the way,两个月後,PM助理很客气地打了电话来找被离职的工程师说「可以请你跟工程师XXX讲解一下你的框架原理吗?他说他不懂这种技巧.........」)

(对了,上面提到了一个连线功能的模组,这模组在概念上算是Android比较早期、也比较基础的设计框架。但印象中,从没在官方释出的范例中看过它,也没有任何Guide文件中说明过它,更不可能为它提出个专有名词来定义。)


<<:  [Day-7] R语言 - K - means 简介 ( K - means Algorithm )

>>:  Day7 javascript 事件

Day-15 Pytorch 的 Regression 实作

那我们之前看过了 Python 的 Easy Regression 实作,昨天也看过了 Pytor...

NoSQL的格式(二)

Sort Key的用途 在建立Table的时候, 可看到有一个非必要的选项Sort Key. 在某些...

打造你的个人品牌

学会行销自己,让你在任何阶段的面试都能取得优势! 进入正题 今天要介绍的主题比较偏向个人行销的部分,...

[Day 18] 机器学习 boosting 神器 - CatBoost

CatBoost 今日学习目标 了解 CatBoost 模型 实作 CatBoost 回归模型-房价...

Shadow Element:条件控制元件的创建、消灭

<if> 条件控制 <if> 元素根据 test 属性中的评估值决定其下的元...