[抛砖引玉]我不认同“程序=算法+数据结构”

zyl910 2004-04-03 12:02:22
我不认同“程序=算法+数据结构”


我以为:

软件=程序+文挡
程序=代码实现+功能实现
代码实现=微观级代码编写+宏观级代码框架
微观级代码编写=算法+数据结构
宏观级代码框架:结构化程序设计、面向对象程序设计、设计模式(类/接口的划分,继承关系……的一些技巧)
功能实现:对 编程平台、操作系统/BIOS、CPU指令/IO端口 的熟悉/理解

或者是这样的树型结构:
0 软件
1 ├程序
2 │├代码实现
3 ││├微观级代码编写
4 │││├算法
4 │││└数据结构
3 ││└宏观级代码框架
2 │└功能实现
1 └文挡


=========================================================================

很多界面效果的原理是很简单的:坐标计算+事件响应+绘图操作

可是有很多人受拖拉控件的设计思想影响
就是想不到这儿来

现在的编程书籍好像只有三大类:
1.算法、数据结构
2.常用编程工具(VB、VC、Delphi……)的基本使用、应用层次的数据库开发
3.专业方面:Win32 API、计算机图形学、数字图像处理……

从来没有一本书联系起来讲
空白区域太多了
(比如第二类书,只讲了事件在什么时候触发,没说过可以怎样处理)

坐标计算:数学功底是必需的
事件响应:取得:控件的事件时一定要弄清楚地。有时为了一些VB没有封装事件(如鼠标滚轮),就得用API了
处理:对于某些复杂的界面交互效果(如Word所见即所得的编辑环境),那就是要很好的算法/数据结构水平
绘图操作:VB的绘图操作太鸡肋了,Win32API的GDI函数集是唯一选择


现在外面的关于API的书要么讲单个函数什么用、有么只抄例子,很少有系统讲解的
Win32 API本来是就是一些底层函数,单个单个用没什么大作用(可VB连这些基本功能都没完全封装),只有配合使用才有威力
那些只抄例子只是一些少见的招式,只能唬唬菜鸟。

当你看到系统讲解类的书的时候,千万不能犹豫。虽然看起来很枯燥,但这是修练内功

=========================================================================
如果要我写书的话:


《VB基础全盘掌握》
《VB专业开发:数据库》
《VB专业开发:网络》
《VB专业开发:Win32 API》
《VB专业开发:数字图像处理》


-------------------------------------------------------------------------------------
《VB基础全盘掌握》

第一部分 基础语法
一、从零开始
.1 VB简介
.2 传统程序(QB)编写方法
.3 MsgBox与InputBox
二、数据类型与运算符
.1 常量与变量
.2 数据类型一览
.4 算术运算符
.5 关系运算符
.6 逻辑运算符
.7 枚举
三、程序流程控制
.1 顺序
.2 分支
.2.1 单行If语句
.2.2 多行If语句
.2.3 Select语句
.3 循环
.3.1 For语句
.3.2 While语句
.3.3 Do语句
.4 过程
.4.1 Sub语句
.4.2 Function语句
.4.3 访问权限
.4.4 ByRef与ByVal
.4.5 可却省参数
.4.6 *不限定参数个数
.5 *非结构化流程控制
.5.1 GoTo与标号
.5.2 GoSub
四、字符串
.1 基本字符串处理(联接/字符串常数)
.2 查找和比较
.3 字符串截取
.4 Chr与Asc/大小写转换
.5 格式化字符串
.6 *ANSI+DBCS与UniCode
五、数组
六、结构体
七、调试技巧/异常处理
八、文件

第二部分 可视化编程
九、OOP精神
十、窗体
十一、基础控件
十二、PictureBox与图形绘制
十三、ActiveX控件
.1 通用对话框
.2 Windows通用控件
十四、杂项
.1 拖曳
.2 自适应窗体大小
.3 拆分条
.4 列表同步
.5 历史纪录
第三部分 高级内容
十五、编译预处理/工程属性
十六、VB的面向对象设计能力
十七、工程组与ActiveX Dll
十八、编写自定义控件(ActiveX Ocx)
十九、编写外接程序
【附录】
一、MSDN的使用


-------------------------------------------------------------------------------------
《VB专业开发:数字图像处理》

