软件工程第1次作业
第一部分:结缘计算机
1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?
最开始选择计算机纯粹是个巧合。父亲是数学老师,而高考报名自主招生的时候恰好叛逆了那么一回,误打误撞进入了武大的计算机系。与博客F[1]和博客G[2]中的几位非科班出生的前辈不一样,我有幸在大学里接触了这个时代最前沿的技术产业—IT产业。F博客中的前辈读《李开复自传》看到这样一个观点:
一个人千万不能年纪不大,就落后了时代,一定要学会用这个时代的先进技术,那就是计算机互联网技术。
相比于他们来说,计算机专业出生的我已经赢在了起跑线上。本科四年武大给我的教育虽然跟前辈的北大青鸟比起来专业性略逊一筹,但是让我从最基本的地方了解计算机。本科开设的课程像操作系统、嵌入式开发、计算机网络、计算机组成原理等,虽然以后在确定下来的岗位上很难用得上,但是毫无疑问,这些知识让我更加全面地了解这个系统,在碰到问题的时候能够用更宽广的思维去思考。
2.计算机是你喜欢的领域吗?是你擅长的领域吗?
学了这么多年计算机,我一直觉得计算机很对我的胃口。计算机中很多内容诸如算法、数据存储、数据挖掘等等内容不断更新,既通俗又充满挑战。每一次跑完一个实验或者完成一个项目都有无限成就感,这也是为什么这么多人会喜欢这个专业的一个重要原因。对我本人来说,我比较擅长算法以及机器学习技术,也是我的兴趣所在。
3.你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?
从科班出生的各个大牛口中我明白了计算机这个行业最重要的还是钻研进去的劲。我很喜欢这个专业,不仅仅是口头的喜欢。这个专业首先是一个新兴产业,它并没有多少前人的积累或者既定的规则,有太多知识算法等待我们去发掘。去年陈天奇大神提出的xgboost算法,一经开源马上受到广泛关注和使用,遂在各大竞赛中以优异的成绩脱颖而出,成为了boosting算法发展的一个里程碑。在这个行业中,发明一个算法,完成一个项目,写出一个程序,无论是什么方式,都能够看到他们对这个社会的进步作出的改变。也正是如此,这些改变所带来的成就感,以及对未来无限可能的向往,成为了我对计算机专业的牵绊。
第二部分:在计算机系里学习
1.你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。
对于我自己来说,在武大的学习并没有多少黑点,但是在自己身上还是有很多需要反省的地方。首先做过的项目并不多,作为一个计算机学院的学生,没有多少动手实践的经历是一件非常不可思议的事情。理想的大学教育应该是老师能够从实际应用出发,带着我们从实际的项目中理解知识。看过外国很多著名大学的公开课,几乎所有的老师都是通过一个实际的例子让学生跟着动手去实践,从中领略知识的真谛,相比之下,中国大学很多老师只注重于把课本上的知识教给学生,考试考好拿到高分,我认为这是亟待改善的一点。
2.迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。
迄今为止,不敢说写过多少代码,只能说是零零散散写过一些项目,代码量大概3万。本科时候做的最复杂一个项目是写自强app上武汉大学的研修室预定系统,当时刚刚接触iOS,又是第一次接触移动开发,大量的东西从头开始学。项目中跟UI设计以及产品经理初次打交道,认识到了一个项目不只是有程序员这么简单。从最开始设计到不断迭代修改,一个很小的功能差不多花了一个暑假的时间,不是很大的项目但是印象很深。
3.科班出身和北大青鸟有什么区别?
引用博客D[3]中大牛的一段话。
多年以后,我才发现企业要的应届毕业生就是一张白纸,这些白纸吸墨能力的高低决定你能否找到好的工作,而吸墨能力高则主要是基本功扎实、自学能力强的体现,并非我一直以为的丰富的“实习经验”。
4.速成的培训班和打基础的大学教育还有mooc之间有区别吗?
还是跟上一个问题一样的回答,大学的基础教育就像高中初中一样,并不是说以后这个物理定理或者化学方程式能够真的起什么作用,一方面他向我们阐释计算机这个物件的种种原理和逻辑关系,另一方面也告诉我们该怎么去学习,这些内容都是一个俗称培训班不能给予的。
5.学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?
对,我当时就有一模一样的疑问。大三加入了实验室开始看机器学习让我更早地认识到自己的天真,即使当初这么认真学的概率论以及线性代数,用到机器学习这些逻辑回归,梯度下降,SVM等就经常百思不得其解,一个式子卡了很久也不知道怎么推出来的。更别说现在火热的神经网络,深度学习,xgboost,都需要大量的数学知识沉淀才能够融汇贯通的算法。这是我作为一个计算机专业的学生忽视的最大的一点,也正是因为如此,希望之后的学习能够亡羊补牢,把数学知识重新捡起来,跟上技术的脚步。
第三部分:未来规划
1.对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路?
对于未来,我不太想成为一名程序员,我希望我能够带着我的IT知识,走到各行各业中去。众所周知,人工智能的发展已经把计算机技术带上了一个前所未有的高度,但是其他行业诸如工业等,虽然或多或少受益了一些,但是跟计算机行业还相差甚远,我希望计算机的发展不仅仅是能够带动这些一般行业,更能让他们的技术跟得上计算机发展的步伐。未来的路很长,希望未来的我能把握住每一次机会,做到让自己无悔。
2.实习经验究竟有多重要?你准备如何积累实习经验?你希望在企业内实习还是在实验室做项目?
上面一个引用恰好也回答了这个问题。就我看来,实习的经历是自己能够增长阅历,看看大城市的具体项目中人与人的分工以及合作的过程,这些阅历是能够增长自己的见识以及开阔视野的最有效途径,在这个过程中,自身的思维方式也会随之发生变化。所以相对于企业来说,我更加觉得实习经验对于个人本身更加重要。如果有机会,我也希望能够进去企业好好实习一段时间来开阔我的视野。
第四部分:课程期望
1.你对这门课的期望是什么?你打算平均每周拿出多少个小时用在这门课上?你愿意为了一个你感兴趣的项目、或得到实战锻炼而付出更多时间和精力(包括熬夜)吗?
对这门课我希望学到一点有意思的并且感兴趣的知识。正如前面所提到的,我觉得能够在老师的指导下做一个让我感兴趣的项目是非常值得的,我肯定会为此付出精力。一般情况下,我打算每周画半天到一天的时间在这门课上,所以我希望老师一周作业量不要太多,专注于上课的内容留下一点思考或者说实践锻炼是最好的。
[1] http://www.cnblogs.com/Tpf386/p/4798437.html
[2] https://news.cnblogs.com/n/531362/
[3] https://www.cnblogs.com/xiaozhi_5638/p/4485805.html
分析软件
Games(游戏)
首先我想说的是我最青睐的游戏软件,大多数游戏软件毫无疑问他们的目标都是盈利。游戏软件需要高成本的投入制作以及高维度的宣传,宣传力度之强以至于他们不太想投入精力去细化这些宣传,这也是为什么我们每次点开视频总会弹出一些很蠢但是自己都会背的网页游戏广告词。第一次玩游戏是在学前班的时候,但是电脑都不算普及,最火的网络游戏莫过于盛大公司的泡泡堂,这个游戏简单易上手,画风可爱,游戏性强。没有经过多少特别的宣传遍已经风靡大街小巷。这个游戏虽然免费开放,但是玩到了一定程度,你不得不去花费现金去购买里面的增值产品,因为如果不买,就得不到足够的游戏体验,也会增加挫败感。正是因为如此,现在大多数游戏都采取了这种盈利模式。时下最热门的手机游戏王者荣耀,开发的成本并不算很高,但是每季度都有几十亿的营业额,如此高产的软件也必然造就了工程师的高薪。
接触这些游戏大多数都是因为他们的宣传,一个游戏能从万千世界中脱颖而出宣传自然是不在话下。因为一个游戏的上线时间早晚直接决定了他是否能够生存,而测试游戏需要海量的时间,这也导致游戏软件通过鼓励玩家反馈的方式修复bug,而并不是一般软件的自己测试。大一的时候曾经写过一个简单的博弈论算法小游戏,整个过程大概花了两个月,虽然是第一次做游戏类的程序,但也着实体会到了写游戏的繁杂。而现在我已放弃这些游戏,游戏一旦“过气”,玩家数量就会呈指数下降,最终稳定在一个很低的水平线上,这条线大多数是由一些铁杆的老玩家组成的。虽然存在但也人去楼空。
Mobile Apps(手机应用)
手机应用是近年来使用频率上升趋势最明显的一类软件,随着智能机的普及,人们参与互联生活也越来越方便。类似于游戏,移动应用app目标也是在于盈利。一个好的app不仅能够做到高额的受益,还能够积累庞大的用户群体以及良好的口碑。举腾讯应用来说,移动QQ的收入自然不在话下,同时,庞大的用户群体无疑为他们产品的广告增添了巨大的价值。
第一次使用移动社交软件还是在初中的时候,当时家里新买了智能机,迫不及待地装上了QQ,一心想着以后就可以更方便地跟朋友聊天了。QQ的最大特点是基本不需要用户花钱,小的时候还一心想着,即使有Q币这类增值业务,但是像我这类不花钱依然用的很开心的人比比皆是,他们到底用什么赚钱呢。慢慢地才知道,即使他们当时一分钱也没有挣到,这些用户群也是一笔庞大的财富。无论何种腾讯产品问世,在宣传力度上就已经可以是碾压同类产品的存在了,更何况他们的产品精益求精,很少有人能发现bug,这也是为什么腾讯集中了中国一大部分高技术高素质的程序员们。5年后我相信这些软件依然存在,甚至可能独树一帜,因为这个工具具有旺盛的生命力,并且能够解决人类生存的最大需求,沟通。
Tools(工具软件)
相比于上述两种软件,工具软件则一般不以盈利为目的。当然,最近工具软件收费的热潮也慢慢袭来,但是我们所熟知的python、R等诸多工具都是面向大众的免费软件。很多时候他们的目的不在于盈利,有的可能是为了交流巩固技术,有的为了积累用户,有的甚至就是单纯的开源供大家使用。这些软件一般也是通过口碑宣传,有时候听到论坛或者小组中有人说了一句,其他人附和了一下就开始琢磨怎么去捣鼓。第一次接触工具软件应该是大一刚来学C语言的时候,当时应老师的要求安装的devc,虽然现在早就已经不用,不过这个工具确实是数一数二的良心好软件,也为我算法启蒙打下了良好的基础,甚至现在一些算法比赛指定的编译器还是他。
这些工具软件中很大一部分可能真正的并没有公司这一说,只是一大群爱好者利用空闲的时间为这个工具添砖加瓦,比如著名的linux系统。当然现在很多工具也走向规范了,google公司的tensowflow作为时下深度学习火热框架之一,拥有很强大的技术开发团队以及精密的版本控制。其中的开发人员工资不敢预测,保守来说年薪应该也有1M刀了吧。
学这些工具当然是一件漫长的过程,他们不像其他app或者游戏一样简单易上手,而是需要用已有知识去开发未知。很多时候当一个工具软件被用用到了信手拈来的地步时,你已经成为了这个行业的专家了,最简单的例子就是photoshop。这些软件随着时间的推移注定是要被技术的洪流淹没的。但他们其中很多也通过不断迭代版本保证了生存,比如office等。
列举你在使用上述软件的时候观察到的 “特殊”现象,它们和硬件有什么不同? 这些能说明软件的某些本质特性么?
软件和硬件最大的不同我觉得应该是软件像是一个人的思想和灵魂,如果没有软件空有硬件这个驱壳毫无作用。软件通过结合我们生活实际,在硬件及OS这些载体上发展延伸到生活中各个角落,切实解决生活所需。上述提到的这些软件都是在日常生活中针对某一个需求所设计的,这也说明了软件本质就是以计算机硬件为载体,满足人们需求的产品。