软件工程

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

6
选择功能性编程语言
最近,我读了很多有关函数式编程语言的主题(实际上,几乎是去年)。我真的很想选一个并彻底学习它。 上学期,我被介绍给Scheme。我爱它。喜欢语法的极端简单性,同调性原则,宏(卫生和非卫生),过程的n个类等。 Scheme的问题在于它是一种学术语言。我认为它不是真正在生产环境中使用的。我也不认为拥有我们的简历特别好。因此,我一直在寻找替代方案。它们很多,而且它们的流行程度似乎都差不多。 我还考虑过一些其他功能语言的想法: Clojure:这听起来很不错,因为它可以访问Java世界,面向可伸缩性和并发性,但是Java世界现在不处于边缘吗?我已经非常了解Java,但是根据JVM添加更多能量是否明智? Haskell:看起来像是一种很受赞赏的语言,但是根据我的阅读,它也更多是一种学术语言。 Lisp:一直存在至今。它似乎具有Scheme所提供的大部分功能。它有一个很大的社区。据我所知,它可能是业界使用最广泛的函数式编程语言。 F#:不是真的考虑过。我不是MS资料的忠实拥护者。我没有钱购买他们的软件(我可以让他们摆脱大学联盟的束缚,但我更倾向于使用社区驱动的解决方案)。虽然...我想这将是最佳的职业导向选择。 今晚,我倾向于Lisp。一周前是Haskell。在此之前是Clojure。在过去的一年中,我在做一些Scheme是为了娱乐,而不是因为您知道的原因而推动它。现在,我想变得认真起来(关于学习一个,关于使用它进行实际的项目,关于也许最终与其进行专业合作)。我的问题是,我需要先深入学习它们,然后才能选择其中的一个。

6
我如何学习从零到Web开发的Python?[关闭]
我正在研究用于网络开发的Python。 假设我已经具备Java(JSP / Servlets)的一些基本的Web开发经验,我已经熟悉Web设计(HTML,CSS,JS),基本的编程概念,并且我对Python完全陌生,那么我该怎么做以结构化的方式学习Python,最终将引导我使用Python和Django进行Web开发吗? 我并不急于用Python制作Web应用程序,因此我真的很想彻底学习它,以免在我对涉及Python中的Web开发的技术的了解上保持任何差距。有书籍,资源或技巧可以帮助我吗?我应该按什么顺序阅读它们? 更新: 当我说以结构化的方式学习时,我的意思是从基础开始,然后学习高级内容,而又不离开Python必须提供的一些重要细节/功能。我想知道如何将我在编程中已经知道的东西应用于Python。

9
我应该如何从Lisp开始?[关闭]
我已经编程多年了,以各种方式遍历Blub(BASIC,汇编语言,C,C ++,Visual Basic,Java,Ruby,而没有“ Blub-ness”的特殊顺序),并且我想学习Lisp。但是,在时间有限(家庭,全职工作等)的情况下,我有很多兴趣,而对于当前的Blub(Java),我感到很满意。 因此,我的问题是,假设我是一个真正想学习Lisp的人,那么要取得良好的结果来证明Lisp在Web开发中的优越性,将采取哪些初步步骤?也许我错过了重点,但这就是我最初看到Lisp知识应用的方式。 我在考虑“使用方言A,使用IDE B,按照第C页的说明,在使用顾问D的单子之后质疑您的理智”。我想知道这里的人们认为什么是A,B,C甚至D的最佳值。此外,还讨论了学习如此强大的语言而不是成为Rails的相对价值。专家。 仅添加更多细节,我将在MacOS(或Linux VM)上进行开发-无需基于Windows的方法。 那些浏览的注意事项 我将让这个问题保持一段时间,以便在我能够探索建议之后就可以提供有关建议的反馈。如果您碰巧正在浏览并且觉得自己有需要添加的内容,请这样做。我真的很欢迎您的反馈。 有趣的链接 假设您是从Java背景来的Lisp,那么这组链接将使您快速入门。 使用Intellij的La Clojure插件集成Lisp(视频广播) Web Lisp 实用Common Lisp的在线版本(C / o Frank Shearar) Lisp的土地一(+ (+ very quirky) game based)中的方式,但让这一切如此简单 在MacOS上安装Clojure和Sublime 2是一个很好的入门指南 看看《Clojure在行动》一书。为我工作。

