【计算机本科补全计划】构建之法读书笔记

正文之前

首先,说句实话:真的写得好,让我情不自禁就给我的学长推荐了,读完绪论我就有预感,我会放下我手头读的如痴如醉的《C++ Primer》,转而把这本构建之法读完我再回头读,因为作为一个跨院保研到计算机的人,我目前最不缺的是时间和技巧的学习。但是我极度的缺乏一种思想的锤炼,我现在是披着机械人的皮,走到了机械的十字路口,一年后准备拐弯到计算机去!所以我还有这足够的时间去培养我自己的思想,让我成为一名合格的程序员,而非是“码农”!


正文


不得不说邹欣老师这本书非常合我的胃口,所以一上手,就再也停不下来了。首先在第一版前言中给的那四个形象,我觉得就非常的有意思,直接把《构建之法》这本书与一般的编程手册什么的区别开来了。另外致谢部分,我看到了浙江大学计算机学院的陈越老师,这是我非常喜欢的一个MOOC上的老师,她的数据结构真的是让我受益匪浅。倒数第二段:“最后要感谢我的家人,他们容忍我一个人在厨房里对着电脑长时间发呆,有时还给我煮绿豆汤喝”。 这句话瞬间将老师从一个高高在上的作者拉近到了我们生活中的层面来。读这本书,就没有那种被填鸭式教育的感觉,反而是仿佛与老师一起在黑暗的夜里,敲着字,听着歌,享受着别人煮给自己的绿豆汤,那是多么的一种幸福呀!


然后当看到老师对当代教育体系中的师生关系有如此深的研究的时候,我感觉非常的庆幸,也带点遗憾!庆幸的是:终究还是有很多人是在乎学生与老师之间的关系,把寓教于乐这种崇高的理念贯彻到了生活中,遗憾的是并不能在老师手下学习,反而是在老师口中说的那种传统的,刻板的教学方式中度过了我的大学三年。不过其实我觉得老师描述的学生与老师的关系就好比是健身学员与健身教练之间的关系,这一点,还是要有一点补充:我们学生必须要取得一定的学分,获得一定的成绩,然后才能毕业。但是由于你在健身学员这个关系中是处于消费者模式,也即是上帝模式,所以说你是完全可以不理会教练不去上课的,虽然最后你获得的只是一个生了巨多累赘的身心,但是没有人会追究你的责任,而教育体制不一样!你如果毕不了业,那么你就获得不了任何的肯定了。当然,如果健身房这种地方还有毕业证书这一说,那当我没说


我十分同意,老师在书中说的给授课老师和助教的建议。另外我发现我们《实时控制软件设计》这一门课,老师或多或少的遵守着邹欢老师说的这一套规定。比如说简明公开的规则课堂打分制度,以及很有可能会挂的危险,另外还有各种成绩的加权计算,或多或少都有着这本构建之法中推荐的方法的影子。另外也有循序渐进激励不断总结阶段性成果等先进优秀的理念。首先 个人博客Github账号,这两点我们课堂老师贯彻的非常彻底。还有就是,对于打酱油的同学绝不姑息,这一点我觉得做的非常的好。“这门课不水”,这是我在陈志平同学的博客的评论里面看到的。我觉得用来总结这门课是最好的啦。期待我们后面也会按照更多的邹欢老师推荐的教学制度来。还有我很喜欢老师总结的这一句:**我们学生所需要的环境,是一个自然的、有批判精神的、学习的环境。还有就是在第13页中:“有些系领导会说没有资金支持助教,这是无能的借口,非不能也,是不为也”。我觉得这句话,讽刺中带点幽默,相当有趣。


Chapter 1

要点如下表所示:

  • 程序=算法+数据结构
  • 软件=程序+软件工程.
  • 软件企业=软件+商业模式

画张图就清晰多了:

具体来说是让我认识到了以下几个概念:源代码管理,配置管理,质量保证,软件测试,需求分析。程序理解,软件维护,服务运营,合称为软件的生命周期。另外"将软件与程序分隔开来的就是用户体验 " 这个理念,直接将我们平时写的代码无情的归类到程序,心累。

软件系统是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护的过程。包括:需求分析、设计、构建、测试和维护这几个过程。

