如何在移动开发者的寒冬中破冰而出

如何在移动开发者的寒冬中破冰而出?

  2017-09-08  陈宇明  码个蛋

作者博客

http://www.jianshu.com/u/f958e66439f0

文章目录

  • 前言

  • 应该关注哪些技术?

  • 应该如何学习?

  • 怎么样更容易坚持?

  • 为何分享?

  • 总结


0

前言

在这个行业,每隔一段时间都会出现新的技术,好焦虑呀,到底该学什么?14年移动开发出现了大量的泡沫,随便一个培训机构培训几个月出来的在北上广都是8k起,现在感觉移动开发工程师供应需求方都要饱和了。招聘公司每天简历都要收到上百封,很多移动开发面试都接不到电话。该怎么办?要学习RN吗?要学习后台吗?在校的准程序员们学习android还合适吗?现在移动端不景气,是不是要学习新的语言,逃离移动端技术?


1

应该关注哪些技术?

这些问题,每天都会有人在群里议论,也会有人经常在群里求工作职位坑。那么我的看法是不要纠结学什么,先学了再说,与其抓住变量(新的技术手段)还不如好好学习,我特别喜欢《暗时间》的一段重视知识的本质:对于程序员来说这一点尤其重要,程序员行业的知识芜杂海量,而且总是在增长变化。很多人感叹跟不上新技术。应对这个问题的办法只能是:抓住不变量。


底层知识永远都不过时。算法数据结构永远都不过时。基本的程序设计理论永远都不过时。良好的编码习惯永远都不过时。分析问题和解决问题的能力永远都不过时。强大的学习能力和旺盛的求知欲永远都不过时。你大脑的思维方式永远都不过时。


我在刚入行时,一直在追逐最新最热的技术,几年过去了,才发现在,新的知识永远在增长,感觉自己很无力,有一天无意间在网上看到Google的面试问题类型,我惊讶的是在面试题中没有最新的技术,甚至不是在某一种语言下的知识,而是通用的知识,算法数据结构,设计理论,编码规范,那时我懂了,想起刚出来的时候去一些公司面试被问到算法,一脸懵逼,并且还理直气壮和面试官说“开发用到算法的地方不多呀,记不住也很正常。”,现在回想起来当初的想法真是给自己找借口,因为算法本身比调用API要难,你连难的东西都学好了,还学不会简单的API调用吗?本质上面试官是想看看你的学习能力和逻辑能力。



如果学好底层不变量,现在的大数据,云计算, AI 学习起来都是事半功倍,你以为你没有基础就能学好大数据,云计算,AI?我们不要拘泥于某一门语言而是先修炼好内功,你的在这门语言的造诣是否高深,最终还是由你的内功深厚程度来决定的。


2

应该如何学习?

我们知道该学习什么了,那么如何学习了?


在这个信息爆炸时代,我们每天阅读大量的信息(微信公众号、微博、简书、今日头条、微信读书、得到 .....),阅读过后总感觉自己学习到了很多新知,但是一周过后我们能说出来的收获又有多少呢?


这不禁让我想起塞内加的《论生命之短暂》中的一句话“如果一个人出海遇到狂风暴雨,被变换肆虐的风吹得团团转,你可能会觉得他航行了很远。其实航行得并不远,只是浮沉动荡的时间长而已。”,没错如今的知识就像出海时遇到的狂风暴雨,我们只是被吹的原地团团转而已,并没有在知识的海洋航行很远。


互联网的强大足以让我们查找到我们想要学习的资料,但是太多垃圾信息也掺杂在其中,如:大数据广告,错误的资料,恶意的评论,吸引注意力的热点信息,这些东西无疑是对我们有百害而无一利的,那么如何避免出现这些信息呢?看本书吧,成体系,由浅入深,循序渐进,没有我刚才所说的垃圾信息,只需要支持几十元的书籍费用,让你的学习事半功倍。


