软件工程

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

5
Groovy会消失吗?[关闭]
我相信这个问题已经被问过很多次了。但是,我想再次问一下这些语言的未来。 我最初被介绍给Groovy,并真的很喜欢它。我觉得语法更简单,并且更接近Java,并且能够快速学习Grails。 然后是Scala,并且网络框架工作为Lift。我仍在学习Scala,有时发现语法很困难。 但是,我仍然想知道Groovy的未来是什么。当Groovy的作者说如果他对Scala 有所了解,他永远也不会创造出Groovy,那让我想知道是否还有未来。当然,Groovy已经走了很长一段路,如今许多大公司都在使用Grails。 如果今天要看Grails vs Lift,那么Grails无疑是赢家。更多的公司正在使用它。但是,鉴于到目前为止我所说的一切,我很想知道是否应该投资Groovy?Groovy离开了,Scala是更好的选择吗?如果宝马首席执行官说他驾驶梅赛德斯,那么人们会想知道我们为什么不也都驾驶梅赛德斯吧? (我知道这个问题是否真的很广泛并且可能是封闭的。但是我希望将其设为对其他人开放的Wiki。)
30 java  scala  groovy  grails 

16
保持这个职位会对我的职业产生负面影响吗?[关闭]
我在一家小型软件公司工作,业主也是经理。我担心的是,管理人员完全不屑于满足任何技术进步。一些评论如下: LINQ,nHibernate和ORM是不好的编程习惯,我们将永远不会使用它们。 大多数大型应用程序仍使用VB6编写。 Web只是浪费时间,并不是为了应用程序。 每次发布新版本的开发软件时,我都要听取管理层对它的抱怨,持续几个小时。WPF,WCF,MVC和Entity等技术被完全忽略。 话虽如此,这不是一个糟糕的工作场所,薪水是平均水平,而且离家很近。 我担心的是,即使我们在技术上使用的是.NET的最新版本,我们也几乎没有在使用最新的技术,我们还是会使用.NET 1。 如果我决定搬家,这种“经验”会限制我的职业生涯吗?我已经来过这里几年了。 编辑:非常感谢我的出色回应。老实说,我认为这样做可能符合我的最大利益。

5
何时何地应使用void(而不是例如bool / int)
我偶尔会碰到一些方法,开发人员选择返回一些对函数不重要的东西。我的意思是,当看代码时,它显然void和一样好,并且经过一会儿思考,我问“为什么?” 这听起来很熟悉吗? 有时我会同意,通常最好返回一个诸如boolor的值int,而不是仅仅做一个void。从总体上看,我不确定优缺点。 根据情况,返回int可以使调用方知道受该方法影响的行或对象的数量(例如,将5条记录保存到MSSQL)。如果“ InsertSomething”之类的方法返回布尔值,那么我可以将设计为true成功的方法返回,否则返回false。呼叫者可以选择对该信息采取行动或不采取行动。 另一方面, 会导致方法调用的目的不明确吗?错误的编码经常迫使我仔细检查方法的内容。如果返回某些内容,它将告诉您该方法的类型必须对返回的结果进行某些处理。 另一个问题是,如果您不知道方法的实现,那么开发人员决定返回什么功能并不关键的东西?您当然可以发表评论。 当处理可以在方法的右括号中结束时,必须处理返回值。 引擎盖下会发生什么?调用的方法是否false由于抛出错误而得到?还是由于评估结果而返回false? 您对此有何经验?您将如何处理?

6
单个.cs文件中有多个类-是好是坏?[关闭]
建议在.cs文件中创建多个类,还是每个.cs文件都应有一个单独的类? 例如: public class Items { public class Animal { } public class Person { } public class Object { } } 一分钟就躲避一个事实,那就是这不是一个好的架构示例,.cs文件中是否有多个类才有代码味道?
30 c#  code-smell 

