业务要求一大堆,跟老板提建议反被数落,Android开发者该怎样自谋出路?

业务要求一大堆,跟老板提建议反被数落,Android开发者该怎样自谋出路?,第1张

概述前言身为一个当代Android开发者,真的好像吐槽一句:我太难了!老铁,我最近压力好大。现在各种花里胡哨的APP层出不穷,各移动端应用市场竞争是越来越大。资本家们竞争靠的是什么?是产品。产品的要求越来越高,对我们移动应用开发者的业务要求是越来越高。鲁迅先生说过:加油吧打工人!只 前言

身为一个当代AndroID开发者,真的好像吐槽一句:我太难了!老铁,我最近压力好大。

现在各种花里胡哨的APP层出不穷,各移动端应用市场竞争是越来越大。资本家们竞争靠的是什么?是产品。产品的要求越来越高,对我们移动应用开发者的业务要求是越来越高。

鲁迅先生说过:加油吧打工人!只要你足够努力,就能让老板过上更好的生活!

## 现状
场景一:
老板:“诶,昨儿个看到咱对手XX他们的APP更新了个人脸美颜、人脸识别什么的功能,咱是不是也得整一个。”

产品经理:“老总,您放心,这个我们早就在开发了,很快就能上线了”

场景二:
产品经理:“对手这个APP更新功能了啊,老板要求一个星期内要发新版本了哈,他们有的咱也得有,那个UI要做好看点哈。

程序员:“我tm** 星星**你m个大**”

如今的AndroID业务开发实在太难了,产品经理能跟你battle什么能不能实现吗?不存在的。

能实现:这不是有手就行?
实现不了:你这技术不行啊!
回头给你还给你甩下一句:“看看人家的程序员”

一年到头加班无数,赶业务、上版本,凌晨一两点下班那是家常便饭。

想跳槽出去面试。简历是第一步吧,学历一般,技术平平,全篇无亮点。

好不容易约到场面试。
面试官:工作多久啦?做过哪些项目呀?有没有专精的技术点啊?
我:…

没有亮点、没有能拿出手吹b的成绩。
基本上:回去等通知。

@L_502_1@1、这谁顶得住啊!

程序员:啊,我受够了,我一定要改变自己,我要搞点新东西。

于是跟老板提出一系列计划:
1.我们要学Kotlin提升自己、要搞Flutter大前端、要搞混合开发,这是未来大趋势
2.技术体系太老了,为了进一步提升开发效率,我们要搞技术重构
3.那里展现速度太慢了,我们要搞性能优化

老板往往会回你一系列的灵魂拷问:
1.投入产出比怎么样?
2.有什么业务价值,有什么技术价值?
3.别人都没说要做为什么你要做,为什么要交给你来做?

如果没有回答好这些问题说服老板,自然也争取不到什么资源,只能一个人搞搞,一个人搞的往往质量不行、也没有人用,久而久之自己也不维护了,只能又开始埋头在需求中。

干的不开心,也没有成长,最后只能暗淡离职,但换了一个公司就会好吗,很可能又是类似的过程……

如果你也有这样的感受和困境,我想告诉你,这真的太正常了。作为一个八年AndroID老农,这些痛苦我都是亲身经历过的。这篇文章,我想谈谈自己的一些经验和理解,希望可以帮助到你们。

2.到底难在哪儿2.1 技术基础薄弱

我相信一线的AndroID移动应用开发者大多都有这样的弱点。只在学校,或者培训机构接受过快餐式的技术培训。其实以我的理解,学校里学出来的技术水平,可能还没有培训机构学出来的技术水平高。因为学校教的东西,用的教材,可能短则两三年前的技术,长则六七年前用的技术。与互联网这个技术迭代更新超快的行业严重脱节。而培训机构这种快餐式的教学,大多以实战为主,学的都是当下主流技术,以找工作为唯一目的。

但是两者学出来的程序员,都有一个共同的缺陷,就是知识不够系统化。不可能会有哪个老师会把底层的代码拿来教学,大多是直接把一些封装好的工具教会你怎么用,一些功能怎么实现。

底层的实现原理都不懂,你就只是一个代码搬运工。时代需要的是创造者,而不是搬运工

