﻿<?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/superbible/</link><description>努力保持编程中美好的感觉</description><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2026 21:09:41 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2026 21:09:41 GMT</pubDate><ttl>60</ttl><item><title>我对颈椎问题之研究与实践</title><link>http://www.blogjava.net/superbible/archive/2006/09/29/72767.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Fri, 29 Sep 2006 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/09/29/72767.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/72767.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/09/29/72767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/72767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/72767.html</trackback:ping><description><![CDATA[
		<p>玩电脑写程序多年了，太投入，以至于得了职业病。手指、手腕、肩颈部都经常疼痛，眼睛干涩红痒，肚子也变将军了。<br />后来在家soho，颈椎问题尤为严重。在网上寻求解决方法，并自行研究实践，有了明显的好转。记录于下，望对使用电脑工作的人有点用处。</p>
		<p>1.颈椎问题的严重性：会引发脑部供血、脊柱神经、睡眠等问题。不是专家，网上可自己查找相关资料。<br />2.原因。久坐少动。肩颈部肌肉劳损以至骨骼、软骨受损。<br />3.我的解决过程。<br />  买了个太空枕，睡觉时可支撑颈部。效果不明显。<br />  后来每周按摩1小时。你要想有点效果一定得到正规的地方，还得受得了疼。按一次，得疼三天。有是有点用，回想一下，这不是花钱找罪受么？<br />  然后去了曙光医院，医生给开了一些药，问了，大概都是缓解症状的，不能治本。</p>
		<p>  ---我一向不同意程序员30岁转行的观点，难道我过不去这个坎？---</p>
		<p>  转而采取日常生活中自己注意保健。一般来说，主流的意见是多运动。包括体育运动和针对性的保健操。<br />  我在家实践了两个月，3天一次长跑或羽毛球，每天一次散步和多次保健操。效果不算明显。<br />  后来我从源头上着手。<br />      硬性的就是减少坐在电脑前的时间，打游戏不打了，工作时想问题就起身。这个也不易。这个对工作有一定影响，但也是重要方法之一。<br />      软的是调整桌椅高度及坐姿。桌椅一定是符合三个90度：坐着膝盖90度，大腿和上身90度，肘部90度。<br />  肘部一定要有依托，至少有椅子的扶手，我现在是用了大桌子，对着90的圆弧，两肘都放在桌面上。</p>
		<p>现在我的颈椎问题已经好多了。<br />总结一下，方法是综合的。但效果最明显的就是桌椅。其中最关键的就是肘部的依托，肘部放在桌面上我觉得是挺有效。<br />另外，不能觉得没有时间想健康问题，否则结果是不得不想。拿出你打游戏、写程序的劲头对待健康，肯定能解决问题的。</p>
<img src ="http://www.blogjava.net/superbible/aggbug/72767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-09-29 12:00 <a href="http://www.blogjava.net/superbible/archive/2006/09/29/72767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>缺陷管理系统ClearBug1.0发布</title><link>http://www.blogjava.net/superbible/archive/2006/09/11/68910.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Mon, 11 Sep 2006 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/09/11/68910.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/68910.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/09/11/68910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/68910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/68910.html</trackback:ping><description><![CDATA[
		<a href="http://www.lucas-lee.co">www.lucas-lee.co</a>m<br /><ol style="FONT-FAMILY: Arial"><li><p style="MARGIN-LEFT: 15px; LINE-HEIGHT: 150%">免费软件,非开源软件。</p></li><li><p style="MARGIN-LEFT: 15px; LINE-HEIGHT: 150%">纯JAVA开发，B/S架构。目前支持MySQL5.0.21及以上数据库。</p></li><li><p style="MARGIN-LEFT: 15px; LINE-HEIGHT: 150%">预定义了多种缺陷处理流程，可选择使用。 
