软件工程

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


3
哪种更好的做法-辅助方法是实例还是静态?
这个问题是主观的,但是我很好奇大多数程序员是如何做到这一点的。下面的示例使用伪C#,但这也应适用于Java,C ++和其他OOP语言。 无论如何,当在我的类中编写辅助方法时,我倾向于将它们声明为静态方法,并且仅在辅助方法需要它们时才传递字段。例如,给定以下代码,我更喜欢使用方法调用#2。 class Foo { Bar _bar; public void DoSomethingWithBar() { // Method Call #1. DoSomethingWithBarImpl(); // Method Call #2. DoSomethingWithBarImpl(_bar); } private void DoSomethingWithBarImpl() { _bar.DoSomething(); } private static void DoSomethingWithBarImpl(Bar bar) { bar.DoSomething(); } } 我这样做的原因是,它使(至少在我看来)清楚地知道了helper方法可能对其他对象产生副作用-即使没有阅读其实现方法。我发现我可以快速掌握使用该实践的方法,从而帮助我进行调试。 您更喜欢在自己的代码中执行哪些操作?这样做的原因是什么?


3
如果我使用LGPL许可的库,该怎么办?
我已经阅读了这些问题和答案,但是如果我动态链接到使用LGPL许可证的库(在我的情况下为SDL库),我仍然不知道该怎么做。 如果我正确理解LGPL文本,则需要以某种方式提供该库的源代码。这够了吗?如果没有,还需要做什么?
48 lgpl 


4
if('constant'== $ variable)与if($ variable =='constant')
最近,我已经在PHP中进行了大量工作,尤其是在WordPress框架中。我注意到许多形式的代码: if ( 1 == $options['postlink'] ) 我本来希望看到的地方: if ( $options['postlink'] == 1 ) 这是某些语言/框架中的约定吗?是否有任何理由使前一种方法比后者更好(从处理角度,解析角度甚至人的角度来看)? 还是仅仅是口味问题?我一直认为执行测试时会更好,因为针对某个常量测试的变量项位于左侧。似乎更好地映射了我们用自然语言提出问题的方式:“如果蛋糕是巧克力”而不是“如果巧克力是蛋糕”。

20
您是否应该编写好的文档和简洁的代码来增加“总线系数”?
软件开发公司的主要目标之一是提高其总线系数。Google在一次演讲中也倡导了这一点。 这意味着您应该以一种方式对所有内容进行编码和文档编制,以确保明天您要在公共汽车上运行时,项目仍然可以继续进行。换句话说,您应该使自己很容易被具有类似技能的其他程序员替换。 可替换,这是否违背了开发人员的利益?在这本书中,有48条权力定律第11条规定,您应该设法使人们依赖于您,以便获得权力,然后将其转化为金钱奖励。 除了这种情况,您需要自己准备一些文档才能在暂停6个月后继续进行项目,开发人员和软件公司之间显然存在利益冲突。 因此,作为一名程序员,您应该为所有人真正编写出色的文档和易于阅读的代码吗?还是应该以一种可以完成工作的方式编写代码和文档,并且您自己可以理解它,但是另一个人可能很难理解它?

3
为什么2 ^ 16是“特殊”数字?[关闭]
好的,我问这个问题很愚蠢-但在杰夫(Jeff)的文章中:正确设置采访电话屏幕,最初是在5个基本电话屏幕问题中指出的: 当您要求2 ^ 16是时,他们不应该茫然地盯着您。这是一个特殊的数字。他们应该知道。 我从事开发人员,软件工程师,代码猴子等工作已经有一段时间了,我认为我从未遇到过。我的意思是,我当然可以指望二进制值对其执行基本操作等,但是我看不到该值的“特殊之处”。
48 numbers  binary 

6
Coffeescript的优缺点是什么?[关闭]
当然,在很多情况下,语法糖的大量使用会导致代码缩短,这是一大优点。在http://jashkenas.github.com/coffee-script/上,有许多令人印象深刻的示例。另一方面,我怀疑这些示例是否代表了复杂的实际应用程序的代码。例如,在我的代码中,我从不向裸对象添加函数,而是向其原型添加函数。而且,原型功能对用户是隐藏的,这表明是经典的OOP而不是惯用的Javascript。 数组理解示例将在我的代码中看起来像这样: cubes = $.map(list, math.cube); // which is 8 characters less using jQuery...

7
您如何应对编程疲劳?[关闭]
不是像“我需要睡觉”那样的疲劳,而是像“我再也无法烦扰”那样的疲劳,通常在遇到任何正在开展的项目中遇到障碍时,通常会出现这种情况,通常越接近截止日期。 它可以在工作项目中,也可以在个人项目中,但这是我最近越来越关注的问题。我会有一个主意,着手研究,有一些非常好的日子并取得进展,然后有些琐碎的事情会让我绊倒,我无法按您想要的方式工作,我遇到了限制在框架中,我遇到了找不到文档的问题,等等,这太令人沮丧了。 还是我一个人呢?

