Questions tagged «programming-practices»

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


10
为什么我们大多数人都将“ i”用作循环计数器变量?
有没有人想过为什么我们中的很多人使用相同的变量名重复相同的模式? for (int i = 0; i < foo; i++) { // ... } 看来我曾经看着用途大多数代码i,j,k等为迭代变量。 我想我是从某个地方捡来的,但是我想知道为什么这在软件开发中如此普遍。是我们所有人都从C中获得的东西还是类似的东西? 我的脑后已经痒了一段时间。

19
函数可以太短吗?
每当我发现自己多次编写相同的逻辑时,我通常会将其粘贴在一个函数中,因此在我的应用程序中只有一个地方需要维护该逻辑。副作用是我有时会遇到一两个函数,例如: function conditionMet(){ return x == condition; } 要么 function runCallback(callback){ if($.isFunction(callback)) callback(); } 这是偷懒还是不好的做法?我之所以只问是因为这会导致大量的函数调用需要非常小的逻辑。

14
解决方案应该是尽可能通用的还是尽可能具体的?
假设我有一个具有“类型”属性的实体。可能有20多种可能的类型。 现在,我被要求实现一些允许从A-> B更改类型的方法,这是唯一的用例。 那么,我应该实现一些允许对类型进行任意更改的方法吗,只要它们是有效的类型?或者我应该只允许它根据要求从A-> B更改而拒绝其他任何类型的更改,例如B-> A或A-> C? 我从双方都可以看到优缺点,在将来出现类似要求的情况下,通用解决方案意味着工作量会减少,但这也意味着出错的可能性更大(尽管我们100%控制着调用方点)。 一种特定的解决方案不太容易出错,但是如果出现类似的要求,将来需要做更多的工作。 我一直在听到,优秀的开发人员应该尝试预期变化并设计系统,以便将来轻松扩展,这听起来像是通用解决方案? 编辑: 在我不太具体的示例中添加更多详细信息:在这种情况下,“通用”解决方案比“特定”解决方案需要的工作更少,因为特定解决方案需要对旧类型和新类型进行验证,而通用解决方案只需要验证新类型。

5
具有相同id属性的两个HTML元素:到底有多糟?
只需浏览google maps源代码。在标题中,他们有2个div,其中id =“ search”一个包含另一个,并且还具有jstrack =“ 1”属性。有一种形式将它们分开,如下所示: <div id="search" jstrack="1"> <form action="/maps" id="...rest isn't important"> ... <div id="search">... 由于这是google,我假设这不是一个错误。 那么违反此规则真的有多严重?只要您谨慎选择CSS和dom,为什么不重用id一样的类?有人故意这样做吗?如果是,为什么?

12
为什么在一种产品或软件的开发中使用多种编程语言?
我是一名刚毕业的研究生,旨在攻读计算机科学硕士学位。我遇到了多个真正吸引我并鼓励我为它们做出贡献的开源项目(CloudStack,OpenStack,moby和Kubernetes仅举几例)。我发现它们中的大多数有一个共同点,就是使用多种编程语言(例如Java + Python + Go或Python + C ++ + Ruby)。我已经看过另一个问题,它涉及如何使多种编程语言相互通信:如何使两种不同的编程与两种不同的语言交互? 我想了解提示企业使用多种编程语言的要求。什么样的要求或要求类型使软件架构师或项目负责人说:“我建议对于任务1使用语言X,对于任务2使用语言Y”?我似乎无法理解在同一产品或软件中使用多种编程语言的原因。

16
我是否应该现在添加冗余代码,以防将来可能需要?
对与错,我目前认为我应该始终尝试使我的代码尽可能地健壮,即使这意味着添加我知道现在将无用的冗余代码/检查,但是它们可能是下线的x年。 例如,我目前正在开发具有以下代码的移动应用程序: public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows) { //1. Is rows equal to null? - This will be the case if this is the first appointment. if (rows == null) { rows = new List<CalendarRow> (); } //2. Is rows empty? - This will be the case if …


15
为什么数据结构在面试中如此重要?[关闭]
我必须承认,我大学毕业后在数据结构方面并不那么强。在我毕业期间的整个校园安置中,我目睹了诸如亚马逊,微软等大多数高科技公司主要专注于数据结构。似乎数据结构是他们唯一希望毕业生获得的东西。 老实说,我对此感到难过。我写好的代码。我遵循标准的编码设计模式,但确实使用数据结构,但使用的是表面结构,如ArrayList,LinkedList等Java公开的API。但是,公司通常专注于数据结构的复杂方面,例如基于指针的内存操作和时间复杂性。 当时可能是由于我的Java背景,我仅在以对象,实例等面向对象编程的方式进行交谈时才了解代码效率和逻辑,但我从未深入到位和字节级别。我不希望人们因为我在数据结构中的这种知识缺陷而对我视而不见。 那么,为什么所有这些都强调数据结构呢?

22
自动编程:编写可编写代码的代码
读完《实用程序员》一书后,我发现最有趣的论点之一是“编写代码编写代码”。 我尝试在网上搜索更多有关它的解释或文章,尽管我找到了一些有关该主题的不错的文章,但仍然没有找到任何特定的代码实现或好的示例。 我觉得它仍然不是一个普遍的论点,缺乏文档或者很多人不接受,我想对此有所了解。 您如何看待这个主题?它会真正提高您的生产力吗?在书籍,博客,幻灯片等中,关于该主题有哪些好的资源? 一些代码示例将不胜感激,使我可以更好地理解其实现。 这是有关该主题的Wiki页面,其中包含各种相关的编程技术,例如元编程,生成式编程和代码生成。


30
哪种流行的“最佳实践”并不总是最好的,为什么?[关闭]
“最佳实践”在我们行业中无处不在。一对“编码的最佳实践”谷歌搜索变成了近150万个结果。这个主意似乎给很多人带来了安慰。只需按照说明进行操作,一切都会很好。 当我读到一种最佳实践时(例如,最近我刚刚阅读了“ 清洁代码”中的几本),我感到很紧张。这是否意味着我应该始终使用这种做法?有附带条件吗?在某些情况下可能不是一个好习惯吗?在我进一步了解该问题之前,如何确定? 清洁代码中提到的几种做法并不适合我,但老实说,我不确定这是否是因为它们可能不好,或者这仅仅是我个人的偏见。我确实知道,技术行业中的许多杰出人士似乎都认为没有最佳实践,因此至少我那令人烦恼的疑问使我成为了一个好公司。 我已经阅读的最佳实践的数量太多了,无法在此处列出或询问个别问题,因此我想将其表述为一个一般性问题: 在某些情况下,哪些通常被称为“最佳实践”的编码实践可能不是最佳选择,甚至是有害的?这些情况是什么?为什么使这种做法不佳? 我希望听到有关具体示例和经验的信息。

30
编程中的有害诱惑
很好奇,编程中的哪种诱惑对您的项目真的有害吗? 就像当您真的有想做某事的冲动,并且相信它将使项目受益时,或者只是骗自己相信它确实如此,而一周之后,您意识到您并没有解决任何实际问题,而是创建了新问题或,最好的情况是,您的内在野兽不会受到明显影响。 就个人而言,我很难不重构不良代码。我处理了很多不良的旧代码,并且当我没有测试证明重构不会破坏任何东西时,需要花一口气才能不碰它。 在用户界面上对我来说是另一个恶魔,我可以花几个小时更改UI布局,只是因为我喜欢这样做。有时我告诉自己我正在研究可用性,但事实是我喜欢移动按钮。 您的编程恶魔是什么,如何避免它们?

13
如何警告其他程序员类的实现
我正在编写“必须以特定方式使用”的类(我想所有类都必须...)。 例如,我创建了一个fooManager类,该类需要调用Initialize(string,string)。而且,为了进一步推动该示例,如果我们不听其ThisHappened行为,则该类将无用。 我的意思是,我正在编写的类需要方法调用。但是,如果您不调用这些方法,它将编译得很好,并且最终将得到一个空的新FooManager。在某些时候,根据类及其作用,它要么不起作用,要么崩溃。实现我的类的程序员显然会在其中查找并意识到“哦,我没有调用Initialize!”,这很好。 但是我不喜欢那样。我理想的情况是,如果不调用该方法,则不编译该代码。我猜这根本不可能。或立即可见清晰的事物。 我发现自己对这里的当前方法感到困扰,具体方法如下: 在类中添加一个私有布尔值,并检查类是否已初始化;如果不是,我将抛出一个异常,说“该类尚未初始化,您确定要调用.Initialize(string,string)吗?”。 我对这种方法还可以,但是它会导致很多代码被编译,最终对于最终用户来说是不必要的。 另外,当有更多方法Initiliaze要调用时,有时甚至会有更多的代码。我试图让我的课程没有太多的公共方法/动作,但这并不能解决问题,只是使其合理。 我在这里寻找的是: 我的方法正确吗? 有更好的吗? 你们做什么/建议? 我是否要解决非问题?同事们告诉我,程序员在尝试使用该类之前应先检查该类。我谨对此表示不同意见,但这是我相信的另一件事。 简而言之,我试图找到一种永远不会忘记在以后重用该类或被其他人重用时实现调用的方法。 澄清说明: 要在此处澄清许多问题: 我绝对不仅在谈论类的初始化部分,而且还涉及整个生命周期。防止同事两次调用一个方法,确保他们在Y之前先调用X,以此类推。任何最终成为强制性的要求和文档中的东西,但我希望在代码中尽可能地简化和缩小。我确实很喜欢Asserts的想法,尽管我很确定我将需要混合其他一些想法,因为Asserts并非总是可能的。 我正在使用C#语言!我怎么没提到呢?我在Xamarin环境中,通常在解决方案中使用大约6到9个项目来构建移动应用程序,包括PCL,iOS,Android和Windows项目。我已经从事开发工作大约一年半(包括学校和工作在内),因此有时我会提出荒谬的陈述\问题。所有这一切可能都无关紧要,但是太多的信息并不总是一件坏事。 由于平台的限制和依赖注入的使用,我不能总是将所有必需的东西都放在构造函数中,因为除了Interfaces之外的其他参数都没有了。也许我的知识不足,这很有可能。在大多数情况下,这不是初始化问题,而是更多 我如何确定他注册了该活动? 我如何确保他不会忘记“在某个时候停止该过程” 在这里,我记得一个广告获取类。只要可见“广告”的视图,该类就会每分钟获取一个新广告。该类在构造时需要一个可以显示广告的视图,该视图显然可以包含在参数中。但是,一旦视图消失,必须调用StopFetching()。否则,该类将继续为甚至不在该视图中的视图获取广告,这很糟糕。 同样,该类具有必须被监听的事件,例如“ AdClicked”。如果不听,一切都会很好,但是如果未注册水龙头,我们将失去对分析的跟踪。不过,该广告仍然可以正常运行,因此用户和开发人员不会发现任何差异,并且分析将仅包含错误的数据。需要避免这种情况,但是我不确定开发人员如何知道他们必须注册到tao事件。虽然这是一个简化的示例,但是这里有一个想法,“确保他使用可用的公共动作”,而且当然在正确的时间!

14
我如何才能避免总是觉得自己完全从头开始重建程序,会做得更好呢?[关闭]
我已经学到了大量的编码,但是,它始终处于科学环境(不是计算机科学)中,完全是自学成才,没有任何人可以指导我正确的方向。因此,我的编码之旅一直很……混乱。我现在已经注意到,无论何时构建某种类型的程序,最终我都知道如何能够更加优雅,高效,灵活,易于管理地完成它。在某些情况下,我实际上回过头来重新构建了东西,但是通常这实际上是不可行的。尽管到目前为止我的大多数程序都相对较小,但是每次创建东西时都完全重写大型程序似乎很笨拙。 我只是想知道,这是正常的经历吗?如果没有,您如何防止这种情况发生?我已经尝试过预先计划一些事情,但是直到开始编写一些代码之前,我似乎无法真正预见到一切。

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.