9
在单独工作和处理小型项目时使用某种版本控制?
我经常只为自己从事小型项目。我正在使用一台机器,但是最近我还是考虑使用某种版本控制。这将带来一些好处,例如: 我不再需要本地备份了 错误很容易消除 历史可以保持 但另一方面,它也有一些缺点,例如: 需要额外资源 是时候设置,习惯了,等等。 根据您的经验,单独工作时使用修订控制是件好事吗?

3
Web服务的Haskell vs Erlang
我正在尝试使用一种功能语言来开始一个实验项目,并试图在Erlang和Haskell之间做出选择,而这两点我都非常喜欢。 我喜欢Haskell强大的字体系统和纯正的风格。我有一种感觉,它将使编写真正可靠的代码变得更加容易。而且我认为Haskell的强大功能将使我想做的事情变得容易得多。 不利的一面是,我觉得在Haskell上做Web东西的某些框架(例如Yesod)不如其Erlang计数器部分那么先进。 我更喜欢Erlang的线程和容错方法。我觉得Erlang的可伸缩性可能是一个主要优点。 这就引出了我的问题,人们在Haskell和Erlang中实现Web应用程序后端有什么经验。Haskell是否有软件包提供Erlang中一些轻量级线程和actor?

5
UNIX哲学中的编程是否与函数式编程相同?
UNIX编程环境(经典文本)指出,UNIX编程方法是构建小型的,定义明确的工具,可以将其组合起来以解决更复杂的问题。在学习C和Bash shell时,我发现这是一个功能强大的概念,可用于处理各种编程问题。 仅使用Linux平台,这个概念就很清楚并且一直使用。在命令行上形成的用于重定向I / O,链接系统工具(如ls,grep等)的任何表达式都表明了此概念的强大之处。 让我感到困惑的是,其中许多程序都是使用命令性/过程式编程风格以C语言编写的,但是在命令行上使用它们并将它们结合在一起的方式对我来说更像是函数式编程,其中每个程序都是一个独立的函数,不依赖于它可能加入的任何其他程序的状态。 理解UNIX编程原理是否准确,基本上就是使用可能是用命令式编程风格构建的工具进行的函数式编程吗?

6
我应该选择教义2还是Propel 1.5 / 1.6,为什么?[关闭]
我想听听那些使用Doctrine 2(或更高版本)和Propel 1.5(或更高版本)的人的信。这两个对象关系映射器之间的大多数比较都基于旧版本-Doctrine 1与Propel 1.3 / 1.4,并且两个ORM在其最新修订版中都进行了重大的重新设计。例如,大多数对Propel的批评似乎都集中在“ ModelName Peer ”类上,无论如何在1.5中都弃用了该类。 到目前为止,这是我积累的(并且我尝试使此列表尽可能平衡...): 推进 优点 对IDE非常友好,因为它生成了实际的代码,而不是依赖于PHP魔术方法。这意味着诸如代码完成之类的IDE功能实际上很有帮助。 快速(就数据库使用而言-对数据库不进行运行时自省) 架构版本之间的干净迁移(至少在1.6 beta中) 可以生成PHP 5.3模型(即名称空间) 使用方法之类的东西很容易将很多东西链接到一个数据库查询中useXxx。(请参见上面的“代码完成”视频) 缺点 需要一个额外的构建步骤,即构建模型类。 每当更改Propel版本,更改设置或更改架构时,都需要重建生成的代码。这对某些人可能是不直观的,并且丢失了应用于模型的自定义方法。(我认为吗?) -不正确;自定义方法不会丢失,因为生成的类是基类。Propel提供了专门用于扩展的实体类。 一些有用的功能(即版本行为,架构迁移)处于beta状态。 教义 优点 更流行 与Propel的ActiveRecord策略相比,学说查询语言可以表达数据之间潜在的更复杂的关系。 与Propel相比,更易于添加可重用的行为。 用于构建架构的基于DocBlock的注释嵌入在实际的PHP中,而不是单独的XML文件中。 在各处使用PHP 5.3命名空间 缺点 需要学习一种全新的编程语言(Doctrine查询语言) 根据“魔术方法”在多个地方实现,使IDE自动完成功能一文不值。 需要数据库自省,因此默认情况下比Propel慢一些;缓存可以消除这种情况,但是缓存会增加相当大的复杂性。 较少的行为包含在核心代码库中。Propel开箱即用提供的某些功能(例如嵌套集)仅可通过扩展使用。 怪异的巨大:) 我仅通过阅读可用于这两种工具的文档来收集了这些信息-我实际上还没有构建任何东西。 我想听听那些曾经使用这两种工具的人,分享他们在每个库的优缺点方面的经验,以及他们对此的建议:)
30 php  orm  doctrine 