</p><ul><li>小型团队自由流程<br />由当前处理者指定下一个处理者，流程比较灵活。 
</li><li>小型团队受控流程<br />以项目经理为中心的流程，提交后的审核、转交程序员、修改后的验证等步骤都由项目经理控制。 
</li><li>单人流程<br />只有一个使用者的流程。适合个人软件的开发过程。 </li></ul><p></p></li><li><p style="MARGIN-LEFT: 15px; LINE-HEIGHT: 150%">缺陷统计功能。使用琴棋报表。 </p></li><li><p style="MARGIN-LEFT: 15px; LINE-HEIGHT: 150%">邮件提醒。流程转入下一步骤后，系统会自动发邮件给下一处理者。</p></li><li><p style="MARGIN-LEFT: 15px; LINE-HEIGHT: 150%">字典数据可自定义。优先级别、严重程度、项目、模块等等。 </p></li><li><p style="MARGIN-LEFT: 15px; LINE-HEIGHT: 150%">基于角色--用户组--用户的权限控制。 </p></li></ol><img src ="http://www.blogjava.net/superbible/aggbug/68910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-09-11 10:52 <a href="http://www.blogjava.net/superbible/archive/2006/09/11/68910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>琴棋报表1.3.2发布！</title><link>http://www.blogjava.net/superbible/archive/2006/09/11/68907.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Mon, 11 Sep 2006 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/09/11/68907.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/68907.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/09/11/68907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/68907.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/68907.html</trackback:ping><description><![CDATA[
		<a href="http://www.lucas-lee.co">www.lucas-lee.co</a>m<br /><br />1)解决了Excel格式输出大量单元格时出现的Excel样式过多的问题。<br />2)优化了clone的算法。<br /><img src ="http://www.blogjava.net/superbible/aggbug/68907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-09-11 10:50 <a href="http://www.blogjava.net/superbible/archive/2006/09/11/68907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何删除字典数据？</title><link>http://www.blogjava.net/superbible/archive/2006/09/01/67117.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Fri, 01 Sep 2006 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/09/01/67117.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/67117.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/09/01/67117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/67117.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/67117.html</trackback:ping><description><![CDATA[
		<p>所谓字典就是数据库应用中被其他表(通常加以外键约束)引用的表，如客户表引用客户类型，那么客户类型即为字典表。删除字典数据要考虑是否已被其他数据引用，一般不允许做级联删除。</p>
		<p>这个问题想必大家都碰到过，但各有各的 做法。本人与若干同事讨论过，将各种做法总结一下。</p>
		<ol>
				<li>物理删除，即用delete SQL删除。如果字典数据被引用，则会抛出违反外键约束的异常，将其封装为可读的信息提示给用户。JDBC中的异常类为SQLException，如何判断是违反外键约束的异常呢？有方法如下： 
