软件工程开篇自我介绍

介绍自己

Hi 各位,这是记录ASE课程的第一篇博客,也是我21年来的第一篇博客。

说起写文章,从小我作文就烂得出奇,作文也写写的不利 利索。以前写作文唯一出色的一点就是练过几年书法,导致我的写的字比一般的男生稍微好看那么一点,不过现在基本只需要在电脑前敲键盘了。曾经打过好久的篮球,但因为我不想当灵活的小胖子,之后逐渐就没打了。

至于在计算机领域,我觉得我是一个比较浪漫的人。因为我喜欢上了属于程序员三大浪漫之一的计算机系统(另外俩是编译原理和图形学),希望有朝一日能为世界造个有用的大轮子。

现状、经验和计划

至于我怎么走上计算机这条路,怎么来到msra,真的是缘分。高中的我是物竞党,一心一意想着读物理,只可惜高考的时候崩盘了,被科大调剂到计算机系,那时心里想着读完这一学期就赶紧走人去物院。结果没想到,还没读半个学期就发现,计算机贼带劲了!物理什么的,就被我休了。之后就是一个小萌新,从大一一路吭哧吭哧学到大三,越学越有味道。本来想着出国做AI的,但是在学校实验室待了小半年后发现机器学习学的我头大,同时又阴差阳错被msra系统组的大牛们看上了,于是乐滋滋的来了msra,开启我之后五年的直博之旅。

在职业技能方面,我觉得既然要成为一个合格的IT专业毕业生,首先要具备程序理解(Programming: Comprehension) 的能力。因为在这个快速发展的计算机领域,优秀的开源项目层出不穷,只有理解别人的想法、看懂别人的实现,才能对自己的编程技能有所提高。在这个基础上,作为一个将来要前往系统领域的学生,对大项目的架构设计、接口设计(Programming: Design) 必须有非常强的实力, 在这大的架构设计之下,就是重要的实现技术(Implementation), 好的实现可以成倍的提高代码的运行效率。在这些硬实力的基础上,我觉得个人软件过程(Personal Software Process) 也很重要,善于工作记录、代码管理的人一定能对自己的当前工作状况有一个清楚的认识。

以上提到的4点能力,我给我自己目前的评分是:

 ComprehensionDesignImplementationPersonal Software Process
分数(0-9) 4 3 3 4

之后我希望每一项至少能够达到5分以上。

这些能力的提高方式有很多,包括但不限于:

  1. 阅读他人源码
  2. 自己调试优秀开源软件
  3. 阅读相关的书籍
  4. 多动手写代码
  5. 多于同学、大牛们交流

心得

首先是为什么我要来上课并且认真参与:首先我认为做重要的是听课也是一种能力,是一种接受别人思想的态度,同时能培养自己集中精神的能力。曾经我在大学刚入学的时候,不喜欢听老师讲课,一直都是以自习为主,虽然能维持住成绩,但是学得很累。后来逐渐开始听老师上课,发现长时间的自习导致我上课容易走神。我觉得这是病,得治。于是之后每节课我都尽力的去听。在这之后,我发现我回去都不需要再重新自学就能快速的完成作业,学习一下子就变得非常轻松了。

在大学上课有一点跟中学不一样,科大的计算机系不是小班教学,从来都是1个老师教导100多名学生。这导致老师跟学生的互动就很一般。于是课上的疑问大多数都是在和同学的交流间解决,当大家都无法确定时便会邮件询问老师。虽然大家都有一天一本书,一周一学期的能力,但是我觉得认认真真从开学学到期末的效果更好,因为这个不容易忘。虽然这样学习可能最后成绩还没有一周一学期的同学高,但是能从整个过程中领悟到许多超过课程考试范围的感悟,这些对计算机能力的培养功不可没。

另外关于工作中的引用和抄袭,个人认为,只要你使用别人的文章、别人的资料,就只能在作者同意的情况下使用并做出说明。对于没有任何说明就拿来用的,或者一篇文章是多个文章的集合体的情况,这就必然是抄袭了。好在现在大环境也在对知识产权、版权等方面进行不断维护,抄袭的现象也慢慢被压制。

未来发展

