一、请回望暑假时的第一次作业,你对于软件工程课程的想象
1.1 对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
1.1.1 专业能力和就业竞争力
达成:
-
软工里面我主要做的是Android方面的开发,采用java语言。对于Android的基础,网络请求,网页抓取和分析都掌握的比较透彻,Android技术应该可以说是从初学者进入到了中级玩家了!
-
Android编程的同时也有注意到代码规范,有了一个比较良好的编码习惯。
不足:
-
对于就业竞争力,这块应该是属于不足的。公司里如果需要Android程序员,应该都要求掌握一些框架,如RxJava,Retrofit,Volley。这些是我们组编程的时候没有考虑到的事情,当然,这也将成为我接下来的学习目标。
-
在冲刺阶段,边学边做的同时,也不断了解到了只有书中的知识,虽然已经能够完成项目的需求,但是中间可能会有许多的坑,造成了代码的混乱、缺少易读性,如线程的调度,网络请求的处理。
1.1.2课程的期望
- 期望:开篇博客中说需要经常看日出,通宵熬夜。结果:一学期下来,真正熬夜的也就只有两三天,其他时候只要白天多花时间,其实软功还是不用经常看日出的,哈哈哈!
- 期望:开发出的软件要能够有一定的实际意义。 结果:本次软工时间中开发的软件叫做 “ Star Dust ”,可以给一些有需求的人作为记录心理倾诉的一种新的方式,还会根据不同的人推荐符合个人浏览的文章。总体来说还是和一开始的期望差不多的,达成(Ps:不然怎么会对这个项目这么起劲呢!)
- 期望:软工实践每天半小时,每周210分钟。结果:软工的冲刺阶段,特别是 Alpha 阶段的时候,有好几天连续下来都是一天都要 7~8 小时,甚至有几次一天都在做这个(估计 15 小时左右吧)。远远超过预期!当然收获也是远远超过预期的!
1.2总结这门课程的实践总结和给你带来的提升,包括以下内容:
1、统计一下,你在这门软件工程实践中,完成了多少行的代码;
总代码量为:19009 行,Github统计。
说明:除了正常的代码,我们团队内部还写了一个练手的项目 “TeamDiaryTest”,一个非常简陋的日记本。结对编程的第二次作业的贡献没有那么多。
2、软工实践的各次作业分别花了多少时间?(做一个列表
3、哪一次作业让你印象最深刻?为什么?
当然是团队作业了!理由也挺简单的,在自己对Android极度感兴趣的同时,又有来自团队的压力,让我感觉自己学习技术的进度飞快!超越课自己的预期!
软工的冲刺期间与队里的同伴也有过一些争吵,现在想想真的是没多大的必要啊,还好不算闹崩了。
同时也知道了自身的不足,下一个阶段的学习有了一定的方向!
4、累计花了多少个小时在软工实践上?平均每周花多少个小时?
这个还真没有注意,冲刺阶段的话一天估摸着有7~8小时吧,紧急的情况下有过十七八小时一天的情况。沉迷于软工,没法统计时间。
5、学习和使用的新软件;
- ProcessON(画图)
- Xmind(思维导图)
- Git (版本控制)
- 墨刀、Mockplus(原型设计)
- 滴答清单(任务管理软件)
- TeamBition(团队协作版本任务管理)
6、学习和使用的新工具;
- Github(一个代码托管平台),也尅在这搜索开源代码
- StackOverFlow
7、学习和掌握的新语言、新平台;
- java (Android方向)
- 博客
8、学习和掌握的新方法;
思维方法不知道算不算,重新拾起了以前玩耍的任务管理软件,感觉变得有条理了。对于不懂或者有疑问的一定要尽快和队伍的同伴问清楚
9、其他方面的提升。
学完软工感觉整个人都变好了。
二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
Android 开发方面的一点总结(团队)
- 对于Android开发,使用一些经典又常用的框架,虽然Android自身就有一些方法能够处理,用第三方会让代码更加简洁,干净。
如:本次StarDust项目中的一些网络请求的线程切换,都是用Android自带的Handler机制,代码混乱,修改起来也慢。如果用RxJava框架的话逻辑会更清楚,代码也比较容易恢复!
三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?对于后来人的期许。 特别地,特别地,下一届要不要中途换队员?
对开学的我: 大学或许不能让你满意,软工也是如此。投入才会有产出,Learning By Doing,Learning By Thinking.
对大一的我: 好好锻炼身体,平时早睡早起,生活乐滋滋。爆肝熬夜的时候才有身体资本,精神资本!
建议:软工实践能够带给你任何东西,只要你肯付出,坚持的去学习,在软工实践的过程中你就能很好的掌握一门技术。当然,如果只是划划水,那么软工实践也不会带给你太多的东西。
对学弟学妹:听到下一届软工必修心理平衡了好多 好好学习,天天向上,不会来问学长哈,如果有需要欢迎底部留言,私聊。(Android,java)
引用一小句栋哥说的话(记了个大概意思):只要是个智力正常的人,学个android,语言什么的都是非常轻松的,也就一两个月的事情。
当时在课上听到栋哥说这段话的时候,我正惊叹我们团队的@小钊,学Android的速度真是太快了。软工结束我都感觉没和他差了有多少(暑假和上学期自学过一点Android但是断断续续的),听完栋哥一席话,瞬间释然,其实就是自己自学的时候花的时间太散了,而且对一个小技术还死磕,一直看书,这些对于技术的提升来说是一大阻碍,但是对于长久的思维、理论方面我觉得是非常有帮助的。
下届要不要中途换队员?
我是没有被换出去的经历,但是对于团队来说换与不换其实不应该说的这么绝对。
我认为可以的话可以考虑给某些队伍一些特权,比如说,A队伍完成软件的情况比较好,alpha阶段功能都实现了一大堆了,然后他们都不想换队友,那么这时候就可以尊重他们的意愿。如果A队伍完成的情况不是很理想,那么就需要强制换人!
ps:大概就这样了……
四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
√ 萌芽阶段
√ 磨合阶段
√ 规范阶段
√ 创造阶段
盗用我们团队PM的一点东西。
五、怎样证明你学会了软件工程?
2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
有项目规划/需求/设计/实现/发布/维护,有定时的进度发布 ; 而不是: 通过临时熬夜,胡乱拼凑,大牛一人代劳,延迟交付等方式糊弄
我选择通过这点阐述。
软工前:
- 软件直接动手写
- 不想写的东西直接砍掉
- 来不及了就熬夜
- 过了时间就不弄了
软工后:
-
完整的项目流程应该是 :
虽然有些步骤看似不是很重要,但是这些“小东西”,却能让一个软件的流程更加清晰,在实现的过程中让程序员们有一定的共识 -
不能实现的功能并不是不能实现,更不能砍掉,现在砍了,以后真实客户的需求能砍吗?当然不行,所以硬着头皮,搜着谷歌,也要做出来。
-
平时就要有轻重缓急,不能把重要的功能堆到最后,甚至可以把核心功能先实现,最后再实现难点功能。
-
就算超过了时间,也要把这个软件维护下去,谁让是自己填的坑呢!
六*(选做)、阅读软件工程中关于代码质量的的经典论文,从下列文献中选择一篇或若干篇,结合自己的实际做一个阅读笔记(例如,自己写的代码质量如何,是不是一个大泥球,如何衡量自己代码的质量)?从以下参考论文中选择一篇或若干篇:
参考论文文献:
[1] Stamelos I, Angelis L, Oikonomou A, et al. Code quality analysis in open source software development[J]. Information Systems Journal, 2002, 12(1): 43-60.
[2] Boehm B W, Brown J R, Lipow M. Quantitative evaluation of software quality[C]//Proceedings of the 2nd international conference on Software engineering. IEEE Computer Society Press, 1976: 592-605
[3] Samoladas I, Stamelos I, Angelis L, et al. Open source software development should strive for even greater code maintainability[J]. Communications of the ACM, 2004, 47(10): 83-87
七、个性发挥,包括图文、照片和创意等
玩了一个小软件,用我们项目名StarDust做了一堆小动图。哈哈哈哈哈