博文

初学者应该看看(2007-12-06 13:34:00)

摘要:成为编程高手的八大奥秘 
   
     转摘于:《中国电脑教育报》   作者:未知 
    
    不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差得太远。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。 


    1、扎实的基础 

  数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握它们,很难写出高水平的程序。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常有必要的。 

  2、丰富的想像力 

  不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想像力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。开阔的思维对程序员来说很重要。 

  3、最简单的是最好的 

  这也许是所有科学都遵循的一条准则,复杂的质能转换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。 

  4、不钻牛角尖 

  当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。 

  5、对答案的渴求&n......

阅读全文(1218) | 评论:1

初学者应该看的(2007-12-06 13:33:00)

摘要:成为编程高手的二十二条军规【转载】

    作者:Froth  
  1.大学生活丰富多彩,会令你一生都难忘,但难忘有很多种,你可以学了很多东西而难忘,也会因为什么都没学到而难忘!

  2.计算机专业是一个很枯燥的专业,但即来之、则安之,只要你努力学,也会发现其中的乐趣的。

  3.记住:万丈高楼平地起!基础很重要,尤其是专业基础课,只有打好基础才能学得更深。

  4.C语言是基础,很重要,如果你不学好C语言,那么什么高级语言你都学不好。

  5.C语言与C++语言是两回事。就像大熊猫和小熊猫一样,只是名字很像。

  6.请先学习专业课《数据结构》、《计算机组成原理》,不要刚开始就拿着一本VC在看,你连面向对象都搞不清楚,看VC没有任何用处。

  7.对编程有一定的认识后,就可以学习C++了。(是C++而不是VC,这两个也是两码事。C++是一门语言,而VC教程则是讲解如何使用MFC

类库,学习VC应建立在充分了解C++的基础之上。看VC的书,是学不了C++语言的。)

  8.学习编程的秘诀是:编程,编程,再编程;

  9.认真学习每一门专业课,那是你今后的饭碗。

  10.在学校的实验室就算你做错一万次程序都不会有人骂你,如果在公司你试试看!所以多去实验室上机,现在错得多了,毕业后就错得少

了。

  11.从现在开始,在写程序时就要养成良好的习惯。

  12.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路。

  13.你会买好多参考书,那么请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码。

  14.VC、C#、.NET这些东西都会过时,不会过时的是数据结构和优秀的算法!

  15.记住:书到用时方恨少。不要让这种事发生在你身上,在学校你有充足的时间和条件读书,多读书,如果有条件多读原版书,你要知道

,当一个翻译者翻译一本书时,他会不知不觉把他的理念写进书中,那本书就会变得像鸡肋!

  16.我还是强调认真听专业课,......

阅读全文(1487) | 评论:0

电脑(2007-12-02 13:34:00)

摘要:前言
Computer是一个自控制机器,通过不断的执行指令来工作,是没有思维的,而人是有思维的,所以能用几十个指令编制各种各种样的程序,编制的程序只不过是N个指令,是具体,而程序的编制,是有科学的,有技术、方法的,是抽象,编制程序就是把抽象的程序编制成具体的N个指令.

具体
Computer的CPU,是运算和执行合在一起控制器,CPU的运作就是等待(也就是循环)->译码->运算->执行,另外,还有指令流水线,就是把指令分成N份, 分份并行执行.CPU有译码,人也有,人的译码就是把抽象译成具体,Computer的具体就是指令,人的具体就是Code.

抽象
program的书籍,有理论,技术,人的思维,有分析,编制,program的组成是code,和指令一样,只是code更接近人的抽象,所以不是用指令编制,而是code.抽象是虚拟的,是可以用code实现的构想,抽象也是复杂的,porgram的抽象要涉及理论、技术,人的抽象涉及分析、编制.其实编程序也就是这样无聊却必须的.

分析
要编制一个程序,先要分析,分析程序要做什么工作,怎么实现,要用什么编制,程序的正确性、错误的处理、失败率的分析、扩展、易用、高效等等,用一个最简单的程序说明:
/* hello.c */

#include<stdio.h>

int main()
{
    printf("hello world!\n");
    return 0;
}

这里就是以打印一个字符串为目标,所以,第一步重要的就是正确的完成目标,第一步实现了,就该第二步了,第二步是分析错误(分析各种意外情况下的错误),那这个程序有什么错误,这个程序就是第5行,正确的做法是先const char c[13]={"hello world!"},常量的内容为要打印的内容,然后在prinf("%s\n",c);,这个错误不是编制错误,而是因为不这样做,编制出来的程序就会声明变量、打印,虽然是一样,但在编制时是......

阅读全文(1672) | 评论:0

物理地址   实地址   虚拟地址(2007-11-07 13:23:00)

