<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[大家给我的BLOG取个名字吧]]></title>
<link>http://blog.pfan.cn/raoji</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[编程修养]]></title>
		<link>http://blog.pfan.cn/raoji/50595.html</link>
		<description><![CDATA[编程修养&nbsp;&nbsp;&nbsp; &nbsp; 什么是好的程序员？是不是懂得很多技术细节？还是懂底层编程？还是编程速度比较快？我觉得都不是。对于一些技术细节来说和底层的技术，只要看帮助，查资料就能找到，对于速度快，只要编得多也就熟能生巧了。我认为好的程序员应该有以下几方面的素质：　1、有专研精神，勤学善问、举一反三。　2、积极向上的态度，有创造性思维。　3、与人积极交流沟通的能力，有团队精神。　4、谦虚谨慎，戒骄戒燥。　5、写出的代码质量高。包括：代码的稳定、易读、规范、易维护、专业。这些都是程序员的修养，这里我想谈谈"编程修养"，也就是上述中的第5点。我觉得，如果我要了解一个作者，我会看他所写的小说，如果我要了解一个画家，我会看他所画的图画，如果我要了解一个工人，我会看他所做出来的产品，同样，如果我要了解一个程序员，我想首先我最想看的就是他的程序代码，程序代码可以看出一个程序员的素质和修养，程序就像一个作品，有素质有修养的程序员的作品必然是一图精美的图画，一首美妙的歌曲，一本赏心悦目的小说。我看过许多程序，没有注释，没有缩进，胡乱命名的变量名，等等，等等，我把这种人统称为没有修养的程序，这种程序员，是在做创造性的工作吗？不，完全就是在搞破坏，他们与其说是在编程，还不如说是在对源程序进行"加密"，这种程序员，见一个就应该开除一个，因为他编的程序所创造的价值，远远小于需要在上面进行维护的价值。程序员应该有程序员的修养，那怕再累，再没时间，也要对自己的程序负责。我宁可要那种动作慢，技术一般，但有良好的写程序风格的程序员，也不要那种技术强、动作快的"搞破坏"的程序员。有句话叫"字如其人"，我想从程序上也能看出一个程序员的优劣。因为，程序是程序员的作品，作品的好坏直截关系到程序员的声誉和素质。而"修养"好的程序员一定能做出好的程序和软件。有个成语叫"独具匠心"，意思是做什么都要做得很专业，很用心，如果你要做一个"匠"，也就是造诣高深的人，那么，从一件很简单的作品上就能看出你有没有"匠"的特性，我觉得做一个程序员不难，但要做一个"程序匠"就不简单了。编程序很简单，但编出有质量的程序就难了。我在这里不讨论过深的技术，我只想在一些容易让人忽略的东西上说一说，虽然这些东西可能很细微，但如果你不注意这些细微之处的话，那么他将会极大的影响你的整个软件质量，以及整个软]]></description>
		<author><![CDATA[RaoJi]]></author>
		<pubDate>2010-01-20 23:42:00</pubDate>
		</item>
				<item>
		<title><![CDATA[堆和栈的区别]]></title>
		<link>http://blog.pfan.cn/raoji/50594.html</link>
		<description><![CDATA[堆和栈的区别
一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区（stack）— 由编译器自动分配释放，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区（heap） — 一般由程序员分配释放，若程序员不释放，程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事，分配方式倒是类似于链表，呵呵。3、全局区（静态区）（static）—，全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域，未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放5、程序代码区—存放函数体的二进制代码。

例子程序 （这是一个前辈写的，非常详细 ）//main.cpp 
int a = 0;//全局初始化区
char *p1;//全局未初始化区
main() 
{ 
int b;//栈
char s[] = "abc";//栈
char *p2;//栈
char *p3 = "123456";//123456\0在常量区，p3在栈上。
static int c =0;//全局（静态）初始化区
p1 = (char *)malloc(10); 
p2 = (char *)malloc(20); 
//分配得来得和字节的区域就在堆区。
strcpy(p1, "123456");//123456\0放在常量区，编译器可能会将它与p3所指向的"123456"优化成一个地方。
} 二、堆和栈的理论知识 2.1申请方式 stack: 由系统自动分配。 例如，声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间 heap: 需要程序员自己申请，并指明大小，在c中malloc函数，如p1 = (char *)malloc(10); 在C++中用new运算符，如p2 = (char *)malloc(10); 但是注意p1、p2本身是在栈中的。2.2 申请后系统的响应 栈：只要栈的剩余空间大于所申请空间，系统将为程序提供内存，否则将报异常提示栈溢出。堆：首先应该知道操作系统有一个记录空闲内存地址的链表，当系统收到程序的申请时， 会遍历该链表，寻找第一个空间大于所申请空间的堆结点，然后]]></description>
		<author><![CDATA[RaoJi]]></author>
		<pubDate>2010-01-20 20:56:00</pubDate>
		</item>
		</channel>
</rss>