软件工程

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

6
是什么使Haskell类型系统如此受人尊敬(相对于Java)?
我开始学习Haskell。我对此很陌生,我只是在阅读一些在线书籍,以了解其基本结构。 熟悉它的人经常谈论的“模因”之一就是整个“如果它可以编译,它将可以工作*”的东西-我认为这与类型系统的强度有关。 我试图理解为什么Haskell在这方面到底比其他静态类型的语言要好。 换句话说,我假设在Java中,您可以做一些令人讨厌的ArrayList<String>()事情,例如埋葬, 以包含确实应该包含的内容ArrayList<Animal>()。这里令人讨厌的事情是您的stringcontains elephant, giraffe等,如果有人放进去,Mercedes您的编译器将无法为您提供帮助。 如果这样做了,ArrayList<Animal>()那么在以后的某个时间点,如果我确定我的程序不是真正的关于动物的,而是关于车辆的,那么我可以更改,例如产生ArrayList<Animal>生产的功能,ArrayList<Vehicle>而我的IDE应该告诉我那里的所有地方是一个编译中断。 我的假设是,这就是人们所说的强类型系统的含义,但是对我而言,为什么Haskell的更好才是显而易见的。换句话说,您可以编写好的Java或坏的Java,我假设您可以在Haskell中执行相同的操作(即,将东西填入字符串/整数中,它们实际上应该是一流的数据类型)。 我怀疑我缺少重要/基本的东西。 我很高兴能向我展示我的方式的错误!

14
“从没有做过代码就无法使SQL Server为您做的更好”-这是设计不良的秘诀吗?
我在很多地方都听到过这个想法。或多或少地认识到,一旦尝试仅使用SQL解决问题就超过了一定程度的复杂性,那么您确实应该在代码中进行处理。 这个想法背后的逻辑是,在大多数情况下,数据库引擎在寻找完成任务的最有效方式方面将比在代码中做得更好。尤其是涉及将结果取决于对数据执行的操作之类的事情时。可以说,对于现代引擎而言,有效地JIT'ing +缓存查询的编译版本在表面上是有意义的。 问题是,以这种方式利用数据库引擎是否本质上是不良的设计实践(以及为什么)。当所有逻辑都存在于数据库中并且您只是通过ORM命中它时,这些界限会进一步模糊。

4
我可以在商业应用程序中使用GPL软件吗
我对GPL有3个问题: 如果我在应用程序中使用GPL软件,但不修改或分发该软件,是否必须在GPL下发布我的应用程序? 如果我修改了应用程序使用的某些软件该怎么办。然后,我是否必须根据GPL发布我的应用程序,还是可以仅根据GPL条款提供经过修改的软件。 如果我使用GPL软件但不修改它,该如何在我的应用程序中分发呢? 我的例子是,我有一个PHP框架,使用GeSHi库突出显示了一些输出。 因为GeSHi是GPL,我的框架是否必须是GPL? 如果我将修改返回给GeSHi维护者,是否可以针对应用的特定用例修改GeSHi? 我可以使用GeSHi重新分发我的框架吗?


14
为什么不使用Qt编写更多的桌面应用程序?[关闭]
据我对Qt的了解和了解,它是一个非常好易学习的库。它具有设计良好的API,并且是跨平台的,而这些只是使其具有吸引力的众多功能中的两个。我想知道为什么更多的程序员不使用Qt。是否有不足之处与之相反?哪些功能使其他库比Qt更好?问题与许可有关吗?
202 api  libraries  qt 

10
真正的MVC是什么?
作为一名认真的程序员,您如何回答MVC是什么? 在我看来,MVC是一个模糊的主题,因此,如果您的受众是学习者,那么您可以自由地以不太可能引起争议的通用术语来描述它。 但是,如果您是在与知识渊博的听众(尤其是采访员)交谈时,我很难考虑采取这样的方向,而不会冒“不正确!!”的反应。我们都有不同的实际经验,而且我还没有真正两次遇到相同的MVC实现模式。 具体来说,似乎在严格性,组件定义,零件分离(适合什么地方)等方面存在分歧。 因此,我该如何以正确,简洁和无争议的方式解释MVC?


10
图像应该存储在git存储库中吗?
对于使用Git和Github作为版本控制的分布式团队,图像也应该存储在git存储库中吗? 在大多数情况下,图像不会改变。包含它们的文件夹只会随着添加图像的大小而增加。令人担忧的是,随着时间的推移,图像文件夹可能会通过合并大图像或仅合并其中的许多图像而变得很大。 这是最佳做法吗?还有什么其他方法可以共享分布式团队可以轻松访问的项目中所需的二进制文件?

