Questions tagged «programming-practices»

编程实践是软件开发中常用或不常用的实践。这些可以包括敏捷开发,看板,编码快捷方式等。

10
代码正确性证明会成为主流吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 除了最琐碎的程序外,所有程序中都充满了错误,因此承诺删除它们的任何事情都非常诱人。目前,正确性证明是非常深奥的代码,主要是由于学习起来很困难,以及证明程序正确所付出的额外努力。您认为代码验证会成功吗?

3
我们应该在结构中添加构造函数吗?
我们经常使用c ++结构来定义数据结构,而不是使用类,类可以是带有成员方法的完整模块。从现在开始,我们知道它们都是相同的(松散地说)。 我们经常使用/处理结构作为仅数据实体的事实产生了这样的冲动,即我们也不要添加默认构造函数。但是构造函数总是很棒的,它们使事情变得更简单并有助于消除错误。 如果将默认构造函数添加到我的数据结构,会不会感到烦恼? 如果满足其他条件,实现默认构造函数还会使结构Non-POD(普通旧数据类型)吗? 为了正确理解,考虑一个简单的示例,但实际上结构会大得多。 struct method { char name[32]; float temperature; int duration; }; 每次我创建一个方法时,我都会担心(至少可以说)是否忘记设置一些值。想象一下,我忘记设置temperature该方法并将其应用于系统,该系统现在是一个随机的高值,并且会导致混乱。或者我忘了设置duration,现在该方法将其自身应用到未知的高持续时间。 为什么我应该负责每次都初始化对象,而不是执行保证它的构造函数?

6
如何从有限状态机故障中恢复?
我的问题似乎很科学,但我认为这是一个普遍的问题,经验丰富的开发人员和程序员希望能提供一些建议来避免我在标题中提到的问题。顺便说一句,我描述的波纹管是我要在我的iOS项目中主动解决的一个实际问题,我想不惜一切代价避免它。 通过有限状态机,我的意思是:>我有一个带有几个按钮的UI,与该UI相关的几个会话状态以及该UI表示的内容,我有一些数据,这些数据的值部分显示在UI中,我接收并处理了一些外部触发器(由传感器的回调表示)。我制作了状态图,以更好地映射在该UI和应用程序中理想和可实现的相关方案。随着我慢慢实现代码,应用程序开始表现得越来越像它应该的样子。但是,我不是很自信。我的怀疑来自观察自己的想法和实施过程。我确信我已经涵盖了所有内容,但是足以在UI中进行一些粗暴的测试,并且我很快意识到在行为方面仍然存在差距。然而,由于每个组件都依赖于其他组件的输入并根据其他组件的行为运行,因此来自用户或某些外部源的某些输入会触发一系列事件,状态更改等。我有几个组件,每个组件的行为都像这样:输入时收到触发器->触发器,并分析其发送者->基于分析输出一些信息(消息,状态更改) 问题是,这不是完全独立的,并且我的组件(数据库项,会话状态,某些按钮的状态)...可以在事件链范围之外进行更改,影响,删除或以其他方式修改。理想的情况。(电话崩溃,电池突然没电了,这会导致系统无效),这可能会导致系统无法恢复。我在苹果商店上的许多竞争对手应用程序中都看到了这种情况(人们没有意识到这是问题所在),客户编写了这样的内容:“我添加了三个文档,到那儿走了之后,我无法打开它们,即使看到他们。” 或“我每天都录制视频,但是录制了太多日志的视频之后,我无法在其上打开字幕..,并且用于字幕的按钮没有 这些只是简短的示例,客户通常会对其进行更详细的描述。.根据它们中描述的描述和行为,我认为特定应用具有FSM故障。 因此,最终的问题是如何避免这种情况,以及如何保护系统避免自身阻塞? 编辑>我是在电话中一个viewcontroller视图的上下文中谈论,我的意思是应用程序的一部分。我了解MVC模式,我具有用于不同功能的单独模块。.我描述的所有内容都与UI上的一个画布相关。

2
“真正的程序员可以用任何语言编写汇编代码”是真的吗?
真正的程序员可以用任何语言编写汇编代码。 (拉里·沃尔)。 据我所知,拉里·沃尔(Larry Wall)先生想对一个真正的程序员说,任何一种语言都可以具有与ASM相同的功能。但是我严重不明白。如何使用Perl,Python,Java和C#等高级语言编写汇编代码?像Perl和Python这样的语言甚至没有指针。还是他有其他意思?沃尔先生实际上想说什么?

