如何开始学习编程?

3

当你完成了第一组需求和设计后,你要从哪里开始编程?(假设测试将按相同顺序编写,但在代码之前)。

  • 入口点
  • 框架/支持类
  • 实体类
  • 先做最简单的事情
  • 先做最难的事情

你有什么建议吗?


4
也许考虑将这个转变为社区维基。 - Stephen Wrighton
请问征求建议和进行投票之间的区别在哪里? - C. Ross
4
你认为这个问题是否可能有一个正确答案?如果不行,那就应该标记为社区wiki。 - anon
如果问题存在很长时间,它们自然会转化为维基。 没有必要过早地进行转换,对吧? - Jon Winstanley
@Neil -- 我知道你的意思,而且大多数情况下我也同意,但是...许多实际的编程问题会有不止一个正确答案。 - RolandTumble
显示剩余3条评论
16个回答

7

我从依赖链的最低层开始工作,逐渐向上构建。这样我就可以尽早编译和测试,并在此基础上不断迭代。


7

我几乎总是从用户界面开始。一旦我清楚地知道输入和输出的内容,我就更容易组织其他所有内容。


根据应用程序而定,但以UI为先的方式是确保您不会浪费大量时间编写您不需要的代码的好方法。 - erickson
2
在许多应用程序中,所有底层的东西都只是为了服务于用户界面。首先构建UI将有助于澄清信息模型和数据层的要求。 - Fredrik Mörk
我有点喜欢这个答案。我没有在我的回答中提到它,因为我大部分的工作都没有 UI,但这是一个好点。 - T.E.D.

5

我从数据结构开始(数据库表、XTD、数据字典等) 然后是数据如何进出这些结构(数据访问层) 接着是业务对象及其相关逻辑 最后是用户界面和将程序钩子附加到我的业务逻辑


5
似乎每个回答这个问题的人都给出了不同的起点。这种广泛的起点变化完美地说明了你应该真正开始的地方:无论你的理想起点在哪里。

不同的人有不同的解决问题的方法。通常项目的成功与最初采取的方法无关。花时间思考和尝试不同的重点区域,找到适合自己的方法。

编辑:在更抽象的层面上,Paul Graham的这篇文章 提供了关于一种Lisp风格的自下而上的编程方法的深入见解。


3

我认为您应该从领域模型开始。这在很大程度上将直接从您的需求中提取,并帮助您确定需要创建哪些部分。您的领域模型将驱动您的数据模型,而需求将告诉您必须对领域对象进行哪些操作。


2
这取决于你正在创建什么。我正在开发一个Windows移动应用程序,从底层开始工作,处理各种数据抽象,然后再通过GUI将其全部拼接在一起,这是一场噩梦。你不能向人们(非开发人员)展示代码并说服他们你已经完成了40%,他们需要看到某种GUI。如果我能回去重来,我会先设计出GUI。
但是当涉及到数据驱动的网站时,我会从数据开始,因为允许您操作它们的Web页面取决于知道数据的外观以及您可能如何与其交互。
顺便说一下,我对“最容易”和“最难”的事情很感兴趣,因为我认为人类的自然倾向是认为容易的事情比实际上更容易,而难的事情则比实际上更难!

2

我喜欢先草拟用户界面。

这可以更快地讨论设计和需求是否正确(即使每个人都签署了),避免浪费很多工作。但这也有些危险,因为大多数人认为用户界面是大部分工作的核心,当屏幕看起来几乎完成时却不理解为什么要花费这么长时间来完成。


2

关于易做与难做事项的优先级:

我尝试先处理那些我认为会更困难的事项。这样,如果出了什么问题,你更有可能得到并能够提前通知。此外,如果某些任务是不可实现的,你也不必浪费时间去处理一堆不再需要的小事项。

http://www.businessballs.com/rocks.htm


1
我倾向于先编写和测试支持框架类。如果不这样做,我会在编译和测试之前写太多的代码。此外,先编写它们意味着你更倾向于使它们成为完整的抽象,而不是半熟的抽象,这些抽象与使用它们的代码过于紧密耦合。如果在编写支持类时还没有编写高级别代码,则可以避免意外引入循环依赖。
话虽如此,在编写支持类时,我至少已经编写了代码片段,展示了它们在高级别代码中的使用示例。

1

在处理桌面/命令行程序时,我通常会像Ted建议的那样从依赖链(树)的顶部(根)开始,以便尽早测试和编译。然后,我逐步向下(向上)添加类和复杂性。

在处理Web应用程序时,我通常采取略有不同的方法:

  1. 我倾向于先构建一个粗略的HTML框架,以给出网站应该看起来的样子。
  2. 然后,我从最简单的功能开始(在许多情况下,这是一种类似于留言板或博客的输入/显示数据类型),其中我首先在数据库中设置一个表格,将其映射到我的数据提供程序(如果我在.Net中,则使用Entity Framework),并使网站访问数据(但还没有输入功能!)。
  3. 当页面正确获取数据时(我通过手动在数据库中放入随机内容进行测试),我开始处理本节网站的输入部分。
  4. 一旦一个部分的网站(例如留言板)完成并按照我想要的方式工作,我就转到下一个部分,并重新开始第1步。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接