14
在何处以及如何提及Stackoverflow参与简历?[关闭]
我想我现在在SO上有足够的声誉。好吧,与那里的许多其他用户相比,这可能不算什么,但是我对我感到满意。 因此,我当时想在简历中添加我的个人资料链接-只是个人资料链接,而不是“我在SO上享有如此高的声誉”。那些没有看过的人可以看到这个问题,您是否可以将Stack Overflow个人资料链接放在CV /简历上? 看起来如何? 论坛/博客/其他 尚无博客,但是Stackoverflow的积极参与者。我的个人资料链接- http://stackoverflow.com/users/userId/username 我想将此部分放在“ 项目详细信息”和“ 技术专长”部分之后。有什么提示/建议吗? 更新资料 MKO提出了非常好的观点 - 您是否真的希望潜在的雇主能够详细评估您在SO上编写的所有内容 我想到要发表评论,但时间太长了- 在我的问题/答案中,我发表了很多声明,例如-“ AFAIK ...”,“到目前为止是我的假设...”,“我正确地得出结论: ...?”,“我不确定是否可以...”等等,当我不确定某件事并且很少参与与其他用户的战斗时。但是,如果我认为有必要并且我有观点的话,我有时会就主题进行辩论。我确实接受自己的错误,并为此道歉。众所周知,没有人是完美的。我一定写了很多可能被潜在雇主认为是错误的东西。但是,如果同一雇主注意到我通过将旧内容与新内容进行比较,我的内容质量得到了改善,该怎么办?那不是很好吗? 当我觉得自己错了或者可以改善自己的帖子时,我还会尝试回到较早的问题/答案并提出更正性的评论等。 当然,有许多雇主希望您(潜在雇员)每次都正确。当您说出一件错误的话时,他们会立即使您脱离考虑。几个月前,我亲自遇到过这样的面试官。在发现一件错误的事情之后,他甚至都不愿意听我所做的任何好事情。 现在的问题是,您真的很想和这样的人一起工作吗?还是您喜欢那些珍视您每天都在努力改善的事实的人。我个人更喜欢后者。
48 resume 

11
当面试官不知道自己问题的答案时该怎么办?[关闭]
昨天我在一次采访中经历了一次糟糕的经历。 面试官问我关于纯虚函数的问题。我说过,它在基类中可能有也可能没有定义,但是派生类应该提供定义,除非它们也想成为抽象类。 但是面试官一直在问:“纯虚拟可以定义吗????”……我说是的。 他再次说:“纯吗?” 我说是。允许的是,如果派生类想要特定的行为,则可以显式调用该函数。 他送我出去。我确信他不知道纯虚函数可以有定义这一事实。 如何对待这种面试官? 问了第二次之后,我应该撒谎说它没有定义吗?:) 还是我应该恪守承诺,放弃工作机会?
48 c++  interview 


14
大多数程序员会复制并粘贴代码吗?[关闭]
我很早就了解到,从长远来看,剪切和粘贴别人的代码需要花费更长的时间来编写自己的代码。在我看来,除非您真正理解它,否则剪切和粘贴代码可能会遇到解决噩梦的问题。 不要误会我的意思,我的意思是找到其他人的代码并从中学习是必不可少的,但我们不仅将其粘贴到我们的应用中。我们重写的概念进入我们的应用程序。 但是我一直在听到有人剪切和粘贴的消息,他们谈论这就像是通常的做法。我还看到其他人的评论,这表明这是普遍的做法。 那么,大多数程序员会剪切并粘贴代码吗?

13
个人代码所有权重要吗?[关闭]
我正在与一些同事争论整个代码库的团队所有权是否比其各个组件的所有权更好。 我非常支持为团队中的每个成员分配大致相等的代码库份额。它使人们为自己的创作感到自豪,为错误筛选器提供了分配入场券的明显第一位,并有助于缓解“破窗综合症”。 它还集中了一个(或两个)团队成员对特定功能的了解,从而使错误修复更加容易。 最重要的是,它是由拥有大量投入的人而不是由委员会来决定重大决策的最终决定权。 如果有人要更改您的代码,我不主张要求获得许可;当然,也许代码审查总是对所有者负责。我也不建议建立知识孤岛:这种所有权不应该排他。 但是,当向我的同事提出建议时,我得到了很多回击,当然比我预期的要多得多。 因此,我问社区:您对在大型代码库上与团队合作有何看法?关于保持集体所有权,我缺少什么吗?

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.