软件工程

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

3
为什么不绿线?
虽然我知道有关此问题的问题已经解决(例如https://stackoverflow.com/questions/5713142/green-threads-vs-non-green-threads),但我感觉自己并没有一个令人满意的答案。 问题是:为什么JVM不再支持绿色线程? 它在代码样式的Java FAQ上说了这一点: 绿色线程是指Java虚拟机(JVM)的一种操作模式,其中所有代码都在单个操作系统线程中执行。 然后在java.sun.com上: 不利之处在于,使用绿色线程意味着Linux上的系统线程无法得到利用,因此当添加其他CPU时Java虚拟机无法扩展。 在我看来,JVM可以具有等于内核数量的系统进程池,然后在此之上运行绿色线程。当您有大量经常阻塞的线程时(这可能是由于当前JVM限制了线程数),这可能会带来一些很大的优势。 有什么想法吗?

8
编写健壮的代码与过度设计
你们怎么知道您正在编写最强大的代码而又不会过度设计? 我发现自己对我的代码可以采用的每条可能路径都考虑得太多了,有时感觉就像是在浪费时间。我想这取决于您正在编写的程序类型,但是我不想花太多时间考虑永远不会发生的情况。

4
为什么Git社区似乎忽略了并排差异[关闭]
我曾经使用Windows,SVN,Tortoise SVN和Beyond Compare。这是进行代码审查的绝佳组合。 现在,我使用OSX和Git。我已经设法将bash脚本与Gitx和DiffMerge融合在一起,提出了几乎无法接受的解决方案。 一年多来,我一直在与这种设置以及类似的设置混为一谈。我也尝试过使用Github差异查看器和Gitx差异查看器,所以好像我没有给他们机会。 有这么多聪明的人用Git做伟大的事情。为什么不选择查看整个文件的并排差异?与曾经使用过这两种方式的人一起,我从来没有听说过有人更喜欢单+/-视图,至少在快速检查之外。
33 git 

11
进行持续集成时应何时进行代码审查?
我们正在尝试切换到持续集成环境,但是不确定何时进行代码审查。根据我对持续集成的了解,我们应该每天尝试多次检入代码。我认为,这甚至意味着尚未完成的功能。 所以问题是,我们什么时候进行代码审查? 在签入代码之前,我们无法执行此操作,因为这会减慢我们无法进行每日签入的过程,更不用说每天进行多次签入了。 同样,如果我们正在检入的代码只是编译但功能不完整,那么进行代码检查就没有意义,因为大多数代码检查最好在功能完成时完成。这是否意味着我们应该在功能完成时进行代码审查,但是未审查的代码将进入存储库?

8
SOLID,避免贫血领域,依赖注入?
尽管这可能是与编程语言无关的问题,但我对针对.NET生态系统的答案很感兴趣。 这是这种情况:假设我们需要为公共管理开发一个简单的控制台应用程序。该应用程序是关于车辆税的。他们(仅)具有以下业务规则: 1.a)如果车辆是汽车,而车主最后一次缴税是在30天前,则车主必须再次缴税。 1.b)如果车辆是摩托车,且车主上次缴税是60天前,则车主必须再次缴税。 换句话说,如果您有汽车,则必须每30天支付一次费用;如果您有摩托车,则必须每60天支付一次费用。 对于系统中的每辆车,应用程序都应测试这些规则并打印不满足这些规则的车辆(车牌号和车主信息)。 我想要的是: 2.a)符合SOLID原则(尤其是开放/封闭原则)。 我不想要的是(我认为): 2.b)一个贫血的领域,因此业务逻辑应该放在业务实体内部。 我从这个开始: public class Person // You wanted a banana but what you got was a gorilla holding the banana and the entire jungle. { public string Name { get; set; } public string Surname { get; set; } } public …
33 c#  .net  design  architecture 