2.2 项目经验零碎,缺乏大项目的开发经验

程序员千千万,大厂就那么些。绝大多数的程序员还是在小厂待着的,在小厂待着,也就免不了需要频繁的跳槽、加薪。接触不了大项目,玩不了牛b的技术。跳来跳去,还是在这么个圈子。

2.3 技术停滞,长期没有突破

有些程序员虽然有3-5年的开发经验,但基本上只是把第一年的的工作做了N年而已,前面两点困境,直接导致了你的技术水平停滞不前,想去大厂,根本没有希望。

3.突破

主要针对已经工作的开发者。AndroID开发者如何打破困境,成长进阶。

###3.1 坚持写博客

中级工程师不只是一味的去做事、学习,其实更多的需要对知识的总结与归纳,而写博客是最好的手段,坚持写博客其实就是对你知识体系的回顾与总结,很多时候你对某块领域自认为掌握了,但是能写出来,并且能让别人看懂,那才是真正的熟练掌握呢,不说别的,就说一些IT界业内的大牛一般都有自己的博客,那些博客文章才是你知识沉淀的最好见证。

3.2 在GitHub上参与开源项目

我曾无数次提醒大家GitHub堪称程序员必备,聚集了全球各个领域的程序员,在上面你可以直接阅读Google、Facebook顶级公司的开源项目,可以一睹顶尖工程师的风采,在这里你绝对打开了另一扇世界大门,你可以阅读大牛源码,并试着贡献自己的代码,走出第一步,多参与,多交流,那句话怎么说来着:「与优秀的人接触,自己才会变得优秀。」同样的道理,阅读大牛们的代码多了,自己不知不觉中就会成长进步。GitHub并不仅是一个名片,更是进阶必备神器!

3.3 有自己的完整作品

也许我们在公司参与不少功能的开发,不管是公司原因还是产品原因,或多或少我们为了赶进度也好,为了盈利也好,总有一些我们觉得不满意的地方。

比如设计风格上不够Material Design,产品经理的一些天马行空的垃圾想法,甚至一些KPI导向的功能实现等,我相信这个阶段每个人心中都有这个想法,都觉得自己家的app不够酷,不叫AndroID,所以这个时候就付出行动吧,利用业余时间开发一款属于自己的完整作品,你可以尝试最新的技术与框架,用你认为最棒的工具,适配你认为的Material Design风格,这个过程不仅亲自实践了你之前想尝鲜的新技能,还完整经历了一个产品的构思与迭代过程,甚至最后把它开源,这个过程是非常宝贵的,其中你会遇到并克服各种问题,不知不觉中就在成长,开源之后你会在潜意识里对自己的代码要求更高,而且这款作品也会成为你之后简历上的加分项。所以如果你还没有过这个阶段,那从现在开始,着手准备并经历这个阶段吧,哪怕你没有什么有创意的IDea,甚至高仿下开源社区或者市场上的一些app都可以,毕竟你是用来练手,不是用来商业,IDea这个阶段不是特别重要。

3.4 阅读AndroID源码

理解一些高级概念Java语言进阶了,同样关于AndroID你也需要进阶,并不能停留在一些基本API的使用上,应该往更深层次的方向去研究,比如activity、vIEw的内部运行机制,比如AndroID内存优化,比如aIDl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理。

4.系统学习

为什么我会提系统两个字呢?先说一下新手和专家的区别,大家常常认为新手和专家的区别在于经验上,这样说也不能说是错的。因为确实这个经验是很重要的,但这个经验不是指实施某项技术获得了一个过程和记录,而是指通过实施某项技术促进了思维的改变。

如果思维没有改变,那么一个声称拥有十年经验的开发人员,实际上只是一年的经验重复了九次。

新手往往都不是特别想要学习,也不知道自己的行为是对是错,只是想实现一个立竿见影的目标。如果给新手提供一个与情境无关的规则(或者叫指命)让他们去执行,他们就会变得能干起来。

而专家更关注情境,更关注系统,而且喜欢说“具体情况具体分析”。他们往往更关注事物之间的联系,把自己看做系统的一部份,能分清和认识到系统的边界。

