软件工程

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

8
在头文件或源文件中记录函数是否更好?
在区分“源”文件和“头文件”(主要是C和C ++)的语言中,最好在头文件中记录函数: (从CCAN窃取) /** * time_now - return the current time * * Example: * printf("Now is %lu seconds since epoch\n", (long)time_now().tv_sec); */ struct timeval time_now(void); 或在源文件中? (从PostgreSQL窃取) /* * Convert a UTF-8 character to a Unicode code point. * This is a one-character version of pg_utf2wchar_with_len. * * No …
86 c++  c  headers 

19
为什么OCaml不受欢迎?
我一直听说C是嵌入式系统或任何需要以最高速度运行的语言的首选语言。我从来没有对C产生过浓厚的兴趣,主要是因为我不喜欢指针算术,并且该语言仅比汇编程序强。 另一方面,ML语言是功能强大的垃圾收集语言,OCaml甚至具有对象模型,但它们以与C一样快而享有盛誉。ML语言具有任何人都可以要求编写的抽象,简洁的语言代码,但它保留了编写高性能应用程序所需的速度。 特别是,OCaml可以在传统上使用C的任何地方使用,例如用于嵌入式设备,图形驱动程序,操作系统等。按权利,OCaml到现在应该已经占领了整个世界,但是几乎没有人听说过这种语言用过的。 这是一个主观的问题,但是为什么OCaml和ML其他语言仍然如此晦涩,而C和其他语言却变得流行呢?
86 c  ocaml 

22
因为不自然,OOP难吗?
人们常常可以听到,OOP自然对应于人们对世界的思考方式。但是我强烈不同意这种说法:我们(或者至少我)根据我们遇到的事物之间的关系来概念化世界,但是OOP的重点是设计各个类及其层次结构。 注意,在日常生活中,关系和动作主要存在于对象之间,这些对象本来是OOP中无关类的实例。这样的关系的示例是:“我的屏幕在桌子的顶部”;“我(一个人)坐在椅子上”;“道路上有汽车”;“我正在键盘上打字”;“咖啡机煮水”,“文本显示在终端窗口中”。 我们以二价(有时是三价,例如“我给你送花”一词)动词来思考,其中动词是对两个对象进行操作以产生某种结果/动作的动作(关系)。的焦点是关于动作,两个(或三个)[语法]对象具有同等的重要性。 与OOP相反,在OOP中,您首先必须找到一个对象(名词),并告诉它对另一个对象执行某些操作。思维方式从对名词进行操作的动作/动词转变为对名词进行操作的名词-好像一切都是被动或反身的声音所说的,例如,“文本正在终端窗口中显示”。或者也许是“文本在终端窗口上绘制自身”。 不仅焦点转移到了名词上,而且一个名词(我们称其为语法主语)比另一个名词(语法对象)具有更高的“重要性”。因此,必须决定是说terminalWindow.show(someText)还是someText.show(terminalWindow)。但是,当一个人真正表示show(terminalWindow,someText)时,为什么要给这些琐碎的决定加重负担却又没有任何操作后果呢?[结果在操作上无关紧要-在两种情况下,文本都显示在终端窗口上-但是在类层次结构的设计中可能非常严重,并且“错误”的选择可能导致复杂的代码和难以维护的代码。] 因此,我要指出,进行OOP(基于类,单派遣)的主流方法很困难,因为它是不自然的,并且与人类对世界的看法不符。CLOS的通用方法更接近于我的思维方式,但是,可惜,这不是普遍的方法。 鉴于这些问题,为什么/为什么发生当前流行的OOP方式如此流行?可以采取什么行动来废除王位呢?

3
为什么不推荐使用Web SQL数据库?
我正在制作一个混合Android应用程序。 最初,我决定使用localStorage,花了两天后,我意识到它很奇怪,因此放弃了它。 然后,在花费了整整一天时间并实际上在Google Chrome中获取了输出之后,我选择了indexedDB,它没有在android应用的WebView中运行。 而且我从未使用过Web SQL数据库,因为它已被弃用。无论如何,我注意到PhoneGap仍然使用Web SQL,而android的浏览器支持它。 为什么首先不推荐使用Web SQL?现在使用Web SQL对我来说是一个好主意吗?

4
TypeScript和Dart之间的区别
微软最近发布了Typescript,一种新的类似于JavaScript的编程语言。不久前,我听说过Dart,这是Google创建的一种新的编程语言,用于解决与Javascript有关的问题,例如性能,可伸缩性等。 两种新语言的目的在我看来都是相同的。 语言的目的是否相同? 它们之间的真正区别是什么?
85 dart  typescript 

10
您如何避免吸气剂和吸气剂?
我在以oo方式设计类时遇到了一些困难。我已经读过对象暴露了他们的行为,而不是数据。因此,给定类的方法应该是“动词”或对对象执行的操作,而不是使用getter / setter修改数据。例如,在“帐户”对象,我们将有方法Withdraw()和Deposit(),而不是setAmount()等请参见:为什么getter和setter方法是邪恶的。 因此,例如,给定一个Customer类,该类保留了大量有关客户的信息,例如Name,DOB,Tel,Address等,那么如何避免使用getter / setter来获取和设置所有这些属性?一个人可以写哪种“行为”类型的方法来填充所有数据?

20
减少代码中的行数有多重要?
我是从事J2SE(核心Java)的软件开发人员。 通常在我们的代码审查期间,我们被要求减少代码中的行数。 这并不是删除多余的代码,而是遵循一种专注于用更少的代码行来完成相同事情的样式,而我相信即使要增加行数,代码也要清晰。 您认为正确的做事方式是什么? 如果LOC(代码行)很小,它将如何影响代码?如果LOC是一个较大的数字,它将如何影响代码? 网站上的示例:“ javaranch”- public static void happyBirthday(int age) { if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0)))) { System.out.println("Super special party, this year!"); } else { System.out.println("One year older. Again."); …

17
我负面的实习经历能代表现实世界吗?[关闭]
我很好奇我目前的实习经历是否代表实际行业。 作为背景知识,我将学习一所主要大学的两个计算专业和一个数学专业的较好部分;我上过每一堂课,并且都崇拜过他们,所以我想以为我并不擅长编程。我曾在一家主要的软件公司实习,直到现在一半,我对代码质量异常低落感到震惊。注释不存在,全是意大利面条式的代码,所有可能出错的内容甚至更糟。我已经做了大量的辅导/ TAing,所以我很习惯阅读错误的代码,但是我一直看到的主要行业产品都胜过所有这些。我每天工作10到12个小时,从不觉得自己无所事事,因为 数小时的尝试,试图找出一个未公开的API或确定(完全未公开的)产品其他部分的行为。到目前为止,我每天都讨厌工作,而我非常想知道这是否是我一生中最需要的东西。 我是不是在实习上吸了一根短草(荒谬的薪水暗示着这不是一个低素质的职位),或者这就是现实世界吗?

4
命令式,过程式和结构化编程之间有什么区别?
通过研究(书籍,维基百科,关于SE的类似问题等),我了解到命令式编程是主要的编程范例之一,您在其中描述了一系列要由计算机执行的命令(或语句)(因此,要求其采取特定措施,因此命名为“命令性”)。到现在为止还挺好。 另一方面,过程式编程是命令式编程的一种特定类型(或子集),您可以在其中使用过程(即函数)来描述计算机应执行的命令。 第一个问题:是否有一种非过程式命令式编程语言?换句话说,没有程序就可以进行命令式编程吗? 更新:第一个问题似乎已得到解答。语言可以是必不可少的,而无需程序化或结构化。一个示例是纯汇编语言。 然后还有结构化编程,这似乎是命令式编程的另一种类型(或子集),它的出现是为了消除对GOTO语句的依赖。 第二个问题:过程式编程和结构化编程有什么区别?您能否拥有一个没有另一个,反之亦然?我们可以说过程编程是结构化编程的一个子集吗?

15
监管软件业
每隔几年就会有人对软件行业提出更严格的法规。 这IEEE文章已经越来越一些注意最近关于这个问题的。 如果为为公众暴露于物质或财务风险的系统编写程序的软件工程师知道,他们的能力将受到考验,那么这种想法就可以减少代码中的缺陷和失败,并可以节省一些生命。 我对此的价值和优点表示怀疑。在我看来,这看起来像是提出该建议的人的土地争夺。 对我来说最重要的是: 该考试将测试基础知识,而不是主题知识 因为大的故障(例如THERAC-25)似乎很复杂,所以“基础知识”永远无法防止这些微妙的问题。 忽略任何本地问题(例如某些司法管辖区对标题工程师的现有保护): 这样做的目的是崇高的-避免使用庸医/俗语1,并使这种区别对购买其软件的人更为明显。加强对软件行业的监管能否实现其最初目标? 1正是按照医疗行业的规定来进行的。
85 legal  profession 

6
使用时间戳作为文件名一部分的“标准”格式
我搜索了使用日期/时间作为文件名一部分的标准格式,但无法解决任何问题。 我的问题分为两个部分: 正在使用时间戳 实施独特 在文件名中是不好的做法? 我可以从创建日期开始获取时间,并序列化文件名(file0001.bak,file0002.bak等),但是仅添加时间戳就可以执行诸如的文件操作mv 2011-01* somewhere/。使用这种命名系统有不利之处吗? 我使用的格式是YYYY-mm-dd_HH-MM-SS。 我应该使用更好的格式吗? 使用这种格式时,我应该关注文件系统兼容性,str_to_date_parsing问题等吗? 谢谢! 编辑: 我可能想省略强制唯一性位,因为它是单个用户使用cronjob生成备份的(不应有任何并发​​问题)。

16
我该如何应对团队中缓慢而专心的同事?[关闭]
我一直在从事一个新项目。该项目的工作方式如下:最终用户可以使用链接访问Web应用程序,并且可以在其网络上添加多个系统并管理该特定系统的详细信息。我的部分涉及前端和Web服务器,这是通过python完成的。我的python实际上与另一个完全用c&c ++完成的项目通信。c / c ++项目是完成所有功能的主要应用程序。我的python向它发送用户请求,并向它显示响应。 我对我的工作非常熟悉,很快就会完成。由于这没有太多工作。我是一个热爱工作的人。我大部分时间都在办公室里,只有在感到困倦时才回家。 该c / c ++应用程序由另一位具有5年以上工作经验的同事管理,并且可以比我更快地完成工作,但他从未做到。可能是他不喜欢这样做。当我的python与之通信或返回错误值时,他的应用经常崩溃。它充满了错误。由于我的应用程序依赖它,因此我很难构建它。他没有修复错误,而是要求我放慢工作速度。他要我告诉经理我的工作需要很多时间。他要我愚弄经理,甚至强迫我像他一样缓慢地工作。 在项目会议期间,当经理问他有关错误的信息时,他说他已修复所有问题,并且一切正常。由于他是我的同事,所以我什么也没告诉经理。我显然需要与同事建立比与经理更好的关系,因为在大多数情况下,我们将与同事而不是经理保持关系。 我无法告诉经理有关此事的任何信息,因为如果经理问他为什么,那么他可能会认为我向经理抱怨过。他继续躺在会议上。而且由于他修复错误的速度很慢,所以它甚至减慢了我的工作速度。现在我想到了在我的应用程序的前端部分上工作并完成它,以便与此同时他可以使他的项目稳定。现在,他要我告诉经理我的前端部分需要大量工作,而我可能需要越来越多的时间,只是为了使他可以拖下项目。可悲的是,我们的实际经理已经去了美国,所以我们有一个临时经理,这个家伙对这个项目不太了解,所以c,c ++愚弄了他。 谁能建议我该如何处理?我想尽快结束这个项目。即使与他保持良好的关系,我如何使他工作呢? 对评论的回应: 如果他真的有意误导公司,则应向管理层报告。 我是这家公司的新手,而另一个人已经在那里工作了很多年。我才刚开始认识我的同事。如果我直接去投诉他,我不认为这样可以与其他同事建立良好的关系。甚至他也有权误导他们。我并不是说他是坏人,他可以做工作,但他没有做。 贵公司没有任何类型的错误跟踪系统吗? 这里没有实际的错误跟踪系统。该公司试图尽快完成该项目并将其交给质量检查人员。然后修复质量检查报告的错误。 这就是公司应该给员工股票/期权或某种所有权的原因。这样,您就可以直截了当地告诉那个家伙:“您让我付出了金钱的增长……您是否也想赚钱?”。 该公司拥有他们给我2500股的股票期权,大多数情况下,他也会得到更多。 资历确实值得怀疑。您确实需要先与他交谈,然后尝试理解问题。他可能不在乎他的深度,您也许可以帮助他,很容易会有一些您不知道的变量。现在可能很难,但是您可以通过跳枪轻易使情况变得更糟。 我什至做到了,首先他的应用程序一次不处理多个请求,他使用队列来处理我发送给他的请求。我什至向他建议了一些我的想法。他说他已经有了这些想法,并将执行这些想法。他的解释是:“一切都需要一定的时间才能完成,这是一个项目,可能需要两年才能完成,我们被要求在两个月内完成”。由于这个错误,我在最初的几周内很难编码。但是现在他修复了它。但是他正在使用一个队列来处理用户请求,并且由于应用程序一次处理一个请求,因此现在正在减慢该应用程序的速度。 整个过程中,质量检查在做什么?他们为什么不报告/确认项目状态? 经理是决定何时进行质量检查的人。截至目前,尚未进行质量检查。他说我们应该在这个月底前给它。
85 teamwork 

17
您如何阻止自己回家?[关闭]
编程是一项非常费力的工作,而我最大的问题之一就是将工作带回家。这很容易做到:只要我有机会思考,我的思想就会自然而然地转向与工作有关的事情。我发现我今天的许多其他事情在精神上没有刺激性,正如他们所说,自然讨厌真空。不幸的是,不断地思考工作使我感到压力很大,而我似乎无法在一天结束时就放弃这种选择。这让我很失眠。 更糟糕的是,几乎我所有的朋友都是同事,而我们的许多对话几乎没有让我忘记一周。他们很有趣,总的来说,周围的人都很有趣,一旦我们参加了bit子节,我们都会停止谈论工作,但是只要说一点什么都不能鼓励我忘记与工作有关的事情。 那么,到底该怎么办才能把编程项目留给我呢?还是失败了,我可以做哪些类型的精神刺激活动来占用我的非工作时间(这些时间不紧张,并且不涉及改变精神的药物)?

11
静态测试对于单元测试而言是否普遍“邪恶”?如果是的话,为什么瑞沙珀推荐它?[关闭]
我发现只有三种方法可以对C#.NET中静态的单元测试(模拟/存根)依赖性进行测试: 鼠 TypeMock JustMock 鉴于其中有两个不是免费的,而另一个没有发布1.0版,因此模拟静态内容并不是一件容易的事。 这是否构成静态方法和此类“邪恶”(就单元测试而言)?如果是这样,为什么harsharper希望我做任何可以静态的事情?(假设重新剃刀也不是“邪恶的”。) 澄清: 我是在谈论要对方法进行单元测试并且该方法在其他单元/类中调用静态方法的情况。根据单元测试的大多数定义,如果仅让被测方法在另一个单元/类中调用静态方法,则您不是单元测试,而是集成测试。(有用,但不是单元测试。)

30
在决定是否为新公司工作时,您的交易突破者是什么?[关闭]
我知道我们已经讨论了在您决定在那家公司工作之前应该问些什么问题。但是您如何处理答案? 换句话说,您会认为是一个破坏交易的人?就是说,即使其他一切都很好,您对公司的恐惧会令您如此恐惧,以至于您根本无法在那儿工作? 例如,如果他们告诉我他们不使用版本控制,那我就不会在那里工作。故事结局。

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.