软件工程

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

5
其他人会觉得Scrum不敏捷吗?
我是敏捷开发的忠实拥护者,几年前在一个非常成功的项目中使用了XP。我喜欢它的所有内容,迭代开发方法,围绕测试编写代码,配对编程,让客户在现场运行。那是一个高产的工作环境,我从没有感到自己受到压力。 但是我工作的最后几个地方使用/使用了Scrum。我知道这几天是敏捷开发的榜样,但我不是100%相信它是敏捷的。以下是它对我不敏捷的两个主要原因。 项目经理喜欢它 从本质上讲,他们迷恋时间表的项目经理似乎都喜欢Scrum。以我的经验,他们似乎将Sprint Backlog用作跟踪时间要求并记录在给定任务上花费了多少时间的方法。他们都没有使用白板,而是使用一张excel表格,每个开发人员都必须认真地填写该表格。 在我看来,这对于敏捷过程来说是太多的文档/时间跟踪。当我可以继续进行任务本身时,为什么我会浪费时间估计一项任务要花多长时间。或类似地,为什么我会浪费时间记录任务可以花多长时间才能转到下一个任务。 站立会议 我以前工作过的站立会议是一场噩梦。每天我们都必须解释昨天的工作以及当天的工作。如果我们按照时间“完成”一项任务,那么项目经理会发臭,并参考“ Sprint待办事项列表”,以表明您不称职不称职。 现在,我了解了交流的必要性,但可以肯定的是,日常会议的气氛应该轻松愉快,并专注于知识共享。我认为这不应该成为您家庭作业风格的诱人之处。同样可以肯定的是,敏捷的漏洞在于时间线会发生变化,它们不应该一成不变。 结论 敏捷的想法是通过使开发人员的生活更轻松来使软件更好。因此,在我看来,团队使用的任何敏捷过程都应由开发人员领导。我不认为让项目经理使用他们标记为“敏捷”的流程来跟踪项目与敏捷开发有关。 有人在想吗?
41 agile  scrum 

7
为什么不将样式/脚本嵌入HTML而不是链接?
我们将CSS和JavaScript文件连接起来以减少HTTP请求的数量,从而提高了性能。结果是这样的HTML: <link rel="stylesheet" href="all-my-css-0fn392nf.min.css"> <!-- later... --> <script src="all-my-js-0fn392nf.min.js"></script> 如果我们拥有服务器端/构建逻辑来为我们完成所有这些工作,为什么不更进一步,并将这些串联的样式和脚本嵌入HTML? <style>.all{width:100%;}.my{display:none;}.css{color:white;}</style> <!-- later... --> <script>var all, my, js;</script> 减少了两个HTTP请求,但实际上我还没有看到这种技术。为什么不?

6
与图形设计师合作的正确方法是什么?[关闭]
最近,我们与一位图形设计师(由客户安排)合作,为我们构建的Django + Bootstrap应用程序提供了外观。设计师提供了新布局的一系列静态图像,以及描述一些技术属性(字体大小,颜色,一些尺寸等)的文档。 事实证明,实现此目标非常耗时。尽管整个站点基本上都是首页,索引页和六个详细页面,但我花了至少5天时间才实现CSS和HTML更改。所以我会弯腰称这为错误的方式。 我的基本方法是: 比较静态图像和当前渲染,并注意差异。 猜猜在CSS / HTML中需要进行哪些更改 做出改变 转到步骤1。 我不了解某些特殊问题,因为该设计包括将8列更改为12列,某些图像格式错误(.png在不同的浏览器/平台组合上可能呈现不同的图像),麻烦于尝试撤消Bootstrap的样式,通常的CSS角力,以达到像素完美的渲染等效果。有时,我不得不重新组织HTML模板以获得某种行为。 正确的方法是什么?

6
代码文档中的“我”,“我们”或都不
我发现自己(希望)在以下类型的代码(C ++)文档中写了有用的注释: The reason we are doing this is... 之所以使用“我们”而不是“我”,是因为我经常在学术论文中经常偏爱“我们”。 所以这是问题。在编写代码时是否有充分的理由比另一个更好: 使用“我们”:我们这样做的原因是... 使用“我”:我这样做的原因是... 请使用我的名字:这样[my name]做的原因是... 被动语态:这样做的原因是... 都不:这样做是因为... 我之所以选择#1,是因为我习惯于以这种方式编写,但是文档不是针对作者的,而是针对读者的,所以我想知道添加开发人员名称是否有帮助,或者是否只是添加了另一件事需要在维护代码时进行更改。

