软件工程

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


7
高级导师应聘请几位大三学生?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我们商店的规模会动态增加,因此我们计划雇用一些新的初级开发人员,但我们不想通过过多的指导和培训来压倒老年人。在高级开发人员的指导者仍然能够有效地完成其任务时,有多少(通常是刚从大学毕业的初级开发者)能够(并且应该)担任高级开发者指导?

6
“定制软件公司”如何处理技术债务?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 什么是“定制软件公司”? 所谓“定制软件公司”,是指主要通过构建定制的,一次性的软件来赚钱的公司。例如代理商或中间件公司,或像Redify这样的承包商/顾问。 “定制软件公司”的反面是什么? 与上述业务模型相反的是专注于长期产品的公司,无论它们是可部署的台式机/移动应用程序还是SaaS软件。 确定技术债务的可靠方法: 我为一家试图专注于SaaS产品套件的公司工作。但是,由于某些限制,我们有时最终会屈从于某些客户的意愿,而我们最终会构建只能用于该客户的定制软件。 这是招致技术债务的肯定方法。现在,我们需要维护一些软件,这对我们的核心产品没有任何影响。 如果定制工作是增加技术债务的可靠方式,那么代理机构应如何处理呢? 所以这让我开始思考。没有核心产品作为其业务模型中心的公司,他们总是在进行自定义软件工作。他们如何应对技术债务的概念?怎么不使他们陷入技术破产?

19
具有类似Lisp的语法扩展机制的编程语言
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我对Lisp的了解有限(尝试在业余时间学习一些知识),但据我了解,Lisp宏允许通过在Lisp本身中进行描述来引入新的语言结构和语法。这意味着可以将新构造作为库添加,而无需更改Lisp编译器/解释器。 这种方法与其他编程语言完全不同。例如,如果我想用一种新的循环或某种特定的习惯来扩展Pascal,则必须扩展该语言的语法和语义,然后在编译器中实现该新功能。 Lisp家族之外是否还有其他编程语言(即Common Lisp,Scheme,Clojure(?),Racket(?)等)提供了类似的在语言本身内扩展语言的可能性? 编辑 请避免进一步讨论,并在回答中要具体。我希望从概念的角度来理解一堆专门针对Lisp宏作为扩展机制的东西,以及哪些非Lisp编程语言可以提供某种概念,而不是一堆可以以某种方式进行扩展的编程语言的清单。靠近他们。

6
我是否应该使用新的C ++ 11“自动”功能,尤其是在循环中?
使用auto关键字的利弊是什么,尤其是在for循环中? for(std::vector<T>::iterator it = x.begin(); it != x.end(); it++ ) { it->something(); } for(std::map<T>::iterator it = x.begin(); it != x.end(); it++ ) { it->second->something(); } for(auto it = x.begin(); it != x.end(); it++ ) { it->?? } 似乎,如果您不知道是否有地图或矢量的迭代器,就不会使用first还是second直接访问对象的属性,是吗? 这让我想起了C#关于是否使用关键字的争论var。到目前为止,我得到的印象是,在C ++世界中,人们auto比var在C#世界中更愿意采用关键词。对我来说,我的第一个直觉是我想知道变量的类型,以便知道可以对它执行哪些操作。
20 c++  c++11 

8
根据历史划分公平团队的策略/算法
我们是一群定期打地板球的人。每节课都是从划分团队的艰巨任务开始的。 那么,有什么比自动选择团队更好的选择呢? 因此,鉴于团队组合和结果的历史记录,以及参加此特定会议的人员列表,找到最佳团队的最佳策略是什么?最佳来说,我指的是尽可能多的团队。 有任何想法吗? 编辑:为了清楚起见,我必须根据其选择的数据将是这样的: [{ team1: ["playerA", "playerB", "playerC"], team2: ["playerD", "playerE", "playerF"], goals_team1: 10, goals_team2: 8 }, { team1: ["playerD", "playerB", "playerC"], team2: ["playerA", "playerE", "playerG"], goals_team1: 2, goals_team2: 5 }, { team1: ["playerD", "playerB", "playerF"], team2: ["playerA", "playerE", "playerC"], goals_team1: 4, goals_team2: 2 }]

12
如何获得动力和时间在课外学习?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我从事程序员工作40个小时,到我回到家时,我要做的最后一件事就是编写更多代码。但是,我感觉自己并没有进步,而且我确实喜欢软件工程。那么,你们如何在工作之外找到时间/动力来提高自己的技艺呢?
20 motivation 