<ul><li>利用SQLException中的errorCode，这是数据库特有的错误编码。 
</li><li>利用SQLException中的SQLState，在JAVA API DOC中说明这个是SQL99或XOPEN 标准的编码，而且可以用connection的meta data来判断符合哪个标准。经过的试验，说明这个meta data不太好用，但是SQLState还是较为统一的。 
<table style="WIDTH: 427px; HEIGHT: 80px" cellspacing="1" cellpadding="1" width="427" summary="" border="1"><tbody><tr><td> </td><td>mysql5.0.21</td><td>sqlserver2000</td><td>oracle10</td><td>postgresql8</td></tr><tr><td>ANSI99 SQLState标准的违反外键约束编码为：23000</td><td>23000</td><td>23000</td><td>23000</td><td>23503(可能要在BatchUpdateException的nextException中才能取得)</td></tr><tr><td>Connection的meta data中的getSQLStateType()，符合SQL99标准应该为2</td><td>2</td><td>2</td><td>0</td><td>2</td></tr></tbody></table></li></ul></li>
				<li>逻辑删除。即置表中的一个标记字段为已删除。查询时不可见，但实际还保留在表中。 好处是不用处理数据被引用的情况。它的缺点是，如果数据没有被引用，那么它其实可以被物理删除，但确留在系统中成为垃圾数据；其次在数据有唯一编码的情况下，被逻辑删除的数据实际上还占用着一个编码，有时用户会疑惑，明明表中查不到这个编码，我在新增的数据中使用这个编码却总提示编码已存在。 </li>
		</ol>
		<p>    各位又是用的什么方法来处理的呢?你的方法有何优缺点，不妨一同讨论一下。</p>  <img src ="http://www.blogjava.net/superbible/aggbug/67117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-09-01 15:20 <a href="http://www.blogjava.net/superbible/archive/2006/09/01/67117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微软研发75条心得</title><link>http://www.blogjava.net/superbible/archive/2006/07/09/57374.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Sun, 09 Jul 2006 13:06:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/07/09/57374.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/57374.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/07/09/57374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/57374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/57374.html</trackback:ping><description><![CDATA[
		<div class="postcontent">
				<div>
						<strong>[一．奠定基础]<br /></strong>1. 任何不能改善产品的工作，都是浪费时间或是偏离方向。<br /><strong><font color="#800000">2. 领导者的任务是努力消除程序设计师工作上的一切障碍，让程序设计师全力专注在真正重要的工作─改善产品。</font></strong><br />3. 千万不要把程序设计师的时间浪费在改善产品以外的工作上。<br />4. 永远记得自己真正的目标，然后让团队用最有效又最愉快的方法把它完成。<br />5. 理清详细的项目目标，可以避免在不必要的工作上浪费时间。<br />6. 不要因为制定目标需要花很多时间，或是别人都没有做，就省略了目标的制定。制定明确详尽的目标所花的时间，绝对会让团队得到更大的好处。<br />7. 事前决定最合适的优先考虑顺序，以及各考虑点的质量规范，能够指引开发团队的工作。</div>
				<div> </div>
				<div>
						<strong>[二．策略性的作业方式]</strong>
						<br />
						<font color="#800000">
								<strong>8. 错虫愈晚清除，时间花得愈多。毕竟，您得知道程序是怎么写的，才能判断那里出了错虫；刚写完的程序记忆犹新，一年前写的程序可能早就忘了</strong>
						</font>。<br />9. 在开发的过程就立即除虫，可以让您早些学到经验，然后就不会再犯同样的错误；相反地，如果到了项目后期才发现，您可能已经犯过多次同样的错误而不自知。<br />10. 发现错虫而立即除错是一种缓冲器，提醒那些讲求快速而不够谨慎的程序设计师，以后多加小心。如果您坚持错虫全都清除了才能开发新的功能，就可以防止所有的程序处于半完成状态，因为错虫太多而使项目延误乃至无法推出；相反地，如果您允许错虫的存在，等于是埋下了项目失控的地雷，最后看似完成的项目，其实已经失控。<br />11. 若能保持没有任何错虫，您就能比较准确估出项目的完成时间。不必猜测3 2项功能和1 742个错虫共要花费多少时间，只要估算3 2项功能的工作时间就行了。更重要的时，万一到时候有些功能做不完，您可以做多少算多少，因为软件一直保持在无错误状态。<br />12. 不要把策略性工作方式当作训练的教条，应该向组员解释这些工作方式的内涵与用意。<br />13. 提出精确详尽的问题，可以引导出真正有效的策略性工作方式，帮助项目目标顺利完成。<br />14. 策略不是死的定律，要把它当作指导原则来活用。大部分的时候都应该遵循，但也有例外的时候。</div>
				<div> </div>
				<div>
						<strong>[三．保持进度]</strong>
						<br />15. 定期暂停手边的工作，然后往前思考，随时做必要的修正，以避免未来的大障碍。<br /><font color="#800000"><strong>16. 有什么事情是我今天能做，而且可以帮助项目在未来几个月内顺利进行的？</strong></font><br />17. 不要浪费时间在错误的问题上，一定要先确定真正的问题在哪里，然后才去改正它。<br /><font color="#800000"><strong>18. 人们开口要求的东西未必是他真正想要的。处理他的要求之前，请务必确定他究竟想要做什么。</strong></font><br />19. 绝对不要答应别人自己做不到的事情，这样对双方都有益无害。<br />20. 不要为了讨好别人而伤害双方的工作进程，您永远要根据自己的目标，做适当的决策。<br />21. 是您在为项目负责。不要让任何人的建议阻碍项目的进行，包括上级的建议。<br />22. 天下没有真正免费的软件<br />23. 应该开发策略上具有重要性的功能，而不是把媒体的评比项目都做齐全。<br />24. 软件产品的开发，不能只为了有趣、挑战性，或是够有个性够令人眩目。<br />25. 不要把时间浪费在无法改善产品的工作上，即使这么做在将来会有潜在的利益，也要与现在投入的时间成本做个衡量。</div>
				<div> </div>
				<div>
						<strong>
								<font color="#000000">[四．走向极端的狂热]</font>
						</strong>
						<br />26. 确定您所要求的报告真的值得属下暂停工作，花那么多时间去写。<br />27. 利用项目检查报告来改进软件开发的工作程序。为了使报告发生作用，报告中必须确实描述我们这次解决问题的每一个详细步骤，以及将来应该如何运用这项新发现。<br />28. 请注意定期会议的价值，确定它值得每个人放下手上的工作。<br /><font color="#800000"><strong>29. 召开任何会议之前，请确定本次会议的目的是什么，达成这个目的的条件是什么，然后，务必达到开会的目的。</strong></font><br />30. 试着排除不必要的后续工作。</div>
				<div> </div>
				<div>
						<strong>[五．进度狂]</strong>
						<br />31. 不要利用进程表来驱使项目的进行，这对小组的士气伤害太大了。<br />32. 让日程表维持适度的紧迫，但又是可以做到的，好让组员振奋、不松懈，专心致力于项目的推进。<br /><font color="#800000"><strong>33. 绝对不要草率定出不可能的期限，导致组员为了赶进度而损害产品的质量。</strong></font><br />34. 把长期的大项目，分成几个完整而独立的小项目，各小项目必须有一个主题。<br />35. 为了保持创意的活力和团队士气，必须让每一个小项目都有令人兴奋的结果。<br /><font color="#800000"><strong>36. 产品的质量远比遵守期限重要.</strong></font></div>
				<div> </div>
				<div>
						<strong>[六．学无止境]</strong>
						<br />
						<font color="#800000">
								<strong>37. 不要让程序设计师的学习停滞不前，要让程序设计师有机会磨练不同领域的技术，培养十八般武艺样样精通的组员。<br /></strong>
						</font>38. 训练新进程序设计师时，先培养他对整个公司所有项目都有价值的技术，然后才培养本项目独有的技术。<br />39. 不要舍不得放您最优秀的程序设计师到别的项目去。如果他在您的项目已经没有新的东西可学，为了公司和他个人的前途，您应该把他推荐到别的项目，让他的成长永不间断。<br />40. 确定每位组员、每两个月都有一项技术上进步。<br />41. 一发现某处需要改进，就立即采取更正的行动。<br /><font color="#800000"><strong>42.不要用年终考评来订立学习目标，要利用年终考评来记录个人的成长。</strong></font><br />43. 绝对不要让组员一直做同样的工作，这样是限制了他的学习，使他停滞在原来的领<br />域。一旦程序设计师精通了某一个领域，就让他换别的领域做做看，永远让他们学习新的技术。<br />44. 各种技术的用途范围有所不同，有的技术在一般的项目都用得上，有的技术只有在特定性质的项目才用得上。当您训练您的组员时，必须让他们的技术能在公司发挥最大的用处，最好的办法就是，把应用范围最广的技术放在训练的最前期，应用范围最小的技术放在最后训练。<br /><font color="#800000"><strong>45. 优秀的程序设计师是项目经理最需要的，所以经理们通常舍不得让自己手下功力最强的人到别组去，但是如果这位第一高手在本组内再也没有新东西可学时，经理就应该让他到别的项目去，一方面他个人可以重新开始另一次的成长，一方面让接替他的人学着承担重要的工作，最后公司的平均程序技术水准因而提升，对大家都很有好处。</strong></font><br />46. 为了确保每位程序设计师的技术都在稳定地进步，一定要让每个人有个努力的目标，最好的方法是把个人的成长和项目每两个月的阶段性目标相结合，这样一年就有至少六次的进步了。假定一位组员在公司待了五年，那么他就学了3 0种新技术、或是读了3 0本好书、或是1 5项技术加1 5本书，对他的工作能力影响多大啊。<br />47. 最好的成长目标是出于当时的需要。如果您发现有位组员工作缺乏效率，或总是在犯同样的错误，最好抓住机会立即为他立一个目标，并且要求他立刻开始改进。这种当时设立的目标让人印象深刻，又是马上寻求改善，效果通常会非常好。比起年终考评那种模模糊糊的建议，更能引起程序设计师的重视。</div>
				<div> </div>
				<div>
						<strong>[七．态度问题]</strong>
						<br />48. 要让每一位程序设计师都明白，写出零错误程序是很不容易的，所以应该多花功夫用各种方法做最彻底的测试。<br />49. 纠正程序设计师以为加除错码会花太多时间的观念，应该训练程序设计师第一个反应是考虑加上除错码是否有道理，第二是考虑加除错码是否符合项目的目标与工作的优先级。<br /><font color="#800000"><strong>50. 当某人说“某件事不可能做到”时，他往往是错的</strong></font>。<br />51. 不要让凡事不能的态度阻碍了创新。<br />52. 使用者和程序的撰写者一样关心速度和品质的问题。<br />53. 不要让程序设计师以为使用者并不在乎软件的质量。<br />54. 不要给使用者次品，宁愿延期交货，务必追求质量完美。<br />55. 程序设计师必须经常以使用者的观点来看自己写的程序，程序设计师必须能体会使用者的感受。<br />56. 在包装盒里的每一件东西，都是产品的一部分。<br />57. 将程序的重用性当作优先考虑的目标之一，否则程序设计师将经常做重复的工作。<br />58. 充分利用现有资源或创造新资源，以便从每一项工作中获得更大的价值。程序代码的再利用，就是很好的例子，当然，还有其他的地方可以运用“杠杆原理”。<br />59. 如果您创造了一项资源，并且让别人知道，那么总有一天会派上用场。<br />60. 从您的每件工作中创造最大的资源，不管是利用现有的杠杆，或是创造新的杠杆。<br />61. 小心那种“太难了”、“太花时间”或是“太麻烦”的反射性反应。当您遇到别人有这种反应，请先问自己他有没有认真思考过这件事的重要性、以及是否符合项目目标，如果您认为他其实未经深思熟虑，只是直觉的反应，那您就应该把您的想法告诉他，请他重新评估，也许就会有公平的答案。<br />62. 人们遇到经验范围之外的事情，多少有恐惧感，就会认为“这完全不可能”而强烈反对。试着消除这种习惯性的反应，设法给组员灌输“只要花时间想想看，大部分的事情都做得到”的观念。您不妨以这个问题来对付那种“凡事不能”的态度：“我了解这是做不到的，但是‘如果’做得到，那你会怎么做？”然后您就会发现惊人的转变，您马上就会听到组员七嘴八舌地说应该这样做、那样做，说的是他们刚刚坚持做不到的事情。这个“如果”把他们带离直觉的反应，带到全新的思考模式，这才是他们应该做的。<br /><font color="#800000"><strong>63. 把使用者当作什么都不懂的外行人，是非常不好的观念。每当您发现有人表露出这种心理，一定要立即纠正，提醒他们使用者才是真正受产品好坏影响最深的人，他们和程序设计师一样关心软件的执行速度和质量。<br /></strong></font>64. 杠杆原理是您最有用的观念，找到您工作中的杠杆，您可以为小组、项目、公司、甚至软件业创造无可限量的价值。无论如何，尽量利用资源并创造资源，这个原则是绝对错不了的。在您写程序的时候注意程序代码的共享性、训练组员的时候注意到他对公司的价值，即使是像函数命名这种小事，都有杠杆的存在。不管做任何事，都要想到“善用资源”，为未来做好准备。</div>
				<div> </div>
				<div>
						<strong>[八．沉船的感觉]<br /></strong>65. 如果进度发生落后，那表示有个地方出错了。您应该找出问题，并加以解决，不要一味要求组员加班，在问题没有解决之前，加班是没有用的。<br />66. 别误信加班等于增加生产能力，长期的加班只会伤害生产能力，对项目没有帮助。<br /><font color="#993300"><strong>67. 周末是属于组员私人的时间，不是公司的。公司不应该以打败竞争对手为理由，要求员工周末加班。</strong></font><br /><strong><font color="#800000">68. 强调思考的重要性，而不是长时间工作。</font></strong><br />69. 训练开发小组懂得在正常工作时间内掌握好工作的效率，不要让他们超时工作，因为超时工作只是浪费时间的假面具。<br />70. 与程序设计师共同研拟出一份每日活动的时间表，把无法预期的临时公务变成固定时间处理的事情，并且把程序开发的工作放在最优先的地位，不要让其他次要的事情干扰到写程序。<br />71. 经常加班就是项目出问题的明显信号，也许是因为主管的观念错误或是目标不够清楚，不论是什么原因，项目经理绝对不能忽视这种现象，要对这个问题正确处理，项目经理必须协助组员在每周4 0小时的工作时间里，把事情做得更有效率。<br /><font color="#800000"><strong>72. 我经常听到高层主管称赞组员每天为公司工作很长的时间：“您对公司的贡献值得嘉奖，做得很好！”这绝对是错误的信息，员工应该是因为工作做得好而受到称赞，而不是因为在办公室待得久，管理者不该把“生产效率”和“工作时间”混为一谈，有的人也许可以用更少的时间，完成两倍的工作呢。</strong></font><br />73. 为了让组员把办公时间用在正确的地方，并提高部门的工作效率，项目经理不但要为他们排除任何不必要的会议、报告和杂事，还要协助他们好好运用宝贵的上班时间。您应该协助组员安排适当的每日活动表，用一些小技巧，让组员有长段又不受干扰的时间，适合进行开发工作。<br />74. 如果您关心组员的生活，就不要让他们把全部的时间都投入在工作。每天只要确定他们卖力工作了八小时，就可以把他们赶出办公室了，当然这样做也许会有老板看不顺眼，但是如果您像我一样相信均衡、健康的生活是一切创意的原动力，就坚持这份理念吧！<br />75. 每周工作4 0小时并不是金科玉律，只不过是美国的传统，而软件开发项目大都以此为前提编定日程表。所以如果一个项目需要程序设计师每周工作40 小时以上才能赶上进度，就表示有问题，也许是日程表定得太乐观，也许是程序设计师需要再训练。不管怎么说，这个问题一定要认真解决，绝对不应该让程序设计师加班来弥补这个漏洞。</div>
		</div>
