Questions tagged «programming-practices»

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

16
为什么将x + = y之类的快捷方式视为良好做法?
我不知道这些实际上是什么,但我一直都在看到它们。Python的实现类似于: x += 5作为的简写x = x + 5。 但是,为什么这被认为是好的做法?我在阅读过的每本有关Python,C,R等的书籍或编程教程中都涉及到它。我知道这很方便,可以节省三个按键,包括空格。但他们似乎总是我绊倒,当我阅读代码,至少在我看来,使它少可读性,而不是更多。 我是否遗漏了一些在所有地方都使用过的明显原因?

16
杂乱无章的Java文化-为什么事情如此繁重?它优化了什么?[关闭]
我以前经常用Python编写代码。现在,出于工作原因,我使用Java编写代码。我从事的项目相当小,也许Python会更好地工作,但是有使用Java的非工程性正当理由(我无法详述)。 Java语法没问题;这只是另一种语言。但是,除了语法外,Java还具有被视为“正确”的文化,一套开发方法和实践。现在,我完全无法“培养”这种文化。因此,我将不胜感激正确方向的解释或指点。 我开始的堆栈溢出问题中提供了一个最小的完整示例:https://stackoverflow.com/questions/43619566/returning-a-result-with-several-values-the-java-way/43620339 我有一个任务-解析(从单个字符串)并处理一组三个值。在Python中,它是一个单行(元组),在Pascal或C中,它是一个五行记录/结构。 根据答案,可以在Java语法中使用struct的等效项,在广泛使用的Apache库中使用struct的等效项-但是“正确”的实现方法实际上是通过为值创建一个单独的类,并完成吸气剂和二传手。有人很乐意提供一个完整的例子。它是47行代码(嗯,其中一些行是空白)。 我知道,庞大的开发社区可能并非“错误”。因此,根据我的理解,这是一个问题。 Python实践优化了可读性(按照这种哲学,导致了可维护性),然后提高了开发速度。C惯例针对资源使用进行了优化。Java实践针对什么进行了优化?我最好的猜测是可伸缩性(一切都应准备好以百万计的LOC项目的状态),但这是一个非常微不足道的猜测。

16
项目已接近完成,但程序上有意粉代码。我要重写还是继续尝试发送?[关闭]
我是一名初学者Web开发人员(一年的经验)。 毕业几周后,我得到了一份工作,为一家所有者不是很多技术人员的公司构建Web应用程序。他招募我是为了避免他的想法失窃,服务公司收取高昂的开发成本,并希望他有一个年轻的人来长期维护该项目(我被录用后很久才得出这些结论)。 当时我还是Cocky,拥有计算机科学文凭,我接受了这个提议,认为我可以构建任何东西。 我在做主。经过一些研究,我选择了PHP,并从纯PHP开始,没有对象,只有丑陋的过程代码。两个月后,一切都变得混乱了,很难取得任何进展。Web应用程序非常庞大。因此,我决定检查一个MVC框架,这将使我的生活更轻松。那就是我偶然发现PHP社区中一个很酷的孩子的地方:Laravel。我喜欢它,它很容易学习,因此我立即开始编码。我的代码看起来更简洁,更有条理。看起来很好。 但是同样,Web应用程序非常庞大。该公司迫使我交付第一个版本,显然他们希望部署该版本并开始寻找客户。 因为Laravel很有趣,所以让我想起了为什么我首先选择了这个行业-在陷入糟糕的教育体系时我忘记了这一点。 因此,我从晚上开始从事小型项目,了解方法和最佳实践。我回顾了OOP,然后进行了面向对象的设计和分析,并阅读了Bob叔叔的书Clean Code。 这使我意识到我真的一无所知。我不知道如何正确地构建软件。但是到现在为止为时已晚,现在我快完成了。我的代码根本不是干净的,仅仅是意大利面条式的代码,是修复错误的真正痛苦,所有逻辑都在控制器中,并且几乎没有面向对象的设计。 我一直坚持认为我必须重写整个项目。但是,我做不到……他们一直在问什么时候才能完成。 我无法想象此代码部署在服务器上。另外,我仍然对代码效率和Web应用程序的性能一无所知。 一方面,公司正在等待产品,不能再等待了。另一方面,我看不到实际代码会更进一步。我可以完成,总结并部署,但是上帝只知道人们开始使用它时会发生什么。 我要重写还是继续尝试发送,还是错过了另一个选择?


