软件工程

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


8
程序员有时对自己的代码不具有100%的清晰度是正常的吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我不是专业的程序员,所以这也许就是原因。但是我注意到,每当我创建复杂的代码(例如我最近制作的国际象棋游戏)时,我都可以编写正确的代码来使程序正常工作,尽管我后来发现,甚至几秒钟之后! 不仅如此,我还倾向于不考虑代码,而是直接键入。例如,在我的国际象棋游戏中,我决定使用一个五维数组来处理移动,而我发现无需过多的自觉思考就可以做到这一点。但是,当我停下来仔细阅读它时,发现对整个5维概念有所了解是很困难的,并且花了几分钟的时间才能完全了解我的操作以及代码本身的工作方式。 对于程序员来说,编写复杂的代码而一半时间都不了解他们在做什么是正常的吗?

4
“使用地图代替类来表示数据” -Rich Hickey
在Clojure创作者Rich Hickey的这段视频中,他建议使用map来表示数据,而不是像Java那样使用类来表示数据。我不明白该怎么做,因为如果API用户将其简单地表示为地图,他们怎么会知道输入键是什么。 范例: PersonAPI { Person addPerson(Person obj); Map<String, Object> addPerson(Map<String, Object> personMap); } 在第二个函数中,API用户如何知道创建人的输入是什么?
19 java  design  class  clojure  map 

2
何时在构造函数上使用[Pure]?
我正在学习.NET中的代码协定,并且试图了解纯构造函数的概念。该代码合同文档状态: 合同中调用的所有方法都必须是纯函数。也就是说,它们不得更新任何先前存在的状态。允许使用纯方法修改进入纯方法后创建的对象。 并且PureAttribute文档指出: 指示类型或方法是纯类型,即,它不进行任何可见状态更改。 对于方法,我理解这些语句,但是构造函数呢?假设您有一个像这样的课程: public class Foo { public int Value { get; set; } public Foo(int value) { this.Value = value; } } 显然,此构造函数确实会影响新Foo对象的状态,但是它没有其他副作用(例如,它不操纵任何参数或调用任何非纯方法)。这是候选人[Pure]吗?[Pure]在构造函数上放置属性的意义是什么?何时应该在自己的代码中执行此操作?

4
为什么我们必须提到C中变量的数据类型
通常在C语言中,我们必须在变量声明中告诉计算机数据的类型。例如,在下面的程序中,我要打印两个浮点数X和Y的总和。 #include<stdio.h> main() { float X=5.2; float Y=5.1; float Z; Z=Y+X; printf("%f",Z); } 我不得不告诉编译器变量X的类型。 编译器不能自行确定其类型X吗? 是的,我可以这样做: #define X 5.2 现在,我可以编写程序而无需告诉编译器Xas 的类型: #include<stdio.h> #define X 5.2 main() { float Y=5.1; float Z; Z=Y+X; printf("%f",Z); } 因此,我们看到C语言具有某种功能,通过它可以自行确定数据类型。就我而言,它确定X为float类型。 在main()中声明某些内容时,为什么还要提及数据类型?为何编译器无法main()像in中那样自行确定变量的数据类型#define。

1
使用唯一性类型实现安全的并行性
一段时间以来,我一直对唯一性类型感兴趣,以替代纯函数式语言中的monad。不幸的是,这是CS研究的一个深奥领域,有关具有唯一性类型的编程的在线资源非常少。 显而易见,如何将唯一性类型用于实现状态数据结构,例如引用(“框”)和数组,尽管这使我无法理解如何使用它们来实现其他常见的状态数据结构。 例如,可以实现唯一类型的锁定吗?可以使用唯一性类型在线程之间共享可变数据吗?是否可以使用唯一类型来构建同步原语(例如互斥体),或者是否需要传递消息?

5
“ #define me(* this)”是个好主意吗?
可以在某些全局头文件中或更佳地将其定义为编译器命令行参数: #define me (*this) 还有一些用法示例: some_header.h: inline void Update() { /* ... */ } main.cpp: #include "some_header.h" class A { public: void SetX(int x) { me.x = x; me.Update(); } void SomeOtherFunction() { ::Update(); } /* 100 or more lines ... */ void Update() { // ... } int x; …
19 c++ 

