软件工程

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

3
为什么在公共可访问的头文件中描述了私有变量?
好的,因此希望对程序员来说这是一个主观的问题,但这是可行的。我一直在不断拓宽我的语言和软件工程实践的知识……而且我遇到了一些对我毫无意义的事情。 在C ++中,类声明将private:方法和参数包含在头文件中,从理论上讲,如果将它们设为lib,则传递给用户以包括这些内容。 在Objective-C中,@interface几乎做同样的事情,迫使您列出私有成员(至少有一种方法可以在实现文件中获取私有方法)。 据我所知,Java和C#允许您提供一个接口/协议,该接口/协议可以声明所有可公开访问的属性/方法,并使编码人员能够在实现文件中隐藏所有实现细节。 为什么?封装是OOP的主要原理之一,为什么C ++和Obj-C缺少此基本功能?对于Obj-C或C ++,是否存在某种隐藏所有实现的最佳实践解决方法? 谢谢,


10
我如何向非程序员解释.NET是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我不在软件公司工作,并且是公司中一小部分对编程一无所知的人之一。我花了大量时间来自动化通过公共API在办公室使用的其他程序,并且我还创建了一些独立的应用程序。我几乎完全在C#.NET中工作,因为我们似乎在办公室使用的每个应用程序似乎都有某种形式的.NET API。 我这里有些人问我关于学习“如何编程”以及应该从哪里开始的知识。我认为学习.NET语言更加有意义,因为几乎他们想要自动化的所有程序都具有.NET API,而且听起来VBA即将退出,并被VSTA取代。 但是,我试图弄清楚如何解释.NET以及为什么他们应该向对编程一无所知的人学习。它不是真正的语言,因为有许多语言被认为是.NET语言。另外,我认为“ .NET”和“ .NET框架”之间存在区别,因为后者更多地与Microsoft提供的库有关。

4
什么是“专业健身”面试?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 因此,我在学校校园内进行了初次面试,然后与这家公司进行了现场面试(一天,主要是技术面试),然后一周后,我被告知他们将与他们的其中一名进行额外的电话面试。招聘经理,称为“专业面试”,我不知道这是什么。在我以为现场采访将是最后一轮之前,至少那是我从他们那里得到的印象。 那么,这种“专业面试”可能是什么?我应该如何准备呢? 非常感谢! 后续行动:感谢大家的答复。正如每个人都提到的,这是一次人力资源类型的采访。面试官对团队做了一些介绍,然后问我是否有问题,并问了我几个问题,例如“两年后你会在哪里看到自己”。无论如何,大约一周后便收到一封拒绝邮件。
11 interview 

12
发推文9到5会伤害求职者吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 8年前关闭。 如果您正在调查求职者的背景并且发现他或她在Twitter上有1200个关注者,并且平均每天发50条推文(其中一半以上是在工作时间内),这会影响您的招聘决定吗?如何以及为什么? 就个人而言,如果候选人在一天当中不断检查自己的“消息”,我会有点担心他是否专注于手头的工作。在非技术类工作中,许多公司只是以微不足道的方式阻止Twitter。但这可能是有用的资源,特别是对于程序员而言。我只是想知道多少太多了。在什么时候会变成危险信号?

7
是否有人长期使用Python / Ruby和PHP并仍然偏爱PHP?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 我通常会对捍卫PHP的文章以及所使用的论点着迷。这些类型的文章的作者经常没有提及他们对其他语言的经验。我个人很难想象有人会同时了解Python或Ruby,以及PHP,并且仍然更喜欢PHP。 因此,如果有人适合这个描述,我将很想听听为什么您更喜欢PHP而不是这两种语言。

1
算法:寻找最佳赌桌(赌徒问题)
前言 这不是代码高尔夫球。我正在寻找一个有趣的问题,希望能征询同行的意见和建议。这个问题不是(唯一地)关于纸牌计数,而是关于根据观察结果确定最适合的牌桌。假设您是否会进行某种大脑植入,使最坏情况下的时间/空间复杂性(在任何给定的体系结构上)都可以被人脑移植。是的,这是相当主观的。假设法国甲板上没有使用通配符。 背景 我最近去了一家赌场,看到每桌的旁观者多于旁观者,并想知道考虑到大多数旁观者都有钱可玩,因此选择过程将旁观者变成了下注者。 情境 您进入赌场。您会看到n个牌桌在玩二十一点的变种,其中有y个在玩浮桥。每张桌子上都有不确定数量的纸牌,以掩盖房屋的优势。 每张赌桌都有不同的最低赌注。您的个人身上有Z货币。您要在以下位置找到表: 使用最少的纸牌 最低下注高于使用更多副牌的赌桌,但您想最大化Z可以玩的游戏数量。 每位玩家的净损失是最低的(我意识到,在大多数答案中,这被认为是偶然的噪音,但这可能说明混响器损坏了) 问题 您可以神奇地观察每张桌子。为了进行决策,您需要进行X轮抽样。为此,每个玩家花费的时间不超过30秒。 您将使用哪种算法来解决此问题,最坏情况的复杂度是什么?你呢: 玩浮桥还是二十一点? 您选择什么表? 考虑到娱乐场最多只能使用八副牌,您需要观察几轮(X的值是多少)?每张桌子有2至6位玩家。 你在找桌子的时候站了多久? 我称其为“ 长期赌徒问题 ”是因为缺乏更好的术语。请随时对其进行完善。 额外 如果不在赌场,这在哪里有用? 最后 我不是在寻找神奇的赌博子弹。我只是注意到一个变成骨头的问题,我的大脑根本不会停止咀嚼。除了访问赌场之外,我对应用程序方式特别感兴趣。
11 algorithms 

