软件工程

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

6
为什么编程语言允许对变量和函数进行阴影/隐藏?
许多最流行的编程语言(例如C ++,Java,Python等)都具有隐藏或隐藏变量或函数的概念。当我遇到隐藏或阴影时,它们是导致难以发现错误的原因,而且我从未见过需要使用这些语言功能的情况。 在我看来,禁止隐藏和遮盖似乎更好。 有人知道这些概念的好用法吗? 更新: 我不是指封装类成员(私有/受保护的成员)。

10
为什么很难让员工更新问题跟踪器?
在公司和工作中,我一直都在努力让人们更新他们的问题。我曾有几次案例,人们实际上是出于内心的善意而这样做的,但是大约70%的时间我必须追赶人们。 作为通常执行某种或其他形式的管理(我首先是一名开发人员)的人,我尝试给出的主要原因是我不想追赶人们并打扰询问进度,但是我不愿意最终人们不会认为有很多问题要问。在某些罕见和极端的情况下,我最终会更新票证(当我需要创建报告时)。 那么,您是否遇到过这个问题?您如何鼓励开发人员经常更新问题跟踪器?您取得了多少成功?

3
如果Windows上没有线程支持,GCC会死吗?[关闭]
我需要一些意见。GCC一直是一个非常好的编译器,但是最近它失去了“吸引力”。我刚刚发现Windows上没有GCC std::thread支持,由于仍然缺少最激动人心的功能,因此迫使Windows用户使用其他编译器。 但是,为什么GCC确实在Windows下仍然没有线程支持?许可问题?ABI不兼容?(嗯,已经有几个使用多线程的跨平台库:boost,POCO,SDL,wxwidgets等。使用已经存在且已获得MIT / libpng许可的代码来适应这个漏洞而不是发布GCC版本不是很简单吗?没有线程支持?) 最近,通过对编译器的比较,GCC对C ++ 11功能的支持比其他编译器要大,除了在Windows上这不是事实,因为我们仍然缺少原子,互斥体和线程:/ 我想了解更多有关此主题的信息,但我唯一能找到的人是寻求帮助的人,因为: std名称空间中不存在“线程” 从GCC / TDM-GCC的票务跟踪和邮件讨论开始,自2009年以来就一直在寻求线程支持的请求。可能在4年后仍然没有解决方案吗?到底发生了什么事?

2
如何自动生成Guava单元测试?
番石榴具有自动生成的单元测试用例: 番石榴的单元测试数量惊人:截至2012年7月,番石榴测试包包括286,000多个单独的测试用例。其中大多数都是自动生成的,而不是手工编写的,但是Guava的测试覆盖面非常全面,尤其是对于com.google.common.collect。 它们是如何产生的?使用了哪些技术和技术来设计和生成它们?

5
执行不受信任的代码的最佳实践
我有一个项目,需要允许用户对我的服务器运行任意的,不受信任的python代码(有点像这样)。我是python的新手,我想避免犯任何会给系统带来安全漏洞或其他漏洞的错误。您是否可以提供最佳实践,推荐阅读或其他建议,以使我的服务可用但不可滥用? 到目前为止,这是我考虑过的内容: __builtins__从exec上下文中删除以禁止使用潜在危险的软件包,例如os。用户将只能使用我提供给他们的软件包。 使用线程强制合理的超时。 我想限制可以在exec上下文中分配的内存总量,但是我不确定是否可能。 有一些替代Straight的方法exec,但是我不确定其中哪些方法会有所帮助: 使用ast.NodeVisitor捕获任何尝试访问不安全对象的尝试。但是我应该禁止哪些物品? 搜索输入中的任何双下划线。(比上面的选项不太优雅)。 使用PyPy或类似于沙箱的代码。 注意:我知道至少有一个基于JavaScript的解释器。在我的情况下,这行不通。


2
什么是C ++ / CX和C ++ / CLI,它们与C ++和WinRT有何关系?
我当时正在考虑接受学习C ++来设计Metro应用程序的挑战,那是我遇到C ++ / CX的时候。 Metro应用程序可以用C ++ 11编码吗?他们需要C ++ / CX才能工作吗?C ++ / CX到底是什么?是否可以仅使用C ++创建Metro应用,还是需要C ++ / CX?另外,C ++ / CLI如何与这张图片联系起来?
31 c++  windows-8  winrt 

3
Sublime的“小地图”会提高生产率吗?[关闭]
我是Sublime的忠实粉丝。我最喜欢的功能之一是能够通过使用右上角的文本的压缩图像(微型地图)来滚动浏览文件。我的直觉是,这对生产力有积极的作用: 滚动此小地图是否真的提高了生产率? PS-附加问题:Sublime是发明这个想法的,还是从另一个文本编辑器获得的?

