软件工程

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



2
Unicode许可证
Unicode 使用条款规定,使用其数据文件(或它们的修改)的任何软件都应带有Unicode许可证参考。在我看来,大多数Unicode库都具有检查字符是否为数字,字母,符号等的功能,因此将包含对Unicode数据文件的修改(通常以表格的形式)。这是否意味着许可证适用,并且使用此类Unicode库的所有应用程序都应带有许可证? 我已经检查了一下,似乎很少有Unicode程序可以携带许可证,尽管可以说,大多数不携带许可证的程序都是来自Unicode联盟成员的公司(它们获得许可证豁免吗?)。 有些(例如Mozilla)只是“联络会员”,尽管他们的软件不携带许可证(据我所知),但它们显然依赖于从这些数据文件中获取的数据。Mozilla是否违反许可证? 我们是否应该在所有包含任何形式的高级Unicode支持(即,一定要依赖Unicode数据文件)的应用程序中携带许可证?还是存在某种形式的广泛豁免(因为那里很少有程序携带许可证)? 我已将此问题转发给Unicode工作人员。如果有的话,我会在这里张贴回覆。

16
为何在编程时使用其他数字基数
我和我的同事一直在思考,以找出为什么有人会以除10为底的底数来编程数字。 我建议您也许可以通过将变量放置在要使用的正确基数中来优化较长的方程(例如,如果您只有5组东西而没有余数,则可以使用5基数),但是我不确定如果是真的。 有什么想法吗?

2
为新项目选择JAX-RS实现
我正在启动一个新的Java项目,该项目需要RESTful API。它将是为移动客户提供服务的SaaS业务应用程序。 我已经用Java EE 6开发了一个项目,但是我对生态系统不是很熟悉,因为我的大部分经验都在Microsoft平台上。 对于诸如所述的新项目,对于JAX-RS实现,哪个选择是明智的选择? 从维基百科的列表来看,主要竞争者似乎是Jersey,Apache CXF,RESTeasy和Restlet。但是Wikipedia上引用的JAX-RS实现的比较是从2008年开始的。 他们各自的主页给我的第一印象是: CXF的目标是成为一个非常全面的解决方案(使我想起了Microsoft领域的WCF),这使我认为,理解,设置和调试它可能比我需要的更为复杂。 Jersey是参考实现,可能是一个不错的选择,但是它是Sun的遗留产品,我不确定Oracle如何对待它(公告页面不起作用,最后一次提交通知是在4个月前)。 RESTeasy来自JBoss,可能是一个不错的选择,尽管我不确定学习曲线。 Restlet似乎很流行,但是有很多历史,我不确定它在Java EE 6世界中是最新的还是不确定它是否带有沉重的J2EE思维方式(例如许多XML配置)。 这些替代方案的优点是什么?那学习曲线呢?功能支持?工具(例如NetBeans或Eclipse向导)?调试和部署的便利性如何?这些项目中的任何一个是否比其他项目更新?它们的稳定性如何?
35 java  rest  java-ee 

5
仅HTML / JavaScript网络应用程序的优缺点
我来自ASP.NET表单背景,过去发现服务器端编码非常强大。但是,最近,我一直想逐步淘汰前端的服务器端代码,并用纯HTML / JavaScript代替它,后者通过JSON Web服务访问数据。我对此没有任何实际经验,所以我想听听这是否是一个久经考验的模型。另外,围绕它的陷阱是什么? 我发现ASP.NET用户控件非常有用,因此我想通过将标记模板存储在服务器上单独的HTML文件中来保留其理论。这些将分别通过jQuery AJAX和jQuery HTML模板插件检索和使用。 任何输入将不胜感激。 PS:对不起,这个问题很抱歉,但是这种Web体系结构是Web-2.0吗?还是我完全偏离了轨道?

3
OO中传递的消息是什么?
我一直在研究OO编程,主要使用C ++,C#和Java。我以为我对封装,继承和多态性有了很好的了解(以及在此站点上阅读了很多问题)。 似乎突然出现的一件事是“消息传递”的概念。显然,在以当今主流语言进行OO编程时,并没有使用此方法,但是Smalltalk支持了这种方法。 我的问题是: 什么是消息传递?(有人可以举一个实际的例子吗?) C ++,C#或Java是否支持这种“消息传递”?
35 java  c#  c++  object-oriented 

2
在ASP.NET MVC中分离数据访问
我想确保我遵循行业标准和最佳实践,这是我第一次真正接触MVC。在这种情况下,它是使用C#的ASP.NET MVC。 我将对我的模型使用Entity Framework 4.1和代码优先对象(数据库已经存在),因此将有一个DBContext对象用于从数据库中检索数据。 在我在asp.net网站上进行的演示中,控制器中包含数据访问代码。这对我来说似乎不正确,尤其是在遵循DRY(不要重复自己)做法时。 例如,假设我正在编写要在公共图书馆中使用的Web应用程序,并且有一个用于创建,更新和删除目录中书籍的控制器。 某些操作可能需要一个ISBN,并且需要返回“ Book”对象(请注意,这可能不是100%有效的代码): public class BookController : Controller { LibraryDBContext _db = new LibraryDBContext(); public ActionResult Details(String ISBNtoGet) { Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet); return View(currentBook); } public ActionResult Edit(String ISBNtoGet) { Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet); return …


