软件工程

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

4
人们为什么将某些库重写为多种编程语言?
有一些库,这些库的版本可用许多不同的编程语言编写,例如Lucene,该库是用Java(如他们所说的100%纯Java)编写的,但也具有C ++,C,Perl的版本,Ruby,Lisp和其他一些语言。我说的是这些语言的实现,而不仅仅是FFI接口。 人们为什么这样做?我可以看到一个明显的原因:当项目具有较少的依赖项时,部署和分发(也可能是开发)更加容易。但是还有别的吗?在什么情况下值得?

8
PHP如何面向对象?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我有机会与同事进行了有趣的对话。他们大多数是Flash操作脚本或Java开发人员。 我们讨论了php处理OOP的能力。我说过,PHP 5.2或5.3可以处理几乎所有OOP内容。我错了吗?我并不想获得是/否的答案,但我想听听开发人员的更多意见。

10
在用尽所有途径修复错误后该怎么办
我是一名初级程序员(到目前为止有4个月的职业经验)正在跨平台移动应用程序上工作(一个人的团队,所以这只是我自己)。 我在此程序/应用程序中存在一个错误,该错误很大(30个不同的头文件,每个头文件也都有自己的cpp文件)。我一直在试图确切地找到错误的根源并进行修复(甚至尝试使用一些hacks使其正常工作),但是有大约十几种或更多种解决方案(我知道导致问题的原因)我什么都没提出来,导致我无法准确跟踪错误或修复了错误。 您是否对使用一些广泛技术的初级程序员有任何建议(可以运行,将我的所有代码打印到纸上并用笔通过它,等等),我可以用来协助解决此错误吗? 为我的错误提供更多背景信息;它涉及跨平台API Mosync,当我执行特定的操作序列时,当前屏幕不会重绘(并显示)以前显示的屏幕仍在接收指针/按键事件,而不是当前屏幕。 具体顺序: -显示菜单屏幕-单击“显示上一个订单按钮” -显示前一个订单屏幕-单击“加载文件”,然后单击菜单按钮并打开交货屏幕 -显示交货屏幕-单击菜单按钮并打开采购屏幕 -显示采购屏幕-此处错误,未显示/未响应此屏幕的输入,ListViews不滚动,按钮不响应点击,ListView单元格不响应点击 我会接受建议,每次执行相同的步骤时,该错误都是100%可重现的,尽管由于我无法理解API的一部分,仍然很难弄清指针事件是如何传输的以及显示在什么屏幕上达到(或不知道如何)。 另外,我也希望在我的工作中拥有另一双眼睛,并指出错误,但是正如我所说的那样,我是一个由1人组成的团队,我的老板指导我,他拥有公司,并且对应用程序有想法,但是不知道c ++或任何最近的语言(cobal?我想是全部)。关于如何在不违反/不炫耀公司知识产权代码/财产的情况下获得第二只眼睛的任何建议? ...而且不离开这个有薪实习是不可行的,合同说如果我在1200万合同的6个月之前离开,我可能有责任支付我年薪的30%

7
代码审查真的可以在真正的敏捷环境中工作吗?
因此,我开始为一家大型公司工作,其中一家公司名称中有3个字母,他们试图成为敏捷公司,但是却有大量流程,我认为这些流程不是敏捷的。 让我最受困扰的是代码审查。我最后的工作是在一家初创公司中工作,我可以说这是我见过,曾经和/或从未听说过的最敏捷的开发团队。 无论如何,我的观点是,代码审查在UX / UI极端/强烈(想想Apple / Steve Jobs完美)的迭代或敏捷开发中浪费时间。也许有人在解雇我之前可以帮助您理解? 这是我的开发过程,也是我上次启动的过程。非常敏捷。 我们进行早期功能工作以对开发任务/待办事项进行排序。我们将模拟几个版本并将其呈现给用户,团队和市场,以获取反馈。然后,我们进行另一次样机迭代,以从上述相同的涉众获得一轮机会。然后,我们将工作分拆并开始。我们有一些里程碑和日期可以见面,但我们一直在努力。在此期间,我们没有任何代码审查。在我们开发的几周中,我们几次与利益相关者进行讨论,以了解他们是否仍然同意功能/功能/ UX / UI仍然是合适的目标。 随着8周迭代周期即将结束,质量检查人员开始进行测试,然后测试对象为alpha用户,最后是beta用户。但是在Alpha和Beta测试期间,开发人员将研究新功能和旧功能,对UI进行每日或每小时迭代更改,以改善UX。因此,此版本正在开发的功能可能会在过去四周内被更改3次以上,以进行改进和完善,或者添加一些微小的功能(例如,使组件更光滑或更智能)。有时这些更改可能是肤浅的,这意味着没有更改或修改任何CRUD操作,而仅更改所有UI。 因此,使用这种类型的开发过程(极端敏捷),代码审查不会浪费时间吗?这意味着如果我有另一个开发人员或两个开发人员来检查我的代码,但是由于所有UI / UX的改进,代码在发布之前又要更改3次,我们是否不浪费时间来检查代码的前3次?该代码/组件/ UI被废弃了吗? 我们在此过程中从来没有遇到过很多质量问题,是的,如果开发人员将所有知识都排除在外,但是我们总是找到聪明的开发人员来接管并接管。 是的,我们有很多测试人员,因为他们可能必须重新测试3到4次。另外,请不要挂断询问为什么所有的UI / UX都会发生变化...那就是事情的完成方式...那么那就是为什么该应用程序会赢得大量的UI / UX奖并且用户会因此而丧命应用程式。思考的过程是,如果我可以多花2个小时来改善某件事,那么我可以将其提高2%。用户会更快乐,这意味着更多的$或用户。是的,我们的用户可以继续更改应用程序,因为这是自第一天以来的工作方式,因此他们不会认为它是不好的还是负面的。 希望这篇文章不会那么夸张,但是我看不出代码审查是不是浪费。也许我们所审查的代码中所有代码的2%都有错误。每个版本的代码审查可能会发现3个错误。因此,最终每个开发人员每个版本需要40个小时的代码审查(4 x 40 = 160个小时),才能发现3到5个错误?无论如何,质量保证会发现3到5个错误的可能性是50%。每个开发人员花40个小时来添加新功能或改进现有功能会更好吗?

