软件工程

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

7
专用构建机器的目的是什么?
由于多种原因导致上一个构建周期的部署不佳,我竞选办公室使用专用的构建机器执行所有将来的部署,而我的老板接受了这个建议。 但是,我们不必在办公室使用一台实际的机器,而必须与其他几个小组共享一台机器-麻烦的是必须带着所有必要的信息离开我的办公室然后走上楼梯到另一个办公室来执行简单的构建,这让我想知道为什么我一开始就提出这个建议。 最初,拥有一台单独的构建机器的想法是,将我自己的本地编写的代码与其他几名开发人员的代码分开,并从部署中分离出我在机器上拥有的所有劫持文件。这也是为了解决我对ClearCase文件管理系统日益增长的担忧,该系统通常拒绝让我部署某些构建活动,除非我还包括了另一个具有“依赖关系”的活动。 现在,我实际上正在执行此过程,我想知道我是否误解了使用构建机器的全部目的-并且由于我们仅使用该机器将代码部署到我们的测试,登台和生产环境,以及不是针对我们的个人开发人员测试部署,我不确定它是否有任何用途。 那么,使用构建机器的真正原因是什么,我什至接近正确使用它?

2
什么是“阴影” Java依赖项?
JVM开发人员在这里。最近,我在IRC聊天室甚至在我自己的办公室里看到了所谓的“ 阴影 ” Java库的玩笑。使用的上下文将类似于: “ 这样为XYZ提供了一个“阴影”客户端。 ” 完美的例子是针对HBase的Jira问题:“ 发布具有阴影依赖项的客户端工件 ” 所以我问:什么是阴影 JAR,“阴影”是什么意思?
74 java  libraries  jvm 

7
堆栈是构造程序的唯一合理方法吗?
我见过的大多数体系结构都依赖调用堆栈来保存/恢复函数调用之前的上下文。这种常见的范例使大多数处理器都内置了推入和弹出操作。是否有没有堆栈的系统?如果是这样,它们如何工作?它们的作用是什么?

10
为什么敏捷只涉及测试驱动开发(TDD)而不是开发驱动测试(DDT)?
因此,我是敏捷的新手,但不是测试驱动的开发。我在大学里的教授都是关于测试的思想,然后是代码然后是测试。我不确定我理解为什么。从我的角度来看,随着代码的发展,很可能会改变很多前期成本。 这就是我对TDD的想象以及为什么让我感到困惑。如果我要作为TDD承包商来盖房子。 给我您所有的规格(故事)。 获得有关规格的批准。 将所有规格分解为我认为需要的检查(展望未来)。 打电话给检查员看一下这些要点,然后告诉我,我现在检查不及格(谢谢)。 开始盖房子。 每天召回检查员(通过2/100)。 抱歉,我的理解存在问题,现在我需要再添加9个检查并更改其中的27个。 呼叫检查员通过1/109。 该死的。检查员为什么不喜欢这个...哦,我更新了该方法名称... 建立更多。 UGGGGHHHH更多更改让我更新了该死的检查器。哦,我没有失败。 我做完了吗 好的,那可能有些古怪,但是直到我的代码在那里,我才看不到如何知道所有方法以及事情将如何工作。99%的时间我必须返回并以任何方式更新单元测试,并在添加时添加更多内容。似乎倒退了。 似乎更合适的是DDT或开发驱动的测试,这似乎是社区几乎忘却的事情。 据我了解,房屋的滴滴涕看起来像: 给我您所有的规格(故事)。 获得有关规格的批准并将其发布。 启动一个单元(基础)。 记下一些棘手的逻辑(注释)。 在开始下一个单元的最后,进行检查(创建测试)。 解决发现的所有问题,然后再次检查。 批准将本单元移至下一个。 如果我们都说实话,这听起来不是更人性化,而是集中在开发人员和业务上吗?似乎可以更快地进行更改,而且似乎不会产生开销的TDD。

7
如何管理软件项目中的意外复杂性
当问到Murray Gell-Mann时,Richard Feynman如何解决了这么多难题时,Gell-Mann回答说Feynman有一个算法: 写下问题。 认真思考。 写下解决方案。 盖尔曼(Gell-Mann)试图解释说,费曼是另一种类型的问题解决者,研究他的方法没有任何见识。对于管理中型/大型软件项目的复杂性,我有点相同的感觉。优秀的人天生就是擅长的,并且设法以某种方式分层和堆叠各种抽象,以使整个事物易于管理,而不会引起任何不必要的麻烦。 那么,费曼算法是管理意外复杂性的唯一方法,还是软件工程师可以始终如一地应用实际方法来应对意外复杂性?

17
自我教学在编程领域有多重要?[关闭]
我16岁。大约一年前,我刚开始读高中时就开始编程。我正在从事编程工作,并且正在尽我最大的努力去学习。刚开始的时候,我从书中学习了C ++的基础知识,从那时开始我自己学习东西。如今,我比一年前经验丰富。我知道我必须自己学习,因为高中不会(可能)教给我关于编程的任何有价值的东西,而且我想做好准备。 这里的问题是:自己学习编程有多重要?

