Questions tagged «programming-practices»

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

8
Linq是否对.NET程序员产生麻木的作用?
大约一年前,当人们开始问如何使用jQuery检索查询字符串等绝对疯狂的事情时,我们很多人开始在jQuery中看到这种现象。库(jQuery)和语言(JavaScript)之间的区别显然已被许多程序员所忽略,并导致在不必要的地方编写了许多不合适的,费解的代码。 也许这只是我的想象,但我发誓我开始看到人们要求使用Linq做类似疯狂的事情的问题数量激增,例如按一定顺序查找范围。我无法克服Linq扩展对于解决该问题有多么不恰当,但更重要的是,作者只是认为理想的解决方案将涉及Linq而没有实际考虑(据我所知)。似乎我们正在重复历史,滋生了无法分辨语言(C#/ VB.NET)和库(Linq)之间区别的新一代.NET程序员。 是什么导致这种现象?只是炒作吗?喜tend倾向?Linq是否已经获得了魔术般的声誉,在这里您不必说出正确的咒语,而不必实际编写代码?我对这些解释不满意,但我真的想不出其他任何东西。 更重要的是,这确实是一个问题吗?如果是,那么帮助这些人开悟的最佳方法是什么?

8
条件中的条件条件分配是一种不良习惯吗?
假设我想编写一个在C中连接两个字符串的函数。我的编写方式是: void concat(char s[], char t[]){ int i = 0; int j = 0; while (s[i] != '\0'){ i++; } while (t[j] != '\0'){ s[i] = t[j]; i++; j++; } s[i] = '\0'; } 但是,K&R在他们的书中以不同的方式实现了它,尤其是在while循环的条件部分中尽可能多地包括: void concat(char s[], char t[]){ int i, j; i = j = 0; while (s[i] …

5
什么时候应该扩展Java Swing类?
我对继承实现的当前理解是,只有存在IS-A关系时,才应该扩展类。如果父类可以进一步具有具有不同功能的更特定的子类型,但将共享在父类中抽象的公共元素。 我质疑这种理解,因为我的Java教授建议我们这样做。他建议JSwing我们在课堂上建立一个应用程序 一个都应该延伸JSwing类(JFrame,JButton,JTextBox等)到单独的自定义类和在其中指定GUI相关的定制(例如部件尺寸,部件的标签,等) 到目前为止还算不错,但是他进一步建议每个JButton应该有自己的自定义扩展类,即使唯一的区别是标签。 例如,如果GUI有两个按钮,则“ 确定”和“ 取消”。他建议应将它们扩展如下: class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ MainUI mui; public CancelButton(MainUI mui) { setSize(80,60); setText("Cancel"); this.mui = mui; mui.add(this); } } 如您所见,唯一的区别在于setText功能。 那么这是标准做法吗? 顺便说一句,讨论该课程的课程称为Java最佳编程实践 [教授回覆] 因此,我与教授讨论了这个问题,并提出了答案中提到的所有观点。 他的理由是子类在遵循GUI设计标准的同时提供了可重用的代码。例如,如果开发人员在一个窗口中使用了自定义Okay和Cancel按钮,则将相同的按钮放置在其他Windows中也将变得更加容易。 我知道了我想起的原因,但它仍然只是在利用继承并使代码易碎。 …

7
反对错误抑制的论点
我在我们的一个项目中发现了一段这样的代码: SomeClass QueryServer(string args) { try { return SomeClass.Parse(_server.Query(args)); } catch (Exception) { return null; } } 据我了解,抑制这样的错误是一个坏习惯,因为它会破坏原始服务器异常中的有用信息,并使代码在实际终止时继续执行。 何时才应该像这样完全消除所有错误?

5
创建另一个类的ClassCollection是一个好习惯吗?
可以说我有一Car堂课: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } 可以说,我们正在建立一个有关停车场的系统,我将使用很多Car类,因此我们建立了一个CarCollection类,它可能有一些类似的方法FindCarByModel: public class CarCollection { public List<Car> Cars { get; set; } public Car FindCarByModel(string model) { // code here return new Car(); …

16
为何在编程时使用其他数字基数
我和我的同事一直在思考,以找出为什么有人会以除10为底的底数来编程数字。 我建议您也许可以通过将变量放置在要使用的正确基数中来优化较长的方程(例如,如果您只有5组东西而没有余数,则可以使用5基数),但是我不确定如果是真的。 有什么想法吗?

7
如何转换复制/粘贴/意大利面条式编程器以查看光线?
这个问题的灵感来自于这一块。尽管其他问题被认为是本地化的,但我认为根本问题是我们行业中极为普遍的问题。我知道有一些开发人员会阅读这些内容,并认为我正在编造这些东西,然后他们可能会回答每个人如何关心自己的工作并想学习,但是只是看看其他Programmer SE的帖子(例如),我知道这并非普遍如此。 假设您的团队中有某个人(或可能是多数人),他们的标准操作程序是复制/粘贴,并且相信只要添加足够的函数调用和变量,一切都可以解决。这个人从来没有听说过TDD,DRY或SOLID,并且在忙于工作的40个小时之外,他们从来没有读过任何一本方法论/实践/设计书。 在过去,我(和其他人)曾问过,如何教OOD。但是现在我认为这不是正确的问题。真正的问题是,您如何与这样的人/团队打交道,并使他们对更好的做事方式感到好奇?您如何激励他们学习?没有这些,似乎所有的教学,会议,演讲,讨论都没有用,如果他们很高兴回到办公桌前并做他们一直以来所做的事情。 我和一群这样的人一起工作。他们实际上是非常聪明的人,但是当我听到“我已经完成编码,只需要重构并拆分成多个类以使DXM满意”时,我就会讨厌。它们不会重构更干净,可读性和可维护性的代码,而仅仅是因为否则它们会被责骂。我知道他们有学习能力,只是似乎普遍缺乏动力。 当我交付作品时,它的bug数量通常更少,而我拥有的作品从未成为5000行的怪异行为。其他人会发表评论,例如“您的代码比我们的代码更清晰易读”,因此他们看到了区别。但是与此同时,我觉得他们相信他们不管做什么都可以得到40个小时的报酬,因此他们实际上不介意他们是否花了整整3天的质量检查来寻找不应引入的错误。第一名。或者他们花一个星期来修改一个类,因为最终有太多的依赖关系。但是,“也许该类应该用不同的方式编写”似乎从未弹出。 在这些情况下可以采取任何措施吗?有人成功了吗?还是最好将这种思维方式隔离到项目的非关键部分,并最大程度地减少损失? 注意:当我说“缺乏动力”时。我不认为工作或干得好没有动力,因为他们只是停止了关怀。实际上,我们团队中的大多数人恰恰相反。他们绝对在乎产品。我们有会在晚上和周末工作的人。我要努力克服的部分是改善的习惯和技能,实际上他们不需要那么多的工作。我想“ 40个小时”的事情使这篇文章听起来有些消极。

7
成为代码猴子怎么了?(或者,什么是代码猴子?)
程序员倾向于以贬义的方式谈论自己是“代码猴子”。“不要在那里工作,您将只是代码猴子!”。 我有两个工作机会,一个在小公司,一个在大公司(薪水相同)。我的朋友刚刚告诉我,我将成为大型公司的代码猴子,并且从亲身经历中知道,与将我沦为“代码猴子”相比,小型公司将更有回报。 我不太了解“代码猴子”和“真实”程序员之间的区别。请详细说明。我喜欢编程,所以对我来说,坐在计算机编程(即代码猴子)上的想法似乎并不坏。如果程序员喜欢编程,那么“代码猴子”是什么意思?


6
将值转换为不同表示形式,然后再将其转换回其起始位置的代码很不好,但是如何?[关闭]
我正在阅读一篇有关不良编程习惯的文章。 它提到- “ Yo-Yo代码”将值转换为不同的表示形式,然后将其转换回其起始位置(例如:将十进制转换为字符串,然后转换为十进制,或者填充字符串然后对其进行修整) 我不明白为什么他给出的特定示例对编写程序来说是一种不好的方式。如果情况需要,我可以将其转换回去,以便可以使用该值。 有人可以解释更多吗?

1
raw,weak_ptr,unique_ptr,shared_ptr等…如何明智地选择它们?
C ++中有很多指针,但是老实说,在5年左右的C ++编程中(特别是Qt Framework),我仅使用旧的原始指针: SomeKindOfObject *someKindOfObject = new SomeKindOfObject(); 我知道还有很多其他“智能”指针: // shared pointer: shared_ptr<SomeKindofObject> Object; // unique pointer: unique_ptr<SomeKindofObject> Object; // weak pointer: weak_ptr<SomeKindofObject> Object; 但是我对如何处理它们以及在原始指针比较中它们可以为我提供什么一无所知。 例如,我有这个类头: #ifndef LIBRARY #define LIBRARY class LIBRARY { public: // Permanent list that will be updated from time to time where // each items …

8
在这里抛出异常是一种反模式吗?
代码审查后,我刚刚讨论了设计选择。我想知道您的意见是什么。 有一个此类Preferences,它是键-值对的存储桶。空值是合法的(这很重要)。我们希望某些值可能尚未保存,并且我们希望通过在请求时使用预定义的默认值对其进行初始化来自动处理这些情况。 讨论的解决方案使用以下模式(注意:显然,这不是实际的代码-出于说明目的而进行了简化): public class Preferences { // null values are legal private Map<String, String> valuesFromDatabase; private static Map<String, String> defaultValues; class KeyNotFoundException extends Exception { } public String getByKey(String key) { try { return getValueByKey(key); } catch (KeyNotFoundException e) { String defaultValue = defaultValues.get(key); valuesFromDatabase.put(key, defaultvalue); return defaultValue; } …

1
我非常了解JavaScript,但是我炸毁了编码面试[关闭]
因此,我目前正在寻找担任前端开发人员的新职位。我非常了解JavaScript,并且可以在闭包,库里开发,原型继承,设计模式,应用程序性能和总体前端体系结构方面颇具诗意。但是,我仍然最终轰炸了求职面试。(仅供参考,我面试的大部分工作都是使用某种MVC框架构建SPA) 通常,编码测试只是我从未专业接触过的小代码片段。喜欢写一个函数来解决某种数学问题。除了一手握住手机试图让一个陌生人看到您的屏幕并看着您键入的每个字符的继承笨拙之外,我只是通常在现实世界中看不到这种东西。 这是我所缺乏的一套严肃技能吗?还是面试官在问我无关的问题。我想我应该进行函数式编程和算法印章工作,但是我没有在网络上(或印刷版中)找到许多好的资源有任何建议吗?

8
编写健壮的代码与过度设计
你们怎么知道您正在编写最强大的代码而又不会过度设计? 我发现自己对我的代码可以采用的每条可能路径都考虑得太多了,有时感觉就像是在浪费时间。我想这取决于您正在编写的程序类型,但是我不想花太多时间考虑永远不会发生的情况。

9
将来的验证码
在我工作的地方,开发人员总是告诉我“为了将来以防万一”或“我认为这样做是个好主意,因为他们可能有一天会想要它”。我认为很高兴他们能积极地预见未来的变化,但我不禁认为这是不必要的,并且冒着编写可能永远不需要的代码的风险,因此徒劳无功(我还认为有些开发人员只想尝试一些东西)全新的)。如果您只是编写良好,干净的组织代码,则用于将来证明的参数是否无效?

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.