8
命名约定准则值得关注吗?
我使用.Net约定来命名变量: camelCase用于变量和字段(我倾向于将_camelCase用于类中的私有字段) PascalCase用于方法,属性和类 我唯一偏离的地方是我实际上更喜欢Java SCREAMING_CAPS样式的常量和枚举。 我公司的代码库散布着来自VB6和VBScript的伪匈牙利表示法样式,如果不是成熟的匈牙利语,即 s或str表示字符串 我或诠释为诠释 d代表小数(有时是双精度) o或obj(任何类型的对象) 每当我看到别人的代码中使用了这种代码样式(即使是在未开发的代码中,而不仅仅是旧版代码)时,我都会感到畏缩,而我拒绝自己使用这种样式。过去,我提起过.Net命名约定的标准化,但是它被忽略了-用匈牙利符号书写的人们继续这样做,而我们中不喜欢我的人们继续使用我们自己的风格;我有点担心,如果我们进行标准化(我一直在努力,但似乎没人在乎),它将采用匈牙利符号,而不是推荐的方式,然后我将被迫编写这样的代码。 在这方面,我是不是从暴风雪中爬了出来?我是否应该不在乎代码中是否有多余的标识符,而不是描述性的名称,而是继续使用自己的方式并促使其成为标准?

2
学习Play的最佳资源!框架[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 不久前,我讨论了迁移到将使用Java的初创公司的可能性,尤其是Play!框架;好吧,我要去做!我已经很长时间以来一直是.NET的人,除了偶尔偶尔玩弄Android或与Scala玩弄而已之外,还没有真正参与过Java游戏。我看过这部戏!之前但仅在粗略水平上的框架。我认为将Java作为一种语言会很好,因为在学习资料之前,我已经得到了很好的建议。 我的问题是,除了Play的绝佳网站之外!框架除了几个博客之外,我没有发现太多其他东西。有人知道该Play有其他优质资源吗?框架像书?亚马逊搜索显示零结果。 我知道那里有一本电子书,但是现在看来有点过时了。无论如何,谢谢您的投入。

3
对使用Web服务的基于桌面的客户端进行脱机故障转移的最佳方法是什么?
我有三个共享相同问题的新项目: 他们需要在Web系统上具有逻辑,并且他们需要通过RESTful Web服务与此类系统进行通信的本地应用程序(例如销售点)。 我的解决方案 我设法提出的解决方案是在桌面应用程序消息队列中实现,以在服务离线时存储操作,更准确地说是异步消息队列。但是,这很容易(如果这是最佳解决方案)。我还关注数据同步和冲突解决。 主要系统必须基于Web,因为利益相关者需要使用Web应用程序来进行报告和监视,并且Web服务将处理多个机构的请求。 桌面客户端(最好是瘦客户端)将使用Java(更具体地讲是Netbeans)实现,而Web系统将使用Symfony2实现。其中两个项目需要客户端进行硬件集成,因此使用Web技术制作桌面应用程序(例如Appcelerator Titanium)可能会很麻烦。 我的问题 什么是可扩展的更好解决方案,这意味着以最小的努力获得最高的效率(最好没有额外的成本,例如购买备用服务器进行本地操作)? 以前还有谁处理过?您是如何解决您的问题的?您可以分享什么课程? 您如何处理同步? 编辑:在第3点中向我的问题添加了缺失的部分


8
我创建了一个基于LGPL项目的程序,并且不允许发布源代码
我认为LGPL是许可许可证,就像MIT,BSD或Apache一样。但是今天我读到,仅允许从封闭源代码链接到LGPL(库等)-除此之外,它是copyleft-因此我必须发布基于LGPL程序的代码。 我为雇主创建了一个基于LGPL程序的程序,但对该程序进行了相当大的修改。当然,不允许将修改后的源代码放在那里。同时,我必须分发(对吗?)。 因此,我想知道是否有解决方法,因此我可以保留此封闭源代码(希望我可以发布源代码)-有什么建议吗? 我的想法:我可以将原始LGPL应用程序的大多数功能放到外部库中,从头开始编写核心可执行文件,但可以参考该库中所有未修改的功能吗? 当前,所有内容都在.jar文件中(它是Java / Swing)。如果您认为我的想法在法律上/技术上是可行的-分开我写的内容和原著是多少?我不是最精通Java的人。

2
如何使集群仅运行一次任务?
如果您有一项任务只想在服务器群集上仅运行一次,那么定期执行此操作的最佳方法是什么?在这种情况下,群集的定义是2台或更多台具有负载均衡器后面的分布式会话的相同服务器。 用例:您有一项运行成本很高的任务,该任务每X小时只能运行一次。例如,此作业可以遍历一堆记录并更新其状态。 最糟糕的情况是,两次运行作业会使您的数据无效。 最好的情况是该作业利用了所有服务器上的资源。 要求摘要: 即使节点之一关闭,该作业仍必须运行。 每个计划只能运行一次作业。 如果在同一时间或重叠时间安排了多个作业,则正在运行的作业数将在服务器之间平均分配。 机器必须具有相同的代码库,并且必须通过NTP进行同步。 根据环境变量,节点之间的配置可能有所不同。 作业必须按时开始或在指定时间的给定间隔内开始。(例如说5分钟) 可能的解决方案 将一个节点设置为主节点,这违反了上面的1,因此无效。 要求负载均衡器平衡以启动该作业。不幸的是,这具有副作用,如果您同时运行多个作业,则它们可能都由同一台机器运行。 这必须在Java的servlet容器中运行。但是,它不是我正在寻找的工作的编码。 当然,这是已知最佳解决方案可以解决的问题。 相关问题。 /programming/5949038/schedule-job-executes-twice-on-cluster 这不是重复的,因为根据上述5个要求,解决方案还不够。最高支持的解决方案存在种族问题,第二种解决方案违反了要求3

5
为什么隐式并行/并发没有得到更广泛的应用?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 隐式并行性^可以减轻许多程序员的负担,并将其放置在计算机上。那么...为什么它现在不普及? ^隐式并行性是使计算机能够一次弄清楚自己如何做一件事,而不是程序员需要使用线程等来完成这项工作。

7
谁能建议我写一个项目来帮助我理解线程
我目前是一位C#开发人员,对线程的理解很不稳定。 这两个链接已在其他帖子中建议: http://www.yoda.arachsys.com/csharp/threads/ http://www.albahari.com/threading/ 我是否应该回到基础知识,也许再看一些有关该主题的计算机科学教材? 我真的觉得,如果我跳入并使用c#库,我将不会真正拥有扎实的知识基础。我想我需要像com cici学生一样从头开始学习这个主题,然后使用C#库。 谁能建议一种学习线程的方法,也许一些链接和/或项目构想? 提前致谢! 编辑,感谢所有答复。有人提到一本书可能是一个好主意,有人可以建议吗?我更喜欢不可知的语言。有谁知道计算机科学学位将涵盖哪些课程?我正在尝试Google搜索一些免费的在线笔记和作业。

5
学习组件对象模型的最佳场所
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我需要为当前项目学习COM。我是一个菜鸟,我一直无法找到COM的良好起点。我一直在研究MSDN和谷歌搜索...我确实在codeproject.com上找到了一些有趣的文章,但我不满意。为什么要使用COM?为什么存在?它存在于什么地方?.....等等..那么,请您告诉我在哪里可以找到这些问题的答案?
13 microsoft 

6
正则表达式可以/应该做什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我最近学习了正则表达式,并且喜欢编写/使用它们。我正在寻找想法并有更多机会使用它们,但是,我不想像人们经常警告的那样将它们作为通用工具过度使用。 我应该为正则表达式使用什么类型的东西,在哪里不应该使用正则表达式?(除了显而易见的部分:HTML解析)。


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.