回顾我学习编程的经历_分享我的大学编程经历

其他范文 时间:2020-02-28 01:30:01 收藏本文下载本文
【www.daodoc.com - 其他范文】

回顾我学习编程的经历由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“分享我的大学编程经历”。

回顾我学习编程的经历

1997年家里有了电脑。最开始装的是DOS6.22+Windows3.2。记得最开始只会输入“win”进入Windows 3.2,但是进去后不知道怎么执行程序。后来自己找到个苯办法:右击鼠标弹出快捷菜单,然后点击打开。过了好久才知道鼠标有左键双击这个功能的。

玩了几天Windows 3.2之后觉得应用程序太少了,不好玩,然后找了本DOS命令的书来啃。成就是把我哥哥藏在某个目录下的游戏找出来了。还记得那游戏是大富翁3,好怀念。后来很快升级到Windows95。开始时根本不适应新的界面形式,于是什么地方都点以下,Windows 95自带的帮助不知道看了多少遍,这才知道Windows 95怎么使用。后来才知道有《电脑报》杂志的,而且Windows 95方面的书开始多了起来,感觉自己摸索实在是太辛苦了。这不过那段经历对我的作用很大,基本上学会了通过看软件的界面就会使用该软件,顶多看一下帮助文档。

随后的日子就是看《电脑报》,玩玩《电脑报配套光盘》上的软件,把操作系统逐渐升级到了Windows 98SE。

到了1998年,发现自己对PC机的使用很熟悉了,觉得玩软件使用没多大意思。那时开始流行作网页,所以学习了HTML。HTML标记很简单,一下子就学会了。后来看了一下JavaScript,虽然网络上代码很多,但都只讲应用不讲原理,感觉自己根本没学到东西,于是决定学习通用编程语言。

刚学QB时,总是觉得自己无法理解数据类型。所以最开始的两个星期都在写进制转换程序,总共写了不下二十个版本,总算理解数据类型,特别真正理解了String的作用。经别人推荐看了《数据结构》,顺便学习了Pascal和C语言,感觉其中的很多算法完全可以自己推导出来,而且纯算法也没什么好玩的。后来的那几年主要在学习DOS平台编程,学习DOS/BIOS中断调用。

由于发现DOS下没有支持GBK的文本查看软件,所以决定自己写一个。GBK编码理解了,GBK字库搞定了,可就是文本绘制速度太慢了。查了查资料,发现了直接写屏(写显存)这种方法。VGA 12h下的直接写屏非常复杂,我花了很长时间才弄懂,而且自己写的直接写屏代码速度还是很慢(主要是因为那时还不会汇编优化,且还不知道CPU访问显存很慢)。后来突然发现VESA SVGA标准,能提供高分辨率高色彩位,而且使用换页方式操作显存很方便。所以我有很长一段时间在玩SVGA,特别是发现SVGA允许改变屏幕图像数据在显存中的偏移,这样可实现双缓冲换页用来做高速的动画。从此感觉到界面是画出来的,当时计划写利用SVGA写一个能做出类似Windows那样图形界面操作的函数库。在写该程序的时候终于明白了《数据结构》的作用,由于当时没有学过(没听说过)计算机图形学和数字图像处理,一切都是自己摸索,花了好大功夫也无法做出来。

2001年春节,哥哥拷来《真·侍魂》这个格斗游戏,于是天天跟哥哥PK。后来在《电脑报》上找到一篇文章,介绍如何修改该游戏的存档。由于该游戏的存档保存在注册表中,是一个二进制字段,修改起来很不方便,所以萌发了自己写个游戏修改器。最开始是使用QB编写的,生成reg文件,再让注册表编辑器加载该reg文件。但该方案又一个重大的缺陷——注册表编辑器会弹出并询问是否加载该reg文件,看起来非常不专业。怎么办?只能使用Windows下的编程工具。我选择的是VB 6.0,将MSDN中的关于VB的内容看了一遍,没有找到我需要的函数。后来在书店翻书,才知道要访问注册表,需要调用advapi32.dll提供的注册表API。终于知道dll到底是什么意思,这才知道Win32 API就是操作系统提供的接口,类似DOS中断,我从此转向Windows编程。

在学习VB中,有两本书对我影响很大。其中一本是Bruce McKinney著,希望译的《Visual Basic 5.0核心技术》(《Hardcore Visual Basic version 5.0》)。此书是我真正认识到了什么是VB的灵魂,如何利用VB带来的新的语法特性,如Unicode编码的String、类模块等,是

Roman提高VB编程能力,提高代码质量,提高编程思维不可多得的好书。另一本是Steven