6
5的规则-是否使用?
的3中的规则(5规则状态在新的C ++标准): 如果您需要自己显式声明析构函数,复制构造函数或复制赋值运算符,则可能需要显式声明这三个函数。 但是,另一方面,马丁的“ 清理代码 ”建议删除所有空的构造函数和析构函数(第293页,G12:Clutter): 没有实现的默认构造函数有什么用?它要做的只是用毫无意义的工件使代码混乱。 那么,如何处理这两种相反的意见呢?是否应该真正实现空的构造函数/析构函数? 下一个示例准确地说明了我的意思: #include <iostream> #include <memory> struct A { A( const int value ) : v( new int( value ) ) {} ~A(){} A( const A & other ) : v( new int( *other.v ) ) {} A& operator=( const A & other …

7
如何生成“语言安全” UUID?
我一直想使用随机生成的字符串作为资源ID,因此我可以使用以下较短的URL:/ user / 4jz0k1 但是我从来没有这样做,因为我担心随机字符串的生成会产生实际的单词,例如:/ user / f * cker。这带来了两个问题:对用户而言可能令人困惑甚至令人反感,并且也可能与SEO混淆。 然后我想我所要做的就是建立一个固定的模式,例如每2个字母加一个数字。我对我的'generate_safe_uuid'方法感到非常满意,但是后来我意识到,它仅对SEO更好,对用户更糟,因为它增加了实际生成单词的比例,例如:/ user / g4yd1ck5 现在,我想我可以创建一个方法'replace_numbers_with_letters',并检查它是否未对字典或任何东西形成任何单词。 还有其他想法吗? ps。在撰写本文时,我还意识到,检查一种以上语言(例如英语和法语,西班牙语等)中的单词将是一团糟,而我又开始喜欢仅数字的ID。 更新 每个人都应该阅读一些链接: http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx
20 random  uuid 


4
谁扩展接口?又为什么呢
AFAIK,我的班级extends父类和implements接口。但是我遇到了无法使用的情况implements SomeInterface。它是泛型类型的声明。例如: public interface CallsForGrow {...} public class GrowingArrayList <T implements CallsForGrow> // BAD, won't work! extends ArrayList<T> 在implements语法上禁止使用。我首先想到的是,完全禁止在<>中使用接口,但是没有。有可能,我只需要使用 extends而不是implements。结果,我正在“扩展”接口。这个另一个例子有效: public interface CallsForGrow {...} public class GrowingArrayList <T extends CallsForGrow> // this works! extends ArrayList<T> 在我看来,这似乎是句法上的不一致。但是也许我不理解Java 6的一些技巧?我应该在其他地方扩展接口吗?我要扩展的接口是否应该具有某些特殊功能?

3
Unix套接字的简单说明
我可以搜索,并且已经看过Wikipedia条目和其他地方,但是即使我有一定的编程经验,我还是不太了解这个概念。您能把我当作10岁的孩子,并给我一个关于套接字通讯的清晰解释吗?
20 unix  sockets 

7
持续集成:哪个频率?
我总是在每次提交后启动构建,但是在这个新项目中,架构师只是要求我将频率更改为“每15分钟构建一次”,而我只是不明白为什么这是一个很好的理由,而不是“以每次提交为基础”。 首先,一些细节: Objective-C(iOS 5)项目 10名开发人员 每个构建实际上需要大约1分钟的时间,其中包括构建和单元测试。 集成服务器是Mac Mini,因此这里的计算能力并不是真正的问题 我们将Jenkins与XCode插件一起使用 我的观点是,如果您在每次提交时都进行构建,那么您现在就可以查看出了什么问题,并且可以直接更正您的错误,而不会过于困扰其他开发人员。另外,这样我们的测试仪就不会受到UT错误的困扰。他的论点是,开发人员将被“构建错误”邮件淹没(这不是完全正确的,因为可以将Jenkins配置为仅针对第一个损坏的构建发送邮件),并且如果频率频繁,则无法正确完成指标构建数太高。 那么,您对此有何看法?

3
没有Github的类似Github的“拉取请求”
我是一家金融机构的分析师,由于数据敏感性,该机构不会在云中存储任何数据。但是,我取得了一些成功,使我的团队可以使用Git进行代码管理。我想知道是否有任何方法可以在我们自己的服务器中实现类似Github的请求。我感兴趣的特定功能是能够提交变更集以进行注释,而无需将其实际合并到给定的分支中。我喜欢(1)提交更改,(2)已对更改进行审查和评论,以及(3)接受提交或拒绝它的工作流程。是否可以在我们自己的服务器上实现(甚至更好,可以轻松实现)?
20 git  code-reviews 

8
强调客户端或服务器端处理的利弊
为什么我要编写一个具有大量服务器端处理功能的Web应用程序? 对我而言,在客户端编写程序是一个巨大的优势,因为它只需占用最少的处理即可将数据发送到客户端,从而尽可能地减轻了服务器负载。 除了在服务器端编写网络应用程序并将客户端仅作为视图外,我在编写Web应用程序方面几乎看不到什么。我为什么要这么做?我看到的唯一好处是,我可以使用自己想要的任何语言(http://www.paulgraham.com/avg.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.