ASE 热身作业
自我介绍
大家好,我是吴永基,USTC少院的大四学生,目前在UCSB做暑研,十月份将来MSRA邹老师组实习。我平时热爱追美剧,阅读一些历史方面的书籍(尤其热衷收藏甲骨文系列),看些The New Yorker, Bloomberg等杂志,同时也是资深Xbox One和PS4双平台玩家。我在暑研期间和之前在科大做的都是NLP和data mining相关的工作,将来在MSRA的一年里将会做一些system方向的科研。希望能在MSRA度过愉快充实的一年,也让我爱上system科研。
现状、经验和计划
(1)我认为我会选择CS专业起源于我从小就一直很好奇计算机是为何能干工作的,能听令于我们的操控。这一好奇心也让我从小学就开始摸索OI竞赛这一领域,一直到大学让我毫不犹豫的选择了CS。
技能评价表:
技能 | 课前评估 | 课后预期 | 提高方式 |
---|---|---|---|
Programming: Comprehension | 5 | 7 | 目前主要阅读的源码大多都是各类AI论文的python实现代码,希望将来多阅读一些更加工程的优秀开源代码,多阅读一些其他语言实现的代码,debug时也多与同学交流,要能在实践过程中总结一些经常遇到的经典bug。 |
Programming: Implementation | 4 | 7 | 将来要多参与一些完整项目的开发,要增加自己的代码量,提高代码实现能力。 |
Programming: Design | 4 | 7 | 要多学习优秀的开源代码的组织结构设计,也要在自己每次编写代码时多去思考设计的问题,将学到的优秀设计灵活运用于自己的项目中。 |
Programming: Test | 5 | 8 | 以前开发项目时也曾使用过TDD模式,但一般进行完善测试的意识较为淡薄。以后在写代码时要增强测试意识,也要熟练掌握各种测试框架例如Jtest和unittest等的使用。 |
Programming: BigData | 5 | 8 | 以前在做一些AI项目时有一些大数据处理经验,但希望以后能进一步提高此项技能,能熟练掌握一些分布式大数据处理、计算框架如Spark、Hadoop,多在实战中学习。 |
Programming Language: C++ | 3 | 6 | 平时使用C++主要也是局限于学校课程的项目中,希望能在本课程和以后的项目开发中进一步磨练自己的C++技能,尤其是泛型编程、多线程等方面,也要去学习掌握一些C++11以至C++14、C++17等最新的标准。 |
(2a) 之前我们在科大大三阶段也有开设过软公开课,但在那门软工课中缺乏实际的工程实践,授课大多也只是停留于纸面上的概念,大作业也是形如过家家一样的“文档编写”。我希望通过在MSRA学习这门课能更加清楚地认识工业界中一个项目是如何从需求分析开始到最终实现落地的完整流程。如何做一个成功的产品经理,了解用户的真实需求。如何做一个成功的架构师,能很好的设计出项目的框架。如何做一个优秀的程序员,能根据需求实现好一个项目。
(2b) 我在科大的三年几乎体验到的师生关系大多是汉堡王快餐式的。学生只图抓起一个汉堡(学校的课程)大口大口尽快吃饱(希望课尽可能水,只求花最少的时间水出一个还算好看的成绩)。老师往往也为照顾大部分学生,考试和课程项目往往也较为简单,很难从一门课的学习中获得多少技能上的提升,也算是这种路人甲/路人乙的关系。我希望的理想中的CS课程应该是充满challenge,能让我们大幅锻炼自己的代码能力和综合素质。After all, if it doesn't challenge you, it doesn’t change you.
(2c) 我们引用别人的文献、工作是”站在巨人的肩膀上“,是对别人工作的敬仰与尊重。我们的工作是建立在别人的基础上,进行了一些创新,扩展了人类知识总和。抄袭剽窃则是完全不加引用的挪用别人的劳动成果,是对知识的不尊重,是不管在任何圈子里都是一种可耻的行为。
(3) 我希望在本科结束之后出国深造,希望将来投身于工业界。为此我也计划在MSRA这一年的实习期间能好好磨练自己的代码能力,以及system能力。之前在做AI research的时候感觉大多时候也只是在写能work就行的实验性代码,以后需要多多锻炼写出工程质量代码的能力。
(4) 我认为我在这门课中能真正的去进行团队合作,去实现一个真正有一定工程质量项目,将软工的方方面面从纸面搬到实际应用中去。希望能在此提高我的代码能力、handle一个大project的能力、有效的团队沟通和协作能力。
我目前代码量大约有 :
语言 | 代码量 |
---|---|
C/C++ | 7500 |
Python | 15000 |
Java | 4000 |
我希望在本课程中能完成5000行的代码量,平均每周需要700行的代码量。我计划每周花费15h-20h在课程的学习上。
(5) 我阅读了「辜新星:时刻调整方向 找到人生的蓝海」这篇文章。我的确深有同感,计划的确至关重要。尤其是我们大学以来,我们将面临学习、生活中的各种琐事,我们也必须做好何时该干何事的计划。我平时也坚持使用如OmniFocus这样的GTD软件,规划好我的日程安排。
构建之法阅读体会
-
课本第二章个人技术和流程提及了单元测试的重要性,全面介绍了单元测试的标准,也介绍了使用VSTS来编写单元测试。我们平时在学校的各种课程项目中的确忽视了单元测试的重要性,从来也没有过要求需要进行”累赘的“单元测试。我认为此门课以及日后编写项目时一定要注重单元测试,每次编写代码时都思考单元测试的那些标准,自己有没有达到,以及可以养成使用TDD开发模式的习惯。单元测试从纸上得来终觉浅,这一部分我觉得需要通过完整的项目实战才能获得一定体会。
-
课本第四章介绍了结对编程的概念。结对编程是一个对我来说很新颖的概念,两个人用同一台电脑、同一个键盘、同一个鼠标一起进行编程工作。一个人充当驾驶员控制键盘,另一个人充当领航员,起到领航、提醒的作用。但我很好奇这样的结对编程模式真的现实吗,真的具有实际执行力,真的比使用传统的双人合作方式开发效率高吗?我觉得两个人坐在同一个电脑前开发很有可能会导致1+1 < 2的现象。两个人的大脑思考模式等全都不一样,领航员和驾驶员很难默契配合好。两个人的代码风格、对细节的把控、思维跳跃性、对工具的熟练程度等可能都很不一样,如何保证两个人有效的进行沟通?
-
第七章提及微软解决方案框架(Microsoft Solution Framework),这一解决框架提及「充分授权和信任」。但我对这一点持有保留意见。这一原则固然能提高开发人员参与项目的积极度,但是否每个人都是值得「信任」的呢?我认为授权和信任这一方面不应该呈现一个网状的团队模型,这里应该是一个层级结构。小团队内部可以相互信任,但大团队内部必然需要进行一些措施防止某些人因为工作能力达不到预期或者因为自身利于驱动而有意无意地对项目产生负面的影响。
-
在第八章需求分析中,软件功能按优先级被划分为了四个等级:杀手功能、外围功能、必要需求、辅助需求。但在项目开发进行此一功能定位与划分时,我们该如何考虑市面上已经存在的功能类似的竞争对手软件呢?我们该如何划分出我们的软件与竞争对手的区别,来进行更加合理的功能定位的调整呢?这里杀手功能也是有相对性的。如果竞品也都能实现相同的功能,那所谓的“杀手功能”自然也就逊色了不少。
-
对于第十六章IT行业的创新,里面提及影响产品竞争包括产品行业的因素。这一点的确非常重要,在2015资本寒冬之前诞生了无数现在听起来无比荒谬的各种P2P创业公司,如三个人推个三轮车上门洗车这一流,却还仍然能得到浮躁的资本的青眯。我们也要在任何时候都需要考虑行业的动态,也需要及时发现机遇,以及潜在的资本泡沫、市场危机,要有前瞻性。不仅要关注这一产品行业的现状,也要关注其过去,以及未来的走势。