软件工程

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



13
您是否在变量名称前加上变量类型的缩写?(匈牙利表示法)
在我目前的工作中,没有编码准则。每个人几乎都按照他想要的方式进行编码。很好,因为公司很小。 但是,最近有一个新手提议始终使用匈牙利表示法。到目前为止,我们中的一些人使用了某种匈牙利符号,而我们中的某些人则没有。您知道,这是一家工程公司,因此只要算法是合理的,编码样式就并不重要。 我个人认为这些小写缩写是多余的。一个经过深思熟虑的名字通常会传达相同的信息。(此外,大多数的我们的代码必须运行一些怪人的DSP,在那里同样的一个概念bool或float不存在反正)。 那么,您如何看待匈牙利符号?你用吗?为什么?

6
使用TDD的复杂代码的好例子[关闭]
在大型,现实生活中,复杂的项目中使用TDD的一个很好的例子是什么?到目前为止,我所看到的所有示例都是出于书籍或纸张目的的玩具项目... 您能命名一个使用TDD的开源项目吗?最好使用C ++,但我可以阅读Java和C#或其他类似语言。
37 java  c#  open-source  c++  tdd 

9
将F#引入大型代码库和工程团队的现实陷阱[关闭]
我是一家软件公司的CTO,该公司拥有大量现有代码库(全部为C#)和相当大的工程团队。我可以看到,使用F#编写代码的某些部分将变得更加容易,从而导致更快的开发时间,更少的错误,更容易的并行实现等,基本上可以为我的团队带来整体生产率的提高。但是,我还可以看到引入F#的一些生产率陷阱,即: 1)每个人都必须学习F#,这并不像从Java转换为C#那样简单。尚未学习F#的团队成员将无法处理代码库的F#部分。 2)截止目前(2010年12月),没有可雇用的F#程序员。在各种软件工程师的简历数据库中搜索“ F#”,少于1%的简历包含关键字。 3)目前(2010年12月)的社区支持较少。您可以在C#中搜索几乎所有问题,并找到已经处理过的人,而F#却不是。第三方工具支持(NUnit,Resharper等)也很粗略。 我意识到这有点Catch-22,也就是说,如果像我这样的人不使用F#,那么社区和工具将永远无法实现,等等。但是,我有一家公司可以经营,但我可以领先但不流血的边缘。 我没有考虑其他陷阱吗?还是有人愿意反驳我提到的陷阱?我认为这是一个重要的讨论,很想在这个公共论坛上听到您的反对意见,这可能对提高行业采用F#起到很大作用。

12
我需要了解被称为程序员的算法和数据结构吗?[关闭]
自从我从事编码工作已经六年了。编码各种东西,例如ActionScript,JavaScript,Java,PHP,Ajax,XML HTML,ASP等。我使用过数组,映射,链接列表,集合等,无论我在哪里工作,都喜欢我。但是每当我接受采访时,人们很可能会问我有关哈希,树,堆栈和队列的问题。一些关于如何处理排序算法的问题。我不知道我是否应该真正认识他们,还是应该停止自称程序员。即使我在问所有这些问题的人选择了我,我的内心也会告诉我,他们永远不会让我做这些事情。我真的需要知道所有这些吗?

11
并发性:如何处理设计和调试实现?
我已经开发并发系统已有好几年了,尽管我缺乏正规的培训(即没有学位),但我对这个主题掌握得很好。最近至少有一些新的语言变得流行起来,这些语言至少是为了简化并发而设计的,例如Erlang和Go。似乎他们的并发方法呼应了我自己的经验,即如何使系统具有可伸缩性并利用多个内核/处理器/机器。 但是,我发现很少有工具可以帮助您可视化您打算做什么,并可以验证您至少与最初的设想接近。使用非专为并发设计的语言(例如C / C ++,C#,Java等),调试并发代码可能是一场噩梦。特别是,几乎不可能在开发环境中的一个系统上重新创建容易发生的条件。 那么,您设计系统来处理并发和并行处理的方法是什么?例子: 您如何确定可以同时进行的和必须进行顺序的? 您如何重现错误条件并查看应用程序执行时发生的情况? 您如何可视化应用程序的不同并发部分之间的交互? 对于这些问题,我有自己的答案,但我还想了解更多。 编辑 到目前为止,我们有很多不错的建议。链接到的许多文章都非常好,我已经阅读了其中的一些文章。 我在并发编程方面的个人经历使我相信与顺序编程相比,您需要不同的思维方式。精神鸿沟可能与面向对象编程和过程编程之间的差异一样大。我希望这组问题更多地集中在系统地解决问题所必需的思维过程(即理论)上。提供更具体的答案时,有助于举例说明-您亲自进行了一些研究。 赏金目标 不要告诉我该怎么办。我已经控制住了。告诉我你做什么。告诉我您如何解决这些问题。

11
为什么没有从一种编程语言到另一种编程语言的自动翻译器?[关闭]
大多数编程语言都是图灵完整的,这意味着可以用一种语言解决的任何任务都可以用另一种语言解决,甚至可以在图灵机上解决。那么为什么没有自动翻译器可以将程序从任何给定语言转换为任何其他语言呢?我已经看到过尝试两种语言的尝试,但是它们始终只能在一种语言的有限子集上工作,并且几乎不能用于转换实际项目。 至少在理论上,是否有可能在所有语言之间编写100%正确的翻译器?实践中有哪些挑战?是否有现有的翻译人员在工作?

7
单元测试新手团队需要进行单元测试
我正在与一个新的团队合作,该团队历来没有进行任何单元测试。我的目标是让团队最终采用TDD(测试驱动开发)作为自然过程。但是由于TDD对于非单元测试团队来说是一种根本性的转变,我想我应该从编码后编写单元测试开始。 有人遇到过类似情况吗?什么是让团队在未进行任何单元测试时对TDD感到满意的有效方法?分两步进行是否有意义?还是我们应该立即潜水并立即面对所有不断增长的痛苦? 编辑 只是为了澄清起见,团队中除我本人之外,没有任何人可以测试暴露/经验的任何单元。我们计划使用Visual Studio中内置的单元测试功能。
37 unit-testing  tdd 

19
10分钟技术面试[关闭]
我必须非常迅速地对数十名应届生进行快速评估。我与他们每个人都有30分钟的会面时间(两三天内)。我想用大部分时间来讨论非技术方面的问题。因此,我计划使用10分钟来解决技术问题。他们所有人都面临同样的问题。 他们都已经被录用了(他们是学生),我需要知道的是准备培训的平均水平。 理想情况下,must be progressive为每个级别设置难度。我将平均,并且我也会对每个问题进行平均。 如果您只有10分钟的时间问10个问题,那么您的前10名是什么?
37 interview 

5
问一个潜在的雇主在乔尔测验中的分数是否不好礼节?[关闭]
开发人员面试与大多数其他地方不同,因为您不仅会担心与您一起工作的人,福利,工作描述等问题,而且在获得工作后还会担心EXTRA。如果您要在嘈杂的环境中使用VS2003 / .NET 2.0与VS210 / .NET 4.0。,而使用SVN与VSS,则要编写具有严格要求的两个应用程序可能会有很大的不同。 可以给潜在的雇主直接进行乔尔测验吗?我尝试问尽可能多的问题来获得我将要工作的环境的类型,这在我看来非常重要,但是最好的方法是切入正题,只问一些棘手的问题(就像他们在求职时问你的那样)。相同的采访)。 注意:“乔尔测试”是指对您来说很重要的特定事项列表(不一定是乔尔),但是您可能没有时间使用传统的随意“对话”方式询问他们,因此您决定通过电子邮件发送电子邮件或安排其他会议,或询问其他人,等等。
37 joel-test 

12
老板要求加班但在雷达下[关闭]
因此,有一天,我的老板(我们叫他Colfax)要求我从事一个项目,但是我不应该与任何人(包括团队中的其他程序员)进行讨论,并且必须在正常工作之外进行小时。作为交换,科尔法克斯为我提供了“书外”假期,相当于在该项目上花费的时间。当我问科尔法克斯时,他的老板(叫他舒勒)是否知道他的报价,科尔法克斯说舒勒不知道,并暗示如果舒勒发现后,他(卡尔法克斯)会遇到麻烦。我的老板还说,如果我坚持下去,我的努力将因“未来考虑”而被铭记。 这项工作是为我们的雇主准备的,因此一切都在不断进行。但是,我对整个事情感到不安。我的一部分希望从事该项目-众所周知-编码和编码很酷且相当简单的东西。另一方面,整个事情似乎很杂乱无章。 我会因为拒绝额外的工作而成为“坏员工”吗?还是我在道义上不做这项工作? 更新 我知道距我发布这个问题已经有一段时间了,但是我认为参加讨论的人们可能有兴趣知道Colfax在这次对话后几个月退出了。因此,如果我一直坚持下去,那可能是徒劳的。无论如何,谢谢大家的评论。



8
在非技术公司担任唯一程序员
我在大约15人的小型营销公司中担任后端开发人员,前端开发人员,系统管理员,技术支持人员和全方位的“知道计算机的人”。 我想知道其他人是否可以在不一定倾向于技术行业的公司分享他们的独行经验。 我最初接受这份工作是为了从前端开发人员/设计人员过渡到全职编码人员。到目前为止,这是一个很好的经验。我绝对可以担任“摇滚明星”程序员的角色-坦率地说,没有人真正了解我的工作。 最近,感觉就像一个非常孤独的位置。我很少能从人们那里反弹想法,每个人都对我看起来像我拥有神奇的力量,这些力量将使所有计算机正常工作并使我们首先进入Google搜索。我还感到与我们想要的内容(具有大型,长达数月的开发计划的项目)与实际要做的事情(一遍又一遍地复制编辑站点)之间存在很大的脱节。 那么,还有谁发现自己是一家认为技术有点神奇的公司中的“技术专家”,您对此有何看法?

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.