??xml version="1.0" encoding="utf-8" standalone="yes"?>www.爱久久,久久精品国产精品青草,欧美国产精品http://www.aygfsteel.com/raul_177/category/2355.htmlwinners never quit,quiters never winzh-cnTue, 27 Feb 2007 12:08:25 GMTTue, 27 Feb 2007 12:08:25 GMT60用十q学习编E?/ Teach Yourself Programming in Ten Years (摘自Bigleo的blog)http://www.aygfsteel.com/raul_177/articles/10223.html风之子的家风之子的家Tue, 16 Aug 2005 06:04:00 GMThttp://www.aygfsteel.com/raul_177/articles/10223.htmlhttp://www.aygfsteel.com/raul_177/comments/10223.htmlhttp://www.aygfsteel.com/raul_177/articles/10223.html#Feedback0http://www.aygfsteel.com/raul_177/comments/commentRss/10223.htmlhttp://www.aygfsteel.com/raul_177/services/trackbacks/10223.html前几天,p里排课Q有教师讜y语a课(C++、JAVA{)随便找个老师p上”。我哑然Q如果计机专业的老师都这P我不知,会教Z么样的学生来?/P>

今天览互联|,无意看到下面的文章,大家看后可以点评。以下是译文与原文?/P>

用十q学习编E?/A>
Z么每个h都急不可耐?

走进M一家书店,你会看见《Teach Yourself Java in 7 Days》(7天Java无师自通)的旁Ҏ一长排看不到尽头的cM书籍Q它们要教会你Visual Basic、Windows、Internet{等Q而只需要几天甚臛_时。我在Amazon.com上进行了如下搜烦Q?BR>    pubdate: after 1992 and title: days and (title: learn or title: teach yourself)
    (出版日期Q?992q后 and 书名Q天 and Q书名:学会 or 书名Q无师自通))