7
如何避免重写应用程序的各个部分
我在一家公司的销售部门项目中工作。这是我的第一份专业编程工作,但是我一直在自己编码并学习多年。该项目的一部分涉及获取一些数据,并将其与输入相结合以生成图形。然后保存数据……依此类推。因此,我花了不到一天的时间为此编写了代码。第二天,我展示了我的项目主管,他喜欢它,但是“如果有的话”,并希望我在图表中添加一些内容。这对程序的外观或功能没有太大的改变,但是它极大地改变了我存储数据,处理数据等的方式。 再次,我花了一天的时间来重新组织数据库表,并基本上从头开始重写代码以支持此新请求。我又把它还给了他,同样的事情发生了。他提出了其他要求,这些要求极大地改变了我处理数据的方式。因此,我不得不再次重写它。最终,他签署了该协议,希望我不必再次重写它。 请清楚,我不是在殴打我的经理或类似的人。他是一个伟大的人,他所要求的东西并没有超出这个世界,它们与我以前所做的不相容。 我只是想知道将来是否可以做些什么来避免完全重写。我了解制作灵活的代码并且正在尝试这样做,但是我想知道我可以做些不同的做法或事情来简化此工作,因此,将来,我不会花3天时间去做一些应该吃1。

2
这种编程技术叫什么?
我在采访中进行结对编程时遇到了这种编程技术,但在Google上找不到它的名称。 这个想法是,您首先编写使用变量的表达式,然后再编写用于计算变量的代码。 要在此处使用一些示例代码: private bool ValidPolicyNumber(string policyNumber) { var hasExpectedPrefix = policyNumber.Substring(0,5) == "POLIC"; var followedBy7Digits = Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$"); var hasLengthOf12 = policyNumber.Length == 12; return hasExpectedPrefix && followedBy7Digits && hasLengthOf12; } 使用我提到的技术编写此函数时,您将首先写最后一行return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;,然后写在它前面的三行。 我能找到的最接近的技术是“如意算盘”,它来自SICP,但是与调用您稍后要实现的函数有关,而不是使用您稍后要初始化的变量。

2
使用/导入语句过多是否表示不良设计或代码异味?
通常,我在类文件的顶部看到一些using语句。例: using System.Collections.Generic; using System.IO; using System.Xml.Linq; 但是在我正在从事的一个项目中,有几次在一个类文件中看到20个或更多的uses / imports。这是不好的设计吗?看来,旨在做一件事的类应该仅依赖于几个组件。

1
是否有标准化的做法来对HTML标签中的属性进行排序?
我正在AngularJS项目上工作,并且我的许多HTML元素中的属性很多: <button type="submit" ng-click="Page.UI.DetailView.ExecuteFunction()" ng-disabled="step5.$invalid" class="btn btn-success pull-right"> Submit this Product </button> 这些属性的顺序是否存在标准化约定?按字母顺序?按含义分组(例如,所有角度属性一起)?首先是标准HTML属性(例如“类型”)?

6
哪些功能特性值得为它们带来的好处感到困惑?
在使用Haskell和F#学习了函数式编程之后,OOP范例似乎在类,接口和对象方面倒退了。我的同事可以理解FP的哪些方面?是否有任何FP风格值得与我的老板谈谈对我的团队进行再培训,以便我们可以使用它们? FP的可能方面: 不变性 部分应用和咖喱 一流的功能(功能指针/功能对象/策略模式) 惰性评估(和Monad) 纯功能(无副作用) 表达式(相对于语句-每行代码都会产生一个值,而不是引起副作用,或者除了引起副作用之外) 递归 模式匹配 它是一种免费的所有人,我们可以在编程语言支持的范围内做任何事情吗?还是有更好的指南?

6
将元数据信息存储在文件名中是不好的做法吗?更好的解决方案?
我注意到我在哪里工作,人们热衷于在文件名中存储信息并解析文件名。 对我来说,这似乎不是特别好的做法。我已经看到脚本偶尔会遍历一个文件的问题,并且由于另一个文件首先匹配而出现错误,我们也正在讨论如何解决字段分隔符的问题。 是否被认为是不良做法? 基于某种类型的元数据从文件系统中检索文件的其他公认解决方案是什么?

2
从被测系统中提取类时,应该重构单元测试吗?
我写的这个类做了几件事(也许这违反了单一责任原则)。我现在该项目的其他部分需要意识到一块是逻辑的,我要揭露它是提取的一类了我原来的被测系统的方式。 我期望无需更改任何测试代码即可执行此操作,但是当我完成操作时,您可能会说该测试不再是单元测试。它将测试原始类和我提取的类。换句话说,我将有一个测试用例,但有两个系统正在测试中。 完成后是否应该重构测试代码?IE:创建一个ExtractedClassTest并将所有相关测试从OriginalClassTest移入其中?这似乎有点冒险:我可能会在此过程中失去一些覆盖面,它可能不像移动测试那样简单,并且我最终会重写一些我知道曾经可以使用但无法再使用的测试代码,等等 另一方面,如果按原样保留OriginalClassTest,则可以看到这是测试维护问题。找到ExtractedClass的测试在哪里会有些混乱。您的第一印象将是它不存在。随着时间的推移,随着大量生产代码的重构,这可能会成为一个严重的问题。 我是TDD的新手,所以我需要专家的建议。谢谢!

6
为了深刻理解我的技巧(编程),我应该掌握哪些编程概念?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 从重要性的角度出发,如果可能的话,可能的话,了解编程的最重要基础是什么。算法,迭代,递归等? 请注意,我放在哪里等是我的问题所在。我最近在互联网上看到一则帖子,说10个程序员中有9个无法喘息! http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html 我想对自己实际上在编程时要完成的工作有深刻的了解,并对我可以使用的基本工具进行详尽的理解。基本上,我希望能够用风的所有颜色绘画。

2
内联代码注释的最佳方法是什么?
我们正在对已有20年历史的旧代码库进行一些重构,并且我正在与我的同事讨论代码中的注释格式(plsql,java)。 没有默认的注释格式,但是在大多数情况下,人们会在注释中执行以下操作: // date (year, year-month, yyyy-mm-dd, dd/mm/yyyy), (author id, author name, author nickname) and comment 我想要的将来和过去评论的建议格式是: // {yyyy-mm-dd}, unique_author_company_id, comment 我的同事说,我们只需要评论,并且必须将所有过去和将来的评论重新格式化为这种格式: // comment 我的论点: 我说出于维护原因,知道何时以及谁进行了更改非常重要(即使此信息在SCM中也是如此)。 该代码是有效的,因此有历史。 因为没有更改日期,如果不打开SCM工具并搜索较长的对象历史记录,就无法知道何时进行更改。 因为作者非常重要,所以改变作者比改变作者更可信 敏捷性原因,无需打开和浏览SCM工具 人们会更害怕更改某人15年前所做的事情,而不是最近创建或更改的事情。 等等 我同事的论点: 历史在SCM中 开发人员不得直接在代码中了解代码的历史记录 软件包的长度为15,000行,而且非结构化的注释使这些软件包更难以理解 您认为最好的方法是什么?还是您有更好的方法来解决此问题?

8
您是否应该承诺提供不确定是否可实现的功能?
在HN的一篇文章中,我遇到了以下建议: 即使不确定,也请始终对客户/用户说“是”。90%的时间,您会找到一种方法。10%的时间,您会回去道歉。以小价钱支付个人的主要成长 但是我一直认为,在对客户/用户做出任何形式的承诺之前,应该先进行可行性分析,以使它们在任何时候都不会被误导。那么,在什么情况下上述建议应适用?

9
如果不练习,您的编程知识会减少吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我是新手程序员。我学习诸如C,C ++,Python和Java之类的语言(主要侧重于C ++)。我就是您所说的“年轻且经验不足”的人,我承认这是因为我无可否认。 作为一名学生,除编程外,我还有许多其他问题。我会尽可能多地练习编程,尤其是因为我的老师给我的练习比课堂上的其余课程要多(这是一个很低的水平),所以我经常花数周时间做其他事情,例如学校项目或体育运动,或者旅行,除了编程。 但是不要误会我的意思,我喜欢编程。我喜欢构建功能代码,只需按一下按钮就可以观看程序的运行,并学到很多东西。问题是,我根本没有太多时间。 现在,直接问一个问题:您的编程知识会随着时间的流逝而减少,而您却没有练习吗?您可能会问“您的意思是多少时间?”。我并不是说要花费特定的时间,但是作为参考,您可以以两个月甚至一年为例。 就知识而言,我指的是从语法到语言功能的所有内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.