我觉得现在决定未来走研究路线还是工业路线对我来说还是太早。现在就选定感觉会把自己能发展的方向限制的太多。人呐就是不知道,自己不可预料。不过我是偏向工业界发展的,但也挺喜欢做科研。这个决定我觉得等我读完博士,那时候再看看自己的兴趣和状况(比如头发),再做决定也不迟~

在我这样的选择下,我觉得首先我不会把自己的视野限制的太狭隘,我可以收获到很多工业上的知识,同时也能研究到很多前沿领域的科研课题。当然这样肯定会导致我的精力偶尔有些分散,让我不管在哪一方面都不会做到真正顶尖的水平,但是我觉得这也是可以接受的,因为等选定方向后就能真正扎根于某一个领域中,而在之前积累的其他方向的知识,说不定哪一天就能派上用场。

因此,我对自己本学期的规划是:能多接触一些知识,就尽量多接触一些知识,多多开阔一些自己的视野。

期待

对于这门课,我希望能真正的学到企业级别的软件开发流程,以前在大学中学到的课程虽然涉及到团队合作,但最后仍然是各干各的,再把东西拼凑一下,很难体现出合作的精神,因此效率也不高。目前我的代码量大概将近10w行左右,主打C++,也写过许多python。最大的一次独立项目是3000+行的全栈模拟银行管理软件,用的是node.js 和html/css/js 来搭建的。

博客文章阅读

我阅读了一篇大佬的博客:热情、能力、选择。我很赞同这位大佬的看法,因为我自已也一直坚信着,对技术的热情能让自身提升到一个新高度。文中将到了一点,兴趣能让你对一件事持久,热情才是考验你能否一直走技术路线并有所成就的因素。我觉得说的很对。很庆幸我一直对计算机技术非常感兴趣,我也很愿意对计算机技术做跟深入的研究,而不是仅仅当作一种养活自己的手段。

提问环节

  1. 书本P80

    对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

    我对这一点有疑惑,首先我觉得结对编程很取决于双方的实力和双方的性格。如果双方实力差距悬殊,并且实力强劲的一方性格还刻薄,这样会对编程能力较弱的一方造成编程上的心理压力,反而拖慢整个工作的进度, 甚至影响团队的和谐。

  2. 书本P80

    在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应对人员流动。

    首先我很认可传递经验、应对人员流动。但是我认为,当在编程过程中,一个任务往往有不同方式的实现,如果两个人都各执己见,往往很难协商一个共同一致的实现方案,从而导致项目停滞。同时如果有一些创新的想法也很难在交流过程中形成,因为个人感觉独立思考往往能带来更多的创新性。

  3. 书本P109

    第二步:决定当前的冲刺需要解决的事情

    整个产品的实现被划分为几个互相联系的冲刺。产品订单上的人物被进一步细化了,被分解为以小时为单位。

    我觉得一个项目被分解到小时为单位非常困难,首先能够做到这样的分解,必须对架构有非常清晰的认识,并且对实现的难易程度也有充分的了解。这一部分我觉得很难在现实中把控好,因为稍有不慎,这个产品的进度被拖慢从而导致后面的产品进度都被拖慢,造成连锁反应,这种情况要怎么解决呢?

  4. 书本P135

    软件工程,唯一不变的是变化。所以干脆别幻想客户的需求会在第一时刻很明显,然后保持不变。但要注意,我们是预期变化,不是期望变化 。

    在这个过程中,如果我们预期了变化,并对预期的变化做出了相应的调整。但随后发现预期出现了错误,用户的需求是往另一个方向走的,那么在对于正在做调整的软件该如何处理?

  5. 书本P190

    要带着感情去讨论问题么?有专家建议开会应该尽量不带感情,但是别的资料又要求大家带着感情去体会用户的通电,还要带着浪漫的幻想去做头脑风暴。

    我觉得因为每个人专业的领域可能有细微的差异,很多人对一个想法褒贬不一,同时一方面认为着不可能行,另一方面又认为这是一个很好的点,如果在这样的环境下权衡一个想法的好坏呢?

原文地址:https://www.cnblogs.com/zhiqilin/p/9794991.html