<img src ="http://www.blogjava.net/superbible/aggbug/57374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-07-09 21:06 <a href="http://www.blogjava.net/superbible/archive/2006/07/09/57374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL5之使用经验</title><link>http://www.blogjava.net/superbible/archive/2006/06/13/52364.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Tue, 13 Jun 2006 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/06/13/52364.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/52364.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/06/13/52364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/52364.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/52364.html</trackback:ping><description><![CDATA[
		<p>MySQL5支持视图、存储过程、触发器等高级特性了，终于象个完整的数据库了！</p>
		<p>很高兴啊，我们做项目的时候选择性更强了。</p>
		<p>不过在我一个实际的网站项目中，发现事实和看上去的不太相同啊。是否支持这些特性和支持得多好毕竟是不同的问题！比如在使用Oracle时，发现在9i上能正确执行的统计SQL到8i上居然报错，无非是多用了几个嵌套的子查询。Oracle尚且如此，MySQL也的确不能有太高期望。</p>
		<p>下面列举一下MySQL5的问题：</p>
		<p>版本5.0.16中对视图进行排序时，会导致服务器崩溃。如:select * from 视图名 order by 某字段。所幸5.0.21版本解决了这个问题。不过我这只是随便一用就能碰上这种致命错误，谁知道还有多少bug隐藏着呢？ <br />存储过程更是不太爽。居然不支持递归，SQLServer和Oracle都早就支持了。郁闷，在处理树形数据时，只能写点固定树的深度的视图了。 <br />1.1.20版本的Query browser和1.1.9版本的Administrator客户端工具稳定性好差，每天能崩个几回。不过功能比以前强些了。Query browser中多粘贴点SQL脚本就能搞死它；CREATE 某东西，按执行多两次、或快了些也能搞死它。只能说比没有强，凑合用吧。 <br />其他基本功能用起来还不错，没碰到什么问题。当然MySQL有如此影响力肯定有他独到之处，对我来说除了免费外就是速度快、用户群大（则技术支持会比较多），否则可以考虑免费的其他数据库，如PostgreSQL，它的客户端工具就专业多了，初步感觉跟SQLServer的差不多了。<br /></p>
