软件工程

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

4
大声读出代码的标准?
有没有人为任何语言定义一种标准来大声朗读代码?我认为这对于视力受损的屏幕阅读器之类的软件很重要。当您与某人讨论代码,在小组中复习代码或讲课时,也会出现这种情况。 在C语言家族中,有许多单词的发音很“明显”。有的只是英文单词:for,break,case,default,等一些缩写,比如int,是明确。然后是char。 我总是倾向于像第一个“木炭”音节那样说(并在脑海中听到)。第一次与发音像“汽车”的人谈论代码时,这让我很不高兴,这实际上更有意义,因为它实际上char是“字符”一词的缩写,因此很明显,它应该发音相同。但是即使知道这一点,炭烧煤对我来说更合适。 然后有类似的声明foo = bar ? *(++baz) : zardoz。 有没有人生产过一份文件,规定了正确的阅读方式(以他们的观点)?使用特定语言还是一般代码?


5
托管脚本的优缺点
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我已经看到一些开发人员使用托管脚本来链接他们的库。 cdn.jquerytools.org 就是一个例子。 我还看到人们抱怨托管脚本链接已被劫持。 在现实中使用托管脚本的安全性如何?脚本是否自动更新?例如,如果jQuery 5转到6,我是否会自动获得版本6,还是需要更新链接? 我还看到Google为托管提供了许多此类脚本设置。 优缺点都有什么?
12 jquery 

2
了解C ++中的回溯
我对C ++的基础知识有很好的基本了解,也对递归的工作方式也有了解。我遇到了一些问题,例如经典的八皇后问题和使用回溯法解决数独问题。 我意识到我对此一无所知,似乎无法回想起递归堆栈并重新开始以解决问题的想法。用笔和纸似乎很容易,但是在为此编写代码时,我对如何开始解决这些问题感到困惑。 如果有一个针对初学者的教程,或者有一本很好的书涵盖了这些内容,那将是很有帮助的。如果有人可以阐明这个话题或给我一些有关体面参考的链接,我将不胜感激。 是的,我确实知道使用功能语言会更容易,但是我也想了解命令式语言的实现。
12 c++  recursion 

