软件工程

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

16
开发人员团队需要经理吗?
背景: 我目前是一个由4人组成的团队的成员:1个经理,1个高级开发人员和2个开发人员。我们为大约3500名员工的组织执行了一系列定制的内部系统/项目(例如6-8周),以及以前创建的系统所需的所有维护和支持。我们没有足够的精力来完成可能要走的所有工作-人手不足。管理层承认这一点,但是预算限制限制了我们向团队招募更多成员的能力(即使我们将薪金返还给了储蓄)。 改变 这使我们离开了现在的位置。我们的经理将继续担任牧场的新职务,团队中有空缺。管理层正在利用这一机会重组我们的团队,这将看到团队经理的角色被另一位开发人员和另一位高级开发人员所取代。他们的逻辑是我们需要更多的开发人员,因此这是一种为其筹集资金的方法(其中一个角色部分由另一个空缺职位提供资金)。 团队将没有直接的直线经理,而职位和职责将由上级和(相对较新的)服务经理(非技术角色,几乎没有开发知识/经验,其重点是共享的)来划分其他团队和个人)-谁将是我们在食物链中的下一位实际经理。 我猜最后一个问题是: 是否可以在没有经理的情况下运营开发团队?你有经验吗?哪些事情可能出问题/对我们有好处? 理想情况下,我想“以这种方式来做事”,或提出一些反对的意见。

11
我需要测试一切吗?
我将在Ruby on Rails中开始我的第一个实际项目,并且强迫自己编写TDD测试。我看不出编写测试的真正优势,但是由于它看起来非常重要,因此我将尝试。 是否有必要测试应用程序的每个部分,包括静态页面?
28 testing  tdd 

10
为什么大多数编程语言都没有“!>”(不大于)和“!<”(不小于)运算符?
我想知道是否有任何原因-或者仅仅是历史的偶然- 大多数编程语言中都没有!&gt;和!&lt;运算符? a &gt;= b (大于或等于b)可以写成!(a &lt; b) (a不小于b)等于a !&lt; b。 当我编码自己的表达式树生成器时,这个问题使我震惊。大多数编程语言都有的a != b运算符!(a=b),那么为什么不!&gt;加!&lt;? 更新: !&lt;(不少于)比(大于或等于)更容易发音&gt;= !&lt;(不少于)的类型比&gt;=(大于或等于)的类型短 !&lt;(不少于)比(大于或等于)更容易理解*&gt;= *因为OR是二进制运算符,所以您的大脑需要操作两个操作数(grater,等于),而因为NOT是一元运算符,并且您的大脑仅需要操作一个操作数(较小)。