11
是否应该强迫开发人员记住细节?[关闭]
很多次我忘记了有关我的应用程序的事情。我不记住表名或查询的内容,而是搜索得到想要的东西。我的团队负责人告诉我,我应该记住我使用的表名。 开发人员是否需要记住数据库中的表名,类名等?如果答案是“一直是”,我该怎么做才能记住那些事情?
33 skills 

9
在绩效考核中增加薪水[关闭]
我目前正面临即将进行的性能评估的难题。大约1年前,当我在公司工作时,我尽可能地诚实地了解自己的编程技能和知识。我认为自己的技能是基于我的编码能力,而不是那些我认为是优秀的程序员和开发人员。所以当时的薪水让我很满意。 我对此没有任何问题,因为我认为诚实在求职时和工作中都很重要。另外,我相信,一旦我胜任工作,如果我比雇主让我相信的要好,那么我的表现就会反映出来。 同时雇用了另一名开发商。我们俩都被雇用从事相同项目,执行相同任务的工作。几个月前,我发现这个人的薪水远高于我的工资水平。现在,在项目过程中,我开始意识到,这个人在编程技巧甚至商业知识方面都远低于我。我不得不多次帮助他完成编程任务,查看他的代码并提供更好的解决方案,并解释有关我们正在从事的项目的概念。即使我们都是同时开始的。 我该如何提高我的薪水(在审阅过程中),以便至少可以与该人员进行比较而不直接提及他们的姓名或我知道他们的工作状况。如果我根据我所做的工作证明其合理性,如果他们没有给我提供比较的方案,那该怎么办。我想要更多还是公平地贪婪?
33 management 

4
MVC / REST是否应为属于其他用户的资源返回403或404?
当使用基于资源的站点(例如MVC应用程序或REST服务)时,当客户端尝试GET访问他们无权访问的资源时,我们有两个主要选择: 403,表示客户未经授权 ; 要么 404,表示资源不存在(或无法找到)。 共同的智慧和惯例似乎是对事实做出回应-即403。但是我想知道这是否真的是正确的做法。 安全登录系统永远不会告诉您登录失败的原因。也就是说,就客户端而言,不存在的用户名和错误的密码之间没有可检测到的差异。目的是使用户ID(或更糟糕的是电子邮件地址)不易被发现。 从隐私的角度来看,返回404似乎更安全。我想起了一起事件,据说有人通过查看真人秀(幸存者)中的哪些资源不存在而找到了他们。网站与哪些网站做了。我担心403可能会泄露敏感信息,例如序列号或帐号。 是否有令人信服的理由不返回404?404政策会在其他地方产生负面影响吗?如果没有,那为什么不更普遍呢?

6
本地存储的安全性如何?
问题确实说明了一切。我想提供服务,但我不想自己将任何数据存储在数据库中。有了最近所有有关黑客攻击的消息,在我看来,让客户完全控制其数据会更好。 问题在于存储的数据可能是敏感的。我要做的是...当客户访问该网站时,会出现一个问题,询问“您是使用个人计算机还是公用计算机”。如果它们在公共计算机上,则该站点将拒绝访问。 如果他们在个人计算机上,它将提示他们设置密码。然后,将使用此密码对他们的所有数据进行加密。现在显然这不是太安全。加密方法使用JavaScript,而密码使用纯文本格式,因此我认为,精明的用户可以在localStorage中找到密码并访问数据。 我觉得这不是什么大问题。如果您使用的是个人计算机,则发生这种情况的可能性很小,因为……其他人需要访问其计算机上的特定用户帐户,其他人需要了解该网站……其他人需要了解localStorage以及如何访问它。敏感数据绝不会损害其身份或其他许多方面。它只是记录了大多数人不希望公开发布的内容。 所以真正的问题是,localStorage是否足够安全? 另一个问题..擦除您的localStorage有多困难?我不希望用户不小心擦除其数据。 最后-甚至值得加密/解密其数据,就好像您拥有可以访问该站点的密码一样。

