软件工程

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

5
设计数据库是程序员的工作吗?
在过去的六年中,我一直是一名程序员。在我的整个职业生涯中,我从事许多Web应用程序的工作。 在大多数情况下,当需要数据库时,将数据库交给我们(程序员),或者我们有一些旧数据库可以处理。如果不是那样,我们就必须自己创建和设计数据库,这并不是那么困难。 但是,作为程序员,我们是否应该从头开始创建整个数据库,而我们必须构建新的应用程序,其中数据是如此重要,并且对复杂的数据模型有混乱的要求? 由专家来完成应用程序不是对应用程序和公司的最大利益吗? 我并不是想逃避设计数据库的努力,但是正确地做这件事是如此重要。

8
以初级程序员的身份处理估算
我已经在一家公司中工作了几个月,该公司估计(针对一般人群,而不是针对初级人群)任务,然后给我们任务,解决它,它经过两次测试,最后估计应该是有点满足。 我感到非常压力,因为其中有些估计根本无法满足。我仍然不知道整个系统(因为它相当庞大),所以有时花一半时间找出我需要做的事情,在完成的地方和时间之前,有时估算已经结束,并且仍然需要进行测试完成(并纠正错误)。 第二次我必须处理类似的功能时,它们的运行速度都快得多,但是到目前为止,我感觉我很不擅长编程。 您刚开始时有什么工作可以帮助您度过这一阶段?当我看到只有很少的时间编写代码时,我感到非常压力,有时候我什至无法正确地专注于我正在做的事情,这使情况变得更糟。

7
偶尔发生错误,但优先级高
我正在从事一个CNC(计算机数控)项目,该项目借助激光将形状切割成金属。 现在我的问题是,有时(每20天奇数次要1-2次)切割是否出错,取决于设置的是什么。 但这会造成损失,因此客户对此并不满意。 我试图找出原因 包括日志文件 调试 重复相同的环境。 但不会重复。 暂停并继续操作将再次使其平稳运行,而不会再次出现该错误。 我该如何解决这个问题?我应该将其声明为硬件问题吗?

4
厚实模型与 业务逻辑,您在哪里区分?
今天,我与组织中的另一位开发人员进行了激烈的辩论,讨论在何处以及如何向数据库映射的类中添加方法。我们使用sqlalchemy,并且数据库模型中现有代码库的主要部分不过是一袋带有类名的映射属性,几乎是从数据库表到python对象的机械翻译。 在论点中,我的立场是使用ORM的主要价值是可以将低级行为和算法附加到映射的类。模型首先是类,其次是持久性的(使用文件系统中的xml可以持久性,您无需关心)。他的观点是,任何行为都根本就是“业务逻辑”,并且必然属于持久性模型之外的任何地方,而持久性模型仅用于数据库持久性。 我当然确实认为,什么是业务逻辑,应该分开,因为它与实现方法的较低层和域逻辑之间存在一定的区别,我认为这是模型类提供的抽象。在上一段中讨论过,但是我很难理解那是什么。我对API可能有什么更好的理解(在我们的例子中是HTTP“ ReSTful”),因为用户以他们想做的事情调用API,这与他们被允许做的事情以及如何做不同。完成。 tl; dr:使用ORM时,可以或应该在映射类的方法中进行哪些操作,应该忽略哪些内容以驻留在另一层抽象中?

