大家好,这是我的第一篇博客,写的不好请多见谅。
博主现在大二,川大软件工程本科在读,技术的内容就不献丑了,来谈谈我大一到大二的学习轨迹。
从知道要进入软件工程的一刻起,就在做准备
软件工程是我的第一志愿,然后是计算机,讲道理这个学科在我的学校不是一门特别牛叉的专业,跟隔壁电子科大差距还是有的,但是我的分数貌似电子科大没希望 :) 但是川大是所综合高校,我个人比较看重全面发展,所以最终报了川大软院。报了之后不用等就知道肯定稳(但是后来我才知道那一年提档线仅仅比我的分数低了几分,吓我一身冷汗)。
由于我本来就对编程很感兴趣,暑假我就开始自学C语言,从最基本的变量和结构语句开始学起,看的是我姐姐的大一C语言教材,清华出版社的
对 就是这本,挺不好找的
但是暑假我还要做我们班的毕业视频,大一开学之前我只看到了数组,还没有看到最难的指针的知识。
当年的七夕我闲着没事干,想用C写一个程序画一颗心,当时也不会啥,就会基础的for语句,就强行画出来,最后慢慢调也还是调出来了,还是挺开心的。
嗯 就是长这样
大一除了能够拿程序算算数学题,还真干不了什么
我以为在暑假自学了C语言的我,在大一面对C语言程序设计的时候,能够游刃有余,但是我错了。
当时教我们的老师很坑爹,拿十分钟讲完语法,然后当即就要求我们写一些程序,比如杨辉三角,万年历,等等,当时我们还身处IDE各种奇奇怪怪的报错中不可自拔中,别说写出来程序,还能活着出教室都很开心了。助教各种忙不过来,老师也不停地给同学们答疑。每一节C语言课下课之后我都是因为想问题想到耳朵根发红,像极了高三埋头刷完理综的时候的样子。当然还有课后作业,当时光写一个猜数字游戏作业就可以折腾我一个星期。
当时有一个学长跟我说:“你们现在觉得用C写一个程序很难,觉得无从下手,那是因为你们只学了C语言的语法,根本不懂算法”。我觉得也挺有道理,这就好比你学习英语,学了26个字母就想造句一样,当你学习了字母,再学习单词,然后再学习语法,然后你就会觉得造句是信手拈来的事。
在课余时间我也做了不少练习
做程序员没有一定的代码量是不行的,辅导员在开学的时候还跟我们说一个程序员四年应该有多少多少万行代码才算合格,确实是有道理的。
但是这样的程序只是用来解决奇奇怪怪的数学问题的,跟我想象中的应用程序还差的很远。
做项目,从入门到找不到门
做编程最终还是要做项目的,没人会找一个程序员专门来写#include
就在C语言期末考的时候,老师突然告诉我们这次的考试是三个项目随机抽一个,商品管理系统,学生管理系统,航班管理系统,我抽到了商品管理系统,我懵了,以前老师都是让我们一次写一个函数,这下一上来就是一个项目,完全不知道该怎么组织,框架不知道怎么看,那次考试可想而知,完全GG。(不是我上课不认真,我前三次小测都95+,据说整个年级二百多号人没一个能写出来,后来下一届就取消了这种题型)
大一下学期学习JAVA,显然使用面向对象的语言来做项目才是最适合的,如果C的基础打的牢,那么Java就主要学习对象的概念以及其衍生的继承、多态还有设计模式就可以了,从C这种面向过程的语言过渡到Java这种面向对象的语言,一开始是有点难度的。
我当时的解决方法是多看网上的博客,一般博客会将一个或多个知识点单独写成+文章,而且会融入作者自身的理解和体会,相比课本或课件的内容会更加容易理解,而且我推荐一定要看多几篇,不要看了一篇博客觉得了解的差不多了就可以,看多几篇既是加深印象,也是取其精华去其糟粕的过程。
Java的学习,学校推荐的是Thinking in Java英文原版的,我嫌英文看的太麻烦,所以没有用学校的教材,自己去旧书店买了一本,但是我觉得我看的那本也不是很好,所以在这里不推荐了,我舍友他自己也另外看了马士兵的视频教程,他说觉得不错。
Java学的差不多后,老师开始让我们做课程设计,做一个图书馆管理系统,我们小组决定做移动端的,因为老师不讲Android开发,所以我们自学,Android的学习资源有很多,我当时是看慕课网的Android攻城狮的第一门课 入门的,基础掌握之后,由于我们的时间不多,剩下的我是用到的时候再去学的,比如AutoCompleteTextView,启动页等等,在这期间也学会了看Eclipse的log日志信息,因为每次报错都不一样,也不想每次都去问助教,所以不得不自己去学。另外墙裂告诫大家安卓开发一定要掌握用Log调试以及会看日志信息,这真的非常重要!使用System.out.print()是很低端的技术,下意识用Log.d(String TAG,String Msg)才是王道啊。
当时我们做出来的第一个安卓项目,长这样
做完第一个安卓项目之后,感觉对安卓项目算是入门了,从前感觉安卓应用好复杂,自己亲自做了以后才知道其实也不难入手。
当掌握了面向对象编程之后,能做的事情渐渐多了起来,大一下学期学校安排了小学期课程,所谓小学期,就是请企业的教师过来,把十几个人安排在一个教室,分组做项目,整整十几天就专心做项目,做完就回家。但是当时说的是用C语言做,但是一听要界面就懵了,这C哪怕是一个确认窗口都要一百多行代码,所以后来大家都做了C++的。。。。。(当然,很多人都是网上找代码)。其实小学期锻炼的不是大家的编程能力,是体验和熟悉软件工程模式的,像我们的老师当时给我们的是Scrum敏捷开发,每天的十分钟早会,scrum master、QA和Tester的角色分工,相当典型,这还是我在大二软工导论中才知道的。
从被迫做项目到自己想做项目
到了大二之后接触了数据结构,软工导论,我更加认真去学,上早课瞌睡来了就喝茶,数据结构的每个课程设计都做的相当仔细,当然课下也花了许多时间在上面。数据结构我们主要学的三大数据结构:线性表、树和图,以及一些排序算法,索引什么的,我感觉课上主要学理论,课下的课设拿来长知识以及经验。
课程设计和小学期、考试都属于被迫做的项目,因为是课程要求去做的,但是到了大二,随着经验的丰富,渐渐地有人来找我做项目,或者找我做比赛,我自己也根据兴趣自己做了个项目。
我们有大创项目,为期一年,我们组了个队,做了一年,也还算好,虽然预期的目标没有实现出来,因为说是有一年时间,但是因为各种各样的原因最后一个月了才开始各种赶工。。。说出来都是泪。
参加过一个比赛,拿了国家二等奖,还有一笔不小的奖金。讲真,做比赛是最能增长经验的,但也是最辛苦的,持续的时间久,压力也大,但是回报丰厚,不仅包括物质荣誉的,也包括大量的经验。
寒假回来后自己琢磨着做一个小安卓游戏,然后就不假思索的开始干了,边学边做,学会了许多内存优化、游戏引擎、线程这种课上根本就没讲过的东西,大学所说的自学大概就是像这样通过自己探索去学会教材和老师没有告诉你的东西吧。
这就是我寒假做的安卓小游戏,只是优化做的不太好,在一些手机会报OOM
附上GitHub:GhostLWB的GitHub
最后我想说,学软件真是一件要求兴趣的事情,特别是大学生,一周拿60个小时打代码的人我见过,天天翘课打游戏的人我也见过,忙于社团和爱好而收到学业预警的人我也见过,成为大牛或者小白,都在你的一念之间。另外,很感谢我的学霸舍友,没有你们上进的学习氛围我也不可能这么拼,这么多学霸同时安排到一个寝室,如果这真是系统随机分配宿舍的话,那我只能说我真的运气爆表了吧 233