4
Rich Hickey说道:“ [接口/类/类型]的所有特殊性杀死了您的重用!”是什么意思?
在Rich Hickey 在第29分钟发人深省的goto会议主题演讲“ 值的价值 ”中,他谈论的是Java之类的语言的开销,并声明“所有这些接口都会破坏您的重用”。他什么意思?真的吗? 在寻找答案时,我遇到了: 最少知识原则(又称为“德米特定律”)鼓励密闭的API接口。维基百科还列出了一些缺点。 凯夫林·汉尼(Kevlin Henney)的《帝国服装危机》认为,使用而不是重复使用是适当的目标。 杰克·迪埃德里奇(Jack Diederich)的“ 停止写作课 ”演讲反对一般的过度设计。 显然,任何写得不好的东西都是没有用的。但是,编写良好的API的接口将如何阻止使用该代码?整个历史上都有一些例子,出于一种目的制造的东西被更多地用于其他目的。但是在软件世界中,如果您出于某种非预期目的使用某种东西,通常会破坏它。 我正在寻找一个好的界面的良好示例,该界面可以防止对某些代码的合法但无意的使用。是否存在?我无法想象。

7
我想发布一个Android应用程序,但是我担心软件专利[关闭]
我写了一个可以帮助您节省能源的应用程序。其实很简单。我检查了手机的当前位置,并根据用户的位置对配置进行了一些更改,例如“声音关闭,显示黑暗,wifi关闭...”。索尼刚刚发布了一款包含我的应用程序功能的新手机(实际上,它们在选项菜单中还有一个额外的条目)。我不知道此功能是否有专利。 我什至可以发布该应用程序而不必冒险被起诉吗? 我对整个“专利”情况感到非常困惑。 我大约20岁,如果没有为律师投入大量资金,我什至无法编写一个简单的应用程序。 编辑:我不寻求法律意见。我想获得有关开发人员如何看待或处理整个情况的概述。

3
我应该使用配置文件还是数据库来存储业务规则?
我最近在阅读《实用程序员》,其中指出: 细节弄乱了我们原始的代码,尤其是如果它们经常更改。每次我们必须修改代码以适应业务逻辑,法律或管理层的个人喜好时,都会冒着破坏系统的风险—引入新的错误。 亨特,安德鲁;托马斯·戴维(1999-10-20)。实用程序员:从《旅人》到《大师》(Kindle位置2651-2653)。培生教育(美国)。Kindle版。 我目前正在编程一个具有某些模型的Web应用程序,这些模型的属性只能来自一组值,例如(由于Web应用程序数据是机密的,因此不是实际示例): light-> type =球体/立方体/圆柱体 光源类型只能是上述三个值,但根据TPP,我应始终进行编码,好像它们可以更改并将其值放置在配置文件中一样。由于在整个应用程序中都发生过几次此类事件,因此我的问题是: 我是否应该在以下位置存储类似的值: 配置文件: 'light-types' => array(sphere, cube, cylinder), 'other-type' => value, 'etc' => etc-value 数据库中的一个表,每个配置项一行 一个数据库,其中每个配置项都有一个表(例如table light_types:; columns :id、name) 其他方式? 非常感谢您提供的任何帮助/专业知识。



8
为什么java.util.ArrayList允许添加null?
我不知道为什么java.util.ArrayList允许添加null。在任何情况下我都想添加null到ArrayList吗? 我问这个问题是因为在一个项目中,我们有一个错误,其中一些代码正在添加null到,ArrayList并且很难发现该错误在哪里。显然NullPointerException抛出了a ,但是直到其他代码尝试访问该元素时才抛出。问题是如何找到添加null对象的代码。如果ArrayList在要添加元素的代码中引发异常,那会更容易。

