Process 从问题传递到代码的过程。你是怎么学的?
我在教/帮助一个学生编程 我记得当我开始的时候,下面的过程总是帮助我;这看起来很直观,我想知道是否有其他人也有类似的方法Process 从问题传递到代码的过程。你是怎么学的?,process,Process,我在教/帮助一个学生编程 我记得当我开始的时候,下面的过程总是帮助我;这看起来很直观,我想知道是否有其他人也有类似的方法 阅读问题并理解它(当然) 确定可能的“功能”和变量 写下我将如何一步一步地做(算法) 把它翻译成代码,如果有你不能做的事情,创建一个函数为你做,并继续前进 随着时间和实践,我似乎已经忘记了从问题描述到编码解决方案是多么困难,但通过应用这种方法,我成功地学会了如何编程 因此,对于以下项目描述: 系统必须根据以下规则(规则说明……客户、折扣、可用性等)计算物品的价格 我的第一步是
function getPrice( itemPrice, quantity , clientAge, hourOfDay ) : int
if( hourOfDay > 18 ) then
discount = 5%
if( quantity > 10 ) then
discount = 5%
if( clientAge > 60 or < 18 ) then
discount = 5%
return item_price - discounts...
end
你采取了类似的方法吗?。。是否有人教过你类似的方法,或者你发现了自己(正如我所做的:()我做了类似的事情
- 找出规则/逻辑
- 算出数学
- 然后试着编写代码
在这样做了几个月后,它就被内在化了。直到你遇到一个复杂的问题,需要你去解决它,你才意识到你在这样做。一厢情愿可能是解决复杂问题的最重要的工具。当有疑问时,假设存在一个函数来解决你的问题(首先创建一个存根)。稍后您将返回到它进行扩展。我采用测试驱动的方法 1.我写下(在纸上或纯文本编辑器上)满足问题需求的测试或规范列表。 2.寻找我认为最容易实现的项目,并为其编写测试。例如,单个项目看起来很容易 使用Nunit和C#创建样本 通过以下方式实现该目标:
public decimal GetPrice(decimal amount, int quantity)
{
return amount * quantity; // easy!
}
然后转到这两个项目
[Test]
public void TwoItemsItems()
{
Assert.AreEqual(10, GetPrice(5, 2));
}
该实现仍然通过了测试,因此继续进行下一个测试
3.始终注意重复并删除它。当所有测试都通过时,您就完成了,您再也无法考虑任何测试。
这并不能保证你会创造出最有效的算法,但只要你知道测试的内容并且全部通过,它就能保证你得到正确的答案。请记住,如果你得到5%的折扣,那么再获得5%的折扣,你就不会得到10%的折扣。相反,你支付95%的95%,即90.25%或9.75%的折扣。因此,你应该无法添加百分比。对于寻找流程的初学者来说,这是一本好书:是的。TDD在我开始的时候并不存在(或者不是很流行)。TDD会是从问题描述到代码的途径吗?…这不是有点先进吗?我的意思是,当“未来”来临时开发人员很难理解什么是编程语言,这会不会适得其反 hamcrest如何从算法过渡到代码。传统的OO方式:
- 写下问题及其解决方案的描述
- 圈出名词,这些是候选对象
- 在动词周围画方框,这些是候选消息
- 将动词与“做”动作的名词分组;列出需要帮助的任何其他名词
- 看看你是否能用名词.动词(其他名词)的形式重述解决方案
- 编码
[这种方法先于CRC卡,但它太长了(超过20年),我不记得在哪里学过它]我从顶部开始,一路向下。基本上,我将从编写高级程序开始,勾勒出其中的细节,然后开始填充细节 假设我有这个问题(来自欧拉计划) 第一组的平方和 十个自然数是,1^2+2^2+ …+10^2=385 前十位之和的平方 自然数是,(1+2++ 10) ^2=55^2=3025 因此,总和之间存在差异 前十个正方形的 自然数与平方 总和为3025385=2640 找出两个变量之和之间的差异 前一百个的正方形 自然数与平方 总数 所以我开始是这样的:
(display (- (sum-of-squares (list-to 10))
(square-of-sums (list-to 10))))
现在,在Scheme中,没有平方和、平方和或函数列表。所以下一步是构建每一个函数。在构建每一个函数时,我可能会发现我需要抽象出更多的内容。我尽量保持简单,以便每个函数只真正做一件事。当我构建一些可测试的功能时e、 我为它编写了一个单元测试。当我开始注意到一些数据的逻辑分组以及作用于它们的函数时,我可能会将其推到一个对象中。在学习编程时,我认为TDD没有帮助。以后当你对编程有了一些概念时,TDD是很好的,但对于初学者来说,有一个编写te编码并在最快的时间内查看结果是最重要的 我会立即从问题陈述到代码。对其进行破解。帮助学生了解编写软件/结构化算法的不同方式。教学生改变想法并重新编写代码。尝试教授一点代码美学 一旦他们能够破解代码……然后在重构方面引入形式化重组的思想。然后引入TDD的思想,将其作为一种使流程更加健壮的方法。但只有当他们感到能够自如地操纵代码以完成他们想要的任务时,才可以。在那个阶段,能够指定测试就更容易了。Th
public decimal GetPrice(decimal amount, int quantity)
{
return amount * quantity; // easy!
}
[Test]
public void TwoItemsItems()
{
Assert.AreEqual(10, GetPrice(5, 2));
}
(display (- (sum-of-squares (list-to 10))
(square-of-sums (list-to 10))))