Mittwoch, 24. November 2010

如何开发Web应用程序

这是一个经常被问到的问题,问的理所当然。作为一个程序员,为什么我就非要被认为知道如何开发Web应用程序呢?这个问题没有一个简单的答案,甚至 那些教育机构都未必能清楚的知道;我上的那个大学并没有提供任何关于这个主题的课程。所以,像大多数在这个领域里的web开发人员一样,我只是通过去做, 去实验才学会了这些。没有人告诉我如何去做,我从给自己做点什么东西开始,学会如何开发web应用程序是在这个过程中的一个副产品。这是学习任何语言的一个非常有效的方法。

你很幸运,我在这里将会把如何开发一个web应用程序的主要过程都讲一下。希望能帮助你入门。

Web应用程序与网站之间的区别

首先,我要说明,开发一个web应用程序跟开发一个网站是不一样的。虽然在总体上有很大相似之处,但开发它们所需要的时间有巨大的差别。那究竟web应用程序和网站有什么不同呢?通常,维基百科能帮助我们解释这个问题,让我们来看看维基百科是如何定义 应用软件的:

应用软件,通常也被称作应用,指的是专门为帮助用户去执行一个或多个相关特定任务而设计的计算机软件。企业软件,会计软件,办公套件,绘图软件,媒体播放器等都属于这种软件。

跟应用软件相对照的是系统软件和中间件,它们管理计算机效能,管理如何跟计算机集成,但通常这些工作并不会直接反映到使用户受益的任务执行上。举个 例子,一个不是很恰当的实体类比,应用软件跟系统软件之间的关系就好比一个电灯泡和一个发电厂之间的关系,发电厂(系统软件)只是产生电能,它自己没有任 何真正的用途,除非利用一个电灯泡这样的应用工具才能为用户提供服务。

从里面,我总结出来自己对web应用程序的定义:

一个web应用程序是一个能够让用户完成某些特定任务的网站。而一个普通的网站的主要目标是给用户提供信息(博客,新闻,指导,等)。

Web应用程序的开发过程

现在特征已经弄清楚了,我们就可以开始定义开发一个web应用程序的整个过程了。当然,这依赖于工程的大小,过程中的某些步骤可能很小,在你的脑海 里就能完成这种工作,但把事情整个的了解一下总是有好处的。同时还有一点很重要的你要明白,这篇文章并不会对每个步骤进行深层次的描述。

步骤一:分析

开发一个web应用的第一步是分析你的需求。你此时应该定义出一个尽量周全的你的应用应该提供的功能清单。如果是你为一个客户做这些工作,你需要明白他们想要什么(要确保你们对方都知道对方在说些什么)。从你们的讨论中,你能总结出需求和软件规格。你即使是为自己开发,我也建议你把希望这个web应用能够做的功能写下来。

步骤二:设计

一旦你弄清楚了这个web应用需要做哪些事情,你就可以开始设计了。这个步骤通常会反反复复进行很多次,每一次都把设计细化一些。你第一要做的是画出页面流程图(画在纸上,或使用软件工具,凭各自所好吧。我喜欢用纸,这样我可以做更快速的改变)。页面流程图通常是很抽象的黑白绘画,画出你将要实现的web应用的样子(你可以加一些色彩,但尽量保持简单)。

Wireframe created using Draft for the iPad

Wireframe created using Draft for the iPad


这个步骤能够让你知道你的应用最终会是个什么样子。跟37signals倡导的相反,我建议使用一些词语描述,适度细化。当我想到一个很好的想法时,或想 到事情该如何做时,我会把它标注到纸上(例如,当点击这个按钮时应该使另外一个元素改变或隐藏,我会把这写在流程图上)。

当你对做出的草图满意后,你可以开始制作实体模型了。
实体模型仍然是些图案,但有色彩和细节。最终的实体模型看起来应该像你将要实现的web应用的一个截屏图。如果你为一个客户开发,他会看看这些东西,并给你他的认可。然而,很多人都喜欢跳过这一步(大多数都是非设计人员),他们喜欢直接奔向网页原型

原型是用HTML开发出来,使用CSS渲染(有时也是有Javascript)。页面布局要做出来,链接能够点,颜色,字体,字体大小要设定好(如 果你做了实体模型,这个会很容易)。这一步非常的重要,因为这里所有的东西都能用于你最终的应用中。如果允许的话,在你的原型上做一些可用性测试,从长期的效果来看,这能使你避免大量的失误。

在这个步骤的最后,你基本上就知道了你的web应用是如何组织到一起的了。登录页面有些什么,用户如何从主页转向到各个页面。

我建议你去听一下Ryan Singer在“Web应用的未来”研讨会上做的他是如何设计37signals的演讲

步骤三:实现

选择一个框架

现在我们已经知道了要去开发什么东西,那就要把它做出来。这一部分的工作很多,你大部分的时间都要花在这个上面。你第一个要做的决定是如何着手,采用什么样的技术,什么框架。你有很多选择的余地,你需要选出一个适合你的。下面是一个最常用的框架的列表:

没有一个明确的标准说哪个框架最好。它们都各有不同,每个都有自己的长处。最重要的是你要知道它们任何一个都能让你开发出好用的web应用。

开发

一旦你知道了如何去开发,那就要甩开臂膀开干了。这个开发工作可以看作有很多块,但说到底,这都是标准的编程活动了。在后台,你要创建类,对象,服 务,过程,以及持久层来把这些对象保存到数据库中。后台是整个应用的核心,对任何应用来说,它跟普通的编程没有什么区别。接着是前台的开发,你现在编写的 代码才是真正给用户使用的操作界面。你把后台的程序和原型界面集成到一起,把系统各部分集成到一起。你还可以把你在开发过程中想到的一些很炫的小功能用 JavaScript实现。

再说一次,有很多种途径可以实现后台程序。建议你去读一读跟你选择的框架相关的资料,弄清楚如何实现这一部分的工作。通常,这些知识会跟面向对象编程有关,但有些框架正在慢慢的向领域驱动设计发展。

步骤四:打磨抛光

现在应用程序已经开发出来,各个独立的模块也集成到了一起。你需要通过测试来确保你在步骤一中定义的需求和软件规格是否被实现(这个问题在你开发的整个过程中都要记在脑中)。你要确保那些愚蠢的用户不能通过试图做一些你还没有实现的操作而把你的应用弄坏(参考 白盒黑盒测试)。你同时还要确保你的程序能够在各种浏览器里(希望不是IE6)都能正确的运行

现在也是你做一些小的调整,改进你的应用程序给人的感觉的时候,让它趋于完美。

步骤五:发布和后续工作

这最后一步(但不是就此完结)是发布你的应用,让用户能够真正使用它(如果这个应用是个公众开发的应用,别忘了做新闻宣传)。如果你愿意,先发布一 个Beta版,这样只有一小部分用户能够发现你的应用里的大问题(因为你的程序里肯定会有bug),他们会帮助你改进程序的质量。不要忙着增加功能,要专注于把你目前的程序变的稳固。

当经过了beta阶段,你的程序已经变得十分的稳固,听取用户反馈的意见,自己试用一下自己的应用,你可以开始思考如何使应用变的更好。找出不和谐的地方,消除掉。以后每次的迭代都要经过上面所说的五个步骤,但就像我最初说的,你现在已经有了一个可以运行的应用程序,你很容易直接在心里完成这些步骤,直接奔向在代码里测试你的功能。

恭喜,你已经自豪的成为一个web应用程序的作者了。

常见程式算法推演

「常见程序的算法」

主要收集一些常见程序的练习题目,您可以借这些题目培养
一些程序设计逻辑的感觉,对题目的分类只是个大概,方便索引而已,用 C C# Java Python Scala实现。



老掉牙
数、运算


关于赌博

集合問題

排序
搜寻
矩阵
堆栈、队列

其它



转自: Gossip@caterpillar http://caterpillar.onlyfun.net/Gossip/index.html

从3个科技公司里学到的57条经验

1.做你个人有热情的事情。你是你自己最好的民意代表。

2.用户体验很重要。大多数产品做不到这些是因为用户弄不清怎样才能从这些产品中获得好处。很多产品做不到这些是因为过于复杂。

3.要懂技术。你不必去写代码,但你必须能理解它是如何被开发出来的,如何工作的。

4.创业公司的CEO必须,必须,必须担任产品经理。他/她必须对产品拥有功能性的用户体验。

5.对功能进行主次分级。不会有两个等同的功能。你不可能把它们一次全实现。要进行兵力优化。

6.使用缺陷跟踪系统,虔诚的用它来管理你的开发活动。

7.及时发布。除非真正的用户接触到你的产品并给予反馈,你永远都不会知道你的产品是好是坏。

8. 尽快发布,经常发布。不要惦记着再增加一些其它功能。只要能达到可以用来收集用户反馈的最小功能集合,那就发布它。收集反馈信息,反复这个过程,发布下一个版本、下一个版本,越快越好。如果你3个月才发布出第一版面向用户的产品,你拖延的太久了。如果3个星期才发布一次更新包,你拖延的太久了。如果不能一周几次,那每周发布一次更新。每3周发布一次重大更新。

9.唯一有意义的事是你的产品的好坏。其它的都是鸡毛蒜皮。

10.对你的产品好坏的唯一判定来自于有多少用户使用它。

11.因此(补充第9、10条):产品初期决定你将来是否能成功的关键因素是你的产品的吸附力。把你主要的时间花在如何在你早期的受众中培养吸附力。如果你能启动这个过程,雪球会越滚越大。

12.如果你最初设想的50%后来证明可行有效,那你已经相当成功了。尽可能的听取你的用户。

13.不要依赖于你的用户代表去告诉你如何发展。用户代表可以告诉你如何定位,帮助你明确潜在的需要打磨的核心内容,但你仍然需要有能力汇总消化这些信息,知道哪里去找到你的用户。

