Questions tagged «language-agnostic»

该标签用于非特定于编程语言或环境的问题。

6
写评论的初学者指南?
是否有针对初学者的明确代码编写注释指南? 理想情况下,它将涵盖何时(不应该)使用注释以及应包含哪些注释。 这个答案: 不要评论您正在做什么,但为什么要这样做。 WHAT由干净,可读和简单的代码处理,并通过适当选择变量名称来支持它。注释显示了代码本身无法(或很难)显示的更高层次的结构。 接近,但是对于没有经验的程序员来说,这有点简洁(我认为在几个示例和极端情况的基础上进行扩展非常好)。 更新:除了这里的答案,我认为这个答案对另一个问题也非常重要。


11
维护方面,在不进行大括号干预的情况下“其他时间”是否被认为安全?
是否在else while不使用大括号的情况下将其视为“安全”的维护方法? 编写if-else没有括号的代码,如下所示... if (blah) foo(); else bar(); ...带有风险,因为缺少花括号,很容易在不经意间更改代码的含义。 但是,下面是否也有风险? if (blah) { ... } else while (!bloop()) { bar(); } 还是else while不使用大括号将其视为“安全”的?

9
数据迁移-危险还是必要?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我公司的软件开发部门面临着这样一个问题,即数据迁移被认为具有潜在的危险,特别是对我的经理们而言。 背景是我们的客户正在使用大量质量较差的数据。这样做的原因只是部分地涉及到我们的软件质量,而是数据的历史:他们中的大多数已经从原有系统迁移,引起的(主要是企业)的一些错误不一致的数据记录或misentries通过对事故客户方(我们的软件允许的错误)。 我的经理最重要的反对意见是,错误的数据可能会变成更差的数据,数据问题可能使客户的某些经理醒来,而客户方面的某些流程可能不再起作用,因为他们的流程在某种程度上适应了我们的系统。 就个人而言,我认为数据迁移是软件开发的组成部分,并且可以看到数据迁移对数据的重构是对代码的理解。我认为,数据迁移对于创建不断发展的软件至关重要。没有它,我们将不得不创建痛苦的软件,该软件在某种程度上可以解决不良的数据结构。 我在问你: 您对数据迁移有何想法,尤其是对于现实生活中的情况,而不仅仅是从开发人员的角度来看? 您对我的经理意见有异议吗? 贵公司如何应对数据迁移及其带来的困难? 还有其他有趣的想法属于这个主题吗?

2
纯语言中的垃圾回收有何不同?
在像Haskell这样的纯语言中,所有数据都是不可变的,并且无法以任何方式更改现有的数据结构。另外,许多关于不变数据的算法和功能性编程模式本质上会产生大量垃圾(map例如,创建中间列表的链)。 面对纯净性,垃圾收集器会采用哪些策略和技术?在不纯语言的GC中(不是在纯上下文中),什么功能很好?纯语言为GC创建了哪些其他新问题?


