软件工程

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

2
如何将50岁以上的文盲计算机引入编程中
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 8年前关闭。 前几天,我父亲问我一个我从未期望过的问题。 “我如何学习C ++?” 我父亲今年已经56岁了,计算机对他来说是一个遥不可及的概念。除了呼叫号码(没有快速拨号或联系人)外,他不知道如何很好地使用电话。尽管他已经开始学习计算机,但他知道如何打开Internet(在Windows中)和浏览(到此为止,他已经完全通过自己的在线网站成功完成了几份工作申请,也为他提供了职位) )。但是,这些都是狭窄的经验,实际上并没有多大意义。 虽然他可能没有背景,但我父亲知道如何阅读。我的意思是阅读是一种技能,而不仅仅是一种能力。他几乎没有大学学历(财务问题,家庭等),并且有幸完成了高中毕业,但仍然自学成才,成为电工大师,至今已经有30年了。他在吉他方面也做同样的事情,学习演奏非常专业的水平,并因其技巧而受到赞誉。在高中时,他拿起了一本举重书-当时是他的高中唯一一位被国家标准正式认可为“运动员”的人。 在所有情况下,他只需要阅读一些内容即可。有东西教他。他像海绵一样吸收信息。 我毫不怀疑我父亲的动机或能力,所以我的总体目标很简单: 让我的父亲进入计算机世界,让他走上编程的道路。 我坚信,一旦我掌握了基础知识,他的干劲和阅读能力将使他继续前进。 所以我问大家:我应该从哪里开始呢?最好的资源是什么?我应该让他启动Linux而不是Windows?C ++是个坏主意吗? 请记住,他需要(IMO)首先学习计算机,然后首先掌握编程知识(“ Hello world”经验)。 出于金钱的缘故,我希望他能阅读免费的在线资源,但无论如何,无论是印刷版还是网上付费的任何好的建议,我们都欢迎(我以后可以考虑购买)。 而且,我打算从C ++开始(没有Python,Java等),因为我最了解C ++,并且将在代码开发过程中为他提供帮助。(我现在几乎没有其他语言的知识)。 编辑:我收到很多使用Python的持久性建议。我想做C ++的唯一原因是我知道它,当我的父亲需要帮助时可以在那里。我第一次接触编程是Java。我学过Java,并且擅长Java。我愿意接受其他建议,但请有效地应用您的建议。 编辑#2:我知道这里可能缺少我的方法/思维/知识。我是大学二年级的CS专业。如果您不同意我的帖子,请告诉我为什么-给我想法,信息-这就是我首先要问的原因。将我的总体目标缩小到可以实现的特定目标。
10 c++ 

1
当前的iOS版本/设备统计信息?
这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 这个SO问题的答案已经过时:iOS版本/设备统计信息-在哪里可以找到? 因为时间货币不是该问题的一部分,并且自提出该问题以来,iOS版本更新已经发布。 是否存在网站或其他公共可用资源,可能通过持续监视应用程序分析或网站日志或其他方式来保持使用中的iOS设备和OS版本的百分比的最新列表或经常更新列表? iOS应用分析目前允许报告哪些设备或操作系统信息(如果有)?(...当然,假设并遵守了适当的隐私权政策。)
10 iphone  ios  appstore 

5
按故事编写需求规范是个好主意吗?
目前,我们在当前项目中使用的是敏捷方法,并且我们有很多类似的故事: 作为助理,我想向客户退款,以便他们可以在要求时获得一些退款 作为客户,我想付款以购买商品。 到目前为止,我们的工作方式是在每个冲刺中挑选最重要的故事,并将其详细阐述为许多正式的需求规格(我们将一些在相同规格中相似的故事归为一组)。根据故事的不同,它可能只是屏幕上的按钮或整个工作流程。 现在的问题是,因为故事太多,对于系统中与故事相关的任何部分,现在还不清楚。 它可以在开发人员时发挥作用,开发人员的每一次冲刺都只是获得一个规范,概述他们需要做的事情和需要进行的更改。但是就维护此故事列表和进行测试而言,它开始变得很难跟踪错误,并且通常只是维护规范,因为屏幕上的一项功能可能已经记录在许多不同的地方按故事拆分。 根据故事写规范是个好主意吗?我们写故事的方式有误吗?

