Questions tagged «programming-practices»

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

5
测试驱动的开发-说服我![关闭]
我知道有些人大力支持测试驱动的开发。我过去曾使用过单元测试,但仅用于测试可以轻松测试的操作,或者我认为很可能是正确的操作。完整或接近完整的代码覆盖范围听起来会花费很多时间。 您将测试驱动的开发用于哪些项目?您是否仅将其用于特定大小以上的项目? 我是否应该使用它?说服我!

5
什么时候以及为什么要使用嵌套类?
使用面向对象编程,我们可以在一个类(嵌套类)中创建一个类,但是在我4年的编码经验中,我从未创建过嵌套类。 嵌套类有什么用处? 我知道如果嵌套一个类,则可以将其标记为私有,并且我们可以从包含的类中访问该类的所有私有成员。我们可以将变量作为私有变量包含在包含类本身中。 那么为什么要创建一个嵌套类呢? 在哪些情况下应使用嵌套类,或者在使用方面比其他技术更强大?

2
Voyager任务的代码开发过程?
旅行者1号于2012年8月到达星际空间,是现存最遥远的人造天体。旅行者1号是在其双人航天器旅行者2号不久后发射的,旅行者1号探索了木星和土星的系统,发现了新月,活跃的火山以及有关外部太阳系的大量数据。 旅行者1号和旅行者2号的设计利用了罕见的行星对准技术,该对准技术在176年中仅发生过一次,并且仍然是历史上飞行次数最多的航天器。两架航天器都带有一个称为“黄金唱片”的时间胶囊,这是一个12英寸的镀金铜盘,上面装有声音和图像,这些图像和声音被选择用来向外星人描绘我们的世界故事。 我以为为该任务而开发软件的绝大多数人现在已经退休了,但是在过去的35年中,编程,编程语言到目前为止已经发展了。 因此,它于1977年发射升空。35年后,旅行者号到达星际空间。有几行代码,用什么语言编写?此任务(仍在执行中)背后的开发过程是什么? 那么,此任务中使用代码的更大计划是什么,代码库是用哪种语言编写的?

