软件工程

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

5
有哪些方法可以向同事展示数据库+应用程序解决方案优于Excel的优势?
我在一家到处都有Excel电子表格的公司工作。由于我的同事不是程序员,所以我确定他们没有想到可能会有更好/更容易/更有生产力的数据管理方式。自然,我提倡使用可以利用您在关系数据库和交互式前端中找到的功能的各种应用程序,以适应当前分散在不同电子表格中的各种工作流的需求。 我的问题是,我试图向各方面解释这种系统的优点,但是由于没有从头开始编写它们,我很难说服它们,甚至只是将它们暴露在绿色的草地上。人们通常都了解Excel(即使他们不是超级用户),但是当出现“数据库”一词或开始谈论“代码”时,也许会变得很模糊。 谁能提出一种方法,以证明通过从电子表格切换到实际应用程序可以改善工作流程吗?

4
C#最小SQL数据库
我正在做一个小项目(而不是生产项目),在这里我需要存储足够的数据,以至于像CSV这样的处理效率低下,而SQL / MySQL服务器则太多了。.Net是否有任何方法可以有效地存储多个数据条目,并且具有查询的能力,而无需管理和连接到服务器,而只需加载和处理单个文件。
12 c#  database  sql 

8
写软件比从头开始阅读和理解它容易吗?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我和我的一个朋友昨天讨论了编写大型C ++软件与将其视为新兵之间的区别。 是否有可能因为一种软件一次只能完成一行,并且此过程类似于我们(人类)如何学习事物并在另一种之上构建事物,所以编写大型软件实际上比阅读并理解其功能容易。 (逐步执行代码会有所帮助,但您需要一起记住多个类/源文件,甚至都不知道它们是为什么编写的,多线程代码会增加恶意点)? 一开始听起来很奇怪,但经过一番思考,这似乎是合理的

4
是否可以在Linux上使用Intel C / C ++编译器来创建要在Windows上链接的目标文件?
为什么? 取决于您的来源,英特尔编译器很可能或最肯定会为x86架构生成最快的可执行文件(将执行时间缩短5%至100%)。 英特尔根据非商业许可证免费提供其Linux编译器(我认为我在其页面上的某处免费阅读了该文件:英特尔-非商业软件开发)。还有一个针对学生的免费非商业许可证,但是尽管为所有三个主要操作系统都提供了工具(由于信誉限制而导致链接断开),但该许可证不适用。 目标 我(作为非学生)希望能够使用英特尔编译器来提高非商业许可下的执行速度,以编译可链接以创建Windows(可能是OS)的可执行文件和动态链接库的目标文件。 X) 更多细节: 从本文档中可以推断出,英特尔编译器会创建与平台的主流编译器兼容的目标文件。 子问题: Windows和Linux(当前版本)上的gcc,g ++,cl,mingw32,icc,icpc和icl的目标文件格式是什么? mingw32交叉编译器工具链的一部分可以用来实现目标吗? 我认为生成的目标文件中的元数据是主要问题吗? 广告2: mingw32-objcopy似乎能够将Linux(可能是ELF)上的Intel编译器输出转换为与Microsoft兼容的COFF(可重定位目标文件可能除外)。有人可以确认这确实有效吗(适用于非平凡的应用程序)?

1
程序中术语上下文的含义是什么
我正在查看一些Objective C文档.. UIGraphicsBeginImageContext:创建基于位图的图形上下文并将其作为当前上下文。 此外,Robotlegs中使用了相同的术语: (http://www.adobe.com/devnet/actionscript/articles/intro-robotlegs-pt1.html)上下文:上下文是用于初始化依赖项注入以及Robotlegs使用的各种核心实用程序的引导机制。 我用谷歌搜索的上下文的字典含义似乎与编程中使用的方式不匹配: 语境/名词/名词构成事件,陈述或想法的设置的环境,在此背景下可以完全理解和评估。 文字或口语中紧接单词或段落之前和之后的部分,并阐明其含义。 任何人都可以丢点光! V.

5
通过可能无用的异常处理来增强代码
以防万一代码的另一部分没有正确编码,是实现无用异常处理的好习惯吗? 基本例子 一个简单的,所以我不会让每个人都放松:)。 假设我正在编写一个应用程序,它将显示一个人的信息(姓名,地址等),数据是从数据库中提取的。假设我是UI部分的编码人员,而其他人正在编写DB查询代码。 现在,假设您的应用程序规范说明如果该人员的信息不完整(例如,数据库中缺少该名称),则对查询进行编码的人员应通过为缺失字段返回“ NA”来处理此问题。 如果查询的编码不正确怎么办?如果编写查询的人为您处理了不完整的结果,并且当您尝试显示信息时一切都崩溃了,因为您的代码不准备显示空的东西怎么办? 这个例子很基础。我相信你们大多数人会说“这不是您的问题,您不应对这次崩溃负责”。但是,仍然是崩溃的一部分。 另一个例子 假设现在我是编写查询的人。规范与上面的说法不同,但是在向数据库中添加人员时,编写“插入”查询的人应确保所有字段均完整,以避免插入不完整的信息。我应该保护我的“选择”查询以确保为UI家伙提供完整的信息吗? 问题 如果规范中没有明确指出“此人是负责处理这种情况的人”,该怎么办?如果第三方实现了另一个查询(类似于第一个查询,但在另一个DB上)并使用您的UI代码显示该查询,但在他的代码中不处理这种情况怎么办? 即使我不是应该处理这种情况的人,我也应该采取必要的措施来防止可能的崩溃吗? 我不是要寻找“他是崩溃的负责人”之类的答案,因为我不想在这里解决冲突,我想知道,如果我保护我的代码免受情况影响,这不是我的责任处理?在这里,一个简单的“如果空着做某事”就足够了。 通常,此问题解决了冗余异常处理。我之所以这样问,是因为当我一个人在一个项目上工作时,我可能会在连续的函数中编写2-3次类似异常处理的代码,以防万一我做错了什么,让一个糟糕的情况解决了。