14.大多数人真正主要使用的也就是5~7种服务。如果你想做一个重要的产品,成为一个大公司,你需要能清楚如何成为这5~7种服务中的一种,这样去让用户为你着迷,俘获他们的热情和信任。你需要给你的用户一个好的能够让他们在你的服务上花时间的理由。

15.尝试追逐正在进行的潮流,开创你自己的市场。如果可以的话,捕捉刚刚出现的趋势苗头,驾驭它。

16. 找个“引路人”。有些人以前做过这些 — 融资,贸易,给创业公司工作。给这个人你公司的1%~2%作为报酬换取他的时间。借助他们打开未来市场的大门。把他当作企业发展的宣传媒介。不要让委员会去做这种事情。顾问部从来就没有提供过有用的东西。找到这样的人,把他们当作你的引路人,依靠他们。

17.在你的项目上尽量找最棒的人一起工作,不管他在什么地方。

18.有可能的话最好设立分部,但这需要你穿梭在几个地区之间使他们正常运作。在线合作最少3~4周一次,这意味着你需要几乎每月都要在这几个地方旅行一次。

19.跟你喜欢相处的人一起工作。这不是说你可以跟你不喜欢的人不合。

20.要像信赖你的家人一样信赖跟你一起工作的人。

22.摆放你的办公桌,使你能看到你的同伴,他能看到你。如果你们每天都没有兴趣看到对方,那你们选错了一起工作的人。

23.使用一个类似Yammer的内部分享工具,分享你们正在开发的东西。对很多人(特别是开发人员)来说,更新状态信息要比发送邮件更容易。

24.在团队中使用一个文件共享服务系统,例如basecamp。这对所有人都很重要,它可以记录所有的文件动态并发送到你的邮箱里。basecamp使你有了历史存档,有了一个集中式数据文档库。

25.认清楚自己真正擅长的是什么,把自己的精力主要放在这些事情上。让其他的人做其他的事情。

26.让你的周围围绕着能够弥补你的缺陷的人。让他们做他们擅长的事。你不要去做他们的事。

27.跟在某些方面比你更聪明的人一起工作。

28.跟那些会和你争论,反对你的人一起工作。

29.白天地狱式的奋斗工作,晚上回到家和家人相亲相爱。

30.跟那些热衷于解决你正要解决的某些特定问题的人一起工作。光热情于发展公司业务还不够;还要热情于你的客户,热情于解决他们的问题。

31.促使你周围的人像你一样用心。

32.忠诚。培养和引导人们,而不是鼓噪他们。

33.你永远不会像你想象的那么正确。

34.每周至少去健身房或跑步4次,要想保持你的思维的体型,先保持你身体的体型。

35.不要在飞机上喝饮料,除非你的航程超过8小时。那会害了你,而且浪费你的时间。

36.你选择的投资者应该是你喜欢和他一起工作的,可以做朋友的,能够得到忠告的人。

37.不要按价值来选择投资者。淡化一些这方面的色彩,从长远看,不会有坏处,只要选对人。

38.创业初期募集资金越少越好。强迫自己进行严格的预算,认真使用每一块钱,就好象是最后一块钱。

39.一旦有了一些发展动力,募集一些多于你的需要量的资金,但你要清楚它们都将做什么。这有些技巧。不要在募捐活动上吝啬。

40.每分钱都要花的小心谨慎,就像那是你最后一分钱。

41. 清楚你要做什么样的公司。像Google和Facebook这样的公司没几个。对于你的公司,也许1千万的回报额已经很好,也许2千万,也许一亿,也许什么都没有。计划好你要做什么样的工作。不要去做做不到的事情。看清楚你口袋里有多少钱,能做什么事情,两年赚取2千万期望值的20%要比5年赚取1亿期望值的3%要好。

42.跟41条有关,明白你的业务是否适合接受风险投资。风险投资一般会期望10倍的回报率。也就是说,你接受5百万,那就要提供5千万的回报。1千万的投资 = 1亿的目标。在签署接受风险资金时一定要想清楚他们在你身上期望的是什么。

43.把你的个人公司发展目标和你的投资者的目标保持一致。有目标公司才能成功。投资者没有魔力让事业成功。同样他们也没魔力让CEO用心。

44.会议一般来说都是在浪费时间。

45.微笑。大笑。穿有趣的袜子。我穿有趣的袜子,用来提醒我不要满足于平淡,要有创新。

46.做事情时,做任何事情时,都不要让你看起来像个机器人。让人们知道真实的你。

47.正视你的问题,化劣势为优势。

48.任何地方都穿着你公司的T恤衫。

49.成立自己的客户服务。

50.要会讲故事。

51.别说谎。永远不要。

52.在你周围的人身上寻找灵感。

53.每天都保持快乐。如果不高兴,那就别做。没人要你做。

54.销售中的那句话说的很对,你的成绩只跟最近的一次销售有关系。

55.犯错误,但要吸取教训。我犯了无数错误。

56.成熟,但不要长大。

57.永不放弃。