软件工程

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

7
如何确定我的夜间项目代码是我的?
我是具有CS学位的物理学家,刚刚在一家科技公司开始了我的博士学位(希望从事应用研究)。它涉及大规模的有限元模拟。 在回顾了他们当前的方法之后,我认为必须采用根本不同的方法(它们使用的商业工具非常有限)。 我宁愿将研究基于开放源有限元求解器,并编写一个使用它的程序。我想在晚上提出这个想法,因为那是最适合我编程的时间(在一天中,我更喜欢阅读和数学),并在博士后期使用。 我想选择将程序作为开放源代码发布在我的网站上,以供将来个人或什至商业(例如咨询)使用。 如何确保我的公司不要求代码所有权? 我认为版本控制系统可以提供帮助(仅在晚上退房)。这将证明我不是在正常办公时间进行编程(其他地方记录了)。但是这些数据很容易制造。还有其他想法吗? 我想强调一点,我对销售软件不感兴趣,我的公司也不对。 到目前为止,非常有趣的回复。这显然对我有帮助。一些说明: 我不受工作合同的约束。国家法律规定,该公司拥有我在工作时间内生产的任何产品,并且未达成任何特殊协议(我的雇主没有出售软件,因此在这方面可能有些天真)。他们大多使用软件,而我的同事们都不是认真的程序员。 其次,我需要重新考虑@Mark提出的有关商业秘密的观点。这在特定行业中非常严重。 第三,我很在乎不要惹怒我的主管/老板。但是,这就是这个问题的动机,我想让我的作品的创新部分保持分离,以便我可以重用它,或者至少将其作为参考作品进行展示。

