昨天晚上出去和几个朋友交流了一下,聊了不少,思考了一下这一年学习技术的经历,趁着在宿舍养病,将本身的想法记录了下来。java
从开始决定当码农到如今将近两年零三个月,起初是由于本身专业的科研不是本身想象中的那样,加之对程序员的羡慕和崇拜,因而就走上了码农的不归路。做为非科班出身的学生,和计算机院的学生比起来有先天的劣势,例如好多的基础课程未学习、周围的编程氛围太差等等,然而事实上:正是因为不是科班学生,咱们比别人更努力,更愿意付出时间去学习。android
去年四月底开始学android,当时是因为实验室项目(不是作应用层),今年6月份开始学了一个多月iOS,移植了写在android上的功能。今年作了三个商业性质的软件,1月份作了我第一个商业项目,4月份作了一个供路由器使用的app,八月份作了比较大的一个项目模块相似于茄子快传/QQ面对面传文件,800多万的用户。c++
站在今天的角度来审视这一年走过的路,用一句话来总结就是:以为什么都没干呢,一年就过去了!程序员
随着时间的发展,我对一些东西也有深的认识,就拿android开发来讲。android开发学起来很简单,上手很容易,高中生也可能会作,可是作android难道仅仅是拖几个控件,摆几个layout或者使用几个漂亮的开源框架能作个还说得过去的手机app么?显然不是的。使用工具,使用轮子来拼凑产品只是最基本的要求,深刻原理才是更重要的,不只仅要知其然,更要知其因此然!例如android中的各类manager,进程间通讯Binder,view视图的绘制,触摸事件的分发,消息机制,view动画等等,若是不去研究,不去看原理,作一段时间就会遇到瓶颈期,由于会发现android开发就是接口api的调用,你可能会傻傻的认为手机屏幕上显示的一个界面就是activity,甚至都不知道传说中的Java程序的启动类main函数在哪。还有因为android自带的控件比较丑,作项目的时候会使用一些第三方的控件、效果,不能仅仅会直接拿来用这些,在达到必定的水平以后,要试着本身来实现一些好的效果,不只提升本身的水平,可能还会造福他人。在一个就是使用第三方的开源框架工具,好比常用的ImageLoader,Volley,他们究竟是怎么实现的呢?这些都是用来学习的最好的资料啊!固然我目前还没研究这两个,不过接下来确定要看看。面试
因此我体会最深入的就是,作一门技术,会用只是最基本的要求,会使用很简单,难的是要能深刻到底层的原理,必定要研究的深刻。知其然,知其因此然,固然并非让全部人去重复制造轮子,而是在制造轮子的过程当中,对本身技术的提高绝对是很是很是快的。其实团队开发中也有更重要的例如编码规范、风格,模块的解耦合等等,这个另当别论。之后工做了就不多有时间去研究了,跟着产品迭代的节奏会不多有时间去学习,因此必定要珍惜如今的时间。算法
java是作android的基础,其实刚开始学android的时候,个人java基础并非很好,好多都是根据c++的类比大体了解了一下。也是在今年,好好的把java的相关知识研究了一下,对语言的学习也不能仅仅停留在知道怎么用的层次,照着教学视频能实现各xx系统没什么用,基础才最重要。有时间最好去研究其深层的缘由,这绝对是有益而无害的。好比java的集合具体是怎么实现的?固然这和学过的数据结构是同样的,只是jdk的开发者封装的更好,代码更加严谨,研究这些源代码不只仅是对数据结构的复习仍是对大牛的编程思想风格的学习。还有若是不看代码,怎么知道hashtable和vector为何是线程安全的,若是不懂原理,怎么知道hashmap是乱序的treemap是有序的?还有java中高级一点的主题NIO(这是我作相似于茄子快传/QQ面对面快传功能的基本技术)、并发编程。不要认为作android又不是作后台服务器,学这些用处不大,这就大错特错了。事实上这些知识都是很是有区分度的,也是很是有用的。再深刻java要学的固然就是java虚拟机,这也是最近正在研究的内容,里面关于内存空间划分、垃圾回收、类加载的过程等等都是很是很是有用的东西。例如,能看懂字节码,对理解类、对象的初始化过程就有很大帮助。编程
因为下一年就要找工做,因此接下来学习的东西会更偏向于基础知识。设计模式
android部分要在研究一些开源框架,图片缓存加载库ImageLoader,Volley通讯库和一些框架层的源码。api
java会按照java面试宝典上的内容再回回顾一下java的小知识,继续看深刻理解java虚拟机。缓存
tcp/ip:其实做为学通讯的,这部分掌握较好,不过还要认真看看。
算法:以前已经将数据结构还有常见的排序算法写了一遍而且整理在了博客,由于我不想在基础知识还不熟悉的状况下就去刷题。接下来就要狂刷题,看剑指offer,编程之美。虽然我很反对应试教育。
操做系统:看一本操做系统的书/视频。
设计模式:其实以前已经研究过一部分设计模式,android中最经常使用的观察者模式、工厂模式,java I/O的装饰者,集合中的迭代器等等,后面还要再学习几种。
另外,再深刻挖掘之前所作项目中的相关问题。
干任何一件事情,都不可避免的会走一些“弯路”,但是这是弯路几乎是非走不可的,由于任何事情,你不经历永远体会不到。更况且,所谓的弯路并不必定是弯路,任何走过的路,犯过的错,都会成为往后成功的垫脚石。记得前段时间看知乎上有个问题:你有什么道理后悔没有早点知道?从这个角度来看,个人回答是:看书,看经典书。经典书籍绝对是最好的知识宝库,之前没意识到看书的重要性。事实上当真正研究了一本书,就能够对相关方面有一个全面的掌握,更主要的是还能对一些问题有更深入的看法。常常说的一句话:光阴似箭岁月如梭时光荏苒如白驹过隙通常。如今最大的感触就是时间过的真的好快,然而过去已经没法掌控,那么只有把握好当下。时间过得很快,必定要勤奋。
下面罗列一些我看过的java相关的很不错的书,有些书不必定彻底看了。
Thinking in Java
Java并发编程实战
Java Nio
深刻理解java虚拟机
深刻理解android内核设计思想
算法导论(前面部分)
TCP/IP 电子科大杨宁老师的视频
设计模式之禅
effective java
还有一些我没看过的,可是评价很是不错的书
Java核心技术卷1/2
Java并发编程的艺术(已购买)
Android开发艺术探索(看了目录就感受至关棒,绝对是好书)
鸟哥的私房菜(学android仍是要掌握一些Linux的)
hotspot实战(翻过pdf,还不错)
* *以上只是我我的的一些观点,若是有什么不妥之处还请谅解**