3
如何抛弃小隔间?[关闭]
我真的很想摆脱9-5的“小隔间”,去做一些我可以在家工作的事情,在我喜欢的时候起飞,等等。不要误会我的意思...我不介意努力工作,但我只是不喜欢设定公司的工作时间,休假日,着装要求,工作地点等全部内容。我真的认为这是可能的,因为其他开发人员正在以某种方式实现这一目标。但是到目前为止,它还只是处于“梦想”阶段,我不知道如何推进它。我不知道我是否想成为自由职业者,创办我自己的公司还是什么。 如果有问题的话,过去几年我一直在.Net / MVC中工作(包括台式机和Web),但是也有使用其他语言(Java,C ++,Perl等)的经验。我在“网页设计”方面没有太多经验,因为在我从事“编程”工作的同时,其他人也处理了这些工作。 只是为了使我想要的更加具体...我在六月的一个随机星期二醒来,这是美好的一天。我的项目提前完成了,我不想工作……我想去远足。我希望在没有任何PHB的情况下自由地这样做。 另一种情况……我确实想工作,但我想去Bi斯麦/布达佩斯/波士顿探望一个老朋友或亲戚一个星期。所述朋友拥有可靠的互联网。我为什么不能这样做? 我并不是在说不负责任,只是再自由一点。

24
如何从勉强的客户那里获取资金?[关闭]
我在4个月前完成了此网站。(我想保持网站匿名-如果此帖子出现在客户的google搜索中,将会对他们的业务产生负面影响)。我们进行了几次迭代,客户要求很高(又很管闲),我遵守了所有需要的东西,包括页脚的字体大小,这相当程度上破坏了美观。(而且它们也弄乱了颜色,使其看上去很危险,幼稚且不专业)。 无论如何,客户在整个过程中都非常友好。在得到所有要求后,我接受了以950英镑建立网站的工作,并向他收取了150英镑的预付款,这样他就不想在我开始工作后纾困。需求变化很大,尽管有所有需求变化,但我还是进行了调整,并在约定的日期晚了5天完成了网站。 那是四个月前。从那以后,他们再也没有回过我的电话,也没有回复我的电子邮件。我如何从他们那里退钱?我真的需要一些建议,这是第二次有人没有付钱给我。 注意事项: 我们没有签订任何合同-客户是朋友的朋友。 我仍然拥有ftp,cpanel和所有内容的密码。我不想打倒这个网站;在某种程度上,这对我而言似乎不道德。 我将其发布在Stack Overflow上,它已关闭,我在这里被重定向。 编辑 谢谢大家,感谢您的大力支持。我认为我应该包括更多详细信息:客户端托管网站;例如,我让他们注册并使用自己的借记卡购买域名,网站空间和所有东西,我只有他的cpanel和ftp的密码(嗯,我可以访问cpanel,这几乎使我可以访问很多东西)。 现在,如果我给他们警告,他可能会将密码更改为cpanel,但我可以肯定他们不知道ftp的密码。 更新 我遵循了Anna Lear的建议,并在周六发送了最终发票,并发出警告,如果他在本周二之前未回复我的电子邮件,我将关闭该网站。他们还没有回复我的电子邮件,但是我会让你知道这是怎么回事。非常感谢您的支持。我计划按照Darknight星期二之后的建议设置一个保留页。 要点 我没有自己的服务器空间,但是我的客户的网站空间很少,但我不想将它们用于这种目的。 结果 在我对最终发票和警告进行跟踪之后,客户拒绝了任何事情。工人的建议对我来说似乎是最明智的。我将网站镜像到自己的网站空间,登录到他的CPanel并将网站转发到我的网站。完成此操作后,我在网站上放置了一个保留页面,因此任何访问该网站的人都将看到一个保留页面(什么都没有,只有正在建设中的页面)。当然,从我的客户知道CPanel的角度来说,这一切都是非常薄弱的​​,他可以删除重定向。但是,我有第二次机会回到他身边,而我依靠的是他一无所知。 两个小时后,我接到了该客户的电话(并且好像他们没有收到我的语音邮件或电子邮件一样),并要求我重新建立该网站。我当然说我必须付款,然后两天后我收到银行转帐。该站点已备份并正在运行。 只是想非常感谢大家,当我开始这个问题时我非常绝望。您是最好的,不仅您告诉我要学习这堂课(我曾经做过),而且还给了我一个非常非常好的解决方案,对我来说,这几乎是符合道德的。 非常感谢工人! 如果我可以选择多个答案,我也会选择Anna Lear ,但是由于我遵循工人的建议,所以我不得不选择答案。提出要在不咨询律师的情况下不关闭网站的人表示感谢。

28
什么时候可以创建自己的编程语言?
从长远来看,是否有更好的杀手级应用程序,算法问题类别等等,可以创造出自己的语言? PS:可以肯定的是,我的意思是一种新的编程语言和一个编译器,而不是现有语言的新编译器。 编辑:谢谢你的答案。您能提供一些示例,这些示例绝对不需要创建DSL,或者说DSL可能是个好主意?

3
为什么PATCH方法不是幂等的?
我对此很纳闷。 假设我有一个user资源id和name字段。如果我想更新一个字段,我可以像这样对资源进行PATCH请求 PATCH /users/42 {"name": "john doe"} 然后应用程序将更新用户42的名称。 但是,如果我重复此请求,结果会有所不同吗? 根据RFC 5789 PATCH既不安全也不具有幂等性

