软件工程

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


16
新手应该使用IDE自动完成功能(Intellisense)吗?[关闭]
当我第一次帮助编程新手并学习它时,经常会遇到这种情况。我说的是真正的新手,仍然在学习OOness,构造对象,方法调用以及类似的东西。通常,他们有键盘,我只是提供指导。 一方面,IDE的自动完成功能有助于向他们提供反馈,表明他们做得正确,他们很快就会喜欢并依赖它。 另一方面,我担心过早依赖IDE自动完成功能会使他们无法真正理解这些概念,或者如果有一天他们仅通过简单的编辑器就能找到自己的能力,它们将无法运行。 在这方面有更多经验的人可以分享他们的意见吗?对于新手,自动完成或手动输入哪个更好? 更新资料 感谢大家的意见和建议! 许多答案似乎都集中在自动完成的主要用途上,例如完成方法,提供方法查找和文档编制等。但是如今的IDE却更像是。 创建列表类型的对象时,IDE会自动完成到右侧的新ArrayList。对于新手来说,可能还不是很清楚为什么它不能成为新列表,但是嘿,它行得通,所以他们继续前进。 根据上下文中的局部变量填充方法参数。 执行对象转换 自动添加“导入”或“使用”语句 以及更多。这些就是我的意思。记住,我所说的是正在开始编程101的人,实际上只是在开始。我已经看到IDE可以完成他们不知道的这些事情,但是它们只是继续进行。 有人可能会说这有助于他们在深入了解语言的细微差别之前先将精力集中在程序流程上,并先了解其本质,但是我不确定。
35 ide  intellisense 

3
生成许可证密钥的最佳机制
人们会建议使用哪些方法/库/工具来生成许可证密钥(注册软件时放入的那些可爱的AAAAA-AAAAA-AAAAA-AAAAA-AAAAA东西)? 在实施它们时需要注意什么? (目前,我对此有兴趣,而不是特定于语言,因此,如果解决方案是特定于语言的,请说明您使用的是哪种语言)。
35 licensing 

8
应该将调试代码保留在原处,始终保留还是仅在调试时才添加,而在发现错误后才删除?
首先,我只在尝试查找错误时才添加调试代码(例如print语句)。找到后,我将删除调试代码(并添加一个专门测试该错误的测试用例)。我觉得它使真实的代码混乱不堪,因此除非进行调试,否则就没有地方了。 你怎么做呢?您是否将调试代码保留在适当的位置,或者在过时删除调试代码(可能难以确定调试代码的时间)?
35 debugging 



14
您应该对Web应用程序进行版本控制吗?
我最近与一位同事讨论了有关Web应用程序版本控制的问题。 我认为您根本不需要它,并且,如果您只想进行健全性检查以确认您的最新版本已经发布,我认为日期(YYMMDD)可能就足够了。 我在基地外吗?我错过了重点吗?我应该使用Web应用程序版本号吗


6
阅读困难的编程
我有严重的阅读障碍以及诵读困难和诵读困难。我从小就知道这一点。我的阅读和写作能力非常低落,但是我已经学会了应对之道。 但是,使用当今的IDE,我发现在编写代码时很容易集中精力并集中在区域中。但是当我写文字时(像这篇文章一样),我发现很难集中精力。 总的来说,阅读障碍者比普通的阅读者更容易读写代码吗?与正常的阅读和写作相比,阅读障碍法使用哪些类型的技巧和工具来帮助他们更好地掌握编程?

2
开发人员为什么要有私人办公室?
所以我知道这里的每个人都与私人办公室有关,实际上有多少开发商。我有点半信半疑。我可以相信,主要开发人员都有他们,但是通常这只是您普通办公室中的一个人。 这让我想知道,有多少开发人员拥有私人办公室。这就引出了一个实际的问题:他们为什么要拥有它们?

