软件工程

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

10
如何应对一个认为除了他以外的世界上每个人都是错误的老板?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我的意思是说真的,您如何处理一个甚至更改了我们的变量名(即使它们是合理的)并且将代码(经过审查)发送回4次的家伙?我肯定知道我对开发人员还算不错! 如此多次,他坚持自己的理想,这甚至不是业内的最佳实践!我向他指出了我可以在互联网上找到的任何链接,以证明我的观点,但最终他利用自己的权威将我们拒之门外。 生病了,累了。沮丧 除了辞职以外,我还有其他办法吗?

21
如果您是一个由25个开发人员组成的团队的经理,您将如何激励他们?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 想象一下自己被一家新的创业公司聘用,该创业公司得到了几百万来自风险资本家的支持。 您的任务:organize the development of the next killer app。 25个开发人员太多了,无法单独照顾每个人,那么您会做出什么决定来激励他们? 从股票期权到免费Cookie的任何解答,我将不胜感激;) 当然,这里的窍门(除非您确实是这样一家初创公司的经理),是让您自己沉迷于其中一位程序员。 编辑:这是一个虚构的上下文。这个故事的目的是激发您的愿望。我想捕捉一下激励开发人员的原因。

8
您喜欢代码中的简洁性还是可读性?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 语言快捷方式通常可用于使代码更简洁。 例如,三元和空合并运算符可以减少代码量,但是可以说会损害可读性: 在C#中: Person newGuy = new Person(); if (boss == null) { newGuy.Boss = GetDefaultBoss(); } else { newGuy.Boss = boss; } 在功能上等效于: Person newGuy = new Person(); newGuy.Boss = boss ?? GetDefaultBoss(); 但显然要冗长得多。 简洁性与可读性之间的界限是什么?

8
当团队负责人要发布我的数据库架构时,该怎么办?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我的团队负责人有着糟透的习惯,那就是想弄乱数据库架构,并进行会导致代码库严重破坏的更改(没有真正咨询过我这些更改如何影响代码库)。 通常,我会接受它,但是我们有两个星期的截止日期,而且自从我在一个半月前开始工作以来,这种情况一直在发生。我被带进来,以加快项目的开发。 由于截止日期,我已经每周投入60多个小时,而实际上没有足够的精力来解决这个问题(我已经尝试过一些方法)。我们只有两个人组成的团队,除了每天更改数据库外,他在实际开发(编码)方面的贡献不大。 目前,我感觉自己正在完成所有工作,而且还必须“修复”他所做的更改所导致的问题。 如何处理呢?我已经与我们的经理谈过他在开发部门缺乏工作的情况。他到那里的时间比我多了6个月,但是当您排除他“贡献”的第5个正常形式数据库异常时,我已经写了95%的代码。 有什么建议么? 验尸: 星期五我们与经理进行了讨论,我的忧虑已广为人知。这导致了一些对抗,但是总的来说,我觉得经理正在陪伴我。因此,至少现在我们已经冻结了数据,让我们看看它是如何发展的。

16
阅读与编程相关的书籍的程序员仍然很少吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在Steve McConnell撰写的Code Complete和Andrew Hunt&David Thomas撰写的The Pragmatic Programmer中,他们都声称大多数程序员都不习惯于阅读与编程相关的书籍,或者至少不经常阅读。这仍然成立吗?读过这样的书的程序员仍然很少吗? 我必须承认,直到最近我才开始阅读(现在我无法停止;它正在烧掉我的钱包!)。在我真正反对它之前,我认为写程序比浪费时间阅读它更好。现在,我意识到,至少对我而言,最好的结果就是同时做这两项。 编辑:实际上,我指的是与编程有关的任何书籍。无论是基于特定的语言,技术,模式,范式- 任何可能使您作为程序员受益的事物。我只是指代Code Complete和The Pragmatic Programmer,因为那是我读到的,程序员通常不读这类书。如果标题只是读“读本书的程序员难道还稀有吗?”,这看起来会很奇怪。
21 books 

16
您最喜欢的面试问题是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 您发现哪个问题在采访软件开发人员时特别有价值?使它变得特别有用的问题是什么? 我正在寻找一个您想问的特定问题,而不仅仅是“让他们写代码”之类的面试方法。
21 interview 

