2007年4月23日星期一

[转载]30步建立网站信任度

  网站信任度有2方面的意义,一方面指浏览者对于站点的信任程度,另一方面指搜索引擎对于网站的信任值(TrustRank)。网站信任度对于企业站点更为重要。下面主要针对用户体验,分享一些我的看法,假设我是用户,我希望看到下面的内容。
信任度的建设体现在以下方面:
1. 关于我们页面:详细、真实的说明公司背景、历史、业务范围等等情况。
2. 网站备案:获得ICP的备案许可。
3. 服务流程:让客户充分了解整个过程,让服务更透明。
4. 报价列表:根据不同服务,分别给出相应报价范围。
5. 客户案例:客户更愿意接收第三方的评价。
6. 联系方式:详细、完整、多途径的联系方式,并提供所在地地图指示。
7. 网页数量:充实的网页数量,企业站点至少50页以上。
8. 原创内容:客户不喜欢到处流传的论调。
9. 版权信息:正确书写版权信息。声明本站内容受法律保护,拒绝转载等。
10. 隐私保护:声明对客户信息、网友信息给予隐私保护。
11. 无错别字:客户看见错别字,会想“网页都不校对,服务质量也悬。”
12. 合作伙伴:合作伙伴的链接及合作方站内报道。
13. 专业名词:适当的使用专业名词,但不要影响用户阅读,并给予简单易懂的解释。
14. 企业新闻:列举第三方给予的各类报道。
15. 链接检查:使整个网站没有无效链接。
16. 广告适当:不要放无关的广告。
17. 友情链接:只和客户、政府以及行业知名网站作链接。
18. 免费咨询:提供400或800免费电话咨询,至少要有在线咨询或留言本。
19. 访问速度:别让用户和搜索引擎感觉网站很慢。
20. 网页配色:建议使用公司LOGO中的颜色。
21. 营业证明:提供公司营业执照、行业执照、相关检查证书、法人照片等。
22. 公司博客:多人维护一个博客,类似Google黑板报。用户更信任博客上的内容。
23. 常见问题:以客户关心的问题为导向,制作1个页面,页面不要太多,别作成说明书。
24. 员工照片:公司活动集体照,体现公司活力。
25. 保持更新:时不时的来篇专业文章、媒体报道、公司趣事等等。
26. 风格一致:如果是集体公司,总公司、国外公司、地方公司网站排版要一致,域名格式统一。不同语言的网站区别不能太大。
27. 原创图片:别用网上到处都有的图像,特别是客服打电话的图片。有能力最好购买专业图库。
28. 域名续费:最好一次注册10年,不要每年续费。
29. 导航结构:别让用户因为不知道怎么继续,而按“返回键”。
30. 最后,转载的文章一定要注明出处及作者 ^-^

[转载]网站设计之合理架构css

  在当前浏览器普遍支持的前提下,CSS被我们赋予了前所未有的使命。然而依赖css越多,样式表文件就会变得越大越复杂。与此同时,文件维护和组织的考验也随之而来。
  (曾几何时)只要一个css文件就够了——所有规则(rule)汇聚一堂,增删改都很方便——可这种日子早已远去。(现在)建立新网站时,必须花点时间好好筹划怎么组织和架构css。

文件的组织

  构建css系统的第一步是大纲的拟定。(我认为)css组织规划的重要性堪比网站目录结构。(HTMLor注:用词夸张一点,让你加深记忆) 没有哪种方案放之四海而皆准,因此我们会讨论一些基本的组织方案,以及它们各自的利弊。

