20200910-2 博客作业

此作业的要求参见https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11184

1.建博客

在 www.cnblogs.com (博客园)建账号(1分)。

关注 杨贵福(0分)。

加入本班 https://edu.cnblogs.com/campus/nenu/2020Fall

2.博客作业

参见 [http://www.cnblogs.com/easteast/p/7403491.html ],阅读其中给出的材料及评论,并回答下面几个问题:

(1)回想一下你曾经对计算机专业的畅想,当初你是如何做出选择计算机专业的决定的?
你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?
你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗?

​ 答:我从小就对电子产品感兴趣,属于那种喜欢折腾的小孩,喜欢折腾研究电子产品,软件硬件方面都挺喜欢的。报志愿的时候一开始是打算报偏硬件的专业,后来在贴吧/知乎了解到学软件比学硬件更好找工作,薪资也更高,所以就报了软件工程。

​ 不符合。大一大二的时候觉得学计算机的话,语言和框架比较重要,没有意识到数据结构、操作系统、计算机网络、计算机组成原理等计算机基础课程的重要性。到了大三大四,对软件工程专业有了更深入的了解之后发现其实相比于编程语言和各种开发框架,更应该学好数据结构等基础课程。语言和框架只是工具,数据结构等专业课才是计算机专业的精髓所在。所以之前接触的课程不太符合我大一时候对计算机专业的期待,但是现在觉得之前学院排的课程是很合理的。

​ 计算机是我喜欢的领域,因为计算机更多的讲究技术,相比其他行业更不需要和人打交道。大三的时候在上海的一家IT公司实习过一段时间,很喜欢公司的氛围,技术至上,没有太多的人情世故。

(2)考取研究生,对照前人们走过的路和描述未来发展,现在的你自我感觉你已经具备的专业知识、技能、能力有哪些?
离成为一个合格的计算机学生,在专业知识、技能、能力上还差距哪些?

​ 答:我觉得自己具备了一定的编程能力,可以独立地设计、编写一个规模不大的B/S系统。 我觉得自己的数据结构等专业课程基础一般,同时算法能力也还需要加强。

(3)每天都是一个人生选择的十字路口,学术研究、工程项目、社会实践 ,不同的选择有不同的努力方向。对照以上你阅读的前人们的经历,你的选择是什么?
在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
针对你的选择,你给自己的本学期的规划是什么?

​ 答:我选择做工程项目。我的优势在于我本科期间有多个项目经历,同时有半年的实习经历,对项目开发有一定的经验。

​ 本学期的规划:把之前学过的一些专业课踏踏实实地再学一遍,打好基础,加强自己的算法能力,做一到两个JAVA项目。

(4)你对这门课的期待是什么?
你打算平均每周拿出多少个小时用在这门课上?

​ 答:我希望通过学习高级软件工程这门课程可以更好地了解软件开发,对项目开发有更深刻的理解,也希望在杨老师的指导下做一个高质量的项目。

​ 我打算每周花15个小时用于学习高级软件工程。

3.博客作业 (10分)

通读《构建之法》,发布随笔1篇,要求列出5个问题,可以是读后不理解的,或者读后反对的。要有观点、有证据或分析。字数不是直接的考核标准,但是要求长到能把观点表述清楚。

​ 答:

  1. 《构建之法》第198页提到

    在一个项目中,PM的具体任务是什么呢?他们的任务是:

    • 带领团队...
    • 管理软件...
    • 创建并维护...
    • 代表客户...
    • 分析和带领...
    • 带领其他成员...
    • 收集...

    这里没有提到code review,意思是PM是不用负责code review吗?如果不是,那么在企业的大型项目开发中,由谁负责code review呢?

  2. 《构建之法》第198页提到

    3.一定的专业能力

    如果一定要说专业能力的话,PM的专业能力就是理解和表达....

    PM通常也能写代码,能玩转Excel,PPT,Visio,甘特图...

    我的疑问是一个合格的PM的代码能力应该达到什么程度?是能看懂项目代码就行还是能参与到项目开发中?我之前接触的三个项目经理在项目中根本不写代码,看不出他们的代码能力,所以会有这样的疑惑。

  3. 《构建之法》第75页中提到

    函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有利于程序逻辑的清晰体现,什么方法都可以使用,包括goto。

    我反对这种观点。目前绝大部分教程/帖子都建议尽量避免使用甚至不用goto语法,因为goto很容易把程序逻辑弄乱且难以理解。

    荷兰计算机科学家E.W.Dijkstra 1968年写给ACM编辑的信《go to statement considered harmful》中提到,

    More recently I discovered why the use of the go to statement has such disastrous effects, and I became convinced that the go to statement should be abolished from all "higher level" programming languages (i.e. everything except, perhaps, plain machine code).

    (最近,我发现了为什么使用go to语句会造成如此灾难性的后果,并且我确信应该从所有“高级”编程语言(即除普通机器码之外的所有内容)中废除go to语句。)

    当时已经证明,任何程序可以通过顺序、选择分支和循环三种方式组成,只需要if...else和while就是足够的。提倡使用这三种方式进行结构化编程,这是提高程序质量的一种方法。

  4. 《构建之法》第8章讲的是需求分析,实习的时候做的项目里有好几个产品经理,和他们接触多了之后有一个疑问:程序员是否应该都懂一些需求分析?产品经理是都应该懂一些代码?我的感觉就是如果对对方的工作有一定的了解后,交流起来会更有效率。

  5. 《构建之法》第337页讲到

    15.1.6 招数:砍掉功能

    有一个功能看来不能实现预期的设计需求,时间快到了,怎么办?

    砍!

    砍功能这个方法我不太赞成,因为在实际项目开发中,要求上线的功能都是客户明确要求的,客户没有要求的功能一般是不会开发的,砍功能的话可能不能满足客户的需求。我认为遇到难题应该尽最大努力攻破,实在不能如期上线,应和客户沟通推迟上线,等以后的版本在上线,多争取一些时间。无脑砍功能不可取。

4.博客作业 (10分)

(1)很多人有不为大家所知的本事,而这个能力可以超过周围90%的人。比如课堂中教师提到,如果表现得不像高度近视,如何伪装得不像脸盲,能做40个俯卧撑。当然,也可能是篮球、足球、钢琴、ACM、演讲。
请给出你超出朋侪的特殊技能,并告诉我们,你如何通过何种努力、花了多 久获得这样的成就。
与你的特殊技术类似的,你还有一棵计算机专业以外的同学不具备的技术树。如果跨专业,请不要借口自己原本是某某专业的,因此基础不好,你是计算机系的研究生。

​ 答:我的特殊技能:修手机/修电脑。没有特意花时间去学习这种技能,自己的手机电脑和其他的电子产品出现故障时,会去网上找资料,判断是哪个零部件出现问题,然后找相应的维修教程。慢慢地,亲戚朋友的电子产品坏了也都会向我寻求帮助。总结下来就是:兴趣+信息检索能力+动手能力。

(2)请给出你当前的技能树与技术偏好,列举目前你已经具备了哪些专业知识和能力。请参照邹欣老师给出的工程师水平要求列表https://www.cnblogs.com/xinz/p/3852177.html,包括不限于这些,逐点给出自己具备的能力,这些能力将帮助你在接下来课程中的小组项目里做出贡献(并得到分数)。请提供具体的数据来辅助证明掌握的技能, 例如“学了 C语言”是不够的,还应提供“交过8次实验作业,最长的代码达到200多行,最难的是多线程那个实验……”。确保技能是具体的且可衡量的,请搜索 SMART *- Specific* *Measurable* *Achievable* *Realistic* *Timely*

​ 答:

  • 语言:C、Java和JavaScript。大一时用C语言写过《C语言程序设计》和《数据结构》的课后习题。用Java和JavaScript做过多个B/S系统,包括实习做的项目,大三实验室团队项目和个人独立完成的项目

  • 前端框架和后端框架:Bootstrap、Spring、Mybatis、SpringMvc和Springboot,熟练使用,均能在应用到实际项目中

  • 数据库:MySql、Oracle和MongoDB,熟悉sql语法,写过的sql语句总和>800行

5.博客作业 (10分)

采访本课程往届同学(含外校和毕业生,以《构建之法》作为教材的。不含刚好你熟悉的一位软件工程专家)。 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下:
  • 当时的项目有多少用户,给用户多少价值? 现在还有人用吗?

  • 这个项目能否给我们团队继续开发,源代码/文档还有么?

  • 项目开发有什么经验和教训

  • 对学好软件工程有什么建议

    答:我采访了我的大学同学,他之前做的项目是“小马识途——基于AR的室内导航系统”。小马识途主要解决用户在室内导航或者寻物的问题,输入想去的地点,然后扫扫身边的AR码,小马识途将为你指明前方道路。

    Q:当时的项目有多少用户,给用户多少价值? 现在还有人用吗?

    A:项目最终没有实际上线,用户只有我们团队4人和指导老师。大部分建筑内的gps信号都不好,且无法使用导航软件,我们的项目能解决用户在大型建筑比如写字楼迷路的问题,现在没有人用了。

    Q:这个项目能否给我们团队继续开发,源代码/文档还有么?

    A:不能给你们继续开发,但是文档可以给你看看。

    Q:项目开发有什么经验和教训?

    A:一定要分配好每个人的任务,不然容易出现有人摸鱼不干活的现象,最好隔一段时间开个组会,汇报下各自的进度。

    Q:对学好软件工程有什么建议

    A:不要觉得软件工程是门无聊没有实际用处的课,学好软件工程对项目开发有很大的帮助。多画uml图!一定要多画图!

6.博客作业 (5分)

以下统计精确到一百行。
你目前的代码量是多少?

你认为优秀的和一般的计算机专业学生,(根据你的理想选择以下两问中的一个)为了有资格入职软件公司/互联网公司,需要多少代码量?从事高校教学科研工作呢?

你计划在本课程结束时,完成多少代码量?这些代码量分布在整个学期中,每周应完成多少代码量?

答:我目前的代码量应该大于30000行(包括C、Java、JavaScript和Html)。

​我认为优秀的计算机学生,想要入职大型互联网公司的话,代码量要在50000行以上,从事高校教学科研工作代码量应该在10000行以上。

我计划本课程结束时完成3000行代码,每周200行以上。

7.阅读材料,写心得(10分)

以下两篇博客必读,并务必写一些心得:
(1)你为何要来上课并且认真参与 [http://www.scalerstalk.com/816-attention]

​ 答:文章里提到

大学里面可能有通识课或者专业课,老师的水平可能也会有高低,于是现在流行的观点大概是,这个老师很水我就不听讲,这个课太烂我不听,大不了自己看,然后你发现考试成绩也不会太差。
一定要记住,你在平时放的水,最后一定会流到你的脑子里的。

​ 这个我有亲身体会。大一大二的时候比较心高气傲,上高数课等一些课程的时候,觉得学这个没有用/老师讲课太水了/老师讲课就是念PPT/老师讲课太枯燥了,上课的时候就不听老师讲课,做自己的事情。期末考试前,突击学一下,在网上看看视频,做一点课后习题。最后不仅没有挂科,最终的成绩也还行。当时觉得这样的效率最高,平时根本不用听课,考前突击一下就行了,成绩和那些每节课认真听讲的同学相差不大,后来大三考研复习的时候我就傻眼了,这高数线代概率论一点印象也没有啊!后来发现是自己基础没打好,靠考前突击通过考试根本就没有什么基础可言,完全是靠短时记忆,靠后第二天就什么都忘光了。而我们班那些认真听课的同学的基础就打的很好,他们考研复习起来就很轻松,进展很快。他们是复习,而我是从0开始学。所以现在觉得上课这件事情切忌不可耍小聪明,学习就应该踏踏实实。

(2)你在大学中体验到了哪种师生关系 [http://www.cnblogs.com/xinz/archive/2011/05/16/2048044.html]

​ 答:我体验到了Baby-sitter / Babies 关系和Buddies / Buddies关系。

​ Buddies / Buddies:其实这个现象挺普遍的,老师和学生之间就是那种“你好我好大家好”的关系。老师可能想的就是我对你们要求低一点,不会让你们挂科,你们也别给我惹事,等期末你们拿学分我结课,皆大欢喜。大学 的时候还挺多这种老师的,对学生不严格,平时不布置作业,期末考试给分也高。

​ Baby-sitter / Babies:在大学里也遇到过像保姆一样的老师,不得不说,这样的老师确实很负责,感觉回到了中学,对学生很关心,也很容易和学生打成一片,深受学生喜欢。可能以前讲过一个很简单的知识点,有同学提出没听懂,老师也会再讲一遍。

原文地址:https://www.cnblogs.com/ayuyu/p/13679155.html