12
C#开发是否与您使用的IDE有效分离?
我是一名学习C#的Python程序员,他正努力消除烦恼,只是喜欢C#,而不是不断将其与Python进行比较。 我有一个要点:堆栈定义问题的详细说明,缺乏对事物定义位置的明确说明。简而言之:在C#中,using foo不会告诉您提供了哪些名称foo,这类似于from foo import *Python中的一种形式-在Python编码文化中不鼓励使用隐式而不是更显式的形式from foo import bar。 对于C#程序员到此为止的Stack Overflow答案,我颇为震惊,这是在实践中,缺乏明确性并不重要,因为在您的IDE(大概是Visual Studio)中,您可以将鼠标悬停在名称上,并被告知名称来自的系统。例如: 现在,从理论上讲,我意识到这意味着当您使用文本编辑器进行查看时,您无法分辨出C#中的类型来自哪里……但是实际上,我认为这并不是问题。您实际上多久查看一次代码,却无法使用Visual Studio? 这是我的启示。许多Python程序员更喜欢使用文本编辑器进行编码,例如使用Sublime Text 2或vim之类的东西,这些都与代码有关,再加上命令行工具以及对文件夹和文件的直接访问和操作。依赖IDE来理解这种基本级别的代码的想法似乎令人反感。似乎C#文化在这一点上根本不同。而且我想知道我在学习C#时是否只需要接受并接受它。 这使我想到这里的问题:C#开发实际上与您使用的IDE密不可分吗?

6
我不会画。如何进行抛光应用?
我不是平面设计师。我很难画任何东西。我努力构建与开发工具捆绑在一起的“示例”应用程序一样美观的东西。主要是因为我不喜欢艺术品资产。 我可以采取什么策略来缓解这种情况?
41 graphics 

8
函数语言是否更擅长递归?
TL; DR:功能语言比非功能语言处理递归的效果好吗? 我目前正在阅读Code Complete2。在本书的某些时候,作者警告我们有关递归的问题。他说,应尽可能避免这样做,并且使用递归的功能通常不如使用循环的解决方案有效。例如,作者使用递归编写了一个Java函数,以计算数字的阶乘(这样可能不完全相同,因为目前我没有这本书)。 public int factorial(int x) { if (x <= 0) return 1; else return x * factorial(x - 1); } 这是一个不好的解决方案。但是,在函数式语言中,使用递归通常是首选的处理方式。例如,以下是Haskell中使用递归的阶乘函数: factorial :: Integer -> Integer factorial 0 = 1 factorial n = n * factorial (n - 1) 并被广泛接受为一个好的解决方案。正如我所看到的,Haskell非常经常使用递归,并且我看不到它被皱眉的任何地方。 所以我的问题基本上是: 功能语言比非功能语言处理递归更好吗? 编辑:我知道我使用的示例不是最好的例子来说明我的问题。我只是想指出,Haskell(通常是功能语言)比非功能语言使用递归的频率更高。

7
为什么在C ++中必须在类外部分别定义静态数据成员(与Java不同)?
class A { static int foo () {} // ok static int x; // <--- needed to be defined separately in .cpp file }; 我看不到需要A::x在.cpp文件(或用于模板的同一文件)中分别定义。为什么不能同时A::x声明和定义? 是否出于历史原因被禁止使用? 我的主要问题是,如果static同时声明/定义数据成员(与Java相同)会影响任何功能吗?

4
Scala与Java相比的性能
首先,我想明确指出,这不是确定哪种语言更好的语言-X-语言-Y的问题。 我已经使用Java很长时间了,我打算继续使用它。与此并行的是,我目前对Scala的学习非常感兴趣:除了一些让我印象深刻的小事情之外,我真的可以很好地使用这种语言。 我的问题是:在执行速度和内存消耗方面,用Scala编写的软件与用Java编写的软件相比如何?当然,通常这是一个很难回答的问题,但是我希望模式匹配,高阶函数等更高层次的结构会带来一些开销。 但是,我目前在Scala的经验仅限于50行以下代码的小示例,并且到目前为止,我还没有运行任何基准测试。因此,我没有真实数据。 如果事实证明Scala 在 Java上确实有一些开销,那么混合使用Scala / Java项目是否有意义,在该项目中,Scala中的较复杂部分和Java中的性能关键部分都可以编码?这是常见的做法吗? 编辑1 我运行了一个小型基准测试:构建一个整数列表,将每个整数乘以2并将其放入新列表中,然后打印结果列表。我编写了一个Java实现(Java 6)和一个Scala实现(Scala 2.9)。我已经在Ubuntu 10.04下的Eclipse Indigo上都运行了。 结果是可比的:Java 480 ms,Scala 493 ms(平均100次迭代)。这是我使用过的片段。 // Java public static void main(String[] args) { long total = 0; final int maxCount = 100; for (int count = 0; count < maxCount; count++) { final long t1 …

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.