<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Licess&#039;s Blog &#187; 软件开发</title>
	<atom:link href="http://blog.licess.org/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.licess.org</link>
	<description>关注VPS Linux Nginx MySQL PHP WEB开发 系统管理 服务器架构 Debian CentOS</description>
	<lastBuildDate>Wed, 11 Jan 2012 11:56:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>由于应用程序配置不正确 应用程序未能启动</title>
		<link>http://blog.licess.org/programme-error-1/</link>
		<comments>http://blog.licess.org/programme-error-1/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 11:07:44 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[应用程序未能启动]]></category>
		<category><![CDATA[应用程序配置不正确]]></category>

		<guid isPermaLink="false">http://blog.licess.cn/?p=409</guid>
		<description><![CDATA[今天在家里的电脑使用VMware虚拟机精简版 6.5的时候提示“由于应用程序配置不正确 应用程序未能启动”。只要安装下微软的Microsoft Visual C++ 2005 SP1即可。至于引起这个问题的原因可能是破解精简的时候默认电脑里安装了这个程序，所以就去给掉了。 点击下载：Microsoft Visual C++ 2005 SP1 另外以下某人说的非常有理！ vc  2005对系统级dll(如msvcrt.dll)的依赖性检查比以前更严格,不能像以前那样直接随exe打包然后简单放在安装机器的搜索目录中，操作系统自带的msvcrt.dll   只是供操作系统使用的。 以下是自己想起在学校学VC++时想起的~~ 对于程序员来讲在开发中可以使用一些两种方法把问题解决： 1、静态链接： 修改项目属性，静态链接mfc库（静态链接时，会自动修改上面提到的多线程DLL为多线程）。 2、动态链接： 拷贝msvcrt.dll ，和Microsoft.VC80.CRT.manifest文件到XP机上。 相关文章：暂无相关日志 © licess for Licess&#039;s Blog, 2009. &#124; Permalink &#124; One comment &#124; Add to del.icio.us Post tags: 应用程序未能启动, 应用程序配置不正确 美国VPS推荐 &#124; 军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付 QQ：503228080]]></description>
			<content:encoded><![CDATA[<p>今天在家里的电脑使用VMware虚拟机精简版 6.5的时候提示“由于应用程序配置不正确 应用程序未能启动”。只要安装下微软的Microsoft Visual C++ 2005 SP1即可。至于引起这个问题的原因可能是破解精简的时候默认电脑里安装了这个程序，所以就去给掉了。 <a title="点击下载：Microsoft Visual C++ 2005 SP1" href="http://blog.licess.cn/uploads/200901/vcredist_x86.exe" target="_blank">点击下载：Microsoft Visual C++ 2005 SP1</a></p>
<div>另外以下某人说的非常有理！</div>
<div>vc  2005对系统级dll(如msvcrt.dll)的依赖性检查比以前更严格,不能像以前那样直接随exe打包然后简单放在安装机器的搜索目录中，操作系统自带的msvcrt.dll   只是供操作系统使用的。</div>
<div>以下是自己想起在学校学VC++时想起的~~</div>
<div>对于程序员来讲在开发中可以使用一些两种方法把问题解决：</div>
<div>
<div>1、静态链接：</div>
<div>修改项目属性，静态链接mfc库（静态链接时，会自动修改上面提到的多线程DLL为多线程）。</div>
<div>2、动态链接：</div>
<div>拷贝msvcrt.dll ，和Microsoft.VC80.CRT.manifest文件到XP机上。</div>
</div>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li>暂无相关日志</li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2009. |
<a href="http://blog.licess.org/programme-error-1/">Permalink</a> |
<a href="http://blog.licess.org/programme-error-1/#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/programme-error-1/&title=由于应用程序配置不正确 应用程序未能启动">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e6%9c%aa%e8%83%bd%e5%90%af%e5%8a%a8/" rel="tag">应用程序未能启动</a>, <a href="http://blog.licess.org/tag/%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e9%85%8d%e7%bd%ae%e4%b8%8d%e6%ad%a3%e7%a1%ae/" rel="tag">应用程序配置不正确</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/programme-error-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linux C编程实战——光盘下载</title>
		<link>http://blog.licess.org/linux-c-cd/</link>
		<comments>http://blog.licess.org/linux-c-cd/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 17:48:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux技术]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[c编程实战]]></category>

		<guid isPermaLink="false">/articles/159</guid>
		<description><![CDATA[今天终于收到了Linux C编程实战这本书，在网上看这本书的目录感觉还行就买下了看看，以后就要奋战在Linu平台下，作为一个开源Ren。也请各位Linux编程的高手多多指点。 点击此处下载Linux C编程实战光盘 相关文章：Linux流量监控工具 &#8211; iftop (最全面的iftop教程)Linux VPS Nginx+PHP 安装ionCubeLinux下Wget创建镜像站点Linux常用性能检测命令FodyHost &#8211; 第一个月优惠90%&#124;384MB内存&#124;25GB空间&#124;250GB流量仅2美元，适合新手学习Webfedora-基于LAMP的Web仿Fedora系统在线测试你的Linux知识水平UnixBench：测试Linux VPS性能LNMP-Linux下Nginx+MySQL+PHP+phpMyAdmin+eAcelerator一键安装包(2011年12月14日更新)Linux下Nginx+PHP+MySQL+phpMyAdmin+eAcelerator自动编译安装软件 预告 © admin for Licess&#039;s Blog, 2008. &#124; Permalink &#124; 2 comments &#124; Add to del.icio.us Post tags: c, c编程实战, Linux技术 美国VPS推荐 &#124; 军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付 QQ：503228080]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: medium"><img src="/attachments/date_200811/188fc75a3fe8e78c80c3e86f75651408.gif" alt="linux c.gif" border="0"></span></p>
<p><span style="font-size: medium">今天终于收到了Linux C编程实战这本书，在网上看这本书的目录感觉还行就买下了看看，以后就要奋战在Linu平台下，作为一个开源Ren。也请各位Linux编程的高手多多指点。<br />
<a href="http://blog.licess.cn/attachments/linuxC.rar"><span style="color: #ff3300">点击此处下载Linux C编程实战光盘</span></a><br />
</span></p>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li><a href="http://blog.licess.org/iftop/" title="Linux流量监控工具 &#8211; iftop (最全面的iftop教程)">Linux流量监控工具 &#8211; iftop (最全面的iftop教程)</a></li><li><a href="http://blog.licess.org/linux-vps-nginx-php-install-ioncube/" title="Linux VPS Nginx+PHP 安装ionCube">Linux VPS Nginx+PHP 安装ionCube</a></li><li><a href="http://blog.licess.org/linux-wget-mirror/" title="Linux下Wget创建镜像站点">Linux下Wget创建镜像站点</a></li><li><a href="http://blog.licess.org/linux-performance-command/" title="Linux常用性能检测命令">Linux常用性能检测命令</a></li><li><a href="http://blog.licess.org/fodyhost-vps90/" title="FodyHost &#8211; 第一个月优惠90%|384MB内存|25GB空间|250GB流量仅2美元，适合新手学习">FodyHost &#8211; 第一个月优惠90%|384MB内存|25GB空间|250GB流量仅2美元，适合新手学习</a></li><li><a href="http://blog.licess.org/webfedora/" title="Webfedora-基于LAMP的Web仿Fedora系统">Webfedora-基于LAMP的Web仿Fedora系统</a></li><li><a href="http://blog.licess.org/test-linux-knowledge/" title="在线测试你的Linux知识水平">在线测试你的Linux知识水平</a></li><li><a href="http://blog.licess.org/unixbench/" title="UnixBench：测试Linux VPS性能">UnixBench：测试Linux VPS性能</a></li><li><a href="http://blog.licess.org/lnmp/" title="LNMP-Linux下Nginx+MySQL+PHP+phpMyAdmin+eAcelerator一键安装包(2011年12月14日更新)">LNMP-Linux下Nginx+MySQL+PHP+phpMyAdmin+eAcelerator一键安装包(2011年12月14日更新)</a></li><li><a href="http://blog.licess.org/linux-nginx-php-mysql-phpmyadmin/" title="Linux下Nginx+PHP+MySQL+phpMyAdmin+eAcelerator自动编译安装软件 预告">Linux下Nginx+PHP+MySQL+phpMyAdmin+eAcelerator自动编译安装软件 预告</a></li></ul><hr />
<p><small>© admin for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2008. |
<a href="http://blog.licess.org/linux-c-cd/">Permalink</a> |
<a href="http://blog.licess.org/linux-c-cd/#comments">2 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/linux-c-cd/&title=Linux C编程实战——光盘下载">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/c/" rel="tag">c</a>, <a href="http://blog.licess.org/tag/c%e7%bc%96%e7%a8%8b%e5%ae%9e%e6%88%98/" rel="tag">c编程实战</a>, <a href="http://blog.licess.org/tag/linux%e6%8a%80%e6%9c%af/" rel="tag">Linux技术</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/linux-c-cd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>优秀程序员的十个特征</title>
		<link>http://blog.licess.org/programer/</link>
		<comments>http://blog.licess.org/programer/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 23:06:18 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[程序员]]></category>

		<guid isPermaLink="false">/articles/132</guid>
		<description><![CDATA[1、好奇心
程序员是永远不会接受现成的东西的，他们必须亲自解开内心深处的迷惑和渴望。

2、清晰的思维技巧
编程是一件需要严密逻辑和清晰思维的事情，有强大的数学或者科学背景的程序员通常更加成功。

3、快速的阅读速度和理解能力]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: medium">1、好奇心<br />
程序员是永远不会接受现成的东西的，他们必须亲自解开内心深处的迷惑和渴望。</p>
<p>2、清晰的思维技巧<br />
编程是一件需要严密逻辑和清晰思维的事情，有强大的数学或者科学背景的程序员通常更加成功。</p>
<p>3、快速的阅读速度和理解能力<br />
相当大一部分程序员的一天都花在阅读上，阅读设计文档，或者其他人的<strong>代码</strong>，API，注释等等，有些程序员读的快，能很快理解，并且开始行动，另外一些程序员也许要多花三四倍的时间才能阅读完毕，这些程序员的<strong>工作</strong>效率肯定不如前者。</p>
<p>4、注意细节</p>
<p>注意细节这个特征可能和是好奇心相关的，写程序的人，关注细节，严谨，意味他能够写出高质量，少bug的程序。</p>
<p>5、快速<strong>学习</strong>编程以外东西的能力<br />
<span style="font-size: 0px; color: #ffffff">;j+N*^,W3}3f4I6H)Y</span><br />
应用程序一般都和日常<strong>生活</strong>和企业运作相关联，比如编写一个会计软件，可能就需要学习一些简单的会计知识，如果拥有快速学习编程以外东西的能力，必将为你决定雇佣这个程序员加分。</p>
<p>6、自我学习技巧</p>
<p>软件行业进化速度很快，为了更好的编程技能，好的程序员必须善于自我学习。</p>
<p>7、激情<br />
这个毫无疑问，你必须雇佣一个热爱这个工作的人。程序员很可能一周7天，一天8小时写代码，如果是例行公事的态度的程序员，很难相信他能做好这份工作。</p>
<p><span style="font-size: 0px; color: #ffffff">&quot;z'm:`&amp;e,T&quot;H*_</span><br />
8、适应性<br />
程序员也许经常遇到短期的项目，变换不同的工作环境，即使在客户公司环境工作，也能保持良好的工作状态。</p>
<p>9、良好的沟通技巧</p>
<p>沟通技巧，不一定意味着有一口流利的<strong>英语</strong>，这意味着愿意沟通，愿意了解团队中其他人的想法。 </p>
<p>10、谁是老板？</p>
<p>这个问题应该有点难以表达，程序员是一个众所周知独立性很强的一个群体，事实上，这也许是他们的一个优点，但是很多时候，即使从<strong>技术</strong>上，应该这么做，但是从商业和其他角度，管理层不得不选择一个另外一个做法，那么程序员应该尊重经理人的决定，尊重那个做决定也担负责任的人的决定。</span></p>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li><a href="http://blog.licess.org/programmer-2007-web2/" title="《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”">《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”</a></li><li><a href="http://blog.licess.org/%e6%80%8e%e6%a0%b7%e6%88%90%e4%b8%ba%e4%b8%80%e4%b8%aa%e7%a8%8b%e5%ba%8f%e9%ab%98%e6%89%8b%e5%91%a2%ef%bc%9f/" title="怎样成为一个程序高手呢？">怎样成为一个程序高手呢？</a></li><li><a href="http://blog.licess.org/71/" title="做程序员的基本原则">做程序员的基本原则</a></li><li><a href="http://blog.licess.org/%e7%a8%8b%e5%ba%8f%e5%91%98%e5%ba%94%e5%85%b7%e5%a4%87%e7%9a%84%e7%b4%a0%e8%b4%a8/" title="程序员应具备的素质">程序员应具备的素质</a></li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2008. |
<a href="http://blog.licess.org/programer/">Permalink</a> |
<a href="http://blog.licess.org/programer/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/programer/&title=优秀程序员的十个特征">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/%e7%a8%8b%e5%ba%8f%e5%91%98/" rel="tag">程序员</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/programer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”</title>
		<link>http://blog.licess.org/programmer-2007-web2/</link>
		<comments>http://blog.licess.org/programmer-2007-web2/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 03:44:00 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[Web相关]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[程序员]]></category>

		<guid isPermaLink="false">/articles/31</guid>
		<description><![CDATA[理解REST软件架构 &#160;&#160; &#160;文/骆古道 一种思维方式影响了软件行业的发展。REST软件架构是当今世界上最成功的互联网的超媒体分布式系统。它让人们真正理解我们的网络协议HTTP本来面貌。它正在成为网络服务的主流技术，同时也正在改变互联网的网络软件开发的全新思维方式。AJAX技术和Rails框架把REST软件架构思想真正地在实际中很好表现出来。今天微软也已经应用REST并且提出把我们现有的网络变成为一个语义网，这种网络将会使得搜索更加智能化。 REST与HTTP协议 REST软件架构是由Roy Thomas Fielding博士在2000年首次提出的。他为我们描绘了开发基于互联网的网络软件的蓝图。REST软件架构是一个抽象的概念，是一种为了实现这一互联网的超媒体分布式系统的行动指南。利用任何的技术都可以实现这种理念。而实现这一软件架构最著名的就是HTTP协议。通常我们把REST也写作为REST/HTTP，在实际中往往把REST理解为基于HTTP的REST软件架构，或者更进一步把REST和HTTP看作为等同的概念。 今天，HTTP是互联网上应用最广泛的计算机协议。HTTP不是一个简单的运载数据的协议，而是一个具有丰富内涵的网络软件的协议。它不仅仅能够对于互联网资源进行唯一定位，而且还能告诉我们对于该资源进行怎样运作。这也是REST软件架构当中最重要的两个理念。而REST软件架构理念是真正理解HTTP协议而形成的。有了REST软件架构理念出现，才使得软件业避免了对HTTP协议的片面理解。只有正确的理论指导，才能避免在软件开发的实际工作过程中少走弯路。 REST与URI（资源定位） REST软件架构之所以是一个超媒体系统，是因为它可以把网络上所有资源进行唯一的定位，不管你的文件是图片、文件Word还是视频文件，也不管你的文件是txt文件格式、xml文件格式还是其它文本文件格式。它利用支持HTTP的TCP/IP协议来确定互联网上的资源。 REST与CRUD原则 REST软件架构遵循了CRUD原则，该原则告诉我们对于资源（包括网络资源）只需要四种行为：创建（Create）、获取（Read）、更新（Update）和销毁（DELETE）就可以完成对其操作和处理了。其实世界万物都是遵循这一规律的：生、变、见、灭。所以计算机世界也不例外。这个原则是源自于我们对于数据库表的数据操作：insert（生）、select（见）、update（变）和delete（灭），所以有时候CRUD也写作为RUDI，其中的I就是insert。这四个操作是一种原子操作，即一种无法再分的操作，通过它们可以构造复杂的操作过程，正如数学上四则运算是数字的最基本的运算一样。 REST与网络服务 尽管在Java语言世界中网络服务目前是以SOAP技术为主，但是REST将是网络服务的另一选择，并且是真正意义上的网络服务。基于REST思想的网络服务，不久的将来也会成为是网络服务的主流技术。REST不仅仅把HTTP作为自己的数据运输协议，而且也作为直接进行数据处理的工具。而当前的网络服务技术都需要使用其它手段来完成数据处理工作，它们完全独立于HTTP协议来进行的，这样增加了大量的复杂软件架构设计工作。REST的思想充分利用了现有的HTTP技术的网络能力。在德国电视台上曾经出现过一个这样的五十万欧元智力题：如何实现网络服务才能充分利用现有的HTTP协议？该问题给出了四个答案：去问微软；WSDL2.0/SOAP1.2；WS-Transfer；根本没有。这个问题告诉我们HTTP并不是一个简单的数据传来传去的协议，而是一个聪明的会表现自己的协议，这也许是REST = Representational State Transfer的真正含义。 实际上目前很多大公司已经采用了REST技术作为网络服务，如Google、Amazon等。在Java语言中重要的两个以SOAP技术开始的网络服务框架XFire和Axis也把REST作为自己的另一种选择。它们的新的项目分别是Apache CXF 和Axis2 。Java语言也制定关于REST网络服务规范：JAX-RS: Java API for RESTful Web Services (JSR 311)。相信还会出现更多与REST相关的激动人心的信息。 REST与AJAX技术 尽管AJAX技术的出现才不到两年时间，但是AJAX技术遵循了REST的一些重要原则。AJAX技术充分利用了HTTP来获取网络资源并且实现了HTTP没有的对于异步数据进行传输的功能。AJAX技术还使得软件更好地实现分布性功能，在一个企业内只要一个人下载了AJAX引擎，其它企业内部的人员，就可以共享该资源了。AJAX技术遵守REST准则的应用程序中简单和可伸缩的架构，凡是采用AJAX技术的页面简洁而又丰富，一个页面表现了丰富多彩的形态。 AJAX技术还使用了一种不同于XML格式的JSON文件格式，这个意义在哪里呢？在REST软件架构下我们不能对于XML文件进行序列化处理，这样程序员必须要使用自己的XML绑定框架。而以序列化的JavaScript对象为基础的JSON已经获得了广泛认可，它被认为能以远比XML更好的方式来序列化和传输简单数据结构，而且它更简洁。这对REST是一个极大贡献和补充。 当前的网络应用软件还违背了REST的&#8220;无状态服务器&#8221;约束。REST服务器只知道自己的状态。REST不关心客户端的状态，客户端的状态自己来管理，这是AJAX技术的应用之地。通过AJAX技术，可以发挥有状态网络客户机的优势。而REST的服务器关心的是从所有网络客户端发送到服务器操作的顺序。这样使得互联网这样一个巨大的网络得到有序的管理。 REST与Rails框架 Ruby on Rails框架（简称Rails或者Rails框架）是一个基于Ruby语言的越来越流行的网络应用软件开发框架。它提供了关于REST最好的支持，也是当今应用REST最成功的一个软件开发框架。Rails框架（从版本1.2.x起）成为了第一个引入REST作为核心思想的主流网络软件开发框架。在Rails框架的充分利用了REST软件架构之后，人们更加坚信REST的重要性和必要性。Rails利用REST软件架构思想对网络服务也提供了一流的支持。从最直观的角度看待REST，它是网络服务最理想的手段，但是Rails框架把REST带到了网络应用软件开发框架。这是一次飞跃，让REST的思想从网络服务的应用提升到了网络应用软件开发。利用REST思想的simply_restful插件已经成为了Rails框架的核心内容。 REST安全性 我们把现有基于SOAP的网络服务和基于REST/HTTP网络服务作个比喻，前者是一种传统的寄信方式，而后者是现代网络的电子邮件方式。要是寄信和电子邮件都有病毒存在的话，传统的寄信被送到对方就很危险，而电子邮件是开发的，电子邮件供应商比如Google为我们检查了电子邮件是否有病毒。这里并不是说明SOAP网络服务消息容易包含病毒，而是说明HTTP是无法处理SOAP信息包究竟好不好，需要额外的软件工具解决这一问题，包括防火墙也用不上和管不了。 REST/HTTP网络服务的信息包可以被防火墙理解和控制。你可以按照操作和链接进行过滤信息包，如你可以规定从外部来的只能读取（GET操作）自己服务器的资源。这样对于系统管理员而言使得软件管理更为简单。REST的安全性还可以利用传输安全协议SSL/TLS、基本和摘要式认证（Basic und Digest Authentication）。除了这些REST自身的安全性功能外，还可以利用像基于信息的Web Services Security（JSR 155）作为REST不错的补充。 作者简介：骆古道，网名Cnruby，八十年代初毕业于西北工业大学数理力学系，1988年公派留学德国，从事组合最优化理论研究，从九十年代初期起一直致力于计算机领域软件开发、设计和管理等方面工作，个人博客为&#8220;道喜技术日记&#8221;。 相关文章：优秀程序员的十个特征怎样成为一个程序高手呢？做程序员的基本原则程序员应具备的素质 © licess for Licess&#039;s Blog, [...]]]></description>
			<content:encoded><![CDATA[<h2 style="margin: 15.6pt 0cm 0pt; line-height: normal; text-align: center" align="center"><font size="3"><span style="font-size: 42pt; font-family: 黑体">理解</span><span style="font-size: 42pt">REST</span><span style="font-size: 42pt; font-family: 黑体">软件架构</span></font></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right" align="right"><font size="3"><span><font face="Times New Roman"><span>&nbsp;&nbsp; </span><span>&nbsp;</span></font></span><span style="font-family: 宋体">文</span><strong><span><font face="Times New Roman">/</font></span></strong><strong><span style="font-weight: normal; font-family: 宋体">骆古道</span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span style="font-family: 宋体">一种思维方式影响了软件行业的发展。</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构是当今世界上最成功的互联网的超媒体分布式系统。它让人们真正理解我们的网络协议</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">本来面貌。它正在成为网络服务的主流技术，同时也正在改变互联网的网络软件开发的全新思维方式。</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术和</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">框架把</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构思想真正地在实际中很好表现出来。今天微软也已经应用</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">并且提出把我们现有的网络变成为一个</span><span style="color: black"><a href="http://dannyayers.com/2007/05/01/astoria&mdash;microsoft-approaches"><span style="color: black; font-family: 宋体; text-decoration: none; text-underline: none"><span>语义网</span></span></a></span><span style="font-family: 宋体">，这种网络将会使得搜索更加智能化。</span></font></p>
<h3 style="margin: 15.6pt 0cm 0pt; line-height: normal"><font size="5"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">与</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">协议</span><span><font face="Times New Roman"> </font></span></font></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构是由</span><span><font face="Times New Roman">Roy Thomas Fielding</font></span><span style="font-family: 宋体">博士在</span><span><font face="Times New Roman">2000</font></span><span style="font-family: 宋体">年首次提出的。他为我们描绘了开发基于互联网的网络软件的蓝图。</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构是一个抽象的概念，是一种为了实现这一互联网的超媒体分布式系统的<span>行动指南</span>。利用任何的技术都可以实现这种理念。而实现这一软件架构最著名的就是</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">协议。通常我们把</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">也写作为</span><span><font face="Times New Roman">REST/HTTP</font></span><span style="font-family: 宋体">，在实际中往往把</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">理解为基于</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">的</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构，或者更进一步把</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">和</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">看作为等同的概念。</span><span><font face="Times New Roman"> </font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span style="font-family: 宋体">今天，</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">是互联网上应用最广泛的计算机协议。</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">不是一个简单的运载数据的协议，而是一个具有丰富内涵的<span>网络软件</span>的协议。它不仅仅能够对于互联网资源进行唯一定位，而且还能告诉我们对于该资源进行怎样运作。这也是</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构当中最重要的两个理念。而</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构理念是真正理解</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">协议而形成的。有了</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构理念出现，才使得软件业避免了对</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">协议的片面理解。只有正确的理论指导，才能避免在软件开发的实际工作过程中少走弯路。</span><span><font face="Times New Roman"> </font></span></font></p>
<h3 style="margin: 15.6pt 0cm 0pt; line-height: normal"><font size="5"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">与</span><span><font face="Times New Roman">URI</font></span><span style="font-family: 宋体">（资源定位）</span><span><font face="Times New Roman"> </font></span></font></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构之所以是一个超媒体系统，是因为它可以把网络上所有资源进行唯一的定位，不管你的文件是图片、文件</span><span><font face="Times New Roman">Word</font></span><span style="font-family: 宋体">还是视频文件，也不管你的文件是</span><span><font face="Times New Roman">txt</font></span><span style="font-family: 宋体">文件格式、</span><span><font face="Times New Roman">xml</font></span><span style="font-family: 宋体">文件格式还是其它文本文件格式。它利用支持</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">的</span><span><font face="Times New Roman">TCP/IP</font></span><span style="font-family: 宋体">协议来确定互联网上的资源。</span><span><font face="Times New Roman"> </font></span></font></p>
<h3 style="margin: 15.6pt 0cm 0pt; line-height: normal"><font size="5"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">与</span><span><font face="Times New Roman">CRUD</font></span><span style="font-family: 宋体">原则</span><span><font face="Times New Roman"> </font></span></font></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构遵循了</span><span><font face="Times New Roman">CRUD</font></span><span style="font-family: 宋体">原则，该原则告诉我们对于资源（包括网络资源）只需要四种行为：创建（</span><span><font face="Times New Roman">Create</font></span><span style="font-family: 宋体">）、获取（</span><span><font face="Times New Roman">Read</font></span><span style="font-family: 宋体">）、更新（</span><span><font face="Times New Roman">Update</font></span><span style="font-family: 宋体">）和销毁（</span><span><font face="Times New Roman">DELETE</font></span><span style="font-family: 宋体">）就可以完成对其操作和处理了。其实世界万物都是遵循这一规律的：生、变、见、灭。所以计算机世界也不例外。这个原则是源自于我们对于数据库表的数据操作：</span><span><font face="Times New Roman">insert</font></span><span style="font-family: 宋体">（生）、</span><span><font face="Times New Roman">select</font></span><span style="font-family: 宋体">（见）、</span><span><font face="Times New Roman">update</font></span><span style="font-family: 宋体">（变）和</span><span><font face="Times New Roman">delete</font></span><span style="font-family: 宋体">（灭），所以有时候</span><span><font face="Times New Roman">CRUD</font></span><span style="font-family: 宋体">也写作为</span><span><font face="Times New Roman">RUDI</font></span><span style="font-family: 宋体">，其中的</span><span><font face="Times New Roman">I</font></span><span style="font-family: 宋体">就是</span><span><font face="Times New Roman">insert</font></span><span style="font-family: 宋体">。这四个操作是一种原子操作，即一种无法再分的操作，通过它们可以构造复杂的操作过程，正如数学上四则运算是数字的最基本的运算一样。</span><span><font face="Times New Roman"> </font></span></font></p>
<h3 style="margin: 15.6pt 0cm 0pt; line-height: normal"><font size="5"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">与网络服务</span><span><font face="Times New Roman"> </font></span></font></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span style="font-family: 宋体">尽管在</span><span><font face="Times New Roman">Java</font></span><span style="font-family: 宋体">语言世界中网络服务目前是以</span><span><font face="Times New Roman">SOAP</font></span><span style="font-family: 宋体">技术为主，但是</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">将是网络服务的另一选择，并且是真正意义上的网络服务。基于</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">思想的网络服务，不久的将来也会成为是网络服务的主流技术。</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">不仅仅把</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">作为自己的数据运输协议，而且也作为直接进行数据处理的工具。而当前的网络服务技术都需要使用其它手段来完成数据处理工作，它们完全独立于</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">协议来进行的，这样增加了大量的复杂软件架构设计工作。</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">的思想充分利用了现有的</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">技术的网络能力。在德国电视台上曾经出现过一个这样的五十万欧元智力题：如何实现网络服务才能充分利用现有的</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">协议？该问题给出了四个答案：去问微软；</span><span><font face="Times New Roman">WSDL2.0/SOAP1.2</font></span><span style="font-family: 宋体">；</span><span><font face="Times New Roman">WS-Transfer</font></span><span style="font-family: 宋体">；根本没有。这个问题告诉我们</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">并不是一个简单的数据传来传去的协议，而是一个聪明的会表现自己的协议，这也许是</span><span><font face="Times New Roman">REST = Representational State Transfer</font></span><span style="font-family: 宋体">的真正含义。</span><span><font face="Times New Roman"> </font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span style="font-family: 宋体">实际上目前很多大公司已经采用了</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">技术作为网络服务，如</span><span><font face="Times New Roman">Google</font></span><span style="font-family: 宋体">、</span><span><font face="Times New Roman">Amazon</font></span><span style="font-family: 宋体">等。在</span><span><font face="Times New Roman">Java</font></span><span style="font-family: 宋体">语言中重要的两个以</span><span><font face="Times New Roman">SOAP</font></span><span style="font-family: 宋体">技术开始的网络服务框架</span><span><font face="Times New Roman">XFire</font></span><span style="font-family: 宋体">和</span><span><font face="Times New Roman">Axis</font></span><span style="font-family: 宋体">也把</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">作为自己的另一种选择。它们的新的项目分别是</span><span><a href="http://cwiki.apache.org/confluence/display/CXF/Index"><span style="color: windowtext; text-decoration: none; text-underline: none"><font face="Times New Roman">Apache CXF </font></span></a></span><span style="font-family: 宋体">和</span><span><a href="http://ws.apache.org/axis2/"><span style="color: windowtext; text-decoration: none; text-underline: none"><font face="Times New Roman">Axis2 </font></span></a></span><span style="font-family: 宋体">。</span><span><font face="Times New Roman">Java</font></span><span style="font-family: 宋体">语言也制定关于</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">网络服务规范：</span><span><font face="Times New Roman">JAX-RS: Java API for RESTful Web Services (JSR 311)</font></span><span style="font-family: 宋体">。相信还会出现更多与</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">相关的激动人心的信息。</span><span><font face="Times New Roman"> </font></span></font></p>
<h3 style="margin: 15.6pt 0cm 0pt; line-height: normal"><font size="5"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">与</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术</span><span><font face="Times New Roman"> </font></span></font></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span style="font-family: 宋体">尽管</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术的出现才不到两年时间，但是</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术遵循了</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">的一些重要原则。</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术充分利用了</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">来获取网络资源并且实现了</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">没有的对于异步数据进行传输的功能。</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术还使得软件更好地实现分布性功能，在一个企业内只要一个人下载了</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">引擎，其它企业内部的人员，就可以共享该资源了。</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术遵守</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">准则的应用程序中简单和可伸缩的架构，凡是采用</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术的页面简洁而又丰富，一个页面表现了丰富多彩的形态。</span><span><font face="Times New Roman"> </font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术还使用了一种不同于</span><span><font face="Times New Roman">XML</font></span><span style="font-family: 宋体">格式的</span><span><font face="Times New Roman">JSON</font></span><span style="font-family: 宋体">文件格式，这个意义在哪里呢？在</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构下我们不能对于</span><span><font face="Times New Roman">XML</font></span><span style="font-family: 宋体">文件进行序列化处理，这样程序员必须要使用自己的</span><span><font face="Times New Roman">XML</font></span><span style="font-family: 宋体">绑定框架。而以序列化的</span><span><font face="Times New Roman">JavaScript</font></span><span style="font-family: 宋体">对象为基础的</span><span><font face="Times New Roman">JSON</font></span><span style="font-family: 宋体">已经获得了广泛认可，它被认为能以远比</span><span><font face="Times New Roman">XML</font></span><span style="font-family: 宋体">更好的方式来序列化和传输简单数据结构，而且它更简洁。这对</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">是一个极大贡献和补充。</span><span><font face="Times New Roman"> </font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span style="font-family: 宋体">当前的网络应用软件还违背了</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">的&ldquo;无状态服务器&rdquo;约束。</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">服务器只知道自己的状态。</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">不关心客户端的状态，客户端的状态自己来管理，这是</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术的应用之地。通过</span><span><font face="Times New Roman">AJAX</font></span><span style="font-family: 宋体">技术，可以发挥有状态网络客户机的优势。而</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">的服务器关心的是从所有网络客户端发送到服务器操作的顺序。这样使得互联网这样一个巨大的网络得到有序的管理。</span><span><font face="Times New Roman"> </font></span></font></p>
<h3 style="margin: 15.6pt 0cm 0pt; line-height: normal"><font size="5"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">与</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">框架</span><span><font face="Times New Roman"> </font></span></font></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span><font face="Times New Roman">Ruby on Rails</font></span><span style="font-family: 宋体">框架（简称</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">或者</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">框架）是一个基于</span><span><font face="Times New Roman">Ruby</font></span><span style="font-family: 宋体">语言的越来越流行的网络应用软件开发框架。它提供了关于</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">最好的支持，也是当今应用</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">最成功的一个软件开发框架。</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">框架（从版本</span><span><font face="Times New Roman">1.2.x</font></span><span style="font-family: 宋体">起）成为了第一个引入</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">作为核心思想的主流网络软件开发框架。在</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">框架的充分利用了</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构之后，人们更加坚信</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">的重要性和必要性。</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">利用</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">软件架构思想对网络服务也提供了一流的支持。从最直观的角度看待</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">，它是网络服务最理想的手段，但是</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">框架把</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">带到了网络应用软件开发框架。这是一次飞跃，让</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">的思想从网络服务的应用提升到了网络应用软件开发。利用</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">思想的</span><span><font face="Times New Roman">simply_restful</font></span><span style="font-family: 宋体">插件已经成为了</span><span><font face="Times New Roman">Rails</font></span><span style="font-family: 宋体">框架的核心内容。</span><span><font face="Times New Roman"> </font></span></font></p>
<h3 style="margin: 15.6pt 0cm 0pt; line-height: normal"><font size="5"><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">安全性</span><span><font face="Times New Roman"> </font></span></font></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span style="font-family: 宋体">我们把现有基于</span><span><font face="Times New Roman">SOAP</font></span><span style="font-family: 宋体">的网络服务和基于</span><span><font face="Times New Roman">REST/HTTP</font></span><span style="font-family: 宋体">网络服务作个比喻，前者是一种传统的寄信方式，而后者是现代网络的电子邮件方式。要是寄信和电子邮件都有病毒存在的话，传统的寄信被送到对方就很危险，而电子邮件是开发的，电子邮件供应商比如</span><span><font face="Times New Roman">Google</font></span><span style="font-family: 宋体">为我们检查了电子邮件是否有病毒。这里并不是说明</span><span><font face="Times New Roman">SOAP</font></span><span style="font-family: 宋体">网络服务消息容易包含病毒，而是说明</span><span><font face="Times New Roman">HTTP</font></span><span style="font-family: 宋体">是无法处理</span><span><font face="Times New Roman">SOAP</font></span><span style="font-family: 宋体">信息包究竟好不好，需要额外的软件工具解决这一问题，包括防火墙也用不上和管不了。</span><span><font face="Times New Roman"> </font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><span><font face="Times New Roman">REST/HTTP</font></span><span style="font-family: 宋体">网络服务的信息包可以被防火墙理解和控制。你可以按照操作和链接进行过滤信息包，如你可以规定从外部来的只能读取（</span><span><font face="Times New Roman">GET</font></span><span style="font-family: 宋体">操作）自己服务器的资源。这样对于系统管理员而言使得软件管理更为简单。</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">的安全性还可以利用传输安全协议</span><span><font face="Times New Roman">SSL/TLS</font></span><span style="font-family: 宋体">、基本和摘要式认证（</span><span><font face="Times New Roman">Basic und Digest Authentication</font></span><span style="font-family: 宋体">）。除了这些</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">自身的安全性功能外，还可以利用像基于信息的</span><span><font face="Times New Roman">Web Services Security</font></span><span style="font-family: 宋体">（</span><span><font face="Times New Roman">JSR 155</font></span><span style="font-family: 宋体">）作为</span><span><font face="Times New Roman">REST</font></span><span style="font-family: 宋体">不错的补充。</span><span><font face="Times New Roman"> </font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt"><font size="3"><strong><span style="font-family: 宋体">作者简介：</span></strong><span style="font-family: 宋体">骆古道，网名</span><span><font face="Times New Roman">Cnruby</font></span><span style="font-family: 宋体">，八十年代初毕业于西北工业大学数理力学系，</span><span><font face="Times New Roman">1988</font></span><span style="font-family: 宋体">年公派留学德国，从事组合最优化理论研究，从九十年代初期起一直致力于计算机领域软件开发、设计和管理等方面工作，个人博客为<span style="color: black">&ldquo;</span></span><span style="color: black"><a href="http://www.hhtong.com/"><span style="color: black; font-family: 宋体; text-decoration: none; text-underline: none"><span>道喜技术日记</span></span></a></span><span style="font-family: 宋体">&rdquo;。</span></font></p>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li><a href="http://blog.licess.org/programer/" title="优秀程序员的十个特征">优秀程序员的十个特征</a></li><li><a href="http://blog.licess.org/%e6%80%8e%e6%a0%b7%e6%88%90%e4%b8%ba%e4%b8%80%e4%b8%aa%e7%a8%8b%e5%ba%8f%e9%ab%98%e6%89%8b%e5%91%a2%ef%bc%9f/" title="怎样成为一个程序高手呢？">怎样成为一个程序高手呢？</a></li><li><a href="http://blog.licess.org/71/" title="做程序员的基本原则">做程序员的基本原则</a></li><li><a href="http://blog.licess.org/%e7%a8%8b%e5%ba%8f%e5%91%98%e5%ba%94%e5%85%b7%e5%a4%87%e7%9a%84%e7%b4%a0%e8%b4%a8/" title="程序员应具备的素质">程序员应具备的素质</a></li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2007. |
<a href="http://blog.licess.org/programmer-2007-web2/">Permalink</a> |
<a href="http://blog.licess.org/programmer-2007-web2/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/programmer-2007-web2/&title=《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/%e7%a8%8b%e5%ba%8f%e5%91%98/" rel="tag">程序员</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/programmer-2007-web2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为什么每个程序员都要学C语言的五个理由</title>
		<link>http://blog.licess.org/programmer-c/</link>
		<comments>http://blog.licess.org/programmer-c/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 03:23:00 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[c]]></category>

		<guid isPermaLink="false">/articles/32</guid>
		<description><![CDATA[C语言不是面向对象语言。因为这一点，任何学习C语言的人必须学会用函数思考问题。当你真正的去学习一门面向对象语言时，就会有C语言的函数学习基础去对比。这会使学习面向对象编程更容易理解和更有乐趣。 用C编程就像进行智力体操。你要顾及到每一件事情，而这在很多其他语言中他会为你处理。你要管理指针，内存分配，和内存回收。你要明白如何处理串，还有动态数据。在其他语言中，所有这些对你来说是隐藏的。你不知道他们如何运行，更不用说改变他们的运行方式了。你得到了使用的便利，失却了对程序的控制和速度。很多情况下，这是笔值得的买卖。其他的情况下就不是这样了。 不同情况下你会使用不同的编程语言。某些情况下要求使用Lisp,其他的要Java,还有别的要C＋＋。但是C是你坚实的基础。你可能不会使用它做一些项目，但是它会帮助提高你的能力，熟练的用其他语言编程。 除了汇编语言之外，C代码生成的程序比其他任何语言生成的程序来得更小和运行更快。那么为什么不学汇编语言呢？汇编是一门学了很有用的语言，但是它没有C那样的可移植性，并且其他流行的语言比如JAVA的语法是基于C的，而不是汇编。你仍然应该学汇编，但它并不会证明它会像学C那样有用。 如果你想要写一个视频游戏引擎或操作系统，你会需要C。你不能使用C#, Java, 或 Basic来完成这些编程任务。 相关文章：Linux C编程实战——光盘下载C++实现远程关机学习VC++的读书计划，给出了一些好书的电子版下载地址 © licess for Licess&#039;s Blog, 2007. &#124; Permalink &#124; No comment &#124; Add to del.icio.us Post tags: c 美国VPS推荐 &#124; 军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付 QQ：503228080]]></description>
			<content:encoded><![CDATA[<ol>
<li><font size="4">C语言不是面向对象语言。因为这一点，任何学习C语言的人必须学会用函数思考问题。当你真正的去学习一门面向对象语言时，就会有C语言的函数学习基础去对比。这会使学习面向对象编程更容易理解和更有乐趣。 </font></li>
<li><font size="4">用C编程就像进行智力体操。你要顾及到每一件事情，而这在很多其他语言中他会为你处理。你要<strong>管理</strong>指针，内存分配，和内存<strong>回收</strong>。你要明白如何处理串，还有动态数据。在其他语言中，所有这些对你来说是隐藏的。你不知道他们如何运行，更不用说改变他们的运行方式了。你得到了使用的便利，失却了对程序的<strong>控制</strong>和速度。很多情况下，这是笔值得的<strong>买卖</strong>。其他的情况下就不是这样了。 </font></li>
<li><font size="4">不同情况下你会使用不同的编程语言。某些情况下要求使用Lisp,其他的要Java,还有别的要C＋＋。但是C是你坚实的基础。你可能不会使用它做一些项目，但是它会帮助提高你的能力，熟练的用其他语言编程。 </font></li>
<li><font size="4">除了汇编语言之外，C代码生成的程序比其他任何语言生成的程序来得更小和运行更快。那么为什么不学汇编语言呢？汇编是一门学了很有用的语言，但是它没有C那样的可移植性，并且其他流行的语言比如JAVA的语法是基于C的，而不是汇编。你仍然应该学汇编，但它并不会证明它会像学C那样有用。 </font></li>
<li><font size="4">如果你想要写一个视频游戏引擎或<strong>操作系统</strong>，你会需要C。你不能使用C#, Java, 或 Basic来完成这些编程任务。</font></li>
</ol>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li><a href="http://blog.licess.org/linux-c-cd/" title="Linux C编程实战——光盘下载">Linux C编程实战——光盘下载</a></li><li><a href="http://blog.licess.org/60/" title="C++实现远程关机">C++实现远程关机</a></li><li><a href="http://blog.licess.org/%e5%ad%a6%e4%b9%a0vc%2b%2b%e7%9a%84%e8%af%bb%e4%b9%a6%e8%ae%a1%e5%88%92%ef%bc%8c%e7%bb%99%e5%87%ba%e4%ba%86%e4%b8%80%e4%ba%9b%e5%a5%bd%e4%b9%a6%e7%9a%84%e7%94%b5%e5%ad%90%e7%89%88%e4%b8%8b%e8%bd%bd%e5/" title="学习VC++的读书计划，给出了一些好书的电子版下载地址">学习VC++的读书计划，给出了一些好书的电子版下载地址</a></li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2007. |
<a href="http://blog.licess.org/programmer-c/">Permalink</a> |
<a href="http://blog.licess.org/programmer-c/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/programmer-c/&title=为什么每个程序员都要学C语言的五个理由">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/c/" rel="tag">c</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/programmer-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个程序员的成长的六个阶段</title>
		<link>http://blog.licess.org/programmer-6/</link>
		<comments>http://blog.licess.org/programmer-6/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 18:25:00 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[软件开发]]></category>

		<guid isPermaLink="false">/articles/45</guid>
		<description><![CDATA[第一阶段 此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。 第二阶段 此阶段能精通基于某种平台的接口（例如我们现在常用的Win 32的API函数）以及所对应语言的自身的库函数。到达这个阶段后，也就相当于可以进行真实散打对练了，可以真正地在实践中做些应用。 第三阶段 此阶段能深入地了解某个平台系统的底层，已经具有了初级的内功的能力，也就是&#8220;手中有剑，心中无剑&#8221;。 第四阶级 此阶段能直接在平台上进行比较深层次的开发。基本上，能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。 这时已经不再有语言的束缚，语言只是一种工具，即使要用自己不会的语言进行开发，也只是简单地熟悉一下，就手到擒来，完全不像是第一阶段的时候学习语言的那种情况。一般来说，从第三阶段过渡到第四阶段是比较困难的。为什么会难呢？这就是因为很多人的思想变不过来。 第五阶级 此阶段就已经不再局限于简单的技术上的问题了，而是能从全局上把握和设计一个比较大的系统体系结构，从内核到外层界面。可以说是&#8220;手中无剑，心中有剑&#8221;。到了这个阶段以后，能对市面上的任何软件进行剖析，并能按自己的要求进行设计，就算是MS Word这样的大型软件，只要有充足的时间，也一定会设计出来。 第六阶级 此阶段也是最高的境界，达到&#8220;无招胜有招&#8221;。这时候，任何问题就纯粹变成了一个思路的问题，不是用什么代码就能表示的。也就是&#8220;手中无剑，心中也无剑&#8221;。 此时，对于练功的人来说，他已不用再去学什么少林拳，只是在旁看一下少林拳的对战，就能把此拳拿来就用。这就是真正的大师级的人物。这时，Win 32或Linux在你眼里是没有什么差别的。 每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成，只要多用心去研究，耐心地去学习。 要想从第二个阶段过渡到第三个阶段，就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是，有些人到达第三个阶段后，常常就很难有境界上的突破了。他们这时会产生一种观念，认为软件无非如此，认为自己已无所不能。其实，这时如果遇到大的或难些的软件，他们往往还是无从下手。 现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的，不过这样的程序员一般在软件公司也能独当一面，完成一些软件的模块。 但是，也还有一大堆处在第一阶段的程序员，他们一般就能玩玩VB，做程序时，去找一堆控件集成一个软件。 相关文章：暂无相关日志 © licess for Licess&#039;s Blog, 2007. &#124; Permalink &#124; No comment &#124; Add to del.icio.us Post tags: 美国VPS推荐 &#124; 军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付 QQ：503228080]]></description>
			<content:encoded><![CDATA[<p><span class="code"><font size="3">第一阶段</p>
<p>此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。</p>
<p>第二阶段</p>
<p>此阶段能精通基于某种平台的接口（例如我们现在常用的Win 32的API函数）以及所对应语言的自身的库函数。到达这个阶段后，也就相当于可以进行真实散打对练了，可以真正地在实践中做些应用。</p>
<p>第三阶段</p>
<p>此阶段能深入地了解某个平台系统的底层，已经具有了初级的内功的能力，也就是&ldquo;手中有剑，心中无剑&rdquo;。</p>
<p>第四阶级</p>
<p>此阶段能直接在平台上进行比较深层次的开发。基本上，能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。<br />
这时已经不再有语言的束缚，语言只是一种工具，即使要用自己不会的语言进行开发，也只是简单地熟悉一下，就手到擒来，完全不像是第一阶段的时候学习语言的那种情况。一般来说，从第三阶段过渡到第四阶段是比较困难的。为什么会难呢？这就是因为很多人的思想变不过来。</p>
<p>第五阶级</p>
<p>此阶段就已经不再局限于简单的技术上的问题了，而是能从全局上把握和设计一个比较大的系统体系结构，从内核到外层界面。可以说是&ldquo;手中无剑，心中有剑&rdquo;。到了这个阶段以后，能对市面上的任何软件进行剖析，并能按自己的要求进行设计，就算是MS Word这样的大型软件，只要有充足的时间，也一定会设计出来。</p>
<p>第六阶级</p>
<p>此阶段也是最高的境界，达到&ldquo;无招胜有招&rdquo;。这时候，任何问题就纯粹变成了一个思路的问题，不是用什么代码就能表示的。也就是&ldquo;手中无剑，心中也无剑&rdquo;。<br />
此时，对于练功的人来说，他已不用再去学什么少林拳，只是在旁看一下少林拳的对战，就能把此拳拿来就用。这就是真正的大师级的人物。这时，Win 32或Linux在你眼里是没有什么差别的。</p>
<p>每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成，只要多用心去研究，耐心地去学习。<br />
要想从第二个阶段过渡到第三个阶段，就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是，有些人到达第三个阶段后，常常就很难有境界上的突破了。他们这时会产生一种观念，认为软件无非如此，认为自己已无所不能。其实，这时如果遇到大的或难些的软件，他们往往还是无从下手。<br />
现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的，不过这样的程序员一般在软件公司也能独当一面，完成一些软件的模块。<br />
但是，也还有一大堆处在第一阶段的程序员，他们一般就能玩玩VB，做程序时，去找一堆控件集成一个软件。<br />
</font></span></p>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li>暂无相关日志</li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2007. |
<a href="http://blog.licess.org/programmer-6/">Permalink</a> |
<a href="http://blog.licess.org/programmer-6/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/programmer-6/&title=一个程序员的成长的六个阶段">del.icio.us</a>
<br/>
Post tags: <br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/programmer-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>软件开发入门学习的个人看法</title>
		<link>http://blog.licess.org/%e8%bd%af%e4%bb%b6%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e5%ad%a6%e4%b9%a0%e7%9a%84%e4%b8%aa%e4%ba%ba%e7%9c%8b%e6%b3%95/</link>
		<comments>http://blog.licess.org/%e8%bd%af%e4%bb%b6%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e5%ad%a6%e4%b9%a0%e7%9a%84%e4%b8%aa%e4%ba%ba%e7%9c%8b%e6%b3%95/#comments</comments>
		<pubDate>Sat, 03 Nov 2007 02:18:00 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">/articles/47</guid>
		<description><![CDATA[踏实

&#160;&#160; 偶然在网上看到《由C#风潮想起的－给初学编程者的忠告》一文. 其中一个角度：避免&#8220;浮躁&#8221;，倡导&#8220;踏实&#8221;的学习方法，我是很认同的，但总觉该文作者标题&#8220;-给初学编程者的忠告&#8221;太大，所以在其文列出的一些具体的&#8220;操作方法&#8221;上我认为可以探讨，如同自己在某次公司总结会上就《软件开发，我们积累的是什么？》为题跟同事聊了半个多小时后，其中一个同事提到希望我能继续把这个题目细化，就刚入行的他们具体该如何发展有更&#8220;具操作性&#8221;的指引，当时我是跟他们说这只是我在这一行呆了5年多的体会，谈&#8220;指引&#8221;还太远，只是可以提出来大家思考、讨论。
&#160;&#160;
不要过度贬低编码]]></description>
			<content:encoded><![CDATA[<p><font size="3"><font color="#ff0000">踏实</p>
<p></font>&nbsp;&nbsp; 偶然在网上看到《由C#风潮想起的－给初学编程者的忠告》一文. 其中一个角度：避免&ldquo;浮躁&rdquo;，倡导&ldquo;踏实&rdquo;的学习方法，我是很认同的，但总觉该文作者标题&ldquo;-给初学编程者的忠告&rdquo;太大，所以在其文列出的一些具体的&ldquo;操作方法&rdquo;上我认为可以探讨，如同自己在某次公司总结会上就《软件开发，我们积累的是什么？》为题跟同事聊了半个多小时后，其中一个同事提到希望我能继续把这个题目细化，就刚入行的他们具体该如何发展有更&ldquo;具操作性&rdquo;的指引，当时我是跟他们说这只是我在这一行呆了5年多的体会，谈&ldquo;指引&rdquo;还太远，只是可以提出来大家思考、讨论。<br />
&nbsp;&nbsp;<br />
<font color="#ff0000">不要过度贬低编码</p>
<p></font>&nbsp;&nbsp; 不要真的认为&quot;不少大师级的计算机技术研究者是不懂编程的&quot;,做软件开发编码是最最基础的东西,只有踏踏实实的掌握好这个基础你才有办法往上走,不管做分析做设计做项目管理你都需要能清楚东西是如何实现的?可不可以实现?否则肯定出现大量的:&quot;设计是设计,编码是编码&quot;,&quot;产品都是代码人员从头到尾实现的&quot;,&quot;究竟需花多少时间,难度有多大,开发人员说了算&quot;,&quot;质量/成本/进度全是黑匣子&quot;...现象,如果你是做编码那编码就更重要了:).所以对于有志从事这个行业(软件开发)的个人来说,必须先从&quot;重视编码&quot;开始.过了这一关才能去考虑做系统分析,做项目管理...<br />
&nbsp;&nbsp; 软件开发的各个环节是相辅相承的,分析有分析的重要,设计有设计的重要,编码有编码的重要,测试实施也各有其地位,任何一个环节搞不好就如同我们熟悉的木桶理论,&quot;最薄弱的一个环节制约着其总容量&quot;.<br />
&nbsp;&nbsp; 既然编码重要,那该如何学编码?<br />
&nbsp;&nbsp;<br />
<font color="#ff0000">专心学好一门语言</font><br />
&nbsp;&nbsp; 算算自己用过的语言也不少（括弧里为使用该语言写的比较有代表性的东东）,C（dos版的图像/图标编辑工具,96年的《电脑报》有介绍）,C++（可自定义方块形状的方块游戏,被收录于99年《软件》杂志的附送光盘上）,汇编(DOS汉字系统,97年底完成),PB(学校自动排课/排考模块,98年),ASP(一套web版的企业信息系统,99年),VB(企业信息系统的核心组件,99年),delphi(工作流平台,组件式GIS系统等),Java（Delphi Client + J2EE Server协同实现）,.Net（规则引擎）,PHH...<br />
&nbsp;&nbsp; 看起来好象也不少,回过头来想想自己真正认真学过的语言只有一个,就是&ldquo;C&rdquo;, Dos年代的TC2.0,用它写了大量的小程序,比较系统的了解了编程是怎么一回事,记得那个时候看到什么软件都要琢磨它是如何实现的?如果让我来实现该如何做?也模仿了不少东西,虽然多是很表面的模仿但对自己编程思维的锻炼很有好处.后来用其它语言基本上都只是翻翻帮助,然后找找其Demo代码来看看,很快就可进入状态.<br />
&nbsp;&nbsp; 语言都是差不多的,重要的是&ldquo;编码的思想&rdquo;,具备了该思想语言就只是工具了,用什么工具实现都差不多,该思想的形成是需要&ldquo;磨练&rdquo;的,就是&ldquo;专心使用一门语言&rdquo;来磨练(甚至需要有&ldquo;咬文嚼字的孔已己作风&rdquo;),然后可&ldquo;一理通百理通&rdquo;,不然你只是浮于表面的去学再多的语言都没有.都不能拿来做真正的开发.都不能了解&ldquo;编码&rdquo;的内涵.<br />
&nbsp;&nbsp; 如在今年招聘面试的时候看到太多写着什么语言都精通(或熟练)的毕业生,我惯用的方法是给他(她)一张纸一支笔,让他(她)用自己最了解的语言写一个算阶乘的函数,这个问题你一看肯定说很简单,好,接着我会往下问,可以有多少种方法来实现:循环,递归&hellip;还有吗?你能写出多少种来?(代码基本结构模式的考察).代码质量如何? 有没有考虑错误处理(太多人写的代码会进入死循环比如输入的是负数) ? int的上限是多少,用long? 如果输入值比较大,算得出结果吗,该如何去实现可以计算很大数的该函数?...看着他(她)写出来的代码一个个问题的问就得了,不管你用什么语言,不管你&ldquo;精通&rdquo;多少种语言,我只问这些用什么语言来解决问题都需要的基础的东西, 就是&ldquo;编码的思想&rdquo;.<br />
&nbsp;&nbsp;在学专一门语言的基础上新东西当然要跟,不然在这个行业你是很难&ldquo;混下去&rdquo;的,但有这&ldquo;学专一门&rdquo;的前提后,你跟起来就轻松了,而不用总是得&ldquo;追&rdquo;~<br />
&nbsp;&nbsp;在&ldquo;专&rdquo;一门语言的过程中为解决问题你会发现&ldquo;算法&rdquo;很重要,这就是接下来要说的&ldquo;基础&rdquo;了.</p>
<p><font color="#ff0000">基础很重要</font><br />
&nbsp;&nbsp; 面试的时候我一般都会问,基础知识学得如何? 一般重点问的是:《数据结构》, 《编译原理》, 《数据库原理》的内容.至于《由》文提到的:《汇编语言》,《 Windows 程序设计》我是不会问的.这些是可以进一步学习的东西,但对现在的开发来说不是必须的.《软件工程》我向来不问,教材理论跟实际差得太远了~<br />
&nbsp;&nbsp;《数据结构》很重要,不懂数据结构很多编码就是&ldquo;蛮干&rdquo;,而且往往把&ldquo;简单问题复杂化&rdquo;,甚至复杂到不可能解决.认真学习《数据结构》并多做尝试用你熟悉的语言去实现里面的算法,你会发觉&ldquo;世界真奇妙&rdquo;~不要认为你不会去开发&ldquo;编程语言&rdquo;不需要学习《编译原理》, 《编译原理》里面包含了太多开发软件的&ldquo;奇妙&rdquo;的思想案例,认真体会你肯定会被其解决问题的方法折服,从中你能体会到很多东西,对以后做软件(不管是设计还是编码等)大有帮助,里面有很多现存的方法可用在你的项目中,而这些跟《数据结构》是互为补充的.在这些基础上接下来《设计模式》一书你也一定得看看.<br />
&nbsp;&nbsp; 很多应用都离不开数据库,最终总得找个地方来&ldquo;操纵,存储,分析数据&rdquo;,关于范式,关于锁,关于SQL,关于笛卡儿那一套你总得了解了解,不然无法入手,这就需要好好学习《数据库原理》了.单纯知道几条SQL语句是远远不够的,如何保证数据的完整性,安全性?如何提高效率等等都需要这些基础的支持~<br />
&nbsp;&nbsp; 当然英文也是基础,看英文资料确实重要，不单是书,还有网络上的大量资料,论坛&hellip;看的时候别害怕就是了，毕竟都是受过高等教育的，英语也学了那么多年起码都有点底吧，配合这两个工具：《金山词霸》及Google.com，不懂的单词&ldquo;即指即译&rdquo;，但很多名词或基础知识不是靠单词解释能清楚的，配合搜索引擎查查相关资料看看，记住一点，看到不懂的东西多看几遍，默记一小会，日积月累你能看懂的东西就多了。<br />
&nbsp;&nbsp;<br />
<font color="#ff0000">兴趣<br />
</font>&nbsp;&nbsp; 最后该说说的就是兴趣问题,如果你能对它真正感兴趣(如果要从事软件开发又没兴趣的话赶紧先培养兴趣去^_^),对看技术资料就想别人看武侠小说看球赛一样的话,再配合上面提到的几点(踏实, 先专后广, 基础扎实)相信在这一行多少是可以做点东西出来的~~<br />
</font></p>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li><a href="http://blog.licess.org/my-android-soft/" title="我的Android常用软件">我的Android常用软件</a></li><li><a href="http://blog.licess.org/kuaipan/" title="金山快盘 &#8211; 类Dropbox同步软件推荐">金山快盘 &#8211; 类Dropbox同步软件推荐</a></li><li><a href="http://blog.licess.org/linux_develop_tools/" title="Linux下的软件开发工具">Linux下的软件开发工具</a></li><li><a href="http://blog.licess.org/%e5%8d%81%e7%a7%8d%e6%ad%a6%e5%99%a8%e4%bf%9d%e8%af%81%e4%bd%a0%e7%9a%84%e7%b3%bb%e7%bb%9f%e5%ae%89%e5%85%a8/" title="十种武器保证你的系统安全">十种武器保证你的系统安全</a></li><li><a href="http://blog.licess.org/visualstudio2005%e5%85%a5%e9%97%a8net%e7%b3%bb%e5%88%97%e8%a7%86%e9%a2%91%e6%95%99%e7%a8%8b/" title="Visual Studio2005入门.Net系列视频教程">Visual Studio2005入门.Net系列视频教程</a></li><li><a href="http://blog.licess.org/httpfileserver%e6%b1%89%e5%8c%96%e7%bb%bf%e8%89%b2%e7%89%88-%e5%82%bb%e7%93%9c%e5%bc%8f%e6%9e%b6%e8%ae%be%e4%b8%aa%e4%ba%ba%e6%96%87%e4%bb%b6%e4%b8%8b%e8%bd%bd%e5%85%b1%e4%ba%ab%e7%bd%91%e7%ab%99/" title="HTTP File Server汉化绿色版- 傻瓜式架设个人文件下载共享网站">HTTP File Server汉化绿色版- 傻瓜式架设个人文件下载共享网站</a></li><li><a href="http://blog.licess.org/folder2mypc-%e6%8a%8a%e5%b8%b8%e7%94%a8%e7%9a%84%e6%96%87%e4%bb%b6%e5%a4%b9%e5%92%8c%e7%a8%8b%e5%ba%8f%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f%e6%94%be%e8%bf%9b%e2%80%9c%e6%88%91%e7%9a%84%e7%94%b5%e8%84%9/" title="Folder2MyPC-把常用的文件夹和程序快捷方式放进“我的电脑”">Folder2MyPC-把常用的文件夹和程序快捷方式放进“我的电脑”</a></li><li><a href="http://blog.licess.org/closemonitor%e5%85%b3%e9%97%ad%e6%98%be%e7%a4%ba%e5%99%a8%e5%b0%8f%e5%b7%a5%e5%85%b7/" title="Close Monitor 关闭显示器小工具">Close Monitor 关闭显示器小工具</a></li><li><a href="http://blog.licess.org/31%e4%b8%aa%e7%94%a8%e6%9d%a5%e6%b5%8b%e8%af%95%e4%bd%a0%e7%bd%91%e7%ab%99%e5%90%84%e9%a1%b9%e6%80%a7%e8%83%bd%e7%9a%84%e5%85%8d%e8%b4%b9%e5%9c%a8%e7%ba%bf%e5%b7%a5%e5%85%b7/" title="31 个用来测试你网站各项性能的免费在线工具">31 个用来测试你网站各项性能的免费在线工具</a></li><li><a href="http://blog.licess.org/126/" title="自己暑假前的VB课程设计-图书信息管理系统">自己暑假前的VB课程设计-图书信息管理系统</a></li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2007. |
<a href="http://blog.licess.org/%e8%bd%af%e4%bb%b6%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e5%ad%a6%e4%b9%a0%e7%9a%84%e4%b8%aa%e4%ba%ba%e7%9c%8b%e6%b3%95/">Permalink</a> |
<a href="http://blog.licess.org/%e8%bd%af%e4%bb%b6%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e5%ad%a6%e4%b9%a0%e7%9a%84%e4%b8%aa%e4%ba%ba%e7%9c%8b%e6%b3%95/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/%e8%bd%af%e4%bb%b6%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e5%ad%a6%e4%b9%a0%e7%9a%84%e4%b8%aa%e4%ba%ba%e7%9c%8b%e6%b3%95/&title=软件开发入门学习的个人看法">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/%e5%bc%80%e5%8f%91/" rel="tag">开发</a>, <a href="http://blog.licess.org/tag/%e8%bd%af%e4%bb%b6/" rel="tag">软件</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/%e8%bd%af%e4%bb%b6%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e5%ad%a6%e4%b9%a0%e7%9a%84%e4%b8%aa%e4%ba%ba%e7%9c%8b%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WINDOWS程序,架构</title>
		<link>http://blog.licess.org/windows%e7%a8%8b%e5%ba%8f%2c%e6%9e%b6%e6%9e%84/</link>
		<comments>http://blog.licess.org/windows%e7%a8%8b%e5%ba%8f%2c%e6%9e%b6%e6%9e%84/#comments</comments>
		<pubDate>Sat, 03 Nov 2007 01:27:00 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[程序]]></category>

		<guid isPermaLink="false">/articles/50</guid>
		<description><![CDATA[&#160;&#160; 进行Windows程序设计，实际上是在进行一种对象导向的程序设计（OOP）。这一点在Windows中使用得最多的对象上表现最为明显。这种对象正是Windows之所以命名为「Windows」的原因，它具有人格化的特征，甚至可能会在您的梦中出现，这就是那个叫做「窗口」的东西。

&#160; 桌面上最明显的窗口就是应用程序窗口。这些窗口含有显示程序名称的标题列、菜单甚至可能还有工具列和滚动条。另一类窗口是对话框，它可以有标题列也可以没有标题列。]]></description>
			<content:encoded><![CDATA[<table cellspacing="0" cellpadding="10" align="left" border="0">
<tbody>
<tr>
<td><font size="2"><!--插入广告JS代码--></font></td>
</tr>
</tbody>
</table>
<p><font size="2">&nbsp;&nbsp; 进行Windows程序设计，实际上是在进行一种对象导向的程序设计（OOP）。这一点在Windows中使用得最多的对象上表现最为明显。这种对象正是Windows之所以命名为「Windows」的原因，它具有人格化的特征，甚至可能会在您的梦中出现，这就是那个叫做「窗口」的东西。 </font></p>
<p><font size="2"><br />
&nbsp; 桌面上最明显的窗口就是应用程序窗口。这些窗口含有显示程序名称的标题列、菜单甚至可能还有工具列和滚动条。另一类窗口是对话框，它可以有标题列也可以没有标题列。</font></p>
<p><font size="2">&nbsp; 装饰对话框表面的还有各式各样的按键、单选按钮、复选框、清单方块、滚动条和文字输入区域。其中每一个小的视觉对象都是一个窗口。更确切地说，这些都称为「子窗口」或「控件窗口」或「子窗口控件」。</font></p>
<p><font size="2"><br />
&nbsp; 作为对象，使用者会在屏幕上看到这些窗口，并通过键盘和鼠标直接与它们进行交互操作。更有趣的是，程序写作者的观点与使用者的观点极其类似。窗口以「消息」的形式接收窗口的输入，窗口也用消息与其它窗口通讯。对讯息的理解将是学习如何写作Windows程序所必须越过的障碍之一。</font></p>
<p><font size="2"><br />
&nbsp; 这有一个Windows的消息范例：我们知道，大多数的Windows程序都有大小合适的应用程序窗口。也就是说，您能够通过鼠标拖动窗口的边框来改变窗口的大小。通常，程序将通过改变窗口中的内容来响应这种大小的变化。您可能会猜测（并且您也是正确的），是Windows本身而不是应用程序在处理与使用者重新调整窗口大小相关的全部杂乱程序。由于应用程序能改变其显示的样子，所以它也「知道」窗口大小改变了。</font></p>
<p><font size="2"><br />
&nbsp; 应用程序是如何知道使用者改变了窗口的大小的呢？由于程序写作者习惯了往常的文字模式程序，操作系统没有设置将此类消息通知给使用者的机制。问题的关键在于理解Windows所使用的架构。当使用者改变窗口的大小时，Window给程序发送一个消息指出新窗口的大小。然后程序就可以调整窗口中的内容，以响应大小的变化。</font></p>
<p><font size="2">「Windows给程序发送消息。」我们希望读者不要对这句话视而不见。它到底表达了什么意思呢？我们在这里讨论的是程序代码，而不是一个电子邮件系统。操作系统怎么给程序发送消息呢？</font></p>
<p><font size="2">&nbsp; 其实，所谓「Windows给程序发送消息」，是指Windows呼叫程序中的一个函数，该函数的参数描述了这个特定消息。这种位于Windows程序中的函数称为「窗口消息处理程序」。</font></p>
<p><font size="2">&nbsp; 无疑，读者对程序呼叫操作系统的做法是很熟悉的。例如，程序在打开磁盘文件时就要使用有关的系统呼叫。读者所不习惯的，可能是操作系统呼叫程序，而这正是Windows对象导向架构的基础。</font></p>
<p><font size="2">&nbsp; 程序建立的每一个窗口都有相关的窗口消息处理程序。这个窗口消息处理程序是一个函数，既可以在程序中，也可以在动态链接库中。Windows通过呼叫窗口消息处理程序来给窗口发送消息。窗口消息处理程序根据此消息进行处理，然后将控制传回给Windows。</font></p>
<p><font size="2"><br />
&nbsp; 更确切地说，窗口通常是在「窗口类别」的基础上建立的。窗口类别标识了处理窗口消息的窗口消息处理程序。使用窗口类别使多个窗口能够属于同一个窗口类别，并使用同一个窗口消息处理程序。例如，所有Windows程序中的所有按钮均依据同一个窗口类别。这个窗口类别与一个处理所有按钮消息的窗口消息处理程序（位于Windows的动态链接库中）联结。</font></p>
<p><font size="2">&nbsp; 在对象导向的程序设计中，对象是程序与数据的组合。窗口是一种对象，其程序是窗口消息处理程序。数据是窗口消息处理程序保存的信息和Windows为每个窗口以及系统中那个窗口类别保存的信息。</font></p>
<p><font size="2"><br />
&nbsp;&nbsp; &nbsp;窗口消息处理程序处理给窗口发送消息。这些消息经常是告知窗口，使用者正使用键盘或者鼠标进行输入。这正是按键窗口知道它被「按下」的奥妙所在。在窗口大小改变，或者窗口表面需要重画时，由其它消息通知窗口。</font></p>
<p><font size="2">&nbsp; Windows程序开始执行后，Windows为该程序建立一个「消息队列」。这个消息队列用来存放该程序可能建立的各种不同窗口的消息。程序中有一小段程序代码，叫做「消息循环」，用来从队列中取出消息，并且将它们发送给相应的窗口消息处理程序。有些消息直接发送给窗口消息处理程序，不用放入消息队列中。</font></p>
<p><font size="2">&nbsp; 如果您对这段Windows架构过于简略的描述将信将疑，就让我们去看看在实际的程序中，窗口、窗口类别、窗口消息处理程序、消息队列、消息循环和窗口消息是如何相互配合的。这或许会对您有些帮</font></p>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li><a href="http://blog.licess.org/web_server/" title="推荐介绍几款小巧的Web Server程序">推荐介绍几款小巧的Web Server程序</a></li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2007. |
<a href="http://blog.licess.org/windows%e7%a8%8b%e5%ba%8f%2c%e6%9e%b6%e6%9e%84/">Permalink</a> |
<a href="http://blog.licess.org/windows%e7%a8%8b%e5%ba%8f%2c%e6%9e%b6%e6%9e%84/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/windows%e7%a8%8b%e5%ba%8f%2c%e6%9e%b6%e6%9e%84/&title=WINDOWS程序,架构">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/%e7%a8%8b%e5%ba%8f/" rel="tag">程序</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/windows%e7%a8%8b%e5%ba%8f%2c%e6%9e%b6%e6%9e%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++实现远程关机</title>
		<link>http://blog.licess.org/60/</link>
		<comments>http://blog.licess.org/60/#comments</comments>
		<pubDate>Sun, 28 Oct 2007 04:07:00 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[c]]></category>

		<guid isPermaLink="false">/articles/60</guid>
		<description><![CDATA[记得刚学C++的时候，喜欢研究API，当时同事有一个高手，写了段代码，我在写程序的时候，莫明妙的，机器突然关掉了！我正在纳闷的时候，我听到了他的奸笑！ 　　原来是他干的，后来我研究了好久InitiateSystemShutdown这个API函数，了解被作弄的原理了，因为我的机器加入了Windows的域，而且域的超级用户我也设置成对我本机有Administrator权限，所以，他才有机可乘！后来写了以下这段代码，让他也在工作的时候被我远程关机，爽啊！学了新东西，又以其人之道还施彼身！ 　　 //ShutDownSystem函数是关本地，自己的机器 　　 BOOL CAlarmClockDlg::ShutDownSystem() 　　 { 　　 HANDLE hToken; 　　 TOKEN_PRIVILEGES tkp; 　　 // Get a token for this process. 　　 if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES &#124; TOKEN_QUERY, &#38;hToken)) 　　 AfxMessageBox(&#34;OpenProcessToken&#34;); 　　 // Get the LUID for the shutdown privilege. 　　 LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&#38;tkp.Privileges[0].Luid); 　　 tkp.PrivilegeCount = 1; // one privilege to set 　　 tkp.Privileges[0].Attributes = [...]]]></description>
			<content:encoded><![CDATA[<p><font size="2">记得刚学C++的时候，喜欢研究API，当时同事有一个高手，写了段代码，我在写程序的时候，莫明妙的，机器突然关掉了！我正在纳闷的时候，我听到了他的奸笑！ 　　原来是他干的，后来我研究了好久InitiateSystemShutdown这个API函数，了解被作弄的原理了，因为我的机器加入了Windows的域，而且域的超级用户我也设置成对我本机有Administrator权限，所以，他才有机可乘！后来写了以下这段代码，让他也在工作的时候被我远程关机，爽啊！学了新东西，又以其人之道还施彼身！<br />
　　 //ShutDownSystem函数是关本地，自己的机器 　　<br />
BOOL CAlarmClockDlg::ShutDownSystem() 　　 { 　　 HANDLE hToken; 　　 TOKEN_PRIVILEGES tkp; 　　 // Get a token for this process. 　　 if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp;hToken)) 　　 AfxMessageBox(&quot;OpenProcessToken&quot;); 　　 // Get the LUID for the shutdown privilege. 　　 LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&amp;tkp.Privileges[0].Luid); 　　 tkp.PrivilegeCount = 1; // one privilege to set 　　 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 　　 // Get the shutdown privilege for this process. 　　 AdjustTokenPrivileges(hToken, FALSE, &amp;tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0); 　　 if(GetLastError()!= ERROR_SUCCESS) 　　 AfxMessageBox(&quot;AdjustTokenPrivileges&quot;); 　　 // Shut down the system and force all applications to close. 　　 if(!ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE, 0)) 　　 { 　　 return FALSE; 　　 } 　　 else 　　 { 　　 return TRUE; 　　 } 　　 } 　　 //shutdownHost这个就是远程关机的C++函数了！hostName可以是机器IP，也可以是机器名字！ 　　 BOOL CAlarmClockDlg::shutdownHost(CString hostName) 　　 { 　　 HANDLE hToken; // handle to process token 　　 TOKEN_PRIVILEGES tkp; // pointer to token structure 　　 BOOL fResult; // system shutdown flag 　　 // Get the current process token handle so we can get shutdown 　　 // privilege. 　　 if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp;hToken)) 　　 AfxMessageBox(&quot;OpenProcessToken failed.&quot;); 　　 // Get the LUID for shutdown privilege. 　　 LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &amp;tkp.Privileges[0].Luid); 　　 tkp.PrivilegeCount = 1; // one privilege to set 　　 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 　　 // Get shutdown privilege for this process. 　　 AdjustTokenPrivileges(hToken, FALSE, &amp;tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 　　 // Cannot test the return value of AdjustTokenPrivileges. 　　 if (GetLastError() != ERROR_SUCCESS) 　　 AfxMessageBox(&quot;AdjustTokenPrivileges enable failed.&quot;); 　　 // Display the shutdown dialog box and start the time-out countdown. 　　 fResult = InitiateSystemShutdown(&quot;192.168.100.245&quot;, // shut down local computer 　　 &quot;Click on the main window and press the Escape key to cancel shutdown.&quot;, // message to user 　　 1, // time-out period 　　 FALSE, // ask user to close apps //注意这一段API调用！ 　　 FALSE); // reboot after shutdown 　　 if (!fResult) 　　 { 　　 AfxMessageBox(&quot;InitiateSystemShutdown failed.&quot;); 　　 } 　　 // Disable shutdown privilege. 　　 tkp.Privileges[0].Attributes = 0; 　　 AdjustTokenPrivileges(hToken, FALSE, &amp;tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 　　 if (GetLastError() != ERROR_SUCCESS) 　　 { 　　 AfxMessageBox(&quot;AdjustTokenPrivileges disable failed.&quot;); 　　 } 　　 return TRUE; 　　 } </font></p>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li><a href="http://blog.licess.org/linux-c-cd/" title="Linux C编程实战——光盘下载">Linux C编程实战——光盘下载</a></li><li><a href="http://blog.licess.org/programmer-c/" title="为什么每个程序员都要学C语言的五个理由">为什么每个程序员都要学C语言的五个理由</a></li><li><a href="http://blog.licess.org/%e5%ad%a6%e4%b9%a0vc%2b%2b%e7%9a%84%e8%af%bb%e4%b9%a6%e8%ae%a1%e5%88%92%ef%bc%8c%e7%bb%99%e5%87%ba%e4%ba%86%e4%b8%80%e4%ba%9b%e5%a5%bd%e4%b9%a6%e7%9a%84%e7%94%b5%e5%ad%90%e7%89%88%e4%b8%8b%e8%bd%bd%e5/" title="学习VC++的读书计划，给出了一些好书的电子版下载地址">学习VC++的读书计划，给出了一些好书的电子版下载地址</a></li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2007. |
<a href="http://blog.licess.org/60/">Permalink</a> |
<a href="http://blog.licess.org/60/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/60/&title=C++实现远程关机">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/c/" rel="tag">c</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/60/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>做程序员的基本原则</title>
		<link>http://blog.licess.org/71/</link>
		<comments>http://blog.licess.org/71/#comments</comments>
		<pubDate>Sun, 21 Oct 2007 03:23:00 +0000</pubDate>
		<dc:creator>licess</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[程序员]]></category>

		<guid isPermaLink="false">/articles/71</guid>
		<description><![CDATA[　　1. 扎实的基础。数据结构、离散数学、编译原理，这些是所有计算机科学的基础，如果不掌握他们，很难写出高水平的程序。据我的观察，学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写，但当你发现写到一定程度很难再提高的时候，就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP，即使你再精通OOP，遇到一些基本算法的时候可能也会束手无策。 　　2. 丰富的想象力。不要拘泥于固定的思维方式，遇到问题的时候要多想几种解决问题的方案，试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上，除计算机以外，多涉猎其他的学科，比如天文、物理、数学等等。另外，多看科幻电影也是一个很好的途径。 　　3. 最简单的是最好的。这也许是所有科学都遵循的一条准则，如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解，更容易实现，也更容易维护。遇到问题时要优先考虑最简单的方案，只有简单方案不能满足要求时再考虑复杂的方案。 　　4. 不钻牛角尖。当你遇到障碍的时候，不妨暂时远离电脑，看看窗外的风景，听听轻音乐，和朋友聊聊天。当我遇到难题的时候会去玩游戏，而且是那种极暴力的打斗类游戏，当负责游戏的那部分大脑细胞极度亢奋的时候，负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候，我会发现那些难题现在竟然可以迎刃而解。 　　5. 对答案的渴求。人类自然科学的发展史就是一个渴求得到答案的过程，即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念，一定要找到问题的答案，你才会付出精力去探索，即使最后没有得到答案，在过程中你也会学到很多东西。 　　6. 多与别人交流。三人行必有我师，也许在一次和别人不经意的谈话中，就可以迸出灵感的火花。多上上网，看看别人对同一问题的看法，会给你很大的启发。 　　7. 良好的编程风格。注意养成良好的习惯，代码的缩进编排，变量的命名规则要始终保持一致。大家都知道如何排除代码中错误，却往往忽视了对注释的排错。注释是程序的一个重要组成部分，它可以使你的代码更容易理解，而如果代码已经清楚地表达了你的思想，就不必再加注释了，如果注释和代码不一致，那就更加糟糕。 　　8. 韧性和毅力。这也许是&#34;高手&#34;和一般程序员最大的区别。高手们并不是天才，他们是在无数个日日夜夜中磨练出来的。成功能给我们带来无比的喜悦，但过程却是无比的枯燥乏味。你不妨做个测试，找个10000以内的素数表，把它们全都抄下来，然后再检查三遍，如果能够不间断地完成这一工作，你就可以满足这一条。 相关文章：优秀程序员的十个特征《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”怎样成为一个程序高手呢？程序员应具备的素质 © licess for Licess&#039;s Blog, 2007. &#124; Permalink &#124; No comment &#124; Add to del.icio.us Post tags: 程序员 美国VPS推荐 &#124; 军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付 QQ：503228080]]></description>
			<content:encoded><![CDATA[<div class="t_msgfont" id="message12918"><font size="2">　　1. 扎实的基础。数据结构、离散数学、编译原理，这些是所有计算机科学的基础，如果不掌握他们，很难写出高水平的程序。据我的观察，学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写，但当你发现写到一定程度很难再提高的时候，就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP，即使你再精通OOP，遇到一些基本算法的时候可能也会束手无策。</p>
<p>　　2. 丰富的想象力。不要拘泥于固定的思维方式，遇到问题的时候要多想几种解决问题的方案，试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上，除计算机以外，多涉猎其他的学科，比如天文、物理、数学等等。另外，多看科幻电影也是一个很好的途径。</p>
<p>　　3. 最简单的是最好的。这也许是所有科学都遵循的一条准则，如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解，更容易实现，也更容易维护。遇到问题时要优先考虑最简单的方案，只有简单方案不能满足要求时再考虑复杂的方案。</p>
<p>　　4. 不钻牛角尖。当你遇到障碍的时候，不妨暂时远离电脑，看看窗外的风景，听听轻音乐，和朋友聊聊天。当我遇到难题的时候会去玩游戏，而且是那种极暴力的打斗类游戏，当负责游戏的那部分大脑细胞极度亢奋的时候，负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候，我会发现那些难题现在竟然可以迎刃而解。</p>
<p>　　5. 对答案的渴求。人类自然科学的发展史就是一个渴求得到答案的过程，即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念，一定要找到问题的答案，你才会付出精力去探索，即使最后没有得到答案，在过程中你也会学到很多东西。</p>
<p>　　6. 多与别人交流。三人行必有我师，也许在一次和别人不经意的谈话中，就可以迸出灵感的火花。多上上网，看看别人对同一问题的看法，会给你很大的启发。</p>
<p>　　7. 良好的编程风格。注意养成良好的习惯，代码的缩进编排，变量的命名规则要始终保持一致。大家都知道如何排除代码中错误，却往往忽视了对注释的排错。注释是程序的一个重要组成部分，它可以使你的代码更容易理解，而如果代码已经清楚地表达了你的思想，就不必再加注释了，如果注释和代码不一致，那就更加糟糕。</p>
<p>　　8. 韧性和毅力。这也许是&quot;高手&quot;和一般程序员最大的区别。高手们并不是天才，他们是在无数个日日夜夜中磨练出来的。成功能给我们带来无比的喜悦，但过程却是无比的枯燥乏味。你不妨做个测试，找个10000以内的素数表，把它们全都抄下来，然后再检查三遍，如果能够不间断地完成这一工作，你就可以满足这一条。</font></div>
<h2  class="related_post_title">相关文章：</h2><ul class="related_post"><li><a href="http://blog.licess.org/programer/" title="优秀程序员的十个特征">优秀程序员的十个特征</a></li><li><a href="http://blog.licess.org/programmer-2007-web2/" title="《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”">《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”</a></li><li><a href="http://blog.licess.org/%e6%80%8e%e6%a0%b7%e6%88%90%e4%b8%ba%e4%b8%80%e4%b8%aa%e7%a8%8b%e5%ba%8f%e9%ab%98%e6%89%8b%e5%91%a2%ef%bc%9f/" title="怎样成为一个程序高手呢？">怎样成为一个程序高手呢？</a></li><li><a href="http://blog.licess.org/%e7%a8%8b%e5%ba%8f%e5%91%98%e5%ba%94%e5%85%b7%e5%a4%87%e7%9a%84%e7%b4%a0%e8%b4%a8/" title="程序员应具备的素质">程序员应具备的素质</a></li></ul><hr />
<p><small>© licess for <a href="http://blog.licess.org">Licess&#039;s Blog</a>, 2007. |
<a href="http://blog.licess.org/71/">Permalink</a> |
<a href="http://blog.licess.org/71/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://blog.licess.org/71/&title=做程序员的基本原则">del.icio.us</a>
<br/>
Post tags: <a href="http://blog.licess.org/tag/%e7%a8%8b%e5%ba%8f%e5%91%98/" rel="tag">程序员</a><br/>
<br/>
<img src="http://www.vpser.net/images/tuijian.gif"> <a href="http://www.vpser.net/usa-vps/">美国VPS推荐</a>  | <a href="http://shop63846532.taobao.com/">军哥代购 - 提供美国及海外VPS/VPN/域名代购，美元/欧元代付</a> QQ：503228080
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.licess.org/71/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

