软件工程

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

5
嵌套类是否被低估?
我并不是要说我知道其他人都不知道的东西,但是我一直在使用嵌套类来解决越来越多的设计问题,所以我很好奇这种使用似乎很少使用的可接受性的感觉设计机制。 这就引出了一个问题:我是因为某种原因而走上了一条固有的糟糕道路,当他们再次咬我时会发现它们的原因,还是嵌套类可能被低估了? 这是我仅将其用于以下两个示例:https : //gist.github.com/3975581-第一个示例帮助我将紧密相关的继承体系保持在一起,第二个示例使我可以向受保护的成员提供访问权限...
9 c#  design 

4
PHP file_put_contents文件锁定
Senario: 您有一个文件,每行上都有一个字符串(平均句子价值)。为了争辩,可以说这个文件的大小为1Mb(几千行)。 您有一个脚本来读取文件,更改文档中的某些字符串(不仅是追加,而且还要删除和修改某些行),然后用新数据覆盖所有数据。 问题: “服务器” PHP,OS或httpd等是否已经有适当的系统来阻止此类问题(在写入过程中进行读取/写入)? 如果可以,请说明其工作原理,并提供示例或相关文档的链接。 如果没有,我是否可以启用或设置某些东西,例如将文件锁定直到写入完成,并且使所有其他读取和/或写入失败,直到上一个脚本完成写入? 我的假设和其他信息: 该服务器正在运行PHP和Apache或Lighttpd。 如果脚本是由一个用户调用的,并且正在写入文件的一半,而另一位用户在该确切时刻读取了文件。阅读该文档的用户将无法获得完整的文档,因为该文档尚未编写。(如果这个假设是错误的,请纠正我) 我只关心PHP写入和读取文本文件,尤其是函数“ fopen” /“ fwrite”,主要是“ file_put_contents”。我查看了“ file_put_contents”文档,但未找到详细程度或对“ LOCK_EX”标志的含义或作用的很好解释。 该方案是最坏情况的一个示例,在该示例中,我认为由于文件的大尺寸和数据的编辑方式,这些问题更有可能发生。我想了解更多有关这些问题的信息,不需要或不需要诸如“使用mysql”或“为什么要这么做”之类的答案或注释,因为我没有这样做,我只想了解文件读/写使用PHP,似乎并没有找到正确的位置/文档,是的,我理解PHP并不是用这种方式处理文件的理想语言。

2
在异常之后使用else(或不使用)
考虑一下这段代码: if (x == 1) { throw "no good; aborting" ; } [... more code ...] 现在考虑以下代码: if (x == 1) { throw "no good; aborting" ; } else { [... more code ...] } 这两种情况的工作方式完全相同。第一种情况的优点是您不必将其余代码“括入”中else。第二个优点是遵循显式具有elsefor每个的实践if。 任何人都可以提供任何有力的论据来支持一个胜于另一个吗?


1
避免重复的错误报告
我在家中使用Linux和其他开源软件。因为我不是专业的编码人员,所以我通常向开发人员报告错误,因为我的技能不足以自行解决问题。 您希望我在发送错误报告之前先检查哪些事情?我的意思是,一旦我以为自己在Gedit中发现了一个错误,而在Bugzilla中找不到类似的错误。但是在我发送报告后,一些开发人员说该错误已经存在于Bugzilla中,因为该错误存在于GTK +中,而不是在Gedit中。有时,对于业余爱好者而言,可能很难猜测某个以前已知的错误是否可以解决我发现的问题。

7
一个简单的iPhone应用程序是否比移动网站更具吸引力?
我的客户想要制作一个iPhone应用程序,因为她发现人们在移动优化网站上使用iPhone应用程序的可能性大大提高。iPhone应用程序非常简单-它只显示几个图像和一些文本。考虑到内容的简单性,作为一名程序员,我宁愿创建一个移动网站。从技术角度来看,我觉得在这种情况下使用iPhone应用程序是过大的选择。 当移动站点就足够了时,仅仅因为您的用户宁愿将其用作iPhone应用程序,构建一个iPhone应用程序是否有意义?无论如何,是否可以轻松地说服用户使用移动站点同样容易?
9 iphone  mobile 