零、入门须知
.1 为什么这么慢
.2 API/代码量
.3 怎样进行算法优化
.4 位运算心法
一、基础概念
.1 什么是图像
.2 色彩格式
二、初入DIB
.1 DIB的构成
.2 位图信息
.3 DIB位图数据
.4 DIB操作函数
.5 简单DIB使用
三、模拟指针
.1 VB6的隐藏函数
.2 数组的本质
.3 简单的模拟指针
.4 实用的模拟指针
四、深入DIB
.1 DIBSection的特点
.2 DIBSection的使用
.3 将DIBSection封装成类
五、点处理
.1 将彩色图转为灰度图
.2 亮度调整
.3 对比度调整
.4 通用色彩通道调整
.5 色彩直方图
.6 透明合成
六、卷积处理
.1 卷积处理的特性
.2 模糊
.3 锐化
.4 中值滤波
七、缩放处理
.1 最临近插值
.2 双线性插值
.3 三次卷积插值
.4 关于缩小的问题
八、数字形态学
.1 腐蚀与膨胀
.2 开与闭
.3 高级形态学运算
.4 *二值图形态学运算
九、色彩抖动(半色调)
.1 有序抖动
.2 扩展的的有序抖动
.3 误差分散
.4 带调色板的DIB
.5 八叉树
十、文件格式
.1 PCX文件格式
.2 GIF文件格式
.3 GIF_LZW压缩算法
.4 实际GIF_LZW压缩算法

...全文
633 104 打赏 收藏 转发到动态 举报
写回复
用AI写文章
104 条回复
切换为时间正序
请发表友善的回复…
发表回复
daisy8675 2004-04-16
  • 打赏
  • 举报
回复
今天好好看了浮雲說的話。說的真好。

但是金山詞霸我到沒有覺得那麼推崇。最著名的bug就是貼版能貼英文但是不能貼中文。


缺少“算法、数据结构”,就只能是网络上常见的API功能演示类的小程序
這句話說說的最好的。看過某著名人世說過:你寫100個小程序,但是你做大的prj並不是100個加起來的。
shuanyu 2004-04-15
  • 打赏
  • 举报
回复
倒了,两个字
陈年椰子 2004-04-14
  • 打赏
  • 举报
回复
看了, 有感触,

回贴超过1个字的,都很有见地
lsr66 2004-04-14
  • 打赏
  • 举报
回复
有争论就说明在思考,有思考才会进步,这样挺好.
Abyss-Xu 2004-04-14
  • 打赏
  • 举报
回复
不错
captainivy 2004-04-14
  • 打赏
  • 举报
回复
画画的人夸自己又会国画又用水彩还用蜡笔


呵呵

你一定一笑而过
captainivy 2004-04-14
  • 打赏
  • 举报
回复
写程序,不妨把自己看成画画的

固然画不出第二幅蒙娜莉莎

也要梦想着开个画展

我们眼中的世界不是大师眼里的世界
所以尽管大师笑我
我觉得有理由

我无所谓


我用心去写

我自娱自乐

大家别k我

我胆小,谢谢。
daisy8675 2004-04-14
  • 打赏
  • 举报
回复
我認識國外回來的人口氣都沒有你這麼傲。

個人意見,偶還是保留。
個人依舊同意算法+數據結構。

同時軟件工程是很重要的。這點偶已經有苦說不出很多次了
fuyun 2004-04-14
  • 打赏
  • 举报
回复
我所说的并非是针对什么算法而言,"程序=算法+数据结构"是描述程序的来源,是人的思维在计算机上的再现,是一种抽象的角度,也就是说它涉及的是程序的理论构成.当然要完成一个程序需要多方面的具体技术上的考虑,但这并不能替代程序是人的思维和计算机技术的结合.而大家所说的多种实际技术是为了实现这一过程而存在的.例如面向对象设计,它是一种把数据模型和数据之间的关系整合的一种设计思考方法,但他仍需要考虑现实问题的模型和现实问题的处理过程,并不能脱离"程序=算法+数据结构".
另一点,有的人说"程序=算法+数据结构"过时,我认为不是过时,而是我们应该更加强调,如果说过时,我认为除非人们的提出问题和分析问题的思考方式变了,它才真的过时了.
zyl910 2004-04-11
  • 打赏
  • 举报
回复
回复人: daisy8675(莫依) ( ) 信誉:100 2004-04-03 19:57:00 得分:0


to zy910:

其實你是vb 太好了吧...這裡面好象真的算法很少。
但是當你接觸別的語言的時候,當你以後做到很深的時候,你就明白算法的重要性了。

現在你才學c,說這話太過早了


