软件工程

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

3
为什么要有五个餐饮哲学家?
我想知道为什么餐饮哲学家问题是基于五个哲学家的案例。为什么不四个? 我猜想我们在讨论五位哲学家的例子时也可以观察到所有令人不快的问题,当我们得到四位思想家时,也会发生。那仅仅是出于历史原因吗?

8
什么时候应该在C中检查指针是否为NULL?
总结: C语言中的函数是否应该始终检查以确保未取消引用NULL指针?如果不是,何时跳过这些检查是否合适? 详细资料: 我读过一些有关编程面试的书,我想知道在C语言中对函数参数进行输入验证的适当程度是多少?显然,任何需要用户输入的功能都需要执行验证,包括NULL在取消引用指针之前检查指针。但是,如果您不希望通过API公开同一文件中的函数,该怎么办? 例如,以下内容出现在git的源代码中: static unsigned short graph_get_current_column_color(const struct git_graph *graph) { if (!want_color(graph->revs->diffopt.use_color)) return column_colors_max; return graph->default_column_color; } 如果*graph为,NULL则将取消引用空指针,这可能会使程序崩溃,但可能导致某些其他不可预测的行为。另一方面,函数是static,因此程序员可能已经验证了输入。我不知道,我只是随机选择了它,因为它是用C编写的应用程序中的一个简短示例。我已经看到许多其他地方使用了指针而不检查NULL。我的问题不是针对此代码段的。 我在异常处理的上下文中看到了一个类似的问题。但是,对于不安全的语言(例如C或C ++),不会自动传播未处理的异常。 另一方面,我在开放源代码项目(例如上面的示例)中看到了很多代码,这些代码在使用它们之前不做任何指针检查。我想知道是否有人对何时将检查放入函数与是否假定使用正确参数调用函数的准则进行了思考。 对于编写生产代码,我通常对此问题感兴趣。但是我也对编程面试感兴趣。例如,许多算法教科书(例如CLR)倾向于以伪代码表示算法,而没有任何错误检查。但是,尽管这对于理解算法的核心很有帮助,但显然不是一种好的编程实践。因此,我不想告诉采访者我正在跳过错误检查以简化代码示例(就像教科书一样)。但是我也不想出现带有过多错误检查的低效率代码。例如,graph_get_current_column_color可以将其修改为检查*graph空值,但不清楚是否*graph为空值,除非不取消引用它。
18 c  validation  null 

3
最快的功能语言
我最近一直在研究函数式编程,尤其是Haskell和F#,而以前更是如此。经过一番探索之后,我找不到比较杰出的功能语言(Scala,F#等)的基准比较。 考虑到它们是混合语言,我知道这对某些语言(Scala出现)不一定是公平的,但我只想知道哪种语言在哪种操作和总体上胜过哪种语言。

