软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

7
什么时候使用浮点数,什么时候使用双精度点
在我的编程经验中,我经常需要决定是否对实数使用float或double。有时我会选择浮动,有时我会选择双重,但这确实让我感觉更加主观。如果我要捍卫自己的决定,我可能不会给出合理的理由。 什么时候使用float和什么时候使用double?仅当存在内存限制时,您才总是使用double吗?或者,除非精度要求要求您使用double,否则您始终使用float?浮点数和双精度数之间关于基本算术的计算复杂度是否存在实质性差异?使用float或double的利弊是什么?你甚至用过长双吗?
194 c++  c  floating-point  numbers 

15
使用布尔参数确定行为是否错误?
我不时看到一种“感觉”错误的做法,但是我不能很清楚地指出它的错误之处。也许这只是我的偏见。开始: 开发人员定义一个使用布尔值作为其参数之一的方法,然后该方法调用另一个,依此类推,最终使用该布尔值,仅用于确定是否要执行特定操作。例如,仅当用户具有某些权限时,或者如果我们(或不在)测试模式,批处理模式或实时模式下,或者仅当系统处于运行状态时,才可以使用此权限来执行操作一定的状态。 嗯,总有另一种方法可以做到,无论是通过查询何时该采取行动(而不是传递参数),还是通过该方法的多个版本或该类的多个实现,等等。我的问题是与其说如何改善它,不如说是真的不对(正如我怀疑的那样),如果真的对的话,那是什么问题。


17
始终拥有一个自动增量整数主键是一种好习惯吗?
在我的数据库中,我倾向于养成使用自动递增的整数主键的习惯,该主键带有id我制作的每个表的名称,以便对任何特定的行进行唯一的查找。 这是一个坏主意吗?这样做有什么弊端吗?有时我会拥有多个指标喜欢id, profile_id, subscriptions这里id是唯一的标识符,profile_id链接到国外id一的Profile表等 还是在某些情况下您不想添加这样的字段?