4
为什么VM需要是“堆栈计算机”或“注册计算机”等?
(这是一个极其新手的问题)。 我一直在研究有关虚拟机的知识。 事实证明,其中许多设计与物理或理论计算机非常相似。 例如,我读到JVM是一个“堆栈机”。这意味着(如果我错了,请纠正我)是它将所有的“临时内存”存储在堆栈中,并对所有操作码在该堆栈上进行操作。 例如,源代码2 + 3将被转换为类似于以下内容的字节码: push 2 push 3 add 我的问题是这样的: JVM可能是使用C / C ++等编写的。如果是这样,JVM为什么不执行以下C代码:2 + 3..?我的意思是,为什么它需要堆栈,或在其他虚拟机“寄存器”中(例如在物理计算机中)? 底层的物理CPU负责所有这些工作。VM编写者为什么不使用VM编程所使用的语言简单地使用“通常”指令执行解释后的字节码? 当实际的硬件已经为我们做到了时,为什么虚拟机需要仿真硬件? 同样,非常新手的问题。谢谢你的帮助

1
将一维数据结构视为2D网格
我正在使用将2D图像表示为1D数组的本机类。例如,如果要更改一个像素,则现在需要如何从x,y坐标中导出索引。 因此,假设我们有一个array1d像这样的一维数组: array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ] 在我们的程序上下文中,array1d代表2D网格: a b c d e f g h i j k l m n o p q r …

10
如何最好避免编写writing肿的GUI代码?
我发现每当使用GUI代码时,该代码往往会比其他类型的代码膨胀更快。似乎也很难重构。在其他类型的代码中,我可以轻松地重构-我发现可以将较大的类分解为较小的功能-对于大多数GUI框架,我经常绑定到需要我的小部件/控件/任何类的框架在窗口小部件/控件/任何地方更直接地实现更多功能。有时这是由于需要(a)继承一些基本控件/控件/事物,或者(b)需要访问受保护的方法。 我通常还必须(例如)通过信号/事件/来自框架的任何内容来响应各种各样的输入,以实现与用户交互的所有模式。我可能需要一个GUI小部件/控件来处理各种各样的输入/输出,其中可能包括: 右键单击/上下文菜单 对上下文菜单中的选择做出反应-可能很多 绘制GUI的一种特殊方法 对键盘输入做出反应 按钮,复选框, 等 ...一直在GUI之下管理代表业务逻辑的类。 一个简单而直接的GUI可以使其代码快速增长,即使分离出业务逻辑并使用MVC时,我也发现GUI代码具有很大的吸引力。 有什么方法可以以合理的方式管理GUI代码,并避免使其成为损坏的窗口?还是大量随机事件处理程序/重写方法确实是我们可以为GUI代码做的最好的事情?
48 refactoring  gui 

17
如何检查或评估一个人的调试技能?[关闭]
什么样的技能确定一个能够轻松调试代码的人?前一段时间,我的朋友接受了一个相对优秀的程序员的采访。程序员被录用了。他可以编写出色的代码,了解框架和设计模式。他缺少的是调试技能。他根本无法调试,发现他或别人的代码有问题对他来说是巨大的痛苦。 从那时起,我们一直在思考如何评估或估计一个人的调试技能。 因此,第一个问题是:哪些技能可以确定一个人是否可以有效调试软件? 第二:面试中如何测试这些技能?

3
git commit可以有两个以上的父母吗?
在本文档中提到 提交对象可以具有任意数量的父对象。 但是据我了解,一次提交将有多个父级的唯一情况是发生合并时的情况,在这种情况下,将只有两个父级。所以我的问题是,一次提交可以有两个以上的父母吗?如果是这样,什么时候?
48 git 

8
为什么NoSQL比SQL快?
最近有人问我: 为什么NoSQL比SQL快? 我不同意这个问题的前提...对于我个人而言这只是胡说八道。通过使用NoSQL而不是SQL,我看不到任何性能提升。也许SQL优于NoSQL,是的,但不是那样。 我是否缺少有关NoSQL的内容?

6
什么是不变式,如何使用它们,您是否曾经在程序中使用过它?
我正在阅读《工作中的编码器》,其中有很多关于不变式的讨论。据我了解,不变量是在表达式之前和之后均保持的条件。如果我正确记得我的逻辑课程,那么它们对于证明循环正确是很有用的。 我的描述是正确的,还是我错过了什么?您在程序中使用过它们吗?如果是这样,他们如何受益?
48 invariants 

6
记忆的纯函数本身是否被视为纯函数?
假设fn(x)是一个纯粹的函数,它执行一些昂贵的操作,例如返回的素数列表x。 假设我们制作了一个相同功能的记忆版本memoizedFn(x)。对于给定的输入,它始终返回相同的结果,但它会保留先前结果的专用缓存以提高性能。 从形式上来讲,被memoizedFn(x)认为是纯洁的? 还是在FP讨论中有其他名称或限定词来指代此功能?(即,具有副作用的函数可能会影响后续调用的计算复杂性,但可能不会影响返回值。)

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.