7
只做一件事的类的模式
假设我有一个程序可以执行以下操作: void doStuff(initalParams) { ... } 现在,我发现“做事”是相当复杂的操作。该过程变得很大,我将其拆分为多个较小的过程,很快我意识到在进行填充时具有某种状态会很有用,因此我需要在较小的过程之间传递较少的参数。因此,我将其纳入自己的类中: class StuffDoer { private someInternalState; public Start(initalParams) { ... } // some private helper procedures here ... } 然后我这样称呼它: new StuffDoer().Start(initialParams); 或像这样: new StuffDoer(initialParams).Start(); 这就是感觉不对的地方。使用.NET或Java API时,我始终不会调用new SomeApiClass().Start(...);,这使我怀疑自己做错了。当然,我可以将StuffDoer的构造函数设为私有,并添加一个静态辅助方法: public static DoStuff(initalParams) { new StuffDoer().Start(initialParams); } 但是然后我有了一个其外部接口仅包含一个静态方法的类,这也感觉很奇怪。 因此,我的问题是:这种类型的类是否有公认的模式? 只有一个入口 是否没有“外部可识别”状态,即实例状态仅在执行该入口点时需要?

6
反对解析克苏鲁方式的论点是什么?
我的任务是为一种可能对公司非常重要的工具实现领域特定的语言。该语言很简单,但并非无关紧要,它已经允许嵌套循环,字符串连接等,并且实际上可以确定,随着项目的进行,还会添加其他构造。 我从经验中知道,除非语法很琐碎,否则手工编写词法分析器/解析器是一个耗时且容易出错的过程。因此,我有两个选择:解析器生成器y yacc或组合器库(如Parsec)。前者也很好,但是我出于各种原因选择了后者,并以功能语言实现了该解决方案。 结果在我看来非常壮观,代码非常简洁,优雅,可读/流利。我承认,如果您从未使用Java / c#以外的任何程序进行编程,它可能看起来有些怪异,但是对于未使用Java / c#编写的任何内容,这都是正确的。 但是在某个时候,我确实遭到了同事的攻击。快速浏览一下我的屏幕后,他宣布代码令人难以理解,并且我不应该重新发明解析方法,而应该像所有人一样使用堆栈和String.Split。他大声喧noise,我无法说服他,部分是因为我感到惊讶,没有明确的解释,部分是因为他的观点是不变的(没有双关语)。我什至提出要给他解释语言,但无济于事。 我很肯定讨论将再次出现在管理层面前,因此我正在准备一些扎实的论据。 这些是我想到避免基于String.Split的解决方案的前几个原因: 您需要大量的if来处理特殊情况,而事情很快就会失控 大量的硬编码数组索引使维护工作陷入困境 很难处理像函数调用那样的方法参数(例如add((add a,b),c) 如果出现语法错误,很难提供有意义的错误消息(极有可能发生) 我全都是为了简单,清楚和避免不必要的智能加密,但我也认为,精简代码库的每个部分以使汉堡包都可以理解它是一个错误。我听到的是相同的论点,即不使用接口,不采用关注点分离,在周围粘贴粘贴代码等。毕竟,在软件项目上需要最低的技术能力和学习意愿。(我不会使用这个论点,因为它可能听起来令人反感,发动战争不会帮助任何人) 您最喜欢反对解析克苏鲁方式的论点是什么?* *当然,如果您能说服我说他是对的,我也会很高兴

5
Java instanceof运算符是否被视为反射,反射的定义是什么?
我今天与同事讨论了使用Java运算符的使用是否instanceof是一种反思。讨论很快演变成实际定义反射的内容。 那么,反射的定义是什么? 并instanceof认为使用了“使用反射”吗? 另外,如果instanceof将其视为反射,那么多态性还不是“利用反射”吗?如果没有,有什么区别?

3
命名“必要时执行X”方法
命名检查X是否需要完成的方法的好方法是什么?如果需要X可以这样做吗? 例如,如何命名新用户登录后更新用户列表的方法?UpdateListIfNeeded似乎太长了,虽然简单UpdateList意味着每次都可能进行昂贵且不必要的操作。EnsureListUpdated也是一个变体。 C#有一个bool TryXXX(args, out result)模式(例如int.TryParse(str, out num))来检查X是否可能并且可以这样做,但这是稍有不同的。

4
像这样的代码是“火车残骸”吗(违反了得墨meter耳定律)?
浏览我编写的一些代码后,我遇到了以下使我思考的结构。乍一看,它似乎足够干净。是的,在实际代码中,该getLocation()方法的名称稍微更具体一些,可以更好地准确描述其到达的位置。 service.setLocation(this.configuration.getLocation().toString()); 在这种情况下,service是在方法中声明的已知类型的实例变量。this.configuration从传递给类构造函数开始,它是实现特定接口(强制使用公共getLocation()方法)的类的实例。因此,表达式的返回类型this.configuration.getLocation()是已知的。特别是在这种情况下,它是一个java.net.URL,而service.setLocation()想要一个String。由于这两种类型的字符串和URL不直接兼容,一些类型的转换的需要,以适应方形挂在圆孔。 但是,根据Clean Code中引用的Demeter定律,类C中的方法f应该仅调用C上的方法,由f创建或作为f的参数传递的对象以及C的实例变量中包含的对象。超出此范围的任何内容(除非是我在上面特定情况下的最终结果,除非您考虑由于方法调用本身而创建的临时对象,在这种情况下,整个法律似乎都没有意义)。toString() 考虑到列出的限制条件,为什么不鼓励或什至不允许上述呼叫,所以有合理的理由吗?还是我只是太挑剔了? 如果我要实现一种方法URLToString(),该方法只是调用作为参数传递给它toString()的URL对象(例如,由返回getLocation()),然后返回结果,则可以将getLocation()调用包装在其中以实现完全相同的结果;有效地,我只是将转换向前移了一步。那会以某种方式使其可以接受吗?(在我看来,从直觉上看,这两种方式都不应该有任何区别,因为所做的只是稍微移动一下东西。但是,按照所引用的《得墨meter耳定律》的信,这是可以接受的,因为我然后直接在函数的参数上进行操作。) 如果这比调用toString()标准类型更具有异国情调,会有所不同吗? 在回答时,请切记,更改service变量所属类型的行为或API 是不切实际的。同样,为了争辩,我们说改变返回类型getLocation()也是不切实际的。

3
FizzBu​​zz问题有效性是否有正式研究?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 在看到这个问题,今天在FizzBu​​zz面试问题的变化,以及周围看到与之相关的其他问题,我要问:有没有正式的关于如何有效,这是作为一个面试技巧的研究?有很多人说,它过滤掉了一些听起来有些疯狂的候选人(在某些情况下为95%以上),但是对于找到优秀的程序员/开发者来说有多好呢? 有研究表明,软技能可能比硬技能更好,是为工作角色选择合适人选的指标。同样,可能有一些中间原因导致许多考生未通过该测试(紧张,认为“这是把戏”等)。 根据到目前为止的评论,FizzBu​​zz问题背后的想法似乎是确定该人是否具有良好的(足够的)编码技能,以供进一步考虑。我不完全相信FizzBu​​zz实际上会这样做。另外,请记住,FizzBu​​zz 在招聘过程的早期就过滤了很大一部分候选人,这可能意味着大量的优秀候选人会在早期就被删除,因为他们不能足够快地解决愚蠢的问题。 另外,我将指出,查看FizzBu​​zz的有效性可以完全以定量方式完成。这与查看“适合”或“热情”不同,后者非常多变且非常不科学(但对于新的雇用决策而言仍然非常重要)。

14
管理者如何选择编程语言
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 管理人员可以并且经常会强加用于项目的编程语言,这对任何人来说都不是秘密。 作为我自己的程序员,我从来都无法理解这一点。 但是现在我想我做了:当乔尔·斯波斯基(Joel Spolsky)在播客上说他们应该使用QuickBooks时,我得到了一个启示,因为“世界上每个会计师都知道”。这让我感到非常类似于“选择Java,因为世界上每个程序员都知道它”。 既然我已经从另一个角度看到了相同的问题,我对会计知识了解不多,但是我确实对编程有所了解,我想知道程序员如何才能帮助确保为项目选择正确的编程语言?

6
编译器静态类型检查“复杂”表达式时,常用的程序是什么?
注意:在标题中使用“复杂”时,是指该表达式具有许多运算符和操作数。表达式本身并不复杂。 我最近一直在研究一个简单的x86-64汇编程序。我已经完成了编译器的主要前端-词法分析器和解析器-现在可以生成程序的抽象语法树表示形式。由于我的语言将是静态类型的,因此我现在进入下一阶段:类型检查源代码。但是,我遇到了一个问题,而自己却无法合理解决。 考虑以下示例: 我的编译器的解析器已阅读以下代码行: int a = 1 + 2 - 3 * 4 - 5 并将其转换为以下AST: = / \ a(int) \ - / \ - 5 / \ + * / \ / \ 1 2 3 4 现在,它必须键入检查AST。首先检查=操作员的类型。首先检查操作员的左侧。可以看到该变量a被声明为整数。因此,它现在必须验证右侧表达式为整数。 我了解如果表达式只是一个值(例如1或),该怎么办'a'?但是,对于具有多个值和操作数的表达式(一个复杂的表达式)(例如上述表达式),该如何处理呢?为了正确确定表达式的值,似乎类型检查器实际上必须执行表达式本身并记录结果。但这显然似乎破坏了将编译和执行阶段分开的目的。 我想可以做到的唯一另一种方法是递归检查AST中每个子表达式的叶子,并验证所有叶子的类型都与期望的运算符类型匹配。因此,从=运算符开始,类型检查器将扫描左侧的所有AST并验证叶子都是整数。然后,它将对子表达式中的每个运算符重复此操作。 我曾尝试在《龙书》的副本中研究该主题,但似乎没有涉及太多细节,只是重申了我已经知道的内容。 当编译器对具有多个运算符和操作数的表达式进行类型检查时,通常使用的方法是什么?我上面提到的任何方法都使用吗?如果没有,那么方法是什么,它们将如何工作?

9
能够阅读代码,但主要为编写代码而苦苦挣扎
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 我最近第一次参加编程考试...而且我几乎失败了。根本没有做得很好。大学时代以外,我只能怪自己,我几乎什么也没做。 现在,我又在夏季临近时又来了一次,我不允许这种情况再次发生。几周以来,我一直在阅读,阅读和阅读更多内容。我一直在处理我错过的旧事物和我们正在做的新事物。因此,很明显,我对语言的理解有很大的不同。但是,仅此而已。我可以阅读代码,现在我对代码中发生的事情有所了解...但是当涉及到我自己编写代码时,我却一无所知。就像我永远不知道该采取什么方法,也永远无法真正完全理解这些问题一样。 我每天都做大量的阅读工作(过去一个月左右的时间大约是5-6个小时)……但是打开IDE时,我总是注定要死,这确实很无用。尤其是因为我了解节点,列表,数组列表,接口等方面的知识,但除了在有关页面的页面上阅读它们之外。我可以指出程序中正在发生的所有事情,因此给预采样代码添加注释就可以了……但是编写自己的代码则是另一回事了。

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.