软件工程

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

1
网站公开之前,Web应用程序的程序员应考虑哪些技术细节?
实现Web应用程序技术细节的程序员在将该站点公开之前应该考虑哪些事项?如果杰夫·阿特伍德可以忘记左右的HttpOnly饼干,站点地图,和 跨站点请求伪造 都在同一个网站,有什么重要的东西可能我被遗忘呢? 我正在从Web开发人员的角度考虑这一问题,以便其他人为该网站创建实际的设计和内容。因此,尽管可用性和内容可能比平台更重要,但程序员对此几乎没有发言权。您确实需要担心的是,您的平台实施稳定,性能良好,安全并且可以满足任何其他业务目标(例如花费不多,构建时间太长以及在Google中的排名与内容支持)。 从开发人员的角度考虑这一点,该开发人员在一个相当受信任的环境中完成了Intranet类型应用程序的一些工作,并且即将出手,并为整个糟糕的大型互联网推出一个可能受欢迎的网站。 另外,我正在寻找的内容不仅仅是模糊的“ Web标准”响应。我的意思是,HTML,JavaScript和HTTP上的CSS几乎都是给定的,尤其是当我已经指定您是专业的Web开发人员时。所以超越的是,哪个标准?在什么情况下,为什么? 提供指向标准规范的链接。

11
哪种哈希算法最适合唯一性和速度?
哪种哈希算法最适合唯一性和速度?示例(良好)用法包括哈希字典。 我知道有SHA-256之类的东西,但是这些算法被设计为安全的,这通常意味着它们比不那么独特的算法要慢。我希望哈希算法的设计速度要快,但要保持相当独特以避免冲突。
1387 algorithms  hashing 

9
“仅返回”的概念从何而来?
我经常跟程序员谁说:“ 不要把多个return语句相同的方法。 ”当我问他们告诉我的原因,我得到的是“ 编码标准是这么说的。 ”或者“ 这是令人困惑的。 ”当他们通过单个return语句向我展示解决方案时,代码对我来说看起来更难看。例如: if (condition) return 42; else return 97; “ 这很丑,您必须使用局部变量! ” int result; if (condition) result = 42; else result = 97; return result; 50%的代码膨胀如何使程序更易于理解?我个人觉得比较困难,因为状态空间刚刚增加了另一个很容易避免的变量。 当然,通常我会写: return (condition) ? 42 : 97; 但是许多程序员避免使用条件运算符,而是喜欢长格式。 “仅返回”的概念从何而来?产生这种约定是否有历史原因?

30
我即将获得计算机科学学位,但是我不觉得自己会编程
我即将获得计算机科学学位,但是我看到诸如Stack Overflow之类的网站和诸如Google之类的搜索引擎,却不知道我什至会开始写类似的东西。在一个暑假期间,我确实有机会作为iPhone开发人员工作,但我觉得我主要是将其他人编写的库胶合在一起,而对引擎盖背后的机制却不甚了解。 我正在尝试通过学习算法来提高知识,但这是一个漫长而痛苦的过程。我发现算法很困难,以我所学的速度,在掌握本书内容之前,已经过去了十年。考虑到我目前的情况,我花了一个月的时间寻找工作,但是我的技能(C,Python,Objective-C)相对较浅,在本地市场上并不那么理想,因为在本地市场上C#,Java和Web开发要高得多需求。这并不是说不存在C和Python的机会,但它们往往需要3年以上我没有的经验。我的GPA不错(3.0),但还不够高,无法申请IBM之类的大公司或返回研究生学习。 基本上,我即将获得计算机科学学位,但是我不觉得自己已经学会了编程。我以为,加入一家公司并全职编程将使我有机会发展自己的技能,并向比我更富有经验的人学习,但我一直在努力寻找工作,并且开始感到沮丧。 我将扩大自己的网络,并超越我所长大的城市,但是其他处于类似情况的人试图做什么?我工作很努力,但是没有信心自己去写自己的应用程序。(也就是说,成为iPhone应用程序市场中的独立开发人员。)如果没有任何反应,我将需要考虑升级和学习更多的流行技能,或者尝试一些与IT无关的东西,但是经过我付出的所有努力,我觉得喜欢应付
1050 education 

30
您提高编程技能最有效的方法是什么?
回顾我作为程序员的职业生涯和生活,我有很多提高我的编程技能的方法-读取代码,编写代码,阅读书籍,收听播客,观看屏幕录像等等。 我的问题是:您做过哪些最有效的事情来提高您的编程技能?您会向想要改进的其他人推荐什么? 我确实希望在这里有各种各样的答案,而且没有一个“一刀切”的答案-我想知道对不同的人有用的方法。