17
Torvalds关于优秀程序员的报价[关闭]
偶然地,我偶然发现了Linus Torvalds的以下引用: “糟糕的程序员会担心代码。好的程序员会担心数据结构及其关系。” 最近几天我一直在考虑这个问题,但我仍然感到困惑(这可能不是一个好兆头),因此我想讨论以下内容: 对这种可能/合理的解释是什么? 从中可以学到什么?

16
解释复杂代码的注释有什么问题?
许多人声称“评论应解释“为什么”,而不是“如何””。其他人则说“代码应该是自我记录的”,注释应该很少。罗伯特·C·马丁(Robert C. Martin)声称(用我自己的话改写)经常“评论是写得不好的代码的道歉”。 我的问题如下: 解释复杂的算法或带有描述性注释的冗长而复杂的代码段有什么问题? 这样,无需其他开发人员(包括您自己)逐行阅读整个算法来弄清楚算法的作用,他们只需阅读您用普通英语编写的友好描述性注释即可。 英语是“设计”成易于人类理解的。但是,Java,Ruby或Perl旨在平衡人类可读性和计算机可读性,从而损害了文本的人类可读性。人可以更快地理解英语,而他/她可以理解具有相同含义的代码(只要操作不琐碎)。 因此,在编写了用部分人类可读的编程语言编写的复杂代码之后,为什么不添加友好而易懂的英语的描述性简明注释来解释代码的操作呢? 有人会说“代码不难理解”,“使函数变小”,“使用描述性名称”,“不要编写意大利面条式代码”。 但是我们都知道这还不够。这些仅是准则-重要且有用的准则- 但它们并不能改变某些算法很复杂的事实。因此在逐行阅读它们时很难理解。 用一些关于它的一般操作的注释来解释一个复杂的算法真的很糟糕吗?用注释解释复杂的代码有什么问题?

6
在git存储库中的单个或多个项目之间进行选择?
在git我们已将大多数项目模块化的环境中,我们面临着每个存储库一个项目或每个存储库设计问题多个项目的问题。让我们考虑一个模块化项目: myProject/ +-- gui +-- core +-- api +-- implA +-- implB 今天,每个存储库有一个项目。它给了自由 release 个别组件 tag 个别组件 但这对于branch组件也很麻烦,因为分支通常api需要和中的等效分支core,并且可能还有其他组件。 鉴于我们希望使用release单个组件,我们仍然可以通过每个存储库设计利用多个项目来获得类似的灵活性。 有哪些经验?您如何/为什么解决这些问题?

15
为什么程序这么大?
如果我们看一下老式程序Netscape Navigator或Microsoft Word的早期版本,则这些程序的大小不到50 MB。现在,当我安装google chrome时,它是200 MB,而Slack的桌面版本是300 MB。我读到一些规则,即程序将占用所有可用内存,无论内存多少,但为什么呢? 为什么与10或15年前相比,当前的程序规模如此之大?这些程序并未执行更多的功能,并且看起来也没有太大不同。现在的资源消耗是什么?