1
功能反应/关系编程–有区别吗?
我一直在使用Reactive Cocoa(由GitHub提供),这是一种用于Cocoa库的功能性反应式编程API,现在已经使用了一段时间,但是我刚刚阅读了“ Out of the Tar Pit”,据称该论文介绍了其背后的概念,我有些困惑。 本文介绍了(据我所知)功能关系编程,其中数据之间的关系是由FRP系统应强制执行的条件创建的,以减少所需的“偶然”逻辑和状态。 我的问题是,这两个概念-FR(eactive)P和FR(elational)P本质上是同一件事(前者只是后者的实现),还是两者之间存在核心区别?不幸的是,目前我对该领域的了解还不足以让我足够区分它们。 如果存在差异,顾名思义,这似乎与数据更改有关系。当然,反应性可可粉(和C#中的Rx)具有创建信号的概念,该信号在数据变化时触发,并且可用于随时间连续修改值。 这有区别吗?如果没有,那是什么? (请原谅不良标签,我找不到相关标签,也无法创建它们-如果可以的话,请将标签更新为更合适的标签。)

4
是否有任何静态类型的Web脚本语言?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 2年前关闭。 似乎有两种主要方法来设置Web服务器后端。您可以使用LAMP堆栈,并在服务器端代码中使用PHP或Python(或Ruby或JavaScript,而不以P开头)之类的代码。这些脚本语言往往是动态类型的,具有以下所有缺点:动态类型语言带来的性能,正确性和可维护性,但是更新服务器很容易,因为所有页面生成逻辑都存储在外部脚本中。 广泛使用的另一种主要体系结构样式是ASP.NET,其中页面生成逻辑是用编译代码编写的。这倾向于使用静态类型的语言,因此您获得了受益于编译器的代码,但是所有页面生成逻辑都已编译到服务器中,这意味着如果您需要更改某些内容,则必须关闭服务器,然后用新的版本替换它。 这让我感到奇怪。为了兼顾两者的优势,是否存在使用静态类型的服务器端脚本语言?

1
构建脚本和构建服务器的职责
我需要对构建脚本和构建服务器的职责进行一些说明。 我在网上阅读了几篇有关持续集成和构建的文章。包含 F5密钥不是构建过程 构建服务器:项目的心脏监护仪 每日构建是您的朋友 我和我的顾问就软件的构建过程进行了交谈。因为他很有经验,所以我相信他的发言,但是我感到困惑。 据我了解,根据我的研究(由于这是我要提出的问题,请在此处对我进行纠正),理想应该如下: 每个项目都有其构建脚本 这个脚本建立了项目 该脚本确保依赖项是先前构建的 由于依赖关系可能是其他项目,因此使用自己的构建脚本会产生树状层次结构。可能会有一个顶级构建脚本来构建所有项目和应用程序。 但是,构建服务器的职责是: 签出仓库 触发构建 触发测试和其他质量检查工具 使工件可用 可以手动,每晚或每次存储库更改时触发 据我所知,我的顾问的目标是使一个构建脚本变得不灵活且不可维护(除了为我们的旧代码库创建一个构建脚本会花费很长时间的事实)。此外,构建服务器还应维护依赖关系,例如在创建新依赖关系时使用较旧的依赖关系。特别是Ant因为它是一个具体的主题,因此无法构建代码库中使用的所有各种技术,并且无法维护依赖性。 您能否详细说明目标并明确职责?


5
在新公司开始编码所需的时间[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我是一名软件工程师已有4年了,而我只是第一次更换公司。 Company使用结对编程进行工作,已经有3天了,我什至无法编写一行代码。这让我感到沮丧,因为我在以前的公司工作效率很高。 代码库很大,他们使用的是我不熟悉的5-6种语言/工具,例如rspec,halm,jasmine等。但是,我仍然感觉很糟糕。 这个周末,我创建了UML以更好地了解应用程序,但是我仍然猜想我本周将无法编写大量的代码。 这正常吗? 当您换工作并潜入使用不熟悉的语言/库编写的大型代码库时,您会有什么经验? 当然,我并不是在要求确切的时间,但是过去的经验或完成该过程的东西会很棒。 顺便说一句,我已经阅读了以下问题与解答, 如何进入大型代码库? /programming/215076/whats-the-best-way-to-become-familiar-with-a-large-codebase /programming/214605/the-best-way-to-familiarize-yourself-with-an-inherited-codebase 更新 所有很棒的建议!我刚下班,我干了很多工作! 关于结对编程: 通常,他们编写代码,而我力争不错过任何一秒钟!如果我尝试编写代码,我知道这将永远花光,因为我什至不知道应该编辑哪些文件,但是除此之外,正如我所说,它们使用的是6-7种语言/框架,熟悉并同时学习所有这些语法并非易事。 公司为工程师准备的情况: 我不能说他们组织得很好,他们有点希望我立即开始编写代码。 做笔记,积极主动: 当他们编写新命令/或任何有关数据模型的内容时,我总是记笔记。我的同龄人非常聪明善良,我想问很多问题,有时甚至是愚蠢的问题。 这很常见吗?: @Telastyn,感谢您的回答,这让我感觉好一些。看来我的问题并不少见,但是在我从事这项工作之前我确实很有生产力,现在我真的觉得自己没用,也不聪明。 我希望我能尽快开始解决错误/实现问题。 关于他们使用的框架/语言: 我真的很诚实,我没有说我知道我实际上不知道的东西。但是我没想到会有那么多不同,而且自从我接受报价的那一天开始工作以来,我没有时间做准备。 @Southpaw Hare,非常感谢您分享您的经验。你是绝对正确的。无法保证我将学习所有这些知识,但我正在尝试。最后,很难一次学习所有语法,我认为这也是主要问题。因为我知道该语言,所以我可以很好地在ruby代码中导航,而且由于浏览器检查器的帮助,我可以在js代码中导航,但是问题是使用我不知道的框架/语言编写了实际代码。

5
要将git版本集成为内部版本号?
我和一个同事轮流讨论/讨论在构建时将从当前git存储库派生的版本集成到我们的代码中的问题/优点。 我们认为优点包括: 无需担心人为错误更新版本号 我们在设备中找到的内容与源于它的源代码之间的可追溯性 (对我们而言)出现的问题包括: IDE派生的构建系统(例如MPLABX)可能很难弄清楚将这些挂钩放置在何处(最终可能会很俗气) 实际将其集成到构建脚本/ makefile中的更多工作 耦合到特定的构建方法(例如,如果一个人使用XCode和另一个MPLABX进行构建怎么办)可能会给下游带来意外 因此,我们很好奇其他人在这场辩论中的地位。讨论变得容易流传开来。那里有很多人坚持端到端的自动化,把大量的前期工作挂在了一起,并耦合了它带来的影响。辩论的另一端还有很多其他人,他们所做的最简单的事情就是行之有效,并且承受风险。 对于哪一方最好着陆有合理的答案吗?
12 c  git  builds  build-system 

2
是否应将类,枚举和其他实体放在单独的文件中?
我公司的团队负责人\建筑师认为,如果将“逻辑连接的实体”放在一个.cs文件中,则大型项目更容易理解。 我引用: “逻辑,接口和类的整体结构可以在一个地方看到,这是一个不能被驳斥的论点。要看到同一件事,但需要一堆文件,则需要使用工具,类图,R#用于导航,等等。” “遵循拙劣的理论,我可能会大声疾呼,分开的文件很酷,但是当涉及到对现有代码进行更改时,尤其是如果您不是该代码的编写者时,很难理解大量分散的文件。因此,在论坛上,您可以编写“一个枚举一个文件”,但实际上,永远不要使用这种方法“ “ ...关于开发人员之间代码库的分离,如今同时编辑同一文件已不是问题。合并已不是问题。” 我听说过很多次,我们必须为每个枚举,类等创建一个.cs文件,这是最佳实践。 但是我不能说服他。他说,他不信任任何著名的程序员,例如Jon Skeet。顺便说一下,Skeet对这个主题的看法是:找到枚举类型的最佳位置在哪里? 你怎么看?有真正的问题吗?还是只是一个口味问题,应该由组织的编码标准来规范?

2
为什么Java不支持像C ++这样的私有/受保护的继承?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 在C ++中继承类时,用户可以指定访问说明符,例如, class Base { public int mem1; protected in mem2; }; class Derived1 : **private** Base { // mem1 will be private here. // mem2 will be private here. }; class Derived2 : **protected** Base { // mem1 will be protected here. // mem2 will be protected …

2
依赖注入样式之间的实际区别是什么?
我是依赖注入的新手,我对应在应用程序中使用哪种样式有一些疑问。我刚刚阅读了Martin Fowler 的《控制容器的反转》和《依赖注入》模式,但是我无法获得构造函数,setter和接口注入之间的实际区别。 在我看来,一个使用另一个的原因仅是代码清理和/或清晰的问题。有什么区别?相对于其他方法,使用它们有什么优点或缺点,还是我刚才所说的? 在我看来,构造函数注入是最直观的,而接口注入则是最少的。另一方面,setter注入是一个中间术语,但是,您是否应该能够更改最初注入的依赖对象的实例?这种注入方式是否可以确保需要依赖项的对象始终被注入?我相信不会,但是如果我错了,请纠正我。

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.