软件工程

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

2
什么是O(…),如何计算?
救命!我有一个问题需要分析算法或某些代码的Big-O。 我不确定究竟是什么Big-O或Big-O与Big-Theta或与其他分析算法复杂性的方式之间的关系。 我不确定Big-O是指运行代码的时间,还是所需的内存量(空间/时间折衷)。 我有计算机科学作业,需要做一些循环,也许是递归算法,并为此设计出Big-O。 我正在开发一个程序,我可以在两个数据结构或算法之间选择一个已知的Big-O,并且不确定要选择哪个。 我如何了解如何计算Big-O并将其应用到我的程序,作业或计算机科学常识中? 注意:此问题是社区确定的其他Big-O问题的规范重复目标。能够包含许多Big-O问题的大量有用信息的意图是广泛的。请不要使用如此广泛的事实来表示可以接受类似的问题。

5
我们应该使用实体框架吗?
我们目前有以下堆栈: VS 2005 网络表格 SQL Server 2005 IIS 6 我们正计划过渡到此: VS 2010 MVC和Web表单 SQL Server 2008 IIS 7 我的问题是,当我们在VS 2010中使用MVC时,应该使用Entity Framework(或另一个ORM),微型ORM(例如Massive)还是仅使用普通SQL? 我已经阅读了有关VS 2010的所有教程,都是针对使用Entity Framework进行数据事务而设计的,但是在可预见的未来(超过5年)中会存在吗? 如果有关系,我们客户的应用程序可以拥有10-1,000个活跃用户。

13
面试过程中如何回答错误/未回答的问题?[关闭]
今天,我对潜在的实习生进行了首次面试。尽管这大部分是开放性问题,但我为他们做了一些琐碎的编程任务: 如果写三角形边(所有整数)的a,b和c可以代表一个返回true的功能直角三角形。 FizzBu​​zz。 使用递归计算斐波那契的第N个元素(如果他们不知道斐波那契是什么,我什至可以将它们定义为F(n)= F(n-1)+ F(n-2); F(1)= 1; F(0)= 1)。 实现整数的结构列表并编写函数以将其反转。 这些显然是非常简单的任务,我还没有准备好不解决这些问题。 当他们遇到这些问题时,我应该怎么做?我应该放弃答案吗?给个小费(我这样做了,最终自己解决了这个问题)?还是只是继续(或也许只是停止)面试? ps。遇到问题时,我的意思不是说有错误,而是如果他们甚至无法入门。Fibonacci和List问题就是这种情况。

4
自由职业者的Web开发人员如何管理客户的虚拟主机?
我为朋友,家人等建立了许多网站,并将它们全部放在一个共享的虚拟主机帐户中。既然已经构建好了,我想摆脱支持它们并为它们付款的业务(我的朋友正在偿还我的钱,但我要支付实际的账单),所以我在考虑让他们创建自己的托管帐户并缓慢迁移这些网站。 让我开始思考任何自由职业者该如何做?他们是否强迫客户预先设置自己的主机,并让程序员在开发期间登录到客户帐户。如果将来有错误并且需要重新使用该怎么办? 我很想知道大多数人使用哪种模型为他人构建网站,这似乎是一个棘手的情况。

5
设计自上而下还是自下而上是更可取的?
据我了解,自上而下的设计是通过将抽象的高级概念细化为较小的混凝土和易于理解的部分,直到定义了最小的构建块。另一方面,自下而上定义了较低级别的部分,然后逐渐构建较高级别的块,直到形成整个系统。 实际上,最好将两种方法结合起来:从高级规范开始,以完全指定领域知识,其关系和约束。一旦清楚地了解了问题,便会创建最小的构建块来构建系统。 过程: 创建需求规范 创建设计规范(带有图表) 实行 交付 重复(在迭代开发中,我们不重复每个阶段的全部工作,而是重复每个阶段的一点工作,并每天开会以满足客户的动态需求) 看起来对我来说是完全正常的(以规格作为计划)。它有其缺陷,但这就是为什么我们要进行迭代开发:为什么要花时间在一个阶段上,而不是花时间进行需求分析,以研究领域知识中可能发生变化的所有可能事物(可能每天),而是进行一些分析,进行一些设计然后实施。 另一种方法是,每次迭代都是一种小型瀑布式的方式,在几天(或一周)内进行分析。设计同样如此。其余时间用于实施。自上而下的方法与迭代开发相结合有天生的错误吗? Paul Graham 在他的论文《自下而上编程》中似乎鼓励完全自下而上地构建,或者鼓励自下而上地对其进行编程,但是不建议进行需求分析/设计阶段: 经验丰富的Lisp程序员对程序进行了不同的划分。除自上而下的设计外,它们还遵循可称为自下而上的设计的原则-更改语言以适应问题。 就我所知,他的意思是Lisper仍然执行自上而下的设计,但程序自下而上,是真的吗?他写道: 值得强调的是,自下而上的设计并不意味着仅以不同的顺序编写相同的程序。自下而上工作时,通常会得到不同的程序。您将获得一种具有更多抽象运算符的更大语言,以及一个用它编写的较小程序,而不是一个单一的整体程序。取而代之的是门,而不是门。 这是否意味着在用Lisp编写程序期间,您最终会获得通用工具?
31 design  c++  lisp 