软件一般具有下面几个特性:

  • 复杂性(所以钱多话少,因为没时间、特别忙)
  • 不可见性(对于大多数人来说计算机部分硬软件)
  • 易变形(每个bug都是一顿大餐)
  • 服从性(成就感的来源)
  • 非连续性(。。。)

在软件开发的四个不同阶段:玩具阶段,业余爱好阶段,探索阶段,成熟的产业阶段。我现在大概处于玩具阶段到业余爱好阶段之间更偏向于业余爱好阶段。希望可以尽早的度过业余爱好阶段,进入探索阶段,成熟产业阶段,那肯定是工作以后的事了。

另外由于我明年就要去计算机学院博士生,而且走的领域大概就是计算机体系结构/云计算/网络安全这三个里面选一个(体系结构可能性比较大),我这才知道原来体系结构是偏向于实践的领域,我之前一直以为计算机体系结构是要构建计算机的底层,抽象于硬件,但是低于或等同层于操作系统。想不到居然是偏实践的领域啊!!!对于计算机科学与软件工程,我一直以来都是用研究与应用两个观点来区分,现在看来倒是与老师的观点不谋而合。


第一遍读老师的书并没有太深太大的感触,所以只能通过练习来加深印象。迫于时间所限,我写了第一题。至于博客什么的早就有了。版本控制软件,我一直以来都只知道GitHub。貌似还有GitLab吧。还有第六题的Dijkstra这个人,他不是图的广度优先算法里面的缔造者吗?他这个名字当年考研的时候深恶痛绝的抄了几遍才记下来!

//第一题,用于给小朋友随机发放四则运算的题目(vector是之前的,不管不管)
#include <iostream>    
#include <string>
#include<vector>
#include <ctime>
#include <stdlib.h>
using namespace std;
int main()
 {

     srand((unsigned short)time(0));
     int num=30;
     string d="+-x/";
     while(num--)
     {
         int a=rand()%50+1;
         int b=rand()%20+1;
         char c=d[rand()%4];
         cout<<b<<" "<<c<<"  "<<a<<"  ="<<"  ";
         switch (c)
         {
             case '+':
                 cout<<a+b<<endl;break;
             case '-':
                 cout<<a-b<<endl;break;
             case 'x':
                 cout<<a*b<<endl;break;
             case '/':
                 cout<<a/b<<"···"<<a%b<<endl;break;
         }
         int delay=10000;
         while(delay--)
         {
         }
          } 
}

Chapter 2

第二章的内容,大部分我都能看懂,但是连在一起之后就是似懂非懂。大概是因为我没有真正的负责过一个软件的设计与开发以及维护吧!毕竟我是一个大部分时间都在写程序而不是软件的人哪!!而且我的本命语言是C++/C以及Python。对于接近硬件底层的C#不是很了解。而且对于用集成工具平台,我也没经验。大多数时候都是用编辑器编写之后,再用gcc或者是mingw来编译。不过在2.2后半段提到的效能分析工具,这个我大概有了一点想法,说不定可以自己写一个!但是时间比较紧迫,所以这先不写了。我应该只能写一个代码注入的效能分析。其实很简单嘛,在每一个大括号后面加一个对全局变量的自增操作。那么就可以直接用全局变量来统计这个函数调用的次数。另外,在2.3个人开发流程中了解到的那个PSP概念,让我有了一个对软件开发的整体流程的观念,一定程度上弥补了我先天不足的缺点。这个部分我后面还会继续再看。另外,对于大学生和软件工程师两个群体的调查,我发现确实工程师在需求分析以及测试两方面明显要花更多的时间。至于原因,那是显而易见的:软件工程师不只是玩玩而已,他们要对用户负责,而大部分的大学生都是自娱自乐,属于自high型。而且大学生代码编辑能力普遍不够,所以说更多的时间都会花在代码编写上的。

第二章,实践部分,我也就写个题目来巩固一下吧。

// wc.exe 只能统计行数,单词数目,字符数目
#include <iostream>    
#include <string>
#include<vector>
#include <ctime>
#include <stdlib.h>
using namespace std;