6
Scala的重新发明系统设计
很多很多月以前,我做过面向对象软件工程的硕士。我涵盖了所有内容:项目启动,需求,分析,设计,体系结构,开发等,等等。我一直以来最喜欢的IT书籍是《开发面向对象的软件》,这是一种基于经验的方法(IBM-1996)。由一群当时的真正专家创作的书。它描述了以工作产品为中心的方法来进行面向对象的分析,设计和开发方法。 我设计和开发游戏时感到很开心,并在游戏中处于顶峰,但我开始感到有些过时:敏捷运动已成为当今的时尚,并用新的时髦词重新命名了一些众所周知的迭代和增量方法。当我说“需求”或“架构”时,经验不足的开发人员开始皱眉,好像这些东西已被魔术所取代。 设计和开发失去了乐趣,我将把整个IT行业抛在身后。 然后我发现了Scala。哦,就像尘土飞扬的道路上的小雨。一切都变得清晰起来,空气再次变得甜美起来,硬盘驱动器上的微弱灯光将闪烁到深夜,使我开心地陪伴在发现世界中。 我喜欢系统设计。我是一名建筑师,而不是程序员。我喜欢分析,设计,思考,争论,改进-我只是喜欢简单,干净和清晰的设计。 我们如何设计纯Scala解决方案? 当然,常规命令图,交互图,对象图等都可以全部替换或改进,以将命令性和功能性面向对象的系统融合在一起。当然,有一个完全不同的地方可以开放! 我不是在寻找肿的复杂性,而是在寻找灵活的简单性。实际上,Scala很简单(虽然有所不同),但可以像一条瑜伽裤一样扩展以适应您的需求。对于这种可爱的语言,必须有一个设计系统,该系统应从简单开始,并且可以扩展以适合您的要求和您的领域。当然不能是UML! 那么我们如何设计纯Scala系统呢?想象一下,您有足够的勇气从头开始设计一个完整的系统,并且知道您将只使用Scala- 您的模型外观如何?您必须描述什么类型的图的结构和行为?您将如何对选项,匹配项,混合项,单例对象等进行建模,而不会陷入扩展现有建模技术而不是使用新颖,轻巧的创新工具集的复杂性。 是否存在这样的设计/过程/解决方案,或者现在该发明一个?

5
如何处理永远不会抛出的检查异常
例: foobar = new InputStreamReader(p.getInputStream(), "ISO-8859-1"); 由于编码是经过硬编码且正确的,因此构造函数将永远不会抛出规范中声明的UnsupportedEncodingException(除非Java实现被破坏,否则无论如何我都会迷路)。无论如何,Java仍然迫使我处理该异常。 目前看来 try { foobar = new InputStreamReader(p.getInputStream(), "ISO-8859-1"); } catch(UnsupportedEncodingException e) { /* won't ever happen */ } 任何想法如何使它变得更好?

7
如何转换复制/粘贴/意大利面条式编程器以查看光线?
这个问题的灵感来自于这一块。尽管其他问题被认为是本地化的,但我认为根本问题是我们行业中极为普遍的问题。我知道有一些开发人员会阅读这些内容,并认为我正在编造这些东西,然后他们可能会回答每个人如何关心自己的工作并想学习,但是只是看看其他Programmer SE的帖子(例如),我知道这并非普遍如此。 假设您的团队中有某个人(或可能是多数人),他们的标准操作程序是复制/粘贴,并且相信只要添加足够的函数调用和变量,一切都可以解决。这个人从来没有听说过TDD,DRY或SOLID,并且在忙于工作的40个小时之外,他们从来没有读过任何一本方法论/实践/设计书。 在过去,我(和其他人)曾问过,如何教OOD。但是现在我认为这不是正确的问题。真正的问题是,您如何与这样的人/团队打交道,并使他们对更好的做事方式感到好奇?您如何激励他们学习?没有这些,似乎所有的教学,会议,演讲,讨论都没有用,如果他们很高兴回到办公桌前并做他们一直以来所做的事情。 我和一群这样的人一起工作。他们实际上是非常聪明的人,但是当我听到“我已经完成编码,只需要重构并拆分成多个类以使DXM满意”时,我就会讨厌。它们不会重构更干净,可读性和可维护性的代码,而仅仅是因为否则它们会被责骂。我知道他们有学习能力,只是似乎普遍缺乏动力。 当我交付作品时,它的bug数量通常更少,而我拥有的作品从未成为5000行的怪异行为。其他人会发表评论,例如“您的代码比我们的代码更清晰易读”,因此他们看到了区别。但是与此同时,我觉得他们相信他们不管做什么都可以得到40个小时的报酬,因此他们实际上不介意他们是否花了整整3天的质量检查来寻找不应引入的错误。第一名。或者他们花一个星期来修改一个类,因为最终有太多的依赖关系。但是,“也许该类应该用不同的方式编写”似乎从未弹出。 在这些情况下可以采取任何措施吗?有人成功了吗?还是最好将这种思维方式隔离到项目的非关键部分,并最大程度地减少损失? 注意:当我说“缺乏动力”时。我不认为工作或干得好没有动力,因为他们只是停止了关怀。实际上,我们团队中的大多数人恰恰相反。他们绝对在乎产品。我们有会在晚上和周末工作的人。我要努力克服的部分是改善的习惯和技能,实际上他们不需要那么多的工作。我想“ 40个小时”的事情使这篇文章听起来有些消极。