4
JavaScript多线程
如今,JavaScript是所有Web开发技术中的主要角色,在客户端方面,用于改善用户界面的功能,客户端逻辑,在某些Web服务器上,以及服务器端逻辑 此外,人们(至少其中一些人)开始将网络游戏开发从Flash转移到javascript和HTML5 是不是该支持多线程了!是否有允许JavaScript多线程的浏览器,或者是否存在任何标准版本,HTML5或更高版本?

2
“ Demeter法”是否适用于公共/ API方法签名?
鉴于对API /公共方法签名的更改应尽可能少,以防止破坏使用这些方法的客户端代码,我想知道Demeter法则是否不适用于这些方法。 一个简单的例子: class Account() { double balance; public void debit(Transaction t) { balance -= t.getAmount(); } } 请注意,借记方法传递的是交易对象,而不是仅仅两倍的金额(据我所知,``德米特尔法则''会说只传递所需的信息,在这种情况下,只是传递金额,而不是交易对象... )。其背后的原因是因为将来该方法可能需要除数量之外的其他一些交易属性。据我了解,这将防止将来通过添加新参数来破坏方法签名。 那么,这是否使之成为明智的选择?还是我错过了什么?

3
将语言编程为*与用Ruby编写C代码
代码完成规定您应该跳投码成一门语言,而不是代码在它。他们的意思是 不要将您的编程思想仅局限于语言自动支持的概念。最好的程序员考虑他们想要做什么,然后他们评估如何使用可供使用的编程工具来实现其目标。(第34.4章) 不管手头语言的优点和缺点如何,这是否会导致在每种语言中使用一种编程风格? 或者,以更易回答的格式提出问题: 您是否建议人们应该尝试使用一种语言的特征尽可能整齐地编码一个问题,还是应该整体上搜索最优雅的解决方案,即使那意味着您需要实现本机不存在的可能尴尬的构造用自己的语言?


2
基于密钥的缓存如何工作?
我最近在37Signals博客上阅读了一篇文章,但我不知道他们如何获取缓存密钥。 具有包含对象时间戳记的缓存键是一件好事(这意味着更新对象时,缓存将失效);但是如何在模板中使用高速缓存键而又不会导致您试图从高速缓存中获取的对象受到数据库命中。 具体来说,这如何影响一对多关系(例如,您在其中呈现帖子的评论)。 Django中的示例: {% for comment in post.comments.all %} {% cache comment.pk comment.modified %} <p>{{ post.body }}</p> {% endcache %} {% endfor %} 例如,在Rails中缓存与仅对memcached的请求不同(我知道它们将您的缓存键转换为其他内容)。他们还缓存缓存密钥吗?

9
应该期望开发人员在实际程序之前编译内部库吗?
最近,与我合作的一位高级开发人员提出了一个要求开发人员获得最新版本并在其项目中编译一个主要内部库的理由。与此相反,相反的说法是,项目团队应该使用他们从内部Maven存储库中获得的稳定版本,开发人员认为开发人员认为在开发人员机器上拥有源代码可以节省时间,因为他们可以读取库源代码代码以确定所需的功能是否可用。 高级开发人员是否有有效论点?还是要求开发人员阅读库的源代码与封装的基本原理背道而驰,甚至将库放在首位?

3
CSS调整图像大小仍然不是一个好主意吗?
人们一直认为,在图像上使用width / height属性不是原来的实际图像是一个坏主意。这可能意味着像素化的图像或下载的大小大于必要的图像。 但是,这仍然是一个问题吗?我不建议放大照片的尺寸,但是缩小尺寸不应该是一个问题,只要它与原始照片没有太大差异并保持缩放即可。 例如,我有一张600x400的照片,并在上面粘贴了400px的宽度。大多数现代浏览器将图像按比例缩小,看起来渲染效果还不错。 那么,大家对此有何看法?

