软件工程

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

12
何时在C ++上使用C,以及在C上使用C ++?
我被介绍给计算机科学已经一年多了,从我的经验看来,C和C ++都被认为是“超快速”语言,而其他人(例如Python)和此类脚本语言通常被认为较慢。 但是我也看到过很多情况,一个软件项目甚至一个很小的项目都会交织文件,其中一定数量的文件用C编写,而一定数量的文件用C ++编写。 (我还注意到,C ++文件几乎总是具有相应的头,而C文件则没有那么多)。但是我的主要研究目的是对何时在C ++上使用C合适,以及何时在C上使用C ++更好的情况有一个一般的直觉。除了(1)C ++是面向对象的,而C ++是面向对象的, C不是,并且(2)语法非常相似,并且C ++是故意创建的,在许多方面都类似于C,但我不确定它们之间的区别是什么。在我看来,它们在许多领域(几乎)是可以互换的。 因此,如果有人可以解决这种情况,我们将不胜感激!谢谢
164 c++  c 

6
如何将一个编程项目分解为其他开发人员的任务?[关闭]
我最近加入了一个开发项目,突然被任命为首席开发人员。我的主要职责是将项目的编程部分分解为任务,将这些任务交给其他开发人员,然后确保各个部分协同工作。 但是问题是我不知道如何执行此操作。我花了一个周末用铅笔和纸试图弄清楚这个问题,但我不断提出要按顺序而不是并行进行的任务清单。我曾经考虑过将其拆分为功能,但是最终您需要执行需要编辑相同文件的任务,由于我们开发的早期时间,可能需要完全重写整个任务。我可以让一些开发人员等到程序更完整,更轻松地为其创建任务时,然后让人们坐下来,他们知道多少周。 我和老板就我的资格进行了交谈,但我没有选择的余地。我不知道自己在做什么,因此朝正确方向的任何提示和微调将不胜感激。

17
为什么兼职编程异常?[关闭]
我最近辞掉了在mega-corp的全职开发工作,因此我决定找一份兼职工作。从那以后,我与六位潜在的雇主进行了交谈,当我说“兼职”这两个神奇的词时,他们每个人都有相同的反应-他们全都闭上嘴,变得可疑。现在,我知道这可能只是我自己,所以当我控制时,我问每个人如果我愿意全职工作会怎样,他们都说我可能会拿到一份薪水。 我的问题有两个: 为什么作为雇主,只因为他想每周工作3天而不是5天,就放弃一个有能力的,甚至很棒的开发人员? 我如何更好地销售兼职故事?我通常只列出自己的原因,这些原因是我更喜欢目前的生活平衡,并且想从事自己的项目,但这使他们更加可疑-我是否要自己开始做某件事然后退出?我只是懒惰吗?
164 organization 

19
是否有任何理由使用C ++代替C,Perl,Python等?[关闭]
作为Linux(服务器端)开发人员,我不知道在哪里以及为什么应该使用C ++。 当我追求性能时,第一个和最后一个选择是C。 当“性能”不是主要问题时,Perl和Python等编程语言将是不错的选择。 我在这方面了解的几乎所有开源应用程序都是用C,Perl,Python,Bash脚本,AWK甚至PHP编写的,但是没有人使用C ++。 我不是在讨论GUI或Web应用程序之类的其他领域,而是在谈论Linux,CLI和守护程序。 使用C ++是否有令人满意的理由?

3
为什么HTTP没有POST重定向?
HTTP重定向是通过HTTP代码301和302(也可能是其他代码)以及带有新位置的地址的称为“位置”的标头字段完成的。但是,浏览器始终向该URL发送“ GET”请求。 但是,很多时候您需要通过POST(例如银行付款)将用户重定向到另一个域。这是一个常见的场景,并且确实是一个要求。有人知道为什么HTTP规范中忽略了这样的通用要求吗?解决方法是将表单(带有隐藏字段中的参数)的操作发送到目标位置(Location标头字段的值),然后setTimeout将表单提交到目标位置。

9
为什么要使用工厂类而不是直接对象构造?
我已经在GitHub和CodePlex上看到了几个С#和Java类库项目的历史,并且看到了切换到工厂类而不是直接对象实例化的趋势。 为什么要广泛使用工厂类?我有一个很好的库,通过老式的方式创建对象-通过调用类的公共构造函数。在最后的提交中,作者迅速将所有数千个类的公共构造函数更改为内部构造,并且还创建了一个具有数千个CreateXXX静态方法的巨大工厂类,这些静态方法通过调用类的内部构造函数来返回新对象。外部项目API损坏了,做得很好。 为什么这样的更改有用?用这种方式重构的目的是什么?用静态工厂方法调用替换对公共类构造函数的调用有什么好处? 什么时候应该使用公共构造函数,什么时候应该使用工厂?

26
不断寻找代码示例是否表明开发人员不好?[关闭]
我是CS的学生,在C和C ++方面拥有多年的经验,在过去的几年中,我一直在与Java / Objective C一起进行应用程序开发,现在我转向了Web开发,主要关注于ruby Rails和我意识到(与应用程序开发一样,)我过多地引用了其他代码。我一直在为许多事情提供Google功能,我想我应该可以从头开始做,这确实使我的信心有些破裂。 基本的基础知识不是问题,我不愿意以此为例,但是我可以在sprint中同时在java / python中运行javabat-显然不是一项成就,但是我的意思是说,我有一个扎实的基础知识我认为? 我知道我通常需要使用什么,但是经常引用语法。很乐意为此提供一些建议和意见,因为即使我正在完成学位,这也一直使我在寻找该领域的工作方面受到很大的阻碍。我提出这个问题的主要原因并不是关于就业的问题,而是我不想成为唯一一个不参加黑客马拉松的人,他不会敲开马不停蹄的代码并坐在那里打开20个Google / github标签,而且我不参加任何活动由于稍微缺乏信心... 通过不断地为中等到复杂的任务编写代码示例,一个人是否会成为一个糟糕的开发人员?