4
是否可以介绍仅在单元测试期间使用的方法?
最近,我正在开发一种工厂方法。该方法是创建一个普通对象或包装在装饰器中的对象。装饰对象可以是全部扩展StrategyClass的几种类型之一。 在测试中,我想检查返回对象的类是否符合预期。当普通对象os返回时,这很容易,但是将其包装在装饰器中怎么办? 我使用PHP编写代码,因此可以ext/Reflection用来找出一类包装对象,但是在我看来,这似乎使事情变得过于复杂,并且有点像TDD的规则。 相反,我决定引入getClassName()从StrategyClass调用时将返回对象的类名的方法。但是,当从装饰器调用时,它将返回装饰对象中相同方法返回的值。 一些代码使其更清晰: interface StrategyInterface { public function getClassName(); } abstract class StrategyClass implements StrategyInterface { public function getClassName() { return \get_class($this); } } abstract class StrategyDecorator implements StrategyInterface { private $decorated; public function __construct(StrategyClass $decorated) { $this->decorated = $decorated; } public function getClassName() { return $this->decorated->getClassName(); } …
12 php  tdd 

8
作为程序员学习计算机体系结构
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我通常会在SO和其他地方(教师,书籍作者等)碰到大师,他们会说一些类似的话"This will cause alignment issues"或其他低级技巧。 我想了解所有relevant与编程有关的花絮。现在通常当我看到低级书籍(例如计算机体系结构书籍)时,它们太低级了,并且适合那些主要关注计算机体系结构而不是软件设计的人们。 您是否对与程序员相关的入门书籍有一些建议?

6
Solo .NET程序员移至团队
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 在过去的8年中,我一直是一家小型初创公司的.NET程序员。我已经组装了一些相当不错的软件,并且我一直在努力改善自己,并遵循最佳实践,包括源代码控制(SVN / TFS)。我与其他学科的工程师团队紧密合作,但是当涉及到软件时,我是唯一的编程人员。我喜欢编程的技巧,也喜欢学习新知识以增强工具。 两周后,我将开始一个由20位.NET开发人员组成的团队的新工作。我的职位将是中级,并且我将在一些具有令人印象深刻的背景的程序员的带领下工作。同样,团队开发对我来说是新的,所以我正在寻找一些通用的“新手”技巧,这些技巧将帮助我尽可能高效,轻松地与一开始相处。 任何事情,包括高级技巧,以及与沟通有关的日常琐事。
12 team  teamwork 

5
多种方法优于切换的优势
我今天收到一位高级开发人员的代码审查,询问“顺便问一下,您反对通过switch语句分派功能吗?” 我已经在很多地方读到了关于如何通过切换到调用方法来泵送参数是不好的OOP,而不是可扩展的,等等。但是,我无法真正为他提供明确的答案。我想一劳永逸地解决这个问题。 这是我们的竞争代码建议(以php为例,但可以更普遍地应用): class Switch { public function go($arg) { switch ($arg) { case "one": echo "one\n"; break; case "two": echo "two\n"; break; case "three": echo "three\n"; break; default: throw new Exception("Unknown call: $arg"); break; } } } class Oop { public function go_one() { echo "one\n"; } public function …

3
是对Joshua Bloch的Builder设计模式的改进吗?
早在2007年,我读了一篇关于Joshua Blochs的文章,介绍“构建器模式”,以及如何对其进行修改以改善对构造函数和setter的过度使用,尤其是当对象具有大量属性(其中大多数是可选属性)时。这种设计模式的简要总结articled 这里。 我喜欢这个主意,从那以后一直在使用。它的问题,尽管从客户的角度来看非常干净而且易于使用,但是实现它可能是一件痛苦的事!对象中有许多不同的地方引用了单个属性,因此创建对象和添加新属性要花费大量时间。 所以...我有个主意。首先,使用约书亚布洛赫(Joshua Bloch)风格的示例对象: Josh Bloch风格: public class OptionsJoshBlochStyle { private final String option1; private final int option2; // ...other options here <<<< public String getOption1() { return option1; } public int getOption2() { return option2; } public static class Builder { private String option1; private int option2; …

9
避免从C移植到面向对象的陷阱,对您有用的是什么?
我已经使用过程语言进行编程已有一段时间了,我对问题的第一反应是开始将其分解为要执行的任务,而不是考虑存在的不同实体(对象)及其关系。 我在OOP上过一门大学课程,并且了解封装,数据抽象,多态性,模块化和继承的基础知识。 我阅读了/programming/2688910/learning-to-think-in-the-object-directional-way和/programming/1157847/learning-object-directional-thinking,并将查看这些答案中指出的一些书籍。 我认为我的一些中型到大型项目将受益于OOP的有效使用,但是作为一个新手,我想避免耗时的常见错误。 根据您的经验,这些陷阱是什么?解决这些陷阱的合理方法是什么?如果您能解释为什么它们是陷阱,以及您的建议如何有效解决该问题,将不胜感激。 我正在考虑类似“是否有大量观察者和修饰符方法并使用私有变量,或者是否有用于合并/简化它们的技术?”这样的思路。 如果有充分的理由混合使用方法,我不担心将C ++用作纯OO语言。(尽管有节制,但让人想起使用GOTO的原因。) 谢谢!

7
Python是开发UI的好选择吗?如果是这样,wxPython还是Tkinter?
我期待使用Python开发桌面应用程序。我是一个初学者,我在Python方面没有足够的专业知识。我也是Java程序员。尽管我有一些使用Swing构建UI的经验,但我发现在Swing上开发的应用太慢了。好吧,这可能就是为什么许多主要实现都是在C / C ++中完成的原因之一,就像在浏览器/游戏中一样。 用C ++开发UI可能是一个更好的选择,但是我更喜欢选择一种高级编程语言,而不是C / C ++。因此,我选择使用Python是因为Python本身是基于C / C ++构建的,因此它会比Java Swing更好。 那么,我可以继续假设Python在开发UI方面比Java Swing好吗?还是建议使用比Python更好的语言来开发UI?如果我继续使用Python,应该使用哪个工具包使用Tkinter或wxPython,为什么?

3
当前分页实现的设计问题
我已经在asp.net mvc上专门检查了分页实现,我真的觉得实现中的效率较低。 首先,所有实现都使用如下所示的分页值。 public ActionResult MostPopulars(int pageIndex,int pageSize) { } 我觉得不对的是pageIndex和pageSize完全应该是Pagination类的成员,否则这种方式看起来功能太多。它还简化了应用程序层中不必要的参数传递。 第二件事是他们使用下面的界面。 public interface IPagedList<T> : IList<T> { int PageCount { get; } int TotalItemCount { get; } int PageIndex { get; } int PageNumber { get; } int PageSize { get; } bool HasPreviousPage { get; } bool HasNextPage …

8
您如何使经理了解敏捷?
我对一位不了解迭代开发的高级主管有疑问(更不用说敏捷了)。他坚持要在编写任何代码行之前先完成我们的软件设计规范(SDS)。对他来说,完整意味着所有功能细节都在那里。另外,作为一名前Cobol程序员,他希望查看“模块”和流程图。这是一个Java Web应用程序,可大声喊叫! 无论如何,我试图找到一个简单的位置来轻轻地指点他,以表明在开始编码之前SDS不一定是100%完整的(也不能完整)。有什么建议? 谢谢!

7
为什么学校不提供调试器?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 关于SO的另一个作业问题。似乎绝大多数学生都不知道调试器是什么或如何使用调试器。我觉得知道如何使用调试器与编程的其他基础几乎一样重要。 问题是不应该进行调试吗?如何在编程基础知识的基础上教授现代调试工具的使用方法?如果不是,为什么不呢。

10
领导团队,我太霸道了吗?
我处于一个非常奇怪的位置。我是特定项目的“团队负责人”,职位是高级软件工程师。在我的团队中,我有4个开发人员,其中一个在另一个项目中担任类似的角色,但是现在我的工作已被优先考虑,因此他正在研究我的工作。我也有2位测试员,其中一位是经理。团队的另一个成员是“客户代表”,他是一个完全无关的部门的一部分。我还有一个直接位于我上方的经理,而且我相信也是位于团队中的测试经理的上方...虽然对此不太确定。 我试图弄清为什么我的角色正好是几次。对于我来说,即使我有权力,也很难弄清楚我的权威在哪里开始和结束。我目前正在使用的答案是,我是团队的“技术主管”。这似乎意味着我的权限超过了与产品代码本身相关的,与体系结构,设计和过程/编码标准有关的技术决策。 今天,出现了一些问题,我将代码结果委托给团队中的一位成员,并在我们的Scrum全面展示会议上向公司的其他成员展示了这些结果。客户代表人进行炫耀。今天展示了一些我真的不同意的东西,甚至没人问我是否想对发生的事情发表意见。简而言之,为了提供用户以下列方式在报告中显示值的能力(“ doc”单位,设计单位(四舍五入而不是四舍五入)),他们为每个排列提供了访问字段。因此,我们具有舍入文档单位,舍入设计单位,未舍入文档单位,未舍入设计单位的价值。用户希望使用的每个记录都有许多这样的值,并且每个记录都以这种方式排列。 我真的很讨厌这个 向我们展示这些内容的人想要确保我们用于报表的API与我们执行诸如将数据导出到Excel之类的方式相同。不幸的是,现在我们正朝着我认为非常非常糟糕的方向发展。 在下一次会议上,我确实有点不高兴,我问做这件事的两个人,“我为什么不参与这个决定?” 这是一个不断出现的问题,我很难过,似乎只是让我领导的团队成员问我是否要参与其中。有时我不会,我认为他们想出的办法都会很好。有时候我会。除非人们问我,尽管很难知道正在发生的事情需要我的投入,而他们却没有给我机会。 不幸的是,我的权限并没有告诉别人:“下次您离开并且自己做这样的事情而没有与我交谈时,您将受到纪律处分。” 那是一个“公关”问题,这显然不在我的权限范围之内。实际上,这对我很好,因为如果有人愿意,我不想面对这种垃圾。 但是今天,我的经理在所有人面前(我想这也是我提出这样的错误的部分原因)告诉我,我不能参与所有决定,而需要委托。 我当然认为我是对的。我不是说我认为是BS。我认为应该就此问题与我联系,并询问我是否有更好的主意。我的方向实际上是决定现在提供一个值,因为这实际上是新功能的最开始阶段,并讨论在将来需要时提供进一步访问的选项。我永远不会批准或推荐当前的实现方式,而且我真的认为它不应该成为现实。 问题是,我是一个不合理的人吗? 好吧,我们两个人讨论了这个问题,并同意我们俩都“丢球”,而且我们似乎在同一页上。星期一早上...我们将尝试确保我在团队中的角色清楚,是的,我要决定何时需要进行设计或任务更改。我被提议同意或者决定我需要更深入地研究。然后,我可以尝试其他一些工作,以确保他们知道可以来找我。

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.