我一共得C248个搜索结果。前面的78个是计算Zc(W?9个是《Learn Bengali in 30 days》,30天学会孟加拉语)。我把关键词“days”换成“hours”,得到了非常相似的l果Q这ơ有253本书Q头77本是计算Zc,W?8本是《Teach Yourself Grammar and Style in 24 Hours》(24时学会文法和文体)。头200本书中,?6%是计机书籍?BR>l论是,要么是h们非常急于学会计算机,要么是不知道ؓ什么计机惊h地简单,比Q何东襉KҎ学会。没有一本书是要在几天里教会Zƣ赏贝多芬或者量子物理学Q甚x样l狗打扮?BR>让我们来分析一下像《Learn Pascal in Three Days》(3天学会PascalQ这L题目到底是什么意思:

学会Q在3天时间里Q你不够旉写一些有意义的程序,q从它们的失败与成功中学习。你不够旉跟一些有l验的程序员一起工作,你不会知道在那样的环境中是什么滋呟뀂简而言之,没有_的时间让你学到很多东ѝ所以这些书谈论的只是表面上的精通,而非深入的理解。如Alexander PopeQ英国诗人、作Ӟ1688-1744Q所aQ?B>一知半解是危险的(a little learning is a dangerous thingQ?/FONT>

PascalQ在3天时间里你可以学会Pascal的语法(如果你已l会一门类似的语言Q,但你无法学到多少如何q用q些语法。简而言之,如果你是Q比如说一个BasicE序员,你可以学会用Pascal语法写出Basic风格的程序,但你学不到Pascal真正的优点(和缺点)。那关键在哪里?Alan PerlisQACMW一M席,囄奖得主,1922-1990Q曾l说q:?B>如果一门语a不能影响你对~程的想法,那它׃值得d”。另一U观ҎQ有时候你不得不学一点PascalQ更可能是Visual Basic和javascript之类Q的皮毛Q因Z需要接触现有的工具Q用来完成特定的d。但此时你不是在学习如何~程Q你是在学习如何完成d?BR>
3天:不幸的是Q这是不够的Q正如下一节所a?BR>
10q编E无师自?BR>
一些研I者(Hayes、BloomQ的研究表明Q在许多领域Q都需要大U?0 q时间才能培d专业技能,包括国际象棋、作曌Ӏ绘甅R钢琴、游泟뀁网球,以及经心理学和拓扑学的研究。似乎ƈ不存在真正的捷径Q即使是莫扎特,? 岁就N出音乐天才,在他写出世界U的音乐之前仍然用了过13q时间。再看另一U音乐类型的披头士,他们g是在1964q的Ed Sullivan节目中突然冒头的。但其实他们?957q就开始表演了Q即使他们很早就昄Z巨大的吸引力Q他们第一ơ真正的成功——Sgt. Peppers——也要到1967q才发行。Samuel JohnsonQ英国诗人)认ؓ10 q还是不够的Q?B>M领域的卓成都只能通过一生的努力来获得;E低一点的代h也换不来?/FONT>”(Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.Q?乔叟QChaucerQ英国诗人,1340-1400Q也抱怨说Q?B>生命如此短暂Q掌握技艺却要如此长久?/FONT>”(the lyf so short, the craft so long to lerne.Q?BR>下面是我在编E这个行当里获得成功的处方:


对编E感兴趣Q因Z而去~程。确定始l都能保持够的乐趣Q以致你能够?0q时间投入其中?BR>
跟其他程序员交谈Q阅d他程序。这比Q何书c或训练评都更重要?BR>
~程。最好的学习是从实践中学习。用更加技术性的语言来讲Q“个体在特定领域最高水q的表现不是作ؓ长期的经验的l果而自动获得的Q但即是非常富有经验的个体也可以通过L的努力而提高其表现水^。”(p. 366Q,而且“最有效的学习要求ؓ特定个体制定适当隑ֺ的Q务,有意义的反馈Q以及重复及Ҏ错误的机会。”(p. 20-21Q《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》(在实践中认知Q心智、数学和日常生活的文化)是关于这个观点的一本有的参考书?BR>
如果你愿意,在大学里׃4q时_或者再花几q读研究生)。这能让你获得一些工作的入门资格Q还能让你对此领域有更深入的理解Q但如果你不喜欢q学校,Q作Z点牺Ԍ你在工作中也同样能获得类似的l验。在M情况下,单从书本上学习都是不够的。“计机U学的教育不会让M人成为内行的E序员,正如研究ȝ和颜料不会让M人成为内行的d? Eric RaymondQ《The New Hacker's Dictionary》(新黑客字典)的作者如是说。我曄雇用q的最优秀的程序员之一仅有高中学历Q但他创造出了许多伟大的软gQ甚x讨论他本人的新闻l,而且股票期权让他辑ֈ我无法企及的富有E度Q译注:指Jamie ZawinskiQXemacs和Netscape的作者)?BR>
跟别的程序员一起完成项目。在一些项目中成ؓ最好的E序员;在其他一些项目中当最差的一个。当你是最好的E序员时Q你要测试自己领导项目的能力Qƈ通过你的z见鼓舞其他人。当你是最差的时候,你学习高手们在做些什么,以及他们不喜Ƣ做什么(因ؓ他们让你帮他们做那些事)?BR>
接手别的E序员完成项目。用心理解别人编写的E序。看看在没有最初的E序员在场的时候理解和修改E序需要些什么。想一x样设计你的E序才能让别人接手维护你的程序时更容易一些?BR>
学会臛_半打~程语言。包括一门支持类抽象Qclass abstractionQ的语言Q如Java或C++Q,一门支持函数抽象(functional abstractionQ的语言Q如Lisp或MLQ,一门支持句法抽象(syntactic abstractionQ的语言Q如LispQ,一门支持说明性规U(declarative specificationQ的语言Q如Prolog或C++模版Q,一门支持协E(coroutineQ的语言Q如Icon或SchemeQ,以及一门支持ƈ行处理(parallelismQ的语言Q如SisalQ?BR>
C在“计机U学”这个词l里包含“计机”这个词。了解你的计机执行一条指令要多长旉Q从内存中取一个word要多长时_包括~存命中和未命中的情况)Q从盘上读取连l的数据要多长时_定位到磁盘上的新位置又要多长旉。({案在这里。)

试参与C语a标准化工作中。可以是ANSI C++委员会,也可以是军_自己团队的编码风格到底采?个空格的~进q是4个。不论是哪一U,你都可以学到在这门语a中到底h们喜Ƣ些什么,他们有多喜欢Q甚x可能E微了解Z么他们会有这L感觉?BR>
拥有快从语a标准化工作中抽n的良好判断力?BR>

qq些xQ我很怀疑从书上到底能学到多东ѝ在我第一个孩子出生前Q我d了所有“怎样……”的书,却仍然感到自己是个茫无头l的新手?0个月后,我第二个孩子出生的时候,我重新拿起那些书来复习了吗?不。相反,我依靠我自己的经验,l果比专家写的几千页东西更有用更靠得住?BR>Fred Brooks在他的短文《No Silver Bullets》(没有银弹Q中立了如何发现杰出的软g设计者的三步规划Q?BR>


早pȝ地识别出最好的设计者群体?BR>
指派一个事业上的导师负责有潜质的对象的发展Q小心地帮他保持职业生的历?BR>
让成长中的设计师们有Z互相影响Q互相激励?BR>

q实际上是假定了有些人本w就h成ؓ杰出设计师的必要潜质Q要做的只是引导他们前进。Alan Perlis说得更简z:“每个h都可以被教授如何雕塑Q而对c_朗基|来_能教l他的倒是怎样能够不去雕塑。杰出的E序员也一样”?BR>所以尽去买那些Java书;你很可能会从中找C用处。但你的生活Q或者你作ؓE序员的真正的专业技术,q不会因此在24时?4天甚?4个月内发生真正的变化?/DIV>
Teach Yourself Programming in Ten Years
Why is everyone in such a rush?
Walk into any bookstore, and you'll see how to Teach Yourself Java in 7 Days alongside endless variations offering to teach Visual Basic, Windows, the Internet, and so on in a few days or hours. I did the following power search at Amazon.com:
pubdate: after 1992 and title: days and
(title: learn or title: teach yourself)
and got back 248 hits. The first 78 were computer books (number 79 was Learn Bengali in 30 days). I replaced "days" with "hours" and got remarkably similar results: 253 more books, with 77 computer books followed by Teach Yourself Grammar and Style in 24 Hours at number 78. Out of the top 200 total, 96% were computer books.
The conclusion is that either people are in a big rush to learn about computers, or that computers are somehow fabulously easier to learn than anything else. There are no books on how to learn Beethoven, or Quantum Physics, or even Dog Grooming in a few days.

Let's analyze what a title like Learn Pascal in Three Days could mean:

Learn: In 3 days you won't have time to write several significant programs, and learn from your successes and failures with them. You won't have time to work with an experienced programmer and understand what it is like to live in that environment. In short, you won't have time to learn much. So they can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing.

Pascal: In 3 days you might be able to learn the syntax of Pascal (if you already knew a similar language), but you couldn't learn much about how to use the syntax. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using Pascal syntax, but you couldn't learn what Pascal is actually good (and bad) for. So what's the point? Alan Perlis once said: "A language that doesn't affect the way you think about programming, is not worth knowing". One possible point is that you have to learn a tiny bit of Pascal (or more likely, something like Visual Basic or javascript) because you need to interface with an existing tool to accomplish a specific task. But then you're not learning how to program; you're learning to accomplish that task.

in Three Days: Unfortunately, this is not enough, as the next section shows.
Teach Yourself Programming in Ten Years
Researchers (Hayes, Bloom) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene, appearing on the Ed Sullivan show in 1964. But they had been playing since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967. Samuel Johnson thought it took longer than ten years: "Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price." And Chaucer complained "the lyf so short, the craft so long to lerne."
Here's my recipe for programming success:

Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in ten years.

Talk to other programmers; read other programs. This is more important than any book or training course.

Program. The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.

If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and through stock options is no doubt much richer than I'll ever be.

Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you're the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you're the worst, you learn what the masters do, and you learn what they don't like to do (because they make you do it for them).

Work on projects after other programmers. Be involved in understanding a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain it after you.

Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).

Remember that there is a "computer" in "computer science". Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)

Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.

Have the good sense to get off the language standardization effort as quickly as possible.
With all that in mind, its questionable how far you can get just by book learning. Before my first child was born, I read all the How To books, and still felt like a clueless novice. 30 Months later, when my second child was due, did I go back to the books for a refresher? No. Instead, I relied on my personal experience, which turned out to be far more useful and reassuring to me than the thousands of pages written by experts.
Fred Brooks, in his essay No Silver Bullets identified a three-part plan for finding great software designers:

Systematically identify top designers as early as possible.

Assign a career mentor to be responsible for the development of the prospect and carefully keep a career file.

Provide opportunities for growing designers to interact and stimulate each other.

This assumes that some people already have the qualities necessary for being a great designer; the job is to properly coax them along. Alan Perlis put it more succinctly: "Everyone can be taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great programmers".
So go ahead and buy that Java book; you'll probably get some use out of it. But you won't change your life, or your real overall expertise as a programmer in 24 hours, days, or even months.


References
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
http://www.norvig.com/


风之子的家 2005-08-16 14:04 发表评论
]]>求职面试自我介绍一分钟 选择?fy198392 ?Blog http://www.aygfsteel.com/raul_177/articles/9748.html风之子的家风之子的家Wed, 10 Aug 2005 14:36:00 GMThttp://www.aygfsteel.com/raul_177/articles/9748.htmlhttp://www.aygfsteel.com/raul_177/comments/9748.htmlhttp://www.aygfsteel.com/raul_177/articles/9748.html#Feedback0http://www.aygfsteel.com/raul_177/comments/commentRss/9748.htmlhttp://www.aygfsteel.com/raul_177/services/trackbacks/9748.html 

一D늟短的自我介绍Q其实是Z揭开更深入的面谈而设的?

  一分钟的自我介l,犹如商品q告Q在短短60U内Q针对“客户”的需要,自己最好的一面,毫无保留地表现出来,不但要oҎ留下深刻的印象,q要x引发起“购买欲”?/P>

  自我认识想一矢中的,首先必须知道你能带给公司什么好处。当然不能空口讲白话Q必L事实加以证明?/P>

  最理想是能够“展C”过ȝ成就。例如你曾ؓ以往的公司设计网,q得q奖Ҏ赞扬。当Ӟq些例子都必M现在公司的业务性质有关?/P>

  职位愈高Q自我认识就愈重要,应将个h的成败得失,录在日C。这P可以时刻都清楚自己的弱点与强项?/P>

  投其所好清楚自q强项后,便可以开始预备自我介l的内容Q包括工作模式、优炏V技能,H出成就、专业知识、学术背景等?/P>

  好处众多Q但只有短短一分钟Q所以一切还是与该公司有关的好。如果是一间电脑Y件公司,应说些电脑Y件的话题Q如是一间金融胦务公司,便可跟他说钱的事QM投其所好?/P>

  但有一点必ȝ讎ͼ话题所C处,必须H出自己对该公司做出的A献,如增加营业额、减低成本、发掘新市场{?/P>

  铺排ơ序内容的次序亦极重要,是否能紧握听众的注意力,全在于事件的~排方式。所以排在头位的Q应是你最想他记得的事情。而这些事情,一般都是你最得意之作。与此同Ӟ可呈上一些有关的作品或记录增加印象分?/P>

  w体语言不管内容如何_ֽluQ若没有丽的包装,q是不成的。所以在自我介绍当中Q必ȝ意自己在各方面的表现Q尤其是声线。切忌以背诵朗读的口Ml自己。最好事前找些朋友作l习对象Q尽量o声线听来畅自然Q充满自信?/P>

  w体语言也是重要的一环,其是眼接触。这不但令听众专心,也可表现自信?/P>

  曾有一Ҏ告指出,日常的沟通,非语a性的占了70%.所以,若想面试成功Q便应紧记注意一下你的n体语a?/P>

  面试问题及回{技巧大公开

  http://www.cer.net2004-01-13Q?0Q?6

  1、我们ؓ什么要聘用?/P>

  Q测试你的沉静与自信。)l一个简短、有CD的回{:“我能做好我要做的事情、”我怿自己Q我惛_到这份工作?/P>

  2、ؓ什么你惛_q里来工?/P>

  Q这应该是你喜爱的题目。)因ؓ你在此前q行了大量的准备Q你了解q家公司。组l几个原因,最好是短而切合实际的?/P>

  3、这个职位最吸引你的是什?/P>

  Q这是一个表C对这个公司、这份工作看法的Z。)回答应考官认你具备他要求的素质?/P>

  4、你是否喜欢你老板的职?/P>

  回答当然是“YESQ如你不满意Q可补充Q”当我有q个评测能力Ӟ或“有q样一个空~时吧?/P>

  5、你是否愿意d司派你去的那个地?/P>

  如果你回{“NOQ你可能会因此而失掉这份工作,CQ你被雇用后你可以和公司p个问题再行谈判?/P>

  6、谁曄l你最大的影响

  选一个名字即可,最好是你过ȝ老师{,再简短准备几句说明ؓ什么?/P>

  7、你在q家公司呆多?/P>

  回答q样的问题,你该持有一U明的态度Q即Q能待多久待多久Q尽可能长,“我在这里l学习和完善自己?/P>

  8、什么是你最大的成就

  准备一两个成功的小故事?/P>

  9、你能提供一些参考证明吗

  你该准备好一些相关的整洁的打CgQƈ有现在的电话和地址?/P>

  10、从现在开始算Q未来的五年Q你惌己成Z么样子?或者:告诉我,你事业的目标

  回答一定要得体Q根据你的能力和l历?/P>

  11、你有和q䆾工作相关的训l或品质?/P>

  说明要短QD两三个最重要的品质,要有事实依据?/P>

  12、导致你成功的因素是什?/P>

  回答要短Q让考官自己LIӞ比如只一句话Q“我喜欢挑战性工作?/P>

  13、你最低的薪金要求是多?/P>

  Q这是必不可的问题Q因Z和你的考官Z不同考虑都十分关心它。)你聪明的做法是:不做正面回答。强调你最感兴的是这个机遇和挑战q存的工作,避免讨论l济上的报酬Q直C被雇用ؓ止?/P>

  14、你q有什么问题吗

  你必d{“当然。你要准备通过你的发问Q了解更多关于这家公司、这ơ面试、这份工作的信息?/P>

  假如你笑W说“没有(心里想着l于l束了,镉K吐了口气Q,那才是犯了一个大错误。这往往被理解ؓ你对该公司、对q䆾工作没有太深厚的兴趣Q其ơ,从最实际的考虑出发Q你N不想听话听音敲打一下考官Q推断一下自己入围有几成希望Q?/P>

  q里有一些供你选择的问题:1、ؓ什么这个职位要公开招聘Q?、这家公司(q个部门Q最大的挑战是什么?3、公司的长远目标和战略计划您能否用一两句话简要ؓ我介l一下?4、您考虑q个职位上供职的人应有什么素质?5、决定雇用的旉大致期限要多久?6、关于我的资g能力问题Q您q有什么要问的吗?

  求职面试必考题大公开

  http://www.cer.net2004-013Q?0Q?6

  以下归纳常见的面试必考题Q前往面试前别忘了事先仿真自己的答案或请亲朋好友赶快给你徏议哟Q?/P>

  Z么选择来本公司应征Q?/P>

  q是所有应征者必先遇到的问题Q以U极、正面的{案回答Q除说明公司的待遇、福利等条g吸引Z外,可进一步说明此工作可活用自q专长?/P>

  Z么辞d一份工作?

  此时如果一x评以前的工作Q便很难被录用。而应说明是ؓ了“实现自我”之cM话语。此外,无工作经验者则可对应征公司的性质Q表现出兴趣作答?/P>

  q去的工作经历如何?

  C会新鲜人可量提出所有打工或D的经验,甚至曾义务帮助过学校Q其它团体或亲朋好友的工作经验皆可补充,最好能具体说明



风之子的家 2005-08-10 22:36 发表评论
]]>
设计q:lJAVA设计开发新手的一些徏议和意见(? 选择?scud ?Blog http://www.aygfsteel.com/raul_177/articles/8579.html风之子的家风之子的家Wed, 27 Jul 2005 14:34:00 GMThttp://www.aygfsteel.com/raul_177/articles/8579.htmlhttp://www.aygfsteel.com/raul_177/comments/8579.htmlhttp://www.aygfsteel.com/raul_177/articles/8579.html#Feedback0http://www.aygfsteel.com/raul_177/comments/commentRss/8579.htmlhttp://www.aygfsteel.com/raul_177/services/trackbacks/8579.html【处理好你的异常?BR>-----------------

 异常处理是Java~程中非帔R要的一个部?在用异怹前阅?lt;Effective Java Programming Language Guide>或?lt;Practical Java>.
 
 下面从书中摘出几条徏?
  *l对不要忽略异常
  *千万不要隐藏异常***
  *仅在不正常的情况下用异?BR>  *对可恢复的情况用可查异?对程序错误用运行时异常(RunTimeException)
  *l方法引发的异常做文?BR>  *在详l信息里面包括失败捕获信?BR>  *使用finally避免资源泄漏
  *....
  
 在这里特别提出的?在开发中要特别处理NULL的情?否则l常引发NullPointException异常,在Java里这是一个最令h头疼的异怺.
 如果你的E序因ؓ一个NULL?而报了几十个NullPointException的话,不但得让人烦?而且q非帔R以找到错误所?所以在Java中一定要注意q个问题.
 如果你的函数不允许Null?那么可以截获?抛出一个异?或者给客户更友好的提示,N不好?
 
 让我们来看一个例?

  public String getName(User aUser)
 {
  //如果aUser为Null,会发生什么情?BR>  return aUser.getName();
 }

  
 很明?如果参数为Null,׃抛出异常.应该改ؓ:
 public String getName(User aUser)
 {
  if(null=aUser)
  {
   return "";
  }  
  else
  {
   return aUser.getName();
  }
 }
 


  
 或者你要求参数不能为空,q可以抛Z个异?强制使用者不能传入空?
 
 
 
 
 q有l常被忽略的是RunTimeException和普通异常的区别,在Java?q是一个特D的异常c?E序中如果遇到这个异?用户可以不截获它,而如果是其他的普通异?׃许要截获?我们的代码经常这么写:
 
 try
 {
  //your code here
 }
 catch(Exception e)
 {
  //do warn
 }

 
 
 q样写的?截获了所有异?当然也包括了RunTimeException. 在很多情况下,q是不合适的处理方式,我们只应截获必要的异?而应该忽略RuntimeException.
 
 关于RunTimeException,在Spring中还有更好的利用方式,阅读Spring框架中在事务中对异常的处理代?例如对Jdbc抛出的SqlException的{?
 
 关于异常处理,我提出几点徏?
  *捕获异常而且再次抛出时要包含原来的异怿?BR>  *不要忘了RunTimeException,除非必要,否则不要用catch(Exception e)的方式捕h有异?
  *不要用异常做程控制,异常的性能代h比较高昂.(Ҏ,可能有h不同?此处不详l讨?
  *不要把异常处理都抛给别h,本函数有能力处理的就不要抛出.
 
 在此读者详l阅?lt;Effective Java Programming Language Guide>或?lt;Practical Java>.

 

【过度依赖?/STRONG>

 在定位错误的时?l常遇到览了七 八个文gq是没有扑ֈ什么地Ҏ行了真正需要的函数,q个时候就非常郁闷.A调用了B,B调用了C,C调用了D......让h找不到北
 
 面对q样的程?存在的问题不仅仅是定位错误麻?而且如果需要维护这L函数?框架,恐怕你的有非常高的lM能力才行,否则打死我也不去l护.
 
 那么我们自己最好不要写q样的程序出来给人用.


【滥用接口?/STRONG>

 现在行"面对接口~程",q本w本来是不错,但是滥用接口的现象却l常发生.
 "面向接口",于是所有的c都有一个对应的接口,接口的函数声明和cM模一?而且一个接口只有一个类来实现它.q样的面向接口有什么意义哪? (Z用Spring的事务的情况除外)
 
 Ҏ"q比Ҏ?Law of Demter)",一个对象应当对其他对象有尽可能的了解.一个接口内应该只定义对Ҏ需要的Ҏ,而不要把一些没用的Ҏ声明攑֜接口里面.
 
 例如如下一个类:
 
  public class MyCounter
  {
   private int n1;
   private int n2;
   public MyCounter(int n1,int n2)
   {
    this.n1=n1;
    this.n2=n2;    
   }
   
   public void setN1(int n1)
   {
    return this.n1 = n1;
   }
   public void setN2(int n2)
   {
    return this.n2 = n2;
   }
   public int getN1()
   {
    return n1;
   }
   public int getN2()
   {
    return n2;
   }
   
   public int getResult()
   {
    return n1 + n2;
   }   
  }
  
  
 我们可以看到,q个cȝ主要目的是得到计结?所以正的接口应该cM:
 
  
  public interface Counter
  {
   int getResult();
  } 
  
 
 但是很多情况?l常是这L接口:
 
 
  public interface Counter
  {
   int getResult();
   int getN1();
   int getN2();
   void setN1(int n1);
   void setN2(int n2);
  } 
  
  
 我们想一?q样做有2个后?
  1.除了getResult之外,其他的函数我们根本用不到,所以是多余?
  2.如果我们要自己实C个Counter,如果接口中仅仅定义了getResult,我们仅仅需要实现它可以了.我们自己的类可能是多个数q算,有乘除加减等{各U运?参数也有可能是一些数l?但是如果按照W二U方法声明接口的?我们必d现后面的四个Ҏ,如果q样的话,实现q样东西不仅没用,而且费旉.我们恐怕要大声骂娘了吧.
 
 
 所?接口有好的作?但是不要滥用.
 ?如果你的接口永远只有一个类实现,那么可能没有必要用接口.
 ?你的接口只需要声明别人用到的函数卛_.



风之子的家 2005-07-27 22:34 发表评论
]]>
设计q:lJAVA设计开发新手的一些徏议和意见(一) 选择?scud ?Blog http://www.aygfsteel.com/raul_177/articles/8578.html风之子的家风之子的家Wed, 27 Jul 2005 14:31:00 GMThttp://www.aygfsteel.com/raul_177/articles/8578.htmlhttp://www.aygfsteel.com/raul_177/comments/8578.htmlhttp://www.aygfsteel.com/raul_177/articles/8578.html#Feedback0http://www.aygfsteel.com/raul_177/comments/commentRss/8578.htmlhttp://www.aygfsteel.com/raul_177/services/trackbacks/8578.html Zl朋友同事一些设计问题上的指?Ҏ写此?很多观点都是从别人的文章中获?有些观点肯定也有偏颇,有些观点也仅仅是提出q没有做详细,请多拍砖,以便Ҏ.


【概q?/STRONG>
-------
    在工作中,作ؓ一个程序员或者一个设计师,L要设计一些函数库或者一个框?当然最l常的还是做目,即是一个项?也会被经常改?甚至交给别h改动.
当你做这些工作的时?你的q些成果都是要给别h了解使用?或者说l以后的你用的,Z别h的方便或者ؓ了自q方便,我们要尽可能做好设计.
 


【放正心?M东西都是不断发展的?BR>----------------------------------

 技术是日新月异?每一天都有新的技术出?正所?山外有山,人外有h",每一个新的轮子出?都可能比你要设计的轮子好,所以在设计的时?应该了解一下是否已l有了类似的轮子,是否要设计一个新的轮?
 即你的轮子已经设计好了,也不好认q轮子一定比别h的轮子好,虽然你的轮子可能更适合你的实际使用.
 技术在不断的发展中,你以及你的朋?同事都在不断q步,"士别三日,当刮目相?,所以不要认Z的水q一定比别h?"有所?寸有所?,所以别人对你的函数?框架提出意见,提出疑问的时?请不要惊?不要反感,不要认ؓ别h?挑刺",也许你的函数?框架早就不适合当前的发展了.
 
 
 态度军_一?你的领导或许更重视这一?
 
 
【必要的l成部分:单元试,文档,实例,手册etc?/STRONG>
--------------------------------------------

 单元试,文档,API Doc,手册,演示E序,Change Log,Readme,build.xml{等

 有一天别Z用了你设计的函数?框架,当你升?原来的项目却不能工作?l过一天的调试,你终于找C原因,原来是不心写错了一个东?
 你肯定不希望上述的事情发?那么请你写单元测试吧,q样既不费自己的时?也不耽误别h的工?何乐而不?你花在写单元试的时?带来的乐和你升U后Ҏ莫名其妙的错误的旉和苦恼相?肯定更有价?你看到单元测试的l条,N不感到高兴吗?!
 如果你不能保证你的程序修Ҏ有错?不要指望你的同事认ؓ你的错误是可以容忍的,他们在心里早开始骂你了,呵呵.写单元测试吧
 
 看看M一个知名的框架,都包含完善的文档,单元试,CZE序,用户手册,那么请你也包含这些吧.?对了,误l地写好JavaDoc,它很重要.
 
 使用你的框架/函数库的人如果到处去找用方?L某个c?但是他不知道是否有这个类),那么说明你的文档没有C.如果你希望别Z用你的这个类或者功?那么请写好文?不要指望别h去读你的源码然后p理解它是q什么用?
 
 如果你做到这?那么你的函数?框架也有?知名"的前?N不是?如果没有,我想是没法让别h更好C用的.
 
 对了,有了q些东西,q要有一个良好的目录l织,q个也可以参考别的框架的l织方式.
 
 
【借鉴成熟的设?参考已有的目?/STRONG>
--------------------------------

 1.要做一个新的东?没有x.不要惊讶,我肯定先找一个现有的东西来借鉴.
 
 当然前提是不要重新发明轮?或者是你有充分条g要重新发明一个轮?
 Struts,WebWork,Spring{等都是成熟的框?不管你用v来是否符合你的习?
 在你成ؓ大师之前,你的设计思想估计前h都已l提出ƈ实践q了,所以要勇敢地去借鉴."站在巨h的肩膀?我们能更q一?
 
 例如我们厌倦了在访问数据库时用如下的代码:

  try
  {   
   //your code here
  }
  catch(Exception e)
  {
   //catch Exception   
  }
  finally
  {
   //must do something
  }

   
 我们可以借鉴Spring框架的JdbcTemplatec?看看它是如何利用回调函数来处理的. 
 
 我们使用hibernate时是不是也会使用cM上面的代?那么可以参考Spring框架的HibernateTemplate.
 
 借鉴也是一U捷?
 
 警告:借鉴但不要抄?借鉴代码要注明来?重他h也是重自己.
 
 
 2.在实际的目?往往可以参考已l有的项目来做自q设计.
 
 例如做一个网?我不知道如何讉K数据?如何布局,如何分层,那么我们可以参考已l有的网站程?看看别h是如何利用SiteMesh或者tiles布局,如何使用Hibernate来访问数据库或者用已l封装好的JDBCcL讉K数据?如何利用Struts,WebWork或者其他访问来分层.
  
  
【遵守约定俗成的一些做法?/STRONG> 
-------------------------

 Z使别人更方便C用你的东?那么在设计一些通用的函数或者类的时?请遵守通用的做?不要与众不同,除非你的内部实现实与众不同.


 例如实现一个类似ArrayList的类,那么请不要这样写:

 public int count()
 {
  return list.size();
 }
 public Item getItem(int i)
 {
  return list.get(i);
 }

 
  而应该这?

 public int size()
 {
  return list.size();
 }
 public Item get(int i)
 {
  return list.get(i);
 }

 
 
  当然每个人都有自qx,如果你非常认Z原来的方式比普通的?那么h?套方式供别h选择.它不会给你带来麻?只是一个一看就懂的做法,不用怀?q样做有好处.
 
 很多cȝ设计都有一些约定俗成的做法,那么在你设计一个新cȝ时?先借鉴一下吧,多看看JDK的源?文档,看看别h是怎么实现?q更有助于推q你的成?
 
  
 

【不要迷信权威?/STRONG> 
---------------

 在用已有的框架或者函数库?不要认ؓ所有的东西都是正确的或者是最好的最?肯定不是.没有完美的东?已经存在的东西在设计的时候因为种U局限或者因Z者的水^,对现在来说肯定存在不合理的设?或者过于理惛_的设?而不能满_际情?
 
 不迷信权?才能到达新的境界.
 

【不要轻易排?不了解就不要草率发表意见,要严谨?/STRONG>
------------------------------------------------

 在网上经常看?Net和Java的比?火拼,或者是Struts VS Webwork或者是其他{等,非常之多.l常看到的是一方对Ҏ的东西不甚了?开始批?l果说不到点子上,反而被嘲笑一?
 几种技术的比较有时候是必要?例如技术选型的时?但是如果一些对q些技术根本不了解的h来选型,来评?你能对结果信服吗?
 存在是合理,M技术都有其存在的理?虽然有些东西早就q时?但是在当时它也是应运而生?
 几种技?都是来解军_L问题,但是问题也有很多斚w,解决方式也有很多U?每个人的x也都不一?思\也不一?所以没有绝对符合要求的技?但是应该有符合你的技?不符合你的技术不{于也不满别h的要?所以不要轻易排斥别的东?
 
 在做技术比较的时?如果你不了解,那么请不要轻易发表意?臛_你可以亲自去了解,d践之后在发表你的意见岂不是更?
 
 在发表意见的时?也要严},不要L下结?要经q求?否则一旦错误只会让ҎW话,让你的同事看不v?例如你说Hibernate3不支持jdk1.3,那么最好去好好扑ֈ你的证据,否则׃成ؓ错误.(Hibernate3支持jdk1.3) 
 
 作ؓ一个技术h?严}应该是我们的习惯之一,无论做开发还是做设计.



风之子的家 2005-07-27 22:31 发表评论
]]>
վ֩ģ壺 Ϫ| | ̩˳| | Ϫ| ¸| ֬| ԭ| | ƽ| | | ĩ| | | ²| | | ʤ| | | | | ˮ| ˲| | | | ˳| | | | ȫ| ¡| | | | | | | ɽ|