3
如何设计网站工作流程?
我已经思考了很长时间,却没有找到最佳答案。 首先,我是一位热爱编程的医生,但从未真正地学习过它,除了在家学习和在业余时间玩代码很多年之外。 目前,我正在尝试建立一个小型项目来管理我的诊所,为此,我首先创建了一个我希望能够做的选择列表。 例: 活跃的患者记录。 具有不同角色(例如,患者,护士,博士)的身份验证 预约时间表(包括日历,定期接种疫苗/手术等,并带有提醒) 允许医生创建自己的插件。 仪表板,供医生查看其统计信息 然后,我开始使用codeigniter / mysql / php / jquery并开始编码。 我在开发过程中的步骤:- 第一个数据库。 首先创建所有需要的表。 创建了我所有的模型来处理这些表(1个主模型,在处理基本读/写/更新/验证的同时还考虑了我的表关系 之后,我开始为视图和控制器编码。我首先创建了视图HTML,然后创建了将处理该视图的控制器,并开始编写函数以使视图交互有效。 编写约会视图时的示例(控制器booking.php): 当用户单击时,创建此布局并使表td可单击:jquery get(booking / add_ Patient_form)并弹出它 用户保存时:发布到预订/保存-保存约会,然后重新加载index()函数 等。我继续执行创建视图的相同步骤,然后创建其控制器-包含该视图所需的所有逻辑-完成整个项目。 最后,我所有的目标功能都运行良好,但是由于从一开始就没有PLAN,而且由于整个项目都是脑力激荡和调试,没有任何计划,所以在完成该项目后,我发现自我维护性和灵活性!并且无法将它们链接在一起。 我感觉到网站上的每个页面都是彼此完全隔离的,我什至不记得每个页面的加载方式和内部的功能,而不会偷看! 无论如何,我可以恢复它并进行设计吗?

15
我讨厌我们的一种编码标准,这使我发疯,如何处理它?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 免责声明:标题没有夸张,但仍然让我感到不舒服。我只是要诚实地表达,所以要加一点盐。只是假装我谈论的是编码标准,你不喜欢的工作。 编辑:我不喜欢它的事实,并不意味着我不使用它或不执行它。 我决定本着如何超越您不喜欢的标准的精神来问这个问题,而不是寻求有关如何更好地争论如何进行更改的帮助(尽管对最后一部分的任何评论都值得赞赏)。此外,我在一家大公司工作,这种改变已经存在了很长时间,而且影响很小的事情是不可能的。 该标准是专用线路上的开口弯括号标准: somefunction() { //... } 代替*明显优越*(注意开玩笑/沮丧的语气): somefunction() { //... } 我个人反对该标准: 它使代码膨胀:多余的多余行 很难键入:尽管这可能只是我在标准方面的苦苦挣扎,但我知道额外的一次击键并没有那么糟糕。 不容易阅读:我开始阅读函数声明,if语句或任何其他范围堆叠语句,而我不必寻找左括号。嵌套块与此标准只是出于某种原因使我生气。 由具有Microsoft IDE背景的人使用:我认为标准背后应该有一个有争议的理由(或更多理由),而不仅仅是范式。 他们的论点(以及我内部反驳他们的方式): 易于阅读,因为您可以立即看到块的开始和结束位置:我不明白这一点,如果您不知道块的所有权,那么块有什么用,所以您必须向后阅读。 我在Microsoft IDE中使用它,然后我喜欢它:呃...好吗? 在标准中:*压脚* 我是唯一一个对特定标准持固执己见的人吗?您如何克服这些标准?您对此特殊标准应该是什么持保留意见(只是为了好玩)?

3
分支机构中断持续集成吗?
我认为这篇文章《成功的Git分支模型》在经验丰富的DVCS用户中是众所周知的。 我hg主要使用它,但是我认为这种讨论对任何DVCS都适用。 我们当前的工作流程是每个开发人员克隆主存储库。我们在自己的本地仓库上编写代码,运行测试,如果一切顺利,则推送给主服务器。 因此,我们希望设置诸如Jenkins的CI服务器,并通过将来的预配系统(厨师,木偶,ansible等)改善我们的工作流程。 实部 好了,以上介绍的模型很好用,但分支机构可以破坏CI。Feature分支应该与原点同步(根据文章,它将是development分支),以使CI和合并更加顺利,对吗? 说爱丽丝和鲍勃正在研究两个功能。但是爱丽丝第二天就完成了。鲍勃的功能需要一个星期。到Bob完成时,他的更改已过期(也许Alice重构/重命名了某些类)。 一种解决方案是,每天早晨开发人员必须master/origin检查是否有任何更改。如果Alice提交了,Bob应该拉入并合并到他的工作区中,以便他的功能分支是最新的。 这是个好方法吗? 这些分支是否应该存在于主存储库中(不是本地克隆?),这意味着每个开发人员都应向GitHub / Bitbucket上的主存储库授予特权,以便他们可以创建新分支吗?还是在本地完成? 最后,如果分支未与同步,则本文介绍的模型应打破CI origin/master。既然我们要进行夜间构建,开发人员是否应该在离开工作之前进行合并和合并,并且CI也要在每个功能分支上运行?

3
为什么面向对象的数据库没有像关系数据库那样被广泛使用?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我遇到过许多关系数据库管理系统(RDBMS)。但是最近我使用了休眠模式,这使我开始怀疑为什么面向对象的数据库没有那么流行。 如果像Java或C#这样的面向对象语言如此流行,那么为什么面向对象的数据库管理系统(OODBMS)也不那么流行呢?

3
在压力下如何避免跳到解决方案?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 在特别严格的编程截止日期(例如一个小时)内,如果我完全感到恐慌,我的趋势是跳入没有真正计划的编码,并希望我能继续研究下去。如果有足够的时间,这是可行的,但是在一次采访中,即使不是彻头彻尾的适得其反,它还是非常不成功的。我不总是舒服地坐在那里想着时钟打tick。 当您足够了解问题并开始编码时,是否存在核对表或是否存在识别技术?什么时候最能想到的是进行设计和设计,而不是进行一些实验,然后再进行总体设计? 这是参加数学考试和参加口语考试的技巧清单。是否有类似的技术清单来处理压力下的编程问题? 答案:我认为这是一个有效的答案:如何解决。我发现该链接是解决步骤或解决方案的答案。在上也有一些非常好的技巧。在面试中大声思考真的是最好的策略吗?。TDD的一个简洁明了的论据是TDD的第一个答案写代码vs找出问题的答案?。

4
自动生成代码:“派生作品”?
例如,我有GPL软件。我是该GPL软件的作者。此GPL软件在其代码之间包含Doxygen注释。编写这些Doxygen注释以生成CC-BY-SA html页面,以便根据CC-BY-SA许可将该生成的文档上载到我的项目网站中。 但是,Doxygen文档输出的是“衍生作品”吗?毕竟,该文档基于我的GPL源代码。在这种情况下,文档必须是GPL。但是,我希望文档是CC-BY-SA,因为它是文档。GFDL没有帮助。GPL代码不能成为GFDL(相反是)。 我认为,如果此输出确实是衍生产品,则会造成一种奇怪的情况,因为如果我分发我的作品,收件人用户将无法合法分发生成的文档:尽管我可以做我想做的事情,但用户却不会这样做。因此,他们必须以我提供给他们的相同许可证分发任何衍生作品。 解决办法是什么?

10
我的父亲是一位医生。他坚持要编写一个数据库来存储非关键的患者信息,并且没有编程背景。
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 因此,我父亲目前正在使用FileMaker Pro(一个基于GUI的数据库工具,用于他的小型(4位医生)实践)将数据库“黑客入侵”。该数据库将用于减轻医疗机器报告的负担,简化繁琐的流程。 他没有编程背景,并且似乎正在尽其所能来正确学习事物。他有重复的数据类型,没有数据库强制的关系(外键/主键约束)和许多其他问题。他正在使用Youtube视频通过GUI工具手动完成所有操作。 我的问题是,尽管我希望他能够100%成功,但我认为让他处理这些类型的决策并不恰当。我如何说服他,如果不接受这些主题方面的某种教育,那么一起破解是一个坏主意?他可能很固执,我认为他将这类工作视为“孩子们玩耍” 我应该如何处理?哪怕是个坏主意-还是我想他应该雇用合适的DBA /开发人员来处理这个问题,以免成为维护噩梦,所以我正确吗? NB:我是4年的开发顾问,并且我看到了痛苦的客户实现中的我的一部分。 更新: 所以是几年后的事,我有时间思考这个问题。我父亲最终使用Google Docs,FileMaker Pro和一些电子邮件挂钩实施了一个解决方案。他自己完成了整个工作,他说他正在从中获得巨大的价值。 如果您是一位经验丰富的开发人员,则可能正在阅读该说明和内容。但实际上,我从整个过程中学到了很好的一课-人们只关心结果,而不关心实现。我父亲唯一关心的就是他不需要手动在纸上输入患者信息,而是可以快速填写Google文档表格。很棒的是,他正在寻找一个初级开发人员来专注于自己实践中的自动化。
18 database 

5
有众所周知的PowerShell编码约定吗?
在PowerShell中编程时是否有任何定义明确的约定? 例如,在要长期维护的脚本中,我们是否需要: 使用真实的cmdlet名称还是别名? 完整或部分指定cmdlet参数名称(dir -Recurse与相对dir -r) 在为cmdlet指定字符串参数时,是否将它们括在引号(New-Object 'System.Int32'与New-Object System.Int32 在编写函数和过滤器时,是否指定参数的类型? 您是否在(正式)正确的情况下编写cmdlet? 对于像BEGIN...PROCESS...END这样的关键字,您仅将它们写为大写吗? 似乎MSDN缺少用于PowerShell的编码约定文档,而对于C#,则存在这样的文档。

7
在尚处于早期开发阶段的情况下,可以将我的代码推送到GitHub吗?
我有一些处于非常早期开发状态的项目。它们远未完成,但我确实将它们(作为公共存储库)托管在GitHub上,因为: 我有多台计算机,我想在任何地方访问我的代码 我想要备份我的代码 如果有人想以某种方式进行协作,我希望它很容易 我使用GitHub Issues作为穷人的项目管理软件 即使在开发初期,也可以在GitHub上发布项目吗?我有点担心有人OMG this is total BS, this code is so bad!在看着未抛光/仍在开发中/未经测试的代码时会说。 开始新的公共项目时,您的做法是什么?您是否等到要显示一些实质性内容,或者直接在GitHub上创建裸仓库并从那里开始? 我GitHub在整个这篇文章中都使用过,但这适用于那里的每个代码托管服务。


5
.NET中是否有什么可以让我定义语法并生成编程语言的?
我有一门课程,教授要求我们为我们的最终项目创建DSL。他在Eclipse 的第一个xText课程中向我们介绍了。这是一门新课程,我对领域特定语言的含义还是有点模糊。 这是我目前的理解:领域特定语言是针对软件开发中的特定问题而创建的语言。DSL的示例是PHP,SQL,JavaScript,而相反的是Java,C#,C ++,Ruby等语言。 如果我错了,请随时纠正我。 我想知道的是:是否有用于.NET / Visual Studio的类似于Xtext的工具,该工具可以让我定义语法并可以使用活动图基于该工具生成编程语言?
18 .net  dsl 

1
python 3新功能解决了哪些问题?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 Python 3的新功能说: 我们主要是修复众所周知的烦恼和疣,并清除大量旧屑 它提到了什么不同(修复),但没有提到为什么(问题)。我还没有发现问题所在。修复程序解决了哪些问题?

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.