软工实践总结——未来攻城狮的成长
一、回望
原谅我,好像这次的博客话有点多/(ㄒoㄒ)/~~,想到什么就写什么了。希望通过这种记录的方式,让我在以后还能想起软工实践这门课。
时间过得好快,想想什么时候才开始写第一篇博客,现在一转眼一学期都快结束了,折磨了我们这么久的软工实践终于结束了,现在想想项目冲刺的那些日子我们一起熬过的夜,一起被bug折磨,还有解决bug之后的那种欣喜,心里有种说不出的感觉,尽管软工实践虐我千百遍,但是现在的我真的是待它如初恋,想想这么快就结束了还是有些不舍。
刚开始
还记得上学期末我们选课的时候,从其他同学那里听闻张栋老师的课很不错,所以我们班就好多人投了好多分给他,甚至为了选上他的课放弃了其他的课,当然,我也跟风报了他的课。开学后上了张栋老师理论课的第一节课,老师给我的感觉还是很好的,为人很和善,一看就知道是很好“说话”的老师,看来选中老师了,期末不用担心了。老师课上还特别提醒了我们:有选我的软工实践这门课的同学,我劝你们还是考虑清楚,我的实践课可能要求会比较多,也会比较难,不是那么好过,但是如果想真正学到东西,最好还是报一下。好多同学听到这都被吓到了,大家不过是想混个简单一点的2个学分,没必要去冒险,万一挂了怎么办,所以好几个同学回去之后就把实践课给退了。自己也开始有些动摇了,后来看到班上好几个大神也没退,自己也没退了,毕竟有大神在,不怕,可以抱大腿,就这样,我开始了我的软工实践之路。
学期展望
到了第二节课,老师就开始跟我们说软工实践的要求了,老师先是要我们每个人注册一个博客账号,以后每次的作业都需要把写一篇心得或者总结,当时很多人就开始抱怨了,当然我也不例外,大家都想作业写了就写了,为什么还要写博客,这不是浪费时间吗?!有那么多时间写博客,还不如多花点时间去敲代码。紧着着老师还提出了我们要做个人作业、结对编程作业、还有小组项目作业,想到这里我的内心几乎是崩溃的,这是我大学见过的要求最多的选修实践课!心里那个后悔啊!但是没办法,已经不能退选了,只好认命了。老师给的第一次的实践作业要求我们用博客发布一篇随笔,内容要写出对软件工程的实践项目的自我目标(要求包含对实践项目完成后学习到的能力的预期,对项目课程的期望、对项目的愿景规划)。而我给出的答复是:
其实,那时候的自己并不是很在意这门课,也就随便给了这个答复,现在想想真的有点后悔,没有给自己制定更加详细更加明确的目标,虽然最终通过了这门课的实践,自己也学到了很多东西,应该说自己也心满意足了。
结对编程
跳过了个人作业,老师让我们直接开始了结对编程了,很不幸,在老早班上的同学都选好结对队员了,刚好我们班人数是奇数,所以没办法我只好找其他班的一起组队,最后幸运的是我居然找到了个大神来跟我结对。老师要我们做提供给教师用的报课系统,我们做的是Web端的,自己压根没有Web开发的基础,所以做的都是简单的,帮忙写需求分析,设计原型,然后学着去写界面,其他大部分代码以及功能的实现都是我的结对队友写的。结对编程大部分都是自己在依靠队友,自己所做的都是简单的,学到的东西也不是很多,可能是因为那时候的自己还没有觉悟吧。。
个人作业
原本以为个人作业被跳过之后可以少一事,可是没想到结对编程刚结束不久,老师又来了个个人作业————微软必应词典客户端的案例分析。刚开始根本不知道什么是案例分析,百度之后才知道其实就是去用一款软件,也就是做为测试人员,来用一下这个软件的各个功能,看这个软件有什么不完善的地方或者有什么bug,然后给出相应的评价以及建议(当然这是个人的见解),虽然说这次作业没有很多技术含量,但是也多少收获到了一些东西,至少我知道了什么是案例分析了,也懂得怎么去分析了。
团队作业
这学期的软工实践,我觉得我最想说的也是让我最收益还是团队作业,开发自己的项目,做出自己的APP————报课系统,这也是我开始觉悟的时候。
原本在开学的时候我们就已经打算组队了,班上有两个大神,我们那时候老早就报名要跟他们一组了,可是到了真正组队的时候我发现自己被抛弃了,两个大神跟其他两个人组队了,而剩下我跟我两个舍友还有一个隔壁舍友都是没有android基础的渣渣,就这样我们组队了,并且给我们小组起了一个响亮的队名————The Expendables,这是敢死队的意思,因为我们四个没半点android基础的居然凑到一起了,这下有的玩了。起初一开始我们小组抱着能做多少就多少,实在做不了就算了这种心态,因为想想这门实践选修,顶多也就两个学分,没必要为了它花那么多时间吧,万一其他科挂了不是很不值。刚开始都没基础的我们,大部分时间都在学新的东西,而且经常因为一个小问题就花了好长的时间去解决去百度找资料找解决办法,可能也正是因为4个人都没基础,没有经验,大家都觉得自己的想法是对的,这就导致了队友之间的意见经常不统一,各执己见,项目开发进度很慢。
到了【alpha版本】的时候,老师要求我们进行项目冲刺,每天小组要进行站立时会议,对昨天的进度进行汇报总结并分配新的任务以及要求,老师给的时间是10天(好像是,我也记不清了),时间到了要进行验收,要完成项目的基本功能,这对于刚起步的我们4个人来说,此时此刻的内心几乎是崩溃的,这不是要我们4个人在10天内从android入门到精通吗?!!就这样我们开始了冲刺,每天除去上课的时间,其他的时间都在写代码了,可是还是感觉时间不够用,我们4个人经常都是熬夜到很晚才上床睡觉,但是我们渐渐习惯了这种感觉,当我们第一个新功能完成的时候,我们心里的那种成就感简直无法言表,我们小组成员也开始更加有动力了,享受这那种半夜解决bug、完成新功能的喜悦,偶尔忍不住兴奋地喊了出来,第二天难免遭到隔壁舍友的投诉,但是我们的内心还是很开心的。也正是在这次冲刺的时候,我发现了写博客的意义还有它的重要性,在项目开发的时候,会遇到各种问题,然后就去百度解决方法,有时候很奇怪,不知道怎么搞得就解决了,也没有做记录然后下次遇到同样的问题还要被bug折磨好久,这时候写博客就发挥作用了,我们小组在项目冲刺博客里面都会记录我们遇到的一些问题并且附加解决办法,这样我们下次遇到的时候就可以很快解决这种问题了。通过博客记录经验跟教训不仅可以让我们收获到解决办法,也可以给别人作为参考,帮助遇到相同问题的“程序员”们,重要的一点还可以提高我们写文章的能力,表达能力等等,张栋老师说过:一名优秀的程序员,光会敲代码是没用的,还要会写文档,要会把自己的东西用文字写出来让别人看懂。虽然每天都没有在浪费时间,但是我们还是感觉项目进度来不及,服务器也没来得及搭建,为了实现功能,只好在android studio的本地数据库SQLite建数据库还有表,通过对本地数据库的增删改查来实现我们项目软件的功能。【alpha版本】验收的前一个晚上,为了第二天我们能够顺利地进行演示,把我们做的功能演示出来,我们小组4个人集中到一个宿舍,4个人一起敲代码,一直到了凌晨5点半,没错,是凌晨5点半,这是我大学以来最晚睡的一个晚上。第二天演示还是可以的,把主要的功能都演示出来了,但是我们因为我们没有搭服务器,没办法进行多个用户同时使用,数据无法同步。老师要求我们在【beta版本】的时候要搭建起自己的服务器。
到了【beta版本】的时候,我们主要的任务是先开始搭建服务器,小组成员重新进行分配,两个负责搭建服务器,两个负责安卓端开发。我们组员在【alpha版本】结束之后休息的那阵子就开始搭建服务器了,终于过了好几天,把服务器搭建成功了,并且而已和客户端进行交互,我现在还记得,我的队友因为这个开心了好久,一个晚上在我们宿舍走来走去,想着我们接下去的规划,幻想着我们小组说不定真的可以做出来。服务器搭建好了之后,我们小组的进度就开始加快了,可能也是从【alpha版本】冲刺那里收获到的经验,我们小组的默契也越来越高,而且小组成员也互相帮助,每次有队员遇到一个难以解决的问题,我们其他成员都会过来帮他,我很享受那种4个人围着一台电脑去找bug的那种过程,眼看着我们一点点地在成长、在进步。我一直认为,一个好的团队,是团队要有足够高的凝聚力,互相帮助,谁也离不开谁,缺一不可,到了冲刺后期,我们小组真的已经成为一个很团结的整体了。眼看着我们项目一天天完善,功能一天天实现,我们小组信心倍增,终于在冲刺的前两天完成主要的功能,项目也进入了最后的阶段,考虑到队友还有考试,所以我们决定项目冲刺就此结束。【beta版本】验收前一天晚上,我们怕演示的时候会出问题,所以晚上就4个人一起把我们项目的功能重新测试一遍,结果刚开始测试第一个功能我们就出现问题了,教师信息批量导入的时候总会出现信息乱码或者信息缺少的情况,最终我们发现是我们导入的表格格式有问题,但是那时候已经深夜了,把其他的功能也测试一遍之后已经1点多了。当我们在庆幸今天可以早点睡觉的时候,我发现我失眠了,前几天都是3点多才躺下的,突然太早睡根本睡不着,躺在床上开始想第二天要怎么演示(我是我们小组演示的代表),生怕会出什么差错,辜负了全组的期望,我一遍遍回顾演示流程,一遍遍默念着自己的总结~~第二天,我们小组早早就到教室准备验收了,果然事不尽人意,还是出问题了,要演示的电脑不能访问网络,这就等于不能跟服务器端交互,也就等于我们今天什么都演示不了,心里开始着急了,明明昨天晚上测试的时候用手机热点访问网络还是可以的,今天就出问题了。队友弄了好一会儿,后来意外的可以了,心里那个高兴了,可能这就是大家所说的有付出就必定有收获吧。就这样,我开始了我们小组的演示,虽然自己很紧张,但很幸运事,我们演示的整个流程都是很顺利的,没有出现什么问题,而且我也在演示之后对我们小组作出了总结,在结束演示的那一刻,我的内心感觉到了前所未有的成就感还有喜悦之情。在我看来,我们小组已经成功了,4个没有基础的能做到这种地步,我已经很心满意足了。
软工实践也在各方面给我带来了很大的提升
1、学习和使用的新软件:
(1)PowerDesigner
这是一款用来数据库设计的软件,刚开始用PowerDesigner并不感到很陌生,里面与SQLServer建立数据库差不多,因为有了之前数据库这门课的基础,用起来就很快上手了。在进行数据库设计的时候可以直接添加新的键值,然后直接插入数据,而且还可以自动生成SQL数据库语言,还是很方便的。这个不但可以让人直观的理解模型,而且可以充分的利用数据库技术,优化数据库的设计。
(2)Rational Rose
这款软件是在周六上实践课学长教我们用的而一款软件,可以用来设计用例图,通过了一些简单的练习,我们很快就可以自己设计用例图了。在设计用例图的时候只要选择自己想要的图形,然后在图形上面双击便可以更改它的一些属性值还有各个用例之间的关系等等。这也是我们今后项目开发所必不可少的一个很有用的软件,但是我学到的可能只是一小部分,而且在项目开发过程中貌似没有用到。
(3)Axure
这是用来原型开发的软件,我还是第一次感觉到居然还有这么好用的软件,可以在我们软件做出来之前把我们想要做的样子给设计出来,我觉得这在分析客户需求的时候起到了很大的作用,我们可以根据客户的需求描述先设计原型,然后再跟客户协商最终需求,这样可以避免我们做出来的软件不是客户想要的,也算是一大利器吧。我还记得在结对编程的时候,我是用这软件设计我们小组的原型的,感觉还是很好用的,可以直接拖拉自己想要的控件到手机模型上,设计出自己想要的原型。
(4)墨刀
这也是原型开发的软件,可以下载软件来进行原型开发,它还支持直接在网站上进行原型开发https://modao.cc/signin,感觉用这个软件就像在做ppt一样,操作很简单,还可以将设计的原型的每个界面通过跳转动作让整个原型“动”起来,就感觉跟真实的软件一样,它还可以自动生成原型的链接,分享链接,别人也可以下载这个原型来看。因为在小组项目的时候原型是由我设计的,所以我感触还是比较深刻的,应该说现在设计原型已经不是问题了,但是美工方面还有待提高。
(5)SQLiteStudio
这是android studio本地数据库SQLite的管理软件,这是在我们【alpha版本】的时候用到的,因为我们那时候没有搭建服务器,所以软件的所有数据以及对数据的增删改查都是在本地数据库SQLite实现的,但是android studio不支持直接查看本地数据库,所以需要将本地数据库文件导出,然后通过SQLiteStudio导入就可以查看了,当然它跟其他数据库设计软件一样,都可以对数据库还有数据库表进行键值添加以及数据插入,还有自动生成SQL语言。
(6)CuteMarkEd
这款软件跟markdown编辑器差不多。博客园写博客的markdown编辑器是不支持预览功能的,要等到你写好了保存了才能进行查看,但是它支持插入图片;而CuteMarkEd的编辑界面分成两部分,左边是在编辑的内容,右边是预览的效果。但是这软件不支持插入图片,所以我写博客的时候都是这款软件跟博客园的markdown编辑器并用。
(7)海马玩
这是一款虚拟机软件,之所以会用它是因为android studio的虚拟机运行起来太慢了而且太卡,所以同学推荐用这款软件,海马玩运行起来确实很快,就跟真的手机那么快,进行android开发的时候测试也很快。但是它有一个很严重的问题,就是有时候android studio运行的时候不能检测到它,也就没办法进行运行了,必须重新启动一次才能检测到,这在我进行【alpha版本】演示的时候也坑了我一把。所以后来我果断卸载了,但是这软件还是很不错的,无聊的时候还可以用来消遣,就跟玩手机一样,里面还有好多游戏,哈哈。
2、学习和使用的新工具:
(1)github
github也是让我很吃惊的软件,想想以前的自己真的是孤陋寡闻啊。原本以为我们小组在进行项目开发的时候需要有个人来做汇总的工作,能够把我们小组成员各自写的代码整合到一起,然后让各部分功能都能够实现。而后来学了github才知道原来这神器可以帮我们自动合并代码,还可以对我们的项目代码进行版本管理,虽然自己只学了一小部分,大部分都是组长在管理项目,所以学到的不是很多,今后有时间一定要好好把它学会学精。我记得张栋老师也强调过学会github进行代码管理也是很重要的,听老师的,没错。
(2)markdown
博客园用来编写博客编辑器,感觉不是很好用,就只有文字编辑功能、插入图片,就这两个功能,相比之下,我还是习惯用CuteMarkEd编辑器。
3、学习和掌握的新语言、新平台:
(1)新语言java
早在很早就听过了java这门语言,但是一直没有用上,因为自己之前学到的课程里面都没涉及到这门语言,课后当然对代码没兴趣的我更是不会去学了。但是因为我们小组在进行项目开发的时候需要用到它,所以还是认真的去学了,刚开始感觉好多知识都跟C、C++差不多,可能语言都是互通的吧,学起来也不会很困难,我大部分是跟着网上的教程学的,可以边学边动手实践,加深印象。但是学到后面发现项目进度有点慢,所以就边做项目,遇到要用的才去学,学的也就不是很全面,我想着也是我今后需要努力的一个方面吧。
(2)新平台android studio
大一大二的时候经常看到隔壁舍友一个大神就开始在android studio开发自己的软件了,那时候感觉好厉害哈,原来新软件就是用这个平台来开发出来的哈,自己也渐渐对此产生了兴趣。直到做项目开发的时候,自己也确实很感兴趣,看着自己做出来的东西很有成就感,大学以来第一次对敲代码有这么“浓厚”的兴趣。我觉得android studio很好的一地方是,它可以自动补全代码还有函数,不用什么都自己敲,这样自己也不用记很多函数啊、方法啊什么的,相比之前写的C、C++代码有意思多了。在小组项目开发中我主要的角色还是界面设计跟布局,所以在这个平台上进行界面设计以及布局应该说还是有些经验的,我想今后学好美工,做好界面设计这一块。
4、学习和掌握的新方法:
新方法,我对这个概念不是很理解,而且自己学到的哪些算方法也不是很清楚,总结下了一下发现好像只有下面这四点/(ㄒoㄒ)/~~
(1)看日志找错误
在项目开发中经常会遇到各种问题,如果在运行不起来就说明哪里写错了,一开始自己并不会看日志,而是习惯依赖别人帮忙来帮我找出问题,但是后来发现遇到同样的问题自己还是不懂,所以就主动向别人询问,怎么去看日志,看哪些日志才是有用的,以及如何找到错误的地方,我觉得这应该也算一项必不可少的小技能吧。
(2)用输出进行测试
有时候项目开发过程中,发现项目可以运行,但是得不到自己想要的结果,有时候可能是数据没处理好、可能是逻辑没写好。这时候我觉得可以在得不到结果的那个地方通过日志Log.i或者Toast输出的方式将相关的数据输出来看一下,看哪里错了,然后再去修改,知道得到自己想要的结果为止,这样可以很有效的避免毫无头绪的瞎搞、浪费时间。
(3)用gson传送数据
在【beta版本】冲刺的时候,因为要实现客户端与服务器的交互。我们组员做服务器端的教我们可以用gson来进行数据传送,先将要发送给服务器的数据用gson进行打包,然后向服务器发起访问,服务器收到请求后,同样用gson方式将数据解析,然后返回客户端这边需要的数据,这样就实现了客户端跟服务器的交互。
二、人月神话——项目实践中的经验总结
1、做事情要考虑全面
刚开始设计界面的时候,采用的都是相对布局,因为可以直接拖动自己想要的控件到软件里,省的写代码,然后用的是自己的手机做测试,感觉运行没问题就继续做下去了,所以就认为自己这样的方法是对的,而且也很方便。知道有一次,我手机没电了,找我队友借手机来测试,发现界面全乱了,因为我队友的手机是小屏幕的,我的手机是大屏幕的,设计好的而界面到他手机全都挤到一起。百度之后才知道没有考虑到手机屏幕自适应的问题,也就是说我们之前做的都白费了,都不能用,一切都得重头开始做。百度之后,找到了解决办法,采用线性布局,用线性布局的android:layout_weight属性可以调节屏幕上控件的比例,这样就可以达到手机屏幕自适应的效果。也怪自己考虑问题不够全面,导致好多界面都要重新做,拖小组后腿。
线性布局
2、学会独自面对困难
敲代码养成的坏习惯,习惯一遇到不懂或者有错的地反就像别人求救,因为觉得大神懂得比较多,直接让他们帮忙改一下我就省了好多时间了。但是这样下来,到最后该不懂的自己还是不懂,而且有时候没人帮自己的时候就觉得好无助。所以后面渐渐开始养成习惯,学着自己去百度解决办法,尝试去解决,这个答案不能解决,换下一个,直到解决了为止,后来我发现当你自己解决了问题之后你会感觉好有成就感,而且自己也知道了怎么去面对这样的困难、以及解决的办法。
3、持之以恒难
项目开发,遇到问题在所难免,这也很容易导致我们失去信心、失去动力,甚至自暴自弃放弃项目。坚持不管是对于项目开发,还是作为一个人的品质,我觉得我们都相当重要。如果一个人遇到一点困难就退缩,一遇到困难就放弃,那谈何立足社会。在项目开发中我们会遇到各种各样奇奇怪怪的bug,有时候你可能需要花好几个小时,甚至好几天的时间去解决它,这也是项目开发过程中最让人难过的时候,但是这时候我们千万不能放弃,因为如果连这点困难都不能坚持下来,那还做什么项目。我相信,只要坚持下去,不管是什么问题,什么困难,终会被我们解决的。持之以恒,滴水穿石!
4、发挥团队的作用
作为一个团队的一员,我觉得最重要的一点是要相信自己的团队,如果一开始就对自己的团队失去信心,对自己失去信心,那么这个团队还能继续下去吗?!团队队员的合理分工也是很重要的,好的分工可以提高团队项目进度,而差的分工只会使得项目事半功倍。就像我们在项目开发的时候分工不够详细明确,导致两名队友写了相同的一个类,但是类里面的函数参数顺序不一样,最后使得我们项目好多需要用到数据的地方都出错了,显示的信息完全对不上,浪费了好多时间才总算解决了。我觉得一个团队有一个有项目开发经验的队友是极其重要的,可以避免一开始毫无头绪的瞎搞,也可以对团队项目提供很好的经验跟建议,但是很重要的一点是,有大神在,并不代表说你不用干活了,不能什么都依赖队友,如果什么都依赖队友,那么不仅自己学不到什么东西,队友一个人单干也会觉得很累,甚至会放弃团队。团队的作用还是很大的,一个团队肯定比一个人来的强,当然我们要正确发挥团队的作用,这样我们才能更高效率地做出更好的项目。
三、对下一届实践的建议
1、经验传授
我觉得老师可以在实践课的时候多讲一些项目开发的真实案例,或者可以讲一些项目架构设计、框架什么的,也可以跟我们多讲一些老师自己的经验,让刚开始的我们可以对项目开发有一定的了解和认识再开始实战,这样刚开始动手实践的时候就不至于没有头绪。我还记得我们小组项目开始的时候4个人都不知所措,不知道从哪里开始,一开始瞎搞了好久最后才摸清头绪,也就导致了我们小组项目进度比较慢。
2、时间稍微松一点
建议老师在项目计划的时候,时间可以不用安排的那么紧凑,因为大部分学生都是没有开发经验跟基础的,所以最好一开始给学生一些时间让他们自己去学一些项目开发需要用到的知识。但是不用安排的很松,不然会导致有些同学松懈下来,我决定而老师这种“逼”着学生的方法对我们自身来说还是很有帮助的,只有别人“逼”你了,你才抓紧去学,才会多花时间去学。
3、项目开发保持连续
建议老师在项目的时间安排上最好是连续的,老师在这次【alpha版本】结束的时候停了两周左右的时间,感觉这样不是很好,因为好多组因为这样就停下来了,但是实际上项目还是很多功能没完善的,建议可以等都结束了再休息。我们小组也因为【alpha版本】结束休息了好几天,等我们要准备开始【beta版本】的时候,我们小组成员都发现我们已经懵了,感觉有点不值所错,而且动力也不如之前了,所以还要花时间去重新找回那种状态,感觉这样也是有些浪费时间。
四、对未来的你的期许
1、不断学习
经过了软工实践,我更加发现自己所掌握的技能真是少之又少,学习到的知识也是少的可怜,所以我想在剩下的一年多里充分利用时间,把作为一名优秀攻城狮所必备的技能学到手,不说学到精,但是至少要掌握它。
(1)github
github作为自己的首要任务,一定要把它学好,在今后项目开发中充分利用它的优势,用它来进行代码管理。
(2)写博客
正如我前面所说到的,写博客不仅可以提高写文档的能力,还可以通过这种记录的方式来将我们在学习或者项目开发过程中的经验、教训等等记录在里面,用来作为自己的自己,还可以给别人提供参考。
(3)java
通过了项目开发,我感觉自己对app开发还是很感兴趣的,所以学好java这门语言肯定是必要的,希望通过接下来的学习可以把java学好学精,并且在项目开发的时候很好地实践。
(4)android界面设计
在结对编程还有项目开发的时候,我一直充当着android界面设计的角色,而界面也是一款软件很重要的部分,好的界面可以给用户更好的体验,也是因为个人的兴趣,所以我想继续学习下去。所以我觉得还有必要去学一下photoshop,要向界面好看、给人更好的感受,那就必须学好美工、学会ps这些。
当然要学的东西还有很多,这只是我个人当前的计划。
2、积累项目开发经验
我觉得我们小组进行项目开发的过程之所以会觉得很累很痛苦,这主要是因为我们没有项目开发经验导致的。打算寒假的时候好好学习知识,在下学期组队去做项目、去参加比赛,可以的话我希望我的队友还是那3个。我想通过不断地实践去积累自己的项目开发经验,为今后自己的就业奠定基础,我觉得只有学得多了,学得好了,以后工作的时候才能早点结束自己的任务,这样就可以早点睡觉了,熬夜真的太痛苦了/(ㄒoㄒ)/~~
五、总结
老师课上曾说过,只要你肯花时间,肯学,那么软工实践将会是你最受益的一门课。相比之前学过的课程,真的,感觉好多学到的东西都忘了,而且都是在应付考试,感觉实用性并不强,而软件工程实践却不一样,它给了我不一样的感受,让我真正学到了有用的东西,也让我收获到了经验、友情、还有一个团队!我真的觉得自己很幸运,可以遇到这么好的队友,谢谢他们跟我一同度过了难关,一同成长、一同进步。当然我觉得最辛苦的并不是我们学生,而是老师还有助教,他们才是最辛苦的,谢谢你们为我们付出的一切。
多年后,如果我有幸成为一名优秀的攻城狮,我肯定会跟别人说,我是张栋老师的教出来的学生!