4
拦截与注入:框架架构决策
我正在帮助设计这个框架。使用某些通用组件应完成一些通用任务:特别是记录,缓存和引发事件。 我不确定是否最好使用依赖注入并将所有这些组件引入每个服务(例如属性),还是应该在每种服务方法上放置某种元数据并使用拦截来完成这些常见任务? 这是两个示例: 注射: public class MyService { public ILoggingService Logger { get; set; } public IEventBroker EventBroker { get; set; } public ICacheService Cache { get; set; } public void DoSomething() { Logger.Log(myMessage); EventBroker.Publish&lt;EventType&gt;(); Cache.Add(myObject); } } 这是另一个版本: 拦截: public class MyService { [Log("My message")] [PublishEvent(typeof(EventType))] public void DoSomething() …

3
Safari图书在线仍然是镇上最好的游戏吗?[关闭]
我是Safari图书的订户,已经有很多年了。我喜欢立即获得所有书籍。我想知道是否有更好的竞争服务。有谁知道是否还有另一个可比的服务,它的搜索功能更好(我的沮丧之处是促使我首先问这个问题的原因...)?
28 books 


12
与开发与Web应用程序相同的应用程序相比,为智能手机开发应用程序有哪些优势?
让我们以Facebook应用程序为例。当用户只能访问其页面并执行相同的操作时,他们为什么开发应用程序?对我来说,这意味着更多的维护和更多的成本,因为对于添加到Web应用程序中的每个功能,该功能也必须添加到智能手机应用程序中。 那么,当我只拥有一个Web应用程序时,为什么要不止一次地开发(针对每个样式化的iOS,Android等)?我可以获得什么好处?我唯一想到的就是GPS功能。 编辑: 我的问题更面向仅由公司某些成员使用的业务应用程序,而不是与出售应用程序(私人使用)有关。因此,与一些答案所说的相反,通过开发智能手机应用程序将对我有利,因为“智能手机商店”将使更多的销售受益,这一点并不重要,因为该应用程序是供私人使用的。 通过将应用程序开发为Web应用程序,意味着可以通过智能手机浏览器以及在PC(任何支持的浏览器)中对其进行访问,但是将其开发为本机应用程序会将其限制为仅某种类型的智能手机,因此我们将限制使用。另一方面,将其开发为Web应用程序意味着要访问该应用程序,必须有Internet连接。 因此,请记住这一点,您如何说服老板为给定的智能手机平台(iOS / Android)编写应用程序,而不是将其开发为Web应用程序?

10
为什么我在了解C和C ++的情况下学习C ++ 11?[关闭]
我是C和C ++的程序员,尽管我不拘泥于两种语言,而是将两者混合编写。有时在类中包含代码,可能带有操作符重载或模板,如此出色的STL显然是一种更好的方法。有时,使用简单的C函数指针的可读性和清晰度要高得多。因此,我发现两种语言都具有美感和实用性。我不想讨论“如果将它们混合并使用C ++编译器进行编译,那么就不再是混合,而是所有C ++”,我想我们都理解混合它们的意思。另外,我不想谈论C与C ++,这个问题全都与C ++ 11有关。 C ++ 11引入了我认为对C ++的工作方式的重大更改,但是它引入了许多特殊情况,异常和不规则性,这些情况改变了不同功能在不同情况下的行为,对多重继承施加了限制,用作关键字的标识符,扩展字符串文字,lambda函数变量捕获等。 我知道在将来的某个时刻,当您说C ++时,每个人都会假定C ++ 11。就像如今您说C一样,您很可能是说C99。这使我考虑学习C ++ 11。毕竟,如果我想继续用C ++编写代码,可能只是因为我的同事在某些时候需要开始使用这些功能。 以C为例。经过这么多年,仍然有很多人在学习和编写C语言代码。为什么呢?因为语言很好。好的意思是,它遵循许多规则来创建好的编程语言。因此,除了功能强大(几乎所有编程语言都很容易实现或很难实现)之外,C还是常规的,几乎没有例外。但是,C ++ 11我不这么认为。我不确定C ++ 11中引入的更改是否会使该语言变得更好。 所以问题是:为什么我要学习C ++ 11?
28 learning  c++  c  c++11 

6
有什么充分的理由可以大写SQL关键字?
似乎有很多开发人员通过大写关键字来编写SQL: SELECT column FROM table INNER JOIN table ON condition WHERE condition GROUP BY clause HAVING condition 我想知道为什么人们会坚持这种方法?显然,这是一个由来已久的惯例-但我从未遇到过需要大写的RDBMS 。 就我个人而言,我发现那条呼喊的关键词引起了人们对查询错误部分的注意,这就是为什么我用小写形式写关键词的原因。 尽管如此,仍然有足够多的人使用此约定,我认为我可能会遗漏某些东西,因此是这个问题。

4
NHibernate用户程序员最常犯的错误和反模式是什么?
NHibernate用户程序员最常犯的错误和反模式是什么?请解释为什么这些是不良做法,或提供指向资源的链接以供进一步阅读。 例如: 对于新的NHibernate程序员而言,一种常见的反模式是使用身份/本机POID代替ORM样式。在这里阅读更多...
28 nhibernate 

5
可以使用简短的EULA吗?
我需要在我的(商业)软件中添加EULA,但我负担不起律师费用。我也浏览了互联网上的各种EULA示例,但它们都是针对特定软件或特定国家/地区的,并且可能是从其他商业软件复制而来的。 因此,我正在考虑使用简短的自定义EULA,其中仅提及必要内容。就像是: 您可以重新分发该软件的试用版 如果您购买许可证,则不得重新分发或出售 您不得因使用此软件而引起的任何财务或物质损失而起诉我 本软件的版权为XXX,保留所有权利。 在大多数情况下,这种EULA会保护我吗?您还知道使用短版EULA的任何公司吗?

8
为什么垃圾收集仅清除堆?
基本上,到目前为止,我已经了解到垃圾回收将永远擦除当前未指向的任何数据结构。但这仅检查堆是否存在这种情况。 为什么不同时检查数据部分(全局变量,常量等)或堆栈呢?关于堆,这是我们唯一要进行垃圾收集的东西吗?

7
对于静态表达不充分的语言,匈牙利符号是否可以解决?[关闭]
在埃里克·利珀特(Eric Lippert)的文章中,匈牙利表示法是怎么回事?,他指出,匈牙利符号(一种好符号)的目的是为了 扩展“类型”的概念以涵盖除存储表示信息之外的语义信息。 一个简单的示例是,用x表示变量的前缀是x,用y表示变量的前缀是y,无论这些变量是整数还是浮点数或其他形式,这样当您不小心编写时xFoo + yBar,代码显然看起来是错误的。 但是我也一直在阅读有关Haskell的类型系统的信息,似乎在Haskell中,可以使用编译器会为您检查的实际类型来完成同一件事(即“将类型的概念扩展为包含语义信息”)。因此,在上面的示例中,xFoo + yBar如果正确设计程序,在Haskell中实际上将无法编译,因为它们将被声明为不兼容的类型。换句话说,Haskell的类型系统似乎有效地支持了相当于匈牙利表示法的编译时检查。 那么,匈牙利符号法是否只是一种编程语言的创可贴,其类型系统无法对语义信息进行编码?还是匈牙利记谱法提供的东西超出了Haskell的静态类型系统所能提供的东西? (当然,我以Haskell为例。我确定还有其他语言具有类似表现力(丰富?强?)类型系统,尽管我还没有遇到过。) 明确地说,我不是在用数据类型注释变量名,而是在程序上下文中使用有关变量含义的信息。例如,变量可以是整数,浮点数,双精度或长整数等,但变量的含义可能是它是以英寸为单位的相对x坐标。这就是我所说的通过匈牙利表示法(和通过Haskell类型)编码的信息。

3
为什么在Python中没有显式的访问修饰符:
如果“显式优于隐式”,为什么Python中没有显式访问修饰符:Public,Protected,Private等? 我知道想法是程序员应该通过提示知道该怎么做-无需使用“蛮力”。但是,IMO的“封装”或“信息隐藏”不仅是要使人们远离,而且还是组织和结构的问题:您的开发层应该具有自定义的,明确界定的范围和边界,就像物理系统一样。 有人可以在这里为我提供可靠的解释,为什么在Python中这种隐含的访问限制不是隐式的,而是隐式的? 编辑:到目前为止,我已经看到了3个建议的答案,并且我意识到我的问题有两个部分: 例如,为什么没有关键字 private def myFunc(): dostuff.... 而不是国际海事组织的丑陋和难以键入的下划线。但这不是重点。 更重要的是: 为什么这些访问修饰符仅是“建议”或提示而没有执行。以后很难改变吗?将“受保护”更改为“公共”非常简单-如果您的继承链复杂,设计困难,则设计很糟糕-应该完善设计,而不要依赖于易于编写的语言功能结构不良的代码。 强制使用访问修饰符后,您的代码将自动划分开-您知道某些段不在范围内,因此除非有必要,否则不必处理它们。而且,如果您的设计不好,并且发现自己不断将事物移入和移出不同的范围,那么该语言可以帮助您清理行为。 尽管我很喜欢Python,但我发现第二点是一个严重的缺陷。我还没有看到一个很好的答案。

7
C ++技能高于C技能?[关闭]
我觉得经常看到的C / C ++并不能真正描述我在简历中的技能。因此,我计划将其分为高级C ++知识和普通C技能。 您认为这会让读者感到困惑吗?她可能会想:“ C是C ++的子集,那么这个人想打电话给我什么?” 好吧,我想告诉的是:我已经完成了几个真实的C ++项目,而纯粹的C项目只是一个业余爱好。您是否同意熟练的C ++程序员不一定是合格的C专家,或者您认为此转换很容易完成?
28 c++  c  skills 

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.