8
什么时候需要“成千上万”的线程?
Erlang,Go和Rust都以一种或另一种方式声称它们支持使用廉价的“线程” /协程进行并发编程。在转到FAQ状态: 在同一个地址空间中创建数十万个goroutine是很实际的。 该防锈教程说: 由于创建任务比传统线程便宜得多,因此Rust可以在典型的32位系统上创建数十万个并发任务。 Erlang的文档说: 为了支持具有数十万甚至数百万个进程的Erlang系统,默认的初始堆大小为233个字是非常保守的。 我的问题:哪种应用程序需要这么多并发执行线程?只有最繁忙的Web服务器才能同时接收数千名访问者。当线程/进程的数量远大于物理核心的数量时,我编写的老板/工作调度型应用程序命中率递减。我想这对于数字应用程序可能有意义,但实际上,大多数人将并行性委托给以Fortran / C / C ++编写的第三方库,而不是这些较新一代的语言。

6
为什么实践中quicksort比其他排序算法更好?
这是Janoma对cs.SE的一个问题的转贴。对他或CS SE的全部荣誉和破坏。 在标准算法课程中,我们学会了快速排序平均为O(n log n),在最坏情况下为O(n²)。同时,还研究了其他排序算法,它们在最坏的情况下为O(n log n)(例如mergesort和heapsort),在最坏的情况下甚至是线性时间(例如bubbleort),但还有一些额外的内存需求。 快速浏览一下更多的运行时间后,自然可以说quicksort 应该不如其他高效。 另外,考虑到学生在基础编程课程中学习到,递归通常并不太好,因为它会占用过多的内存,等等。因此(尽管这不是一个真正的论点),但这样的想法是快速排序可能不是真的很好,因为它是一种递归算法。 那么,为什么在实践中快速排序优于其他排序算法?它与真实数据的结构有关吗?它与计算机中内存的工作方式有关吗?我知道有些记忆要比其他记忆快,但是我不知道这是否是这种违反直觉的表现的真正原因(与理论估计相比)。

2
网站应该使用自己的公共API吗?
我开始写一个Web服务,并且已经使用nodeJS和RESTfulish方法构建了。 根据我的收集: 好处是您不必重复代码。 缺点是您: 将经常更新公共API,但应通过版本控制解决 不能真正进行服务特定的缓存和优化 什么是最佳做法?Stack Exchange,Github,Twitter等网站是否为客户使用自己的API?
31 api 

3
为什么堆栈向下生长?
我假设有历史,但是堆栈为什么向下增长? 在我看来,像缓冲区溢出将是一个很大很难利用如果堆栈向上增长...
31 cpu  stack 

7
敏捷团队是否应该每天提供新功能?
我的公司正处于从瀑布式开发到敏捷/ Scrum的过渡中。别的不说,我们被告知的期望是的,我们有新的工作,可测试(由QA)在每一天结束的功能。 我们的大多数开发人员每天损失约2个小时的会议时间和其他企业开销。这意味着在任何给定的6个小时(最好)的时间内,我们必须设计,编写,单元测试,构建和部署(带有发行说明)足够的代码,以产生可供QA使用的完整功能。我知道可以使用正确的CI设置来自动进行构建/部署/发布说明,但我们还没有。 我们还拥有一支庞大的海上队伍来编写我们的服务器端代码,而12小时的时差使这一点变得更加困难。 我们试图将故事分成狭窄的垂直部分,以尽可能快地完成端到端的功能,但是大多数日子过得很疯狂,我经常发现人们采取愚蠢而脆弱的捷径来确保QA的建立。在冲刺进行了几天之后,不可避免的缺陷开始出现并且必须适应相同的6小时窗口,此问题变得更加复杂。 对于敏捷团队来说,这是正常的步伐吗?即使我们设法实现CI设置,我也看不到我们如何能够保持这种步伐并仍然创建高质量的软件。 编辑: 这里有几个很好的答案。这让我意识到,我真正要问的是,敏捷团队是否应该每天提供新功能。我相应地更新了标题。
31 agile  scrum 

5
高级工程师:返回编码?
这是一个关于拥有20年以上经验的工程师的问题,但这是每个人的问题,因为它与职业发展有关。 我正在寻找一个令人惊讶的长期求职者,问题似乎是雇主们不会接受我作为编码员。是的,我做过很多事情,拥有自己的公司,过早出售它,等等。但是,世界总是需要生产工人,而我的技能是最新且敏锐的。我所处的市场对老年人的空缺较少,如果我能找到一个贡献的地方,我不介意退后一两步。您对40岁,50岁的年轻人为突然的职业破坏做好准备的职业管理有何想法?

13
语言不区分大小写的关键字[关闭]
我们正在尝试编写自定义脚本语言。有人建议通过提供不区分大小写的关键字来使语言宽容。 我个人不喜欢这个主意,但是我的团队中很少有人倾向于这个主意,说它将使最终用户满意!给出了诸如FORTRAN,BASIC,SQL之类的语言示例,称它们不区分大小写。 这是一个好主意吗?

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.