30
爸爸对我学习程序的步伐不耐烦。我该怎么办?[关闭]
因此,大约一个月前,我父亲给我买了5本关于编程的书(C ++,Java,PHP,Javascript,Android)。他是一名架构师,对编程一无所知。他买了我,因为我告诉他编程很有趣,我想学习。 您可能知道,小时候(我14岁)并被要求从枯燥的书籍中学习编程并不是最简单的事情。我总是分心。.我之前告诉过他,我不需要买书,我可以看在线教程..但是,他太老套了。他只是让我使用这些书。 最近,他开始问我如何处理它,我向他展示了我制作的C ++程序,该程序将接受您键入的内容,然后为每个字母分配值(A是字母中的第一个字母,因此它获取值之1)..依此类推。然后,它将所有值相加并告诉您。因此,“ add”一词的值为9。 ^^对他来说不是很令人印象深刻。他对我大吼,并告诉我我一直在做的事。这不是真的。他非常传统,固执,不听我说的话。我应该告诉他什么? PS:如果您有关于分区书籍的任何技巧,请告诉我 编辑:非常感谢大家,您不知道知道有些人了解我的情况对您有多重要。我读了每个人,我会考虑每个人的意见。格拉西亚斯!
200 java  learning  c++ 

6
为什么壁挂git提交拉取请求?
为什么我执行的每个严肃的Github回购请求都要求我将提交压缩为单个提交? 我以为git日志在那里,所以您可以检查所有历史记录,并确切查看发生了什么更改,但是挤压它会将其从历史记录中拉出来,然后将其全部合并为一个提交。有什么意义? 这似乎也违反了“尽早提交并经常提交”的口头禅。

30
程序员为什么要编写封闭源代码的应用程序然后将其释放?[关闭]
作为一个企业家/程序员,他靠编写和销售软件来过上幸福的生活,我对为什么开发人员编写应用程序然后免费将其发布到Internet上感到du目结舌。您已经发现自己处于世界上最赚钱的领域之一。利润率为99%的企业,您没有实物产品,但可以说出价格;您可以运送有问题的产品的商家,客户仍然会购买。 有时候我们的某些软件会获得免费的竞争对手,我认为这个家伙很疯狂。他可能以此为生,但选择了免费生活。 你不喜欢大笔的钱吗? 您不确定人们会为此付费吗? 您担心必须支持吗? 这对编程业务不利,因为现在客户希望能够为每个问题找到免费的解决方案。(我看到诸如“是否有适用于XYZ的免费软件好吗?还是我需要为此支付20美元”之类的推文?)这对客户也很不利,因为免费解决方案最终会失效(由于新的操作系统或您拥有什么),并且由于它是免费的,因此开发人员没有理由对其进行修复。客户最终将获得免费但过时的软件,该软件将不再起作用且永远不会更新。客户哭了。仍在工作的开发人员在他们的隔间里哭了。是什么赋予了? PS:我不打算开始开放源代码/软件应该是自由的辩论。我说的是开发人员何时制作封闭源应用程序并使之免费。
199 pricing  freeware 


16
使用单一责任原则时,什么构成“责任”?
显然,“单一责任原则”并不意味着“只做一件事情”。那就是方法的目的。 public Interface CustomerCRUD { public void Create(Customer customer); public Customer Read(int CustomerID); public void Update(Customer customer); public void Delete(int CustomerID); } 鲍勃·马丁说:“班级应该只有一个改变的理由。” 但是,如果您是SOLID的新手,那么很难下定决心。 我写了另一个问题的答案,在那儿我建议责任就像职位,然后用饭店的比喻来阐明我的观点。但这仍未阐明某人可以用来定义其班级职责的一组原则。 你是怎么做到的?您如何确定每个班级应承担的责任,以及如何在SRP中定义责任?

20
您是否应该保留所有编写代码的副本?[关闭]
我知道您所服务的公司拥有该代码,并且如果您出售该代码,显然您将被逮捕。但是,对于开发人员而言,保留他们编写的代码的个人副本(以供将来参考)是不常见的吗? 显然,此人因复制源代码而被判入狱。
197 legal 

1
为什么本机ES6承诺比bluebird更慢且占用更多内存?
在此基准测试中,与Bluebird Promise相比,套件完成ES6 Promise的时间要长4倍,并且使用的内存是3.6倍。 JavaScript库如何比用C编写的v8本机实现更快,更轻巧?Bluebird Promise与本机ES6 Promise具有完全相同的API(以及大量额外的实用程序方法)。 是本机实现编写得不好,还是我缺少其他方面?

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.