コーディングの心得 五か条 From:http://www.objectclub.jp/ コーディングの心得 五か条 コーディングは、本来、非常に知的な作業です。 長いプログラムを記述すること(ステップ数)によって生産性が評価されたのは、過去 の時代の出来事です。現在は、ク ラスやメソッドの役割が明確で、ロジックが読みやすく、保守性に優れたプログラ� を記述することが評価されます。 コーディング規約は、コードの書き方に関する一種のパターンと言うこともでき、 コードの保守性を向上させる具体的 な方法を示しています。したがって、規約の一つ一つの意図を理解し、守ることが重 要です。しかし、保守性に優れた コードを作成するためには、コーディング規約を守ることに加えて、良いコードを記 述するための基本的な心構えをし っかり心に留めておく必要があります。 本章では、この心構えを「コーディングの心得5 か条」として紹介します。 どの心得もごく当たり前に思えるかもしれません。しかし、これらの心得と照らして 既存のコードを参照すると、実践 されていないコードが意外と多いことに気づかれる方も多いのではないでしょうか。 特に、コーディング経験の浅いプログラマの方は、この「コーディングの心得 5 か 条」を理解し、コーディング時に 自分で考えて実践することをお勧めします。 コーディングの心得 五ヵ条 一.見やすさを重視せよ 一.ネーミングはわかりやすく 一.サンプルを鵜呑みにしない 一.同じコードを二度書かない 一.役割は一つに ◇見やすさを重視せよ 「良いコード」の基本は、「他の人が読んでもわかりやすいと感じられるコード」と 言えます。コードの見やすさは、 フォーマットはもちろん、ロジックの簡潔さやAPI の常識的な使い方などから生まれ ます。コーディングにあたって は、常に他の人の視点を意識しながら、見やすさに気を配って記述しましょう。 また、自分で記述したコードであっても、しばらくたってから読み返してみると理解 に時間がかかった経験はないでし ょうか。「3 日前に書いたコードは他人のコードと同じ」ということも言われます。 見やすさを重視することは、他の 人のためだけでなく、自分のためにもなります。 ◇ネーミングはわかりやすく コーディングでは、様々な変数やメソッドなどにネーミング(名前付け)しなければな りません。ネーミングとは、本来、 その対象の本質を表すような名前を考える作業です。大変難易度の高い作業ですが、 一方で適当に行ってもコードの動 作は変わらないため、人によっては手を抜きがちです。しかし、ネーミングの良し悪 しは、コードの可読性に非常に大 きな影響を及ぼします。 例えば、「C0001」というクラス名があるとします。これでは、何を表すクラスなの かすぐにわかりません。また、「int… Read More
《七十五条》的解释 From: http://blog.joycode.com/mvm/archive/2004/05/24/22328.aspx 前两天贴了一篇《如何用正确的方法来写出质量好的软件的75条体会》的Blog,里面是75句话,可能有些话单看一句话不太好理解。杨晔希望“还是由MVM公布一个标准答案”,所以我就再逐条解释一下。篇幅有些长,大家谅解。 1. 你们的项目组使用源代码管理工具了么? 应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。 2. 你们的项目组使用缺陷管理系统了么? 应该用。ClearQuest太复杂,我的推荐是BugZilla。 3. 你们的测试组还在用Word写测试用例么? 不要用Word写测试用例(Test Case)。应该用一个专门的系统,可以是Test Manager,也可以是自己开发一个ASP.NET的小网站。主要目的是Track和Browse。 4. 你们的项目组有没有建立一个门户网站? 要有一个门户网站,用来放Contact Info、Baselined Schedule、News等等。推荐Sharepoint Portal Server 2003来实现,15分钟就搞定。买不起SPS 2003可以用WSS (Windows Sharepoint Service)。 5. 你们的项目组用了你能买到最好的工具么? 应该用尽量好的工具来工作。比如,应该用VS.NET而不是Notepad来写C#。用Notepad写程序多半只是一种炫耀。但也要考虑到经费,所以说是“你能买到最好的”。 6. 你们的程序员工作在安静的环境里么? 需要安静环境。这点极端重要,而且要保证每个人的空间大于一定面积。 7. 你们的员工每个人都有一部电话么? 需要每人一部电话。而且电话最好是带留言功能的。当然,上这么一套带留言电话系统开销不小。不过至少每人一部电话要有,千万别搞得经常有人站起来喊:“某某某电话”。《人件》里面就强烈谴责这种做法。 8. 你们每个人都知道出了问题应该找谁么? 应该知道。任何一个Feature至少都应该有一个Owner,当然,Owner可以继续Dispatch给其他人。 9. 你遇到过有人说“我以为…”么? 要消灭“我以为”。Never assume anything。 10. 你们的项目组中所有的人都坐在一起么? 需要。我反对Virtual Team,也反对Dev在美国、Test在中国这种开发方式。能坐在一起就最好坐在一起,好处多得不得了。 11. 你们的进度表是否反映最新开发进展情况? 应该反映。但是,应该用Baseline的方法来管理进度表:维护一份稳定的Schedule,再维护一份最新更改。Baseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手段。 12. 你们的工作量是先由每个人自己估算的么? 应该让每个人自己估算。要从下而上估算工作量,而不是从上往下分派。除非有其他原因,比如政治任务工期固定等。 13. 你们的开发人员从项目一开始就加班么?… Read More
PassJ Conference 2006 with VSUG 昨日、久しぶりセミナーを参加しました(2年ぶりか?)、いろいろな新しい技術を聞きました。本当に興奮していました。 午前中、Microsoft本社技術社の講演でした。 午後、三のセッションを参加しました: 1.SQL Server 2005 セキュリティとは? 講師:河端 善博 (PASSJ理事/セキュリティ分科会ボードリーダー) 内容: 2003 年 1 月に発生した Slammer 以後、最初のメジャーリリースとなる SQL Server 2005。あの経験はどのような形で反映されたのか、さらに現在の情報保護への対応を、お勧めの新機能ポイントとあわせて、御紹介させていただきます。 ポイント: エンドポイント 特定のIPへのTCP接続を、特定のユーザにのみ許可 共有メモリ接続を拒否できる パスワードによる暗号化できる ANYキーワードの追加によって、管理の便利さへ 2. グラス片手にデータモデリング実践 ~ Northwind を題材に、現場で役立つ設計ノウハウ満載 ~ 講師: 梅田 弘之 (PASSJ 技術顧問 ) 内容:よくあるような教科書的なデータモデリング手法ではなく、現場で役立つ実践的なデータベース設計について解説します。今回は PASSJ Conference なので、ちょっと趣向を凝らして SQL Server の「Northwind」データベースを題材にします。「Northwind」から ER 図をリバース生成し、その良い点や悪い点、検討を要する点などを指摘しながら販売系データベース設計のポイントを解説します。 ポイント: 日本語使用時のルール Oracleは”列名”、SQLSERVERは[列名]で囲む データ型の使い方 種類を少なくし、使い方を統一する 正規化と非正規化の選択… Read More
Populating a DropDownList using AJAX and ASP.NET Populating a DropDownList using AJAX and ASP.NET: ASPAlliance:… Read More
【电脑】微软是如何输掉API之战 【电脑】微软是如何输掉API之战(上) 前几天无意间看到这么篇猛文,很久没有看过这么长的英文文章了,觉得,很有必要将其翻译成为中文,让国内的程序员也来瞅瞅。 这边只是前半部分而已,后半部分还在翻译中。 原文网址:http://www.joelonsoftware.com/articles/APIWar.html 微软是如何输掉API之战(下) 是的,这篇翻译是下篇,上篇是在: http://www.blogwind.com/Wuvist/6984.shtml 我在2005年2月13日翻译的。如果你没有看过上篇,也没有看过原文(http://www.joelonsoftware.com/articles/APIWar.html),请先看上篇。而且建议去看原文,因为,我在翻译的时候去掉了一些附带说明与链接。 原文作者:Joel Spolsky Sunday, June 13, 2004 一统天下的运行时 .Net降临了。这是一个浩大的工程;一个企图彻底根除所有混乱局面的工程。它自然有内存管理。它不仅有Visual Basic,还有一门新的语言。这语言继承了Visual Basic的精神,但却有着C风格的语法-大括号跟引号。最妙的是这门糅合了VB跟C的新语言叫C#,也就是说你再也不用跟别人说你是一个“Basic”基本程序员了。那些恐怖的拖泥带水的Window函数、钩子、向后兼容的Bug还有无从解释的字符串返回语法都被扫除了;取而代之的是一个崭新只有一种字符串并面向对象的接口。一统天下的运行时。这很美,在技术得赞下微软。.Net是一个超赞的程序开发环境,它可以帮你管理内存,拥有丰富、完整并统一的操作系统接口;而且还有丰富、超级完整还很优雅供基本操作的对象库。 但是,程序员不用.Net做太多开发。 当然,也有用.Net的人。 但,使用一个全新彻底革新的程序开发环境来统一VB跟Windows API开 发并存造成的混乱是愚蠢的。现在,我们不是有一种或者是两种开发语言,而是有三种开发语言(还是四种?)!就跟对两个在吵架的小孩大喊:“你们都别吵 了!”一样愚蠢。在电视里面,这样子大喊也许会有效;但在现实生活中这样搞法的必然结果就是你跟两个小孩三个人一起吵得更加大声。 (顺便说一下,那些有关注神秘但被政治所改变的网志聚合格式世界的朋友,你们可以发现同样的事情也发生了。RSS被分裂成为了几个版本-不准确的规则跟一堆政治性质的斗争。而企图解决这一切的做法竟然是定义一个新的叫ATOM的聚合格式。结果便是不同版本的RSS现在多了一个ATOM来搅局-不准确的规则跟一堆政治性质的斗争。当你企图引入第三方来解决对立的两方时,结果便是三足鼎立。你什么也没有统一而且你也没有解决任何事情。) 所以,.Net现在并没有统一并简化世界,我们现在反倒陷入了更大的混乱。所有的人都在犹豫他们的开发策略,究竟有没有足够能力把现有程序转到.Net上呢? 无论微软的市场信息是多么的统一(“用.Net吧!相信我们!”),它的大部分用户还是在使用C,C++,VB 6.0跟传统的ASP做开发。更不用说其它公司提供的开发工具了。然后,仅剩的使用.Net做开发的公司做的是ASP.Net!ASP.Net需要跑在Windows服务器上,但,它需要一个Windows做客户端。这就是我谈到Web时要强调的重点。 哦,等一下,还有其它的东西! 现在微软有了太多的开发人员搞得它重新发明一次整套Windows API还觉得不够爽,它竟然重新发明了两次!在去年(应该是03年,Wuvist注。)的PDC上,微软宣布了它们的下一代操作系统,代号长角。长角不仅有上述的东西,还有一套全新的用户界面API,代号Avalon。Avalon再次把一起推倒从来以利用现在电脑高速的显卡跟实时三维渲染的优势。所以,如果你现在正在开发Windows界面程序,并且使用了微软现在“官方”宣称的最先进的开发环境:WinForms;那么两年后你得重新开始以支持长角跟Avalon。这解释了为什么WinForms在诞生之时便死翘翘了。但愿你还没有在WinForms上投入太多。Jon Udell从微软那找到了一个题为:“我如何在Windows Forms与Avalon间做选择?”的幻灯片,并且问了这么个问题。这是个好问题,并且没有人可以很好的回答它。 所以,我们有了Windows API,有VB,现在还有了带若干种不同语言供选择的.Net;但,我们不能在这些环境下浸淫太久。因为,微软正在开发Avalon呢!注意到没?Avalon可只能在微软最新的操作系统上跑,但是,它得等很久很久以后才能开跑。对我个人来说,我没有时间很深入的学习.Net,并且,我们也没有把Fog Creek的两个应用程序从传统的ASP跟VB 6.0转到.Net上。因为投入做这么件事情对我们没有回馈。一点都没有。在我关心的范围里,它纯粹是一件“开火并动作”的事情:微软会爱死我们停止给Bug跟踪软件跟CMS开发新的功能,并浪费几个月的时间转移到新的开发环境里。这无法使我的任何一个客户获利,也没法让我多卖一套软件。但这对微软来说很妙,因为微软也有它自己的CMS跟Bug跟踪软件。对微软来说,再也没有比使我为追时髦而浪费时间重新绕着.Net转,并且一两年后在为Avalon浪费一次时间的事情让它感到更的爽了。在我忙着转的时候,它却在给它的软件加新功能,懂了没? 没有一个有日常工作的程序员可以有时间可以去追赶所有从雷德蒙出来的新开发工具。因为,微软有太多该死的员工在研发新的开发工具! 现在不是1990年 微软是在八十年代成长起来的,那正式个人电脑高速发展的年代:新出厂的电脑比现有的还多。这意味着如果你的产品只能够在新电脑上跑的话,过不了一两年它也可以占领市场,既便没有人刻意“转用”你的产品。这是Word跟Excel能如此彻底取代WordPerct跟Lotus的原因之一。微软只需要等待下一波硬件升级的浪潮,然后把Windows,Word跟Excel一块卖给企业用户(有些企业还是第一次买电脑)。所以,从很多方面来说,微软从来没有学习如何促使用户从产品的N版升级到N+1版 的必要。当用户买了新电脑,他们会很高兴在新电脑上使用微软的各种最新产品,经管他们不太可能纯粹的做软件升级。这也无所谓,个人电脑市场当时在疯狂的增 长。但是,现在的世界,个人电脑市场已经饱和了,并且现有的电脑都跑得不错。谢谢,微软突然意识到它花长时间等待最新的产品进入市场了。当它企图“终结”Windows 98的时候,现实是有太多的人还在使用着Windows 98,而微软得打破自己的诺言,无奈的继续给这老爷系统做多几年支持。 不幸的是,当所有人都用着98年产的电脑用得很开心的时候,像.Net、长角跟Avalon这些美丽的新技术锁定用户的企图便变得不容易实现了。即使长角真的在2006年如此发布(我此刻其实也并不相信这点),它也得花上几年的时间以获得足够的人认同它是新的开发平台。开发者,开发者,开发者跟开发者在开发软件的时候,并不卖微软那“人格分裂”开发建议的帐。 走进网络 我不能理解我说了这么多却没有提到网络。所有的开发者机会做新软件的时候都有一个选择:做网站或者做“胖客户端”在PC上跑的软件。两者的利弊很简单:网站更加容易配置(deploy),而胖客户端软件则能提供更快的反应时间以提供更有趣的用户界面。 网站更容易配置,因为它不需要安装。对用户来说,“安装”一个网络应用程序等于在浏览器地址栏里输入一个网址。我今天刚装了Google的新Email程序:按Alt+D,输入gmail,再按Ctrl+Enter。 网络应用程序有着相当少的兼容性问题或者跟其它软件冲突的机会。所有使用你产品的用户都使用着你最新的版本,你不必为各种旧版本提供支持。你可以使用任何 你喜欢的开发环境,只要你能够让程序在你自己的服务器上跑就好。你的程序实质上也能自动为所有地球上的电脑服务。而且,你用户的数据在实质上也能自动供地 球上所有的电脑使用。 但,这些需要牺牲流畅的用户界面做代价。这边有一些网站无法做得很好的事情的例子: 1.建立快速画图的程序 2.实时带红色下划线的拼写检查 3.警告用户说他们点浏览器的关闭按钮时会丢失手头的资料… Read More