• 2005-05-11

    求导与抽象

    Tag:向上走

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/1181182.html

    这两天写了一个边缘提取算子,用来从图像中提取边缘。写程序没用多长时间,我把大部分时间奉献给了学习过程,至少我得知道边缘提取的原理大概是个什么样子。

    在数字图像处理中,很多时候处理的都是灰度图像。理想的情况下,相邻两个点的灰度值不同,我们就可以认为找到了边缘,但实际情况往往没那么简单。简单一点的情况是,两个部分边缘的灰度是逐渐过渡的,也就是说在这个区域内,相邻点的灰度都是在变的,那我们怎么知道,变到哪是个头。如果把灰度视作一个函数,通过对这个函数求导,我们可以清楚看到这区域内的灰度变化。没错,求导,很熟悉吧!应该属于大学一年级的课程。按照我们领导的说法,我们终于到了大学一年级的水平了。之前的开发,用到的数学知识顶多是高中文化水平,所以,也难怪很多人说高中生作程序员一点问题都没有。

    和我一起回忆一下吧!对一个线性函数(y=ax+b)求导得到的是什么?斜率(a)。直线上,各个点的横坐标和纵坐标都不相同,每个点都在变,而求导之后得到的斜率却是不变的。这就是一个抽象的过程:从变中找不变。

    软件开发中一个很重要的能力就是抽象。通过抽象,我们就可以忽略一些细节,找到共性。市面上的很多框架可以看作是从作者之前开发的众多应用中抽象出来的。理解了抽象,再来理解具体的东西,相对就要容易许多,就像理解设计原则之后,再来看设计模式一样。学习具体知识相对容易,理解其背后的抽象却需要花很大的精力,毕竟很少有人专门把这些东西整理出来,因为那需要人站在一个更高的高度,这也就是教编程的书多、教作程序员的书少的原因。

    对抽象,我们还可以再抽象,我们对一阶导数还可以再次求导得到二阶导数,这个过程可以无穷的做下去,学数学的人愿意研究无穷,而学计算机的讲究有限,这也就是MDA中提到的元模型只到M3之后就没了下文,剩下的以此类推。

    难怪数学是很多学科的根本,因为它可以揭示很多道理。只是很少有好的老师能领悟到这些并把它有效的讲给学生听,所以,我们更多的时候面对的是枯燥。“世有伯乐然后有千里马,千里马常有,而伯乐不常有。”

    分享到:

    历史上的今天:

    Make雕虫技 2004-05-11
    引用地址:

    评论

  • 回chenxiujie:很多编程不需要抽象吗?^_^



    赞一个:这就是一个抽象的过程:从变中找不变。

  • 尽管计算机就是一个抽象集合,可是应用领域的编程很多都是不需要建立抽象模型的。
    回复chenxiujie说:
    模型是抽象的东西,我们完全可以不考虑抽象只做具体的事情,但是抽象可以提升我们看问题的高度。如果只是作一个编码者,模型是一个无所谓的东西,只是不知道有多少人愿意徘徊在最低的层次。
    2005-05-16 18:19:39
  • “之前的开发,用到的数学知识顶多是高中文化水平,所以,也难怪很多人说高中生作程序员一点问题都没有”深有同感。可能大学讲的更多是关于计算机的知识吧。另外,我想听听你对抽象的程度的把握是怎么样的?就是说抽象到一个什么程度比较合适
    回复tracy说:
    在编程上,我对抽象做到什么程度没有一个量化的标准,做到让自己觉得舒服就好。如果你想做进一步的讨论,可以给我发mail。
    2005-05-12 17:18:45