7
密码哈希和对用户的支持
我们最近转向了更好的密码存储策略,它带来了所有的好处: 通过bCrypt后存储密码 系统会在创建帐户时向用户发送激活链接,以确认地址的所有权 忘记密码而没有安全问题,会将链接发送到他们的电子邮件。 该链接将在24小时后失效,此时他们将需要请求一个新的链接。 如果帐户是由我们的员工创建的,则会发送一封包含随机强密码的电子邮件。登录后,用户必须将其重置为我们不知道的东西,并且被密码加密了。 现在,这符合周围的“最佳实践”,但这增加了我们对不了解所有这些,而他们只想登录的普通用户的支持需求。 我们经常收到抱怨以下内容的用户的请求: 密码错误(从他们需要重设的密码开始,他们经常在密码的末尾粘贴一个空格)。他们告诉我们他们正在使用什么,但是我们无法告诉他们他们的实际密码是什么。 说他们没有收到我们发送给他们的电子邮件(激活,重置等)。通常情况并非如此,经过大量故障排除后,我们通常发现他们在电子邮件中打了错字,他们没有检查正确的电子邮件帐户,或者只是将其放入了垃圾邮件文件夹。 我们当然不能为他们尝试,因为我们没有密码。我们正在记录失败的尝试,但是我们也清除了他们使用的密码,因为它很可能是另一个帐户使用的密码,并且我们不想存储在纯文本日志文件中。这样,当他们报告问题时,我们几乎没有任何帮助。 我很好奇大多数人如何处理此类问题?

3
方法重载什么时候合适?
假设我正在开发一个现有的,相当大的系统。我有一个myObject类的对象MyClass(出于示例的原因,假设我正在Java中工作)。myObject是一种含有一种组合物Collection,比方说,一个List和其它目的(我认为)是无关紧要的。它包含委托方法,这些委托方法仅用于调用List它所组成的方法,以确保List它所具有的不暴露(对不起,如果我的术语错误)。 假设这List是一个,List<String>但是由于某种原因,主要的访问方法是class的mask方法SomeOtherClass。如果要在其中插入一个新的值对List,则需要一个SomeOtherClass名为的对象someObject。我会打电话给,myObject.insert(someObject)并且在insert方法内部将有一些魔术可以检索String到中放入List<String>。 现在假设我只有一个String值,没有SomeOtherClass要插入的对象。假设我无法修改该insert方法,因为它会破坏系统中的所有内容。那我应该重载该insert方法吗?还是应该在SomeOtherClass每次调用时创建一个新对象insert? 我想如果我确实超载了,它会看起来像这样…… public void insert(String s) { ... } public void insert(SomeOtherObject obj) { this.insert(obj.magicStringMethod()); } (此示例是一个人为的难题,它基于我昨天遇到的关于超载的类似(稍微复杂一些)情况。如果有不清楚的地方,我将对其进行扩展) 这是重载方法的合适地方吗?如果没有,我什么时候应该重载方法?

12
质量检查是否应该找到可重现的方案?
有时,我的质量检查小组会报告错误,但是我或他们都不知道如何重现错误。这导致非常长且令人沮丧的调试会话,有时甚至无法产生结果。 我的软件与专有硬件紧密相关,因此错误可能一次来自多个方向。 我应该对他们期望比“按下按钮时您的软件崩溃”还要多,还是应该自己弄清楚发生了什么? 编辑: 我的一位同事指出,我们可能是这里的所有开发人员,因此结果可能会出现一些偏差
10 testing  bug  qa  reporting 

5
接口和继承:两全其美?
我“发现”了界面,并开始喜欢它们。接口的优点在于它是一个契约,任何需要履行该契约的对象都可以在需要该接口的任何地方使用。 接口的问题是它不能具有默认实现,这对于平凡的属性是一种痛苦,并且会破坏DRY。这也很好,因为它可以使实现与系统保持分离。一方面,继承会保持更紧密的耦合,并且有可能破坏封装。 案例1(与私有成员的继承,良好的封装,紧密耦合) class Employee { int money_earned; string name; public: void do_work(){money_earned++;}; string get_name(return name;); }; class Nurse : public Employee: { public: void do_work(/*do work. Oops, can't update money_earned. Unaware I have to call superclass' do_work()*/); }; void HireNurse(Nurse *n) { nurse->do_work(); ) 情况2(只是一个接口) class IEmployee { virtual …


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.