2
Python的幂运算符与右边关联的理由是什么?
我正在编写代码以解析数学表达式字符串,并注意到在Python中对链式幂运算符进行求值的顺序与Excel中的顺序不同。 从http://docs.python.org/reference/expressions.html: “因此,在无括号的幂和一元运算符序列中,运算符是从右到左求值的(这不限制操作数的求值顺序):-1 * 2得出-1。” * 这意味着,在Python中: 2**2**3被评估为2**(2**3) = 2**8 = 256 在Excel中,它的工作方式与之相反:2^2^3被评估为(2^2)^3 = 4^3 = 64 我现在必须为自己的解析器选择一个实现。Excel顺序更容易实现,因为它反映了乘法的求值顺序。 我问办公室周围的一些人,他们对评估的直觉是什么2^2^3,得到的回应不一。 有人知道有任何有利于Python实现的理由或考虑吗?如果您没有答案,请评论您从直觉中获得的结果- 64或256?

3
本机移动应用程序开发-如何构建用户故事?
我将开始一个项目,该项目将涉及开发原型本机移动应用程序(最初为iOS和Android)以及基于Web的管理界面和与这些应用程序进行通信的API。我们有一个已经起草的故事列表,但是其中许多格式如下: As a mobile user I want to be able to view a login screen so that I can sign into the app 如果这是针对单个平台的,那么我不会出现问题。但是,由于我们的目标是多个平台,所以我不确定现在是否应该复制这些平台,例如“作为Android用户”或类似的名称。这似乎是重复的,但需要针对每个平台分别完成这项工作。 这是我们第一个本地化的移动项目-以前是Phonegap,我们将所有故事都归类为“作为移动用户”。由于本质上这是一个使用本地代码包装的基于Web的应用程序,因此这并不会带来太大的问题,但是我意识到纯本地应用程序是另一回事!

1
了解计算水平
对不起,我的困惑的问题。我在寻找一些指针。 到目前为止,我主要在应用程序层上使用Java和Python,并且对操作系统和硬件的理解还很模糊。我想了解更多有关较低级别的计算的信息,但是它确实以某种方式变得不知所措。在大学里,我参加了一门有关微程序设计的课程,即如何使处理器硬连线以实现ASM代码。到目前为止,我一直认为,如果对“低水平”知识更多,我将无法完成更多工作。 我有一个问题:硬件怎么可能几乎完全被开发人员隐藏?准确地说,操作系统是硬件的软件层吗?一个小例子:在编程中,我从来没有遇到过了解什么是L2或L3缓存的需求。对于典型的业务应用程序环境,几乎不需要了解汇编程序和较低级别的计算,因为当今存在几乎所有内容都可以使用的技术堆栈。我猜这些较低级别的重点是为高层提供接口。另一方面,我想知道较低的水平会对整个图形计算产生什么影响。 因此,另一方面,存在理论上的计算机科学分支,该分支适用于抽象计算模型。但是,我也很少遇到这样的情况,我发现它在复杂性模型,证明验证等类别中很有帮助。我有点知道,有一个称为NP的复杂性类,它们是无法解决的我想念的是一个框架,供您考虑这些事情。在我看来,这里有各种不同的阵营,很少互动。 最近几周,我一直在阅读有关安全性问题的信息。在这里,许多不同的层以某种方式汇聚在一起。攻击和利用几乎总是发生在较低级别,因此在这种情况下,有必要了解OSI层的详细信息,OS的内部工作原理等。

1
版本控制API
假设您有一个由API库支持的大型项目。该项目还附带了一个公共API,供最终用户使用。 有时您需要更改支持项目的API库。例如,您需要添加需要更改API的功能,新方法,或者需要更改传入或传自API的对象之一或这些对象之一的格式。 假设您还在公共API中使用这些对象,那么公共对象也会在您每次执行此操作时发生更改,这是不希望的,因为您的客户端可能依赖于API对象保持相同的解析代码才能正常工作。(咳嗽C ++ WSDL客户端...) 因此,一种潜在的解决方案是对API进行版本控制。但是,当我们说“版本” API时,听起来这还必须意味着对API对象进行版本控制以及为每个更改的方法签名提供重复的方法调用。因此,对于每个版本的api,我都会有一个普通的旧clr对象,这似乎也不可取。即使执行此操作,我也肯定不会从头开始构建每个对象,因为这将导致大量重复代码。相反,该API可能会扩展我们用于基础API的私有对象,但是随后遇到了同样的问题,因为如果不应该在公共API中使用附加属性,这些属性也将可用。 那么,这种情况通常适用于什么理智呢?我知道许多公共服务,例如Windows的Git都维护一个版本控制的API,但是我在构想一个支持该功能的体系结构而没有大量覆盖各种版本控制方法和输入/输出对象的重复代码时遇到了麻烦。 我知道,比如语义版本的尝试过程中把一些理智的时候应该发生的公共API休息。问题在于,如果对象之间的距离不远,似乎很多或大多数更改都需要破坏公共API,但是我发现没有重复代码的好方法。