8
在敏捷环境中,负责软件架构的人
在敏捷团队中,谁负责制定影响整个系统的高级体系结构和设计决策,而不仅是当前sprint中正在完成的工作? 也许是产品所有者,Scrum主管,Scrum团队或其他人?
19 agile  scrum 

3
GPL是否允许任何人无需付费即可获得GPL软件?
我发现了一个不错的WordPress(GPL)主题待售。 我知道有人买了它。 我有两个问题: 出售该产品的公司是否有义务将源代码发送给任何人(无论客户与否)? 购买该产品的人可以免费给我一份可以在生产中使用的副本吗?
19 gpl  pricing 

5
构建图灵完整处理器所需的绝对最小指令集是多少?
我对处理器如何处理指令有一个大致的了解,但我会花时间在大多数高级语言上工作。也许更接近铁杆的人可以提供一些有价值的见解。 假设编程语言基本上是处理器指令集的高级抽象,那么创建图灵完整机器所需的最基本指令集是什么? 注意:我对硬件体系结构的多样性一无所知,但是-为了简单起见-假设它是具有ALU(如有必要)和指令堆栈的典型处理器。*

2
为什么在C#中有一个new()约束,但没有其他类似的约束?
在C#泛型中,我们可以说,使类型参数T具有默认构造函数的约束where T : new()。但是,没有其他像这样的约束有效(new(string)例如,等等)。 从语言设计和/或实现的角度来看,这是什么原因? 构造函数的工作方式或类型系统的实现方式是否有某些禁止(或至少使之更加困难)的东西?如果是这样,那是什么?我记得读书的地方,default(T)实际上编译到new T()了T : struct。可能与此有关吗? 还是仅仅是为了避免使语言过于复杂而做出的设计决定?

1
如何更好地吸引在GitHub上为我的项目加注星标的用户?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我最近建立了一个名为Hebel的项目,该项目一直在GitHub上进行。这是一个用Python和Nvidia CUDA编写的GPU加速深度学习的框架。我在Google+上发布了有关它的信息,此后不久又在Hacker News上将其选中,并在几天内略有传播。后来我又在机器学习subreddit中再次发布了有关它的信息,我的项目在GitHub上总共获得了822星和47个分支,这真的很令人兴奋。822星表示我的项目在GitHub上排名前200的Python项目中,并且实际上比某些知名和广泛使用的Python项目(例如virtualenv)拥有更多的星。 尽管对我的项目非常感兴趣,但是到目前为止,我对我的实际参与感到非常失望。我的47个分支中没有一个提交过任何内容,我没有收到任何请求请求,并且只有两个人提交了三个问题。看来我的项目对许多人来说可能非常有趣,但是他们只注视或分叉一次,然后再也不会重复或连续使用它。 我如何改善参与度,以使用户提交错误或增强请求或使贡献者提交更改?


4
修复内存泄漏有多重要?
我通过Valgring发现某些GTK +程序会泄漏内存。修复这些泄漏有多重要?我的意思是,这些程序通常运行良好,但另一方面,人们永远无法确定是否要将部分泄漏的代码复制到其他程序中。而且我不确定GTK +程序的构想是否可以快速运行,是否存在泄漏。 因此,如果有时在开放源代码程序中发现内存泄漏,是否应该修复它或存在效率问题,因此程序员的初衷是编写一些小的泄漏代码?
19 c  memory 

1
用于编辑某人的拉取请求的礼节
我在GitHub上拥有一个存储库,有人通过一次提交就向该存储库发送了拉取请求。我只想部分实现他的解决方案,并使用用户所做的大约一半代码更改。在这种情况下我该怎么办? 制作其版本的分支,然后返回并复制并将要保留的“旧”代码从原始版本粘贴到第二个提交中。这可能会使提交之间的差异看起来大于实际差异,并抛出诸如之类的东西git blame。 将我要保留的代码复制并粘贴到另一个新的commit中。这意味着他不会因对代码的宝贵贡献而受到赞誉。 与上述相同,将他的一些代码复制到新提交中,但是将提交的作者更改为他而不是我。从技术上讲,他没有写出所提交的确切代码,所以我不确定这是否会被皱眉。但是至少他对使用的这些行有归属。

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.