软件工程

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


17
客户希望我们对工作机器进行色情检查。可能吗?
一个长期的客户要求我们帮助筛选他们的工作机器以检查色情内容。如果发现敏感材料,他们担心赔偿责任。(出于明显的原因)他们主要关注的是视频,音频和图像文件。如果可能,他们还希望扫描基于文本的文档以查找不适当的内容。他们具有非工作内容的层次结构,从明显的违法行为开始(我不必列出详细信息),然后逐渐转移到明显令人反感的内容,还包括可能对某些内容令人反感的内容-例如内衣广告,笑话卡片,对接裂缝,以及与Howie Mandel相关的所有信息。 我的问题是: 这是道德的吗?我认为这是因为每个员工在法律上都同意他们的工作机器属于公司,并且需要进行搜索。筛选不应在投入使用的个人计算机上进行。 可行吗 我已经做了很多图像处理/索引工作,但这似乎是一个全新的复杂世界。 有没有提到成功发现色情技术的方法? 发现某些内容后,将结果存档对我来说是否合适?

5
在工作场所引入“ 20%的时间” [关闭]
20%的时间是雇主的文化,允许员工将20%的时间用于他们认为有趣的项目上-可能是发明新的应用程序或改进了现有的流程等。有些人可能认为这很臭工作,但是该术语对您可能没有任何意义(或完全不同)。 有许多有案可查的案例,说明优秀产品是由公司的20%/臭鼬工作诞生的。似乎是双赢的局面。公司可能会获得出色的新产品或应用,开发人员将有机会展示自己的创造力和创新能力。 我曾无数次尝试在前任雇主中引入某种形式的20%/臭鼬工作,但没有成功。 我怎样才能更好地向管理层证明呢?处理这种工作安排的“正确”方法是什么?

17
编码时如何减少错误数量?
没有人能做到完美,无论我们做什么,我们都将不时产生包含错误的代码。在编写新软件和更改/维护现有代码时,有哪些方法/技术可以减少产生的错误数量?
30 bug 

9
有几种类型的编程语言?[关闭]
基本上,我想学习很多编程语言以成为一名优秀的程序员。我知道只有极少数的深度和我希望有人能详细阐述了多少类或类型的编程语言有。就像您必须分组学习时,如何将它们组合在一起。 来自Java背景,我熟悉静态类型,但是我知道,除了动态类型之外,可用语言还必须有如此多的种类,如果可能的话,我希望可以对其进行分类。

17
与编码风格不一致的同事打交道?
当您与倾向于编写风格上很差的代码的人一起工作时,您会怎么办?我正在谈论的代码在技术上通常是正确的,结构合理的,甚至在算法上可能是优雅的,但看起来却很丑陋。我们有: 不同命名约定和标题的混合(underscore_style和camelCase和UpperCamel以及CAPS全部或多或少地随机应用于同一函数中的不同变量) 奇异且不一致的间距,例如 Functioncall (arg1 ,arg2,arg3 ); 注释和变量名中很多拼写错误的单词 我们有一个很好的代码审查系统,可以正常工作,因此我们可以仔细研究并修复最糟糕的问题。但是,发送包含50行“在此处添加空格。正确拼写'itarator'。更改此大写字母等”的代码审核确实很琐碎。 您如何鼓励这个人更加小心并与这些细节保持一致?

11
软件创新是否仍主要是北美和欧洲?为什么,持续多长时间?[关闭]
由于该站点已被全球程序员广泛阅读,因此我想知道人们是否普遍认为,绝大多数软件创新-语言,操作系统,工具,方法,书籍等-仍源自美国,加拿大和欧盟。我可以想到一些例外情况,例如来自俄罗斯的Nginx Web服务器和来自日本的Ruby语言,但是绝大多数情况下,我每天使用和遇到的软件都来自北美和欧盟。 为什么?历史和历史动力(计算已在美国和欧洲开始)仍在推动该行业吗?和/或,是否存在一些模糊的(或真实的)文化差异阻碍了国外的软件创新? 还是我们这些西方国家的人仅仅对亚洲,南美,东欧等地的真实软件创新一无所知? 什么时候(如果有的话)创新中心可以搬出西方?

5
测试驱动的开发-说服我![关闭]
我知道有些人大力支持测试驱动的开发。我过去曾使用过单元测试,但仅用于测试可以轻松测试的操作,或者我认为很可能是正确的操作。完整或接近完整的代码覆盖范围听起来会花费很多时间。 您将测试驱动的开发用于哪些项目?您是否仅将其用于特定大小以上的项目? 我是否应该使用它?说服我!


