﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小菜毛毛技术分享-随笔分类-技术族谱：软件开发相关知识体系的整理心得（图）</title><link>http://www.blogjava.net/caizh2009/category/42003.html</link><description>与大家共同成长</description><language>zh-cn</language><lastBuildDate>Wed, 07 Oct 2009 22:17:06 GMT</lastBuildDate><pubDate>Wed, 07 Oct 2009 22:17:06 GMT</pubDate><ttl>60</ttl><item><title>技术族谱：软件开发相关知识体系的整理心得（图）</title><link>http://www.blogjava.net/caizh2009/archive/2009/10/07/297404.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Wed, 07 Oct 2009 13:22:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2009/10/07/297404.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/297404.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2009/10/07/297404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/297404.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/297404.html</trackback:ping><description><![CDATA[<p>每隔一段时间，就会收到些类似的消息：<br />
怎么学好软件开发？ 我已经学完了A，我接下来该学B还是C？</p>
<p>其实这样的问题，真的是一言难复。如何学习，是一个很复杂的话题，尤其是眼下业内的技术名词日新月异，乱花迷人眼，使得新人更加看不清。所以才激发了我关于&#8220;技术族谱&#8221;的设想，本意就是想通过一个机制来理顺知识之间的关系，分享每个人的学习经验，新人借鉴老人的学习路径，从而减少走弯路的现象。</p>
<p>记得2007年的时候，一次团队内部开总结会，我在白板上随手画过一个开发相关知识的结构图，当时还有团队成员拿相机拍下来，现在想想，也许对某些人有一定的指导意义，于是今天整理了一下发出来，如下图所示：</p>
<p><img height="448" alt="" src="http://hi.csdn.net/attachment/200909/27/59304_1254059611pzJ5.gif" width="856" /><br />
一些相关的解释：</p>
<p>学校里的课程没用吗？<br />
答：肯定有用。<br />
计算机专业的经典理论课，意义非凡：计算机组成原理、计算机体系结构、操作系统、编译原理、数据结构。操作系统中的内存管理算法、进程调度算法、并发控制算法，都是非常经典的，你会在很多其它地方发现这些算法的应用或者变体。编译原理有助于我们理解编程语言是如何工作的，如何用范式来表达复杂的语法，编译原理中的状态机相关知识，也是开发者手中的强大武器。数据结构就更不用说了，List，Map，Tree，是编程中广泛使用的。</p>
<p>快餐式软件开发培训的问题何在？<br />
一个典型的快餐式培训班，先教java语言，然后教SSH，然后给个千篇一律的虚拟项目做一下，最后号称培养出来一批&#8220;WEB开发&#8221;程序员。我觉得，如果之前没有任何基础，仅靠这样的培训，那么出来真的只能做非常程式化的工作。我一直提倡稳扎稳打，从下向上学起这样的方式，缺点是不如容易出效果。所以从两个方向入手，一边学基础，一边学应用，互相印证，也是不错的学习路径。</p>
<p>软件开发的门槛在提高吗？<br />
我觉得是的，当然，我说的不包括hello world这样的示例程序的开发。虽然现在程序语言比十年前强大很多，工具要好用很多，但要想写出一个有点意义的软件，需要了解的知识多了很多，需要配置的环境复杂了很多。看看有多少初学者被java的ClassPath所困扰，您就明白我说的意思了。</p>
<p>开发不仅仅是学一门语言！<br />
开发的本质是用程序控制计算机做一件事。基本上，任何有价值的程序都有内政和外交。内政就是程序的处理流程、数据加工算法、并发控制。外交就是网络通信、IO、数据库访问，以及通过各种协议和其它系统进行交互。很多知识，尤其是外交相关的知识，仅仅学习一门语言是不够的。</p>
<p>误区：很多人花大量精力关注最上层，比如：新的框架、新的工具、各种处理问题的技巧等等。但偏偏这一部分的变化最快，您在这上面投入的精力保值能力最差。技术有很强的相似性，比如，如果您真正掌握了javascript，那么掌握Ext或者JQuery只是熟悉对方的编程习惯和API而已，没必要为了这些新名词而疲于奔命。</p>
<p>一家之言，欢迎拍砖或者交流。</p>
<p>----</p>
<p>答问：</p>
<p>sun_blackh 发表于2009年9月30日 8:18:27<br />
不好。不知道各种通信协议在什么地方。为什么要把tcp/ip单独拿出来？质量意识显得很突兀，和整体没有关系。虽然它很重要。什么是框架？它应该在哪里？我想LZ没有仔细推敲过。</p>
<p>答：<br />
知识体系中，越是向上，则越是偏向应用层的东西。&#8220;各类协议&#8221;，只是一个泛指，协议太多了，在一个人的知识结构中，只学习跟自己工作和兴趣需要的即可，比如，如果你做网管，可以关心SNMP,JMX；如果你做WEB开发，可以关心SOAP，AJAX；如果你做SP，可以关注各类短信网关的协议等等。TCP/IP之所以要单拿出来，那绝对是有道理的，TCP/IP是一个协议栈，我觉得只要你想做网络方面的开发，那是必须要学习的，TCP/IP已经是一种不可替代的标准了。<br />
&#8220;框架&#8221;和刚才对&#8220;各类协议&#8221;的解释是一样的，并不特指哪种框架，而是一个统称，是根据需要去学习的，比如：SSH，比如：JQUERY，比如：EXT，比如：Reason等等。 <br />
&nbsp;质量意识你觉得突兀吗？我觉得它就应该贯穿软件开发的方方面面，它并不是一项具体的技术，但却要时时刻刻挂在心中。</p>
<p>chgaowei 发表于2009年10月2日 星期五 11:08:53&nbsp; IP:举报<br />
这个模型很不错。我想在补充几个： 1、领域知识。 2、软件工程。 3、算法，数据库，网络基础应该放在下面。 4、质量意识换成软件工程。<br />
答：<br />
您补充的挺好，领域知识，或者说业务知识，的确很重要。<br />
关于&#8220;软件工程&#8221;，如果代替&#8220;质量意识&#8221;，这个我觉得值得商榷，因为我觉得软件工程并不能代表高质量软件的全部，你觉得呢。<br />
算法，我个人的意见认为，并不能作为一个底层的东西，对于多数人来说，应该算是可选项，对于某些特殊软件开发，比如视频编解码、搜索引擎等等，可能算法是必须的基础，可能连数学都要算上。<br />
而 网络 和 数据库，按我的原意，应该是程序语言、数据库、网络作为三个并列的知识领域，为了图的紧凑型，所以把数据库和网络竖起来了，但我觉得数据库和网络并不是构成软件开发的必要基础，可以选修。 </p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/jinxfei/archive/2009/09/27/4602449.aspx</p>
<img src ="http://www.blogjava.net/caizh2009/aggbug/297404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-10-07 21:22 <a href="http://www.blogjava.net/caizh2009/archive/2009/10/07/297404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>