7
是否有Windows编程哲学?[关闭]
我一直在Unix和Windows环境中进行编程。通常,我在Unix上工作,在那里我学习了Unix Philosophy,可以概括为: 编写可以做一件事并且做得很好的程序。 编写程序以协同工作。 编写程序来处理文本流,因为这是一个通用接口。 Unix和Windows世界之间的编程文化似乎存在明显差异,例如: GUI与CLI 注册表与配置文件 很多专门针对任何给定需求的工具与可以组合在一起的一组通用正交工具 Windows世界中是否有等同于“ Unix哲学”的东西?哪些Unix程序员可以从Windows中学到什么,或者在转向Windows编程时应该注意什么? 我希望答案集中在Windows编程的最佳实践上(而不是Windows和Unix之间的斗争)。


5
作为一名自学成才的程序员,我如何在不再次上学的情况下获得学术基础?[关闭]
作为一名自学成才的程序员,我过着很好的生活,但是当我发现自己与拥有CS学位的同伴讨论一些低层次的基础主题时,我的知识就会出现空白。我是个大人物(架构师),所以很长一段时间都没有打扰我,但是最近我想知道是否有可以采用的方法可以帮助我在不回学校的情况下学习这些基础知识?您是否可以推荐一些书籍,网站或视频,这些书籍,网站或视频会给我带来全新的视角,而不是根据需要的心态来学习?

8
前端优先或后端优先。这两个是好的系统设计实践?
我现在有一个客户,要求我开发学校注册系统。现在,这是我第一次遇到这种挑战。我创建的大多数过去的软件都没有那么复杂。 我知道你们大多数人都已经创建了复杂的软件,我只想就此提出建议。我应该先设计前端还是后端? 谢谢! 这是我前一段时间在互联网上找到的一篇文章的结论。只想分享 http://www.skitoy.com/p/front-end-vs-back-end-developers-my-take/157 前端与后端开发人员(我的看法) 我个人的看法 同样,这是一个培训问题,一些广泛的笔画概括: 前端开发人员 通常没有CS学位,或者没有三级学校的CS学位。 使用与基本语言类似的语言(请参阅PHP是基本语言) 具有将photoshop文档转换为CSS / HTML / etc的视觉技巧。 由于使用无类型语言,因此对迭代编程具有较高的容忍度 后端开发人员 有CS学位或丰富经验 在他们的问题解决方法上趋向于我 不要介意花几天时间寻找一个正在泄漏的物体 尝试构建工具来解决问题

7
为开源项目选择许可证
我已经完成了一些开源项目,并且计划将来做更多。到目前为止,我已经在GPL下发布了所有代码,但是我读了几篇文章,声称GPL对于在企业环境中使用的任何代码都过于严格。据推测,这减少了捐款。 这是我要完成的工作: 对于完整的应用程序: 除销售对应用程序的支持外,不得用于商业用途(即,该应用程序不能出售,但周围的一切都可以出售) 对于库(组件,插件等): 无需修改即可纳入商业项目 库/组件的任何修改都必须是开源的(归还)-项目的其余部分,无论是否商业,均不受影响 对于应用程序,GPL似乎仍然是合理的选择。对于图书馆,我对许可证的原始理解使我认为LGPL是一个不错的选择,但是我不确定。我看过麻省理工学院的许可证,这似乎太宽松了。 在大多数情况下,我希望人们能够在任何需要的地方使用我的代码,只要可以做出任何改进即可。 这使我想到了一个问题:LGPL是开源库,组件,插件等的合理选择吗?有更好的选择吗?GPL是我的应用程序的不错选择还是有更好的选择? 更新: 对于那些对我的最终决定感兴趣的人,我决定根据MPL,LGPL和GPL多许可计划释放我的库。这使几乎每个人都可以无偿使用我的代码,除非他们根据MPL对其进行了修改,在这种情况下,必须将其归还。 这意味着FSF和专有软件都可以使用该代码,但是可以防止“不良”商业利用(或者,我想这样)。