13
语言不受欢迎的开发中的问题(例如维护)
我正在团队中单独使用clojure(lisp)开发一些应用程序。它从小应用程序开始。没问题。但是,由于它具有功能并扩展了区域,因此它已成为重要的程序。 我担心维护等问题。我们团队中没有人知道Clojure或Lisp,也不对诸如此类的语言感兴趣。 因此,用不受欢迎的语言进行编程不是错误的做法吗?(为了我自己的乐趣?)我应该使用更多流行的语言吗?(至少像python) 我确定我是否要离开团队,而不是说我要离开。:)-没有人​​会维护它。该程序将被销毁,部分程序将使用其他语言进行开发。 尽管我非常喜欢使用clojure进行开发,但我发现这可能不适合我的团队。 你怎么看待这件事?我认为许多喜欢不受欢迎的语言的程序员都在关注类似的问题。

2
如何描述简历中的技能水平?[关闭]
在简历中,有哪些可能/标准的词来描述您在不同编程语言中的技能水平?我目前使用这三个: 专家 高级 初学者 我不认为自己是任何编程语言的专家,因此我将所有技能归为初学者或高级。但是,我想进一步区分。我特别在寻找高级和专家之间的东西。有什么建议么?还是我不应该打扰区分更多细节?
31 skills 

7
何时应在诸如KeyValuePair之类的预构建结构上使用2属性类?
什么时候应该将键/值类型的数据放在其自己的类中,而不是使用诸如a KeyValuePair或a 之类的预构建通用结构Tuple? 例如,我创建的大多数ComboBox都包含一个DisplayName和一个Value。这是我要决定何时放入新类以及何时仅使用KeyValuePair的数据类型。 我目前正在使用进行某些操作,iCalendar最终将所选用户的数据合并为一种key1=value1;key2=value2;字符串。我首先将数据放入KeyValuePair<string,string>,但现在我想知道那是否应该是它自己的类。 总的来说,我很想知道在决定使用现有的结构/类(如KeyValuePair2属性对象)时使用什么准则,以及在哪种情况下您应该使用哪种准则。
31 c#  coding-style 

9
如果使用多台计算机,如何同步所有内容?[关闭]
我现在有4到5台计算机,并且我需要一个更好的系统来同步所有内容。我经常使用git和github来同步我的文件以进行编程项目,但随后有数据库,.bash_profile文件,bash脚本等。有时,我不是从同步文件而是从一台计算机切换到另一台计算机。但这变得相当混乱。我的一些计算机是Ubuntu,其他的是OSX。 对于管理跨多台个人计算机的工作流有何建议?

18
如果客户要求您不要使用面向对象的编程,您将怎么办?
我正在编写一个程序来模拟网格中蚂蚁的活动(PDF)。蚂蚁可以四处走动,捡东西和丢东西。 问题是,虽然可以通过类属性轻松地跟踪蚂蚁的动作和每个蚂蚁的位置(并且我们可以轻松地创建此类蚂蚁的许多实例),但我的客户说,由于他具有函数式编程的背景,因此他希望使用功能编程进行仿真。 需要明确的是,来自客户端的原始词语仅是“ no class”,而不是“ function programming”。因此,我认为他并不意味着函数式编程,我势在必行。另外,我没有函数编程的经验。 但是,我认为专注于这个问题,特别是关于功能性编程要求,而不只是简单地“必须执行”,这是有益的。 您将如何处理这种情况?您是否会说服客户使用面向对象的编程更清洁,尝试遵循他的要求并为他提供劣质的代码,或者做其他事情?