int main()
 {
     string s;
     getline(cin,s);
     int word;
     int line=1;
     int alpha;
     for (int i = 0; s[i]!='\0'; ++i)
     {
         char &c=s[i];
         if (isalnum(c))
             ++alpha;
         if (c==';' ||  c=='\n')
             ++line;
         if (isalnum(c)&&(!isalnum(s[i+1])))
             ++word;
     }
     cout<<"一共有 "<<line<<"  行,有  "<<word<<" 个单词,有  "<<alpha<<" 个有效字符"<<endl;
return 0;
}

另外在2.4.1里面我也有了几个算法的想法。

首先输出一个整数数组中子数组最大的值。

1、 这个的话直接使用一个对数组的循环遍历,遇到负数就跳过不管

2、 遇到正数就直接加到一个累加器中

3、 最后输出就可以了。

字符串操作。

1、 我们可以用字符串类型来定义一个接受这个字符串字面值。

2、 保守的办法是直接用下标配合字符串类型的求字符串长度内置函数size(),循环遍历从string[s.size()-i-1开始输出]

3、 另外一个稍微冒险一点办法,因为没有实现所以不敢说对不对:那就是用迭代器。从尾指针开始一路往回读,不知道能不能实现。当然,如果用指针直接指向s[s.size()-1]然后用指针的自减操作读到begin()的话那确实可以!

正文之后

读书完毕,关电脑,睡觉~~ 咦 先把作业交了!!

原文发布于微信公众号 - 工科狗和生物喵(gh_3507b116a1f8)

原文发表时间:2017-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ACM算法日常

如何应对“智力型”的算法面试题?

“给你a、b两个文件,他们各存放50亿条URL,其中每条URL各占用64字节,内存限制是4G,请你编写代码找出a、b文件中相同的URL”。这是某家大公司在201...

28220
来自专栏程序员的知识天地

自学Python找不到工作?吃鸡半小时,编程五分钟,劝你还是放弃吧

Python发展可以说是如日中天,更多的人选择学习Python,也更多的人开始关注它,从这些关注度来看,我发现关注度最高的还是Python的就业前景是怎么样的,...

14330
来自专栏知晓程序

你口算能力有多强?这款小程序,就来考考你 | MINA 奖 #16

背乘法口诀、圆角分换算……多亏了这些「童子功」,才得以让我们在买东西结账时,往天上一看,就能给出准确金额,amazing!

8910
来自专栏LET

我的面试心得:面试官视角

15760
来自专栏java一日一条

不拼颜值的编程世界你靠什么上位?

随着功能需求的逐步升级,编程语言的更新换代也变得越来越频繁,近年来编程语言的种类更是已经突破了600大关。在前浪不断被拍在沙滩上的编程语言世界里,斑斑却发现每一...

9010
来自专栏黑泽君的专栏

传智播客C++学习感悟

楼主在本文中将说到C++的学习方式以及亲身经历。本文内容不仅仅限于C++学员,对于那些有意向来学习技术的、或刚来不久、或处在迷茫期的同学可以一同看下,希望在这里...

27520
来自专栏大数据架构师专家

为什么你一直在找方法,却依旧学不好?

有个小伙伴想学习python,让我给他推荐书籍,闲来无事就给他推荐了书籍,并告诉他先学哪本后学哪本,甚至连哪几章不用看,哪里是重点,看的时候需要补充哪些...

14030
来自专栏大数据文摘

算法帝国里的牛人们:布尔

18750
来自专栏非著名程序员

2018 互联网人恋爱调查报告:程序员最稳定,产品经理 X 生活频次奇高

今天在浏览新闻的时候,突然间看到了,今年双 11, 百度发布了一份《2018 互联网人恋爱调查报告》。是专门对泛西二旗地区的互联网从业人员的恋爱状况进行了调查。...

13820
来自专栏北京马哥教育

为什么零基础自学编程者,大多半途而废?(知乎)

我认为,可以分为两种。 第一种人,他们盲目追随潮流、追求新鲜事物,缺乏主见,没有毅力。 他们认为编程是一件轻松愉快且高贵冷艳的事。 他们开始学编程。 一段时间...

52480

扫码关注云+社区

领取腾讯云代金券