[Powered by Google Translate] [讲座] [Web开发：从理念到实践]
[本库恩] [比利Janitsch] [哈佛大学]
[这是CS50] [CS50.TV]
[比利]你好，我叫比利，这是本。 >> [奔]你好。
我们今天要谈论的Web开发。
[WEBDEV] [比利Janitsch和本·库恩]
关于我们位在前。
本是排序的后端的家伙。他做事情的工作。
然后我进去，让他们漂亮。
我主要是参与更前端的布局设计类的东西，
和Ben，而另一方面，知道自己在做什么，所以他的作品在后端的东西。
我们一起做了几件事情。
举例来说，去年我们曾在Gimblium这是一个网络游戏开发工作室。
这是我们的最终类项目，
从那时起，我们已经取得了哈佛大学类
这是用于浏览和购物的课程在哈佛大学一个在线的框架。
>> 我们要开始这个想法为我们的网站。
我们将让Facebook，但对于猫。
在你真正做这个网站，
不要让这个网站，因为它不是很好，但是我们将使用它作为一个框架
并通过我们怎样把这种想法的过程
并把它变成一个真正的网站，我们可以使用。
我们将通过打破网站下载下来的开始。
就像你一直在做的CS50，
你要想想什么是进入这个网站上的实际组件。
基本上是从一个想法，就是那种一个抽象的概念，把它
成为一个真正的，实实在在的东西，你可以做。
我们通过问一些问题开始。
这是什么网站？我们为什么做呢？
什么是它会被用来做什么？诸如此类的事情。
在Facebook的猫的情况下，
我们基本上希望有一个网站，让猫的社交网络与对方。
的想法是，他们可以张贴对方的墙壁上，
他们可以提出意见，诸如此类的事情。
而这也正是我们进入的功能组件。
我们现在有这样的框架 - 我们的用户配置文件，
我们有意见，我们可以发布。
也许有一天我们会进水的喜好和诸如此类的事情。
样的，我们要优先考虑这些特性去英寸
我们想说的一样，好吧，这真的很重要，每个人都有一个配置文件
而且每个人都可以发表各自的墙壁上。
次要的是，意见将是很好。
也许以后我们会进水喜欢。
所以，你想拥有一个什么样的基础到项目的想法
这有什么样的，可以在以后应用于更广泛的功能。
你要排序的有一个特定的列表记，
但你开始这个项目不会是你完成的项目。
换句话说，事情会你正在开发的网站，而改变，
并且要留有余地的。
我把它交给奔谁去谈谈结构。
>> [奔]我要谈论Web开发的更多技术方面。
让我们只是去了一些基础知识第一。
当你在做一个web应用程序，
，你将不得不具备的主要分工是
你将有一些东西在客户端怎么回事 -
那就是，你的浏览器代码需要从网站
和JavaScript，HTML，CSS的东西。
这是所有客户端上。
你将有一个在服务器端运行其他代码
它记录所有的人在发送给您的数据，
决定谁给什么，这样的东西。
这只是一些术语，让你们都熟悉我们正在谈论的。
除此之外部门它的好，想着你的Web应用程序中的条款
一对夫妇不同的分量。
当你在做web开发
那你应该总是尝试做的事情之一是降低复杂性。
更复杂的代码是更多的机会存在，使臭虫，
就越难以后更改。
因此，如果你能打破你的应用程序进入一些不同的功能区
即会 - 你可以减少跨区域的通信量的排序 -
这将帮助你很多，从长远来看减少错误方面。
>> 要具体，通常人们瓜分了一个Web应用程序到 -
这是种时髦词了，但他们仍然有用。
你可能听说过人们谈论的模型，视图和控制器。
模型是您的应用程序将要处理的实际数据。
例如，在你的猫的Facebook，你的模型将是 -
你有一个模型一样的帖子，和一个模型为用户配置文件，这样的东西。
您的意见是你如何展示数据给用户。
你可能有1视图寻找一个岗位，所有的评论
和不同的观点对你的墙具有所有文章列表
定向到你，并有不同的看法为您订阅 - 类似的东西。
最后，你有这是基本的控制器，当人们发送给您的帖子
和您更新您的后端系统，
你增加了一堆柜台，和什么的。
这些都是你的控制器。
>> 我将要讨论大部分是关于模型。
意见在技术上并不困难，问题是多与他们的设计
控制器将要具体到任何你正在设计。
但也有一些可以使用相当普遍的技术
让你的模型更好，更容易与我认为是非常有益的工作。
这主要是将是如何处理你的web应用程序的数据在一个不错的方式。
配车型的主要问题
是他们生活的客户端和服务器上，你必须弄清楚
一）如何让他们 - 所有相关的人 - 从服务器到客户端，
和b）如何使它们保持同步。
你的用户会想要做一些更新。
他们将要进行新的帖子。
他们将要喜欢的事情和东西，如果你有喜​​欢。
这些都是处理模型的主要技术难题。
那你会想要问自己的第一件事就是
什么样的数据去在这个模型中，并且我们要什么样的查询到想要做的 -
也就是说，我们如何来看待这些模型？
为了您的猫的Facebook为例，
您的文章将不得不与它相关联的作者，
有些墙后的文本，以及壁后的收件人。
然后你可能要质疑，在一堆不同的方式。
你想看看它通过谁写的帖子，
通过谁收到的发布，也许通过他们发布的日期。
但如果你打算按日期做，那么你必须到另一个字段添加到您的文章
当它实际上是发布。
这2个因素 - 你想要什么样的数据使用，你怎么想观看 -
你应该想想他们首先是因为他们互相依赖，
而这将更加难以将它们以后。
>> 还有一些其他方面的考虑。
当你思考你如何处理在服务器上的模型
你想看看什么是 -
基本上你想使服务器尽可能的简单。
在客户端做的东西一般是，如果你能完全做到这一点的客户端上要快得多
没有做任何形式的网络请求。
我们的想法是做尽可能多的疑问，你可以在客户端上。
与唯一的问题
是，如果您要求您的所有数据在开始
那么那将需要很长的时间来加载。
所以，这个想法是要在有足够数据在客户端之间的折中
你可以做大部分工作，但还有不只是获取面面俱到
使您获得真正慢加载时间在开始。
例如，你的猫的数据
你可能会想取一串最近墙岗位。
你不会想获取所有的人，因为这可以回去了几年。
但你不想要获取它们一次一个
因为这会引入大量的网络开销。
>> 它往往相当困难 - 一旦你有一个数据库运行 -
它往往非常难以改变的你在它什么样的数据 -
也就是说，添加一个新的数据库列或某事 -
所以一个好的策略实际上​​只是保持你的很多数据在文本BLOB -
一个JSON的blob - JSON是JavaScript的对象符号 -
究其原因，是非常有用的，因为你可以添加新的属性
所有这些斑点的JSON不改变你的数据库。
唯一的缺点是，如果你有一堆领域
那你后来加入 - 就像隐藏在JSON一滴 -
那么它很难在数据库中查询它们。
举例来说，如果你以后 - 如果你有你的模型后，我们前面讨论过的
只有作者，收件人和文本 -
你也可以有一个JSON的blob，然后，如果你以后想添加一个日期字段
你不会有改变你的数据库。
你可以只添加日期以所有文本字段。
然后你就可以看看那些在客户端，
但你不能够查询它们在服务器端
因为它是隐藏的文字里。
>> 要思考的另一个问题
是如何你的客户和你的服务器要沟通。
你通常希望保持这种尽可能简单。
你可以有这样一个get - 我 - 这个数据请求，
一个建立 - 一个全新的对象的东西，以及更新，一个历史的对象的要求。
而这些都将是一个服务器上的不同的URL，你 -
浏览器会 - 你可以使用AJAX请求所有这些
而无论是接收或交的数据。
再次，我们的猫的Facebook为例，
你可以有这个URL来获得一个单独的职位，
而且你已经有了一个URL来创建一个新的墙后
也许您上传个人照片，这样的东西的URL。
但同样，这是预先取得大部分数据，这样你就不必继续
使得网络请求。
出于这个原因，你可能不希望有一个帖子说个人get请求，
而是你只是想在整面墙1 get请求。
然后，如果你想取得一个平衡，因为 -
这也将取决于您的应用程序。
因为如果你期待的人只有10或20墙职位
这将是罚款。
但是，如果你希望他们将有成千上万的那么请求将花费太长时间，
所以你可能要添加一个获取 - 所有职位 - 因为参数。
>> 对于所有这些你可能会想同步您的数据以JSON -
JavaScript对象表示法。
几乎每一个语言处理JSON的非常好。
jQuery有这个漂亮的getJSON函数，会做所有的辛勤工作的你。
并在PHP中也是非常不错的JSON通信功能。
所以，这可能是用于发送您的模型来回的最佳格式。
>> 由于我们已经谈到，到目前为止的例子，
这里是你的猫的Facebook应用程序的示例流程。
它与您的浏览器请求的基础网站的网址开始起飞。
该服务器可能会发送过来的静态HTML和一些JavaScript和CSS。
它通常最好不要在服务器上做任何渲染。
您可能不希望 -
什么样的服务器是不是做有下降的墙职位列表
并产生一些HTML为每一个和发送该结束了。
它通常是最好做在客户端上，否则
你要重新绘制的东西每一次，你必须做出一个服务器请求。
而这很快为您提供了大量的开销。
它通常是最好的只是船降下静态HTML
然后JavaScript和CSS，会做在客户端的呈现。
只要这些东西进来，
那么你可以有 - 在JavaScript - 你能为墙面做数据的请求
之类的东西，之后，服务器基本上只是在做数据库查询
并检查权限。
唯一重要的事情是，它不能发送超过其他一些用户墙职位
那你不许看。
它可以基本上是一个非常薄的接入层到数据库，
然后将所有的显示数据 - 所有的意见和东西 -
那些可以在浏览器中发生，然后当你想使一个职位或东西
你只是发送另一个请求。
>> 还有一些花哨的东西，你可以在此之上做。
在更具体的技术信息方面，
在普通的JavaScript开发可以是一个有点痛苦的，
所以有一些库和工具，这将有助于你一个不少。
我想你们都可能听说过jQuery的，这使得做的HTML渲染
和操纵方便很多 - 有很多花哨的功能淡入淡出，
和做比比动画。
还有这个库称为Underscore.js。
它有很多有用的实用功能，的东西，你会期望JavaScript才能有
它真的doesn't - 比如洗牌数组，
从列表中删除重复项，或压扁列表的列表。
这只是一个小的代码示例。
底线有一吨，你希望你把所有的时间这些漂亮的功能。
>> 再有就是1，我想花一点点时间对多个库
所谓Backbone.js因为骨干确实能帮助你处理在客户端模式
和很多的混乱，它可引起。
骨干网为您提供的模型和集合这个概念
在JavaScript中它们基本上完全一样的JavaScript对象
在JavaScript数组，但他们有，当你改变它们的属性事件。
就像在JavaScript中，你可以有一个事件，当按钮被点击或某事
这些骨干模型和骨干的集合将广播之类的东西
当他们改变。
这意味着，你可以只写这样的事情代码片段在这里 -
这表示，当你添加任何职位阵列您重绘整个墙面。
这可以说只要喜欢的文章的数量变化，
你通知有人喜欢他们贴的用户。
或当某一职位的任何属性更改您重绘后。
这样的东西，将节省您万吨的复杂性，因为否则
如果你不那么每一个在你的代码时，你改变有这样一些框架
关于后事情，你必须要记得自己叫所有的渲染功能
之类的东西，如果你想添加新的东西发生
每次你修改后的时间，你就必须要经过你的每一个地方
您修改了帖子，并添加新的东西的代码。
像这样的框架将免去很多的层之间的通信
使你的代码复杂和难以维护。
>> 有大约看法也一点点。
我要离开这个最给比利，因为他们在技术上并不十分困难。
使用jQuery你的看法。这几乎就像一个必要在这一点上。
它只是让一切变得更轻松。
有很多的库。
如果你有复杂的用户界面元素，
如果你想要一个自动完成的事情还是喜欢那些花哨的多选择之一 -
如果你想这样的事情，你应该只是围绕搜索
你可以找到一个好的图书馆，会做你想要的。
比利将更多地解释的意见，实际上是困难的部分。
此外，作为一个侧面说明，骨干具有使意见交流一些功能
很好地与模型 - 看看所有这些库的文档，其实。
试想一下，在文档。他们是写得很好，易于遵循。
一般情况下，你可以非常简单，只是谷歌，如果你有问题。
有很多人使用它们。
我觉得这是作为一个最后要注意的。
>> 也有一些更高级的东西，你可以做
如果你正在寻找让你的web应用程序的额外真棒。
你可以这样做 - 新的HTML5规范有很多花哨的东西，你可以做。
本地存储 - 这是你可以在浏览器中存储的数据 -
而不必回去细读服务器的一切，
你可以保留一些它的客户端，甚至让人们 -
在某些情况下，它甚至可以让你使用网页离线。
有这个东西叫的WebSockets这是一个不同类型的网络通信
在那里，而不是只是你做一个请求，你会得到响应就大功告成了，
你一直打开到服务器的连接，所以你可以做这样的事情
实时更新。
所以，如果你试图做一个聊天应用程序，你可以使用的WebSockets
沟通来回，这样你就不必继续申请，
“哦，服务器，没有人给我聊一会儿吗？”每10秒什么的。
还有一个有趣的HTML5功能，您可以使它看起来像
页面的URL被改变，而无须真正重新加载它。
您可以使用前进和后退按钮没有做一堆的网络请求。
这样的东西是使其迅速方面确实有用，而且工作就像一个web应用程序应该。
>> 还有这个东西叫做CoffeeScript的。
CoffeeScript的是不同的语言，其实，那编译为JavaScript。
你会写所有的代码在CoffeeScript中，然后运行这个编译器，
和它吐出一个JavaScript文件，您可以在您的网页。
究其原因，CoffeeScript的是好的，因为它摆脱了很多的
奇怪的案件JavaScript有哪里等于平等，
和等于等于做不同的事情，还是喜欢 -
它用于处理数组和功能更好的语法。
这是CoffeeScript中的一个小片段，产生所有的方块的列表
从10 ^ 2〜1 ^ 2以相反的顺序。
正如你所看到的，CoffeeScript的往往可以让你在1线表现
什么将采取5行JavaScript。
它可以使事情变得更加简单。
它是新的语法一点点学习在第一，
但它肯定会让你从长远来看更富有成效。
>> 您也可以使用其他语言在服务器上比PHP -
语言如Ruby，Python或甚至还有所谓的node.js项目
，可以让你使用JavaScript在服务器上。
就个人而言，我真的，真的很讨厌的PHP。
我只是不喜欢和它一起工作。
如果你也认为这是一种语言的一个可怕的cluge，
那么你可以使用其中的一个来代替。
一般来说，如果你想要做的东西，你真的不知道你会怎么办呢，
刚刚在网上搜索。
还有成吨的资源，特别是对 -
StackOverflow的是一个伟大的。
它的这个网站，程序员互相提问。
您可能遇到了它，如果你正在对CS50习题麻烦。
并有做几乎任何你想万吨库。
如果你想要做的东西，你不知道如何做到这一点，
不要以为这是不可能的。
只要看看周围，你可能会发现一些好的资源。
>> 作为一般的包，
主要的外卖是让事情变得简单。
更复杂的代码是在一开始
你尝试做花哨的东西越多，
的时间越长得到的东西实际上是功能性
并就越难将在以后更改。
因此，首先要做的事情是喑哑的，简单的方法。
一起去的，
不要害怕扔掉旧代码或清洁了很多。
一般来说，一旦你真正拥有的东西的工作，
它更容易去思考比当你还处于起步阶段
的我怎么把这一切放在一起。
这是最好使的作品最愚蠢的可能的设计
然后反复比试图让一切都在第一时间进行改进。
在客户端 - 服务器事业部方面，尽量保持你的服务器非常简单 -
只是一个数据库和一些认证和不做有什么艰苦的工作。
在浏览器中做所有的复杂的东西在客户端
在JavaScript中一样，你可以。
环顾四周，使您的生活更美好库。
总是最好使用代码，别人写
如果你 - 而不是你自己写吧。
有很多东西在互联网上。谷歌是你最好的朋友。
谷歌是程序员最好的朋友。
是啊，绝对不要害怕到处寻找的东西。
好的。及以上比利。
>> [比利]其实，在我开始与一些设计的东西，
没有任何人有任何任何事情，他谈到了问题的本？
好了，好。
再次，让我们知道，如果有什么不清楚
或者如果您希望我们走过去的东西多一点。
我要退一步了一下，说说设计的更为根本的部分。
奔提到所谓的模型 - 对不起，模型视图控制器系统
这是有点技术方面，所以我要看看具体的意见，
和我要开始你如何设计一个视图，看起来不错。
下面是一种对我们的猫Facebook上的真正的基本模板。
我认为有现代的UI设计中的一些基础知识
这是值得回升。
你可以看到有大量的白色空间在整个页面，
足够的空间的东西。
不要觉得你必须压扁东西放到一个页面。
你要离开大量的空间打开，如果你去到几乎任何现代的网站
你会看到有白色无处不在。
有白色的，你不会想到的地方。
你有这样的调色板，它是明智的开头
选择一个调色板，你打算使用和发展。
您也 - 它有助于选择字体，和排序的方式，您正在使用
设计这些具体的基本面。
你有你的类型，你有你的颜色，然后你可以种
根据需要在适应一切。
所以，正如我所说，你的配色方案你想用你的配色方案的大胆色彩
节制。头是不错的。按钮是好的，有非常大的，浮华的色彩。
但在一般情况下，如果你有一个网站，有色彩无处不在，
在脸上都盯着你，它只是看起来杂乱，而且它没有好。
你想一般采用浅色。
尝试，再挑一个漂亮连贯的配色方案。
你可以有很多颜色的这些小飞溅 -
可以看起来很不错，但你想使用它们相当谨慎。
>> 正如我所说的，你想成为最小。少即是几乎总是更。
如果你能显示东西或不显示的东西，
和你有点不确定是否应该存在默认情况下 -
可能是你最好离开它了。你总是可以在以后添加它。
是啊，让事情变得简单。
但最重要的，你要考虑多个设计。
不要以为，当你犯了一个网站，你必须在你的头，你要
使网站以某种方式，并且它要看起来完全是这样的。
这将有顶部的蓝色边栏上的蓝色标题和
然后将黄色的子报头的事情。
你想多个模板。
您可以 - 如果你有好的照相馆，您可以打开排序，高达和
设计一个网站，只要你喜欢它的样子。
如果没有，你可以只使用笔和纸，
但划伤了多种设计。
你想基本上有一个设置，你有很多不同的设计，
而如果一个人结束了工作，那么这是伟大的。
如果最终失败，那么你总是有一个又一个转向。
一般情况下，不要觉得你应受限制
到任何设计您最初决定。
设计是非常可变的，并且该模型的重要性部
控制器查看系统是可以进出交换你想要不同的看法。
你可以挥洒的数据的一种方法，然后再决定，呵呵，其实，不工作的很好。
我认为这是一种过于复杂或有这里的一部分，这不是真正的工作，
所以我只是要完全放弃这一观点，并交换在一个完全新的。
我们仍然可以使用老款车型和老的控制器。
我们可以在服务器和客户端因为我们之前做的一切。
而是将数据作为显示的实际波将是稍微不同的。
>> 至于实际执行你想要的设计，
一旦你有几个设计勾勒出在纸上或照相馆或什么的，
还有一些被提供给您的工具。
第一个你非常熟悉的是你的HTML，PHP或任何
你只用代码来在您的网站的静态页面的语言。
你用HTML那种，让你这些标签的工作很多
你可以把东西放进了，基本上它是组织内容的方式。
例如，你有头那里，所以你将有一个标题标签，
而这将有它内部的一些文字这可能是要在另一个标记。
那么你有一个侧边栏，也许有一些不同的环节，
和那些将要放在不同的标签。
所以，基本上HTML在它的心脏是瓜分页面的方式如何
你最终想要格式化。
如此反复，你以前见过的。
你很舒服的现在与它一起工作
因为你希望做最后的PSET，
所以应该是没有问题的。
>> 那么你有CSS基本上可以处理所有的设计静态方面。
它会处理所有的颜色，所有不同元素的定位，
在那里它们相对于彼此去，
他们有多大，不同类型，你就必须定位运动的 -
换句话说，你就可以有固定的东西，这样当你向下滚动，他们留下来，
或者你可以有相对于其他元素的东西。
所有那类东西是在CSS中。
此外，你可以做不同的装饰，你可以有文字的颜色，
文字特效，所有的那种东西的。
奔上了这最后一个周末一个很好的研讨会上，
所以我一定会检查出来，如果​​你打算做一些花哨的东西用CSS。
CSS3实际上是对CSS的最新版本，它可以做各种各样的非常好的事情。
它可以做渐变，你可以有不错的，圆润的边角，你可以做各种各样的东西
为使您的网站看起来更加现代和花哨。
>> 下一个工具是JavaScript和jQuery的这本谈了一点关于，
但我会得到一点点远成。
JavaScript的，因为你已经用它在课堂上的工作一点点，或者至少看到它，
是一种动态的东西做以HT​​ML的方式。
HTML，如你所知，是静态的，所以一旦你有你的HTML不能修改它。
但JavaScript，在某些方面，是一种能够修改HTML。
所以，你可以这样做，这是伟大的，而JavaScript真的是一个痛苦的工作。
它是如此漫长而钝，并做哪怕是最简单的事情
需要大量的JavaScript的线条。
因此，jQuery是一个基本上JavaScript库，它简化了这一切。
它说，好吧，如果你想有一个方盒子来自左
而淡出人们的页面，以便它在中间，在JavaScript中，将采取 -
我不知道，百行做的，这将是一个痛苦，
和你出来了憎恨一切关于网络编程的。
JQuery的你基本上有元素点淡入，或者类似的东西。
所以，非常，非常简单的功能，可以让你做各种很酷的动画
和那种事。
另一件事，这两个都是非常好的，只是在做动态的东西
与该网站。
因此，而不是仅仅有你的HTML页面 - 它显示了一些数据，但实际上并不
做任何事情 - JavaScript和jQuery将让你有按钮，您可以点击，
你可以拖动的元素和重新排序它们，对它们进行排序，并且有新的元素
添加或删除。您可以添加，删除，诸如此类的事情。
因此，jQuery也吨很酷的事情。
和Vipul保持今天实际上是给它一个研讨会上，我相信，在5点钟，
所以如果你能坚持围绕这么久，那会 - 5或4？
四。抱歉。它实际上是右后这一点，所以我会建议
坚持围绕它，如果你能。
jQuery是超级，超级有用，你就可以做很多非常好的事情吧
对于几乎任何Web开发项目。
>> 现在，我要进入怎样的一个区别。
我一直在谈论基本上是关于用户界面。
用户界面是网站的仅仅是设计。
但有几分另一个概念，它是用户体验。
两者有很大的不同。
接口是绝对的经验的一部分。
换句话说，当你去一个网站，你看看接口。
这就是你如何体验的网站的一部分。
但用户体验不止于此。
用户体验是什么，用户会从你的网站的印象。
所以，很显然，接口是其中的一部分。
它绝对是一个必要组成部分，但它不是足够。
换句话说，如果你有一个漂亮的界面，它的漂亮，丰富多彩，所有这一切，
这是伟大的，但如果用户进入你的网站，看到一个漂亮的布局，它的困惑
一切，不知道如何做任何事情，那么显然你已经有了一个真正
可怜的网站。
这就是那种地方的用户体验的用武之地。
我要谈谈UX设计 - UX是短的用户体验 -
善良的你如何能确保你有一个良好的用户体验。
第一点是，你可以设计一个网站，用户可以做任何事情，
该用户可能想要的。
但是，如果用户无法弄清楚如何做的那些事 -
换句话说，如果用户没有一个好主意，当他们去到你的网站，
“哦，如果我想更新我的个人资料，然后我点击这个按钮，或者如果我想张贴上
人的涂鸦墙上，然后我去他们的墙，点击一个小盒子。“
如果用户不知道，那么你有效地并没有真正
正确实现该功能。
实现的功能之一是，用户实际上能够使用它。
它可能是令人沮丧的 - 你可能会做一个网站，它可以做各种
奇妙的事情，但随后你就会有人们对其进行测试，并说，“这不可能做到这一点。
为什么不能这样做呢？“，你会说还给他们，
“嗯，这可以。你只需要进入第七下拉菜单上的这种模糊的
只有通过在底部右下角“或类似的链接找到页面。
很明显，你不希望出现这种情况。
你希望它是明确的，以你的用户什么他们应该做的，
它应该是简单而直观的他们。
>> 要尝试做另一件事是，如果有人的会去你的网站
和9个10倍做动作A和1出10倍做动作B，
你可能想集中行动A.经验
换句话说，你想它非常，非常清楚该怎么做A。
A应前端和中心 - 去到现场，看到了吧，哦，它就在那里。
而乙显然，你想清楚，但你可以让它多一点
在背景中。
大卫给出了一个很好的例子在讲座中，
这是波士顿T系统的。
当你去到波士顿T和你想要买一张票，
你必须进入5个菜单，然后才能真正购买车票
为2美元，二元五角的价值，这是多大的才能乘坐地铁
在一个方向上。
这是一个问题，因为大多数人谁是乘坐地铁
可能只是想去一个地方，购买他们的票，得到的时候了。
它没有任何意义，他们必须经历许多不同的菜单
到那里。
更好的用户体验将是第一个页面上的快捷按钮
这只是说，'买了单程票，“那将使所有的标准
默认值，然后如果有人想购买不同的车票比，
他们还在，当然，可以选择，但你已经优化
共同使用的情况下，这是非常重要的。
你可以看到这样的例子在Facebook上，对不对？
如果你去Facebook和要发布一个状态，
它的右侧上方，而这正是你经常想做的事情。
只要您进入的页面，你可以做的最常见的事情，
你想做的事情。
如果你想要做这样稍微复杂的事情，
说我想要去我朋友的墙上，张贴图片就可以了 -
我想要做的时候，但不是经常张贴状态更新 -
所以在这种情况下，我输入他们的名字在箱体顶部，点击他们的个人资料，
然后，尽管如此，它的右侧上方有一次，我已经得到了他们的个人资料。
再次，我已经优化的优先级为最常见的使用案例。
>> 另一个重要的事情是有点，往往人们会尝试解决这个问题
说，好吧，所以我做了该网站，人们发现它令人困惑，
，这是一个问题，对不对？
很显然，我不希望人们通过我的网站的内容所迷惑。
但要解决的方式是不是有东西弹出说，
哎，我要教你如何使用这个网站。
步骤1 - 单击此按钮。第2步 - 去这里。
当然，这是变通的办法 - 这是一种方式，你可以告诉人们应该做些什么，但它的
真的不是最佳的方式。
如果我去一个网站，突然间我催要本教程是在告诉我，
做什么和去哪里，这一切，那不是好玩的了。
这不是我的一个很好的经验。
这是一种痛苦。我想刚开始做的东西。
人们会收了他们的对话方块中，
或走出教程，不知道该怎么做，然后抱怨，因为
你还没有告诉他们该怎么做。
解决这个问题的方法是不给予任何形式的教程或方向 -
类似的事情。
就像你能避免它，你真的想向用户显示该怎么办
刚刚通过了如何在网站的布局的性质。
换句话说，如果我去给Facebook没有登录，
我的主网页上看到的第一件事情 -
这是一个有点登录框。所以，真不错。我需要登陆。它就在那里。
然而，如果我去到Facebook，我不得不单击底部一点点链接
那个说'登录'和页面的其余部分只是一些图片什么的，
我真的不知道该怎么做了吧？我会被混淆。
因此，它可以告诉我去那里，然后单击按钮进行登录，
或者在日志中键可以在那里我会看到它的顶部是正确的。
你要始终显示用户做什么，
这应该是固有的页本身。
>> 当你正在考虑设计和嘲讽了不同的方式
表达你的网站，你真的要想想什么样的用户会
做以及如何告诉他们该怎么做。
最后一件事就是测试是真的，真的很重要。
这是伟大的找人 - 找个朋友，找人你不知道，即使 -
谁是从未见过的站点之前使用该网站。
因为你已经在现场工作了几个小时，你一直盯着它，
你确切地知道这样做很明显你将要测试
事情，你一直都在，你知道的工作。
但如果别人走来，并使用该以前从未使用过该网站，
这是一种独特的体验，因为你有别人谁没有先验知识
该网站进入，所以他们将有有效地不知道该怎么做的
或者什么样的用例都存在他们。
这是伟大的。这是独一无二的，因为它们基本上是一个人与一个空白的头脑。
他们可以告诉你，如果事情是混乱或不清晰。
他们可以给你的正是你的网站的用户体验是一个想法。
它可以是非常困难告诉自己，所以我肯定会鼓励你
为您开发的项目 - 如果你正在做的基于Web的项目 -
早在你有某种功能的演示使用该网站得到的人。
>> 现在，我要谈谈如何管理一个Web开发项目一点点。
我们已经讨论了如何才能做到的技术后端侧，
如何设计一个非常好的网站，
这就是伟大的，如果你自己的工作，但 -
即使你通过自己的工作，特别是如果你在一个团队工作，
项目管理成为一个大问题。
那种你既然听说过项目管理的不同形式
小学的时候你被告知小组的工作。
你必须合作，沟通，所有这一切。
这一切都仍然适用在这里，但也有一些特殊情况
要知道，你要确保你处理好计算机科学。
我先谈一点关于球队，你会是英寸
这是非常重要的，选择一个团队进行工作的大小合适，
并在最终的项目，我认为你必须选择的选项
如果我是正确的1至4人。
你要确保你不只是选择的人数
您要使用，因为他们是你的朋友合作。
你要选择一个团队，是一个很好的大小，这将完成这项工作。
有一个权衡中有更多的人与较少的人。
如果您有更多的人，显然更多的工作可以做
因为你有很多的人，大量的代码，很多想法，
这就是所有伟大。
但它也需要更多的管理和更大量的沟通。
换句话说，如果你有4人工作在同一个项目
而且他们都编辑了相同的代码，或多或少都种需要知道的
这是怎么回事，因此需要你 -
排序的，如果你添加了一些新的功能，你必须告诉人们 - I'm加入此，
我改变了这种以这种方式 - 特别是如果你进入非常深的东西
像模型和控制器，实际上将影响该网站如何工作的。
整个团队需要意识到这一点，
所以你需要确保你不选择太大的球队，那将是很难
让沟通。
你也不想选择一个足够小的团队，你不会
能够沟通，​​因为它只是你。
>> 另一个要考虑的是，人们的技能的平衡。
这是伟大的，如果你真的所有优秀的程序员。
但如果你是所有后端的人，那么你的网站是不会很好看
因为你有这个伟大的数据库，而且它超快的搜索查询 -
这是伟大的 - 但是当你去到它，它就像1990年的网站用红色和蓝色
无处不在，而这也不行。
请注意，Ben和我的工作作为一个团队是非常好的，因为我是那种更
在前端，我们无论是在中端交互，和本真的很好用后端的东西，
使作品真的很好，因为我们可以设计任何网站，基本上孔
该站点需要被填补可以通过任何一个人来说，也可能两者填补。
你要确保有在你的团队没有漏洞。
没关系，如果有一点重叠。
换句话说，如果你有2人是既具有良好的后端，
这可以很好的为好，因为他们可以互相帮助与问题
他们是有。
它可以是一个问题，如果你只有1人谁负责某一件事
他们碰到的一个问题，所以你希望有重叠一点点
但你最重要的是要确保所有可能的孔被填充。
>> 最后一件事 - 这应该是显而易见的，但它往往并非如此。
你真的想要获得乐趣。
在CS50这最后的项目点和网络的发展往往是在一般的点
是不是只是做一个工作，因为它需要做的事情。
你真的想要获得乐趣，并且你想成为使一些
这是激励你的工作就可以了。
如果无论你正在做的是一件痛苦的坐下来工作，
那么你就不能选择合适的项目。
你要选择一个你觉得有趣的东西，
你真的想看到的结果，你很高兴，当你得到关于一个新的想法
一些你可以做的 - 所以有各种各样的项目有，我敢肯定，
你可以找到 - 每个人都有的东西，真的会他们的阴谋
如果他们正在做一个基于Web的项目。
我再说一遍，现在。
如果你的项目似乎是一个痛苦，你不想要工作就可以了，
选择其他项目。选择一些真正激励你。
>> 本提到迭代有点这个概念，我想通过它去了一下。
这真的很重要，你得到的东西喷功能的工作。
它可以是伟大的，如果你有这样的计划，一个网站，会做A，B和C，
并最终会到达那里。
但你停留在这个阶段，你正在使用它，处理它，
但什么也没有得到实现。你没有什么可看，有形的，功能性的东西。
你真的想要，因为它似乎一种痛苦有时做尽可能多的什么
对一些工作，然后有点糟糕的是关闭，因此它至少在一个稳定的，运行
版本即使没有你想要的所有功能。
也许有一些功能，你真的想加入，但你就是不能
因为你想要得到这个网站的功能点。
所以你想要那种把整个开发过程看起来像他一样。
你想从某个地方开始功能 - 或者根本就什么也没有 -
但你想要得到的地方非常基本的和功能。
然后再次，做一个排序跳，再次得到的地方发挥作用。
你会慢慢建立起来，它可能会去会比其他慢一点，
但是从长远来看，如果你经常停留在这个中间地带阶段，你
实际上没有任何工作，它可以是一个真正的大挫折
在你的项目中工作，因为你总是如此接近得到它的工作，
而且它从来没有真正的工作。
你想在这些功能苗头工作，
而你也希望每个人以后做一些反思。
换句话说，一旦你在一个点，该网站是现在的工作 -
它没有你喜欢的一切，但它做一些事情 -
你要想想，还好，就是这个网站办成，我所要做的目标是什么？
换句话说，如果该网站将做X，是我在X方向有工作？
都是，我想那里的功能呢？
，而且，它是服务，我想整体的目的是什么？
如果你发现你的网站已开始在不同的方向来改变方向
也许事情就有种不工作了，它可能是时间换挡一点点。
换句话说，这是值得考虑 - 这是值得扔出去的想法，如果有必要
并考虑我真的努力争取我想要的。
>> 我相信这是我的下一点。不要害怕放弃的想法。
仅仅因为你花了很多时间工作的一个特点
终于得到了它的工作，但它确实是不会这么好 -
就像是没有多大用处的，或用户正在使用它遇到了麻烦 - 诸如此类的事情 -
不要害怕把它扔掉。
它吮吸你已经花了很多时间工作就可以了，
但最终你不想要一个网站那种的放在一起，这些片段，
这类工作，但都不是很好的服务。
另外，不要害怕接受新的想法。
如果有人走来，说，哎，该网站看起来真的很酷，但
那岂不是即使是伟大的，如果它也这样做？
只是因为这件事情，你不打算和东西是不是在你的
规格，东西，你有没有下决心做，
不要害怕把它，然后使用它。
因为往往你在整个发展过程中运行思路
最终成为该网站的很酷的功能。
>> 我之前已经说过了这一点。我再说一遍。
测试人员是超级，超级有用。
试图让人们谁从未见过的网站之前登录并查看发生了什么事情
因为他们不仅可以测试网站和用户体验的实用性，
但他们也可以的方式，你不能测试功能。
如果你做了一些功能，做某一件事
你知道它会做正确的事情一样，每一次，这是伟大的。
但它往往很难占到角落情况下，一个用户可能
因为你准确的界定 - 键入的东西，你没有想到
自己的特点。
所以，有一个人过来对谁没有知道如何使用该网站
而刚刚打破它以任何方式，他们可以做的是真正有用的，因为你
从您的网站什么是工作的一个完全不同的角度得到一个想法
什么需要修理。
>> 最后，我要谈的一些好的做法，
你已经看到了很多这些在CS50，但他们也非常非常适用于项目的设置。
一个是注释。总是特别注释你的代码，如果你正在做一个大的团队。
它可以是那么讨厌，只是有一个代码块巨大的，有人是写
也许奏效，也许没有，但你不知道它做什么，
所以你不知道它是否有用与否，或是否应该存在与否，
如果你工作在别的东西，你的工作就它甚至有可能
同样的事情，所以只是非常，非常小心，要体谅你的同伴
和写代码，是有据可查的。
你不必跑那么远的做，如果你增加地方喜欢整个事情
计数器有一个评论，说，我添加1到这个计数器。
这并不一定是因为详细，但对于你曾经编写任何功能
你应该有一个什么样的功能究竟做了一些文档，
什么它的输入，以及它应该返回。
这样，你可以使用该网站的其他人的组件
你可以朝着建设事大工作。
>> 另一个重要的事情是你想要做定期清除。
代码就会变得混乱。不要难过，如果你的代码仅仅是完全不可读和一个巨大的烂摊子。
这种情况发生在web开发中始终。
你添加新的功能，删除旧的。东西是要在那里不应该。
这很好，但你要确保处理定期。
你不想让它建立到这种地步，你就不能发现什么
在你的代码，而你不知道是什么东西呢。
这是用HTML的情况。
有时，你会最终与不​​包含任何对象，
你会想摆脱那些。
在CSS中，你可以指的是不存在了的元素，
所以你想摆脱的代码。
在JavaScript中，你可能已经删除从HTML的东西。
所以，你要确保你总是清理，使美丽的东西
就像你可以定期。
>> 我不认为另一个非常有用的东西概述十分CS50
但它是值得进入的是版本控制。
版本控制的想法是，当你基本上保持跟踪所有的进展
你做对您的网站，如果在任何时候你意识到，哦，这是工作
前一段时间，但它不工作的更多，你可以回到以前的版本
看看从那时起，诸如此类的事情发生了什么变化。
主要的办法做到这一点是使用Git，以及Git是这整个种类的系统来
我相信汤米MacWilliam了一个关于去年的研讨会。
如果你去到CS50研讨会于2011年，你可以看到他的研讨会上说。
混帐的想法基本上是每隔一段时间你正在做这些承诺
这是说该网站是在一个相当稳定的版本，现在这样的方式
我把它包装起来并把它发送到了服务器，那么你可以去到该服务器
看看你的代码之前的所有版本，看看它是如何进展
和所有诸如此类的好东西。
所以，这是基本的。
至于网络的发展，我们很高兴留下来，回答任何
的问题，据我们的介绍。
就是这样。谢谢。 >> [奔]谢谢。
[鼓掌]
>> [比利]工作人员，有没有人想过这事我们已经讨论的事情有任何疑问
或者说我们还没有涉及，他们希望事情我们会覆盖？
我们很乐意回答这些。任何人吗？
[听众]什么是使用Ruby或使用Python的利弊？
[奔]现在的问题是，什么是使用Ruby或Python的利弊
而不是像PHP。
优点是Ruby和Python是比PHP更好的语言。
至少在我看来，我想了很多别人的意见为好。
他们的目的多用于做复杂的东西，
少的重击在一起网页真的很快与
动态内容一点点。
的缺点是有一点点 - 有更多的学习曲线
，让他们建立起来。
也就是说，想在PHP中，你可以有一个HTML文件，你写的小于，
问号，然后写一些代码，然后你写的问号，
大于号，然后就大功告成了。
在其他语言如Ruby或Python，
你必须要经过更多的工作来获取初始站点运行。
还有 - 至少它曾经是如此 - 那还有更多的文档
可用于PHP的，只是因为有使用它更多的人。
我认为这不是太大的问题了。
有肯定是非常好的文档东西像Ruby on Rails的
或者Django对于Python是等价的。
PHP是每个人都已经使用了多年的一个，你知道它是如何工作的。
Ruby和Python都有点不太成熟。
>> [听众]如果你是其中之一之间进行选择学习或回暖，
你会选哪个？
老实说，我认为取决于人。
对不起。现在的问题是这会你挑人来学习呢？
我发现Python的个人的最好。
有很多人谁 - 我做了Python和Django的我的第一个web开发项目。
有很多人谁喜欢的Ruby on Rails也。
或许更多的人谁on Rails的了解Ruby。
老实说，我只想去任何你周围的人都知道
这样你才有人来问问题。
>> 现在的问题是 - 在共享服务器上是种很难工作的Python呢？
这取决于您的主机。
有许多网络主机，将发布Python的东西。
WebFaction这样做，对吗？
WebFaction是一个比利和我已经用于一些项目。
他们是真正伟大的。它们支持大多数语言。
但它是真实的，PHP是更广泛的支持。
所以，如果你坚持一个虚拟主机，只做对的PHP，这是使用PHP一个很好的理由。
>> [听众]我刚坐进学习如何查询一些数据库，
我知道我的SQL是所有的地方，但是我最近得到了暴露 -
你指了出来。你看，JSON和可扩展数据库。
我的SQL仍然是所有的地方。你怎么看这种事情发生？
是否有将要为更多的扩展（听不清）成为增长的趋势？
现在的问题是 - 我觉得有将是对非SQL数据库的趋势。
举例来说，像MongoDB的。我认为这是绝对真实的。
我的建议是在这里大多是MySQL相关，只是因为MySQL是
行业标准。
就个人而言，我更喜欢那些没有像MongoDB的schemos数据库
在那里你没有问题，呵呵，我需要添加另一列。
祸是我，就像不管我该怎么做？
这是很难做到这一点的MySQL，但是当你有像蒙戈
它更漂亮。
关于蒙戈的其他好处是，你的记录实际上是JavaScript对象。
有没有排序的转换步骤，你需要把这些数据库中的行
并把他们变成一个JavaScript对象，然后将它们发送过来的电线。
我觉得这样的东西将是非常，非常有用的快速Web开发的未来。
>> [比利]东西我想补充这仅仅是一个普遍的观点是，
不要觉得你应该已经学会了所有我们已经讨论过的语言
从我们的研讨会。
很显然的一点是给你一个什么样的在那里一个想法，
如果你被任何我们已经提到的东西很感兴趣你可以Google他们
并在他们读了。
正如我所提到的，还有一些处理正是这些东西了几个研讨会。
还有，我没有提到，可能进入更加研讨会
这个东西也是如此。
我们的想法是，如果你要处理的东西，这里是在您的处置工具。
如果你真的不知道什么这些工具做完全不觉得不堪重负，
但要知道，他们是在那里，你可以使他们的广泛使用
由谷歌。
>> [听众]你需要什么样的事情要做，以确保您的网站
在移动设备上看起来不错？
[比利]移动设备是有点硬。
有2种方式可以接近它。
第一种方式是，你实际上有一个移动网站。
换句话说，就在开始时执行某种检测
当浏览器发出请求到您的网站，或者说
返回这个观点 - 这将是该视图的台式机或笔记本电脑的浏览器 -
这另一种观点适用于移动设备。
这是一个地方的意见是非常好的在您几乎可以互换的
两头在外，并有作品真的很好地在移动设备上的接口
并有一个完全不同的一个很好地工作在浏览器中的设备。
与该问题是它需要很长的时间，因为这意味着编码
一个完全不同的接口。
你可以做到这一点的另一种方式是 -
很多现代的手机将显示网站和尝试，使它们像浏览器那样，
和他们做最好的自己。
有种你可以尽量留在光的jQuery的JavaScript您使用的金额
这往往是那里的东西可以去错了一点点。
这是那种你应该使用，如果你没有那么多时间的方式。
如果你有工作，在移动界面上的时间，这显然是最好的选择。
>> 我觉得一般的CS50项目，你会希望选择一个或另一个。
换句话说，你想使一个移动应用程序或者你想在桌面网站。
排序并决定你要去哪里这一点。
但是，如果你想在以后展开了，可能是你最好的赌注是
作为其他的另一个接口。
我的WordPress的开发为基础的网站的一点点经验。
我托管在WordPress的个人网站一段时间。
这些类型的框架可能是好的，就像很基本的东西。
通常情况下你会正好碰上了很多定制性的问题虽然。
你想拥有的东西看起来某种方式或一定的方式
你只是不能因为它是硬连接到系统中
你这是怎么要做的事情，可能是有点问题的。
那种从那时起我一直更倾向于从地上爬起来地盘工作。
的事情，比如博客数据库和诸如此类的事情它真的不是那么难建立一个框架。
如果你真的对捉襟见肘的时候，你当然可以使用像WordPress的
或者诸如此类的事情一个博客。
这样的东西，博客存储和做是不是真的够硬的
如果你运行任何这些类型的东西，你可能最好只是为了
做一个内部版本。
>> 我认为这是它，所以再次感谢您的到来。
我们非常喜欢你说话的家伙，希望你学到了一些东西。
[奔]我们很乐于交谈 - 我们必须去，但我们很乐意多谈外
如果你有另外一个问题。再次感谢。 [鼓掌]
[CS50.TV]