软件工程

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


18
为什么冗长对编程语言不利?[关闭]
我看到很多人抱怨编程语言的冗长。我发现,在一定范围内,编程语言越冗长,就会越容易理解。我认为冗长程度也加强API了为该特定语言编写更清晰的。 我能想到的唯一缺点是,它会使您键入更多内容,但是我的意思是,大多数人都使用IDE为您完成所有工作。 那么,冗长的编程语言可能有哪些弊端?

21
新程序员如何打动软件工程师(老板)?[关闭]
我正在做第一份编程工作。我的老板是一位非常聪明的软件工程师,与他相比,我觉得我提供的东西很少。问题是,他总是很忙,需要有人帮助他。我觉得自己不够出色,但我仍然想成功。我想成为一名优秀的程序员。 我该怎么做才能打动他? 谢谢。

18
单元测试真的有用吗?[关闭]
我刚刚获得CS学位,并且目前有初级.NET开发人员(C#,ASP.NET和Web表单)的工作。回到我上大学时,单元测试的主题确实涵盖了,但是我从来没有真正看到它的好处。我了解应该执行的操作,即确定代码块是否适合使用。但是,我之前从未真正编写过单元测试,也从未感到有必要这样做。 正如我已经提到的,我通常使用ASP.NET Web表单进行开发,最近我一直在考虑编写一些单元测试。但是我对此有一些疑问。 我读过单元测试通常是通过写“模拟”来进行的。虽然我理解了这个概念,但似乎无法弄清楚如何为完全动态的网站编写模拟文件,并且几乎所有内容都依赖于来自数据库的数据。例如:我使用很多具有ItemDataBound事件等的转发器(同样取决于“未知”数据)。 因此,问题1:是否经常为ASP.NET Web编写单元测试表单?如果是,那么:如何解决“动态环境”问题? 在开发时,我会经历很多反复的尝试。这并不意味着我不知道自己在做什么,而是我通常会写一些代码,点击Ctrl F5查看会发生什么。尽管这种方法在大多数情况下都能奏效,但有时我会觉得自己有些笨拙(由于我的经验不足)。有时我也会像这样浪费很多时间。 因此,问题2:你们会建议我开始编写单元测试吗?我认为这可能对我的实际实施有所帮助,但是我再次觉得这可能会使我慢下来。

30
查看代码时,哪些事情会立即敲响警钟?[关闭]
几周前,我参加了一次软件工艺活动,当时发表的评论之一是“我相信我们在看到错误代码后都会认出错误代码”,每个人都明智地点头,无需进一步讨论。 这种事情总是让我感到担忧,因为有人认为每个人都认为自己是高于平均水平的司机。尽管我认为我可以识别错误的代码,但我还是想了解更多有关其他人认为代码气味的信息,因为很少有人在博客上或仅在少数书籍中对此进行详细讨论。尤其是,我想听到一种语言而不是另一种语言中的代码味道会很有趣。 我将从一个简单的开始: 源代码管理中注释掉代码比例很高的代码 -为什么在其中?是要删除吗?是半成品吗?也许不应该将其注释掉,而只有在有人测试某些东西时才进行注释?就个人而言,我发现这种事情确实很烦人,即使只是到处都是奇数行,但是当您看到大块的代码散布在其余的代码中时,那是完全不可接受的。通常,这也表明该代码的其余部分也可能具有可疑的质量。

4
为什么NoSQL数据库比SQL更可伸缩?
最近,我读了很多有关noSQL DBMS的文章。我了解CAP定理,ACID规则,BASE规则和基本理论。但是没有找到关于为什么NoSQL比RDBMS更容易扩展的资源(例如,在需要大量数据库服务器的系统中)吗? 我猜想,保留约束和外键会浪费资源,而在分发DBMS时,它要复杂得多。但是我希望还有更多。 有人可以解释一下noSQL / SQL如何影响可伸缩性吗?
98 sql  nosql  scalability 

4
Java引用与C指针有何不同?
C有指针,Java有所谓的引用。从某种意义上说,它们有共同点,即它们都指向某个事物。我知道C中的指针存储它们指向的地址。参考也存储地址吗?除了指针更灵活,更容易出错之外,它们又有何不同?
97 java  c  pointers  reference 

9
构建脚本的优点是什么?
在我的大部分编程生涯中,我都在与我一起使用的IDE中使用“ build / compile / run”命令来生成可运行的程序。这是一个按钮,非常简单。但是,随着我对不同语言和框架的更多了解,我越来越多地谈论“构建脚本”(ANT,Maven,Gradle等)来运行项目。我对这些的理解是,它们是给编译器/链接器/ magical-program-maker的指令,用于指定配置详细信息-细节。 我记得在学校时曾写过makefile,但是那时我并没有看到任何特殊的优势(我们只在Unix终端中使用它们,因为在该终端中没有带有“构建”按钮的IDE)。除此之外,我在这里还看到了其他问题,这些问题讨论了构建脚本不仅可以创建程序,还可以做更多的事情- 它们可以运行单元测试以及安全的资源,而与主机无关。 我不能忘记构建脚本对于作为开发人员来说很重要的感觉,但是我想要一个有意义的解释。为什么要使用/编写构建脚本? Build Script和Build Server的职责讨论了它在更大范围内的作用。我正在寻找构建脚本相对于IDE的“构建/运行”命令或类似的简单方法所提供的特定优势。


17
封装仍然是OOP坚持的大象之一吗?
封装告诉我将所有或几乎所有字段都设为私有,并通过getter / setter公开这些字段。但是现在出现了Lombok之类的库,这些库使我们可以用一个简短的注解公开所有私有字段@Data。它将为所有私有字段创建getter,setter和set构造函数。 有人可以向我解释将所有字段隐藏为私有,然后再通过一些额外的技术将所有字段公开的感觉是什么?为什么我们不仅仅使用公共字段呢?我觉得我们走了漫长而艰难的路,才回到起点。 是的,还有其他一些可以通过getter和setter方法工作的技术。我们不能通过简单的公共领域使用它们。但是出现这些技术仅仅是因为我们拥有众多特性-公共获取者/设置者背后的私有领域。如果我们没有这些财产,这些技术将另辟way径,并为公共领域提供支持。一切都将变得简单,我们现在不需要龙目岛了。 整个周期的整体意义是什么?在现实生活的编程中,封装真的有意义吗?

17
(为什么)我应该学习一种新的编程语言吗?[关闭]
我对Java,C / C ++,JavaScript / jQuery相当精通,并且对Objective-C也很熟练。我对这些语言及其相应的框架也相当有生产力,并且在保持代码“干净”和可维护的同时,确实很轻松地生产了企业级系统(以及小规模的系统)(是的,我可以在六点后阅读我自己的代码个月:) 除非平台(iPhone,iPad等)或客户/实施组织要求,否则“为什么”我应该学习一种新的编程语言?纯娱乐”?如果我不想为此做任何有价值的事情,那会带来什么乐趣呢? 我的很多同仁都准备学习“下一个新事物/语言”,通常是Python,Ruby或PHP(仅列举一些流行的语言)。现在,仅了解语言本身就是徒劳的恕我直言。您还需要了解框架,了解它们的用法/ API以及“良好的实施规范”等。 因此,从“经济”的角度来看,学习一种新的编程语言是否有任何好处?如果以一种快速而肮脏的方式学习该语言,那么它也可能会被用于快速而肮脏的原型设计/实现-但我认为这不是对时间/精力的合理投资。 因此,为什么我(或任何与此有关的人)应该学习一种新的编程语言,而不是“很有趣,所以让我们尝试一下”-如果从长远来看,时间的投入可能不值得?

30
编程中的有害诱惑
很好奇,编程中的哪种诱惑对您的项目真的有害吗? 就像当您真的有想做某事的冲动,并且相信它将使项目受益时,或者只是骗自己相信它确实如此,而一周之后,您意识到您并没有解决任何实际问题,而是创建了新问题或,最好的情况是,您的内在野兽不会受到明显影响。 就个人而言,我很难不重构不良代码。我处理了很多不良的旧代码,并且当我没有测试证明重构不会破坏任何东西时,需要花一口气才能不碰它。 在用户界面上对我来说是另一个恶魔,我可以花几个小时更改UI布局,只是因为我喜欢这样做。有时我告诉自己我正在研究可用性,但事实是我喜欢移动按钮。 您的编程恶魔是什么,如何避免它们?

8
如何使应用程序保持无状态
这可能是一个令人费解的问题,但是我试图更好地理解无状态。 根据我的阅读,Web应用程序应该是无状态的,这意味着每个请求都被视为独立的事务。因此,应避免使用Session和Cookies(因为它们都是有状态的)。更好的方法是使用令牌,令牌是无状态的,因为服务器上没有存储任何内容。 因此,我试图理解,当会话中保留有数据(例如购物车中的物品)时,Web应用程序如何变得无状态?这些实际上存储在某个地方的数据库中,然后定期清除吗?当您使用令牌而不是cookie时,这如何工作? 然后作为一个相关问题,主要网站(亚马逊,谷歌,Facebook,Twitter等)是否实际上是无状态的?他们使用令牌还是cookie(或两者都使用)?

6
一个函数的术语是什么,当它被反复调用时,具有与一次调用相同的作用?
(假设是单线程环境) 满足此条件的功能是: bool MyClass::is_initialized = false; void MyClass::lazy_initialize() { if (!is_initialized) { initialize(); //Should not be called multiple times is_initialized = true; } } 本质上,我可以多次调用此函数,而不必担心MyClass多次初始化 不满足此条件的功能可能是: Foo* MyClass::ptr = NULL; void initialize() { ptr = new Foo(); } initialize()多次调用将导致内存泄漏 动机 最好有一个简洁的词来描述此行为,以便可以适当地注释预期符合此条件的功能(在描述预期被覆盖的接口功能时特别有用)
96 naming  functions 

12
我的客户希望在我当前的项目中获得25%的评论,如何做出反应?[关闭]
初级开发人员在这里。 我目前正在为我公司的大客户开发Web应用程序。我上个月开始的。客户希望在其每个软件项目中至少获得25%的评论。 我检查了以前的应用程序的代码,这是我的观察结果: 每个文件都以注释块开头(程序包,最后更新日期,我的公司名称和版权) 所有变量均以其名称注释 // nameOfCustomer public String nameOfCustomer 所有的getter和setter方法都被评论了 很少有用的评论 似乎开发人员只是提出了尽可能多的评论,以达到25%的门槛,无论质量和实用性如何。我的公司告诉我,“我们按照客户的要求去做”。 我没有直接与客户谈论此事。到目前为止,这是我的论点: 没用的线来读书和写字(浪费时间) 注释有时未更新(造成混淆的原因) 开发人员不太可能使用或信任真正有用的评论 您对这个问题有何建议?我应该如何处理这种情况?

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.