主css文件

  通常可以使用一个主css文件,来放置所有页面共享的规则。这个文件会包含默认的字体、链接、页眉和其他等样式。有了主css文件之后,我们开始探讨高级组织策略。

  方法一:基于原型
  最基本的策略是基于原型页面(archetype page)分离css文件。假如一个网站的首页、子页面和组合页设计不同,就可以采用基于原型的策略。(这种策略下)每个页面都会有专属的css文件。
  在原型数量不多的情况下,这个方法简单明了、行之有效。然而,当页面元素并不按部就班的位于各个原型页时,问题就出现了。如果子页面和组合页共享某些元素,而首页却没有,我们应该怎么做呢?
  把共享元素放入主css文件。这虽不是最纯正的解决办法,却适用于某些具体情况。可是如果网站庞大,(这样做的话)主css文件会迅速膨胀——这就违背了分离文件的初衷:避免导入不必要的大文件。
  在组合页和子页面的css文件里各放一份样式代码。(这么做)就意味着要维护冗余代码,很显然我们不想这样。
  创建一个新的文件,由这两种页面共享。这听起来不错。不过假如只有10行代码,我们创建这个文件仅仅是为了共享这10行代码?(htmlor 注:杀鸡用牛刀?) 这方法很纯粹,但如果网站庞大有很多对页面共享很少量元素时(htmlor注:比如30对页面分别共享10行代码),就显得很笨重了。
  创建一个单独的css文件,包含所有共享元素的样式。这方法可能比较简单,却要取决于网站的大小和共享元素的多少。有种情况会很烦:导入了一个很大的css文件,但页面只用到一小部分样式——还是那句话,这违背了分离文件的初衷。
  这就是我所说的重叠的两难(overlap dilemma)。零碎css规则的重叠不一而足,并没有一个完全清晰无误的方案来组织它们。

  方法二:基于页面元素/块
  如果网站使用服务器端include,这个方法会很不错。举例说明,如果使用页眉include,它会有自己相应的css文件。页脚或者其他部分的include可以如法炮制,只须导入自己的css文件。这个方法简单干净,不过可能会产生很多小css文件。
  举例来说,假如页脚的样式只需要20行css代码,单独创建一个文件就划不来了。而且这个方法会导致每个页面都包含一堆css文件——因为有多少include,就得有多少css文件。

  方法三:基于标记
  这个方案直观实际,与前一个类似。如果网站共有30个页面,其中10个含有form,那么可以创建一个css文件专门处理form的样式,只在这10个页面导入它。如果另外10个页面含有table,就创建一个文件专门处理table样式……诸如此类。

  另外的组织技巧
  除了用主观的方法组织文件,我们还要考虑如打印、手持设备和屏幕等多种媒体类型。这虽然已经很清楚地定义过,可依旧是建立文件结构时应该考虑的一个因素。一旦必须支持多种媒体类型,主css文件里的某些规则可能就得重新考虑。
  另外,品牌联合也可能是一个重要因素。(htmlor注:如google和nike联手推出的joga) 如果涉及品牌联合,你就得考虑哪些元素应该调整以适应另一品牌。比如分别使用不同的css文件等。
  还有一个常被忽略的技巧:使用嵌套的@import语句。只包含一连串@import语句,或者再加几句css规则,就能创建一个css文件。用这个方法完全可以创建网站的主css文件(用@import导入各部分的样式文件)。假如网站的每个页面都导入了4到5个不同的css文件,无疑你应该考虑使用这个技巧。

规则和选择器的组织

  谈完了文件组织,接着讨论一下怎么组织文件里的东西吧。很自然,我们希望在文件里畅通无阻的浏览,迅速找到要编辑的选择器(selector)或规则。

冗余 vs. 附属

  正如Dave Shea在其文章《冗余 vs. 附属》(Redundancy vs. Dependency)里所说的,你必须不断了解级联(casCADe)。你要决定是对选择器编组(意味着附属),还是把它们分离(意味着冗余)。编组可以保持代码简洁扼要,可是会建立附属关系,导致维护开销增加。如果不编组,就会增加文件大小,让相似的选择器保持一致变得困难。只有做好这种权衡、取舍,才能每次都作出正确的决定。

按相互关系/上下文编组

  既然文件组织可以是主观的,那么显然,按照规则和选择器与其他部分的相互关系来进行编组是最好的方法。举例说明,假设你用容器、页眉和页脚来完成布局,就应该把它们编成一组。
  这似乎很简单,其实不然。比如,把页眉中的导航加入CSS时,是将它跟父元素编组还是独立编组?这种情况下,要视乎规则的上下文。通常,页眉与页面布局相关,应该与其他布局元素一起编组。而导航是页眉的一块,应该和页眉的其他块编组,而不是页眉本身。