4
快速原型制作和重构
有时候,当我开始一个小项目(例如android应用)时,我不知道哪种方法最终会成功,而我只是尝试一种方法并尝试一下。但是,如果我以前从未使用过这种方法(对于我以前从未编程过的某种应用程序),那就像步入未知领域。我不知道要使用哪个库(也许我必须尝试几个库),而且有太多未知数(例如:如何在android中获取原始音频数据) 因此,我的开发过程如下: 编写一段代码,看看这种方法是否有机会。(方法越不确定,代码就会变得越丑) 如果可行,请进行大量重构,直到美观为止 如果我现在详细计划软件设计,那可能会浪费时间,就像计划没有地图的旅程一样。 这是敏捷开发的一部分吗?您如何处理软件开发中的未知领域?

5
领导者看不到标准流程对机器配置和新开发人员定位的价值
大约3个月前,我们的主要Web开发人员和设计师(同一个人)离开了公司,绿色的牧场是他们离开的原因。我说对他们有好处。我的问题是他的部门完全没有文件记录。自从离开领导者以来,事情一直很艰难。我们引用了很多新知识,包括用来引用新项目的理论知识,以及由于他的离开而失去的现有产品的技术/实施知识。我通常的角色是担任产品经理(针对我们产品本身)以及担任某些基于项目的咨询工作的业务分析师。在过去的一年中,我自学了编码,为了继续前进,我 我已经完成了将笔记本电脑设置为开发机器的任务,希望能够实现一些更简单的功能请求并修复提交到我们的票务系统中的一些毫无疑问的错误。但是,没有人知道如何购买一台新的Windows计算机并将其配置为与我们的生产应用程序无缝配合。 我已经要求我的老板(仍与离开的开发人员保持联系),请他们记录并创建新开发人员的安装流程,软件安装,所需的软件包,部署到生产应用程序服务器的流程等。它的存在,而我正在努力使计算机成为功能开发机器。但是她似乎并不了解存在这样一个过程的必要性。显然,替换离开的那个新开发人员一直在使用针对我们的环境预先配置的计算机,因此如果我们添加其他开发人员,那么即使是新开发人员也无法设置新计算机。 我的问题分为两个部分: 我是否应该假设应该存在一个将我们的开发生态系统纳入其中并进行配置和配置新计算机的过程? 我是一个wh脚的婴儿,我应该自己弄清楚这个过程并创建一个文档吗?

8
什么时候“优化代码” ==“构造数据”?
ycombinator最近发表的一篇文章列出了关于优秀程序员原理的评论。 #7.优秀的程序员:我优化代码。更好的程序员:我构造数据。最佳程序员:有什么区别? 承认主观和有争议的概念-有人对这意味着什么有立场吗?是的,但是我以后想根据自己的想法编辑这个问题,以免预先回答这些问题。


3
(Lua)游戏脚本是什么意思?
我读过Lua通常用于嵌入式脚本,尤其是用于脚本的游戏。我发现很难想象它是如何使用的。您能描述使用它的原因以及针对哪些功能以及针对哪些受众吗? 这个问题不是专门针对Lua的,而是与Lua脚本目的类似的任何嵌入式脚本。 它用于最终用户进行自定义调整吗?它是否用于游戏开发人员以加快游戏逻辑(关卡,AI等)的创建?因为脚本可以更快,它是否用于编写游戏框架代码? 基本上,我想知道这种脚本用法在普通配置和框架逻辑之间有多深。以及完成了多少脚本。几条配置线还是相当多的?

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.