12
如何编写命令解释器/解析器?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 问题:以字符串形式运行命令。 命令示例: /user/files/ list all; 相当于: /user/files/ ls -la; 另一个: post tw fb "HOW DO YOU STOP THE TICKLE MONSTER?;" 相当于: post -tf "HOW DO YOU STOP THE TICKLE MONSTER?;" 当前解决方案: tokenize string(string, array); switch(first item in array) { case "command": if …


4
动态和静态语言之间的架构差异
在设计将基于静态语言(例如C#或Java)和动态语言(例如Ruby或Python)构建的应用程序时,在体系结构上是否存在重大差异? 哪一种设计可能对某一种类型是好的选择而对另一种却是不好的呢?一种类型可以实现任何其他类型都不能实现的有用功能(当然在设计和体系结构上)? 另外,是否有任何动态特定的设计模式?

3
假冒被测课程的一部分可以吗?
假设我有一个类(请原谅人为的示例及其错误的设计): class MyProfit { public decimal GetNewYorkRevenue(); public decimal GetNewYorkExpenses(); public decimal GetNewYorkProfit(); public decimal GetMiamiRevenue(); public decimal GetMiamiExpenses(); public decimal GetMiamiProfit(); public bool BothCitiesProfitable(); } (请注意,GetxxxRevenue()和GetxxxExpenses()方法具有依赖项,这些依赖项已被删除) 现在,我正在对取决于GetNewYorkProfit()和GetMiamiProfit()的BothCitiesProfitable()进行单元测试。可以对GetNewYorkProfit()和GetMiamiProfit()存根吗? 似乎如果我不这样做,那么我同时要同时测试GetNewYorkProfit()和GetMiamiProfit()以及BothCitiesProfitable()。我必须确保为GetxxxRevenue()和GetxxxExpenses()设置存根,以便GetxxxProfit()方法返回正确的值。 到目前为止,我只看到了对外部类而非内部方法的依赖关系进行存根的示例。 如果可以的话,是否应该使用一种特定的模式来执行此操作? 更新 我担心我们可能会遗漏核心问题,这可能是我的拙劣例子的错。基本的问题是:如果一个类中的方法依赖于该类中另一个公开的方法,是否可以(甚至建议)将另一个方法存根? 也许我错过了一些东西,但是我不确定分班总是有意义的。也许另一个更好的例子是: class Person { public string FirstName() public string LastName() public string FullName() } 全名定义为: public string …

8
项目后会议浪费时间?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 在我的工作地点,我们遇到了一些严重的成长难题。我们的开发团队从3人增加到10人,过去一年公司本身增长了30%。从大多数方面来看,我们做的很好。不幸的是,我们的软件质量受到了影响。 在今天与部门经理的会面中,我提议了一个项目团队,在产品发布后一两天会面。我们可以讨论预算问题,范围,出了什么问题以及什么是正确的事情。理想地,从我们的错误中学习。我们为其他人构建网站/应用程序,因此我们的时间要么是可计费的,要么是不可计费的。这样的会议将属于后者。 我的经理几乎立即就把它拒之门外:“那段时间是不值得的。这会使我们落后于另一个项目,因为在那个项目结束时我们会浪费时间。” 我对这种逻辑感到措手不及,以至于我什至没有打扰他。 所以我的问题是:我认为最有价值的是项目后会议,但他没有。是否有文件证明的项目后会议可以长期或短期节省时间和金钱?直觉上,我认为这会/将会,但是他显然更担心需要在那里的5个人提供​​少量的非计费时间。

7
使用HTML5本地存储来存储CSS和JavaScript是否现实
这个想法是利用HTML5本地存储来存储经常访问的CSS和JavaScript。 例如(伪代码): var load_from_cdn = true; 如果(检测本地存储) { 如果(找到CSS,JS的缓存) { 加载本地存储缓存 load_from_cdn = false; } } 如果(load_from_cdn) { document.write('<script> ...'); } 这是可能的还是现实的? 我知道浏览器缓存,但仍然会进行一些标头访问检查, 我认为没有HTTP访问会更好(我认为) PS:本地存储似乎仅支持键值对,有人可以证明吗? (最好的例子)

2
域驱动设计-实体问题中的外部依赖关系
我想启动域驱动设计,但是在开始之前我想解决一些问题:) 假设我有一个网上论坛和用户,当用户想要加入网上论坛时,我正在调用groupsService.AddUserToGroup(group, user)method。在DDD中,我应该这样做group.JoinUser(user),看起来不错。 如果我有一些添加用户的验证规则,或者将用户添加到组中时需要启动一些外部任务,则会出现问题。拥有这些任务将导致实体具有外部依赖性。 例如-限制用户最多只能参加3个小组。这将需要从group.JoinUser方法内部进行DB调用来验证这一点。 但是,实体依赖于某些外部服务/类这一事实在我看来并不那么好,也不是“自然的”。 在DDD中处理此问题的正确方法是什么?

4
我们是Subversion极客,我们想知道Mercurial的好处[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 看过我是Subversion极客之后,为什么我应该考虑还是不考虑Mercurial或Git或任何其他DVCS。 我有一个相关的后续问题。我阅读了该问题,并阅读了推荐的链接和视频,我看到了好处,但是我没有看到人们在谈论的整体思维转变。 我们的团队由8至10名开发人员组成,他们在一个由60个项目组成的大型代码库中工作。我们使用Subversion并有一个主干。当开发人员启动新的Fogbugz案例时,他们将创建一个svn分支,在该分支上进行工作,完成后,它们将合并回主干。有时它们可​​能会在分支上停留更长的时间,并将中继合并到分支以接收更改。 当我看着Linus谈论人们创建分支而不再做分支时,那根本不是我们。我们每周可能会创建50-100个分支,而不会出现任何问题。最大的挑战是合并,但我们在合并方面也相当出色。我倾向于通过fogbugz case&checkin合并,而不是合并分支的整个根。 我们永远不会在远程工作,我们永远不会在分支机构之外建立分支机构。如果您是代码库中该部分中唯一的工作人员,则与主干的合并将顺利进行。如果其他人修改了同一段代码,则合并可能会变得混乱,您可能需要进行一些手术。冲突就是冲突,除非有足够的智能来理解代码,否则我看不出大多数系统在大多数情况下如何做到正确。 创建分支后,接下来要检出60k +个文件会花费一些时间,但这对于我们使用的任何源代码控制系统都是一个问题。 我们没有看到的任何DVCS是否有一些好处对我们有很大帮助?
22 git  svn  mercurial  dvcs 

10
如何避免“开发人员的不良优化直觉”?
我在一篇发表以下声明的文章上看到: 开发人员喜欢合理地优化代码。它是如此令人满意和有趣。但是,知道何时进行优化更为重要。不幸的是,开发人员通常对应用程序中的性能问题的实际位置有着可怕的直觉。 开发人员如何避免这种直觉?是否有好的工具来查找您的代码的哪些部分真正需要优化(对于Java)?您是否知道有关该主题的一些文章,技巧或精彩读物?
22 java  performance 

14
是什么促使您为下班后的工作做免费的编程工作?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我并不是说要为项目加班,而是要使公司受益的研发或测试台应用程序。这些将成为教学工具,最终成为销售工具。我知道问甚至听起来很疯狂,但是我看到这个行业在快速变化的技术方面的趋势,以及让程序员将下班后的知识带入内部的问题。您可能会认为它会自然扩散,但我发现大多数线索都将保留下来,因为该工作随后将由公司“管理”,现在由公司“财产”管理。是否有能刺激人与人之间反复的可靠计划或倡议,在这里您实际上可以提出一些建议并为此得到回报? 编辑 任何人都可以就此提供其他反馈: 是否有能刺激人与人之间反复的可靠计划或倡议,在这里您实际上可以提出一些建议并为此得到回报? 这里似乎沟通不畅,一些用户给我的印象是我试图弄清楚如何让同事免费工作。恰恰相反。我想知道是否存在程序,或者您有什么想法可以激励您,但不一定就是金钱。

11
编程语言如何有效地评估基础数学?
随着我越来越多地参与编程背后的理论,我发现自己对看似简单的事物着迷并感到困惑。 问:这是如何运作的? 答:因为有! 我讨厌这种认识!我喜欢知识,最重要的是我喜欢学习,这使我想到了我的问题(尽管这是一个广泛的问题)。 题: 如何用编程语言评估基本数学运算符? 当前的方法如何改进? 例 var = 5 * 5; 我的解释: $num1 = 5; $num2 = 5; $num3 = 0; while ($num2 > 0) { $num3 = $num3 + $num1; $num2 = $num2 - 1; } echo $num3; 这似乎效率很低。对于较高的因子,此方法非常慢,而内置方法的标准是瞬时的。如何在不迭代加法的情况下模拟乘法? var = 5 / 5; 怎么做到的?我想不出一种从字面上将其5分成5个相等部分的方法。 var = …
22 math  evaluation 

7
在主要开发者所在的地方退出一家小型创业公司?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 7年前关闭。 只是好奇地听到其他人可能也遇到过类似的情况。我为一家小型创业公司工作(非常小),我是他们正在开发的应用程序主要部分的主要开发人员,他们所从事的另一位开发人员所从事的工作领域与我不同,因此无法承担我的职责。我已经在公司工作了5个月左右,但是我正在考虑去一家更稳定的公司,因为这会给公司带来太大的压力,加班,压力等,而带来的收益却太少了,我很想与其他公司合作可以为项目提供帮助的开发人员。这个家伙对我的工作很满意,我认为我已经帮助他们取得了长足的进步,但是我意识到我只是不喜欢这么“边缘化”,因为很难说出公司的发展方向因为它是如此的新。而且,即使我 只是为了增加更多细节,我不是公司的合伙人或合伙人,而且从未讨论过,因此我只是使用W2(当然没有任何好处)。我猜我在家里工作,这样更容易离开,但我不想只是把那个家伙搞砸了,也不想被绑得太久。显然,我计划至少提前2周发出通知,但我是否应该给予更多通知?我应该如何提出这个话题,因为我知道提出这个话题会很麻烦。任何建议表示赞赏 更新:感谢大家对此发表意见,我现在刚刚完成了接受一家大公司的报价并退出创业公司的过程。我已经给出了两周的通知,并提出要在以后需要时提供服务,基本上这时它只是一家非常小的公司,所以我只需要处理一个开发人员……无论如何,看起来就我与创始人保持良好的关系以进行未来的工作而言,也许效果很好,我发现这更多的是个人问题/生活方式问题,而不是他们的缺点/缺点,这显然有助于保持良好的声誉
22 startup 

2
什么是dylib?
我正在开发iphone应用程序,并通过使用libz.dylib的示例代码进行工作。我进行了一些研究,发现除了libz.dylib可以用于zip文件之外,没有什么启发性的,但是更喜欢其他框架... 我正在处理pdf示例,为什么要使用libz.dylib?通常,dylib是什么?为什么是所有版本?

6
面向方面的编程:什么时候开始使用框架?
我只是看着这个演讲由Greg Young的警告人们KISS:保持简单愚蠢。 其中一个建议,他的事情是做面向方面编程,一个也不会需要一个框架。 他首先提出了一个严格的约束条件:所有方法只能使用一个参数,并且只能使用一个参数(尽管他稍后通过使用部分应用程序来放松此参数)。 他给出的示例是定义一个接口: public interface IConsumes<T> { void Consume(T message); } 如果我们要发出命令: public class Command { public string SomeInformation; public int ID; public override string ToString() { return ID + " : " + SomeInformation + Environment.NewLine; } } 该命令实现为: public class CommandService : IConsumes<Command> { private IConsumes<Command> …

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.