20
“ break”和“ continue”是否是不好的编程习惯?
我的老板一直提满不在乎地那么糟糕的程序员使用break,并continue在循环中。 我一直在使用它们,因为它们很有意义。让我向您展示灵感: function verify(object) { if (object->value < 0) return false; if (object->value > object->max_value) return false; if (object->name == "") return false; ... } 这里的要点是,首先该功能检查条件是否正确,然后执行实际功能。IMO同样适用于循环: while (primary_condition) { if (loop_count > 1000) break; if (time_exect > 3600) break; if (this->data == "undefined") continue; if (this->skip == true) continue; ... …

5
设计命令行参数的良好习惯是什么?
在开发应用程序时,我开始怀疑-我应该如何设计命令行参数? 很多程序都使用公式是这样-argument value或/argument value。我想到的解决方案是argument:value。我认为这是很好的,因为没有空格就无法将值和参数弄乱。同样,很容易将字符串从左:字符的第一个字符拆分为两个。 我的问题是: 流行的-argument value公式是否比argument:value(更易读,更容易编写,没有错误,更易于专家开发人员理解)更好? 在设计命令行参数时,是否应该遵循一些众所周知的规则(如果可行,可以的话)? 要求提供更多详细信息,我将提供它。但是,我认为它们不应影响答案。问题在于总体上的良好习惯。我认为它们对于各种应用程序都是相同的。 我们正在开发一个将在公共场所(触摸图腾,桌子)使用的应用程序。应用程序是使用Qt Quick 5(C ++,QML,JS)编写的。设备将安装Windows 8.1 / 10。我们将提供前端界面来管理设备。但是,某些高级管理员可能希望自己配置应用程序。从业务的角度来看这不是很重要,但是正如我同意Kilian Foth所说的那样,我不希望我的应用程序给用户带来麻烦。在互联网上找不到我想要的内容。 对于更高级的Stack Exchange用户:我希望这个问题笼统。也许它符合社区Wiki的资格(我不知道是否可以将现有问题转换为答案)。因为我希望这个问题与操作系统和编程语言无关,所以这里出现的答案对于其他开发人员来说可能是一个宝贵的教训。
190 design  parameters  cli 

8
在PHP中使用<?=标记是不好的做法吗?
我最近遇到过这个PHP标签&lt;?= ?&gt;,但我不愿意使用它,但是它痒得很厉害,以至于我想请您使用它。我知道使用短标签是一种不好的做法,&lt;? ?&gt;而应该使用完整标签&lt;?php ?&gt;,但是这个&lt;?= ?&gt;呢? 这将节省一些键入内容,并且对于代码可读性更好,IMO。所以代替这个: &lt;input name="someVar" value="&lt;?php echo $someVar; ?&gt;"&gt; 我可以这样写,它更干净: &lt;input name="someVar" value="&lt;?= $someVar ?&gt;"&gt; 使用此运算符是否会皱眉?
189 php  shortcuts 

19
什么时候比MVC更喜欢ASP.NET WebForms
我知道微软已经说过 ASP.NET MVC不能替代WebForms。 一些开发人员说,WebForms的开发速度比MVC快。但是我相信编码速度会下降到该技术的舒适水平,因此我不希望有任何答案。 鉴于ASP.NET MVC为开发人员提供了对其应用程序的更多控制权,为什么不认为WebForms已过时?或者,什么时候我应该在新开发中比MVC更喜欢WebForms?

2
AGPL-您可以做什么和不能做什么
AGPL是一个相当新的许可证,旨在通过网络进行GPL。但是,由于不是律师,并且实际上没有阅读完整的许可证,所以我无法理解您可以自由地做什么以及使用AGPL不能做什么。 我对本文的不确定性来自有关MongoDB(AGPL)的帖子,甚至来自以下评论。 如果我们遵循这些评论,事实证明,只要不修改库,就可以将AGPL库与开源的商业服务器端软件一起使用。是这样吗 还是在使用AGPL许可的库时必须分发整个应用程序? MongoDB的情况是它使用Apache许可证作为客户端代码,这带来了另一个问题。如果您使用AGPL软件,但将其部署为与闭源商业软件不同的应用程序,会发生什么?例如,以iText-它是一个AGPL库: 如果使用它并对其进行修改,是否必须开源整个应用程序,或者仅重新分发iText中的更改? 如果您使用它并且不对其进行修改,是否必须开源整个应用程序? 如果将iText包装在另一个应用程序中,而该iText是作为一个单独的进程启动的,但又从主应用程序中使用它,则应该开源所有内容,还是仅包装应用程序?(包装器应用程序将是基于HTTP的API,它将接收pdf文件,并返回将iText作为JSON使用的结果)。可以用来规避AGPL许可证吗? 注意:问题是关于AGPLv3
188 licensing  agpl 

12
将大文件(10 MB)存储在数据库中是不好的做法吗?
我当前正在创建一个Web应用程序,允许用户存储和共享1 MB-10 MB的文件。 在我看来,将文件存储在数据库中将大大降低数据库访问速度。 这是一个有效的问题吗?将文件存储在文件系统中并将文件名和路径保存在数据库中是否更好?使用数据库时,是否有与存储文件有关的最佳实践? 我正在该项目的PHP和MySQL中工作,但是对于大多数环境(Ruby on Rails,PHP,.NET)和数据库(MySQL,PostgreSQL)都是相同的问题。

22
我如何处理代码审查中关于不太可能出现的边缘情况的分歧?
我在路径覆盖小组的一家机器人初创公司工作,提交拉取请求后,我的代码得到了审查。 我的团队成员已经在团队中工作了一年多,对我的代码进行了一些注释,这些注释表明我所做的工作比我认为必要的要多得多。不,我不是一个懒惰的开发人员。我喜欢优雅的代码,它具有良好的注释,变量名,缩进并能正确处理大小写。但是,我不同意他的组织类型。 我将提供一个示例: 我花了一天的时间编写测试用例,以对我所做的过渡发现算法进行更改。他曾建议我处理一个不太可能发生的模糊案件-实际上,我不确定该案件是否有可能发生。我编写的代码已经可以在我们所有的原始测试用例和发现的一些新用例中使用。我编写的代码已经通过了每晚运行的300多次仿真。但是,处理这种晦涩的案例将花费我13个小时,最好花时间去尝试改善机器人的性能。需要明确的是,迄今为止我们一直使用的以前的算法也无法处理这种晦涩的情况,并且在生成的40k报告中,没有一次发生过这种情况。我们是一家初创公司,需要开发产品。 我以前从未进行过代码审查,而且不确定自己是否太过争论。我应该保持安静,做他的话吗?尽管我强烈不同意这是对时间的充分利用,但我还是决定保持低调并做出改变。 我尊重我的同事,并承认他是一个聪明的程序员。我只是在一点上不同意他,而且不知道如何在代码审查中处理不同意见。 我觉得我选择的答案满足了解释初级开发人员如何处理代码审查中的分歧的标准。

21
我的代码大部分都存在主要的设计缺陷。完成还是现在修复?[关闭]
我是一名高中生,和我的一个朋友一起从事C#项目,他的技能与我差不多。到目前为止,我们已经在100次提交中编写了大约3,000行代码和250行测试代码。由于学校的原因,我推迟了几个月的项目,最近我又可以将其重新备份。 备份时,我了解到我编写的代码设计不良,例如在渲染器中包含过多线程,在模拟CPU,GPU和游戏卡带之间的交互中无法很好地防止竞争情况,以及仅仅是多余和令人困惑的代码。 问题是我什至没有完成程序的主要功能,所以我无法真正重构,因此我不鼓励继续完全意识到我的代码设计有缺陷。同时,我不想放弃该项目。已经取得了很大的进步,工作绝不能浪费。 我似乎有两种选择:通过解决不良的设计来简单地完成功能,然后在一切正常进行后进行重构,暂停一切并在完成其余功能之前努力解决一切,开始项目到处都是新鲜的东西,或者由于项目过大(基本上是“回到绘图板”)而彻底放弃该项目。 根据他人在此类项目中的经验,如何使自己重回正轨?根据该站点上的答案,普遍的共识是,通常不需要重写,但是如果不能在不付出过多成本的情况下维护代码,则可以使用重写。我确实很想继续这个项目,但是就目前而言,我的代码设计得不够好,无法继续进行下去,而沮丧的情绪使我无法继续进行下去。

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


20
如何在代码审查中找到积极的东西?
在去年出现了一些严重的质量问题之后,我公司最近引入了代码审查。很快引入了代码审查过程,没有任何准则或任何清单。 我和另一位开发人员选择在合并到主干中之前查看对系统所做的所有更改。 我们还被选为“技术主管”。这意味着我们对代码质量负责,但我们无权执行流程中的更改,重新分配开发人员或保留项目。 从技术上讲,我们可以拒绝合并,然后将其恢复开发。实际上,这几乎总是以我们的老板要求准时交货为目的。 我们的经理是MBA,主要负责制定近期项目的时间表。在尝试过程中,他几乎不知道从业务角度来看我们的软件的功能,并且即使没有开发人员的解释,也难以理解最基本的客户需求。 目前,开发工作是在SVN的开发分支中完成的,开发人员认为准备就绪后,便将票务系统中的票证重新分配给我们的经理。然后,经理将其分配给我们。 代码审查导致我们团队内部出现一些紧张关系。尤其是一些年长的成员对更改提出了质疑(即“我们总是这样做”或“为什么该方法应有一个明智的名称,我知道它的作用?”)。 在最初的几周后,我的同事开始放任自流,以免给同事造成麻烦(她告诉我自己,在客户提交错误报告后,她知道该错误,但担心该错误开发人员会对她指出这一点感到生气)。 另一方面,我现在以指出问题的方式而闻名。 我认为我的标准不是太高。 我目前的清单是: 该代码将编译。 代码至少有一种工作方式。 该代码将适用于大多数正常情况。 该代码将适用于大多数情况。 如果插入的数据无效,则代码将引发合理的异常。 但是我完全接受提供反馈意见的方式的责任。我已经在提出可行的观点,解释了为什么应该更改某些内容,有时甚至只是询问为什么要以特定方式实现某些内容。当我认为这很糟糕时,我指出我会以另一种方式开发它。 我所缺乏的是找到能够指出“好”东西的能力。我读到有人应该把坏消息夹在好消息中。 但是我很难找到一件好事。“嘿,这一次您实际上承诺了所做的所有事情”比谦虚或乐于助人更自负。 示例代码审查 嘿乔, 我对Library \ ACME \ ExtractOrderMail类中的更改有一些疑问。 我不明白为什么您将“ TempFilesToDelete”标记为静态?此刻,对“ GetMails”的第二次调用将引发异常,因为您在其中添加了文件,但是在删除它们后再也不会删除它们。我知道该函数每次运行仅调用一次,但是将来可能会更改。您能否将其设为实例变量,然后我们可以并行使用多个对象。 ...(其他一些无效的地方) 次要点: 为什么“ GetErrorMailBody”将异常作为参数?我错过了什么?您不会抛出异常,只需将其传递并调用“ ToString”即可。这是为什么? SaveAndSend不是该方法的好名字。如果邮件处理出错,则此方法发送错误邮件。您可以将其重命名为“ SendErrorMail”或类似名称吗? 请不要只注释旧代码,请将其彻底删除。我们仍然在颠覆它。
184 code-reviews 

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.