11
失败的项目:何时调用?
几个月前,我的公司发现自己手忙脚乱地遇到了一个项目的紧急情况,而我的整个6人团队基本上都花了5周的“紧缩周”。在上线之前的48个小时里,我工作了41个,其中两个背靠背通宵营业。在这之中,我发表了迄今为止我最成功的问题。 在这段时间里,从来没有任何关于“失败”的言论。它始终是“不管痛苦如何都完成它”。 现在事情已经过去了,作为一个组织的我们已经有一段时间坐下来对我们学到的知识进行评估,我想到了一个问题。我不能说我曾经参加过一个我说“失败”的项目。大量延迟或超出预算,有些灾难性地如此,但我总是最终提供一些东西。 但是我一直都在听到“失败的IT项目”的消息。我想知道人们对此的经验。定义“失败”的参数是什么?背景是什么?就我们而言,我们是一家拥有外部客户的软件商店。大型公司内部的项目是否有更多的“失败”空间?你什么时候打那个电话?当您这样做时会发生什么? 我根本不相信做我们做的事情是明智的业务举动。这不是我的电话(我只是一个代码猴子),但我想知道减少损失,说我们没有交付并继续前进可能更好。我不只是说,由于长时间的辛苦工作,公司在该项目上损失了很多钱,加上公司在员工士气和忠诚度方面的无形成本很大。反对未能交付像这样的高知名度项目的公关打击的因素是……我不知道正确的答案是什么。

12
号码本地化是否不必要?
我刚刚阅读了此页面http://weblogs.asp.net/scottgu/archive/2010/06/10/jquery-globalization-plugin-from-microsoft.aspx 他们所做的一件事是将阿拉伯日期转换为阿拉伯日历。我想知道这样做是否是个好主意。对于用户而言,它实际上是否会令人讨厌/困惑(即使用户是阿拉伯人)。 另外,我的第二个问题是,对于某些文化(例如德语),我们真的需要将33,899.99更改为33.899,99吗?我的意思是这样做没有什么害处,因为该库已经为我们做到了,但这实际上不会给用户带来更多混乱(即使他是德国人,等等)。 我敢肯定,这些人来自什么文化,如果我给您一个数字33,899.99,您将不可能正确地猜对吗?(除非我的网站/应用程序是您一生中使用过的第一个网站/应用程序,可以说这是可能的,但可能性很小) 我的意思是“通用”,这是每个人都会看到并知道其含义的格式。它不一定是用黑白之类的东西编写的标准。只要每个人都可以阅读并直接知道文本所代表的含义,那就很普遍了。可以肯定的是,1.234,00绝对不是通用的。我的意思是,我非常确定您可以找到一生中一直在使用计算机但从未遇到过这种数字格式的人。由于大多数网站/应用程序一直在使用1,234.00而不进行任何更改以适应本地化,因此我相信这已成为事实(每个人都会看到并知道它的含义的通用格式)。 至于日期,如果我们写03/01/02,我敢肯定,没有人会知道(马上,马上,没有歧义)今天是几号。但是如果我们将它们写成这样,没有人能弄错2003年1月2日,2003年2月1日,2001年2月3日不是吗? 顺便说一句,这个问题是针对本地化的,不要告诉我“嘿,不是每个人都懂英语!”之类的东西。因为那是国际化的问题(这超出了本主题)。让我们坚持关于本地化的讨论。

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.