昨天晚上出去和几个朋友交流了一下。聊了非常多,思考了一下这一年学习技术的经历,趁着在宿舍养病,将自己的想法记录了下来。
总结过去与思考
从開始决定当码农到如今将近两年零三个月,起初是由于自己专业的科研不是自己想象中的那样,加之对程序猿的羡慕和崇拜,于是就走上了码农的不归路。作为非科班出身的学生,和计算机院的学生比起来有先天的劣势,比如好多的基础课程未学习、周围的编程氛围太差等等,然而其实:正是由于不是科班学生。我们比别人更努力,更愿意付出时间去学习。
去年四月底開始学android,当时是因为实验室项目(不是做应用层),今年6月份開始学了一个多月iOS,移植了写在android上的功能。
今年做了三个商业性质的软件,1月份做了我第一个商业项目,4月份做了一个供路由器使用的app。八月份做了比較大的一个项目模块类似于茄子快传/QQ面对面传文件。800多万的用户。
站在今天的角度来审视这一年走过的路,用一句话来总结就是:认为什么都没干呢,一年就过去了!
随着时间的发展,我对一些东西也有深的认识。就拿android开发来说。
android开发学起来非常简单。上手非常easy,高中生也可能会做,可是做android难道不过拖几个控件,摆几个layout或者使用几个美丽的开源框架能做个还说得过去的手机app么?显然不是的。
使用工具,使用轮子来拼凑产品不过最主要的要求,深入原理才是更重要的,不只要知其然,更要知其所以然!
比如android中的各种manager,进程间通信Binder,view视图的绘制,触摸事件的分发,消息机制,view动画等等。假设不去研究。不去看原理,做一段时间就会遇到瓶颈期,由于会发现android开发就是接口api的调用,你可能会傻傻的觉得手机屏幕上显示的一个界面就是activity,甚至都不知道传说中的Java程序的启动类main函数在哪。还有由于android自带的控件比較丑。做项目的时候会使用一些第三方的控件、效果,不能只会直接拿来用这些。在达到一定的水平之后,要试着自己来实现一些好的效果,不仅提高自己的水平,可能还会造福他人。在一个就是使用第三方的开源框架工具,比方常常使用的ImageLoader,Volley,他们究竟是怎么实现的呢?这些都是用来学习的最好的资料啊!当然我眼下还没研究这两个,不过接下来肯定要看看。
所以我体会最深刻的就是。做一门技术,会用仅仅是最主要的要求。会使用非常easy,难的是要能深入究竟层的原理。一定要研究的深入。知其然,知其所以然,当然并非让全部人去反复制造轮子。而是在制造轮子的过程中,对自己技术的提升绝对是非常非常快的。事实上团队开发中也有更重要的比如编码规范、风格,模块的解耦合等等。这个另当别论。以后工作了就非常少有时间去研究了,跟着产品迭代的节奏会非常少有时间去学习。所以一定要珍惜如今的时间。
java是做android的基础,其实刚開始学android的时候。我的java基础并非很好,好多都是依据c++的类比大致了解了一下。也是在今年。好好的把java的相关知识研究了一下,对语言的学习也不能只停留在知道怎么用的层次。照着教学视频能实现各xx系统没什么用,基础才最重要。有时间最好去研究其深层的原因,这绝对是故意而无害的。比方java的集合详细是怎么实现的?当然这和学过的数据结构是一样的。不过jdk的开发人员封装的更好,代码更加严谨,研究这些源码不不过对数据结构的复习还是对大牛的编程思想风格的学习。还有假设不看代码,怎么知道hashtable和vector为什么是线程安全的,假设不懂原理。怎么知道hashmap是乱序的treemap是有序的?还有java中高级一点的主题NIO(这是我做类似于茄子快传/QQ面对面快传功能的基本技术)、并发编程。不要觉得做android又不是做后台server,学这些用处不大,这就大错特错了。
其实这些知识都是很有区分度的,也是很实用的。再深入java要学的当然就是java虚拟机,这也是近期正在研究的内容,里面关于内存空间划分、垃圾回收、类载入的过程等等都是很很实用的东西。比如。能看懂字节码,对理解类、对象的初始化过程就有很大帮助。
展望未来
因为下一年就要找工作,所以接下来学习的东西会更偏向于基础知识。
android部分要在研究一些开源框架,图片缓存载入库ImageLoader。Volley通信库和一些框架层的源代码。
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,还不错)
* *以上仅仅是我个人的一些观点,假设有什么不妥之处还请谅解**