4
如何确定抽象级别
今天我正在读一本书,叫做“ Clean code”,在作者谈论每个函数的抽象级别时,我遇到了一段,他将某些代码分类为低/中/高抽象级别。 我的问题是确定抽象级别的标准是什么? 我引用书中的段落: 为了确保我们的函数正在做“一件事情”,我们需要确保我们函数中的语句都处于相同的抽象级别。很容易看到清单3-1是如何违反此规则的。其中的概念具有很高的抽象水平,例如getHtml();。其他处于中间抽象级别的其他变量,例如:String pagePathName = PathParser.render(pagePath); 还有其他一些非常低的级别,例如:.append(“ \ n”)。

11
对于威胁要一直离开并且很难与之合作的团队成员该怎么办?[关闭]
我在一个由3名开发人员组成的小型开发小组中工作。我们管理松散,没有团队架构。没有指定的团队负责人,而经理则相当放任。这位高级开发人员已经在公司工作了4年,在那时,他在建立系统和保持系统运行方面发挥了巨大的作用。他不是一个很好的开发人员,但是一位出色的牛仔程序员,并且以我从未有过的方式了解网络。他曾担任“首席开发人员”和“系统架构师”,因为他有资历,并认为他的工作比我们其他人更好。 我的问题是他威胁要一直退出。昨天他告诉我,他将在6周内提高401k归属计划的另一个级别,并计划在此之后离开。当我问他为什么时,他说这是因为我们的经理(一个人)和团队(这个团队就是我)正在“给他除毛”。他认为,根据他的资历,他“当之无愧”被任命为开发经理。他不喜欢我,因为我一直在努力寻找错误/问题跟踪软件,并且因为我擅长工作。 上次他威胁要辞职时,我认真对待他,并开始计划我要离开他的工作。然后他改变了主意,告诉我,我正在做的工作是他的责任。他对我发脾气,而且紧张情绪持续了一阵子。 以下是我处理这种情况的一些不同方式: 按照他的要求去做:这可以减轻紧张感,但是什么也做不了,用户就会不高兴。 掌控一切,让用户满意:但是这会使用户感到高兴,但随后他对我生气并关闭,他不会与我交谈或与我合作完成只有他自己知道的事情。他不会让我自己进入需要进入的系统。 与高层管理人员更紧密地合作:他不尊重高层管理人员,他们不希望他离开公司,所以他们抚养他。 我还没有前进的一个选择就是离开公司:我还没来一年,也不喜欢离开的想法。总体而言,该职位符合我的大多数要求。 有想法吗?有什么建议吗?对话?我没有考虑过的选择? 2012年5月11日更新: 我终于决定离开。这是一个很好的决定。从最初的职位到现在,他变得更好了,但我认为它仍然不是一个好的开发人员,更不用说好的管理材料了。我尊重他的知识,但很高兴我不再需要与他合作。

17
向初中的高中生讲授C ++:划清界限?
我将指导一组高中生参加FIRST机器人大赛,这里的大多数团队都使用C ++开发他们的机器人软件。对于团队中的许多学生来说,这将是他们的编程入门。我不会选择C ++向高中生教授编程(例如,我认为使用Python或Javascript会更容易),但是选择已经确定。 我想教给他们适当的C ++(即避免使用混合的C / C ++方言,即C +),但是我不想以不必要的复杂性来吓them他们。对于这个问题: 我应该从第一天开始使用STL,尤其是。vector还是只坚持使用标准阵列?数组更易于引入,但指针错误可能更难捕捉。 对于I / O,我应该坚持使用cout等等,还是您认为printf它更容易学习? 是否有适合这些年轻人使用的C ++在线资源? 谢谢! 编辑:感谢这么多出色的答案。除了很多人建议的“ 加速C ++”外,我还发现“ C ++ For Everyone”是一本很好的书。
35 c++ 

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.