3
事后看来,基于XML的XAML是错误的还是好的方法?
XAML本质上是XML的子集。据说将XAML基于XML的主要好处之一是可以使用现有工具进行解析。尽管(语法上不重要的)属性值将保持文本形式并需要进一步解析,但它在很大程度上可以。 用XML派生的语言描述GUI有两种主要选择。一种是做WinForms所做的事情,并用真实的代码对其进行描述。尽管它并非完全没有优势,但这样做有很多问题(将XAML与这种方法进行比较是一个问题)。另一个主要的替代方案是设计专门针对手头任务的全新语法。这通常称为领域特定语言。 因此,事后看来,作为对子孙后代的一个教训,将XAML基于XML是一个好主意,还是作为一种定制设计的领域特定语言会更好?如果我们要设计一个更好的UI框架,我们应该选择XML还是自定义DSL? 由于积极地思考现状要容易得多,尤其是社区非常喜欢的现状,因此,我将举一些示例理由说明为什么在XML之上进行构建可能会被认为是错误的。 基于XML的语言有其作用:解析起来要容易得多(核心解析器已经可用),所需的设计工作要少得多,并且对于第三方开发人员来说,替代解析器也要容易编写。 但是由此产生的语言可能会以各种方式令人不满意。这很冗长。如果更改某物的类型,则需要在结束标记中进行更改。它对评论的支持很差;注释掉属性是不可能的。XML对属性的内容有一些限制。标记扩展必须建立在XML语法的“顶部”,而不是深入和完美地集成到其中。而且,我个人最喜欢的是,如果您通过属性设置内容,则使用的语法与将内容属性设置为完全相同的语法完全不同。 也有人说,由于每个人都了解XML,因此XAML需要的学习较少。严格来说,这是事实,但是学习语法只是学习新UI框架的一小部分时间。正是框架的概念使曲线变得陡峭。此外,基于XML的语言的特质实际上可能会添加到“需要学习”的篮子中。 易于解析会抵消这些缺点吗?下一个很酷的框架是否应该延续这一传统,还是应该花时间设计出色的DSL,而DSL是现有工具无法解析的,并且每个人都需要学习其语法? PS并非每个人都对XAML和WPF感到困惑,但是有些人对此感到困惑。XAML是类似XML的东西。WPF是支持绑定,主题化,硬件加速和许多其他很酷功能的框架。

7
我应该如何描述学习他人代码的过程?(在开发票的情况下。)
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 编辑:贾斯汀·凯夫(Justin Cave)提出了一个很好的观点,即这种沟通应该在我的报价/估计中占上风。在这种情况下,我仍然很想知道人们使用哪种语言来描述“现有代码学习”活动。特别是对于以前从未与软件承包商打过交道的公司。 结束编辑 我有一份合同,为一家大公司升级一些内部软件。该公司已请求增加多个功能并修复了一些错误。这是我的第一份自由职业风格的工作。 首先,我需要熟悉该应用程序的工作方式-就像我是一个用户一样学习它。 接下来,我必须学习该软件的工作方式。我从广义的概念开始,然后在研究每个错误修复和功能之前将其范围缩小到必要的细节。 至少在项目开始时,我花了更多的时间来学习现有的代码,而不是编写附加功能。 如何描述学习发票上现有代码的过程?(公司的这一部分通常是在公司内部做事,因此与我这样的软件承包商打交道的经验不足,我担心他们可能不了解学习别人代码的开销)。我不想只是将学习时间花在实际的功能升级上,因为在某些情况下,这会使“简单任务”看起来花了我太多时间。我想将发票分解为相关步骤,并告知我要在能够添加自己的代码之前承担学习其他人代码的大量开销。 记帐工作时,有没有描述这种活动的标准方法?

6
当您陷入困境时,跳到不同的功能上工作,这是项目失败的根源吗?
在个人项目(或工作)上,如果您遇到问题,或者等待解决问题的解决方案,那么如果您跳到代码的另一部分,那么您认为这不是应用程序的好理由吗?会是越野车还是更糟,但是永远都无法完成? 假设您没有使用git并将每个功能编码到一个特定的分支,由于您正在使用3个不同的功能,并且每个功能都存在未解决的问题,因此事情可能会一发不可收拾。 因此,当您完成工作后,就会感到压力很大,因为您遇到了这些悬而未决的问题,并且半生半熟的代码仍然存在。 避免此问题的最佳方法是什么?(如果有) 我猜想使用像git这样的东西,并且为每个功能创建一个分支是避免这种不良习惯的最安全方法。 还有其他建议吗?

8
为什么C ++仍然“混合”
在一个相关的问题上,已经阐明了为什么C ++在许多方面与C不兼容。但是,C ++仍然是“混合” *语言。不幸的是,许多程序员仍然将C ++视为“具有流和内置字符串的C”。这导致了非常糟糕的书面代码,因为它既不是C ++也不是C。恕我直言,如果语言/编译器在某种程度上强迫程序员编写更优雅的代码,那会更好。那么是否有理由保持现代C ++(例如C ++ 0x和将来的版本)混合在一起? *混合是指程序员决定是否使用他/她:标准字符串和流,类,默认名称空间以外的名称空间等。