9
将来的验证码
在我工作的地方,开发人员总是告诉我“为了将来以防万一”或“我认为这样做是个好主意,因为他们可能有一天会想要它”。我认为很高兴他们能积极地预见未来的变化,但我不禁认为这是不必要的,并且冒着编写可能永远不需要的代码的风险,因此徒劳无功(我还认为有些开发人员只想尝试一些东西)全新的)。如果您只是编写良好,干净的组织代码,则用于将来证明的参数是否无效?

16
计算机科学专业学位会否损害我的就业能力?[关闭]
我经常看到,有许多可行的程序员没有计算机科学,信息学等专业的大学学历。 现在,我已经阅读了更多有关教育表现不佳和大学学位(尤其是程序员)的微不足道的文章,大学学位是否会损害我的就业能力?(从我毕业以后也算了四年) PS我要去加州大学欧文分校。学校本身对学位的意义有影响吗?

6
雇主承认其开发商的工资被低估且被低估。是时候分道扬?了吗?[关闭]
我的雇主最近发布了一份具有3-5年经验的C#开发人员的职位空缺。直到确定工资标准之前,对职位的要求和期望都是公平的。明确指出,薪酬将仅取决于C#的经验,而多年使用其他语言和框架的编程经验将被认为是无关紧要的,没有被考虑在内。标记并转向。我试图解释说,软件开发远不止是特定的语言,而且花钱购买某人的一种语言是雇用优秀开发人员的一种很短视的方法(我告诉软件公司的人力资源部) 。 回应:“我们厌倦了浪费时间采访那些期望'高薪'的开发人员,因为他们有很多其他编程经验,而不是我们所需要的语言。” 这里排名第一的问题是“高薪” =市场汇率。经过认真的讨论,他们基本上承认,公司没有人因其技能获得接近市场价的报酬,因此对此无能为力。最高管理层的心态是,只应为员工提供经过多年监督证明的技能的报酬。入门级开发人员的价格不到3.8万美元,并在3年​​后可能达到5万,我认为这与他们为C#职位提供候选人的计划有关。另一个有趣的发现(无关紧要)-人们“被提升” 承担更高的责任不会加薪。“晋升”被认为是对个人角色的调整,以更好地适应他们的“实力”,而这正是他们已经获得的报酬。 在直接从HR听到这些硬道理之后,我认为大多数正在寻找自己的人会迅速开始寻找一个对自己在行业中有更好了解的新雇主(该公司在许多其他方面都失败了方式,但我不想写书)。这是我的两难选择: 这是我刚刚担任不到一年的第一个官方软件开发职位。我之前的3年职位是在一家非常小的公司中执行的许多职责,其中包括软件开发(不在我的正式职位描述中,但我非常努力地做到这一点)。我已经确定了我目前有资格获得的本地职位空缺,大多数都比现在的薪水高出至少50%。问题是,跳得太早了吗?在目前的职位上,我获得了宝贵的经验,并且不乏激动人心的项目。工作环境非常舒适,许多人告诉我,我在C级人员中脱颖而出,这是我在短时间内能够完成的工作(这是值得的)。但是,留下来显然有机会成本,现在可以肯定地知道,我将不得不等待3-5年,才能确定我今年在其他地方可能获得的收入。我也知道,无论出于何种原因,“工作漏斗”都是危险的标签。 更新:我刚刚接受了另一家公司的要约,付出了更高的价钱,而且项目更酷。感谢所有人的深刻见解。


12
如果编程基础很强,那么任何编程语言都可以轻松掌握。事实还是神话?[关闭]
一个具有相当好的编程基础的人真的可以轻松学习任何编程语言,这是真的吗? 好吧,当我说到编程语言时,我指的是敏捷和动态语言,例如PHP,Perl,Ruby等,而不是遥远的过去的编程语言。 在某种程度上,我只研究过Java,groovy和flex。因此,从粗略的角度考虑,我是一名业余程序员,但还是一名快速学习者,要在任何一种这种语言上立足需要多长时间?

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.