28
我的老板决定在每个错误报告中都添加一个“负责人员”字段。我怎么能说服他这是一个坏主意?
在最新的“ WTF”举措之一中,我的老板决定在我们的错误跟踪模板中添加“ Person To Blame”字段将增加责任感(尽管我们已经可以将错误与功能/故事联系起来)。我认为这会降低士气,增加手指指向性并且不能解释报告为Bug的缺失/误解功能的说法是闻所未闻的。 我还可以使用其他一些反对这种做法的有力论据吗?有什么我可以与团队和老板分享的文章吗?

17
当要求您做出估算时如何应对?
作为程序员,我们经常被问到“需要多长时间”? 而且,情况几乎总是这样: 要求不清楚。没有人对所有含义进行深入分析。 新功能可能会破坏您在代码中所做的一些假设,并且您立即开始考虑可能需要重构的所有内容。 您从过去的工作中还有其他事情要做,您将不得不做出一个将其他工作考虑在内的估算。 “完成”的定义可能尚不清楚:何时完成?就像刚刚完成编码一样是“完成”,还是像“用户正在使用它”那样是“完成”? 无论您对所有这些事情有多有意识,有时您的“程序员的自尊心”都会使您付出/接受的时间比您最初预期的要短。特别是当您感受到截止日期和管理层期望的压力时。 其中许多是组织上或文化上的问题,这些问题不容易解决,但最终,现实是您被要求提供估计,他们希望您给出合理的答案。这是你工作的一部分。你不能简单地说:我不知道。 结果,我总是最终给出估计,后来我意识到自己无法实现。它发生了无数次,我始终保证不会再发生。但是确实如此。 您确定和提供估算的个人流程是什么?您发现哪些技术有用?



13
那么Singletons不好,那又如何呢?
最近,关于使用(和过度使用)Singleton的问题进行了很多讨论。我也是我职业生涯早期的那些人之一。我可以看到问题出在哪里,但是,在许多情况下,我看不到一个很好的选择-而且,很少有反辛格尔顿的讨论真正提供过这样的讨论。 这是我参与的一个近期重大项目的真实示例: 该应用程序是一个胖客户端,具有许多单独的屏幕和组件,它们使用来自服务器状态的大量数据,这些数据并不经常更新。该数据基本上被缓存在Singleton“管理器”对象中-可怕的“全局状态”。想法是在应用程序中拥有一个位置来保存和同步数据,然后打开的任何新屏幕都可以从那里查询它们的大部分需求,而无需从服务器重复请求各种支持数据。不断地向服务器请求会占用太多带宽-我说的是每周要多付数千美元的互联网账单,所以这是不能接受的。 除了基本具有这种全局数据管理器缓存对象之外,还有其他合适的方法吗?当然,此对象不一定要正式是“ Singleton”,但从概念上讲,成为一个对象确实有意义。这里有什么不错的清洁选择?


6
Facebook React与Web Components(聚合物)的优缺点
相较于即将发布的Web组件规范,Facebook的React有什么主要好处,反之亦然(或者与Google的Polymer库相比,也许更多的苹果之间的比较)? 根据这次JSConf EU演讲和React主页,React的主要好处是: 使用组件模型去耦和增加内聚力 抽象,组成和表现力 虚拟DOM和综合事件(这基本上意味着它们完全重新实现了DOM及其事件系统) 在IE 8上启用现代HTML5事件内容 服务器端渲染 可测性 绑定到SVG,VML和 <canvas> 除了这个虚拟DOM概念(显然)之外,几乎所有提及的内容都是通过Web组件本地集成到浏览器中的。我可以看到虚拟DOM和合成事件在今天对于支持旧的浏览器有何好处,但是不会扔掉大量的本机浏览器代码,而不是像从长远来看那样吗?就现代浏览器而言,这不是很多不必要的开销/重新设计吗? 我认为这是React缺少的一些内容,Web组件会为您提供帮助。如果我错了纠正我。 本机浏览器支持(请阅读“保证更快”) 以脚本语言编写脚本,以样式语言编写样式,以标记语言编写标记。 使用Shadow DOM进行样式封装 相反,React具有this,这需要使用JavaScript编写CSS。不漂亮。 双向装订
521 javascript  html 