6
您真的必须以测试优先的方式进行BDD / TDD吗?
即使我没有参加过TDD或BDD项目,或者我曾经在其中说他们正在进行TDD,但距离该项目还很遥远,但这些都是我在考虑的事情,实际上我会尽力阅读关于。 回到问题。在执行BDD时,您应该先编写“测试”并使其失败,对吗?然后实现该功能或您所说的功能。但是,如果您将其推向极致,那难道不是某种自上而下的开发吗?您正在查看自己的UI,并说:“我想在此使用此功能/行为”。然后,您可以修复UI以实现该功能以及支持该UI的代码。至此,您尚未实现任何业务逻辑或数据访问逻辑,而只是实现了行为。我要针对的目标不是先编写测试,而是先编写UI代码。在某些情况下,这将导致数据访问和业务层使用相同的代码,因为您使用UI代码来定义业务需要支持的内容。 当然,您应该为此进行补充测试,以确保该功能正常运行。 有什么想法吗?
11 unit-testing  tdd 


3
是否有充分的理由使用Java的Collection接口?
我听到过这样的论点,即您应该使用可用的最通用的接口,以免与该接口的特定实现联系在一起。此逻辑是否适用于java.util.Collection之类的接口? 我宁愿看到如下内容: List<Foo> getFoos() 要么 Set<Foo> getFoos() 代替 Collection<Foo> getFoos() 在最后一种情况下,我不知道我要处理哪种数据集,而在前两种情况下,我可以对顺序和唯一性做出一些假设。除了作为集合和列表的逻辑父代之外,java.util.Collection是否有用? 如果在进行代码审查时遇到使用Collection的代码,您将如何确定其用法是否合理,以及对使用更特定的界面替换它有何建议?



3
我如何说服我的公司为开源做出贡献?
我试图说服我为开放源代码软件做出贡献的公司,特别是为ASP.NET Web应用程序构建库/组件。我们即将迎来“创新日”,我们可以在工作中处理自己的个人宠物项目,类似于Google的“每周一天的政策”,只是我们每月一次:-),我有一个想法,我想开源。 其他公司也这样做。Headspring Systems(http : //automapper.codeplex.com- 参见顶部横幅)。 我要告诉他们什么?我可以向他们传达哪些对公司有利的好处?我已经提到了对我们公司和声誉等的潜在影响,以及当我们下次进行招聘大潮时吸引顶级软件开发人员。但是我还能提出什么其他论点呢? 更新:我工作的公司是一家软件公司,主要在ASP.NET和MS Stack中构建Web应用程序。我们的客户主要是NHS(英国公共卫生部门)。

3
您如何处理头顶式API /技术
我想大多数人都处于这种情况。 初始项目计划开始。要求概述。在对体系结构进行审查并通过API / Frameworks进行排序后,便选择了合适的技术。开发开始。 然后开始。一旦您需要做一些据说简单的支持工作,框架/ API就开始适得其反,而您却没有做任何工作就与该技术作斗争。研究时间飞速增长,论坛一片寂静,似乎什么也没做,即使您有工作要做,也不确定自己是否做对了。 在这些情况下如何管理?您是否喜欢黑客,是否会进一步研究,对管理人员说什么?

2
静态Create方法-与构造函数相比的优缺点
在构造函数上使用静态对象创建方法的利弊是什么? class Foo { private Foo(object arg) { } public static Foo Create(object arg) { if (!ValidateParam(arg)) { return null; } return new Foo(arg); } } 我能想到的很少: 优点: 返回null而不是引发异常(将其命名为TryCreate)。这可以使客户端的代码更简洁明了。客户很少期望构造函数失败。 创建具有清晰语义的不同种类的对象,例如CreatFromName(String name)和CreateFromCsvLine(String csvLine) 必要时可以返回缓存的对象或派生的实现。 缺点: 较少发现,更难以浏览代码。 某些模式(例如序列化或反射)更加困难(例如Activator<Foo>.CreateInstance())

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.