4
我应该坚持还是放弃Python来处理并发性?
我有一个10K LOC写在项目的Django用相当便宜的芹菜(RabbitMQ的用于在需要异步和后台作业),并已得出结论,该系统的部分将来自于被改写受益的东西比Django的其它更好的并发。原因包括: 信号处理和可变对象。特别是当一个信号触发另一个信号时,当实例更改或消失时,使用ORM在Django中处理它们可能会令人惊讶。我想使用某种消息传递方法,其中传递的数据在处理程序中不会更改(如果我正确的话,Clojure的写时复制方法看起来不错)。 系统的某些部分不是基于Web的,因此需要更好的支持来同时执行任务。例如,系统读取NFC标签,当读取一个NFC标签时,LED点亮几秒钟(Celery任务),播放声音(其他Celery任务),并查询数据库(其他任务)。这是作为Django管理命令实现的,但是Django及其ORM本质上是同步的并且共享内存是有限的(我们正在考虑增加更多的NFC读取器,我认为Django + Celery方法不再可行,我希望看到更好的消息传递功能)。 与使用诸如Erlang或Clojure这样的语言相比,使用Twisted或Tornado之类的利弊是什么?我对实际的利益和损害感兴趣。 您如何得出结论,系统的某些部分使用另一种语言会更好?您是否遇到性能问题?这些问题有多严重?如果可以更快,那么是否必须更快? 示例1: Django在HTTP请求之外工作: 读取NFC标签。 已查询数据库(可能还有LDAP),并且我们希望在数据可用时执行某些操作(红灯或绿灯,播放声音)。这会使用Django ORM进行阻止,但是只要有Celery工作人员可用,就没有关系。更多工作站可能是个问题。 示例2:使用Django信号进行“消息传递”: 一个post_delete事件被处理,其他的对象可能是因为这个被修改或删除。 最后,应将通知发送给用户。在这里,如果传递给通知处理程序的参数是已删除或将要删除的对象的副本并保证在处理程序中不发生更改,那将是很好的。(当然,可以简单地通过不将ORM管理的对象传递给处理程序来手动完成。)

14
向青少年传授软件病毒是否合乎道德?[关闭]
我自愿去儿子儿子的中学教一个课后电脑俱乐部。对计算机病毒的兴趣很大。我正在考虑向他们展示如何创建一个简单的批处理文件病毒,该病毒将感染同一目录中的其他批处理文件。还要说明如何创建一个具有相同名称但在路径中更近的批处理文件可以替换另一个程序。 它还可能允许讨论反病毒技术-识别病毒和类似病毒的行为。 我向我的妻子提到了这个主意,她认为这是一个糟糕的主意。与给他们装满武器相比。我不认为它是危险的,因为这种技术不能立即应用于任何现代操作系统上的任何恶作剧。 我是不是太骑兵了?还是她太担心了?这不是解决我这个问题的方法,我只是想征求另一种意见。 更新:我不打算讨论系统(甚至目录)之间的移动或任何恶意行为。唯恐有人认为我透露了任何深奥的秘密,这是我在图书馆发现的1996年出版的一本书,比我打算讲的要详细得多。如果有人出于恶意动机,他们会找到方法。
31 security  ethics 

14
何时面对一个好的项目负责人或老板
我们的项目负责人是一位天才的软件架构师,总体上是一个温柔体贴的人,天生怪胎,声音细腻。但是,有时,我们(我和我的队友)对我们的领导者有不同的看法,尤其是在软件体系结构问题,系统设计问题,UI问题等方面。 我们应何时,如何(如有)表达意见分歧?
31 teamwork 

17
是否有人作为开发人员轮班工作10个小时?[关闭]
我想从每周5天改成4天,但每周工作40小时。 10小时的工作日会影响您的生产力吗?我讨厌我们的公共交通系统,因此,如果我能将交通量减少20%,我会很高兴。 如果其他工作10个小时的开发人员轮班工作很清楚,那么他们的经验将对我有所帮助。 我认为我的老板足够灵活,他会很酷。

7
如何建议使用ORM代替存储过程?
我在一家仅使用存储过程进行所有数据访问的公司工作,这使我们的本地数据库保持同步非常烦人,因为每次提交都必须运行新的proc。过去,我曾经使用过一些基本的ORM,但是我发现使用它的经验要好得多,更干净。我想向开发经理和团队中的其他成员建议我们考虑使用某种ORM进行未来开发(团队中的其他成员仅熟悉存储过程,而从未使用过其他东西)。当前的体系结构是.NET 3.5,类似于.NET 1.1,具有“神类”,它们使用ActiveRecord的奇怪实现并返回在代码隐藏文件中循环的未类型化数据集-这些类的工作方式如下: class Foo { public bool LoadFoo() { bool blnResult = false; if (this.FooID == 0) { throw new Exception("FooID must be set before calling this method."); } DataSet ds = // ... call to Sproc if (ds.Tables[0].Rows.Count > 0) { foo.FooName = ds.Tables[0].Rows[0]["FooName"].ToString(); // other properties set …

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.