6
是catch(…){抛出;}`不好的做法?
虽然我同意... 不进行重新捕获确实是错误的,但是我相信使用这样的结构: try { // Stuff } catch (...) { // Some cleanup throw; } 在RAII不适用的情况下是可以接受的。(请不要问……不是我公司的每个人都喜欢面向对象的程序设计,RAII通常被视为“无用的学习工具”……) 我的同事说,您应该始终知道要抛出哪些异常,并且始终可以使用类似以下的构造: try { // Stuff } catch (exception_type1&) { // Some cleanup throw; } catch (exception_type2&) { // Some cleanup throw; } catch (exception_type3&) { // Some cleanup throw; } 在这些情况下是否存在公认的良好实践?
74 c++ 

11
为什么我们必须使用中断开关?
谁决定(并基于什么概念)在每个语句中switch必须使用(多种语言)构造break? 我们为什么要写这样的东西: switch(a) { case 1: result = 'one'; break; case 2: result = 'two'; break; default: result = 'not determined'; break; } (在PHP和JS中注意到这一点;可能有许多其他语言正在使用此语言) 如果switch是的替代选择if,为什么我们不能使用与相同的构造if?即: switch(a) { case 1: { result = 'one'; } case 2: { result = 'two'; } default: { result = 'not determined'; } } 据说这break阻止了当前块之后的块的执行。但是,是否有人真的遇到了需要执行当前块及其后续块的情况?我没有 …
74 conditions 

14
执行C程序时,是否将诸如“ int”和“ char”之类的数据类型声明符存储在RAM中?
当C程序运行时,数据存储在堆或堆栈中。这些值存储在RAM地址中。但是类型指示器(例如int或char)呢?他们也存储吗? 考虑以下代码: char a = 'A'; int x = 4; 我读到A和4存储在这里的RAM地址中。但是,我们a并x?最令人困惑的是,执行如何知道a是char和xint?我的意思是,int并且char在RAM中提到了? 假设某个值存储在RAM的某个位置,为10011001;如果我是执行代码的程序,我怎么知道此10011001是a char还是an int? 我不明白的是,当计算机从诸如10001之类的地址中读取变量的值时,无论它是an int还是,计算机如何知道char。想象一下,我单击了一个名为的程序anyprog.exe。代码立即开始执行。该可执行文件是否包含有关存储的变量是类型int还是变量的信息char?
74 c  data 

15
开发人员应如何拒绝不可能的要求?[关闭]
这是我面临的问题: 来自项目经理的报价: 嘿Spark,我正在为您分配开发可用于许多不同iOS应用程序的框架的任务。要求如下: 它应该能够检测用于操纵UI的拇指或手指的粗细。 有了这些信息,UI的所有元素都应该自动排列和调整大小。 对于较大的拇指,应将元素排列在靠近屏幕中心的位置。 对于较小的拇指,应将元素布置在屏幕的角落附近。 对于较大的拇指,所有字体都应较小。(在这种情况下,我们假设是成年人。) 对于较小的拇指,所有字体都应较大。(在这种情况下,我们假设年龄较小。) 摘要: 该框架对于以编程方式创建用户友好的用户界面是必需的。框架的开发方式应使我们可以根据需要用于许多项目,因此它也必须对开发人员非常友好。 我是承担此任务的开发人员,所以我的问题如下: 我怎么能解释这些要求有点荒谬? 我该如何解释,集中精力开发实际项目会更好? 我怎么能解释,即使这是可能的,我也不建议开发这样的东西? 我如何礼貌,温和,礼貌地对这个项目说不? 我如何解释,即使对于具有3年经验的开发人员,这也可能无法实现?

7
为什么要使用MVC模式?
如今,每个使用Web应用程序的人似乎都希望对所有内容使用MVC。但是,我很难说服自己使用这种模式。我了解一般的想法是将代表程序的后端逻辑与前端逻辑分开。通常,视图在一定程度上似乎总是依赖于控制器,最终取决于模型。我看不出添加控制器能给我带来什么好处。我已经读过很多关于“这是应用程序应该被设计的方式”的大肆宣传,但是也许我仍然不明白应该去哪里。每当我与其他人谈论MVC时,似乎每个人对于什么属于什么类别都有不同的想法。 那么,为什么要使用MVC?通过将MVC仅仅从前端逻辑和后端逻辑中分离出来,我可以获得什么?(我看到的这种模式的大多数“优势”都是通过将接口与实现分开来获得的,而无法解释拥有单独的“控制器”的目的)


10
Java中每个类有多少行?[关闭]
根据您的经验,对于Java中的一个类来说,太多的代码行太多是什么有用的经验法则? 明确地说,我知道行数甚至不接近用于特定类中什么应该不使用的实际标准。应该根据适当的OOP原理(封装等)来设计类。就是说,经验法则可以为重构考虑提供一个有用的起点(例如,“嗯,此类有> n行代码;它可能不可读,并且在封装方面做得很差,所以我可能想看看是否应该在某个时候重构”)。 在另一方面,也许您遇到过非常大的类的示例,这些类仍然很好地遵守了OOP设计,并且尽管它们的长度很长,但是它们都是可读性和可维护性的? 这是一个有关每个函数行数的相关,不可重复的问题。

14
在这一点上,您“知道”一种足以在简历中列出的技术[已关闭]
我最近有一位程序员在接受采访,他将Python,PHP,Rails和ASP列为他们的一些技能。但是,在面试中,他们并没有充分了解控制结构和基本逻辑是什么,他们只听了一些演示教程。 所以我的问题是:在什么时候可以准确地将技术添加到简历中。是您可以演示所有基本概念,在其中编写有用的程序,还是可以轻松使用它而不必每30秒参考一次文档? 我不认为这是过分主观的,应该根据反馈轻松地确定基准。
74 skills 

22
跳槽,有问题吗?[关闭]
作为参与招聘过程的人(经理,面试官等),您对每1-2年换工作的候选人有何看法? 更新感谢大家的所有投入,一些非常好的回复以及每条帖子中的好信息。我之所以这样问,是因为最近五年来我目前在做第三份工作,而且我感觉自己的职位没有进展(例如,该职位本来应该是合同的,而不是全职的)。 我在这里唯一的选择似乎是过渡到其他团队来做我并不真正感兴趣的事情或寻找新工作,但是我有点害怕我最近的工作经历很短。

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.