新手往往不把自己看做系统的一部份,所以学习AndroID开发也变成了一项孤立的事件,学习的模块也变得孤立起来。虽然花时间学习了很多组件或者技巧,但是却没有理清过这些模块或问题之间的关联。

然而,现实中的问题都是不是孤立的,理解系统,学会用系统思维才更有利于你去解决问题。

4.1 AndroID知识体系

放上我整理的一份AndroID架构师技能树,有点长,有兴趣的可以看一下收藏起来。

以下技术知识点在我的GitHub都有详细的讲解。必备Java基础

泛型

作用于定义通配符于嵌套Rxjava中的泛型

注解

自定义注解与元注解APT,编译时注解处理器插桩反射,运行时动态获取注解信息Retrofit

并发线程

线程共享与实现实现CAS原理AndroID AsyncTask原理

Java虚拟机

Dalvik虚拟机CG算法、机制内存分配策略

Hook技术动态编程
动态代理模式
双亲委托机制
JavaIO体系
IO *** 作Dex加密

数据结构及算法

数据结构

栈和队列数组和链表,自定义一个动态数组Hash表,及Hash冲突的解决二叉树B+ B-树基础排序算法:重点 快排、归并排序、堆排序(大根堆、小根堆)快排的优化二分查找与变种二分查找哈夫曼树、红黑树字符串 *** 作,字符串查找,KMP算法图的BFS、DFS、prim、Dijkstra算法(高阶技能)经典问题:海量数据的处理 (10亿个数中找出最大的10000个数 top K问题)算法分治算法动态规划贪心算法分支限界法AndroID基础AndroID Activity生命周期Application生命周期AndroID Service、IntentService,Service和组件间通信Activity的onNewIntentFragment的懒加载实现,参数传递与保存ContentProvIDer实例详解broadcastReceiver使用总结AndroID消息机制Binder机制,共享内存实现原理AndroID 事件分发机制AndroID 多线程的实现:Thread、HandlerThread、AsyncTask、IntentService、RxJavaActivityThread工作原理嵌套滑动实现原理RecyclerVIEw与ListVIEw(缓存原理,区别联系,优缺点)VIEw的绘制原理,自定义view,自定义viewGroupVIEw、SurfaceVIEw 与 TextureVIEw主线程Looper.loop为什么不会造成死循环VIEwPager的缓存实现requestLayout,invalIDate,postInvalIDate区别与联系AndroIDP新特性AndroID两种虚拟机ADB常用命令Asset目录与res目录的区别AndroID sqlite的使用入门AndroID开发高级AndroID技术难点

AIDL、Binder、多进程、VIEw的绘制流程、事件分发、消息队列等。

这类知识对于定位自己为高级AndroID工程师的人来说是必须掌握的,同时他也是能鉴别高级和初中级工程师的一块试金石,其中binder是AndroID系统进程间通信最重要的手段之一,现阶段app的发展离不开多进程的运用,经常会启动例如定位、推送等需要在后台开启动的进程来来保证主进程的内存运行;所以合理的使用多进程也是十分必要的;vIEw的绘制是我们自定义控件的理论基础,只有掌握了vIEw是如何绘制的才能个性化的自定义控件;事件分发一直是AndroID开发的难点之一,也是必须掌握的;关于handler机制也是androID的一块难点,因为包括Asynctask、系统启动、Intentservice等底层都是通过handler来实现的,所以掌握后handler机制不仅能提高你的实战开发能力,更能让你系统的了解整个androID系统运作的情况。

AndroID框架层源码掌握AndroID包管理机制,核心PackageManagerServiceWindow管理,核心WindowManagerServiceAndroID Activity启动和管理,核心ActivityManagerService根Activity工作流程Context关联类各种原理,经典第三方库源码系列自定义LayoutManager,RecyclerVIEw中如何自定义LayoutManagerVLayout实现原理,即如何自定义LayoutManagerGlIDe加载原理,缓存方案,LRU算法Retrofit的实现与原理OKhttp3的使用,网络请求中的InterceptEventBus实现原理ButterKnife实现原理RxJava实现原理Dagger依赖注入热修复实现原理,解决方案组件化原理和解决方案AndroID进程通信以及多进程开发

