我的编程学习之路
Tags
#复盘
知之者不如好之者,好之者不如乐之者。——《论语•雍也》
转眼间,2017年已经过去10天了,现在才写这篇文章似乎有点晚,不过写总比不写要好一点,趁着17年的年初,整理一下过去一年的得失与感悟,也好好的规划下接下来这一年的奋斗目标。
一、核心篇
1、Android·
15年9月进入上海车城网,16年11月离职,12月5号入职搜布。在这一年多的时间里,一共参加了4个app的开发,在这个过程中,也逐步完善了一套自己的Android技术栈(MVP+Mockito+Robolectric+RxJava+Retrofit+OkHttp+Glide+EventBus+GreenDao+其它)。主要学习成果有:MVP+单元测试探索、Retrofit基本用法和流程分析、Okhttp基本用法和流程分析、RxJava使用场景总结
至于自定义控件方面呢,通过看《Android开艺术探索》《Android群英传》《Android内核剖析》,总算是从一脸懵逼到豁然开朗了。学习成果主要有:贝塞尔曲线学习、自定义Behavior,实现滑动卡片、分组悬停列表、自定义下拉刷新和上拉加载框架
下一步主要就是多看Android的系统源码,理清楚Binder的IPC机制、Zygote的启动过程、各种SystemService的具体流程(比如AMS、PMS、WMS等)、查看View的源码彻底弄懂视图绘制流程和手势处理流程。
2、Java
虽然我们平时写Android应用就是用的Java语言,但是,老实说,对于Java这门语言,感觉自己了解的还是太少太少了,对于jdk里面的源码,几乎都没怎么瞄过。更别提jvm相关的东西。下一步的计划就是:好好学习下jdk相关的类库源码,同时jvm也必须掌握。
jdk:collections包下关于各种数据结构的实现原理、concurrent包下关于多线程并发的实现原理、关于io包和nio包的区别与联系。主要是学习计算机程序的思维逻辑这一系列博客、《Java并发编程实战》
jvm:GC机制、类加载机制、内存模型。主要是学习《深入理解JVM虚拟机》
3、数据结构与算法
做为一个半路出家的程序员,因为没有系统的学习过数据结构和算法,虽然也零散的看过一些排序算法,但终究太散,不成体系。以前面试的时候,最怕别人问到这方面的问题了。后来,在今日头条上看了一段动脑学院讲解的关于AOP的视频,感觉讲解的很好,于是去官网看了下它们的Android学习课程,发现包含:高级UI、性能优化、NDK、设计模式、RN。还附送一套数据结构与算法的课程。一咬牙花了5800大洋,买了它的课程。目前已经学习了:数据结构与算法、性能优化。正在学习:设计模式。感觉数据结构与算法这一个系列讲解的很好,以前自己对于线性表、树、图,可以说完全是一脸懵逼,现在,一方面是通过看视频,一方面通过自己的多写代码来练习,算是给自己搭建了一个数据结构与算法的知识框架,虽然里面有的细节还不是特别明晰,但骨架已经有了,血肉可以慢慢再来完善。下一步的计划是,好好的学习《算法导论》这本书,同时将每个数据结构和算法都写博客整理下来,数据结构:顺序表、链表、栈、队列、二叉树、赫夫曼树、B树、红黑树、AVL树、图、最小生成树,算法:各种排序、穷举法、迭代法、贪心法、动态规划、分治法、回溯法。
4、设计模式
很久之前,就听过单例模式、动态代理、享元模式、观察者模式等等这些貌似很高深的说法,但一直感觉云里雾里,不知所云。后来,通过学习面向对象葵花宝典这一系列的博客,让自己明白了现实世界中的类是如何一步步转化成了程序世界中的类,也让我意识到了设计原则的重要性。以前写代码,主要是从一个实现者的角度写代码,后来,我开始尝试着从一个设计者的角度去写代码。如果说宝典讲了设计原则,是内功心法,那么从菜鸟到高手演变之设计模式和JAVA与模式这两个系列的博客所讲的设计模式,就是外功招式了,也就是我们常说的套路,是针对特定问题的特定解法。其实写的代码多了,就会发现,其实很多问题,都是类似的,而这些设计模式的套路,则是前人总结的经典解法。当然,设计原则是本,设计模式是末,万万不要为了套路而套路。通过前面三个系博客的学习,然后又看了《设计模式之禅》《Android源码设计模式解析与实战》这两本书,对于设计原则和设计模式,个人感觉也算是初入门径了吧。下一步的计划,则是整理出每个设计原则和每个设计模式的博客,进一步体悟面向对象编程的精髓,多多在实践中应用,争取早日登堂入室,达到“手中无剑,心中也无剑”的境界。
5、重构
首先得感谢有心课堂中Stay大神的视频,在某一个无聊的晚上,一不小心打开了Stay的自己动手写Http框架,一下子被吸引住了,以前一直在用别人写的什么AsyncHttp之类的框架,也曾经想过自己去写一套自己的框架,可惜无从下手,感觉写框架太难了。在这个系列的课程中,Stay从最简单的用例开始,通过一步步的重构,最终实现了一个复杂的网络框架,简直让我大开眼界。从让我从此走上了自定义框架的不归路:Adapter的封装之路、自定义ORM框架、自定义IOC框架、自定义RxJava之旅。根本停不下来的赶脚,不过在自定义框架的过程中,不断的克服各种意想不到的问题,最终终于有了成果的时候,那种成就感是无与伦比的。下一步的计划是,好好的学习下《重构 改善既有代码的设计》,从实践上升到理论,不要再只是零敲碎打的重构了,要进行有计划有系统有理论的重构。过去的重构经历告诉了我一件事:好的框架不只是设计出来的,更是重构出来的!
二、拓展篇
1、前端
清明的时候闭关三天,一边学习html+css+js,一边写出了一个简单的网站。不过现在服务器到期了,所以没法访问了。学习css的时候,是搭建了一个极客学院的界面的框架。后来,自己又陆陆续续学习了一些js和jQuery的高级用法,仿了一个微信的模糊照片的效果。下一步的计划,是好好研究下微信小程序和RN/Weex。
2、Python
中秋的时候又闭关了三天,好好的学习了Python的基本语法,玩了一下Flask框架,同时也用BeautifulSoup+Requests搭建了一个简单的爬虫,实现了无登录验证和有登录验证下的网页抓取。关于抓取到的数据的存储,我也顺便体验了一下Python下的redis和mongoDB这些NoSql数据库的玩法。下一步主要是参考七步精通Python机器学习,学会用Python的各种机器学习库:Numpy、Pandas、Matplotlib、scikit-learn。
3、JavaWeb
这一方面,玩的比较少,只是玩过最简单的HttpServlet的用法。后来也用动态代理+Socket实现了一个简单的微服务框架。下一步的计划,是好好的研究下Spring Boot的玩法。
4、机器学习
之前学习Python的时候,在慕课网上看了一个关于机器学习的理论的视频:初识机器学习-理论篇,不过这个只是告诉了我机器学习有哪些算法和应用场景,它的各个算法之间的关系是什么,我还是一无所知。后来,看到了这篇博客:从机器学习谈起,对于机器学习的知识脉络总算有了一定认识。现在很火的深度学习,其实就是机器学习的一个子类,主要就是深度神经网络算法,将传统的神经网络算法从一个隐藏层拓展到了多个隐藏层。学习计划还是老办法,先搭框架,再填细节。下一步的规划就是,好好的学习一些常用的机器学习的算法:回归算法、神经网络、SVM、聚类算法、降维算法、推荐算法、高斯判别、关联规则、朴素贝叶斯、决策树、Ctr预估、协同过滤。不求自己能代码实现,至少能大致的理解它的主要思路。
5、TCP/IP
因为是半路出家的程序员,所以呢,对于网络协议这一块,几乎也是一片空白。记得很久以前要实现一个文件上传的功能,看网上的博客说要设置请求头:Content-Type: multipart/form-data,虽然后来实现了,但根本不知道这个字段是干嘛的,为什么要这么搞。后来,看了《图解Http》,才对于Http协议有了一个整体性的认识,对各种状态码、请求头、响应头,都有了一定了解。不过Http协议只是TCP/IP协议族中应用层的一个协议而已,要想了解整个计算机的通讯协议,单单一个Http是远远不够的。下一步的计划是,先看完这一系列的博客: TCP/IP详解学习笔记,然后去啃《TCP/IP 协议》这本神书。
6、shell
15年的年底花一万多大洋买了一台Mac(感觉做为一个程序员,还是应该早点切换到Linux或Mac系统的,Windows上的dos简直不能忍受!)在日常的使用中,比如说配置开发环境时,经常需要用到一些shell命令,当时只知道按照别人的教程来执行那些命令,却不太明白这些命令的具体含义。下一步的计划是好好学习下各种常用的shell命令。
7、git
虽然用了git也有一段时间了,不过还是只会比较简单的git命令:add、commit、push、pull等。下一步的计划是学习git的一些高级用法。