17
进行过程中编译代码是否有好处?
我最近接受了一次面试,他们给了我一个小时的时间来编写一些真实的代码。这不是一个很大的数目,可能少于100行。大约45分钟后,我进行了编译,运行并开始运行。我可能花了5到10分钟的时间来解决编译错误和一些小错误,但总体来说还是很顺利的。(顺便说一句,我确实从他们那里得到了报价。) 但是,令我感到困惑的是,在我交出完整的代码后,面试官告诉我,我做错的唯一一件事就是“在进行过程中没有进行编译”。我问他有什么区别,他说:“如果您完成了代码并且没有及时编译,您将怎么做”。 以我的理解,这是一个无效的参数,因为对于给定长度的代码,“获取代码进行编译”通常涉及固定数目的编译错误,并且花费的时间也相当恒定,无论之后是否这样做,这应该是相同的完成编写代码,或者如果您将其与编码时间交织在一起。如果有的话,中断您的编码以搜索丢失的分号可能会损害您的效率。除非在极端情况下,当我尝试对派生类中的虚函数等事物的边缘情况进行模糊处理时,可以合理地预期由有经验的开发人员编写的代码将进行编译,减去偶然的输入错误,甚至如果没有,那就是 在另一起类似的事件中,在一次采访中给我一个不完整的代码库,要求我完成它并进行必要的修改以使其运行。我从阅读现有代码开始,然后过了几分钟(甚至在我看完代码之前),面试官告诉我就足够了。当我问他会做些什么(即“我做错了什么”)时,他告诉我他本来会立即获取代码进行编译。 为什么这甚至有意义?以我的观点和经验来看,一段代码的编译本质上是随机的,涉及诸如分号是否丢失之类的事情,并且与底层程序的正确性无关。(对我来说,专注于编译就像通过拼写检查来运行文章,而无需进行校对来检查语法。) 如果您给我一段不完整的代码,我要做的第一件事就是阅读它。在我不知道代码在做什么并且算法正确之前,我什至不会尝试编译它。 无论如何,这些只是最近发生的几起事件,但总的来说,我听说许多开发人员都在谈论他们在进行代码编译的过程,但是没人能告诉我这样做的好处。我了解在进行代码测试的好处,但是为什么要编译? 所以我的问题是:我错过了什么吗?进行编译实际上有好处吗?还是由软件社区传播的某种神话,您必须经常编译代码?

17
在日常工作中,您如何在“做到正确”和“尽快做到”之间取得平衡?[关闭]
我发现自己不时地反复思考这个问题。我想以正确的方式做事:编写易于维护的干净,可理解和正确的代码。但是,我最终要做的是在一个补丁上写一个补丁。仅仅因为没有时间,客户在等待,应该一夜之间解决错误,公司在这个问题上赔钱,经理在努力争取等等,等等。 我完全清楚,从长远来看,我在这些补丁上浪费了更多时间,但是由于这段时间要花几个月的时间,所以没人在乎。而且,正如我的一位经理曾经说过的那样:“如果我们现在不解决这个问题,我们不知道是否会长期存在。” 我确信我不是唯一一个陷入无尽的真实/理想选择周期的人。那么,我的程序员同伴如何应对呢? 更新:谢谢大家的有趣的讨论。令人遗憾的是,如此之多的人每天不得不在代码的数量和质量之间进行选择。仍然令人惊讶的是,许多人仍然认为有可能赢得这场战斗,所以谢谢大家的鼓励。

22
因“知道太多”而陷入困境
请在http://news.ycombinator.com/item?id=4037794注意更多讨论 我有一个相对简单的开发任务,但是每次尝试攻击它时,我都会陷入深刻的思绪-它如何扩展未来,第二代客户将需要什么,它将如何影响“无功能”方面(例如性能,授权...),如何最好地架构师允许更改... 我记得自己有一阵子,更年轻,也许更渴望。那时我当时不会想到的“我”-他会继续写一些东西,然后重写,然后再次重写(再一次……)。今天的“我”更加犹豫,更加谨慎。 我发现今天坐下来并计划和指导他人如何做比实际自己去做要容易得多-不是因为我不喜欢编码-相反,我喜欢这样做!-但是因为每次我坐在键盘上时,我都会到那个烦人的地方。 这是错的吗?这是自然的演变,还是我让自己陷入了困境? 公开披露-过去我是一名开发人员,今天我的职务是“系统架构师”。祝你好运,弄清楚它的意思-但这就是标题。 哇。老实说,我没想到这个问题会引起如此多的答复。我会尝试总结一下。 原因: 分析瘫痪/过度工程/镀金/(其他“过多的思考可能会伤害您”)。 给定任务的经验过多。 不专注于重要的事情。 没有足够的经验(并意识到这一点)。 解决方案(与原因不匹配): 首先测试。 开始编码(+表示乐趣) 一个扔掉(+一个API扔掉)。 设置时间限制。 剥去绒毛,留在里面。 编写灵活的代码(有点像“一个扔掉”,不是吗?)。 多亏了所有人-我认为这里的主要好处是认识到我并不孤单。实际上,我已经开始编码了,有些太大的事情自然就消失了。 由于该问题已经关闭,因此,我将以今天最多的票数接受答案。当/如果它发生变化-我将尽力遵循。

