软件工程

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

3
SASS相对于LESS有什么优势吗?[关闭]
我正在尝试对这些CSS预处理器进行研究。 使用sass代替css预处理程序有什么好处?我要寻找的因素包括社区规模,软件项目成熟度等。 我知道还有另一个与此相关的问题,但它不是建设性地写成和封闭的。 更新资料 看起来引导程序现在已经可以使用Sass
36 css  less 

6
您应该如何TDD Yahtzee游戏?
假设您正在编写Yahtzee游戏TDD风格。您要测试代码部分,确定一组五个压模辊是否满座。据我所知,在进行TDD时,您遵循以下原则: 首先编写测试 写出最简单可行的方法 优化和重构 因此,初始测试可能如下所示: public void Returns_true_when_roll_is_full_house() { FullHouseTester sut = new FullHouseTester(); var actual = sut.IsFullHouse(1, 1, 1, 2, 2); Assert.IsTrue(actual); } 当遵循“写出可能的最简单的IsFullHouse方法”时,您现在应该这样编写方法: public bool IsFullHouse(int roll1, int roll2, int roll3, int roll4, int roll5) { if (roll1 == 1 && roll2 == 1 && roll3 == 1 …
36 unit-testing  tdd 

6
如何避免iOS上笨拙的UITableViewController?
在iOS上实施MVC模式时遇到问题。我已经搜索了Internet,但似乎找不到解决此问题的任何好方法。 许多UITableViewController实现似乎很大。我见过的大多数示例都允许UITableViewController工具<UITableViewDelegate>和<UITableViewDataSource>。这些实现UITableViewController是变大的一个重要原因。一种解决方案是创建实现<UITableViewDelegate>和的单独类<UITableViewDataSource>。当然,这些类必须参考UITableViewController。使用此解决方案是否有任何弊端?通常,我认为您应该使用委托模式将功能委托给其他“ Helper”类或类似类。是否有解决此问题的完善方法? 我不希望模型包含太多功能,也不希望包含视图。我认为逻辑应该真正属于控制器类,因为这是MVC模式的基石之一。但是最大的问题是: 您应该如何将MVC实现的控制器划分为较小的可管理部分?(在这种情况下,适用于iOS中的MVC) 尽管我正在特别寻找iOS的解决方案,但可能会有解决此问题的一般模式。请举例说明解决此问题的好方法。请提供一个论点,为什么您的解决方案很棒。

10
我是初学者。我可以直接开始学习C ++ 11吗?还是我必须学习旧的C ++?[关闭]
我是一个初学者,对编程只有很少的知识。 如果我直接从涵盖新C ++ 11的书中学习C ++,还是应该学习旧的最好的C ++书,那会很好吗? 在学习C ++ 11之前,我应该对C ++有所了解吗?还是我可以直接从那里开始? 如果我直接从C ++ 11开始,会引起问题吗?如果否,则建议一些有关C ++ 11的书籍。
36 c++  c++11 

6
应该避免会话变量吗?
我过去曾经严重依赖会话变量,但是最近发现其中许多不必要,而使用查询字符串参数之类的东西。 我的一位同事拒绝使用会话变量。这是一个现实的目标,并且出于任何实际原因应避免使用会话变量吗?是否可以完全避免使用会话变量(除了允许登录的会话cookie之外),这会导致更好的设计吗? 我的同事不使用它们的一些原因: 会话变量的无类型性质 会话超时导致状态丢失 会话变量的全局范围性质 负载平衡服务器丢失会话(特定于.Net?) 应用程序池/服务器重新启动 他们是不必要的


4
JVM对尾调用优化施加哪些限制
Clojure不会单独执行尾部调用优化:当您具有尾部递归函数并且想要对其进行优化时,必须使用特殊形式recur。同样,如果您有两个相互递归的函数,则只能使用来优化它们trampoline。 Scala编译器能够为递归函数执行TCO,但不能为两个相互递归函数执行TCO。 每当我阅读这些限制时,它们总是归因于JVM模型固有的某些限制。我对编译器一无所知,但这使我有些困惑。让我举一个例子Programming Scala。这里的功能 def approximate(guess: Double): Double = if (isGoodEnough(guess)) guess else approximate(improve(guess)) 被翻译成 0: aload_0 1: astore_3 2: aload_0 3: dload_1 4: invokevirtual #24; //Method isGoodEnough:(D)Z 7: ifeq 10: dload_1 11: dreturn 12: aload_0 13: dload_1 14: invokevirtual #27; //Method improve:(D)D 17: dstore_1 18: goto 2 因此,在字节码级别,只需要一个goto。实际上,在这种情况下,繁琐的工作由编译器完成。 基础虚拟机的什么功能将使编译器更轻松地处理TCO? …
36 scala  clojure  jvm  tail-call 

7
我是否应该不再使用不赞成使用的多线程和多处理器编程实践?
在FORTRAN和BASIC的早期,基本上所有程序都是使用GOTO语句编写的。结果是意大利面条代码,解决方案是结构化编程。 同样,指针可能很难控制我们程序中的特征。C ++从大量的指针开始,但是建议使用引用。像STL这样的库可以减少我们的依赖。还有一些习惯用法来创建具有更好特性的智能指针,并且某些版本的C ++允许引用和托管代码。 诸如继承和多态性之类的编程实践在幕后使用了许多指针(就像结构化编程生成充满分支指令的代码一样)。像Java这样的语言消除了指针,并使用垃圾回收来管理动态分配的数据,而不是依赖程序员来匹配其所有new和delete语句。 在我的阅读中,我看到了似乎不使用信号量的多进程和多线程编程的示例。他们是使用同一名称使用不同的名称还是使用新的方法来保护资源并发使用? 例如,使用多核处理器进行多线程编程的系统的特定示例是OpenMP。它代表以下一个关键区域,不使用信号量,该信号量似乎不包含在环境中。 th_id = omp_get_thread_num(); #pragma omp critical { cout << "Hello World from thread " << th_id << '\n'; } 本示例摘自:http : //en.wikipedia.org/wiki/OpenMP 或者,使用带有功能wait()和signal()的信号量对线程进行类似的保护,如下所示: wait(sem); th_id = get_thread_num(); cout << "Hello World from thread " << th_id << '\n'; signal(sem); 在此示例中,事情非常简单,只需简单的回顾就足以显示wait()和signal()调用是匹配的,即使有很多并发,也可以提供线程安全性。但是其他算法更复杂,并且使用多个信号量(二进制和计数),这些信号量分布在具有复杂条件的多个函数中,可以被许多线程调用。创建死锁或无法使线程安全的后果很难管理。 这些系统(例如OpenMP)是否消除了信号量的问题? 他们是否将问题转移到其他地方? 如何使用算法将自己喜欢的信号量转换为不再使用信号量?

4
在IRC频道中提问时的礼节[关闭]
许多较大的OSS项目都维护IRC渠道以讨论其用法或开发。当我因尝试并未能在网络上找到信息而陷入使用项目的困境时,我试图弄清楚该怎么做的一种方法是进入IRC频道并询问。 但是我的问题总是被渠道中的人们完全忽略了。如果我进入时保持沉默,那么仍然会保持沉默。如果正在进行通话,则通话不会打扰。我将频道开放了几个小时,希望也许有人最终会吸引我,但是什么也没发生。 因此,我担心自己会以某种我不理解的方式粗鲁,或者违反一些潜规则而被忽视。我试图使我的问题讲究礼貌,讲究语法,并试图表明我已经尝试了显而易见的解决方案以及为什么它们不起作用。我了解到,我显然对频道上的人们完全陌生,但是我不确定如何解决此问题。我是否应该在频道中潜伏一个星期而不说什么?这似乎也很荒谬。 我发送的典型消息可能是“大家好-我一直在尝试让Foo正常工作,但是我一直在获取BarException。我尝试重置Quux,但这似乎无济于事。关于我可以尝试的建议?”

9
程序员是不好的测试员吗?
我知道这听起来很像已经提出的其他问题,但实际上略有不同。似乎通常认为程序员并不擅长于测试应用程序。例如: Joel谈软件- 没有测试人员的前五(错误)原因(强调我的意思) 甚至不要想告诉大学CS毕业生他们可以为您工作,但是“每个人都必须在QA工作一段时间,然后再进行编码”。我已经看到了很多。程序员不能成为优秀的测试人员,并且您将失去一个优秀的程序员,而后者很难被替换。 在这个问题中,最受欢迎的答案之一是(再次强调): 开发人员可以成为测试人员,但他们不应该成为测试人员。开发人员倾向于无意/无意识地避免以可能破坏应用程序的方式使用该应用程序。那是因为他们编写了它,并且主要以应使用的方式对其进行了测试。 所以问题是程序员不好测试吗?有哪些证据或论点支持这一结论?程序员是否只擅长测试自己的代码?有没有证据表明程序员实际上擅长测试? 我所说的“测试”是什么意思?我并不是说单元测试或任何被软件团队用来编写软件的方法论的一部分。我的意思是在构建代码并将其部署到软件团队称为“测试环境”的任何位置之后使用的某种质量保证方法。
36 testing  qa 

7
为什么有那么多语言按价值传递?
即使是像C这样的具有显式指针操作的语言,也总是按值传递(您可以按引用传递它们,但这不是默认行为)。 这有什么好处,为什么这么多的语言通过值传递,为什么其他的语言通过引用传递?(我不确定Haskell是通过引用传递的,尽管我不确定)。

8
OOP是变得容易还是困难?[关闭]
几年前,当面向对象编程的概念被介绍给程序员时,它看起来很有趣并且编程更加简洁。OOP就是这样 Stock stock = new Stock(); stock.addItem(item); stock.removeItem(item); 使用自描述名称更容易理解。 但是现在,具有数据传输对象,值对象,存储库,依赖注入等模式的OOP变得更加复杂。为了达到上述目的,您可能必须创建多个类(例如abstract,factory,DAO等)并实现多个接口 注意:我不反对使协作,测试和集成更容易的最佳实践

2
Haskell委员会为什么选择monad代表I / O?
该清洁语言使用的独特类型来处理I /在一个单纯的功能设置O操作。为什么Haskell委员会改为使用monads?是否还有其他提议处理该委员会调查但决定反对的状态? 注意:我并不是在寻找Monad与其他形式的计算之间的圣战。让我们仅根据委员会在I / O方面的选择来讨论主题。

3
我已经发布了软件产品-在没有预算和有限的时间的情况下,如何最大化曝光率?
我想在这一方面与社区联系。作为软件开发人员,我不是专业的销售人员或营销专家-我认为在代码方面没有太多其他事情。我遇到的大多数开发人员都是这样,并且往往是认真的小事。可以说,作为开发人员,我最近发布了一种新的软件产品,如果人们只知道这一点,我敢肯定它会很受欢迎。假设预算为$ 0.00,并且每天有限制的时间(即30到60分钟)。在这些限制范围内,我该怎么做才能最大程度地暴露? 如有可能,请至少用两个工作示例来备份您的答复。
36 marketing 

15
我应该继续自己的自学编码实践还是学习专业的编码方法?[关闭]
最近,我一直在从事专业工作,与其他程序员一起闲逛,并结交业界朋友。唯一的是我是100%自学的。这使我的风格与经过适当培训的人的风格极为不同。不同之处在于我的代码的技术和组织。 这是我做的几件事的混合体。我倾向于将几种编程范例融合在一起。像Functional和OO。我比OO更倾向于功能性方面,但是当某些东西作为抽象实体更有意义时,我会看到使用OO。就像游戏对象。接下来,我也会在做某事时走简单的路线。相反,有时候,我从专业程序员那里看到的代码似乎很复杂!我使用很多闭包。最后,我不是最好的评论者。我发现仅阅读我的代码比阅读注释要容易。大多数情况下,即使有注释,我最终还是要阅读代码。另外,有人告诉我,由于我编写代码的方式非常简单,因此很容易阅读。 我听到受过专业训练的程序员不断进行诸如单元测试之类的事情。我以前从未用过的东西,所以我什至都没有关于它们是什么或它们如何工作的最模糊的想法。下划线“ _”很多,这并不是我真正的品味。我使用的大多数技术都是直接来自我的,或者是我读过的几本书。对MVC一无所知,尽管我曾经听说过很多关于main.js的内容。我认为这是组织应用程序的一种方式。尽管这使我感到困惑,因为到目前为止我已经建立了自己的组织结构。 有点痛苦。当学习Ubuntu的Quickly之类的新知识时,我根本无法使用模板应用程序。我很难理解我可以告诉别人的代码。完整的OO编程确实给我留下了不好的印象,但这似乎是其他所有人严格使用的东西。 这让我对代码的外观没有那么自信,或者想知道我加入公司或为开源项目做贡献时是否会引起火花。实际上,我非常害怕人们最终会签出我的代码。这是任何程序员都可以正常进行的事情,还是我真的应该改变自己的技术?

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.