软件工程

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

2
谁首先创造了术语高阶职能和/或头等公民?
我已经了解到,早在Haskell,O'Caml或LISP之前,高阶函数是一门学术研究主题,在数学中,Schönfinkel(1967年)和Haskell Curry(1968年)已经应用了诸如咖喱粉之类的技术,但是在任何编程语言中都没有。 根据Wikipedia的说法, Scheme 是引入适当的高阶函数作为一等公民的第一门语言,但是有人可以将原始想法归因于此吗?也许是1930年代发明了lambda演算的Alonzo Church?更具体地说,谁创造了以下定义,我在几本书和在线资源的各种释义中看到了以下定义? 当一个函数将另一个函数作为参数或返回一个函数时,该函数被认为是更高阶的。任何不将函数用作参数或返回类型的函数都称为一阶函数。

4
我已经计划在新工作中使用以前的发明(软件/框架)。如果我在工作期间改善了版权,那会发生什么?
我已经填写了该标准表格,您可以在其中列出以前的发明,然后再开始新的工作,以便雇主合法地知道您拥有这些发明的版权。但是,如果我想在新工作中使用本发明(软件代码/框架),例如,当我为他们工作时更改/改进代码时,他们对此有版权主张吗? 我听说过共享所有权。这样的事情:您将拥有以前所做的工作,而雇主将拥有您在受雇期间对其所做的任何改进。这种糟透了,消除了您必须对产品进行改进的任何动力,因为一旦改进,改进就消失了。:( 有没有人经历过这种情况并且可以分享一些想法,以便我保护我的代码?

2
Array的“每个”或“某些”副作用是否有害?
我一直被教导,在某种if情况下产生副作用是不好的。我的意思是; if (conditionThenHandle()) { // do effectively nothing } ...而不是 if (condition()) { handle(); } ...我知道,我的同事很高兴,因为我不这样做,我们每个星期五的17:00回家,每个人都有一个快乐的周末。 现在,ECMAScript5推出类似的方法every(),并some()到Array了,我发现它们非常有用。他们是清洁比for (;;;)的,再给你一个范围,并且使元素由变量访问。 但是,在验证输入时,我经常发现自己在条件中使用every/ some来验证输入,然后再次在正文中使用every/ 将输入转换为可用模型。some if (input.every(function (that) { return typeof that === "number"; })) { input.every(function (that) { // Model.findById(that); etc } } else { return; } ...当我想做的是 if (!input.every(function (that) { var …


2
BSD许可的项目是否需要每个贡献者的签名声明?
今天,我读了Fossil SCM的邮件列表: BSD的问题在于,您确实应该从每个贡献者那里获得一份签名表格,说明他们的贡献是BSD。对于GPL,这是自动的,因为在兼容许可证下释放您的贡献是查看GPL中代码的先决条件。这使GPL非常适合具有大量贡献者的高度协作的环境。BSD对读者来说是比较宽松的(负担不大),但这对作家来说有点困难,因为他们现在必须发送一些文件。 有人可以解释为什么吗?如果没有项目贡献者的签名说明,可能会有什么后果?

1
如何避免问题跟踪器和项目规范文档之间出现重复?
我曾经在一家专业的咨询公司工作,而我们是根据许多不同的合同条款工作的。当我们可以获得时间和材料项目时,我们使用SCRUM运行了该项目,并在问题跟踪系统中跟踪了积压工作。 但是,大多数时候,我们必须按照固定价格合同交货。这需要一份规格文件作为合同的附录。因此,我们总是最终从规范中批量导入工作项(或更糟糕的是,手动输入)。变更单花费了大量时间来确保所有内容都保持同步,尤其是在项目结束时。 有没有使整个过程保持干燥的方法论或软件工具?我已经做了一些搜索,但显然没有使用正确的术语。我的大多数专业网络都不做固定价格工作。 我愿意接受: 切换我的错误跟踪器或购买插件(当前使用FogBugz)。 遵循不同的开发方法 编写软件来管理规范并更新Bug跟踪器和规范文档(但这听起来可能需要大量工作才能带来可疑的收益) 最后,这真的值得解决吗?在某些项目上,这花费了我们很多时间,但在其他项目上,它并没有最终影响我们。

1
最好在monadic函数中使用带验证的错误monad,还是直接在绑定中实现带有验证的自己的monad?
我想知道对于可用性/可维护性而言,更好的设计明智之举,以及与社区相适应的更好之道。 给定数据模型: type Name = String data Amount = Out | Some | Enough | Plenty deriving (Show, Eq) data Container = Container Name deriving (Show, Eq) data Category = Category Name deriving (Show, Eq) data Store = Store Name [Category] deriving (Show, Eq) data Item = Item Name Container …

2
带有分类和连续数据的机器学习
这个问题可能会在这里或关于... 假设您的训练数据集同时包含分类数据和连续数据,例如: Animal, breed, sex, age, weight, blood_pressure, annual_cost cat, calico, M, 10, 15 , 100 , 100 cat, tabby, F, 5, 10 , 80 , 200 dog, beagle, M, 3, 30 , 90 , 200 dog, lab, F, 8, 75 , 80 , 100 可以预测的因变量是年度兽医成本。对于处理此类数据集的具体技术,我有些困惑。处理连续数据和分类数据混合的数据集的常用方法是什么?


3
在没有可处理的情况下,“使用”是否合适?
在C#中,using语句用于确定性地配置资源,而无需等待垃圾回收器。例如,它可以用于: 处置SQL命令或连接, 关闭流,释放基础源,例如文件, 免费的GDI +元素, 等等 我注意到,using在没有什么要处理的情况下,这种用法越来越多,但是对于调用者来说,编写一个using块而不是两个单独的命令更方便。 例子: 由Stack Overflow团队编写的MiniProfilerusing用于表示要分析的块: using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); } 一种替代方法是具有两个块: var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p); 另一种方法是使用动作: profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1)); ASP.NET MVC还选择了using以下形式: <% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> …

3
在为动态类型的语言编写编译器时与类型相关的挑战是什么?
在本次演讲中,Guido van Rossum正在谈论(27:30)有关尝试为Python代码编写编译器的评论,并评论说: 事实证明,编写一个可以维护所有出色的动态键入属性并保持程序语义正确性的编译器并非易事,因此无论您在幕后的某个地方进行何种操作并实际运行,它实际上都可以执行相同的操作任何更快 在为像Python这样的动态类型语言编写编译器时,与类型相关的(可能)挑战是什么?

1
许多阻塞VS单非阻塞工作者
假设有一个HTTP服务器接受连接,然后以某种方式等待标头被完全发送出去。我想知道实现它的最常用方法是什么,其余是什么利弊。我只能想到这些: 许多阻塞工人是好的,因为: 它反应更快。 引入新连接更容易(工作人员自己捡起它们,而不是局外人等到可以将其添加到同步列表中)。 随着连接数量的增加和减少,CPU使用率会自动平衡(无需付出任何额外的努力)。 更少的CPU使用率(阻塞的线程从执行循环中删除,不需要任何逻辑即可在客户端之间跳转)。 单一的非阻塞工人是好的,因为: 使用更少的内存。 较不易受懒客户端(连接到服务器并缓慢发送标头或根本不发送标头)的攻击。 如您所见,我认为多个工作线程总体上似乎是更好的解决方案。唯一的问题是,更容易攻击这种服务器。 编辑(更多研究): 我在网络上发现了一些资源(成千上万的线程和阻塞I / O-编写Java服务器的旧方法又是Paul Tyma的(又是更好的方法),这表明阻塞方法通常更好,但我仍然不太了解如何处理虚假连接。 PS不建议为该任务使用某些库或应用程序。我更想知道它是如何工作或可能起作用的,而不是使它起作用。 PSS我将逻辑分为多个部分,这一部分仅处理接受HTTP标头。不处理它们。

4
C#中的常量
为何编译器将常量值存储在程序集元数据中?它们是否直接从程序集元数据嵌入到中间语言代码中?
9 c#  clr  compilation 

5
如何管理非开发人员检查本地化字符串的任务?
在.NET Framework中,本地化的字符串位于XML文件(或多个文件)中。这些文件是项目的一部分,并且像任何其他源代码文件一样被提交到源代码管理。通常,Visual Studio用于将这些文件显示为表格并编辑本地化的字符串。 我在一个小组中研究应该具有多语言界面的产品。 作为开发人员,鉴于翻译可能不准确,我用两种语言起草了本地化的字符串, 团队中的另一个人(非开发人员)以两种语言查看内容,并在需要时进行更正。 当前的问题是,非开发人员既不会使用源代码控制,也不会使用IDE,因为这对于该人员来说既麻烦又困难(对于非开发人员来说版本控制很困难)。 另一种解决方案是我将本地化字符串导出为Excel文件,等待此人检查Excel,然后重新导入修改后的字符串。需要说明的是,我可能正在创建其他字符串,重命名现有的字符串等,这使得很难将本地版本与经过审核的字符串进行区分。 该怎么办? 在其他团队中如何发生?

8
过去的If语句数组,循环…现在呢?
一年前,当我不断碰壁时,我放弃了编程。我正在重新研究该主题,因为我想创建基本的Android应用程序。但是我觉得我有限的知识是不够的。 这是我的问题。 我已经阅读了几本书,并观看了有关C#/ Java的视频教程,并跟随了示例,然后完成了这本书。最后,他们似乎总是让我对下一步该怎么做感到震惊。 这是什么意思,他们从基本的“ hello world”应用程序一直教您到if和array,然后看似希望您知道如何进入编码世界并创建任何东西。 我在这里想念什么吗?我知道这些是所有程序的基础,但我读过的书从未真正向我展示下一步该怎么做。 我想简单的答案是“开始编码”,但是在哪里?例如,我读过“ Head First Java”。直到他们告诉你把学到的一切都用来制作狗赛车游戏为止。 “不要欺骗并查看提供的源代码,您现在应该可以做到这一点。” _这不是确切的引用,但基本上就是我被告知的…… 半个小时前,他们只是在解释如何做数组,然后我毫无理论地打算创建一个工作游戏? 我之所以这样问,是因为我担心这至少是我应该知道的,至少开始编码了,但是感觉就像是给了我一个小工具箱,并被告知要建造一座摩天大楼。 谢谢你的建议

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.