著,陈志远译的《Visual Basic Win32 API编程》(原名《Win32 API Programming with Visual Basic》)。该书写得非常不错,但就是讲得比较深入,连进程、线程、内存管理都讲了,所以当时看的不是很懂,但这本书还是使我系统地认识了Win32 API体系。就是这两本书使我脱离了只会拖拉控件的VB程序员行列,使我认识到:就算现在是图形界面时代,就算有RAD开发工具,编码仍然是重要的、不容马虎的;调用Win32 API能够使用操作系统提供的底层功能来实现编程工具没提供的功能。

由于关于Win32 API的书籍极其稀少,而且当时我不懂MSDN的平台SDK资料就是讲Win32 API的。所以那年从网络上下载了大量的源代码,然后分析其到底是怎么编写出来的。幸好有上述两本书的存在,使我不致于面对代码时束手无策,语法、设计方面的东西参考《VB5核心技术》,Win32 API方面的东西参考《VB Win32 API编程》。那段时期阅读了大量的代码,对我的编程修养有了极大的提高,是我清楚认识了Windows编程究竟是什么,特别是锻炼了阅读代码的能力,可以从上万行代码的Windows程序中迅速找出其关键技术是什么。

在那段时期里,我最感兴趣的是界面编程。编程工具提供的控件都是Windows标准样式,而网络上那些华丽的界面控件是怎么做出来的呢?后来我知道了:凡是Windows基本控制项(Button、Menu、ListBox等)都支持所有者自绘(Owner Draw);凡是Windows通用控制项(TreeView、ListView、Toolbar等)都支持自定义绘制(Custom Draw)。绝大多数界面控件都是利用Windows控制项的自绘功能实现的,还有一小部分是自己从最底层编写的,只要处理好用户交互后的界面绘制操作就行。“界面是画出来的”果然是至理明言。

2002年初,我发现了csdn论坛。果然有交流才有发展,在csdn论坛讨论编程问题时我发现了自己以前许多没有注意到的问题,特别是学会了MSDN的使用。同时在网友的推荐下看了不少经典书籍,如Charles Petzold的《Windows程序设计》,侯捷的《深入浅出MFC》、李维的《VCL架构分析》等。就是这些书让我真正进入Windows程序设计行业,开始注意到程序框架、代码结构的重要性(PS: 我强烈建议初学者不要一开始就看《设计模式》!如果你没有写过上万行代码的经历话,《设计模式》的作用微乎其微,反而会给你的思想带来复杂性,极易造成设计过度!),见识到小小的几行内嵌汇编代码的威力。那年学了基本的C++语法及Object Pascal语法,但是由于认识到Windows程序设计最核心的是Win32 API,而不是MFC、VCL,所以一般还是用VB,顶多用VC++写SDK程序。

那年在网友的推荐下看了Matthcw Curland的《Advanced Visual Basic》,学会了通过修改SafeArray结构来实现模拟指针直接访问内存,学会了修改了对象的VTable指针+几条汇编指令实现函数指针„„但当时只是当成基础研究,没想过有什么作用。顶多在玩VTable时理解了面向对象技术到底是怎么实现的,总算理解了当初Bjarne Stroustrup是怎么写出“带类的C”的预编译器的。

直到有一天,我在书店掏到本《Visual C++ 数字图像处理》,终于发现在Windows下也可以直接访问位图数据来做高速的图像处理。这时前段时间对《Advanced Visual Basic》的学习终于派上了用场,就算是VB,利用SafeArray模拟指针直接访问位图数据也比SetPixelV快200倍。于是我将将那本书上的所有代码都转成VB,并尝试优化算法。特别那时与一位网友讨论VB执行速度,他是使用VC++6.0编译器+内嵌汇编优化(无MMX加速。那时我俩都没达到理解MMX等并行指令的层次)写图像处理程序,但是我纯用VB 6.0编译的程序的速度与他的相差无几(主要是算法优化的好)。通过那次讨论,我开始理解计算机体系,知道如何正确的优化程序。

在看《数字图像处理》的同时,我找了本《计算机图形学》来看。第一印象就是,《计算机图形学》要求的数学水平比《数字图像处理》还高得多。就算到了现在,我都不敢说我看懂了《计算机图形学》。但是《计算机图形学》的许多算法、思想已经深深的烙印在我的脑海里。特别是其中的“色彩光度学”,知道了CIE XYZ模型可以完全的表示人眼能识别的颜色,能方便的将可见光光谱转成常用颜色系的颜色值。再次深入认识到“界面是画出来的”,《数据结构》用于写底层数据管理,《计算机图形学》、《数字图像处理》用于写界面,《设计模式》用于处理业务逻辑、用户交互。这就是所谓的MVC(模型、视图、控制器)模式,自此深入感受了MicroSoft设计MFC框架的高瞻远瞩。这时不再认为专业软件是用什么特殊的东西做成的(比如很多人误以为PhotoShop是靠显卡运算的),软件的功能是靠算法和数据结构。