===============================================================================


只是现在学校开C语言课而已
C语言几年前就自学完了
现在基本上常见的编程语言都会

我的大致学习经历:
1998年学QB、C、Pascal、数据结构等传统编程内容
1999年兴趣转为“功能实现”方面的编程技术,如中断调用、直接写屏……
2000年开始转向Windows平台编程(VB)
2001年为了更好地学习Windows平台编程(SDK),不再局限VB类书籍(C++、Delphi)
2002年为了实现更完美的界面效果,学习计算机图形学和数字图像处理
2003年学习汇编、DDK,重新认识了底层世界

前段时间看了李维的《VCL架构分析》,重新认识到了除了算法与数据结构外,还存在其他编程领域
上面的分类是这几天跟同学讨论编程范围时自己总结的



===============================================================================

回复人: fuyun(浮云) ( ) 信誉:100 2004-04-09 09:18:00 得分:0


在上面我已说过"程序=算法+数据结构"的来源和它所代表的意义,我所说的就是这个公式在产生时就是一个抽象的概念,您好象把一些具体的技术都加入到里面了,实际上N.Wirth在提出这个公式时并没有把一些具体技术加进去,而这些具体技术实际上是为问题的数学模型(数据结构)和解决问题的方法(算法)而存在.
如果用具体的方式来作这个公式的话,那么我觉得应该是这样,但却不是简单的相加.
程序(具体的计算机程序)=(问题的数学模型----->计算机的存储结构)+(解决问题的思维------>逻辑思维在计算机上的映射)
计算机的存储结构的实现需要硬件的体系和软件的数据支持平台
逻辑思维在计算机上的映射则需要软件平台(包括开发工具、运行支持平台等具体的东西)以及一些具体技术。



===============================================================================

对于纯粹算法性的问题,这种设计思路是对了
但对于学习编程来说,这种设计思路有很大的局限性

我这种分类方法是根据程序设计的范围来分的
主要是想让别人看看程序设计的范围到底有多广
算法数据结构、编程语言语法、简单的编程平台的使用 不是唯一的编程范围

现在存在的某些问题:
一、某些人只注重算法与数据结构,没接触过功能编程,只能处理纯算法型的问题
二、某些人只停留在编程平台的功能,对于某些特殊的界面效果,不知道根据数学、算法、数据结构的知识自己编控件。
三、许多人的程序风格不好,更谈不上代码框架,不利于写大型程序


比如金山词霸:
屏幕取词是靠拦截API实现的,这是“功能实现”的巅峰
词库的数据量极其巨大,这是“算法数据结构”的巅峰
金山词霸能够通过COM接口嵌到Office的工具栏中,至少从这一点就表示“宏观级代码框架”的设计相当优良


这三者是联系统一的:
缺少“功能实现”的知识,那么只能处理纯粹算法型的问题
缺少“宏观级代码框架”的知识,代码不易看懂、缺乏弹性
缺少“算法、数据结构”,就只能是网络上常见的API功能演示类的小程序


比如编写实际的图像处理程序:
1.用汇编写,不浪费一个指令周期
2.多数的计算公式是标准的,无法从算法数据结构角度优化;只有少数的特殊情况开可以从算法数据结构角度优化
3.可以利用数学知识简化公式
4.尽量查表,减少重复运算
5.根据操作系统,尽量直接写位图数据(DOS下的直接写屏、Windows下的DIB)

最重要的优化途径是第五条,可让其他优化途径和起来的优化效果忽略不计
HashCodeWithJava 2004-04-10
  • 打赏
  • 举报
回复
楼住的书我是肯定不会卖的
taosihai1only 2004-04-10
  • 打赏
  • 举报
回复
楼主什么时候出书发贴告诉一声!最好是送本书。呵呵。。
fuyun 2004-04-09
  • 打赏
  • 举报
回复
在上面我已说过"程序=算法+数据结构"的来源和它所代表的意义,我所说的就是这个公式在产生时就是一个抽象的概念,您好象把一些具体的技术都加入到里面了,实际上N.Wirth在提出这个公式时并没有把一些具体技术加进去,而这些具体技术实际上是为问题的数学模型(数据结构)和解决问题的方法(算法)而存在.
如果用具体的方式来作这个公式的话,那么我觉得应该是这样,但却不是简单的相加.
程序(具体的计算机程序)=(问题的数学模型----->计算机的存储结构)+(解决问题的思维------>逻辑思维在计算机上的映射)
计算机的存储结构的实现需要硬件的体系和软件的数据支持平台
逻辑思维在计算机上的映射则需要软件平台(包括开发工具、运行支持平台等具体的东西)以及一些具体技术。
pigpag 2004-04-08
  • 打赏
  • 举报
