我是计科6班的吴子昊,这是第一篇随笔,我就随便写写什么,讲一讲自己学代码的苦逼坎坷之路吧。
在大一时没怎么打好C语言基础(老师照本宣科上课无聊是一个原因,但自己没有重视也是很重要的一个部分)一直很怕写代码,觉得计算机出路这么多,不要选打代码的,但是发现真是大错特错,计算机不会打代码什么事都做不了。后来大二数据结构课开始认真学习打Anyview,勉强追了上来,能勉强打打小程序的样子。不过Java课又让人非常心塞==老师教得非常枯燥,真心建议这些代码课老师能当堂在电脑上面敲,敲代码这么实用性的问题,感觉纸上谈兵是怎么都学不好的,课后花了很多时间去补,但还是跟不上,希望今年能好好追回来,小洞不补,大洞吃苦啊。
我最喜欢的科目是数字逻辑(学得好肯定喜欢啊),因为感觉数字逻辑真是一理通百理明,我们的老师又教得好,书本很详略得当地列清楚了C语言和Verilog语言的区别,我沉迷学习了一两个晚上就完全上手了,实验课的代码也很容易就敲出来。老师之后还邀请我去他工作室搞大创,老师工作室主要是弄图像识别的,感觉相当有趣,后来也因为机缘巧合有幸参加第一届国际自主机器人大赛,小队获得了三等奖(主要还是另外两个神队友代码大佬强啊!!!!!!!)
什么时候才可以像他们一样?首先还是要克服对代码的恐惧吧。在写Verilog的程序时,我似乎也感受到了代码随心所动,实现自己想法和愿望的那种满足感。多写写,应该就会好起来!
在学软件工程这门课之前真心就超想问了:
1. 代码稳定性质量方面:我们写的这种渣代码,scanf时随便输一点奇怪数据就会崩溃的那种,怎么担当大任?或许加一些什么getchar函数可以去除掉一些无关紧要输入,但用户只要想折磨这个程序,肯定总能找到你各种想都没想到的bug。阿里腾讯那些人是怎么弄出超级稳定的支付系统的,至今还没有人发现支付宝,微信钱包有什么bug吧。
2. 代码功能性方面:大四就要出来实习,但是大一到大三写的那些小程序和真正的软件,总觉得还差非常远的距离,上课C语言教的都是一些语法,算法,数据结构。以Photoshop为例,功能和界面都是C和C++语言写出来的,这可怎么写出来?百度也找不到答案。
3. 软件公司对人员管理方面:腾讯阿里那些大公司为什么要这么多人,阿里靠着淘宝都可以吃好久老本了,顶多再维护维护就好了啊,做项目的话,哪来那么多项目呢?
4. 大项目人员合作方面:商业软件尤其是那些代码量成千万行的项目,几百个人是怎么分工呢,这个负责什么什么接口,那个负责什么什么接口吗
5. IDE的使用方面:在学C语言时,一直都用的VC++6.0,简单直观。但是用VS2017这类IDE时就让人傻眼了,怎么这么多乱七八糟的功能,VS写个helloworld都会报各种奇奇怪怪的错,搜索才发现是各种各样配置环境,链接库等等之类的问题,每次把工程文件拷到机房演示又要花很久时间来配置环境。想象一下在多人合作的时候,要确保所有人的环境都不能有丝毫版本的不同,否则可能又会有问题,为什么要弄得这么麻烦?
现在开始学软件工程,感觉真的开始从写渣程序转变到软件了,上面这些问题应该在这堂课学完后都可以解决吧,不过上面都是实际编程阶段的问题,没有提到需求分析。
之前参加机器人比赛是我第一次合作完成项目,遇到了很多意想不到的艰难,学习这门课后,发现这些问题是有名有姓的,叫做“软件危机”
简单介绍一下机器人比赛是怎么回事,我们要“驯化”机器人,机器人会在一个有很多障碍的赛道上面运行,机器人通过摄像头获取图像,识别出是什么障碍,然后做出相应的动作(比如见到沟壑执行跨过去)
在做的过程中真是屡屡碰壁,介绍一下
1. 对个人的定位不清楚:一开始分工是一个人设计机器人的动作、一个人负责图像处理,让机器人识别出障碍、一个人负责搭框架,让图像识别和执行动作能连起来。我写代码的能力不强,所以做图像识别的分工,后来发现图像处理真的是非常小头的一项工作,opencv的接口真是太强大了,几行代码就可以提取出轮廓了,导致我其实没怎么任务,时间都只是花在了学习opencv接口的使用上,后来调试机器人其实是涉及很多方面问题的,设计框架的也要花费时间来看看怎么修改动作,我们的分工就不太明确了。
2. 没有列清楚日程表每天该完成什么:比赛准备到参赛其实只有一个半月,一开始觉得这个工作不太难,前两周大部分时间都在学习python这种新语言,没怎么调试机器人,后来才发现工作远比想象要艰巨,最后来不及实现所有功能
3. 设计的框架对我们过于复杂:一开始老师给我们设计了一个非常健全但是又很复杂的类图,对于我们来说还是太难了,机器人的计算机能也跟不上,比赛也不需要这么复杂的类图。导致花了很多额外的时间
总的来说,最后几天我们疯狂与时间赛跑,终于追回了以前的时间债,还获得了三等奖,已经相当不容易。
软件工程课其实我觉得真的像是一门哲学课,涉及很多人事管理,时间管理方面,真的一时半会是啃不明白的,什么瀑布模型之类的像鬼画符一样,或许也真是要多做一点项目,自然就会融会贯通吧。