ASE作业5 高级软件工程 学习心得
高级软件工程 学习心得
学号:200
本学期学的高级软件工程,应该说是一门比较有特色的课程,起码说是,与预期不同的课程。
除去知识性收获之外,这门课也带给了我一些新的认知,同时也有一些感想。
认知
所谓新的认知,是指对“码农”这个身份的新的认知。之前有在论坛见过学长对本门课的称呼,叫“孟老师的哲学小课堂”,听完课之后觉得,这说法还是有相当的贴切成分在的。
印象比较深的几个观点,一个是关于元宇宙的,叫“代码世界才是一个真正的元宇宙”,另一个是说,之前认识世界可能是哲学家的事,现在“码农们也站在了认识世界的最前沿”。还有一个,就是用熵增原理来论断代码的复杂性,和铺瓷砖、做建筑这些类比,很自然的就用上了 不要写重复的代码 这一原则。
这些让我感觉到,软件设计、设计原则,和遥远的的哲学、自然规律等,也不是那么风马牛不相及的,甚至是,联系的还很自然。也就是说,认识代码世界,其实和认识自然世界,是类似的。自然世界有其运行规律,我们认识物质世界有一套方法论,那么同样的,代码世界也有其运行规律,也有认识它的一套方法论。这两套规律、两套方法论,彼此并不是孤立的,不过当然了,毕竟联系是普遍的。抽象、分层这些词并非代码世界独有的,热力学定律,在01世界,也同样有其统治力。
但是有这个收获有什么用呢?似乎也没有什么直接的用途,毕竟我在物质世界的经验不足,方法论不完备;在代码世界的经验同样不足,方法论同样不完备,谈什么感悟不过都是,有些生搬硬套的感觉。可似乎也不必事事都要先追求一个作用,起码,学了这个课,让我认识到我不仅是一个码农,还是一个新时代的哲学家,并且要努力成为一个,“闪烁着智慧光芒的哲学家码农”,或者是“码农哲学家”,也不错。
感想
感想,是对于课堂的作用,有了一些感想。
在在课堂上学设计原则之前,我自己也先学过一些。在学到LSP原则的时候,我看到了它的地位——
正是使用了继承,我们才可以创建实现其基类(base class)中抽象方法的派生类。 是什么设计规则在支配着这种特殊的继承用法呢?最佳的继承层次的特征又是什么呢?怎样的情况会使我们创建的类层次结构掉进不符合OCP的陷阱中去呢?这些正是Liskov替换原则(LSP)要解答的问题。
——《敏捷软件开发:原则、模式和设计》
瞬间让我,“严阵以待”,特别是又想到,之前我写的代码,好像处处都在违反LSP,这不禁又让我看重了它几分。于是我花了相当的功夫去学习、理解这个原理,并总结了一篇博客🔗。我觉得我对这个原则有一定的认识了,但是又觉得,好像也没有掌握了规则之后该有的那种,规范或是便利的体会,反而再使用C++的时候感觉有些,处处掣肘,或许是我一直写代码都太野路子了罢。
直到上课看到这句话:
再标准的规范,再完美的教科书,都会有其适用期,因为真理是具有相对性的。或许课堂的意义也在于此?知识就在书里,大家上了这么多年学肯定都认识字,如果书上就有,直接去看书岂不是效率更高?但是即使是经典的书,也是有可能跟不上时代的;而跟得上时代的,可能还来不及沉淀成为一本经典的书。但是课堂可以,提供一个快速“跟得上时代”的学习形式。
当然要跟得上时代,前提是也得先学一些经典的作为基础的。同时课堂也有其他作用,甚至主体作用就是介绍已经成为经典写在书里的内容。这似乎就有了一些,或许也称不上矛盾,但是有了一些不完美:
一方面学生需要课堂来听老师分享经验提纲挈领快速入门,虽然知识是在书里,但是埋头去啃和先“师傅领进门”的效率还是有很大不同的;但入门之后,也就是说,知道要学什么之后,听课的效率似乎就慢慢比不上自己学的效率了,上课讲的主体内容都还是书上有的。毕竟讲课是面对的多数人,而每个人有都有自己的学习情况。这时候的听课,似乎还有一些“耽误”学习,甚至会沦为只是为了听“考试重点”;可是学了一部分之后,又需要有人来给你指明,你学过的这些当中,有哪些“坑”需要注意。这个还必须在你学了之后说才有效果,学之前说要注意可能体会并不会很深刻。
也就是说,相对来说,似乎课堂在学之前和学之后更被需要,在两端需要,中间这一段自学也可。可中间这一段又占据了相当的时长,这似乎不是那么的贴合。大学的大部分课程和中学的也不太一样,课前预习课上听讲课后复习这一套,也不总是适用的。很遗憾,上了这么多年大学也没有很好解决这一问题,现在,课程已经修完了。
参考资料
《代码中的软件工程》https://gitee.com/mengning997/se