使用注释

  跟大多数代码类似,注释是组织良好与否的关键。应该根据css的控制范围,清楚的标注每节(section)。最好确保注释视觉突出,以便在内容滚动、一目十行时快速定位。
  Doug Bowman在其文章《css组织技巧之一:标记》(CSS Organization Tip #1: Flags)里把css注释玩得高明之极。他详细说明了在节名之前加上等号,以便使用文本编辑器的查找功能迅速跳到某节。

别忘了

  你应该细致认真的了解了特异性、级联和继承,并善用它们。它们之中的每一项都可以是你最可怕的敌人,也可以是你最友善的朋友。当建立庞大的网站时,是否理解这些细微精妙之处,决定了你所构建的是坚如磐石的系统,还是经不起风雨的豆腐渣工程。(HTMLor注:这句完全意译,比较爽)

属性的组织

  现在我们了解了文件的组织,也知道了文件内规则的组织,但还有一个重要的组织环节(没有提到),那就是属性(attribute)。虽然属性比前两个概念更简单,可是还有一些非常好的、能够保持规则整洁的方法很值得一提。

按字母排序

  提到属性,如果说需要遵循什么原则的话,那就是:按-字-母-排-序。其实这招对于属性浏览帮助不大,不过可以防止属性值覆盖这种偶然事件的发生。
  举个例子吧,已经数不清有多少次,我为某个选择器定义过了margin值,之后的某天无意间又加了一个(或前或后)。(这种情况下)后一个属性自然会起作用。假设不知道第二个属性存在,不管我怎么调整第一个属性值、刷新浏览器,也看不到页面变化。(htmlor注:这个问题我深有体会) 如果按照字母顺序排列,你就会发现margin被定义了两次(因为它们挨在一起),这个问题自然可以避免。

优先项

  当网站复杂、牵涉太多css文件时,会建立大量的附属关系。一旦需要定制某个元素特有的样式,!important选项似乎是最佳选择。没错,!important是能解一时之需,但最好搞清楚导致问题的根源,然后根据级联关系决定是否真的需要用它。
  如果你对上文提到的特异性、级联和继承很熟悉,大可不必抱着!important一颗树不放。(htmlor注:整片森林等着你~) 当然它还是会派上用场,不过使用之前要对具体情况了然于胸。千万不要因为不知问题的症结所在而把!important当作捷径或是补救方案。

小结

  当我们变得依赖css而使样式表日渐复杂时,就需要正确的计划来避免犯错,并使代码易于维护。既然完美无缺的方案并不存在,那么了解css的工作方式以及文件、选择器和属性的多种组织方案,无疑有助于我们写出优质的代码,经受住时间考验。

2007年4月21日星期六

[转载]常用的CSS命名规则

  头:header
  内容:content/container
  尾:footer
  导航:nav
  侧栏:sidebar
  栏目:column
  页面外围控制整体布局宽度:wrapper
  左右中:left right center
  登录条:loginbar
  标志:logo
  广告:banner
  页面主体:main
  热点:hot
  新闻:news
  下载:download
  子导航:subnav
  菜单:menu
  子菜单:submenu
  搜索:search
  友情链接:friendlink
  页脚:footer
  版权:copyright
  滚动:scroll
  内容:content
  标签页:tab
  文章列表:list
  提示信息:msg
  小技巧:tips
  栏目标题:title
  加入:joinus
  指南:guild
  服务:service
  注册:regsiter
  状态:status
  投票:vote
  合作伙伴:partner
  (二)注释的写法:
  /* Footer */
  内容区
  /* End Footer */
  (三)id的命名:
  (1)页面结构
  容器: container
  页头:header
  内容:content/container
  页面主体:main
  页尾:footer
  导航:nav
  侧栏:sidebar
  栏目:column
  页面外围控制整体布局宽度:wrapper
  左右中:left right center
  (2)导航
  导航:nav
  主导航:mainbav
  子导航:subnav
  顶导航:topnav
  边导航:sidebar
  左导航:leftsidebar
  右导航:rightsidebar
  菜单:menu
  子菜单:submenu
  标题: title
  摘要: summary
  (3)功能
  标志:logo
  广告:banner
  登陆:login
  登录条:loginbar
  注册:regsiter
  搜索:search
  功能区:shop
  标题:title
  加入:joinus
  状态:status
  按钮:btn
  滚动:scroll
  标签页:tab
  文章列表:list
  提示信息:msg
  当前的: current
  小技巧:tips
  图标: icon
  注释:note
  指南:guild
  服务:service
  热点:hot
  新闻:news
  下载:download
  投票:vote
  合作伙伴:partner
  友情链接:link
  版权:copyright
  (四)class的命名:
  (1)颜色:使用颜色的名称或者16进制代码,如
  .red { color: red; }
  .f60 { color: #f60; }
  .ff8600 { color: #ff8600; }
  (2)字体大小,直接使用"font+字体大小"作为名称,如
  .font12px { font-size: 12px; }
  .font9pt {font-size: 9pt; }
  (3)对齐样式,使用对齐目标的英文名称,如
  .left { float:left; }
  .bottom { float:bottom; }
  (4)标题栏样式,使用"类别+功能"的方式命名,如
  .barnews { }
  .barproduct { }
  注意事项::
  1.一律小写;
  2.尽量用英文;
  3.不加中杠和下划线;
  4.尽量不缩写,除非一看就明白的单词.
  主要的 master.css
  模块 module.css
  基本共用 base.css
  布局,版面 layout.css
  主题 themes.css
  专栏 columns.css
  文字 font.css
  表单 forms.css
  补丁 mend.css
  打印 print.css

[转载]Google排名优化研究

1:网页快照 存在于Google数据库中的所列网页的文字内容,也就是上一次Google蜘蛛所抓取的网页内容。
2:真正Google PR的计算和更新是动态的不间断的过程 我们在工具栏看到的PR值只是”可见的PR值”,大致三个月更新一次。
3:为了使URL网址更规范化,应该将从下面这几个网址
http://domainname.com/http://www.domainname.com/index.htmlhttp://domainname.com/index.html
都要做301重定向到这个网址:http://www.domainname.com/
4:沙盒效应 表现为一个新网站在Google里面很难得到好的排名,无论你怎么优化这个网站,就是很难在Google里面得到好的排名。Google的Sandbox有点像给予新网站的一个试用期。在这段试用期内,新网站几乎无法在竞争比较激烈的关键词下得到好的排名。通常沙盒效应会维持六个月,有一些针对竞争性不高的关键词的网站,可能在沙盒里会短一些。行业竞争越高,沙盒效应会越长。
5:.edu 和 .gov域名具有天生的被信任的特征 原因是.edu 和 .gov域名在任何情况下都不可以被转移,包括买卖,出租等任何形式的转移。.edu域名只可以被教育机构注册,.gov域名只可以由政府机构注册。作者认为,这些特点使.edu 和 .gov域名最有可能被认为是可被信任的顶级域名。
6:Google比较讨厌的作弊方式(恶意作弊,Google能很快查出)关键词堆砌故意放上大量拼写错误的关键词无逻辑的,一般是有软件生成的文字桥页试图用垃圾软件在其他网站产生大量垃圾垃圾可疑的页面转向
7:Google蜘蛛爬行时有无限循环危险 比如说跟踪某个网页上日历的链接,可能在这个日历上总是有“下一个月”这个按钮,产生无限循环。因为网页程序可以无限制的生成下一个月的月历,Google蜘蛛就出不来了。
8:在留言本里留下垃圾链接 这种技术对Google来说早就不起作用了。再比如有的作弊的人建立大量的网站,在这些网站之间互相链接,这对Google也不起作用。
9:补充材料是Google辅助索引的一部分
10:补充材料产生原因
第一:有网址规范化问题。也就是带有www和没有www的两个网址版本都在数据库中,那么其中一个就有可能被标为补充材料。
第二:有时候已经被删除的网页,也就是实际上应该返回404错误的URL,会被列为补充材料。或者域名已经过期了,也有时会被标成补充材料。
第三:有时候站长在改动网页之后,新旧内容的两个版本的网页都会出现在Google索引中。而糟糕的是,其中一个会被标为补充材料。
第四:复制内容网页。很多转载或抄袭的内容会被标为补充材料。因为Google也没办法判断哪一个是原创的,所以有时候原创者也会遭殃。
第五:网页上相同或相似的内容太多。比如导航系统占网页内容比例比较大,而正文部分比较小。
11:补充材料在大部分情况下和网页内容重复或类似有关。
12:补充材料会被更新,但是被重新抓取的频率较低。
13:补充材料会继续存在长达一年或更长的时间。
14:如果你想让你的网站更多页被收录的话,你得多考虑你的链接的质量。
15:只要把你自己的网页加入Google Notebook就可以轻易的从Google域名得到反向链接。
16:老网站一般不会进入沙盘,但太快增加新网页和链接也可能会产生沙盒现象。
17:不仅高质量的链接重要,来自高度相关文件的链接可能也很重要。有时候可能要联系竞争对手。
18. 工具条上的那个绿条不是当前PR值。
19:Google会把买卖来的链接效果归零。
20:Google排名突然下降,并且稳定在某个位置,说明Google发觉你的一些猫腻了。

1. 只要你提供对用户有帮助的内容,而这些内容又可以被蜘蛛顺利抓取,正常情况下,就已经解决了大部分问题。
2.我们给bold的权重比strong稍高一点,但差别很小,不用在这方面想太多。(但后来更正为权重一样)。对两种斜体em和i两种标签的权重比也完全一样。
3.不用担忧很多网站共享同一个IP地址,放在同一架服务器上,对排名完全没有影响。
4. 上百万个网页同时上线,不一定有问题,但绝大部分情况下这都是够可疑的。所以他建议,你要真有这么多网页,最好尝试软性逐渐发布,几千页几千页的上线,可能会好一点。
5.如果不做搜索引擎优化,用户找不着你。
6. Google内部有很多垃圾检测工具。(Kyw的理解:别傻乎乎的用所谓的SEO软件,有规律的作弊总能被检查出来。)
7. 建议大家可以用Yahoo Site Explorer查一下网站的反向链接,
8.不会担心是否符合符合W3C标准,因为40%的网页都有编码错误,搜索引擎不会因为网页上有错误而抛弃40%的网站内容。
9.静态和动态URL处理的方式是类似的,但不要在动态URL中使用太多参数,最多用两三个。同时不要用太长的数字,因为那可能会与Session ID混淆。最好能够用mod_rewrite进行URL改写,把动态URL改为静态URL。
10.根据用户IP返回不同内容,不会被认为是隐藏网页(cloaking)。但如果给予Google蜘蛛特殊的对待,就会被当作隐藏网页。
11.栏目中出现关键词不是重要,重要的是网站的确应该根据不同的话题来分成不同的目录,形成一个树型结构。至于目录名用什么就无关紧要了,重要的是在不同的目录下话题是紧密相关的。这样在各个目录下自然会包含关键词。
12. 内部有专门的补充材料小组在研究和观察,主Google蜘蛛和补充材料蜘蛛是分开的。当下一次补充材料蜘蛛来访你的网页的时候,如果看到了301转向或者质量的提高,自然网页会回到主索引库。
13. 就Matt Cutts所知GOOGLE没有用Google Analytics(GG提供的流量统计工具)收集数据。
14. 有各种不同的复制内容,比如说完全一样的网页,也有的是近乎复制的网页,我们有很多非常复杂的逻辑来进行检测。如果你觉得你可能有复制内容网页的问题,那就要确保你的网页之间全都不同。
15. 不建议下拉菜单中放入链接,这也不是标准的制作手法。他建议还是把链接放在网页底部或网站地图上。
16. 在Google进行算法更新的时候,或者测试新的功能的时候,都在一个数据中心先进行,确认质量达到我们的期望。完全不必要去观察不同数据中心返回的搜索结果。
17. 如果你的网页有差不多相同的内容,那么尽量使它们看起来不同。
18. 一般来说如果内容差不多,Google就会自行判断,然后选出一个他们认为最好的。如果你想避免复制网页的产生,可以试着确保网站的模板非常非常不一样。
19.以前曾经有人问gov和edu域名的链接是不是比普通域名的权重要高?实际上我们并不会看这个链接来自开放目录,或者来自gov或edu域名,就给它特殊的对待。只是这些网站一般都有比较高的PR值,有更多的网站链接向他们。
20.博客和普通网站在排名算法方面没有什么区别,除非你做的是博客搜索(blog search)。
21. 在你看到toolbar中的新PR的时候,这些数值已经被考虑在排名算法当中了。所以你可能看着新的PR值很高兴,但是它并不是导致排名结果变化的原因。所以你不会看到因为PR更新导致排名结果的变化,这些排名结果的变化,已经从上一次PR更新就开始计算了。
22.在回答一个帖子的时候曾经说过:Matt Cutts“有补充材料现在不一定是件坏事。你的这个情况在我看来,只是缺少PR和链接的一个反映。你的首页已经在我们的主数据库中,但是你并没有多少链接。所以我认为你的网站并没有什么问题,只不过我们的索引数据库只能选择一部分文件,如果有更多的人链接到你的网站,我预期你的网页会回到主数据库。”

1、至少准备100页真正的高质量内容,不包括链接页、关于、联系等等。
2、选择一个有品牌潜力的域名,域名内无所谓包不包括关键字。
3、网站设计简洁,文字内容的比重应该大于HTML格式的比重。
4、最好别用flash, dom, java script等。如果你必须要使用这些脚本的话,把 他们作为外部文件来使用。 5、把能去掉的附加内容(如计数器)都去掉。保证最快的浏览速度。
6、单网页大小5K~10K间最理想,但比较难做到。
7、每天更新200字~500字的原创文章。
8、在网页标题,说明标签,正文标题,网址URL,黑体,斜体,网页的最开始等 地方使用关键词。关键词密度介于5%到20%之间(不必刻意追求)。保证没有 错别字。
9、在每个网页连向1~2个排名高的网站,在链接文字当中加上关键词。(这一点 对未来来说很重要)。
10、在你的网站之内,高质量的内容之间互相链接起来。
11、做好每个页面的导航。
12、向搜索引擎提交,向开发目录提交,但不要报什么希望。
13、每天交换一个链接,即使对方不同意也别在意。
14、提高你的写作技巧,学习适合网上人群的写作方式,多分段,短句子,读起 来快的内容。大部分的网站访客不是读,而是浏览。
15、别指望任何作弊行为或所谓的捷径,甚至接近、类似作弊的行为。
16、友情链接:不要链接到有问题的网站和质量不高的网站。确保对方网站和你的类似,是同一个行业的。
17、别把网站作出“产品说明”,要提供对用户有用的信息。
18、查看统计信息,研究用户来路,怎么来的?回到关键词研究,找出更多好题 目,写新的网页。
19、提前做好将来会有搜索量的页面;
20、注意收集突然来的灵感,例如你突然想到要写个主题,回家却想不起来了。
21、六个月后,查看一下向分类目录提交的结果,如果没有加入,再次提交, 然后继续别报希望。
22、继续更新高质量内容,Google喜欢原创。

[转载]Java学习之路:不走弯路,就是捷径

  在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于“如何学习编程?Java该如何学习?”。类似的问题回答多了,难免会感觉厌烦,就萌生了写下本文的想法。到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《Java学习之路》。拜读过台湾蔡学镛先生的《Java夜未眠》,有些文章如《Java学习之道》等让我们确实有共鸣,本文题目也由此而来。
  软件开发之路是充满荆棘与挑战之路,也是充满希望之路。Java学习也是如此,没有捷径可走。梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的。每天仰天大叫“天神啊,请赐给我一本葵花宝典吧”,殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了“东方不败”,倒是成“西方失败”的几率高一点。
  “不走弯路,就是捷径”,佛经说的不无道理。

1.如何学习程序设计?

  Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++等其他程序设计语言也一样管用。有编程高手认为,Java也好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。

  1.1 培养兴趣
  兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个"食利阶层"。你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。

  1.2 慎选程序设计语言
  男怕入错行,女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。
  如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。如果你对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开发领域。如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。
  如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或.NET,甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉。总之,你需要根据自己的特点来选择合适你的编程语言。

  1.3 要脚踏实地,快餐式的学习不可取
  先分享一个故事。
  有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞。有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。 这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。 但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。
  这个故事给我们的启示是:欲速则不达。
  浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入共产主义社会。现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣称"参加培训,100%就业",居然报名的学生不少,简直是藐视天下程序员。社会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。许多初学者C++/Java没开始学,立马使用VC/JBuilder,会使用VC/JBuilder开发一个Hello World程序,就忙不迭的向世界宣告:“我会软件开发了”,简历上也大言不惭地写上“精通VC/Java”。结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。到处碰壁之后才知道捧起《C++编程思想》《Java编程思想》仔细钻研,早知如此何必当初呀。
  “你现在讲究简单方便,你以后的路就长了”,好象也是佛经中的劝戒。

  1.4 多实践,快实践
  彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。
  从前,四川边境有两个和尚,一个贫穷,一个有钱。一天,穷和尚对富和尚说:“我打算去南海朝圣,你看怎么样?”富和尚说:“这里离南海有几千里远,你靠什么去呢?”穷和尚说:“我只要一个水钵,一个饭碗就够了。”富和尚为难地说:“几年前我就打算买条船去南海,可至今没去成,你还是别去吧!” 一年以后,富和尚还在为租赁船只筹钱,穷和尚却已经从南海朝圣回来了。
  这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周全之后,再去干事情。假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了。软件开发是一门工程学科,注重的就是实践,“君子动口不动手”对软件开发人员来讲根本就是错误的,他们提倡“动手至上”,但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副“比尔盖茨”样。有前辈高人认为,学习编程的秘诀是:编程、编程、再编程,笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。

  1.5 多参考程序代码
  程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。为什么要以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息。
  多多参考代码例子,对Java而言有参考文献[4.3],有API类的源代码(JDK安装目录下的src.zip文件),也可以研究一些开源的软件或框架。

  1.6 加强英文阅读能力
  对学习编程来说,不要求英语, 但不能一点不会,。最起码像Java API文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个"金山词霸"。看多了就会越来越熟练。在学Java的同时学习英文,一箭双雕多好。另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求。英语好对你学习有很大的帮助。口语好的话更有机会进入管理层,进而可以成为剥削程序员的"周扒皮"。

  1.7 万不得已才请教别人
  笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决。请教别人之前,你应该先回答如下几个问题。
  你是否在google中搜索了问题的解决办法?
  你是否查看了Java API文档?
  你是否查找过相关书籍?
  你是否写代码测试过?
  如果回答都是"是"的话,而且还没有找到解决办法,再问别人不迟。要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。

  1.8 多读好书
  书中自有颜如玉。比尔?盖茨是一个饱读群书的人。虽然没有读完大学,但九岁的时候比尔?盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔?盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。
  笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,“天呐,这么多书到什么时候才能看完了”,“学软件开发,感觉上了贼船”。这时候,我的回答一般是:“别着急,什么时候带你们去看看我的书房,到现在每月花在技术书籍上的钱400元,这在软件开发人员之中还只能够算是中等的”,学生当场晕倒。(注:这一部分学生是刚学软件开发的)
  对于在Java开发领域的好书在笔者另外一篇文章中会专门点评。该文章可作为本文的姊妹篇。

  1.9 使用合适的工具
  工欲善其事必先利其器。软件开发包含各种各样的活动,需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具帮忙可以说是寸步难行。工具可以提高开发效率,使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中无剑心中有剑这样的境界几乎不可企及。在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也可作为本文的姊妹篇)。

2.软件开发学习路线

  两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律。
  从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计师→架构设计师或项目管理师。不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序员也不是好的程序员。我们应该努力往上走。让我们先整理一下开发应用软件需要学习的主要技术。
  A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并非不重要。如不想成为计算机科学家的话,可以采取"用到的时候再来学"的原则。
  B.一门编程语言,现在基本上都是面向对象的语言,Java/C++/C#等等。如果做WEB开发的话还要学习HTML/JavaScript等等。
  C.一种方法学或者说思想,现在基本都是面向对象思想(OOA/OOD/设计模式)。由此而衍生的基于组件开发CBD/面向方面编程AOP等等。
  D.一种关系型数据库,ORACLE/SqlServer/DB2/MySQL等等
  E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET等。
  F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模。
  G.一种软件过程,RUP/XP/CMM等等,通过软件过程来组织软件开发的众多活动,使开发流程专业化规范化。当然还有其他的一些软件工程知识。
  H.项目管理、体系结构、框架知识。
  正确的路线应该是:B→C→E→F→G→H。
  还需要补充几点:
  1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想。新技术虽然不断涌现,更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理论与编程思想的变化却很慢。掌握了编程理论与编程思想你就会有拨云见日之感。面向对象的思想在目前来讲是相当关键的,是强势技术之一,在上面需要多投入时间,给你的回报也会让你惊喜。
  2).对于数据库来说是独立学习的,这个时机就由你来决定吧。
  3).编程语言作为学习软件开发的主线,而其余的作为辅线。
  4).软件工程师着重于B、C、E、D;软件设计师着重于B、C、E、D、F;架构设计师着重于C、F、H。