7
使用异常作为工具尽早“捕获”错误是否可以?
我使用异常来尽早发现问题。例如: public int getAverageAge(Person p1, Person p2){ if(p1 == null || p2 == null) throw new IllegalArgumentException("One or more of input persons is null"). return (p1.getAge() + p2.getAge()) / 2; } 我的程序永远不要传递null此函数。我从来没有打算。但是,众所周知,编程中会发生意想不到的事情。 如果发生此问题,将引发异常,以便在导致程序其他位置出现更多问题之前,找出并修复该异常。异常会停止程序,并告诉我“这里发生了坏事,请修复它”。而不是null在程序周围四处走动,从而导致其他地方出现问题。 现在,您是对的,在这种情况下,这null将立即导致NullPointerException立马,所以它可能不是最佳示例。 但以这种方法为例: public void registerPerson(Person person){ persons.add(person); notifyRegisterObservers(person); // sends the person object to all kinds of …

4
如何制止镀金并满足于发布工作进展
我所属的开发团队最近适应了敏捷实践的工作。这个人突出地表明了一个事实,就是我无法停止自己的镀金代码(和文档),因此,当我可以更早地交付满足要求的解决方案时,我就超出了最初的估计。 我认为我的道德观念与强迫症接壤,因为我过于依赖自己的代码,在重构和完善到第n级之前,很少满足于发布。我很高兴自己意识到了这一点,但是我如何才能改变自己的态度/心态来满足自己的进步并按时发布呢?

12
为什么一个班级除了“抽象”或“最终/密封”之外,什么都不应该?
经过10年以上的Java / C#编程,我发现自己创建了以下任一文件: 抽象类:合同,并非原样实例化。 期末/密封班:实现不打算用作其他任何东西的基类。 我想不出任何简单的“类”(即既不是抽象的也不是最终的/密封的)是“明智的编程”的情况。 为什么一个班级应该不是“抽象”或“最终/密封”之外的任何东西? 编辑 这篇很棒的文章比我能更好地解释我的担忧。

28
过度依赖工具是否意味着您很懒?[关闭]
我从uni开始使用C ++进行编程,并且很喜欢它。在下一学期中,我们改用VB6,但我讨厌它。 我不知道发生了什么,您将一个按钮拖动到表单上,然后ide为您编写代码。 尽管我讨厌VB的运行方式,但我不能说它比在C ++中做相同的事情更快,更容易,因此我可以理解为什么它是一种流行的语言。 现在,我并不是让VB开发人员懒惰,只是说它比C ++更容易,而且我注意到,许多更新的语言都在遵循这种趋势,例如C#。 这使我认为,随着越来越多的企业想要快速的结果,更多的人会像这样编程,迟早不会有我们现在所说的编程之类的东西。未来的程序员将告诉计算机他们想要什么,编译器将像星际迷航一样为他们编写程序。 这只是初级程序员的知情意见,还是总体上程序员变得懒惰且能力不足? 编辑:很多答案都说明了为什么要重新发明轮子,我也同意这一点,但是当有轮子可用时,人们就不会花时间去学习如何制造轮子。我可以用google搜索如何用任何一种语言做几乎所有的事情,一半的语言在调试时对您有很多帮助,他们都不知道如何解决错误。 这就是我提出的理论,即程序员变得越来越懒惰,缺乏能力,因为没有人关心事物的工作原理,直到它失效为止。


6
将个人Python项目变成可发布的库
我是一名学者,而不是程序员,并且我有多年编写供自己使用的Python程序以支持我的研究的经验。我的最新项目可能对我和其他许多人都有用,并且我正在考虑将其作为开源Python库发布。 但是,从运行中的个人项目到可以被其他人轻松安装和使用的库,似乎有许多障碍需要克服。这个问题是关于我应该开始着手公开发布的第一步。 目前,我只有一个git存储库,其中包含使用该库以及该库本身的代码,并且我将git用作紧急撤消按钮,以防万一发生任何问题。所有这些对于单个用户都可以正常工作,但是如果我要释放它,显然不合适。我要结束的地方是我的库位于单独的存储库中,并且可以由其他人使用来安装pip,并且具有稳定的API。 一旦我想发布它,学习使用setuptools等可能就不那么困难了-我的问题是知道如何工作才能达到这一点。 所以我的问题是,为了开始准备供公众使用的Python库项目,应该采取的第一步步骤是什么?我应该如何重组我的目录结构,git仓库等,以便开始努力公开发布该库? 更一般而言,如果首次尝试使用已知有帮助的资源,那将非常有帮助。指向最佳实践和避免错误的指针等也将非常有帮助。 需要澄清的是:当前的答案是按照“如何使我的Python库成为其他人可以使用的好库?”的方式来解决一个问题。这很有用,但是与我要提出的问题不同。 我目前正处于发布项目的漫长旅程的开始。我的实现的核心工作正常(并且工作得很好),但是我对即将进行的大量工作感到不知所措,并且我正在寻找有关如何进行流程导航的指导。例如: 我的库代码当前已耦合到我自己的使用它的特定于域的代码。它位于子文件夹中,并且共享相同的git存储库。最终,需要将其制作成一个独立的库并放入其自己的存储库中,但是由于我不知道如何做,所以我一直在拖延。(既不是如何在“开发模式”下安装库以使我仍然可以对其进行编辑,也没有如何使两个git仓库保持同步。) 我的文档字符串很简洁,因为我知道最终我将不得不使用Sphinx或其他工具。但是这些工具似乎并不容易学习,因此这成为一个主要的子项目,我一直推迟进行。 在某些时候,我需要学习使用setuptools或其他工具来打包它并跟踪依赖项,这非常复杂。我不确定现在是否需要这样做,并且该文档对于新用户来说绝对是个迷宫,因此我决定以后再做。 我从来不需要进行系统的测试,但是我肯定会对此项目进行测试,因此,我必须(i)了解足够的测试知识,以了解哪种方法适合我的项目;(ii)了解哪些工具可用于我选择的方法;(iii)学习使用我选择的工具;(iv)为我的项目实施测试套件等。这本身就是一个项目。 我可能还有其他事情要做。例如,jonrsharpe发布了一个有用的链接,其中提到了git-flow,tox,TravisCI,virtualenv和CookieCutter,我以前从未听说过。(该帖子来自2013年,所以我还必须做一些工作来找出仍有多少钱。) 当您将所有这些放在一起时,这是一项巨大的工作,但是我敢肯定,如果我坚持不懈地完成工作,那么我就可以完成所有工作,而且我不着急。我的问题是知道如何将其分解为可管理的步骤,一次可以完成。 换句话说,我要问的是我现在可以采取哪些最重要的具体步骤,以便最终获得可发布的产品。如果我有空闲的周末,我应该关注哪些事情?哪一个(如果有的话)可以与其他人孤立地完成,这样我至少可以完成一个步骤而无需做整个事情?学习这些东西最有效的方法是什么,这样我仍然有时间专注于项目本身?(请记住,所有这些本质上都是一项业余项目,而不是我的工作。)我是否真的不需要做任何事情,从而为自己节省了大量时间和精力? 非常感谢所有答案,但是我特别欢迎关注这些项目管理方面的答案,尤其是对现代Python开发的引用。

4
在开发过程中使用#ifdef在不同类型的行为之间切换
在开发过程中使用#ifdef在不同类型的行为之间进行切换是一种好习惯吗?例如,我想更改现有代码的行为,我有几个想法如何更改行为,并且有必要在不同的实现之间切换以测试和比较不同的方法。通常,代码更改很复杂,并且会影响不同文件中的不同方法。 我通常会介绍几个标识符并执行类似的操作 void foo() { doSomething1(); #ifdef APPROACH1 foo_approach1(); #endif doSomething2(); #ifdef APPROACH2 foo_approach2(); #endif } void bar() { doSomething3(); #ifndef APPROACH3 doSomething4(); #endif doSomething5(); #ifdef APPROACH2 bar_approach2(); #endif } int main() { foo(); bar(); return 0; } 这样就可以在不同的方法之间快速切换,并且仅用一份源代码即可完成所有操作。是发展的好方法还是更好的做法?

3
在属性设置器中添加逻辑是否被认为是不好的做法?
我跳入一个项目,发现其他开发人员在综合属性的设置器中添加了很多逻辑。我了解这是如何工作的,但我认为这很难理解程序的流程。在阅读代码时,每当看到时self.something = whatever,我总是检查somethingsetter是否被覆盖。 您对此主题有何看法?您认为这是体系结构不良或解决方案完善的标志吗? 如果您有相关的链接/源,我将很高兴阅读更多有关此的内容,很难获得良好的Google搜索结果,因此我也决定在此询问。 感谢您提供任何答案,并请注意,如果您没有看到标签,我在说的是目标C(即使我猜这不是特定于语言的问题)。

10
大学级和企业级编程之间有什么区别?[关闭]
我刚刚完成了IT领域的学士学位课程。我对编码非常感兴趣,并且真的想成为一名专业人士。现在,除了大学课程外,我还自己学习编程(C#)(大学级编程太基础了)。现在我觉得我需要更多时间来接近专业程序员。但是我的一些前辈说,公司世界编程与书呆子编程有很大不同,因此浪费时间没有任何意义。(他们本身不是程序员,这可能是他们听到的)。 通过提高C#的水平会受益吗?还是由于中等水平足以打破面试,对公司而言,较高的水平并不重要,因为它们纯粹依靠培训来教授企业环境中的工作方式,而学到更多对我没有多大帮助?请问是否有一些专业的程序员可以提供帮助,我保证这是每个对编程感兴趣的学生都想在我的阶段提出的问题。“您实际上如何从编程领域的学习者变成专业人士?” -不断学习直到您变得完美为止,或者一旦涵盖了基础知识就必须加入一家公司?

7
如何说服队友遵守一些基本规则
我的队友有问题。长话短说:我们是三个学生,正在为一个竞赛项目工作。该项目包含2个独立的应用程序:一个用于Windows(由我开发)和一个用于Android(由我的同事负责开发)。我们的代码库永远不会相交,应用程序将通过第三方工具进行通信。 问题如下:去年我在一家大公司实习时,我有一些在团队中工作的经验,并且我尝试为我们的代码强制执行一些编码标准。我还设置了一个git仓库/ wiki /协作软件,可以用来推送代码/编写想法,文档协议等,但是看来我是唯一使用这些工具的人。 我试图告诉他们,从长远来看,编写高质量的代码和记录每一个步骤将使我们受益,但他们似乎没有看到它的好处。我也在考虑添加一些集成测试,但是据我所见,只要他们不使用当前的工具来简化他们的生活,我想我就无法说服他们集成测试的用处。 同行的大多数代码都驻留在他们的计算机上,他们没有共享通用的代码库,而且正如我发现的那样,他们通过使用usb棒开会和共享代码来集成自己的代码。 我的问题是:我对此事是否太苛刻?我是否执行一些荒谬的规则?请记住,这是一个小项目,要求非常明确(我创建了说明应用程序应该做什么的文档),三个熟练的开发人员可以在3-4天之内完成此操作,因此他们可能看不到书写质量的额外复杂性代码,只要它们当前的方法可以正常工作。 有什么方法可以向他们展示使用git等记录代码的好处吗?

15
在两种编程语言之间来回切换是否明智?[关闭]
近两年来我一直在写很多PHP。现在,我正在进行.NET(主要是C#)开发。但是,有时我回去做一些php。 我的主要问题是,继续执行此操作是否明智?还是应该继续使用C#开发?从长远来看,这会对我造成伤害吗(请注意,我的主要目标不是成为所有交易的杰克)还是这样做是一种好习惯?

10
简单vs复杂(但性能高效)解决方案-选择哪个,何时选择?
我已经编程了两年,经常发现自己陷入了困境。 有两种解决方案- 一种是简单的,即简单的方法,易于理解和维护。它涉及一些冗余,一些额外的工作(额外的IO,额外的处理),因此不是最佳的解决方案。 但是其他方法则使用复杂的方法,难以实现,通常涉及许多模块之间的交互,是一种高效的解决方案。 当我没有硬性能SLA甚至简单的解决方案都可以满足性能SLA时,我应该争取哪种解决方案?我对开发人员的简单解决方案不屑一顾。 如果您的性能SLA可以通过一个简单的解决方案来解决,那么提出最佳最佳复杂解决方案是一种好习惯吗?

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.