30
为什么IT行业无法像其他行业一样快速交付大型,无故障的项目?
看完《国家地理》的MegaStructures系列影片后,令我感到惊讶的是大型项目的完成速度如此之快。在纸上完成了初步工作(设计,规格等)后,大型项目的实现本身仅需要数年甚至数月的时间。 例如,空中客车A380 “于2000年12月19日正式发射”,以及“于2005年3月上旬”已经对飞机进行了测试。大型油轮,摩天大楼等也是如此。 将此与软件行业的延迟进行比较,我不禁要问为什么大多数IT项目如此之慢,或更准确地说,如果有足够的人员,为什么它们不能在相同的规模下同样快速,无故障? 诸如空中客车A380之类的项目都具有以下两个特点: 重大的不可预见的风险:虽然这不是首架飞机,但它仍然推动了技术的极限,对于小型客机而言,运转良好的事物可能由于物理限制而不适用于大型客机;以同样的方式,使用了尚未使用的新技术,例如,当波音747于1969年制造时,它们就不可用了。 总体而言,与人力资源和管理相关的风险:项目中途退出的人们,因休假而无法联系到某个人,常见的人为错误等。 有了这些风险,人们仍然可以在很短的时间内完成像大型客机这样的项目,尽管交付延迟,但这些项目仍然取得了巨大的成功,而且质量很高。 在软件开发方面,这些项目几乎不如客机那么大和复杂(从技术和管理角度而言),而来自现实世界的不可预见的风险则要少一些。 不过,大多数IT项目进展缓慢且迟到,并且向项目中添加更多开发人员并不是解决方案(从十人的开发团队到2000个开发人员的团队有时可以更快地交付项目,有时不能,但是有时只会损害项目,并增加根本无法完成的风险)。 仍交付的那些可能通常包含很多错误,需要连续的服务包和定期更新(想象一下,每周在每架空客A380上两次“安装更新”,以修补原始产品中的错误并防止飞机坠毁)。 如何解释这种差异?是否仅由于软件开发行业还太年轻而无法在一个项目中管理成千上万的人,以便快速交付大规模,几乎无故障的产品?

19
我已经继承了20万行意大利面条代码-现在怎么办?
我希望这不是一个普遍的问题。我真的可以使用一些经验丰富的建议。 我刚刚在一家规模很小的科学家商店中担任唯一的“软件工程师”,他们在过去的10到20年中花了很多时间编写了庞大的代码库。(它是用一种几乎过时的语言编写的:G2-用图形来思考Pascal)。该程序本身是复杂的化学加工厂的物理模型。编写该程序的团队具有难以置信的深厚知识,但是很少或没有正式的编程基础培训。他们最近学到了一些关于不存在的配置管理的后果的艰难教训。代码本身中大量未记录的“污泥”的积累也极大地阻碍了他们的维护工作。我会避免给您这种情况的“政治”(总是 政治!),但足以说,就未来的道路需要什么没有达成共识。 他们要求我开始向团队介绍现代软件开发的一些原理。他们希望我介绍一些有关编码约定,生命周期管理,高级设计模式和源代码控制的行业标准实践和策略。坦白地说,这是一项艰巨的任务,我不确定从哪里开始。 最初,我倾向于在The Pragmatic Programmer或Fowler's Refactoring(“代码气味”等)的一些中心概念中对它们进行辅导。我也希望介绍一些敏捷方法。但最终,要想发挥作用,我认为我需要磨练5-7个核心基础知识。换句话说,他们可以实际开始实施的最重要的原则或实践是什么,这将使他们获得最大的“收益”。 因此,这就是我的问题:您将在最有效的策略列表中包括哪些内容,以帮助理顺意大利面(并在以后防止出现这种情况)?

21
由于对可能出了什么问题的了解增加而克服了缓慢的问题解决方法
这已经困扰了我一段时间了,非常感谢其他专业人员的投入。 背景简介:1988年,我父母给我买了我的第一台计算机(当时14岁,现在39岁),我开始编程。在1997年最终成为一名专业程序员之前,我遵循了其他一些职业道路。也许是后来者,但这就是事实。我仍然对自己的选择感到满意,我喜欢编程,并且我认为自己擅长于自己的工作。 最近,我注意到我获得的经验越多,完成项目或项目中某些任务所花费的时间就越长。我还不衰老。只是我已经看到了很多出错的不同方式。我知道并记得的潜在陷阱和陷阱正在越来越多。 一个简单的例子:过去只是“好吧,在这里写文件”。现在我担心的是权限,锁定,并发,原子操作,间接/框架,不同的文件系统,目录中的文件数量,可预测的临时文件名,PRNG中的随机性质量,任何中间的电源不足操作,我正在做的事情易于理解的API,适当的文档等,等等。 简而言之,问题早已从“我该怎么做”转移到“什么是最好/最安全的方法”。 结果是,我比新手花更长的时间来完成一个项目。我的版本可能是坚如磐石的,而且据我所知如何坚不可摧,但是需要更长的时间。 上面的“创建文件”示例仅是一个示例。实际任务显然更复杂,但不适合这种通用问题。希望您能理解我的发展方向。我想出高效的算法没有问题,我热爱数学,喜欢复杂的科目,专心致志。我认为我确实有经验上的问题,因此有对错误(内在或外在)的恐惧。 我每天花将近两个小时来阅读有关新开发,新技术,语言,平台,安全漏洞等的信息。难题在于,我获得的知识越多,完成项目的速度就越慢。 您如何处理?
450 experience  effort 

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.