5
我如何证明我对客户的保修许可免责声明?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 2年前关闭。 我正在出售允许用户操纵关键信息的软件。 在我的许可合同(由该领域的专业律师草拟)中,我有一个标准条款: 本软件由作者“按原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途的适用性的暗示保证。在任何情况下,作者均不对任何直接,间接,偶发,特殊,特殊或后果性损害(包括但不限于替代商品或服务的购买,使用,数据或利润的损失或业务中断)承担责任)无论是基于合同,严格责任还是侵权(包括疏忽或其他方式)造成的任何责任理论,无论是基于使用本软件的任何方式引起的,即使已被告知可能存在这种情况。 到目前为止,我几乎在使用的每个软件中都看到了等效功能。 到目前为止,我们所有的客户都毫不费力地接受了这一点,但是现在有一个潜在的客户正在对此进行竞争。实际上,他在告诉我一些类似的内容: 您的意思是,如果我使用您的软件从第三方公司以$ 10的价格购买商品,并且您的软件中存在错误(因为您不保证没有任何错误),并且您传送了$ 20的订单,我将付款10美元的差额,不是吗? 在他看来是常识的那部分与我的保险公司可能不会为此类风险向我投保这一事实之间,我有点陷入困境,如果您认为我们在说的是数百万美元,而不是单纯的美元,那是不对的对那种潜在的损失负责不自在。 到目前为止,我想出的最好的答案是每个人都在行业中做到这一点(微软不保证您使用Outlook发送的邮件不会被更改,例如,将所有的10美元变成到$ 20的...) 关于如何处理的任何建议?(除了尽力提供无错误的软件,当然:p)

10
如何向管理人员证明我的生产力?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 7年前关闭。 我的大学有一个真正的客户用于软件开发的模块。我的一些团队成员一直在计算机实验室工作,这是一个非常嘈杂的环境,有很多干扰和干扰。大约有30个人经常聊天。人们除了进行“工作”外,还经常在Facebook,YouTube上或互相开玩笑。我的一些团队成员每天在这种环境下工作3个小时。 我参加每周的团队会议,并广泛使用我们的在线项目管理系统。我处理所有电子邮件,并有一个忙碌的聊天客户端,但是我确实收到消息。解决问题时,我经常使用在线资源。但是,在团队会议和结对编程会议之外,我的大部分工作都是在一个安静的环境中进行的,我可以集中精力和精力,并且排除所有外部和内部干扰。我100%专注于我的任务。我发现这种方式的生产率比实验室要高出10倍,而且我可以完成很多工作。 问题是我们的导师或“管理人员”看不到我在实验室里干活。因此,我似乎没有为他们工作。因此他们认为我没有团队合作精神。我如何说服他们从事团队合作,因为我与团队进行了很多交流,但同时我也喜欢独自工作?我想证明一下,仅仅因为我独自工作很多,不一定要在实验室里完成所有工作,我仍然是团队中富有成效的成员。 UPDATE Management告诉我,问题在于我花了60%的时间在团队中工作,而我独自花了40%的时间。他们告诉我,我应该将99%的时间都花在与实验室团队(也就是办公室)面对面的工作上。 一些答案的一些相关评论,有些可能会遗漏: “问题是我真的不需要问团队任何问题,因为我宁愿自己在Google上搜索。出于某种原因,我对Google的信任程度要高于我的主管或团队成员。因此,我经常不同意他们。我不是做团队合作,因为本质上我是在做“网络”工作。” “我比主管或队友的专业知识更信任在网上(即SE)找到的信息。” 更新2 我不再在家里做任何认真的工作,我现在就呆在实验室里,与我的团队玩得开心,同时也偶尔做一些工作。正如公认的答案所示,这不是关于我要有生产力,而是要实现我的经理和队友的期望。如果我和我的经理对如何进行软件开发抱有不同的信念,那么重要的是经理,因为他们有能力使我失败/解雇。我认为面对面的会议不如在线对话有效,在嘈杂的实验室中工作并不像在相当环境中工作那样高效。我认为在我正在执行任务时,队友不应该在任何时候打扰我。我认为一个人至少需要50%的时间独自完成生产工作,并需要50%的时间与团队进行同步。无论如何,

5
LGPL允许我这样做吗?
我打算使用LGPL软件开发商业软件。 在我使用的LGPL软件中,某个类中的某些功能没有完全实现。我想修改LGPL代码,以便通过添加类的dllexport infront以及通过添加函数的虚拟关键字infront来使类和未实现的函数在dll外部可见。 然后,我计划在我的专有软件中实现这些功能。我准备分发修改后的LGPL代码,但不分发按我想要的方式实现功能的专有软件。 这是否违反LGPL条款和条件?
16 licensing  lgpl 