摘要:逻辑地址与物理地址
答:在具有地址变换机构的计算机中,允许程序中编排的地址和信息实际存放在内存中的地址有所不同。逻辑地址是指用户程序经编译后,每个目标模块以0为基地址进行的顺序编址。逻辑地址又称相对地址。物理地址是指内存中各物理存储单元的地址从统一的基地址进行的顺序编址。物理地址又称绝对地址,它是数据在内存中的实际存储地址。
所以,物理地址是相对与逻辑地址来说的.而实址址是一种存储管理模式.相对应的是虚地址.
***********************************************************************
虚地址: 
虚拟存储器的辅存部分也能让用户象内存一样使用,用户编程时指令地址 
允许涉及辅存大小的空间范围,这种指令地址称为“虚地址” ( 即虚拟地址 ) 或 
叫“逻辑地址”,虚地址对应的存储空间称为“虚存空间”或叫“逻辑空间”。
***********************************************************************
实地址: 
实际的主存储器单元的地址则称为“实地址” ( 即主存地址 ) 或叫“物理地址”, 
实地址对应的是“主存空间”,亦称物理空间。 
虚拟存储器的用户程序以虚地址编址并存放在辅存里,程序运行时, CPU 
以虚地址访问主存,由辅助硬件找出虚地址和物理地址的对应关系,判断由这 
个虚地址指示的存储单元的内容是否已装入主存,如果在主存, CPU 就直接执 
行已在主存的程序;如果不在主存,就要进行辅存内容向主存的调度,这种调 
度同样以程序块为单位进行。计算机系统存储管理软件和相应的硬件把欲访问 
单元所在的程序块从辅存调入主存,且把程序虚地址变换成实地址,然后再由 
CPU 访问主存。
......

阅读全文(5543) | 评论:0

后记(2007-08-29 11:25:00)

摘要:后记

数据类型int和float占用同样多的内存空间,为什么看起来float可以表示更大的范围呢?

为什么能够自由的定义结构体变量,以及可以用结构体指针任意的取、写数据呢?

以上两个问题,请自行查找资料解决。

另,我这样的详细的讲解内存,只是为了,大家学习的时候多问几个为什么,不要学在表面上!一个忠告呢, 这样的细节,只要一旦了解了,就没有必要再深入了——除非你以后想研究这个!应该要关注的是如何在更高的层面上写程序——上面的这些内容,就是避免在以后高层次学习的时候,无谓的碰壁。这就好比打了预防针!

还有,程序语言的基础,除了基本的语法,还有算法和数据结构。有了这些,才能做高级的编程,比如:C语言修炼到高级,就是用函数指针说话!C++修炼到高级,就是用类来说话。从你编程的“口音”就可以看出你的级别来!

修炼到了高级,那就是游刃有余、无招胜有招!那样的代码,在别人看起来,绝对是一种美的享受,令人拍案称快!  
stand alone complex

独步天下,吾心自洁。

无欲无求,宛若林中之象……

i'm walking in the dark.

事物只有两种状态:发展 和 死亡。......

阅读全文(2128) | 评论:0

内存的作用(2007-08-29 11:24:00)

摘要:内存是干吗使的?

储存数据用的!

CPU使计算和寻址用的,他每一个状态只能表示一个数。就是说,CPU只能记住当前运行时的几个数据(其实,CPU可以说,能记住更多的数据,不过,单位是K byte,就是寄存器和多级缓存,相比内存以M byte为单位,就太小了。具体就太复杂了。我们,就简化一下,认为这个CPU是一个被切除了海马区域的人(大脑的海马区域,主管人的深层记忆),他只能记住当前的几个数字)。那么,这个叫CPU 人如何帮助电脑使用者处理烦杂的计算任务呢?

他有一个好的数据管家兼数据仓库,就是内存!CPU把当前暂时不用的数据,就放到内存中,当下一次需要的时候——CPU每进行一次运算,就向内存询问一下,他下次运算需要从什么地方取得数据。得到内存提供的消息后,CPU就从该地址提取出这个值,以进行合适的运算,并把结果放到合适的内存地址去。

为了存取数据方便,内存就做成和32位CPU相匹配的样子,也是以byte为基本的单位。就是说,CPU一次可以把4个byte的数据写进内存,也能读取出去!

想象一下,这是这么样一个场面:

有着几乎无数个插孔的巨大长条行的插座,和一个有4个角的插头(以byte为单位来看),简直是随便乱插,都可以!^_^

「图略」

之所以,CPU能自由的找到数据,是因为,这4个G的内存,一个被编好了号!32位CPU的每一种状态,就代表一个具体的byte,也就决定了其具体的“位置”——相对于其他内存。

我一个int类型的数据,可以用来表示人的年龄,中国的铁路总长。在计算机中,我还可以用来表示其他数据的“地址”!你CPU是32个bit,4个byte,我一个int也是32个bit,4个byte,你能通过这个数据找到某一个地址,那么我一个int也能把这个地址值保存起来!

保存的地址值的int数据类型是啥东西!
指针!

对,就是大名鼎鼎的指针!C语言中最伟大的变量类型!

指针是干吗使的?

就表示其他数据的在内存中的存放位置!

所以,你不管是输出sizeof(int*)还是输出sizeof(char*),又或输出sizeof(short*),甚至......