<img src ="http://www.blogjava.net/superbible/aggbug/52364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-06-13 10:40 <a href="http://www.blogjava.net/superbible/archive/2006/06/13/52364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>历史上编程方法的发展</title><link>http://www.blogjava.net/superbible/archive/2006/06/12/52221.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Mon, 12 Jun 2006 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/06/12/52221.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/52221.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/06/12/52221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/52221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/52221.html</trackback:ping><description><![CDATA[
		<p>1.历史上出现的编程方法<br />  1)结构化编程<br />    程序应该按自上而下的顺序执行，不会做随便跳转。主要为了提高可读性(特别是控制结构的)，可自上而下的阅读代码，并且执行的顺序也大体是这样的。<br />    它的三个组成部分：顺序Sequence，选择selection,循环(或迭代)repetition (or iteration)。任何控制结构都可以用这三个部分组成。<br />    需要小心使用其他方式如：break,continue,return,throw-catch.<br />  2)模块化编程<br />    将逻辑相关的数据和函数放在一个模块中。<br />    VB中的Module就是这个思想的应用。<br />    它没有多个实例的概念，相当于面向对象中的仅包含静态方法和静态变量的类。不需要实例化即可直接调用方法，只存在一个"实例"。<br />  3)面向对象编程<br />    主要特点：封装(Encapsulation),继承(Inheritance),多态(Polymorphism)。<br />    封装:将逻辑相关的数据和方法(函数)放在一个类中。跟模块化编程做的一致。<br />    继承:将内容或接口重用，并实现类型的多态。<br />    多态:不同的语义环境下，同一名称可以有多种不同的实现。<br />  具体表现为两类：<br />  同名方法不同内容，实现方式：使用重载(overload),当然方法的参数是不同的;<br />  同名类型不同内容，实现方式：使用覆盖(override)或实现(implement)。允许使用同一接口调用不同类的的实例对象。</p>
		<p>2.各种方法的目标<br />  结构化编程。重点是是控制结构，可看作是基本程序语句(无子程序)的结构；<br />  子程序化编程。似乎没有相关的历史潮流,但我认为加入认为的加入它会使整个方法的发展过程更加完整。也许这个大家都认为是当然的了?子程序(或过程、函数、方法)是模块化、面向对象编程的最重要的基石。<br />  模块化编程。重点是将数据和子程序逻辑相关的组合;<br />  面向对象编程。在模块化的基础上重点加入了模块之间的关系。这里的模块已演化为类。<br />3.方法体系<br />  上述几种编程方法可以归为一类，属于一个方法体系，其重点在于编程本身，力图有效管理并降低程序逻辑的复杂性。<br />  随其发展，管理的代码单元越来越大，越来越复杂，其方式也越来越接近日常的思维。<br />  其辅助技术或方法有编辑器、调试器、UML、软件工程等。<br />  我认为此体系中新的方法还未出现。现在流行的方法中:AOP面向方面编程，仅是此体系有益的补充；SOA面向服务架构，重点在于用统一的方式调用，而不依赖于底层技术，是组件化的一种形式，这不是这一类的主线方向。<br />  </p>
		<p>4.总结：<br />      以往的编程方法和原则在现代的方法中得到了保留和发展，这对新手是一个挑战，不循序渐进的学习这些技术，想要短期学会现代方法(如：面向对象编程)是困难的。<br />      记住这些编程方法的主旨是很有好处的。<br />      新的编程方法必将是历史方法的继承和发展，所以学好这些旧的方法非常重要。<br />      掌握这些在各种层出不穷的新语言和新工具中不变的精华，或许，你可以不再那么疲于追赶新的技术潮流。</p>