2
Git分支和标记最佳实践
我目前正在通过阅读Pro Git学习使用Git。现在,我正在学习分支和标签。我的问题是什么时候应该使用分支,什么时候应该使用标签? 例如,假设我为项目的1.1版创建了一个分支。完成并发布此版本后,是否应该离开分支以标记发布版本?还是应该添加标签?如果添加标签,是否应该删除版本分支(假设它已合并到master或其他分支中)?

17
我怎么知道我的方法应该是可重用的?[关闭]
我在家照顾自己的生意,妻子来找我说 亲爱的..您可以在控制台中打印2018年全球所有的日光节约时间吗?我需要检查一下。 我非常高兴,因为那是我一直在等待一生的Java经验,并提出了: import java.time.*; import java.util.Set; class App { void dayLightSavings() { final Set<String> availableZoneIds = ZoneId.getAvailableZoneIds(); availableZoneIds.forEach( zoneId -> { LocalDateTime dateTime = LocalDateTime.of( LocalDate.of(2018, 1, 1), LocalTime.of(0, 0, 0) ); ZonedDateTime now = ZonedDateTime.of(dateTime, ZoneId.of(zoneId)); while (2018 == now.getYear()) { int hour = now.getHour(); now = now.plusHours(1); …

15
单字符常量比文字常量好吗?
最近,我遇到了一个类,该类几乎将每个单个字符都提供为常量。从COMMA到的一切BRACKET_OPEN。想知道这是否必要;我读了一篇“文章”,它暗示将单字符文字转换为常量可能会有所帮助。所以,我对此表示怀疑。 使用常量的主要吸引力在于,当需要更改时,它们可以最小化维护。但是,什么时候开始使用不同于','的符号来表示逗号呢? 我看到使用常量而不是文字的唯一原因是使代码更具可读性。但是city + CharacterClass.COMMA + state(例如)真的比city + ',' + state吗? 对我而言,弊大于利,主要是因为您介绍了另一类和另一项内容。而且我相信尽可能减少代码。因此,我想知道这里的普遍共识是什么。

11
系统复杂性的增加如何影响连续几代程序员?
作为一名“新”程序员(我于2009年首次写了一行代码),我注意到创建一个程序时相对容易,该程序现在可以显示诸如.NET框架之类的非常复杂的元素。现在,只需很少的命令即可创建可视界面或对列表进行排序。 在学习编程的同时,我也在并行学习计算理论。诸如排序算法,硬件如何协同工作的原理,布尔代数和有限状态机之类的东西。但是我注意到,如果我想测试我从理论上学到的一些非常基本的原理,那么入门总是要困难得多,因为很多技术被诸如库,框架和操作系统之类的东西所遮盖。 40/50年前就需要制作一个内存有效的程序,因为内存不足,而且价格昂贵,因此大多数程序员都密切关注数据类型以及处理器如何处理指令。如今,有些人可能会争辩说,由于处理能力和可用内存的增加,这些问题已不再是重点。 我的问题是,年长的程序员是否将此类创新视为天赐之物或抽象的附加层,为什么他们会这样认为?在探索扩展库领域之前,年轻的程序员是否会从学习低级编程中受益?如果是这样,那为什么呢?

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.