18
您什么时候可以称自己为X语言擅长?
这可以追溯到我与女友的对话。我试图告诉她,我只是对自己的编程语言(C ++)感到不足以称自己为好。然后她问我:“嗯,你什么时候认为自己足够好?” 这是一个有趣的问题。我不知道该告诉她什么 所以我问你。 对于任何编程语言,框架之类的东西,什么时候坐下来,看看您所做的事情,然后说:“嘿,我实际上很擅长此事。” 您如何定义“好”,以便您可以诚实地告诉其他人,“是的,我擅长X”。 此外,您是否通过比较其他人可以做到这些结论? 附加信息 我已经读过规范论文,说明您是该领域的专家需要花费一万小时的时间。(向知道此文件又称什么的人提供支持) 我还阅读了《编码恐怖》中有关采访人的各种文章。有人说,“不能在框架之外运行”。因此它们对于该框架可能是“好”的,但在语言方面则并非如此。这是真的?



23
什么是好的编程隐喻?[关闭]
我指的是向非程序员解释什么是编程。我确保在创建此问题之前先搜索类似的问题,但是我发现的几个问题似乎回避了这个问题,我特别希望看到一些隐喻或类比。我个人发现通过使用隐喻或类比向某人解释一些技术性的内容比较容易。 我对此感兴趣的原因是,因为很多人每天都会遇到程序员的工作,但是如果您问普通人一个程序员是什么或干什么,他们并不真正知道。这会导致某些误解(例如“ [...],但我认为您的计算机性能不错!”) 我真的很想在那儿找到最好的。我希望能够轻松地向某人解释我的职业选择。当然,至少是总体思路。 我个人没有一个可靠的语言,但是我已经考虑了很久,而且我通常倾向于使用“语言”隐喻,因为我们碰巧知道计算机可以理解的一种语言,因此我们能够告诉计算机该做什么。做或“教”他们解决我们的问题。 例如: 想象一下,在另一个现实中,存在具有人工智能的类人机器人,有些人能够通过一种通用语言(英语的一种变体)与它们进行通信。这些可以与机器人通信的人可以教他们如何解决某些问题或完成某些任务,例如做家务。 好吧,尽管还没有像这样的机器人,但我们这个时代的程序员就像那些人一样,但是他们没有与机器人交流,而是与计算机交流。程序员通过使用这种“通用语言”创建的软件来“教”计算机如何执行某些任务或解决某些问题。 程序员和这种“通用语言”为我们提供了诸如电子邮件,网站,视频游戏,文字处理器,智能手机(简而言之)之类的东西,以及我们日常使用的许多其他东西。 我并不是要把编程放在王位上,这只是我能想到的最好的隐喻。 我确定有人会发现与此有关的问题,这可能是人为的,但这又是我问这个问题的原因。

1
我自己开发系统时,应该使用微服务吗?
我正在开始一个新的项目,尽管可能需要一个或两个其他开发人员将现有的应用程序或简单的脚本集成到主项目中,但我几乎将是该项目的唯一开发人员。该项目需要处理小规模的批量和流数据的摄取/处理,以及事件驱动和按需代码执行。框架的某些部分受CPU限制,而某些部分则受I / O限制。大多数数据必须存在于单个计算机上,但是我们能够创建集群并连接虚拟机以增加可用的计算能力。可能会有一个或多个小型Web应用程序依赖于此核心框架提供的服务。主要语言将是适用于几乎所有内容的Python。 我的问题是,考虑到我将自己完成大部分开发工作,我是否应该采用微服务方法来进行此类工作或坚持使用单一应用程序。我的想法是,微服务(使用Nameko)在具有不同执行模型(数据管道,事件启动,按需,Web应用程序等)的框架元素之间提供了自然的分隔,并提供了一种清晰的方式来分配工作负载和跨多个流程的沟通。我担心的是,我可能最终会使用一个Kubernetes集群来管理(我熟悉Docker,但对于Kubernetes来说还很陌生),为了促进系统运行,需要多个服务(rabbitmq,redis等),并可能有很多小的代码块来实际实现我们所需要的所有必要功能 对于只有一个开发人员的项目,微服务是否仍会简化这样的复杂系统的开发和维护?我是否应该考虑使用其他方法/系统/框架,或者减少以这种方式设计系统所涉及的开销?

13
组织中的编码风格是可选的吗?
该编程样式文档有一条通用规则,即: 如果强烈反对这些规则,则可能违反这些规则。 这与我的思维方式相冲突,并且有很多文章说编码风格实际上很重要。例如,这说: 编码标准文档告诉开发人员如何编写代码。他们将代替所有开发人员按照自己喜欢的样式进行编码,而是将所有代码编写为文档中概述的标准。这样可以确保以一致的方式对大型项目进行编码-不同的程序员不会以不同的方式编写部分内容。此解决方案不仅使代码更易于理解,而且还确保任何查看该代码的开发人员都将知道整个应用程序的期望。 因此,我是否误解了本文档以及该问题顶部的引文中的内容?人们真的可以忽略编码样式吗? 也许我还不够清楚,所以通过这次编辑,我将澄清一下。 我正在为我们的团队编写编码样式文档,我想使用一些静态分析器检查样式。如果失败,詹金斯将发送电子邮件。如果样式不匹配,我想使代码审查失败。这显然与第一个引用冲突。 但是,如果引用正确,那么如果任何人都可以做自己想做的事情,那么编码样式文档的用途是什么?

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.