<img src ="http://www.blogjava.net/superbible/aggbug/52221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-06-12 15:38 <a href="http://www.blogjava.net/superbible/archive/2006/06/12/52221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我刚毕业那会</title><link>http://www.blogjava.net/superbible/archive/2006/06/09/51697.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Fri, 09 Jun 2006 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/06/09/51697.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/51697.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/06/09/51697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/51697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/51697.html</trackback:ping><description><![CDATA[
		<p>老婆的堂弟今年要毕业了，老婆本想给他介绍个工作，就问你想做什么工作？回答是什么赚钱做什么，现在不都这样么？</p>
		<p>好熟悉的话！现在社会上的确是这么个风气。回想当初我毕业时，也基本是这么个态度。不过我当时对本专业基本没兴趣，当时本专业工作也难找，在一个中南地区的省会城市工资3、5百。当然也有好点的1千多，不过那是给成绩好的人留的。不是我这种不务正业的主可以触及的。</p>
		<p>当初的考虑是基本上要先能养活自己。独立！在我心中是第一位的。上大学时，我就已经耻于每月向我爸要300月生活费了。我的考虑是：</p>
		<ol>
				<li>干本专业如果有人要我，有个5百块我也就勉为其难的去了。不过由于我不感兴趣也就没有好好学，成绩单上是比较难看的，估计不找点门路也不会有人要。总之想来想去这条路可行性约等于0。 