22
空引用真的是一件坏事吗?
我听说它说在编程语言中包含空引用是“十亿美元的错误”。但为什么?当然,它们会导致NullReferenceExceptions,但是那又如何呢?如果使用不当,该语言的任何元素都可能成为错误的来源。 还有什么选择?我想不是这样说: Customer c = Customer.GetByLastName("Goodman"); // returns null if not found if (c != null) { Console.WriteLine(c.FirstName + " " + c.LastName + " is awesome!"); } else { Console.WriteLine("There was no customer named Goodman. How lame!"); } 您可以这样说: if (Customer.ExistsWithLastName("Goodman")) { Customer c = Customer.GetByLastName("Goodman") // throws error …

24
处理if(if else)else的优雅方法
这是个小问题,但是每次我必须编写类似这样的代码时,重复都会困扰我,但是我不确定任何解决方案都不会更糟。 if(FileExists(file)) { contents = OpenFile(file); // <-- prevents inclusion in if if(SomeTest(contents)) { DoSomething(contents); } else { DefaultAction(); } } else { DefaultAction(); } 这种逻辑有名称吗? 我也有点强迫症吗? 如果出于好奇,我愿意接受邪恶的代码建议...

8
开发使用寿命长(超过20年)的Web应用程序
我目前正在开发用于政府土地规划的Web应用程序。该应用程序主要在浏览器中运行,使用ajax加载和保存数据。 我将进行初始开发,然后毕业(这是学生的工作)。此后,其余团队将根据需要添加偶尔的功能。他们知道如何编码,但他们大多是土地规划专家。 考虑到Javascript技术的变化步伐,我如何编写从现在起20年后仍然可以使用的代码?具体来说,我应该使用(或避免使用)哪些库,技术和设计思想来对我的代码进行过时的验证?

14
循环引用有什么问题?
我今天参加了一次编程讨论,在那儿我做了一些声明,这些声明基本上是不合逻辑地假定循环引用(在模块,类之间,无论如何)通常是不好的。一经讲完,我的同事就会问:“循环引用有什么问题?” 我对此有很强烈的感觉,但我很难简洁而具体地表达自己的观点。我可能提出的任何解释都倾向于依赖于我也考虑过公理的其他项目(“不能孤立使用,因此无法测试”,“参与对象中状态发生变化时的未知/不确定行为”,等等。 。),但是我很想听听一个简洁的原因,为什么循环引用很糟糕,却没有我自己的大脑所经历的那种信念飞跃,多年来花了很多时间来弄清它们的理解,修正,并扩展各种代码。 编辑:我不是在问同质的循环引用,就像那些在双链表或指向父母的指针。这个问题的确是在询问“更大范围”的循环引用,例如libA调用libB,后者又回调libA。如果愿意,可将“模块”替换为“库”。到目前为止,感谢您提供所有答案!

10
正则表达式语法设计的可读性差是否有特定原因?
程序员似乎都同意,代码的可读性比起短语法的单行代码要重要得多,但是单行代码可以工作,但是需要高级开发人员以任何程度的精度进行解释-但这似乎正是正则表达式设计的方式。有这个原因吗? 大家都同意,那selfDocumentingMethodName()比更好e()。为什么这也不适用于正则表达式? 在我看来,与其设计没有结构组织的单行逻辑语法,不如: var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})(0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; 而且这甚至不是URL的严格解析! 取而代之的是,我们可以使一些流水线结构井井有条,可读性强,这是一个基本示例: string.regex .isRange('A-Z' || 'a-z') .followedBy('/r'); 除了最短的运算和逻辑语法外,正则表达式的极为简洁的语法还有什么优势?归根结底,正则表达式语法设计的可读性差是否有特定的技术原因?


19
为什么界面有用?
我已经在C#中学习和编码了一段时间了。但是,我仍然不知道接口的用处。他们带来的东西太少了。除了提供功能签名外,它们什么也不做。如果我能记住需要实现的功能的名称和签名,则不需要它们。它们只是为了确保在继承类中实现了所述功能(在接口中)。 C#是一种很棒的语言,但是有时它给您的感觉是,Microsoft首先提出了问题(不允许多重继承),然后提供了解决方案,这是一个乏味的工作。 我的理解是基于有限的编码经验。您对接口有什么看法?您多久使用一次,是什么使您这样做?
158 interfaces 

17
我如何说服管理层处理技术债务?
与开发人员一起工作时,我经常会问自己一个问题。到目前为止,我已经在四家公司工作,并且我意识到缺乏对保持代码干净和处理技术债务的关注,这些债务阻碍了软件应用程序的未来发展。例如,我工作的第一家公司是从头开始编写数据库,而不是使用MySQL之类的东西,并且在重构或扩展应用程序时给团队造成了麻烦。当经理讨论预测时,我一直试图与我的经理保持诚实和坦率,但是管理层似乎对修复已经存在的问题不感兴趣,并且看到它对团队士气的影响令人震惊。 您对解决此问题的最佳方法有何看法?我所看到的是人们收拾行装离开。然后,公司成为旋转门,开发人员进出,使代码变得更糟。您如何与管理层沟通,以使他们有兴趣解决技术债务?

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.