阅读全文(10521) | 评论:0

什么是内存(2007-08-29 11:22:00)

摘要:什么是内存

先说“什么是内存”。

这些个内容,你若有兴趣,就当“科普内容”来听好了!

直接的感性认识,就是你电脑插在内存插槽上的内存插条,拥有台式机的朋友可以方便的看到。

「图略」

理性认识么,我们就不讨论这么深了。

然后我们要知道的就是,程序,需要内存才能够跑。比如你玩《魔兽》,商家会告诉你这需要大内存,好显卡。最好你得是512M的内存,128M的显卡。这样玩起来就比较流畅了,高级的显示效果也可以打开了。

什么呢?因为,你看啊,游戏中所有的树木、地面、人物这些,他都需要时间的数据来描述:最简单的比如位置,好比地图上的经纬度一样,你只是得用两个数字来描述。还有一个海拔,就是垂直地面的相对高度;比如,你站在一个高10米的岩石上,那么你当前的“海拔”就是10米;

数据肯定需要内存空间来存储——天上不可能凭空掉馅饼。衡量内存大小的单位是byte,我们先假设一个简单的一个数字需要一个byte的内存空间。那么,你看,最简单的游戏中的人物就需要至少3个数字(「长」、「宽」、「高」——空间的三维矢量),还不包括人物身上的东西:手啥形状,服侍是啥颜色。你可以想象,这是多少“数字”啊!一个数字对一个点内存——蚁多咬死象,需要的内存肯定是很多。

再加上如此丰富的游戏画面,可以同时在线的游戏玩家的恐怖数量,在个人的电脑上再重建这些画面,需要多少内存啊!

我们待会儿再说魔兽中的“坐标”!

「图略」

我们再说说CPU。

现在大家基本都是用的32位的CPU。那么32位是什么意思呢?指的是这种CPU有32根地址线——或者你直观一点,可以认为,这个CPU方形“插头”,有32根线头。

一般的用电器有2根的,用电两大的,容易有安全隐患的,就是3个头的:

「图略」

而32位CPU有32根地址线:


32根地址线是啥概念?

大家学过排列组合的都知道,若每根线都只能有两种状态(想象点灯的开和关)。那么:

我们先假设这个CPU只有1根地址线(靠,这怎么可能?),那么这个低能的CPU只能表示开关两种状态。

假设有2根地址线,相当于......

阅读全文(3351) | 评论:0

什么是XML(2007-08-09 15:10:00)

摘要:XML是eXtensible Markup Language的缩写。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

XML的前身是SGML(The Standard Generalized Markup Language),是自IBM从60年代就开始发展的GML(Generalized Markup Language)

同HTML一样, XML (可扩展标识语言)是通用标识语言标准(SGML)的一个子集,它是描述网络上的数据内容和结构的标准。尽管如此,XML不象HTML,HTML仅仅提供了在页面上显示信息的通用方法(没有上下文相关和动态功能) ,XML则对数据赋予上下文相关功能,它继承了SGML的大部分功能,却使用了不太复杂的技术。.

为了使得SGML显得用户友好,XML重新定义了SGML的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得SGML在设计网站时显得复杂化。XML保留了SGML的结构化功能,这样就使得网站设计者可以定义自己的文档类型,XML同时也推出一种新型文档类型,使得开发者也可以不必定义文档类型。

因为XML是W3C制定的,XML的标准化工作由W3C的XML工作组负责,该小组成员由来自各个地方和行业的专家组成,他们通过email交流对XML标准的意见,并提出自己的看法 (www.w3.or......

阅读全文(1454) | 评论:0

什么是PHP(2007-08-08 21:55:00)

摘要:PHP 是什么?   PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 WEB 开发。   以上是一个简单的回答,不过这是什么意思呢?请看如下例子:   例子 1-1. 一个介绍性的范例 <html>
    <head>
        <title>Example</title>
    </head>
    <body>
        <?php
        echo "Hi, I'm a PHP script!";
        ?>
    </body>
</html>   请注意这个范例和其它用 C 或 Perl 语言写的脚本之间的区别――与用大量的命令来编写程序以输出 HTML 不同的是,我们用 PHP 编写了一个 HTML 脚本,其中嵌入了一些代码来做一些事情(例如,在本例中我们输出了一些文本)。PHP 代码被特殊的起始符和结束符包含,使得您可以进出“PHP 模式”。   和客户端的 JavaScript 不同的是,PHP 代码是运行在服务端的。如果您在您的服务器上建立了如上例类似的代码,则在运行该脚本后,客户端就能接收到其结果,但他们无法得知其背后的代码是如何运作的。您甚至可以将 WEB 服务器设置成让 PHP 来处理所有的 HTML 文件,这么一来,用户就无法得知服务端到底做了什么。   使用 PHP 的一大好处是它对于初学者来说及其的简单,同时也给专业的程序员提供了各种高级的特性。当您看到 PHP 长长的特性列表时,请不要害怕。您可以......

阅读全文(3403) | 评论:0