</li>
				<li>那我有什么拿手的？好像还有门手艺，倒是玩了4年吉他，也有不少大学毕业的去酒吧唱歌。不过本人嗓子容易哑，不适于干这个职业。 
</li>
				<li>我应该找我喜欢干的，又比较能赚钱的。计算机，就是它了。我十分想当程序员，这个名称对我，那就是一个梦想啊。就跟刚玩计算机时，对“电脑高手”名号之渴望一般。 </li>
		</ol>
		<p> 结果我走了第三条路。不容易啊，其间辛苦和曲折一言难尽。简而言之，就是尝试了考研换行的（考计算机）的路子失败，卖过10台品牌电脑5周后试用期后被开除，两次进过我哥同学的公司干活。成功的是第二次进我哥同学的公司，做ASP+SQLServer开发。</p>
		<p>我当时对ASP连听都没听说过。填面试单时，我在期望工资上写的是500，我想基本上能维持大学生活的水平，够自己活下去就行了。面试时，那边就是我哥的同学，他问了些学什么专业之类的问题，我据实以告，他似乎不太满意。看到我的期望工资时，他有些愤怒，说我们这里3000以下的都不要！后来他想了想，给我的500前面加了个"1"，因为这个是公司对毕业生的平均水平。</p>
		<p>面试完那个狂喜阿，让我下周一去上班。我回家时在路上就暗下决心，一定要好好抓住这个机会！给我一个月的试用期，说一个月后水平可以就留下否则就走人。我的压力很大啊。买本书自己看，项目经理偶尔回来指点一下，前两周我基本上是在公司自学。后来让我做个简单的数据查询页面。搞出来就算通过。</p>
		<p>过了好多年了，对那时的心情还是如此清晰。感谢我哥和他的那个同学让我步入了这一行。不容易，不容易。</p>
		<p>毕业后的几年，本专业忽然热了起来，一点不比计算机挣得少，但是比干编程的轻松多了。真是30年河东，30年河西！不过我基本上对这个选择没有后悔，因为我当时也不是把赚钱当作唯一的或者第一的目的。主要是因为喜欢。</p>
		<p>所以，逢老婆的堂弟即将毕业、找工作之际，说两句心里话，不要把钱看作是好工作标准的全部，钱的多少是可变的。综合考虑行业未来的发展、自身的兴趣等多方面因素，才是比较正确的方法。</p>
		<p> </p>
