我在学校和其他地方都学到,良好的开发方法在正确编码之前需要概念和设计。
即使对于初学者,这也不是一个新信息。但是,我想知道这是否是一个好的建议,因为自从我开始使用多种编程语言进行开发以来,自从开始以来就从未成功设计和构思过所有东西。
我的意思是,我总是融合设计,概念和编程。我是世界上最糟糕的开发人员,还是我们在学校学到的想法只是一种古老而毫无意义的宗教教条?
我们如何甚至可以构思和设计以前从未经历和编程的东西?是不是很荒谬?编程不是主导概念和设计吗?
我在学校和其他地方都学到,良好的开发方法在正确编码之前需要概念和设计。
即使对于初学者,这也不是一个新信息。但是,我想知道这是否是一个好的建议,因为自从我开始使用多种编程语言进行开发以来,自从开始以来就从未成功设计和构思过所有东西。
我的意思是,我总是融合设计,概念和编程。我是世界上最糟糕的开发人员,还是我们在学校学到的想法只是一种古老而毫无意义的宗教教条?
我们如何甚至可以构思和设计以前从未经历和编程的东西?是不是很荒谬?编程不是主导概念和设计吗?
Answers:
我认为答案必须是:尽可能地计划,但不能超过此。
很少有人会反对计划的优点,但辩论大多忽略了一个重要方面。计划仅在您具有制定良好计划的技能的情况下才能起作用,而该技能往往伴随经验。如果您没有太多经验,那么您草拟的任何计划都可能会遇到很多问题,这意味着,要制造出并非完全灾难的产品,必须在开发过程中对计划进行重大修订,如果计划详细,那么这可能会使许多细节无效,或者更糟的是,您将尝试将调整幅度降至最低,以便能够遵循计划。
有些事情肯定需要计划,如果您没有制定所需级别的计划的技能,那么我能想到的唯一方法就是进行原型设计,编写代码只是为了获得制定适当计划所需的任务的经验。 。
无论您是否准备好编写生产代码,一旦达到最大计划水平,除了编码就无所事事。也许这将是一场灾难,但是这些都是很好的学习经验,您将可以更好地制定修订计划。
绝对是真的。需求越大且越复杂,则越真实。
对于一个小型控制台应用程序来计算斐波那契数列,您可能不需要花几分钟的时间来思考如何构建算法和用户界面(可以,可以简单地是stdin和stdout)。
但是,一个实时交易平台希望每秒完成数百万笔交易,并且分布在全球范围内,这需要99.9999的正常运行时间和100%的正确性吗?您可以直接进行编码吗?
这两个极端之间还有许多其他选择。
看一下Euler项目。按照提出的顺序解决一些问题。您会发现,为了在合理的时间内解决某些问题,您需要在进入代码之前进行实际思考。
如果在开始编写代码之前不需要花时间思考和设计程序,那么您要么在做琐碎的事情,要么在做一些遗漏的事情。
自从一开始,我就从未成功设计和构思过一切
除了最琐碎的问题,没有人能做任何事情。同样,项目越大越复杂,它就越真实-设计将出现错误,被忽略的事物等。
首先要进行高水平的设计,看看是否适合大型作品。然后获得优先级列表-首先开始在最关键的基础架构上工作。然后,我们将较大的部分分解为较小的部分,确保每个较大的部分都由有意义的部分组成。
这需要时间和精力-在一开始可能并不完整或完全正确。
但这就是为什么它被称为软件而不是硬件的原因。它具有延展性,可以更改。
我在学校和其他地方都学到,良好的开发方法在正确编码之前需要概念和设计。
这是真的。
但是,我想知道这是否是一个好的建议,因为自从我开始使用多种编程语言进行开发以来,从一开始就从未成功设计和构思过所有东西。
还有你的问题。
对于大多数非平凡的问题,您将需要做一些思考来弄清楚事物将如何运作-事物将如何融合在一起。矛盾的是,对于大多数非平凡的问题,您将无法计划所有事情。对于您来说,太多的未知因素需要说明,开发过程中会发生太多的更改。敏捷之所以受到青睐,是因为它接受了交易的下半部分:人们不是无所不知,变革是永恒的。
因此,您确实需要提前进行设计确实是对的,但是也不可能仅提前进行设计。
原因很简单-如果您没有任何设计,就不知道自己在做什么。
原因很简单-设计将发生变化,设计的开发部分将揭示问题,机遇和挑战,而这些挑战,机遇和挑战在不着手解决方案之前就很难预料。
不管是否按计划,团队是否实现了计划,每个软件项目都是迭代完成的-部分工作已完成,然后进行评估,评估导致其余工作的完成方式发生变化。
需要实践和经验才能知道平衡前期设计与创建代码的最佳方法。这项技术几乎没有人掌握,并且每个项目都会有不同的理想(考虑设计一个供自己使用的小型工具,而不是团队创建一个大型的单发行产品(如大型视频游戏))。
我过去曾设计并强迫其他人设计多个系统,并且我看到该过程以许多不同的方式展开,但是我发现的共同点是,初始体系结构至少应规划大多数主要功能的存在。
例如,我看到的HVAC控制系统没有对建筑物,地板,房间等进行改造的概念,结果变得丑陋不堪。或由更适合您(非智能)怀表的组件构建的移动音乐设备。不用说,两种情况下的最终产品都不是客户的最爱。
当您说“概念”时,离“思想”仅一步之遥,而这个概念可能非常模糊。企业通常关心概念。客户通常关心UX-一种以易于使用和愉悦的方式实现并通过使用带来一些价值的概念。
在进行任何编程之前,您必须做“概念”操作,我无法想象自己打开Visual Studio(或您选择的IDE)并随机编写代码,看看它的去向。
在编码之前,您可能没有做一个完整的设计(并且应该这样做),但是您应该对用户的工作流程有一个大概的了解。
UX设计和编码经常会相互影响,您可能会被迫对某些最小的项目使用某种敏捷方法,以将这一事实整合到您的工作方式中。因此,如果您无法一次看到所有内容,请不要认为您是最糟糕的程序员-没有人可以,并且认为自己可以做到的人就是只忽略了足够多的问题,因此他们可以声称自己拥有完整的知识。图片。
一个将尺寸增大到一个大的示例。概念:“创建一个基于可视化云的工具,使企业可以集成其软件平台”。这听起来不错,您可以开始编写市场营销材料,然后甚至在市场上出售它们。在编码之前,您必须具有此功能。
预先设计:“具有像Visio中那样的形状和箭头来描述逻辑;具有插件功能以允许连接到各种平台(SAP,SF,数据库...);具有监视控制台,在该控制台中,用户可以搜索通过系统;具有一种直观地描述数据并将一种格式转换为另一种格式的方式。” 另一个很棒的营销话题。它还为您提供了一些重要的想法,在编码之前也应该有一个粗略的草图。
设计/代码:“使浏览器托管具有此类功能的HTML设计器;以Java编写后端代码,使其可以在任何现有服务器上运行;定义数据结构和UX以根据需要查询或修改它们;计划灾难恢复,错误报告,审核日志记录;计划版本控制;计划访问控制; ....”-列表越精细,预见所有列表就越不现实。
...但是,人们至少应该意识到最终看起来可能是什么样的东西,或者最终产品可能会以一些真正无用的实现而告终,这些实现最终会杀死原本听起来不错的概念-比如您的视觉设计师需要40英寸屏幕以显示任何实际的工作流程,或者除了限于字符串等20个字段中的一个的确切字符串匹配之外,没有其他方法可以搜索日志。除了执行您的实现之外,没有防止这种情况发生的好方法-有些会成功,有些会失败。
我总是分配如下时间:
设计:不仅视觉,而且概念。将其分为视觉和逻辑两部分。寻找可重复使用且本身就是设计模式的共性。
开发:一旦知道了零件,就可以对其进行编码。然后,您将它们集成。
测试:不仅要测试代码是否已正确集成和编写,还总是会发现洞察力和经验教训,这将创建新的交互方式,并且将构想和期望新功能。当心范围蠕变。
除了这些方面之外,请注意,项目在这些阶段的顶部还有三个阶段。
我发现您在设计阶段做得更好,可以最大程度地减少额外的尝试。除了重新做整个事情,您可能还需要重新设计一个子系统。
我是内部,外包和离岸开发项目的软件开发人员和软件开发经理。
这里有一个基本的错误假设。如果不先编写代码,您将永远无法想出一个好的设计(学校永远不会教您这一点)。但是,正确的做法是,没有设计就不会获得良好的代码。
解决方案是:
丢掉所有的代码是不是在这个过程中的可选步骤,但对于小项目正式写入了设计的可能。对于大型项目,您更有可能重复“ 扔掉所有代码 ”步骤-尽管如果您具有足够的模块化,这可能仅适用于部分代码库。
太多的项目保留了旧代码,因为他们不愿意更改它-或者因为它太复杂了,因为它从来没有被设计成可以丢弃的。承认您的第一次尝试将是失败的事实将使您的生活变得更好。
概念是始终可以更改的关键设计,程序必须满足完全构思的应用程序的要求。
第一,要点,第二,需要如何访问,第三,用户是谁,第四,用特定的术语来定义工作的全部SOW范围,这些都是应用程序要做的。以及您添加的每个功能如何工作。
在对您的Web应用程序的架构进行任何选择之前,请先进行规划并仔细考虑。
然后选择最好的筹码
我是LAMP开发人员
所以我倾向于将问题缩小到我将使用的PHP框架。和前端脚本,我将需要使其以理想的方式完成我需要做的所有事情
要添加此内容,学习使用MVC框架,ZEND和CAKEPHP是最好的快速开发框架(PHP)