Questions tagged «programming-practices»

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

7
短路评估,这是不好的做法吗?
我已经知道了一段时间,但从未考虑过的一件事是,在大多数语言中,可以根据其顺序在if语句中为运算符赋予优先级。我经常用这种方法来防止空引用异常,例如: if (smartphone != null && smartphone.GetSignal() > 50) { // Do stuff } 在这种情况下,代码将导致首先检查对象是否不为null,然后在知道该对象存在的情况下使用该对象。该语言很聪明,因为它知道如果第一条语句为假,那么即使评估第二条语句也没有意义,因此永远不会抛出空引用异常。对于and和or运算符,其作用相同。 据我所知,这在其他情况下也很有用,例如检查索引是否在数组的边界内,并且可以用各种语言执行这种技术:Java,C#,C ++,Python和Matlab。 我的问题是:这种代码是否代表不良做法?这种不良做法是由某种隐藏的技术问题引起的(例如,这最终可能导致错误)还是对其他程序员而言导致可读性问题?会令人困惑吗?

9
思考发展
我作为应用程序开发人员已经工作了一年半(不多久),而我刚刚获得了我的第一个大型项目。 不用说它进展得并不顺利,所以我向参与该项目的高级程序员寻求了有关如何实现它的建议。 他说,我已经彻底思考了即将完成的任务,因为在花太多时间思考设计模式之前,我从未处理过如此规模的项目。用他的睿智话语,他告诉我“为未来而努力,为现在而建设”。 程序员在进行这样的项目时通常会遵循这种趋势吗?例如,如果您被要求做一个概念验证模型,是否只是尽快将一个可行的例子拼凑成一个典型的趋势? 编辑:鉴于引发的辩论,我想提一下这种情况是极端的:由于我们无法控制的因素,我们的截止日期很紧迫(即如果我们不这样做,我们瞄准的市场将失去兴趣。 (没有向他们展示一些东西),并且他的建议对这个特定任务非常有效。

3
中断默认情况下的开关
我break常常不愿在最后一个案例之后加上或不包括在内default。 switch (type) { case 'product': // Do behavior break; default: // Do default behavior break; // Is it considered to be needed? } break我的唯一目的是阻止代码在其余的switch-case中运行。 那么,break由于一致性而导致的最后一个是否更合乎逻辑,或者由于不break进行任何功能性使用而跳过了它是否更合逻辑?我认为两者在逻辑上都是不同的。 这可以在某种程度上与以结尾的.php文件进行比较?>。我?>之所以从不结束,主要是因为有输出空白的风险,但有人可能会认为以文件结尾是合乎逻辑的事情。

12
我的项目需要多大才能进行单元测试?[关闭]
我认为我的项目已解耦到足以进行单元测试的程度。但是,就笔迹和功能而言,我的项目到底需要多大才能使单元测试值得? 我们都会犯错,没有人能做到完美,但是我认为自己是一个体面的程序员,可以逐步解决小项目的错误。还是您的项目规模不限,都必须进行单元测试?

17
我负面的实习经历能代表现实世界吗?[关闭]
我很好奇我目前的实习经历是否代表实际行业。 作为背景知识,我将学习一所主要大学的两个计算专业和一个数学专业的较好部分;我上过每一堂课,并且都崇拜过他们,所以我想以为我并不擅长编程。我曾在一家主要的软件公司实习,直到现在一半,我对代码质量异常低落感到震惊。注释不存在,全是意大利面条式的代码,所有可能出错的内容甚至更糟。我已经做了大量的辅导/ TAing,所以我很习惯阅读错误的代码,但是我一直看到的主要行业产品都胜过所有这些。我每天工作10到12个小时,从不觉得自己无所事事,因为 数小时的尝试,试图找出一个未公开的API或确定(完全未公开的)产品其他部分的行为。到目前为止,我每天都讨厌工作,而我非常想知道这是否是我一生中最需要的东西。 我是不是在实习上吸了一根短草(荒谬的薪水暗示着这不是一个低素质的职位),或者这就是现实世界吗?

11
单元测试不应该使用我自己的方法吗?
今天,我正在观看“ JUnit基础”视频,作者说,在程序中测试给定方法时,不应在此过程中使用其他自己的方法。 更具体地说,他正在谈论测试某种记录创建方法,该方法采用参数的名称和姓氏,并使用它们在给定表中创建记录。但他声称,在测试此方法的过程中,他不应使用其他DAO方法来查询数据库以检查最终结果(以检查记录是否确实由正确的数据创建)。他声称为此,他应该编写其他JDBC代码来查询数据库并检查结果。 我想我理解他的主张的精神:您不希望一种方法的测试用例取决于另一种方法(在本例中为DAO方法)的正确性,这是通过(再次)编写自己的验证来完成的/支持代码(应该更加具体和集中,因此代码更简单)。 但是,我内心的声音开始以诸如代码重复,不必要的额外努力之类的论点来抗议。在测试其他方法时只使用其中一些方法可以吗?如果其中一个没有按预期执行操作,则其自己的测试用例将失败,我们可以对其进行修复并再次运行测试电池。无需重复代码(即使重复的代码稍微简单一些)也无需浪费精​​力。 我对此有很强烈的感触,因为我最近编写了多个Excel - VBA应用程序(感谢Rubberduck for VBA进行了正确的单元测试),其中应用此建议将意味着很多额外的工作,而没有明显的好处。 您能否分享您对此的见解?

11
当您获得经验时,总体而言,编程是否变得更容易阅读,编写和理解?[关闭]
我是编程的新手,我一直在读书,学习,阅读文章等等。自从开始学习编程以来,我取得了不错的成绩,当我还是一个初学者时,我曾经以为自己对编程有所了解,但是随着我学到更多,我意识到了该领域的困难(实际上所有领域都很困难,但这不是重点)。 如今,我已经编写了功能软件,并且学习了3种语言的BASICS,并且我只是一种语言的中级。当我查看MYSQL,OpenGL编程甚至Visual Studio C ++代码之类的高级内容时,它会让我头疼,甚至在可视化许多网站的HTML源代码时(Google chrome看到的网站上的大多数源代码看起来也很凌乱和无组织。 )这让我很困惑。乍一看似乎很简单,但是当看这些高级的东西时,我只是想知道如何学习到很多东西。 简而言之,问题是,随着程序员的职业发展,这些事情是否对他们而言变得更加清晰。随着学习的深入,上面列出的复杂主题(OpenGL,MySQL,高级html站点)是否变得更易于阅读,编写和理解,或者随着学习的进行变得更加复杂?您如何克服这种感觉,即您是编程世界中的蚂蚁,而这玩意儿正在压垮您呢?

7
代码优先与数据库优先
在设计和创建要使用的软件时,通常会先设计和创建后端SQL表,然后再进行实际编程。我目前正在从事的项目让我感到困惑。这可能是由于缺乏良好而可靠的要求所致,但是不幸的是,这次我对此几乎无能为力。这是一种“随它去吧”的情况,但是我离题了。 我正在考虑将工作流程从头开始,并首先创建UI和数据模型类,以期解决该问题将使我清楚我的数据库架构最终将是什么样。这是一个好主意吗?我很担心自己最终将获得一个UI,但仍然不知道如何构造数据库。 如果有人好奇,我将SQL Server用作后端,将MS Access用作前端应用程序。(访问也不是我的选择...所以请不要对此感到讨厌。)

11
严格出于测试目的修改代码是否是错误的做法
我与一名程序员同事讨论关于仅修改一段可工作的代码以使其可测试(例如通过单元测试)是好是坏的做法。 我的观点是,在保持良好的面向对象和软件工程实践的范围内(当然不要“公开一切”等),这是可以的。 我同事的观点是,仅出于测试目的修改代码(有效)是错误的。 只是一个简单的示例,请考虑某些组件(用C#编写)使用的这段代码: public void DoSomethingOnAllTypes() { var types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var currentType in types) { // do something with this type (e.g: read it's attributes, process, etc). } } 我建议可以修改此代码以调出另一个可以完成实际工作的方法: public void DoSomething(Assembly asm) { // not relying on Assembly.GetExecutingAssembly() anymore... } 此方法接受一个Assembly对象进行处理,从而可以通过您自己的Assembly进行测试。我的同事认为这不是一个好习惯。 什么被认为是良好且常见的做法?

17
如何训练自己,避免编写“聪明”的代码?[关闭]
您是否只需要用Expression s 来展示新技巧或将三个不同的过程归纳起来就知道吗?这并不一定要达到宇航员的规模,实际上可能会有所帮助,但是我不禁注意到其他人将以更清晰,直接(有时很无聊)的方式实现相同的类或程序包。 我注意到我经常通过过度解决问题来设计程序,有时是故意的,有时是出于无聊。无论哪种情况,我通常都会诚实地相信我的解决方案是清晰而优雅的,直到我看到相反的证据,但通常为时已晚。我中还有一部分人喜欢无证假设而不是代码重复,而更喜欢简单性。 我该怎么做才能抵制写“聪明的”代码的冲动,什么时候我应该做错了? 当我现在与一个经验丰富的开发人员团队一起工作时,问题变得更加严峻,有时我写智能代码的尝试即使是我自己,经过一段时间消除优雅的幻想似乎也是愚蠢的。

10
Java中每个类有多少行?[关闭]
根据您的经验,对于Java中的一个类来说,太多的代码行太多是什么有用的经验法则? 明确地说,我知道行数甚至不接近用于特定类中什么应该不使用的实际标准。应该根据适当的OOP原理(封装等)来设计类。就是说,经验法则可以为重构考虑提供一个有用的起点(例如,“嗯,此类有> n行代码;它可能不可读,并且在封装方面做得很差,所以我可能想看看是否应该在某个时候重构”)。 在另一方面,也许您遇到过非常大的类的示例,这些类仍然很好地遵守了OOP设计,并且尽管它们的长度很长,但是它们都是可读性和可维护性的? 这是一个有关每个函数行数的相关,不可重复的问题。

15
大型软件是否有可能达到绝对零错误状态?
我说的是20-30 +百万行代码,例如Autodesk Maya规模和复杂性的软件。 如果您只要需要就冻结开发,就可以实际修复所有错误,直到没有一个单独的错误为止(如果可以通过计算机验证此错误)?支持和反对无错误系统的存在是什么? 因为有人认为您所做的每个修复都会产生更多的错误,但是我认为那不是真的。 错误是指从用户界面中最简单的错字,到没有解决方法的更严重的预防性错误。例如,特定的脚本功能无法正确计算法线。同样,即使有解决方法,该问题仍必须解决。因此,您可以说可以手动执行此特定操作,而不使用提供的功能,但是该功能仍必须修复。

8
如果我需要在程序的整个生命周期中使用一块内存,是否真的有必要在程序终止之前释放它?
在许多书籍和教程中,我都听说过内存管理的做法很受压力,并感到如果使用完内存后不释放内存,将会发生一些神秘而可怕的事情。 我无法代表其他系统(尽管对我而言,可以假设它们采用了类似的做法是合理的),但是至少在Windows上,内核可以保证清除由以下系统使用的大部分资源(少数情况除外)程序终止后的程序。其中包括堆内存等。 我了解为什么您要在使用完文件后关闭文件以使文件可供用户使用,或者为什么要断开连接到服务器的套接字以节省带宽,但是这样做似乎很愚蠢。必须微管理程序使用的所有内存。 现在,我同意这个问题是广泛的,因为您应该如何处理内存取决于您需要多少内存以及何时需要,因此我将把这个问题的范围缩小到这个范围:如果我需要使用在程序整个生命周期中的内存,在程序终止之前是否真的有必要释放它? 编辑:建议作为重复的问题是特定于Unix家族的操作系统。它的最高答案甚至指定了特定于Linux的工具(例如Valgrind)。该问题旨在涵盖大多数“常规”非嵌入式操作系统,以及为什么在程序的整个生命周期内释放所需的内存是一个好习惯,或不是一个好习惯。

17
如何编写正确的循环?
大多数时候,在编写循环时,我通常会写错边界条件(例如:错误的结果),或者我对循环终止的假设是错误的(例如:无限运行的循环)。尽管经过反复尝试后我的假设是正确的,但是由于头脑中缺乏正确的计算模型,我感到非常沮丧。 /** * Inserts the given value in proper position in the sorted subarray i.e. * array[0...rightIndex] is the sorted subarray, on inserting a new value * our new sorted subarray becomes array[0...rightIndex+1]. * @param array The whole array whose initial elements [0...rightIndex] are * sorted. * @param rightIndex The …

8
我如何在软件项目开始时就做好准备?[关闭]
我是一名有1年经验的程序员,最近我意识到我很少正确地启动一个项目(我的大部分副项目),通常项目周期会像 从一些用例开始 开始编码 意识到一些我不能很好处理的事情,并且在当前的代码库中不合适。 重写大部分代码 这可能会发生几次 所以我的问题是 这种做法是普遍的,还是暗示我没有能力? 我如何在这方面提高自己?

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.