<img src ="http://www.blogjava.net/superbible/aggbug/51697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-06-09 15:25 <a href="http://www.blogjava.net/superbible/archive/2006/06/09/51697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web服务器开发环境下的线程安全问题</title><link>http://www.blogjava.net/superbible/archive/2006/06/09/51695.html</link><dc:creator>黑子</dc:creator><author>黑子</author><pubDate>Fri, 09 Jun 2006 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/superbible/archive/2006/06/09/51695.html</guid><wfw:comment>http://www.blogjava.net/superbible/comments/51695.html</wfw:comment><comments>http://www.blogjava.net/superbible/archive/2006/06/09/51695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superbible/comments/commentRss/51695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superbible/services/trackbacks/51695.html</trackback:ping><description><![CDATA[
		<p>Servlet是在多线程环境下的。即可能有多个请求发给一个servelt实例，每个请求是一个线程。<br />struts下的action也类似，同样在多线程环境下。可以参考struts user guide: <a href="http://struts.apache.org/struts-action/userGuide/building_controller.html">http://struts.apache.org/struts-action/userGuide/building_controller.html</a> 中的Action Class Design Guidelines一节:  Write code for a multi-threaded environment - Our controller servlet creates only one instance of your Action class, and uses this one instance to service all requests. Thus, you need to write thread-safe Action classes. Follow the same guidelines you would use to write thread-safe Servlets. <br />译:为多线程环境编写代码。我们的controller servlet指挥创建你的Action 类的一个实例，用此实例来服务所有的请求。因此，你必须编写线程安全的Action类。遵循与写线程安全的servlet同样的方针。<br />  <br />1.什么是线程安全的代码<br />  在多线程环境下能正确执行的代码就是线程安全的。<br />  安全的意思是能正确执行，否则后果是程序执行错误，可能出现各种异常情况。</p>
		<p>2.如何编写线程安全的代码<br />  很多书籍里都详细讲解了如何这方面的问题，他们主要讲解的是如何同步线程对共享资源的使用的问题。主要是对synchronized关键字的各种用法，以及锁的概念。<br />  Java1.5中也提供了如读写锁这类的工具类。这些都需要较高的技巧，而且相对难于调试。<br />  <br />  但是，线程同步是不得以的方法,是比较复杂的,而且会带来性能的损失。等效的代码中，不需要同步在编写容易度和性能上会更好些。<br />  我这里强调的是什么代码是始终为线程安全的、是不需要同步的。如下:<br />  1)常量始终是线程安全的，因为只存在读操作。<br />  2)对构造器的访问(new 操作)是线程安全的，因为每次都新建一个实例，不会访问共享的资源。<br />  3)最重要的是:局部变量是线程安全的。因为每执行一个方法，都会在独立的空间创建局部变量，它不是共享的资源。局部变量包括方法的参数变量。<br />    struts user guide里有：<br />    Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.<br />    译:只使用用局部变量。--编写线程安全的代码最重要的原则就是，在Action类中只使用局部变量，不使用实例变量。</p>
		<p> <br />总结：<br />    在Java的Web服务器环境下开发，要注意线程安全的问题。最简单的实现方式就是在Servlet和Struts Action里不要使用类变量、实例变量，但可以使用类常量和实例常量。<br />如果有这些变量，可以将它们转换为方法的参数传入，以消除它们。<br />    注意一个容易混淆的地方：被Servlet或Action调用的类中(如值对象、领域模型类)中是否可以安全的使用实例变量？如果你在每次方法调用时<br />新建一个对象，再调用它们的方法，则不存在同步问题---因为它们不是多个线程共享的资源，只有共享的资源才需要同步---而Servlet和Action的实例对于多个线程是共享的。<br />换句话说，Servlet和Action的实例会被多个线程同时调用，而过了这一层,如果在你自己的代码中没有另外启动线程，且每次调用后续业务对象时都是先新建一个实例再调用，则都是线程安全的。<br /></p>
<img src ="http://www.blogjava.net/superbible/aggbug/51695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superbible/" target="_blank">黑子</a> 2006-06-09 15:20 <a href="http://www.blogjava.net/superbible/archive/2006/06/09/51695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>