转载自:http://blog.zhaiyifan.cn/2016/04/28/about-learning/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io?ref=myread
最近因为在学习一些新的东西,所以Android的东西没有怎么更新。趁着有些闲工夫,简单说说技术上的学习,也算是自己对这几年工作来的一个小结和经验吧。
希望这篇东西可以给那些在校的,亦或是才踏入工作没多久的程序员同伴们一些帮助。毕竟我自己也曾经止步不前,不知所措迷茫过。
英语
老实说,没有比英语性价比更高的,需要学习的东西了。靠着别人的翻译,或者机翻,终究不是办法的。笔者自己日语英语姑且算是熟练掌握的地步,但在初期直接看那些全英文的书籍,仍然会觉得头痛(谢谢HKUST虐我),但坚持下来就会发现其实计算机的英语还是有一个范围的,多看看熟悉起来,就会觉得并没有什么难,甚至比起很多翻译来说更容易看懂。
混迹GitHub就会发现国内的很多开发者英语上欠缺还是很大的,尤其是一些description和readme直接就上中文的。即便你英语渣,机翻也行啊。毕竟是计算机社区,英语才是通用语言。用中文去一些国外开发者的仓库里提issue或者回复也是一种很粗鲁的行为。
如果让我说一种对技术帮助做大的语言,那必然就是英语。有了英语,才能真正地独立学习。
问小白问题之前,你Google过吗?如果让我看到一个开发动不动去搜百度,那我估计会武断地认定他很菜。其实Google是我们最好的老师,只要能正确把握问题的关键字,几乎没有找不到的答案,大部分会在StackOverflow上,其他散落在GitHub、博客等等地方。
如果你要找的知识实在冷门,比如react native的一些深入用法,android上的视频so阉割这种,那恐怕只能找找做这块的朋友或者自己研究了,国内有一些好心的开发者或许会分享在自己的博客。
至于科学上网,这个话题相关的技术太多了,请自行找方法,VPN也好,SS也好,都很简单,相对的投入和产出对程序员来说性价比是很高的。实在不想花钱的去用AWS的免费云服务器搭SS也行。
实践
看是没有用的。比如看一篇关于Hybrid App原理的文章,或许它写得很好,但其实就算看完了,让我自己去写一个,或者讲讲怎么去做一个我们应用的版本,Android/iOS端通用的方案,最后也是支支吾吾说的不知所以。最后还是要去实践做一些Hybrid页面才能真正掌握,能说清楚这里面的原理和应用场景。
纸上谈兵终觉浅。
警惕体力劳动
当你的工作成为一种体力劳动,而自己无法从中获得新的体验和知识的时候,需要警惕究竟发生了什么。
想得太少
对做的内容停留在完成的阶段,而不对更好的方案,实现细节去思考更多,比如用了某个API,会不会去仔细看看其究竟是怎么做的。或许你知道Handler,Looper,那你知不知道主线程的一切,四大组件的生命周期,各种View的触摸事件都是消息驱动,在mainLooper里面进行处理的呢?
工作内容重复
当Focus在一块上太久之后,难免会碰到这种瓶颈,这时候可以看看是不是能换一块做,比如做做缓存、Hybrid、启动优化、视频等等。可以做的领域很多,实在发现兴趣不在此,换着做后台或者前端也行。倘若因为个人原因,比如公司不让换或者可能工资会低很多,挤一挤时间在side project里面搞搞也可以,只是有没有心的问题罢了。
我面试过一些做Android 5-6年的程序员,但大部分真的连一些优秀的2-3年经验的开发者都远远不如,问设计不懂设计,问流行的开源项目回答就是“好像听说过”。我不希望我认识的开发者以后变成这样的人。但你若是总是重复劳动,难免像这样1年的工作经验重复了5年。
在额外学习的时候,更多关注的应该是不同的地方,而不是说这个学Python,下个月去学Go,想想语言的差异性在哪里,自己试试看做一些项目,培养全栈工程师的底子。还在念大学的时候,我学了C、C++、Java、Python、Ruby、PHP、HTML、Perl、SQL/Redis/HBase等等等等,但对每个的理解都不够深刻,现在想来那时候是做错了的。
你应该有自己的专长,但也要能从全局的角度思考问题,一个不懂前端的后端老大会导致前端过重不灵活,反正只要自己这儿的模块清晰就好,一个不懂前端的前端老大也会让下面的人不要抱怨,做出来就好。
公司问题
发生在一些项目经理逼得特别紧,老大又比较无能的地方。项目经理为了向上面交待,对工程师说“这个进度能不能再压一下呀”,或者干脆直接不听工程师的意见强行缩短工期,导致没有时间去深入学习。老大明知这种情况,却睁一只眼闭一只眼。这种公司,还是离开为妙。
一个合格的leader,或者说mentor应该做些什么?至少从我的角度来看,尽管对公司他需要对项目负责,但对团队内的开发者,他更应该做的是观察和指导,看清楚那些团队毒瘤,营造团队氛围,而不是一味Push催进度和表现自己。
记录和总结
写博客是为了什么?
至少对我来说,写下的东西更多是对自己的一个总结和交待。如果我能写下来,至少能证明我有信心自己确实是这么去理解的,没有去坑人。另外,姑且也算是一种成长的足迹吧,偶尔自己还会去看看笔记。
分享也是目的之一,希望大家能互相进步,这样才能促进发展。
写博客也好,写一些笔记也好,点点滴滴也是对自己的一种整理。
问自己
想清楚自己要的究竟是什么。
做全还是钻?想做一个超强并发量的后台?想黑别人的系统?想做出精准有效的推荐算法?还是想做别人能实际用到的产品?
笔者正是因为想要的是后者,所以成为了Android开发(为什么没有选iOS,大约是Android的开放性吸引了我)。而现在,因为发现自己欠缺的(对前端驾轻就熟,大部分的事情对我来说只是体力活,而自己想承担一个完整的项目却又不行),所以又重新拾起了Node.js,看起了ES6,思考设计和产品的问题。