14
修复错误,还是等待客户找到它们?
其他人看到错误时会修复错误,还是等到崩溃/数据丢失/人死后才修复错误? 例子1 Customer customer = null; ... customer.Save(); 该代码显然是错误的,而且无法解决-在空引用上调用方法。它碰巧不会崩溃,因为Save碰巧不访问任何实例数据;因此就像调用静态函数一样。但是任何地方的任何微小更改都可能突然导致不会崩溃的代码损坏:开始崩溃。 但是,更正代码也是不可想象的: Customer customer = null; ... customer = new Customer(); try ... customer.Save(); ... finally customer.Free(); end; 可能会导致崩溃;一个没有通过全面测试的单元测试和手动用户测试发现的。 例子2 float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2); 认识物理学的人会认识到分母应该是R 2。 代码是错误的,这是绝对错误的。高估速度会导致反火箭发射得太早,杀死所有飞船上的人。 但是也有可能过高估计速度掩盖了另一个问题:在航天飞机移动得太快时,安全气囊无法展开。如果我们突然修改了代码: float speed = …
35 code-quality  bug 

9
动态类型语言是否值得所有批评?[关闭]
我已经在Internet上阅读了几篇有关企业中编程语言选择的文章。最近,许多动态类型的语言已经流行,例如Ruby,Python,PHP和Erlang。但是许多企业仍然使用静态类型的语言,例如C,C ++,C#和Java。 是的,静态类型语言的好处之一是可以在编译时而不是运行时更早地发现编程错误。但是动态类型语言也有优势。(更多关于维基百科) 企业之所以开始不使用Erlang,Ruby和Python之类的语言的主要原因,似乎是因为它们是动态类型的。这似乎也是StackOverflow上的人决定反对Erlang的主要原因。请参阅您为什么决定“反对” Erlang。 但是,对于企业中的动态类型,似乎存在强烈的批评,但是我真的不明白为什么它如此强大。 真的,为什么在企业中对动态类型的批评如此之多?它对项目成本的影响真的很大吗?但是也许我错了。

11
面向对象编程的优点
注意:这个问题是我几个月前写的博客文章的摘录。在对Programmers.SE 的评论中放置了指向博客的链接后,有人要求我在此处发布问题,以便他们回答。此公告是我最流行,因为人们似乎键入“我不明白面向对象编程”到谷歌很多。请随时在此处回答,或在Wordpress上发表评论。 什么是面向对象的编程?没有人给我满意的答案。我觉得您不会从一个鼻子朝天说“对象”和“面向对象”的人那里得到一个很好的定义。从一个只做面向对象编程的人那里也不会得到一个好的定义。没有人同时了解过程式程序设计和面向对象程序设计,我从未对一种面向对象程序的实际作用有一致的认识。 有人可以给我他们关于面向对象编程优势的想法吗?

2
“不组成”是什么意思?
我看到很多文本,特别是函数式编程文本,声称某些CS概念“不构成”。例如:锁不组成,单子不组成。 我一直很难找到这句话的确切含义。当我想到组合时,我想到的是函数组合或对象聚合(如“在继承中偏爱组合”),但这似乎并不是人们在这里使用它的意义。 有人可以解释在上述两个示例(即锁和单子)这样的表达式中使用该短语时的含义吗?

10
难道“总是初始化变量”会导致重要的错误被隐藏吗?
C ++核心准则具有ES.20规则:始终初始化一个object。 避免使用预先设置的错误及其相关的未定义行为。避免理解复杂的初始化问题。简化重构。 但是,此规则无助于发现错误,只会将它们隐藏起来。 假设程序具有执行路径,在该路径中使用未初始化的变量。这是一个错误。除了不确定的行为外,这还意味着出现了问题,程序可能无法满足其产品要求。当将其部署到生产中时,可能会造成金钱损失,甚至更糟。 我们如何筛选错误?我们编写测试。但是测试不能覆盖100%的执行路径,测试也不能覆盖100%的程序输入。不仅如此,即使测试覆盖了错误的执行路径-它仍然可以通过。毕竟,这是未定义的行为,一个未初始化的变量可以具有一个有效值。 但是除了测试外,我们还有一些编译器,它们可以将0xCDCDCDCD写入未初始化的变量。这会稍微提高测试的检测率。 更好的是-有诸如Address Sanitizer之类的工具,它将捕获所有未初始化内存字节的读取。 最后是静态分析器,它可以查看程序并告诉您该执行路径上有一个先读后设置的内容。 因此,我们有许多功能强大的工具,但是如果我们初始化变量清理器,将一无所获。 int bytes_read = 0; my_read(buffer, &bytes_read); // err_t my_read(buffer_t, int*); // bytes_read is not changed on read error. // It's a bug of "my_read", but detection is suppressed by initialization. buffer.shrink(bytes_read); // Uninitialized bytes_read could be detected here. // …
35 c++  c 

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.