现代软件工程第一周博客作业

自我介绍

大家好我是scallion,从初中开始我的外号就叫大葱,渐渐地scallion成为了我最常用的昵称或者是非正式的英文名字。

和比较常见的兴趣爱好不同,我从5岁开始学围棋,11岁成为国家二级运动员(其实也只是业余水平,离职业道路还有很远)。一直到初中毕业才停止上围棋课,围棋也变就成了我的一门爱好。但是现在的我其实很少下棋,很偶尔才会跟朋友手谈一局。我虽然围棋水平退步严重,但是对它还是保持了几分价值判断力。很多时候下棋会有一种“我怎么下的这么差”的感觉,每一步棋都不怎么下的出手,却又想不出更好的走法,结果就下的越来越少。不过我一直觉得我的这种心理现象很有趣。

高中以后长跑和骑行成为了我的主要爱好,我高二的时候参加了杭州国际马拉松,但是年龄不足20只能跑半程。去年的时候和同学两天沿着巢湖骑了一圈。到了大学作息没有高中那么规律,体能反倒是有些不复当年。来了帝都之后准备把锻炼拾起来。这里不仅有“最美马拉松”--北京百里山水画廊森林马拉松,骑个单车还可以考虑去天津看海。要是有一样喜欢长跑和骑行的小伙伴欢迎在评论区留言~

现状、经验和计划

现状

我来自中科大物理学院,2016年3月,deepmind的Alphago在五番棋比赛以4:1的比分中击败李世石。在比赛结束之前,我从未想过人工智能能够在围棋这个task上达到媲美人类的水平。在那时的我看来,深蓝击败卡斯帕罗夫只能说明电脑算力的强大,而围棋的精髓不仅在于计算,还在于感觉,这种不能显式的写出来的特征是很难被计算机所学到的。最终结果深深震撼了我,让整个围棋界回忆起已故去的日本著名棋手藤泽秀行先生的那句名言:棋道一百,我只知七。以此同时,一种“ML一百,我只知七”的感觉在我心中油然而生,促使我从大二开始修读了计算机双学位,并最终选择在计算机方向读博。

查阅了软件工程师自我评价表后,我认为以下技能对我特别重要:

  • 程序理解
  • 代码质量
  • python
  • 处理大数据
  • 个人源码管理

就现阶段而言,前三项的水平可能是2-3,后两项的水平可能是1-2。希望在课后5项技能都能达到4-5的水平。本科前三年课余的大部分精力还是放在了物理上,双学位为了精简课时基本上删掉了所有大作业和算法课。导致现在计算机编程基础较薄弱。具体的方法就是多读代码,多花时间实践,向身边的人请教。除此之外,我也计划在这一年啃下一两本大部头英文书,补充下自己的理论基础。以及系统性的了解Machine Translation的历史。

师生关系

对于师生关系,我认为邹老师总结的健身教练和学员的关系很精辟,也覆盖了大多数情况,但是就我的个人经验,我认为师生关系应该是以健身教练和学员为主,其他关系也可以存在。由于个人专业知识和表达能力所限,我无法很精简的总结我的观点,我选择将我遇到过的最有特点的师生关系罗列如下:

  • 力学是中科大物理学院大一上学期的课程,由于物理学科的特殊性,导致物理学院大一新生的物理水平参差不齐。物理竞赛大神高中就学完理论力学和量子力学了,而纯高考进入中科大的同学可能大一上力学期中考试还不会使用微积分解题。在这种极端情况下,要求老师照顾到每一个学生是不可能的。而老师的教学目标只能是照顾那些基础较差的同学,教授那些力学的入门知识,而这些知识搞物理竞赛的同学可能早已烂熟于心。在这种情况下,老师和物理竞赛的学生已经不再是健身教练与学员的关系,而是健身教练和毕业学员的关系,虽然老师很博学,但是他的博学无法体现在他讲授的课程中间,那么物理竞赛出身的学生就完全可以不听讲,选择自学更高层次的物理知识,在课下和老师单独交流,这样才是取得最大收获的方式。事实上,在物理学院保持领先优势的竞赛学生中,很多同学上基础课的时候都在自学更高深的教材。在这种情况下,大学生为什么要听讲,这篇文章中的理由也就不成立了。此外,我认为这篇文章中很多措辞都很奇怪,这篇文章指的不听讲似乎就是不学习,我觉得有些狭义了,这么比较得出的是正确而无用的结论。比如:

你在上课的时候,是认真听讲,还是在聊天说话玩手机?-- 难道不认真听讲就只能玩手机了么?
课程讲的不好不能成为不听讲的理由。 --老师讲的都会也可能成为不听讲的理由。
课程有用无用不是一个大学生的格局能判定的。 --我认为一个优秀的大学生应该在大学生涯中找到自己的方向和兴趣,因为最终是为自己而学习,学生需要能自主决定那一门课对他更有用

  • 由于某些原因,我在两所学校(A,B)都修读过机器学习方面的课程。课程的上课学生均为本科生,且之前没有学过人工智能有关的课程。但这两所学校的授课内容完全不同。A学校从logistic回归开始,讲SVM,NN,但是讲的更多的是具体算法,冗长的数学推导全部放在ppt上,一页一页向下翻,学生跟不上老师的推导方式,课下自己推导有感觉有些费力。到结课的时候,学生学会了各种各样的机器学习方法,但理论基础稍微欠缺。B学校开场就介绍机器学习理论,从chernoff bound开始,接着讲vc-dimension理论和优化中的duality,全程在黑板上从头推到尾,很少涉及到具体算法的内容,而是给学生推荐了一些讲具体算法的书籍。到结课的时候,一些同学证明了ML theory 中state-of-art的结果,发表在COLT上。评判AB两个学校那个好是一件见仁见智的事情,可能与我的物理背景有关,我会更喜欢B学校的上课方式。我也很欣赏B学校老师说过的一句话:

“我给你们讲的东西,都是我认为我讲给你要比你自己学学的快的东西”

综上,此我希望的师生关系是在健身教练和学员,但教练应该能让学员在同样时间能达到优于学员自己健身的效果,如若不然,我认为学员自己健身也不失为一个可行的方法。
最后,关于抄袭,我觉得就课程来言,一切不阻碍教学目标实现的引用都不是抄袭。

宏观未来规划

现在看起来我会选择做学术研究,我不是很喜欢做唯performance的工作,所以做太偏应用的工作可能会不是很开心。而且做学术研究一些物理思维可能会有帮助,起码让我乐意看一些很理论的推导。但我总归从事的是CS方向的研究,代码能力薄弱是我迟早要克服的短板。这学期的计划就是现状部分结束的那5点。

这门课的计划

我现在代码量自己也没有估计过,可能11000行左右。C语言可能写了5000行,C++写了3000行,python写了3000行。虽然前面没说过前两年浪费了很多时间,但我还是想奋发向上,我计划每周课下拿出10小时完成这门课。完成代码量我现在实在没有什么概念。希望每周都能码几百行代码吧。

博客阅读

我阅读了“不要轻易在简历上写我热爱编程,热爱学习”。首先声明本人并没有在简历上写我热爱编程,热爱学习。读这篇博客主要是想看看大牛的热爱是怎样的。和自己对比了下发现他说的那些成就,现在的我的确没有那个毅力做下来。感觉以后还是要对自己狠一点,寻找兴趣,争取在毕业的时候能说自己热爱编程。

构建之法提问

Ch04, P79, 每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面质量取决于一对程序员中各方面水平较高的那位。这样程序的错误就会少得多,程序的初始质量会高很多

问题:我们在第一次结对编程的debug阶段中采用了这个方法,但是发现两个人的交流有时候会掩盖问题,来自代码创作者的解释会隐藏那些不易察觉的小bug,很多隐藏的比较深的bug还是在一个人独立阅读代码的时候发现的,是因为结对编程不适用于debug阶段吗?

Ch6, P112, 另一个改进是,要在每一个任务中记载我们完成这个任务还需要多少时间。
Ch6, P115, 我们感觉好像项目完成了80%,殊不知后面的20%往往要花费80%的时间。

问题:敏捷流程的核心是基于能够估计出任务的剩余时间的。但文中又说很多时候并估计不准时间。我感觉这里似乎有一些矛盾。如果预计完成时间估的不准,那么敏捷流程跟尽全力向前推进似乎没有什么区别?还是说一般工程项目都能估计的大差不差?

Ch8, P156, 用户在各种菜单中幽幽暗暗的反反复复的寻找某个功能,我们在单向玻璃后面替他着急……我们的界面距离“平平淡淡从从容容才是真”差太远了

问题:想问一个和书关系不是那么大的问题。就是现在产品的菜单和图标设计(比如word)依然很复杂,用户很难知道自己要干什么事,就能根据菜单名称大致找到地方。UI换了一版又一版,菜单设计却没有大的更新,是因为尾大不掉么?就是说为了和老版本兼容从而不能大面积修改菜单?

Ch16, P353, 但是绝大多数用户都不会告诉公司颠覆性的需求,就像马车夫那样,他们会希望马更快一些就好了。

问题:我认为这个例子并不能说明问题,马车的出现和汽车的出现相差很远,起码远超一个公司产品的周期。而且马车直接变成汽车这个请求未免太颠覆性了。就像手机屏幕从按键变成触控笔再变成手指直接触控一样,是因为用户不断反映体验不好才促进了产品的升级的。用户是很难知道未来的发展趋势的,成功的公司重视用户,应该推理出公司自身会去想颠覆性的方法满足用户的需求。而不是把没做出颠覆性进展归因于用户没有提出来,这可能对用户提了过高的要求。

Ch16, P359 技术成熟度曲线
建议:除了标准的一升一降,老师是否可以分析下AI的三次上升和两次泡沫破裂,这样可能更加形象生动。

posted @ 2018-10-17 20:10  ustcscallion  阅读(622)  评论(9编辑  收藏  举报