作者dharma (达)
看板Soft_Job
标题[讨论] 专家也跟不上Android生态系的变化?
时间Thu Mar 4 20:42:44 2021
网路上看到一篇文章
讲的很辛酸的感觉
请问这是文章作者本身不够强
还是Android开发者真的就是这样的惨状
thanks
(全文颇长,节录内文如下)
https://www.jianshu.com/p/ee0ed95b9a01
请允许我用 Android 开发者的背景,描述一下我这两年所经历的事情:
在过去的两年里,我啓动了三个项目,我一直争取,至少参与其中一个项目的开发工作。
我回过头来看这些已经存在的项目,并分析这些项目前期所做的技术决定对整个项目的影
响。我写了这篇文章,也制作了很多 Android 开发的高级课程,也花了很多时间在互联
网上讨论 Android 相关的主题。
即使这样,我今天依然感觉跟不上 Android 整个生态系统的变化。可想而知,对於那些
经验不足,需要指导的 Android 开发者而言,是多麽地绝望。我现在已经无法想像,现
在从头开始学习 Android 的感觉。当你好不容易学会了某个框架或者工具,觉得它很好
用的时候,它或许就要过时了。现在也许是加入 Android 开发大家庭最坏的时候。
Google 正爲他们的“包容性”沾沾自喜,但这一切,对初学者来说,都是极其痛苦的。
Google 在 Android 框架中所做的事情,会导致大量的时间浪费。我们需要花费数小时的
时间才能读完所有更改的内容,更别说在项目中应用它们了。我宁愿花时间来创造价值,
而不是舍本逐末。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 107.161.88.23 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1614861768.A.1DA.html
1F:推 NDark: 边开火边移动 03/04 21:14
2F:推 NDark: 框架 引擎 平台 => 军备竞赛 03/04 21:30
3F:→ NDark: 开发者 := 平台竞争之下被打出去的子弹跟炮灰. 03/04 21:31
4F:推 tom77588: 要怪就怪甲骨文冲康导致谷哥转向Kotlin,以後有新科技 03/04 21:40
5F:→ tom77588: 出来,要决定开发语言时,一定不会选Java 03/04 21:40
6F:→ wulouise: 2019 kotlin编译时间最好的情况增加50%?2020有改善吗? 03/04 21:43
8F:→ wulouise: ndroid-development-december-2020/ 看看2020的比对xd 03/04 21:52
11F:→ officeyuli: HEEDHJ.jpg 03/04 22:00
13F:→ officeyuli: 然後workmanager里面还包了他们以前宣称的几种“完美 03/04 22:01
14F:→ officeyuli: 的解决方法” 03/04 22:01
16F:→ NTULioner: 真的r 03/04 22:46
17F:→ lee457088: 干我隔壁的同事也常常在干醮每年八九月都要重新弄一次 03/04 23:38
18F:→ lee457088: Android 的东西,不然一堆套件都不能用惹 03/04 23:38
19F:→ kaibaemon: 所以才不找写Android的工作 03/04 23:42
20F:推 scorpion: Android 真的没事不要随便进来 03/05 00:11
21F:→ netburst: kotlin爽爽 03/05 02:17
22F:推 baobomb: 一个框架或工具的过时 必有他的原因 像Eventbus, Asyncta 03/05 05:47
23F:→ baobomb: sk都是因为有着问题 才有人提出更好的方式 03/05 05:47
24F:→ baobomb: kotlin的出现也并不是单纯的复制Java而已 也带来很多好处 03/05 05:48
25F:推 baobomb: 如果都不追求更好更完美的框架或工具 那就乾脆WebApp弄一 03/05 05:49
26F:→ baobomb: 弄 跟众多银行的App一样 能跑就好 03/05 05:49
27F:→ qweqweqweqwe: 也没到每年要重用这麽夸张吧 并不需要全都追新的 03/05 06:26
28F:→ qweqweqweqwe: 例如dagger2都已经好几年了 最近公司才想导入.. 03/05 06:27
29F:嘘 rewqasdf: 难怪被os垄断 从pc时代开始 03/05 07:30
30F:推 jknm0510a: dragger也是很麻烦到一个极致,所以才改良出2和hilt, 03/05 07:55
31F:→ jknm0510a: 结果就是要你继续学吧 03/05 07:55
32F:推 siriusu: 推 baobomb 03/05 07:57
33F:→ LordCHTsai: Flutter2也来罗,欢迎学Dart 03/05 08:12
34F:→ sharek: 持续学习,了解新框架和工具能带来的好处才是基本的吧 03/05 08:20
35F:推 doranako: 碎片化很真的很痛苦,安卓真的比苹果难写很多 03/05 08:21
36F:→ jobintan: 非走Native App不可吗?转Web app是否可行? 03/05 10:11
37F:推 baobomb: WebApp能做到的事 Native都能做到 但Native能做的事 WebA 03/05 10:26
38F:→ baobomb: pp很多做不到 光是Local Database WebApp就一堆问题了 03/05 10:26
39F:推 baobomb: 再来Dagger2 其实真的是好东西 在大型专案中 可以很有效 03/05 10:32
40F:→ baobomb: 的做到Module split 可以加快Multiple modules的编译速 03/05 10:32
41F:→ baobomb: 度还有解耦 (不过kapt是另一个造成编译变慢的问题) 03/05 10:32
42F:→ baobomb: 只是学习曲线很高 而且很容易错用(很多工程师把Dagger c 03/05 10:32
43F:→ baobomb: omponents当成Static object来用 大错特错)但一旦学会了 03/05 10:32
44F:→ baobomb: 几乎就等同于没学九阳神功跟有学九阳神功的差别 03/05 10:32
45F:推 baobomb: 碎片化的好处在於方便你做Composition 如同碎片化的好的 03/05 10:36
46F:→ baobomb: 话 你应该不会觉得痛苦反而会觉得碎片复用容易而且要Depr 03/05 10:36
47F:→ baobomb: ecating的时候很方便 会觉得很痛苦 那很大机率是碎片化 03/05 10:36
48F:→ baobomb: 的不好 可以仔细看看是不是用太多inheritance.... 03/05 10:36
49F:→ baobomb: 我常常看到很多工程师很爱 inheritance 继承的到处都是 03/05 10:37
50F:→ baobomb: 结果就是要scale或是拔功能的时候世界毁灭 03/05 10:37
51F:→ robber1234: Android更新是很快,但没有表示什麽都要用最新的 03/05 12:34
52F:→ robber1234: 原文写的很多都能认同,是很资深的工程师,但不代表入门 03/05 12:46
53F:→ robber1234: 就会很困难.哪个平台哪个框架不是一直改 03/05 12:47
54F:→ robber1234: 而且我真的很讨厌RxJava, 这我最能认同原作XD 03/05 12:50
55F:推 aids61517: 写Android 7年了,我觉得最近几年进步速度满大的 03/05 13:00
56F:→ aids61517: 首先是宣布Kotlin成为一级语言後,Kotlin使用率极速上 03/05 13:01
57F:→ aids61517: 升,然後推出了Jetpack Architecture,推出了开发上常 03/05 13:02
58F:→ aids61517: 用的解决方案,MVVM用的ViewModel、有生命周期概念的 03/05 13:03
59F:→ aids61517: LiveData、资料库Room、RecyclerView用的Paging(虽然我 03/05 13:03
60F:→ aids61517: 没用XD)...等,还有Kotlin正式推出的Coroutine,我在某 03/05 13:04
61F:→ aids61517: 个社群说过这东西以後可以取代掉RxJava还一堆人惊讶 03/05 13:04
62F:→ aids61517: 当然缺点也是有,我有点不喜欢那个WorkManager,然後一 03/05 13:05
63F:→ aids61517: 些基於安全性或隐私权考量的一些api调整,但整体我觉得 03/05 13:06
64F:→ aids61517: 利仍大於弊,反而我觉得现在新手比过往更好上手,虽然 03/05 13:07
65F:→ aids61517: 要学的Library很多,但是有比较完整的解决方案和教学总 03/05 13:08
66F:→ aids61517: 比新手自己胡搞瞎搞来得好,最後想说的是,databinding 03/05 13:08
67F:→ aids61517: 是拉机XD 03/05 13:08
68F:→ robber1234: data binding真的拉机,从没学过.谁要在xml上写code 03/05 13:14
69F:推 meowyih: 拿win平台来说,win32->MFC->WinForm->WPF->UWP好像也是 03/05 14:04
70F:→ meowyih: 学不完,但是大部分的东西反正最後都会没人用的,还是 03/05 14:04
71F:→ meowyih: win32 api最稳当XD 甚麽?不用UWP写不能上MS Store? 反正 03/05 14:05
72F:→ meowyih: UWP推不动MS自己就会转弯了~ (笑) 03/05 14:05
73F:→ LordCHTsai: xml写code、databinding,这些web已经写了十年了XD 03/05 14:20
74F:推 baobomb: 不知道大家对RxJava的看法是什麽?? 03/05 15:36
75F:→ baobomb: 我很常看到工程师认为RxJava是用来处理multi thread, 所 03/05 15:36
76F:→ baobomb: 以会被coroutine取代 03/05 15:36
77F:→ baobomb: 但其实RxJava是用来处理Stream layer separating的. 试想 03/05 15:36
78F:→ baobomb: 在一个App启动时 如果有一大堆的critical path服务需要在 03/05 15:36
79F:→ baobomb: background thread init. 然後其他的usecase需要等待这 03/05 15:36
80F:→ baobomb: 些服务完成後马上接续其他的动作 03/05 15:36
81F:推 baobomb: 没有RxJava 以往就是create一大堆的callback listener. 03/05 15:39
82F:→ baobomb: 而且很难处理buffer. 但React programming很好的处理了 03/05 15:39
83F:→ baobomb: 这问题. Coroutine有Flow 可以做到一样的效果, 但还不Sta 03/05 15:39
84F:→ baobomb: ble 我自己用起来觉得还是RxJava更直接. 03/05 15:39
85F:推 baobomb: 而且CoroutineScope在多线程的情况下需要一直重复切换Con 03/05 15:43
86F:→ baobomb: text 用起来会导致function变很冗长. 但我自己也是乐观 03/05 15:43
87F:→ baobomb: 看待 毕竟很多人误用RxJava(不懂得复用Subscription,Stre 03/05 15:43
88F:→ baobomb: am,而是每次有需求就subscribe一次 最後也没有好好Dispos 03/05 15:43
89F:→ baobomb: e导致memory leak) Coroutine看起来可以解决这问题 但希 03/05 15:43
90F:→ baobomb: 望可以写起来更优美 03/05 15:43
91F:推 aids61517: 我自己用Flow是没遇到什麽问题,当然RxJava release那 03/05 15:59
92F:→ aids61517: 麽久了,你说Flow相较起来不stable是没错,但是我不知 03/05 16:00
93F:→ aids61517: 道你说用RxJava更直接是什麽意思,有什麽功能Rx做得到 03/05 16:00
94F:→ aids61517: Flow做不到的吗?然後CoroutineScope在多线程的情况下 03/05 16:01
95F:→ aids61517: 需要一直重复切换Context,难道Rx不需要吗?会需要频繁 03/05 16:02
96F:→ aids61517: 切换大多都是background thread处理资料後需要更新UI 03/05 16:03
97F:→ aids61517: Rx也一定需要吧?满好奇你的case 03/05 16:04
98F:→ aids61517: 细节也可以去AndroidDev版讨论,我可不想被哈哈人嘘 03/05 16:14
99F:推 baobomb: 其实我也很喜欢Flow啦哈哈 只是很多工程师只是为了方便 03/05 16:14
100F:→ baobomb: 切换线程而用coroutine function内withContext写的到处 03/05 16:14
101F:→ baobomb: 都是 看的真的很头痛.... 03/05 16:14
102F:→ baobomb: RxJava写起来更有chain的感觉 可以在streams之间直接stre 03/05 16:14
103F:→ baobomb: am.subscribeOn/observeOn. 对我来说更能有效的强制工程 03/05 16:14
104F:→ baobomb: 师去细分function从而达到unit test更好写 03/05 16:14
105F:→ baobomb: 但Coroutine 的withContext这东西... 很容易让很多工程师 03/05 16:14
106F:→ baobomb: 滥用... 不是说不好 而是太方便了-.- 03/05 16:14
107F:→ aids61517: Flow有个flowOn(),应该可以达到你要的效果,至於到处 03/05 16:17
108F:→ aids61517: 写withContext()是能保证那个function的内容是用特定的 03/05 16:17
109F:→ aids61517: Dispatcher去执行,这就看你们团队的讨论了 03/05 16:18
110F:推 jknm0510a: 我觉得Coroutine比RxJava直觉多了耶!可能是我是先学前 03/05 18:13
111F:→ jknm0510a: 面再学後面 03/05 18:13
112F:推 iiiii: Android Studio 每次按下更新钮,都要祷告 03/06 11:26
113F:→ angusyu: 祷告?没有啊每次更新都没什麽事 03/06 12:48
114F:推 u07f08: android studio 4之後的版本bug超多的好吗 03/07 00:57
115F:→ hicoy: 我自己是习惯等个一阵子在更新android studio 让同事帮忙 03/07 13:35
116F:→ hicoy: 除雷XD 03/07 13:35
117F:→ hicoy: 全吃一定是吃不完 03/07 13:41
118F:→ hicoy: 主要还是要做取舍 像上面讲到coroutine and RxJava 03/07 13:42
119F:→ hicoy: 先选一种学 另一种有需要再看 不过Google现在选的是corouti 03/07 13:45
120F:→ hicoy: ne了吧? 范例都改coroutine+flow了 03/07 13:46
121F:推 ginnyhuang: 我倒觉得databinding超好用的耶,不用一堆 init,至 03/10 23:50
122F:→ ginnyhuang: 於在xml编辑,大概因为习惯直接在xml coding 元件内容 03/10 23:50
123F:→ ginnyhuang: 所以还蛮习惯的 03/10 23:50
124F:推 ginnyhuang: 真的不用什麽都用最新 lib XD,只有在开发新产品才会 03/10 23:59
125F:→ ginnyhuang: 使用当下最新最稳定的 lib 版本。这部分 ios 比较惨吧 03/10 23:59
126F:→ ginnyhuang: ,常常新版本都有不兼容的 function,直接给你停用出 03/10 23:59
127F:→ ginnyhuang: 现 bug(同情地望向 ios 同事),android 至少不会让你 03/10 23:59
128F:→ ginnyhuang: 旧的 function 不能用(或是功能有非常大落差),版 03/10 23:59
129F:→ ginnyhuang: 本更新主要看新的调整有没有影响到自己的 app 再做调 03/10 23:59
130F:→ ginnyhuang: 整就好 03/10 23:59
131F:推 ginnyhuang: 是可以感受到对开发者的限制增多,但我觉得是让使用 03/11 00:12
132F:→ ginnyhuang: 者的安全性和隐私提高,这是好事,而且统一的规范总 03/11 00:12
133F:→ ginnyhuang: 比各厂牌手机魔改系统要好(对,我说的就是大部分陆厂 03/11 00:12
134F:→ ginnyhuang: 手机以及少部分他国品牌,虽然个人认为这也是部分开发 03/11 00:12
135F:→ ginnyhuang: 者种下的恶果),当你按照官方 sdk 开发却发现在某几 03/11 00:12
136F:→ ginnyhuang: 个手机上表现不如预期才真令人抓狂...为了这几个例外 03/11 00:13
137F:→ ginnyhuang: 又要再想办法额外 coding 让这些例外可以正常运行(晕 03/11 00:13
138F:→ ginnyhuang: ) 03/11 00:13
※ 编辑: dharma (107.161.88.23 美国), 08/11/2021 15:25:02