到了2003年,我到了学习《数字图像处理》的末期,《图像模式识别》、《小波分析》需要太多专业数学知识不敢深入学习。所以那段时间主要在学习各种图像文件格式,其中最大的成就是写出了GIF、JPEG编/解码程序。GIF采用的是GIF_LZW压缩算法,且LZW压缩算法的专利已在2003年过期,理解了GIF_LZW压缩算法绝对有前途。JPEG是一套体系,而不是具体的压缩算法,先将图片转成YCbCr色彩模式、切成8*8小块,然后对每个小块进行DCT变换(离散余弦变换),量化,利用行程编码压缩算法压缩高频分量的0值,最后使用Huffman编码或算术编码再次压缩将数据写入位流——基本上所有的压缩算法都用到了。在学习JPEG体系时,感觉自己所学的算法全部融会贯通了。

到了2004年。一直有感自己没有深入学习COM(通用组件模型),所以决定仔细学习COM。在看潘爱民的《COM原理与应用》时,感觉最初的COM只是一套面向对象组件的二进制标准(为了实现OLE 2.0),但后来为了跨进程提供了列集/散列、为了多线程提供了了套间、为了网络分布式作出了DCOM,为了处理分布式事务提供了MTS(事务处理)/消息协作等,最终成为了完善、庞大、复杂的COM+。COM是对操作系统架构的革新,比起DOS时代的中断调用,比起Win32 API的函数调用,现在COM的面向对象特性能方便的将不同的组件组合使用,比如DirectX、Shell API等。说到Shell API,我不得不提一件事:文件夹究竟是什么?文件夹实质上是一个IShellFolder对象,调用SHGetDesktopFolder可以得到桌面的IShellFolder对象,然后利用IShellFolder对象的EnumObjects方法枚举其中的子对象(文件或文件夹)。这就是Shell 名称空间体系,完全面向对象的资源命名体系。

到了2005年,由于学习了COM后将内核API融会贯通了,开始对操作系统内核感兴趣了。找了不少保护模式、Linux内核的资料来看,重新温习编程控制硬件,彻底理解了硬件电路是如何工作的。自此最后一个神秘的领域也被攻克了,无论是应用软件还是系统软件在我眼里都不存在特殊性,唯一就是面向的对象不同、使用算法不同。自此彻底不再关注那些流行的应用技术(Java、.Net、数据库、Web服务„„),如果你算法、硬件、程序架构能力过关的话,随便可以写一套跟Java、.Net同级数的系统。

现在逐渐转向游戏编程,开始啃DirectX与MMX等并行指令集,重新学习《计算机图形学》。在这段时间中,发现我虽然以前看了很多书、看了很多文献资料,但很多领域只是匆匆扫过,顶多只算入门,并没有真正领悟。而现在重新学习,发现了许多以前忽略知识。经典书籍绝对不能只看一遍,每年重读一遍,都有新的收获。

附录:

BuyBook.xls:学编程最重要的是多看书,所以我买了不少书,该文件就是我带来学校来的书的列表,个人觉得那些书都很经典。临时整理的,这些只是在我宿舍中的书,还有不少书借给同学了没在列表上,家里还有很多好书没带过来。

Powermill编程学习经历2

Powermill编程学习经历我是一名曾在浙江做了一年的CNC操作工的江西人。一次偶然机会在上网时看到了段师傅的祖云CNC编程学习园地,它是一个集CNC编程、绘图、抄数、分模等的培......

学习编程

当你能自如的运用数据结构和算法、TCP/IP原理、编译原理、操作系统原理、数据库以及Win32 API 调用、构造自己的C++库(网络库、数学库、测试库、图形库)以及各种引擎,出去毕业......

学习回顾

本学期回顾总结反思初一上学期已经过去了,经过这一学期学习,我逐渐掌握了一套属于我的学习方法。初中和小学是两种截然不同的学习生活,需要我们自己去学,而不是等待老师和家长再......

如何学习编程

最近看到很多朋友问到如何学习编程这个问题,我想这个问题应该是所有初学者都非常关注的问题了,在论坛上回答了很多也讲了很多,但是总是无法让所有朋友得到一个解答,所以我想写一......

轮子哥丨进入 回顾我走过的编程之路

轮子哥丨进入 2016 -- 回顾我走过的编程之路vczh,本名陈梓瀚,因知乎的个人信息介绍上写有 “专业造轮子”,所以江湖人称 “轮子哥”。vczh 大学时代就在微软实习,毕业后即加入微......

下载回顾我学习编程的经历word格式文档
下载回顾我学习编程的经历.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文