现在网上的视频也很多,牛人的收费课程也不少, 要不要去参与?


以通过阅读书籍为主。市面上的视频和收费课程,大多是内容都是来自书籍中的,太阳底下无新事。


以终为始先定一个目标,比如学完后写一篇教程,然后去学习,这样更加有动力,有意思的刻意练习,更为有效。知识经过整理,才更容易理解,容易理解的只是才更容易记忆。你想想所谓的高手是不是本质上就是在遇到对应问题场景的时候,能够快速调起自己的脑海中的解决方案,并且成功的解决掉这个问题。


管理学中有个很不错的模型,它非常适合用于学习,PDCA。


PDCA循环又叫质量环,是管理学中的一个通用模型,最早由休哈特于1930年构想,后来被美国质量管理专家戴明博士在1950年再度挖掘出来,并加以广泛宣传和运用于持续改善产品质量的过程。


PDCA是英语单词Plan(计划)、Do(执行)、Check(检查)和Adjust(纠正)


P (plan) 计划,包括方针和目标的确定,以及活动规划的制定。


D (Do) 执行,根据已知的信息,设计具体的方法、方案和计划布局;再根据设计和布局,进行具体运作,实现计划中的内容。


C (check) 检查,总结执行计划的结果,分清哪些对了,哪些错了,明确效果,找出问题。


A (Adjust)纠正,对总结检查的结果进行处理,对成功的经验加以肯定,并予以标准化;对于失败的教训也要总结,引起重视。对于没有解决的问题,应提交给下一个PDCA循环中去解决。


以上四个过程不是运行一次就结束,而是周而复始的进行。


总结:前期准备、中期执行、后期回顾


如何应用呢?


假设要学习设计模式。


  • step1 计划:明确目标,分别把常用的23种设计模式列出来,一周学习一种。


  • step2 执行:按照计划学习,学习完成之后写一篇自己对设计模式的理解。


  • step3 检查:写完之后,请朋友阅读,自己和别人的文章对比进行多维度的比较。


  • step4 纠正:现在大家都喜欢看写的有趣的,可以改改自己的写作风格迎合大众的喜好。这个类图画的不错,以后每篇都要画类图。


有人肯定会说了,我也知道学习很重要,但是我就是坚持不下来。

 

 没错,我们人性天生懒惰,大部分的人都是半途而废的专家,其实很多时候,不是我们比别人笨,而是别人比我们更坚持。高德纳先生曾经说过“过早退出是一切失败的根源。 兴趣遍地都是,专注和持之以恒才是真正稀缺的。”,可见坚持的重要性那么接下来我们就来说说如何更容易坚持。


3

怎么样更容易坚持?

《暗时间》中提到过这样的一个方法给自己设立一个进度条


如果你把任务分割了,你就有了进度条,你就知道,事情在不断的进展,你总会完成任务或到达你的目标,你会有一个时间估计。反之如果没有这个分割,整个的任务或目标对你来说就只有两种状态——“完成”和“未完成”,如果不幸是一个比较漫长的目标,那么你会发现你的进度条总是“未完成”,一次又一次的等待未果会耗尽你的耐心,让你下意识的产生“这事什么时候才能完呢?”的疑惑,没有分而治之,你就不知道未来还需要付出多少努力才能达到目的,这就会让你心生怯意,不敢进一步投入时间,免得血本无归。在这样的心理下,不少人就会选择保守策略——退出,以免到头来花了时间还一事无成。


当你已经能够坚持下来持续的学习了,那么最后我建议你把你的学习成果分享给其他人,为什么?请看下面。


4

为何分享?

我是一个喜欢分享的人,以下是我的分享经历。


  • 14年写博客


  • 15年录制教学视频


  • 16年写开源项目


  • 17年做直播、公众号


从最开始的写文章(只需要写),到录视频(先写好讲稿,然后开始讲,要注意声音节奏),再到直播(直接面对听众)。通过不断跳出自己的舒适区,使得自己快速的成长。