回复

我总觉得话题好像不同也

//我觉得任何正常的程序的产生(我是把空操作的程序除外)都必须要确定的是它要做什么,如果一个程序产生的目的是不明确的,这个程序只能是一种代码游戏

这个当然同意,程序当然要完成任务,当然要算法和数据结构作为支持,这些都不是问题啊。我的意思是说Program = 算法 + 数据结构,而Application > 算法 + 数据结构。完成整个应用程序开发,单考虑合适的算法和数据结构当然是必要的,但不仅需要考虑这些。我就是这个意思。
fuyun 2004-04-08
  • 打赏
  • 举报
回复
to pigpag(噼里啪啦 - 人在广州,身不由己)
首先要说的是,我说的关于数据结构的两个问题的答案,是数据结构教材中的内容,而教材中第一章所作的介绍已经告诉我们关于数据结构的抽象的概念,更具体的讲它是人们把现实世界的实际问题交给计算机来解决的一种思路,也是人们在解决问题的一种思路,就是先提出问题,后分析问题,最后解决问题,而逻辑结构正是人们提出的问题,存储结构是人们与计算机的交流方式,算法则是人们解决问题的方法.
就是说我们不应该把思路总是放在计算机上,总是以计算机的处理方式来思考,最终解决问题的还是人.
另一点我所说的程序并非单纯是指A Program 或An Application,而是计算机是用来做什么的.
您所说的Program好象只是单纯的Programe,我觉得任何正常的程序的产生(我是把空操作的程序除外)都必须要确定的是它要做什么,如果一个程序产生的目的是不明确的,这个程序只能是一种代码游戏.
daisy8675 2004-04-08
  • 打赏
  • 举报
回复
有些具寒,拜托各位,有點自己的主見好吧,你們中間好歹有人做多年程序是吧
不是大斑竹就什麼都對。

拜托各位學習好語言,有上四年的經驗以後再體會今天說的話
zhoulove8526 2004-04-08
  • 打赏
  • 举报
回复
我学习来了,如果楼主出书的话我一定买,^_^
pigpag 2004-04-08
  • 打赏
  • 举报
回复
TO fuyun(浮云)
  我了解你的想法,也许不是我们对“算法”和“数据结构”这两个词的理解不同,而是对“程序”这个词有不同的理解。
  换成英文就没问题了A Program = Algorithms + Data Structures,
  而不是An Application = Algorithms + Data Structures。

换成英文说更明确写,因为Application和Program翻译成中文都是“程序”。

抛砖引玉

End
paocai2003 2004-04-08
  • 打赏
  • 举报
回复

如果你出书.我一定买:)
mmcgzs 2004-04-08
  • 打赏
  • 举报
回复
加载更多回复(83)
本课程是在《数据大脑平台技术规划解决方案》和《数据大脑平台技术设计解决方案》课程基础上,重点解决智慧城市建设的数据质量核心问题,为城市大脑建设提供标准化、规范化数据,通过数据管控平台实现数据治理,真正做到数据可控、可用、可审计。面对每个独特的项目主体,我们在数据管控工作中经常遇到如下困惑: 1、面对数据来源多,数据壁垒严重,如何平衡数据干系人关切,建立数据大脑数据管控平台;2、面对复杂的项目环境,如何规划设计智慧城市数据管控体系,形成数据管控组织、评价考核等闭环管理机制,有效减少平台落地障碍;3、面对数据多样性及异构,如何设计元数据结构,建立数据标准,合理制定数据质量管理要求;4、如何根据业务需求,构建数据安全分级管理机制,成立数据管控组织,明确数据权责清单;5、如何规划设计数据管控工作流程,串联数据管控主导方,参与方,数据提供者,数据使用者。 针对以上数据管控共性问题和障碍,抛砖引玉,以期帮助大家提升数据治理规划设计能力和减少项目推进阻力,从而提高数据利用率和城市数据资产质量,为有效发挥数据价值提供保障。  为了更好的学习本课程并达到良好的效果,建议同时学习智慧城市《数据中台》、《售前管理》、《行业方案》和《城市大脑》系列相关课程,并请持续关注后续课程,谢谢。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