AndroID 多进程和Application关系

经典解决方案:多进程通信解决方案:Andromeda

AndroID动画机制AndroID绘图原理AndroID页面恢复

AndroID的页面恢复采用以下两个方法:

onSaveInstanceState(Bundle outState)onRestoreInstanceState(Bundle savedInstanceState)

onSaveInstanceState :当Activity容易被系统销毁时,会触发该方法。具体的说:

用户点击Home键用户点击Home键,切换到其他应用程序有电话来了等附加 *** 作混合开发及AndroID WebVIEw应用

混合开发涉及到的知识点主要包括:

APP调用WebVIEw加载url掌握WebVIEw的封装,了解所有的WebSettings配置,掌握WebVIEwClIEnt、* WebChromeClIEnt掌握WebVIEw和Native双向通信机制,会自己封装双向通信中间件对WebVIEw的封装可参考:GitHub: AgentWeb对通信中间件原理理解:GitHub:webprogressGradle,自动化构建,持续集成相关

AndroID系统

AndroID Studio编译过程

其中使用到的编译工具:
aapt、aIDl、Java Compiler、dex、 zipalign

主要步骤描述:

通过aapt打包res资源文件,生成R.java、resources.arsc和res文件(二进制 & 非二进制如res/raw和pic保持原样)处理.aIDl文件,生成对应的Java接口文件通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk通过Jarsigner工具,对上面的apk进行deBUG或release签名通过zipalign工具,将签名后的apk进行对齐处理。App启动加载过程

AndroID虚拟机 AndroID App运行的沙箱原则

AndroID架构

在AndroID源码中最重要的三个类:ActivityManagerService/PackageManagerService/VIEw,推荐大家周末的时候可以去阅读下这部分的源码,阅读源码能提高我们今后设计架构自己代码的能力,同时也能从底层了解整个androID系统的运行原理,其他一些比如主线程的消息循环、主线程如何和AMS如何跨进程交互、SystemServer进程中的各种Service的工作方式、AsyncTask的工作原理等。这些知识也是作为一个AndroID高级开发工程师必须掌握的,不能整天沉溺于ui和四大组件的交互,要站在更高的角度去考虑AndroID的有些问题。

MVC模式MVP模式MVVM模式CLEAN模式组件化开发跨平台开发:Flutter、ReactNative(RN未来要黄,了解一下就好)移动开发外围

服务器开发相关

SpringBoot技术Restful API开发网络协议理解:TCP/IP、http/httpS、OSI七层协议授权认证协议: OAuth2.0 等基本的数据库技术数据缓存技术v:Memcached、Redis,Web缓存原理消息队列技术监控、日志分析技术前端开发相关

前端开发知识很多,框架层出不穷,本质的东西却只有以下这些。

核心必备:HTML、CSS、JavaScript入门提高:浏览器兼容性、自定义UI和动效中级技能:框架层出不穷,当前以vue.Js、react.Js 为核心协作开发技能:包管理、模块化,工具采用 npm、webpack等高级技能:框架原理源码研究开发调试各种工具性能分析工具:Memory Monitor性能追踪及方法执行分析: TraceVIEw视图分析:HIErarchy VIEwerApkTool- 用于反向工程AndroID Apk文件的工具lint- AndroID lint工具是一个静态代码分析工具Dex2Jar- 使用androID .dex和java .class文件的工具最后

为什么很多程序员做不了架构师。
1、良好健康的职业规划很重要,但大多数人都忽略了
2、学习的习惯很重要,持之以恒才是正解。
3、编程思维没能提升一个台阶,局限在了编码,业务,没考虑过选型、扩展
4、身边没有好的架构师引导、培养。所处的圈子对程序员的成长影响巨大。

祝各位乘风破浪会有时,直挂云帆济沧海!

总结

以上是内存溢出为你收集整理的业务要求一大堆,跟老板提建议反被数落,Android开发者该怎样自谋出路?全部内容,希望文章能够帮你解决业务要求一大堆,跟老板提建议反被数落,Android开发者该怎样自谋出路?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存