以下是我在分享得到的好处:


  • 没写文章的时候感觉自己很厉害啥都懂,但是写的时候却写不出来,这其实就是对这个知识理解的不过透彻,从而可以认识自己的不足。


  • 每个人都是从不懂到懂,写出好的文章可以帮助他人理解这个知识点,助人为乐。


  • 当你的文章得到曝光之后,会有更厉害的人指出你文章的错误,从而获取反馈提升自己。


  • 一个人的能力边界很小,认识更多人志同道合的朋友,可以组织齐心合力把分享做的更好。


  • 更多的面试机会,让你的简历众不同,上面说了每天简历这么多,你要是有自己的博客你就更容易被选出来。


  • 出版社编辑主动找上来,约你出书。


  • 各大相关平台运营找你合作。


  • 你会被更多人知道。


5

总结

通过本篇文章我们知道了

1.关注哪些技术?

底层知识。

2.如何学习?

阅读书籍结合PDCA学习方法。

3.怎么样坚持?

加强反馈,给自己设置一根进度条。

4.为何分享?

提升自己,帮助他人,构建个人影响力。


请注意以下2个重点:

1.请把注意力放在真正值得的事情上。

2.贵有恒何必三更起五更睡,最无益只怕一日曝十日寒。-- 毛泽东


最终达到在寒冬中破冰而出!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用android studio 运行,下面是一个简单的文档,这个代码是一个demo 一、Activity的使用 1、SNActivity 框架最基本的activity,可调用$(SNManager)进行操作activity,具体用法请参考文档或代码 2、SNNavigationSlidingActivity 包含SNActivity的功能,继承于com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity 支持导航条和左滑视图的Activity 加载导航条: loadNavBar(int height,int background_color_id) loadNavBarResId(int height_id,int background_id) 加载左侧视图: /** * load left view * @param left_id left layout id * @param offset_value offset value * @param shadow_width_value shadow width value * @param shadow_drawable_id shadow drawable style * @param fade fade value */ loadLeft(int left_id, int offset_value, int shadow_width_value, int shadow_drawable_id, float fade) /** * load left view * @param left_id left layout id * @param offset_id offset id * @param shadow_width_id shadow width id * @param shadow_drawable_id shadow drawable id * @param fade fade value */ loadLeftResId(int left_id, int offset_id, int shadow_width_id, int shadow_drawable_id, float fade) 二、SNElement的使用 View的伪装对象,支持所有View的功能,详细功能可参考文档或代码 手动伪装:$.create $.id $.findView 注入伪装:$.setContent(view class or layout id,inject class); 获取原型:elem.toView(); 三、注入 1、视图注入 A、创建注入类,属性名称必须和layout的id对应,如果不对应请加入标签@SNInjectView class DemoInject{ @SNInjectView(id=R.id.tvTest) public SNElement test; } B、实例化注入对象 DemoInject di=new DemoInject(); C、调用$.inject或者$.setContent注入 $.inject(di); D、注入成功后即可调用对象 String text=di.test.text(); 2、依赖注入 A、需要绑定注入对象,建议写到Application的onCreate SNBindInjectManager.instance().bind(ITest.class, Test.class); B、与视图注入不同的是属性必须添加标签@SNIOC,注入的对象(Test)必须包含只有一个SNManager参数的构造函数,且必须实现注入者 public class Test implements ITest{ SNManager $; public Test(SNManager _$){ this.$=_$; }; } class DemoInject{ @SNIOC public ITest test; } C、调用$.inject或者$.setContent注入 同视图注入 D、注入成功后即可调用对象 di.test.xxx(); 四、fragment的使用 1、SNFragment 2、SNLazyFragment 五、控件的使用 1、SNFragmentScrollable 2、SNPercentLinearLayout、SNPercentRelativeLayout 3、SNScrollable 4、SNSlipNavigation 5、XList 6、slidingtab

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值