5
学习并发和多线程应用程序的最佳资源是什么?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 4年前关闭。 已锁定。这个问题目前不接受新的答案或互动。了解更多。 我意识到我在多线程应用程序和并发编程方面存在巨大的知识鸿沟。过去,我已经介绍了一些基础知识,但是大部分内容似乎都已遗忘,这绝对是我想要且需要了解的领域。 学习构建并发应用程序的最佳资源是什么?我是一个非常务实的人,因此,如果所说的书包含一些具体的例子会更好,但是我愿意提出建议。我个人更喜欢使用伪代码或C ++,并且最好还是偏向游戏开发,但不是必需的。

10
如果比赛使用“ lingua obscura”促进发展(为什么),我应该担心吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 5年前关闭。 我正在阅读保罗·格雷厄姆(Paul Graham)的文章- 击败平均水平(Beating the Averages,2003),这是他不得不说的: 职位描述所具有的IT风格越多,公司的危险就越小。最安全的一种是想要Oracle经验的。您无需担心这些。如果他们说他们想要C ++或Java开发人员,那么您也很安全。如果他们想要Perl或Python程序员,那将有些吓人-听起来像一家公司,至少在技术方面由真正的黑客经营 现在,这是一篇过时的文章。但是,我看不到使用非通用语言(C / C ++ / Java,C#)如何“不太危险”。如果组织的程序员非常熟练使用开发语言,那么他们应该同样擅长以适当的速度编写代码。实际上,如果您确实使用非通用语言,那么从长远来看,维护/增强问题是否会面对您,因为不会有太多的程序员可用? 我同意,为了制作快速脏的系统,某些语言允许您比其他语言更快地起飞。但是,保罗·格雷厄姆(Paul Graham)的论文/评论在2012年及以后是否有意义?如果一家初创公司要使用典型的IT语言进行开发,那么为什么不那么担心竞争呢? 我看不出语言本身是如何产生变化的。恕我直言,重要的是开发人员对语言的了解以及框架的可用性,因此您可以DRY(不要重复自己)而不仅仅是使用特定语言进行编码。 我想念的是什么?是否意味着初创公司更好地选择非IT风格的语言(即使开发人员可能非常擅长使用它们)?这项主张背后的(程序)经济/市场力量是什么? PS:“ lingua obscura”并不意味着伤害任何人的感情:)

6
有想法让您重新编程mojo吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我从事专业程序员已经很多年了(20年),现在我已经失去了兴趣,目前我什至无法淘汰几百行简单的东西。我需要3-4天,而不是30-40分钟 任何人都有如何使您的兴趣重新获得的提示? 从我小时候起,只要我醒着就一直从事编程/编码工作。我曾经完成工作,然后在网上搜寻新东西直到睡觉。现在,我很幸运地使工作中的LOC计数显得合理。 编辑 谢谢大家-一些很棒的建议-我没想到的很多-尽管我不希望这项运动很可能需要它。
16 motivation 

10
我应该在什么时候将Windows开发人员升级到最新版本的Windows?
我应该在什么时候开始将开发人员的计算机升级到更高的Windows版本? 根据经验,Microsoft通常会在所有其他操作系统上都出现重大失败(我真的不是想对此进行辩论,我认为应该如此),即2000年是稳定且有用的操作系统,但我做得不好,xp是许多企业仍在使用的出色操作系统,Vista的表现不佳(我知道此操作系统表现不佳的原因并不是微软的错,而且Vista和7是相同的主要版本),而7似乎是一个优秀的操作系统,它将持续一段时间-现在就像xp一样。 无论如何,这让我不愿意将我们的开发机器升级到Windows 8。 一种。我不想为只使用一两年的操作系统花费大量资金。 b。他们还必须具有linux双引导程序,并且我已经阅读到Windows 8和grub不能很好地配合使用。 我确实希望我们的开发人员能够在最新的环境中进行开发,并在开发任何技术方面都处于领先地位。我确实想保持技术曲线的领先地位,或者至少要保持技术曲线的优势,但是我希望它具有商业意义。 因此,特别是此时我应该升级他们的计算机吗?通常,我应该使用哪种微积分来决定这种事情? 编辑 他们确实编写了桌面UI应用程序以及ASP.NET应用程序。另外,我要确保他们始终拥有最新版本的Visual Studio。

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.