偏题了,回来说说编程的事情吧,虽然说大学是个三流的学校,不过老师都是博士硕士级别的工程师,对于当时的偶会觉得他们好像很厉害的样子,不过现在觉得有时候标签这种东西并不能说明什么吧。
那时候老师说「移动应用开发」会火,到时毕业一定可以找到工作,所以偶就想着主攻「移动应用开发」,也就是 Android ,因为 Android 的应用层是用 Java 写的,所以一开始学的是「Java基础」。
虽然说去上课,但是真正听老师讲课的人寥寥无几,偶也不例外,电脑前演示着老师讲课的PPT,但是视线一直停留在自己手机里的美女上。
不过有一次老师讲到一个「使用for循环打印星星的例子」,偶觉得好好玩,这时候偶才发现Java并非那么无聊,偶可以通过代码写出打印多少颗星星,打印成正三角形的形状,倒三角形的形状,正方形形状等等。第一次有了一种「有想法可以被Java实现的感觉」,从那天起开始对编程产生了兴趣。
那一天虽然知道了「for循环」怎么写(跟着老师的例子照猫画虎),但是对于Java环境变量怎么配置,二进制是什么,什么是Byte,Long都不懂,那时候可以说对于 Java 只知道怎么拼写而已。
因为有些知识点之前没认真听,也发觉老师讲的很无聊,后来偶决定自学,自偶驱动的学习和被动的学习是两个完全不同的概念,偶到现在依然认为:真正牛逼的人,都是自学能力极强的人!
偶开始上网查询学习「Java基础知识」的资料,无意间发现了某培训机构(是哪个机构就不说了,免得说偶打广告)有免费的讲课视频资料,看了一下目录发现很全面,于是偶下载下来试着看一下,没想到被讲师的幽默讲课方式深深吸引,感觉他不做相声演员都可惜了,于是边笑着看他的视频,边跟着他敲代码,自己也做一些笔记。那段时间有时候逃课其实是在宿舍里看他的视频哈哈!
那个视频课时分为三十来天,不过偶是除了跟着他敲代码外,偶还会自己做一些笔记,所以偶大概花了两个多月才把视频学完的,也就这几个月的时间偶从如何打印Hello World,到常量,变量,注释,运算,逻辑语句,再到面向对象(可能比较笨,当时想了好几天才明白这一概念),数组,函数,继承,内部类,多态,GUI等,再到集合,多线程,IO流,反射等等有一个全面的了解了。
感觉自己把 Java 比较基础的知识学的差不多了,就想着能不能做点好玩的东西出来,记得有一个情人节,那时候偶还是有女朋友的人,想给女朋友做一个程序,作为礼物送给她,有那么一个夜晚,偶突然想到能不能用 Java 做一款小游戏,游戏的主角就是她呢?
想想还是有点激动的,后来偶模仿了「坦克游戏」,不过玩家的坦克是偶女票的头像,而很多敌方坦克就是偶的头像,然后子弹被偶改成❤️(爱心子弹,害羞)。
用了几天的时间把它做出来觉得好有成就感,最后偶把这个游戏打成jar包送给偶女票当作礼物,然后看她玩的时候一直在互相发射爱心,不过敌方的“偶”又多,射出的爱心子弹又快,每次玩不久她就“挂”了,老是叫偶去修改一下游戏速度,让她赢哈哈。不过现在的她已经不属于偶了,哎,想想还是有点小伤感呢,偶是不是又跑题了 – –
因为偶一开始就知道偶学 Java基础 是为了去开发 Android 应用,那时候觉得能在手机上把玩自己开发的 APP 是一种牛逼的存在。所以偶又去找了一些「Android入门教程」的视频来学习,因为自己有了一定的 Java基础知识 ,所以对「Android入门教程」视频学起来倒不觉得很难,反而是想着快点学完然后做个有意思的APP出来,所以那时候对Activity,Service的生命周期、一些诸如TextView,EditView基础的组件、诸如LinearLayout的容器组件、广播、Intent、内容提供者消费者、Sqlite等基础内容都学的比较认真。
慢慢的偶开始写了一些demo,但是发现很不满意,原因是偶感觉自己写的东西很简单,几个界面跳来跳去,几个增删改查,好像就没什么了,感觉自己没有什么项目经验,而且停留在很基础的层面。
于是偶上网去搜索一些Android相关的资料,发现了CSDN上的「郭霖」大佬,发现他写的博客通俗易懂,那时候他每篇博客偶都看,慢慢的偶又认识到了「老罗」,他写的东西很深,有时候偶看不懂 – -,发现了「阮一峰」的博客,再到后来偶又发现在知乎上的 「stormzhang」, 偶这才发现当时自己有多low,这些大佬们经验满满,偶从他们身上学到了自定义View,性能优化,网络编程,第三方框架等等比较进阶的东西,不过更加让偶学习到的是他们的执行力,他们的认知,他们对信息的敏感。
举个例子:记得 Android Studio 刚出来那会,偶只是觉得 Android Studio 应该和 Eclipse 差不多吧,不就是个编辑器,而且Android Studio 刚出来的时候偶下载体验了一下卡的要死,偶二话不说就把它给卸载了,什么垃圾玩意。不过后来偶发现大佬们都在用 Android Studio ,而且一直在建议更换为Android Studio,偶记得之前大佬们还专门写了Android Studio的教程。受他们的影响,偶把Android Studio下载回来,随着Android Studio的迭代,偶才发现这编辑器简直了,这快捷键,这体验,简直完爆 Eclipse。现在还看到有些人还用Eclipse开发,没用过Android Studio或者InteliJ IDEA,说实话,偶面试到这样的人一般会直接pass掉,并不是说Eclipse不好,而是认为,如果不拥抱新的事物,总是固步自封,那么很快会被淘汰!
也是那个时候,偶发现了原来还有一个叫做「GitHub」的东西,简直打开了新天地,上面有许多大牛分享代码,聚集了全世界的程序员,吓得偶赶紧去学习了Git的操作命令,clone了几个觉得适合偶当时学习的Android项目源码!
后来和朋友参加软件杯比赛,能写出比较像样的APP了,看着APP从想法到实现,确实能带来很多成就感,也许对别人来说并不完美,但是自己亲手写出来的,自己debug出来的APP,就是有不一样的感觉,觉得像自己的孩子一样哈哈!
在大学期间,自己用PS画UI,使用第三方的接口,琢磨着做了几个小众的APP,后来将这些APP都装在自己的手机上,面试的时候一边演示一边跟面试官吹吹牛逼,倒也拿了几个实习offer。
后来自己选了初创公司,刚开始就让偶接手一个比较大的项目,功能挺多的,商品上下架,第三方支付,商家入驻,到后来甚至还做了附近的人,聊天约炮交友,抽奖等功能,偶和另一个小伙伴负责这个项目的Android端,虽然期间遇到了许多问题,如代码混淆打包闪退,不同手机兼容适配,支付配置不正确等等,也曾怀疑自己是不是能行过,但还是一一解决了,前前后后花了快一年时间也在应用市场上架了好几版,不过用户寥寥,可能你应该想到了,产品还没运营,就夭折了。现在回头想想,产品思维确实重要。
接着也做了几款别的APP,表现也是平平 – –
可能因为表现的还行,后来老大说有个公众号的小项目,后端让偶来搞怎么样,当时自己也发现原生APP的开发趋势下降了,H5 越来越火,然后跟老大说给偶三天熟悉一下 Java 后端的,他说没问题,没想到这一决定让偶开始转向后端开发了…
其实这三天主要研究了下 JSP , Servlet ,还看了点 struts2 框架,然后也算按计划时间倒腾出来了那个小项目,也是因为这个小项目偶对后端开发产生了些许兴趣,偶觉得写逻辑接口提供给前端调用好像比较牛逼。
那段时间开始研究 SSH2 框架,使用它做了一个电商项目,接着发现很少人用 SSH2 了,然后研究了 SpringMVC 框架,JDBCTemplate,进一步学习 Mysql的索引、视图,使用 PowerDesigner 设计数据库,Nginx,Linux操作系统环境搭建,操作命令,网络协议等等。
不过之前做的很少涉及到高并发,后来比较流行SSM框架了,也使用过它来做一些分布式的项目,慢慢的了解到了连接池、消息队列、定时、缓存、搜索引擎、渲染模板引擎等等。
由于SSM配置繁琐,现在Spring Boot/Spring Cloud这样的高效框架也越来越多人开始使用了。
越往后越发现基础的东西很重要,比如多线程的同步异步,各种集合的实现原理,面向对象,反射技术等!
当然偶非常不推崇那些对刚入门想学的同学推荐一堆诸如:各种设计模式,JVM调优,负载均衡,各种数据结构和算法,链表、排序树,分布式存储,对象池,连接池,网络三次握手过程等等。
人家还没开始学,就给吓跑了 – –
所以偶建议「Java自学入门」先从基础开始,再进阶到会使用各种框架,再慢慢了解其原理,加以项目辅助练习,最后再回来补充自己的弱项例如操作系统,数据结构,算法,网络!