16
您使用什么简单的技术来提高性能?
我说的是我们编写简单例程的方式,目的是在不使您的代码更难阅读的情况下提高性能,例如,这是我们学习到的典型方法: for(int i = 0; i < collection.length(); i++ ){ // stuff here } 但是,我通常在a foreach不适用的情况下执行此操作: for(int i = 0, j = collection.length(); i < j; i++ ){ // stuff here } 我认为这是一种更好的方法,因为它只会调用length一次该方法……我的女友说这虽然很神秘。您还可以在自己的开发中使用其他任何简单的技巧吗?

10
设置电子邮件通知的最佳做法和礼节
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 如果您要为网站的客户设置电子邮件警报以进行订阅,则应遵循哪些礼节规则? 我能想到的几个问题: 用户可以选择退出 纯文字(或高雅的远程图像) 每周发送不超过一次 客户可以对其收到的电子邮件进行细粒度的控制(仅接收他们感兴趣的内容) 我还应该考虑什么? 从编程的角度来看,设置和运行电子邮件通知的最佳方法是什么? 我应该使用ASP.NET服务吗?Windows服务?两者都有什么陷阱? 我应该如何记录发送的电子邮件?我不在乎是否会收到邮件,但我确实需要能够证明自己已发送或未发送电子邮件。

4
当JSP scriptlet不好时,为什么JSX好呢?
React.js提供JSX作为类似于XHTML的语法,用于构造组件和元素的树。JSX编译为Javascript,而不是在JSX中正确提供循环或条件,而是直接使用Javascript: <ul> {list.map((item) => <li>{item}</li> )} </ul> 我还无法解释的是,如果在JSP中类似的构造被认为是不好的,为什么这被认为是好呢? 在JSP中类似这样的东西 <ul> <% for (item in list) { %> <li>${item}</li> <% } %> </ul> 被认为是可读性问题,可以使用标记来解决<c:forEach>。JSTL标签背后的理由似乎也可以应用于JSX: 当您不在类似XHTML的语法(尖括号,嵌套)和Java / Javascript(卷曲,逗号,括号)之间切换时,阅读起来会更容易一些 当您具有可在渲染功能中使用的完整语言和平台时,可以阻止您添加不属于该逻辑的逻辑。 我能想到的JSX不同的唯一原因是: 在Java中,您有动机去做错事-JSP会被热重载,因此很想将代码放入JSP中以避免重新生成/重新启动周期。为了立即获得生产力,牺牲了可维护性。放逐scriptlet并限制为一组固定的模板结构是有效地增强可维护性的一种方法。JS世界中不存在这种失真。 JSP和Java语法笨拙,<% ... %>无法将Java代码与元素生成区分开来,并且Java的本机语法缺乏foreach概念或一流的功能(直到最近)。在我看来,在JSX中将本机Javascript用于循环和条件的语法代价是非零的,但不如JSP差,并且可以说不足以保证引入特定于JSX的循环和条件元素。 还有其他我想念的东西吗?

5
适用于公共REST API的OAuth2 ROPC与基本身份验证?
我在这里感兴趣的特定用例是针对可公开使用的服务器端点(例如,公共REST API)对REST客户端进行身份验证。 这里最简单的解决方案是Basic Auth。但是我经常听到OAuth2在几乎所有情况下都被视为一种出色的身份验证解决方案。 事实是,对于REST客户端针对REST服务器进行身份验证的唯一可行的OAuth2授予​​类型是资源所有者密码凭证(ROPC),因为代码授予和隐式授予要求用户界面/网页(由Auth服务器托管)用户登录并手动授权客户端应用。 ROPC的工作方式是,通过发送资源所有者的用户名/密码和客户端ID作为查询字符串参数?这比基本身份验证(IMHO)更为不安全,基本身份验证至少使用base-64对凭据进行编码,然后将其发送到可以由TLS加密的标头中! 所以我问:在公共REST API的上下文中,OAuth2 ROPC是否真的比Basic Auth更好?有什么比OAuth2 ROPC更安全的? 更新资料 我刚刚读了这篇出色的文章,解释了Amazon针对AWS的非基于OAuth2的REST安全性。从本质上讲,这是一个基于私钥的解决方案,其中,每个REST请求的哈希都将生成,并作为sidecar与常规(未加密)请求一起发送。只有客户端和服务器知道私钥,因此,当服务器接收到该请求(再次包含普通请求+散列请求)时,服务器将查找客户端的私钥,将相同的哈希应用于普通请求,并然后比较两个哈希。 这听起来比OAuth2的ROPC更加复杂,复杂和安全!除非我在这里缺少一些重要的东西,否则OAuth2 ROPC只会发送client_id,username并且password作为查询字符串参数...完全完全不安全!这种基于HMAC /哈希的解决方案似乎更加令人印象深刻和安全。 问题是,即使是该文章的作者也继续说: 您[也会]慢慢意识到并接受在某个时候您将必须实现OAuth ... 巴巴巴哇?!?!如果OAuth2的安全性不如此聪明的基于HMAC /哈希的解决方案,那么为什么本文的作者感到在某些时候需要使用OAuth。我很混乱。
21 rest  oauth  https 

6
通常,是否值得使用虚拟函数来避免分支?
似乎粗略地等效于指令,等同于分支未命中虚拟函数的代价具有类似的权衡: 指令与数据缓存未命中 优化障碍 如果您看到类似: if (x==1) { p->do1(); } else if (x==2) { p->do2(); } else if (x==3) { p->do3(); } ... 您可能具有成员函数数组,或者如果许多函数都依赖于同一分类,或者存在更复杂的分类,请使用虚函数: p->do() 但是,总的来说,虚拟函数和分支的代价是多少?很难在足够多的平台上进行测试以进行泛化,所以我想知道是否有人有一个粗略的经验法则(可爱if的是,断点只有4 s吗?) 总的来说,虚拟功能更加清晰,我倾向于它们。但是,我有几个非常关键的部分,可以在其中将代码从虚函数更改为分支。在进行此操作之前,我希望对此有所考虑。(这不是微不足道的更改,也不是易于在多个平台上进行测试)
21 c++  performance 

4
为什么我应该使用MSBuild而不是Visual Studio解决方案文件?
我们正在使用TeamCity进行持续集成,并通过解决方案文件(.sln)构建我们的发行版。过去,我曾在各种系统上使用过Makefile,但从未使用过msbuild(我听说这有点像Makefiles + XML mashup)。我已经看到很多关于如何直接使用msbuild而不是解决方案文件的文章,但是我对为什么要使用msbuild并没有一个很明确的答案。 那么,为什么还要麻烦从解决方案文件迁移到MSBuild“ makefile”呢?我们确实有几个版本,它们之间的区别是#define(功能完善的版本),但大多数情况下一切正常。 更大的问题是,现在添加项目/源代码时,我们必须维护两个系统。 更新: 人们能否阐明以下三个组成部分的生命周期和相互作用? Visual Studio .sln文件 许多项目级别的.csproj文件(据我了解,这是一个“子” msbuild脚本) 自定义msbuild脚本 可以肯定地说,在自定义msbuild脚本是手写的并且通常以“原样”使用已经存在的单个.csproj的情况下,从Visual Studio IDE GUI照例使用/维护.sln和.csproj吗?这是我可以看到减少维护重叠/重复的一种方式... 希望从其他人的操作经验中得到一些启发

2
操作系统如何限制堆栈和堆的大小?
注意:如果您需要考虑特定的操作系统才能回答问题,请考虑使用Linux。 每当我运行一个程序时,都将为其分配一个虚拟内存空间,其中有一个用于堆栈的区域,一个用于堆栈的区域。 问题1:堆栈和堆是否有静态大小限制(例如,每个大小为2 GB),还是该限制是动态的,根据程序执行期间的内存分配而变化(即,总共4 GB供用户使用)两者兼而有之,因此,如果程序仅使用堆栈,那么它将能够具有4 GB的堆栈)? 问题2:如何定义限制?它是总可用RAM内存吗? 问题3:文本(代码)和数据部分如何处理,如何限制它们?
21 linux  memory  stack  heap 

5
TypeScript背后的动机是什么?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么答案正确的解释。没有足够详细信息的答案可以被编辑或删除。 此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 我们有了JavaScript,然后有了Flash,然后有了Silverlight,然后HTML5拥有了它们。 那么TypeScript背后的动机是什么?TypeScript将解决哪些问题,我们将获得哪些改进? http://www.typescriptlang.org/

3
什么时候在Groovy中编写显式的return语句?
目前,我正在研究Groovy / Grails项目(这是我的新手),我想知道return在Groovy方法中省略关键字是否是一种好习惯。据我所知,您必须显式插入关键字(即用于保护子句),那么在其他地方也应该使用该关键字吗?在我看来,附加return关键字可提高可读性。还是只需要习惯一下?您对该主题有何经验? 一些例子: def foo(boolean bar) { // Not consistent if (bar) { return positiveBar() } negativeBar() } def foo2() { // Special Grails example def entitiy = new Entity(foo: 'Foo', bar: 'Bar') entity.save flush: true // Looks strange to me this way entity }

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.