3.如何学习Java?

  3.1 Java学习路线

  3.1.1 基础语法及Java原理
  基础语法和Java原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习Java也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的Java程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得"真正"的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。

  3.1.2 OO思想的领悟
  掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。
  使用面向对象的思想进行开发的基本过程是:
  ●调查收集需求。
  ●建立用例模型。
  ●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。
  ●细化分析模型到设计模型。
  ●用具体的技术去实现。
  ●测试、部署、总结。

  3.1.3 基本API的学习
  进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的"不需要重新发明轮子"。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查看,Java DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。
  基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查Java DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。

  3.1.4 特定API的学习
  Java介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。

  3.1.5 开发工具的用法
  在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对Java技术本身的注意力。过了这一阶段你就可以开始熟悉IDE了。
  程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。
  从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。
  Java开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的。JBuilder在近几年来一直是Java集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的Java IDE大战中,以其快速的版本更新击败IBM的Visual Age for Java等而成就一番伟业。IBM在Visual Age for Java上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓"柳暗花明又一村"。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。

  3.1.6 学习软件工程
  对小型项目而言,你可能认为软件工程没太大的必要。随着项目的复杂性越来越高,软件工程的必要性才会体现出来。参见"软件开发学习路线"小节。

  3.2学习要点
  确立的学习路线之后,我们还需要总结一下Java的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。

  3.2.1勤查API文档
  当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用"Javadoc"工具(包含在JDK中)生成标准的Java DOC文档供同行使用。J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下载地址:http://Java.sun.com/j2se/1.5.0/download.jsp,你可以到google搜索CHM版本下载。也可以在线查看:http://Java.sun.com/j2se/1.5.0/docs/api/index.html。
  对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。
  当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下:
  ●找特定的包,包一般根据功能组织。
  ●找需要使用类,类命名规范的话我们由类的名字可猜出一二。
  ●选择构造器,大多数使用类的方式是创建对象。
  ●选择你需要的方法。

  3.2.2 查书/google->写代码测试->查看源代码->请教别人
  当我们遇到问题的时候该如何解决?
  这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像"某些类/方法如何使用的问题",DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看API的源代码验证你的想法。万不得已才去请教别人。

  3.2.3学习开源软件的设计思想
  Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。

  3.2.4 规范的重要性
  没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到http://www.jcp.org/下载JSRXXX规范,多读规范,这是最权威准确最新的教材。第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时,没给程序作注释,以显示你的编程功底是多么的深厚。这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。Java编码规范到此查看或下载http://Java.sun.com/docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3.2.2节。

  3.2.5 不局限于Java
  很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。
  Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。如学习Java集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是"需要的时候再学"的原则。

4.结束语

  需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在Java神殿之外的朋友有所帮助的话,笔者也欣慰了。哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了。最后奉劝各位程序员尤其是MM程序员,完成工作后赶快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比……