软件工程

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

13
如何留住学生/实习程序员?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我们部门有一个小团队,通常雇用1-3名学生/实习生。我们的问题是保留。我们希望招募一个学生,而这个学生将在整个暑假中停留超过团队。问题是,尽管我们雇用了最后4名学生,但我们事先与他们进行了讨论,最终他们都比我们希望的要早离开。 双方的关系都以一种良好的方式结束,学生要么在大学里获得助教或研究职位,要么继续从事更大更好的事情。这都是可以理解的,我们不反对他们做对他们最有利的事情。 但是我的看法是不同的,因为我在本科期间在本系工作了2年,从那时起,我就全职工作了。 我们如何留住学生?我们为他们提供所需/想要的硬件,我们以他们认为合适的方式(在合理的范围内)为他们提供解决的问题。总的来说,对于一名学生程序员来说,这种工作是如此的灵活和出色,我看不到有人愿意离开。 有什么想法吗?
13 hiring 

4
如何跟踪团队看板中的质量属性?
我的团队使用看板系统来跟踪日常进度,并且对于理解功能(捕获为用户故事)的进度非常有效。随着我们开发功能的发展,直到最近,我们在很大程度上允许我们的系统设计出现。在过去的两周中,我们就与性能和可修改性质量属性特别相关的架构取舍进行了多次讨论。 我认为正在发生的事情是在实现功能和设计系统时,我们在隐式地做出有关体系结构的决策,而不是根据我们已知的质量属性要求来考虑这些决策。如果我能够跟踪/捕获/直观地描述这些重要的设计决策是如何做的,那么团队成员将有更好的机会在实施系统时不给系统架构带来额外的压力,这真是太好了。当然,更复杂的是,我们板上的功能并非仅能发挥功能,有时会掩盖架构的复杂性! 如何在团队看板上直观地跟踪质量属性(或其他与体系结构相关的决策)的进度?

4
尝试向命令式程序员讲解声明式编程时,有哪些好的做法?
我愿意在我的公司做一些F#的培训,他们似乎表现出了一些兴趣。他们通常是VB6和C#程序员,他们对编程的热情不高。话虽这么说,当您考虑功能问题时,我觉得编写正确的代码会更容易,因此他们一定会从中受益。 谁能提供一些有关我应该如何处理此问题的建议? 主意 不要专注于语法,而应该专注于如何使用该语言及其所推广的习语。 试想一下以命令式方式编写的示例很痛苦,但是以声明式方式编写时却转换为优雅的代码。

4
如何真正掌握MySQL?
我使用mysql的时间与使用PHP的时间相同。但是我对PHP的信心提高了10倍;或任何其他编程语言。但是我似乎无法真正掌握SQL。我的意思是,我可以选择,更新,插入,删除,加入等,但是涉及到更复杂的内容时,我会迷失方向。如何编写更复杂的select语句,如何正确使用索引,使用哪个引擎等。 由于某些原因,我真的很难遵循mysql文档,但是php易于遵循。 我开始认为,也许我的大脑只是以某种方式使编程成为可能,但是SQL却使人困惑。我不知道。大多数人认为Regex是如此令人困惑,但对我而言,它比如何构造sql语句更具科学意义。请不要误会我的意思,我不是讨厌SQL,我真的很喜欢它,我只是想更好地理解它。 真正掌握MySQL的最佳/最快方法是什么? 当我说“大师”时,我并不是指大师中的大师,我的意思是足够聪明,可以在不需要帮助的情况下解决我对SO提出的大多数问题。
13 mysql 

3
获得Beta测试人员的最佳方法是什么?
我有几个即将发布的项目,包括商业和开源项目。这些项目都是可下载的,而不是Web应用程序。我自己研究过它们,并且希望在测试期间获得反馈,但是我目前听众并不多(尽管市场很大)。参与测试版的最佳方法是什么?有没有我可以联系到的专门从事软件测试的现有站点或社区?在这一点上,我正在专门寻找技术测试人员,这些测试人员不要胆怯地深入到代码中,并且可以帮助发现安全性错误,逻辑错误等。 编辑:我正在寻找类似于“ 邀请共享”的网站或社区。Invite Share本身是完美的,但是似乎没有关于如何提交Beta的任何公开信息。 赏金解释: 尽管Joel关于运行Beta的文章很有帮助,但我想知道是否没有现有的社区可以进行任何形式的Beta测试(技术或用户)。作为一名自学成才的开发人员,我没有很多适合进行测试的技术联系方式。几个月前,我确实在51区提出了一个Beta测试站点,但似乎它要么被掩埋了,没有引起太多兴趣,或者不适合StackExchange。如果您了解现有的测试社区,InviteShare之类的网站或其他获取测试人员的方法,请分享。
13 beta 

10
存在哪些编程/软件亚文化?是什么定义了它们?你属于哪一个?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 在外部世界,程序员,计算机科学家,软件工程师和开发人员似乎都相似,但是对于以软件为生的人们而言,情况远非如此。任何一个程序员的能力和知识以及他们的工具(操作系统,语言,是的,首选的编辑器)的范围都非常广泛,多样性产生了软件中的许多亚文化-例如积极使用Stack Overflow和此站点的程序员,与更多的人没有。 我很想知道其他人所遇到的,属于,钦佩,不喜欢甚至创造的软件亚文化。对于初学者,我遇到了: Microsoft驱动的公司和开发人员:他们的整个堆栈来自华盛顿州雷德蒙德。电子邮件就是Outlook。网络是IE和IIS。他们拥有MS Developer Network订阅的大型装订程序,其中包含VB,.net,Visual Studio等的多个版本。避免使用Shell /命令行。看不到开源之类的大惊小怪。以MS为中心的公司通常是9-5,并且完全是公司(由业务经理而不是软件人员驱动)。如今(鉴于非MS工具的广泛使用),这是黑客文化的对立面。 老式的CS人士:他们对Lisp和Unix非常了解;有时,他们可能自己写了半流行的Lisp或系统实用程序。很少有(如果有的话)“软件工程”对他们来说不是新鲜事物,也没有给他们留下深刻的印象。了解Lisp,C,Prolog和Smalltalk等编程语言的参考,历史和更高层次的含义。对于80年代和90年代的AI结果可能会感到痛苦。倾向于成为Emacs用户。可以键入多行shell命令而无需眨眼。他们的建议可以含糊不清,但一旦被理解,就会包含金。 新学校的Web开发人员:随着计算机和视频游戏的发展,他们通常只是在90年代末或00年代初才真正开始编程。适应1到1.5种脚本/动态语言;认为C / Ruby / Perl / Python之外的语言是不必要/不可思议的。最初可能将HTML视为编程。倾向于购买Mac,并对它狂热/不理性。使用框架多于构建框架。对NoSQL和/或Ruby On Rails常常过于热情。 新派CS:大量的统计学,贝叶斯模型和推理训练;不要说“ AI”,不要说“机器学习”。Java比Lisp多,但也可以是Haskell专业程序员。他们所在领域的专家(Google,金融/ Quant)看到的在现实世界中取得的重大成就通常会使他们(过度)充满信心。但是大数据以及此类数据的分布式处理确实正在改变世界。 上面的示例绝不是完整,正确,正交或客观的。:)就是我亲眼所见,并提供了一些更广泛的问题的讨论和提纲。随时不同意!
13 culture  social 

3
对于初学者内核黑客来说,有什么有趣但又不太困难的项目?
在学习了操作系统课程之后,我对扩展我对Linux内核的了解以及练习使用大型系统感兴趣。我可以尝试哪些有趣但又不太困难的项目? 编辑:我对内核做了些什么背景。 实施了新的计划政策 已实现的用户线程和相应的互斥体库(不是真正的内核黑客,而是包含了内核相关的理论)
13 linux  kernel 

6
我应该为我的项目选择什么许可证?
最初在阅读有关wordpress(专业wordpress)的书时想到了创意共享,我了解到我还应指定提供 ...没有任何保证;甚至没有针对特定目的的适销性或适用性的暗示保证 他们推荐了GNU GPL。如何写许可证或选择1? 顺便说一句,MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE实际上是什么意思?没有保修还不够吗?
13 licensing 

6
您如何为项目创建软件过程?
正如我在其他问题中所写的那样,我正在从事的项目现在没有软件过程。这意味着没有文档(包括硬拷贝要求或规范),没有源代码控制,没有错误数据库,(已修复)错误(希望)并且同时添加了新代码,也没有正式的测试人员-我们将在Joel测试中失败太糟糕了,甚至都不好笑。 昨天,我的经理要我写一份有关如何解决这些缺陷的文档。请注意,我只是一个实习生,在这里工作了6个月。我将在十一月感恩节左右回到学校。但是,我认为我也许可以使这个项目朝着正确的方向发展,但是我不确定从哪里开始。我目前正在使用CiteSeer和Wikipedia来查找一些描述软件过程并实现它们的论文,但是任何建议,个人经验或指向博客,论文,Wiki文章或其他任何内容的链接都将不胜感激。

2
清洁架构:什么是视图模型?
鲍勃叔叔在他的《清洁架构》一书中说,主持人应该将收到的数据放入他称为“视图模型”的东西中。 这与Model-View-ViewModel(MVVM)设计模式中的“ ViewModel”是一样的吗,还是简单的数据传输对象(DTO)? 如果不是简单的DTO,它与View有何关系?视图是否通过观察者关系从视图获取更新? 我的猜测是它更像是MVVM中的ViewModel,因为罗伯特·马丁(Robert Martin)在他的书的第23章中说: [演示者]的工作是接受来自应用程序的数据并对其进行格式化以进行演示,以便View可以将其简单地移动到屏幕上。例如,如果应用程序希望在字段中显示日期,它将向Presenter传递Date对象。然后,Presenter会将数据格式化为适当的字符串,并将其放置在称为View模型的简单数据结构中,View可以在其中找到它。 这意味着View以某种方式连接到ViewModel,而不是简单地将其作为函数参数接收(例如DTO就是这种情况)。 我认为这是因为,如果您查看图像,演示者将使用视图模型,而不是视图。演示者同时使用输出边界和输出数据DTO。 如果既不是DTO也不是MVVM中的ViewModel,请详细说明它是什么。

1
跨多个微服务跨数据搜索
我在微服务和旧数据库之间分配了某个域的数据。我的搜索跨越了旧版和微服务数据库上的字段。以前(在拆分微服务之前),它是通过1个sql查询完成的。现在,我需要一个REST调用和一个对旧数据库的查询来提供此搜索功能。我们在这里谈论的是几百万行。我怎样才能做到最好?由于数据量大,REST调用通常也会返回分页结果。激发SQL调用并将结果与​​REST响应合并和合并的幼稚方法太慢且不切实际。

2
为什么glibc与GCC分开维护?
GCC是C编译器。Glibc是C库。但是,对于作为C实现捆绑在一起的编译器和标准库,这不是绝对必要吗? 例如,C库包含ABI和编译器具体的东西等<limits.h>,<stdint.h>等,编译器和API之间而不同。诸如“如何调用主函数”之类的细节也取决于编译器,但实际上,这些细节是由libc.soLinux系统提供的。例如,如果我更改编译器以使其与另一个ABI一起使用,例如使用int8个字节,则C库将不再起作用,因为其中的内容<limits.h>将变得错误。
13 c  gcc 

1
根据语法编写词法分析器时应遵循的步骤是什么?
在阅读有关语法,词法分析器和语法分析器的澄清问题的答案时,答案指出: BNF语法包含词法分析和解析所需的所有规则。 这对我来说有点奇怪,因为直到现在,我一直认为词法分析器根本不基于语法,而解析器则很大程度上基于语法。在阅读了许多有关编写词法分析器的博客文章之后,我得出了这个结论,而从来没有人使用1 EBNF / BNF作为设计基础。 如果词法分析器以及解析器都基于EBNF / BNF语法,那么如何使用该方法创建词法分析器呢?也就是说,如何使用给定的EBNF / BNF语法构造词法分析器? 我见过很多,很多的职位,应对写的用EBNF / BNF作为指导或蓝图解析器,但我已经遇到没有到目前为止,显示与词法分析器的设计相当。 例如,采用以下语法: input = digit| string ; digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; string = '"', { all characters - '"' …

4
将数据值硬编码到程序中是否有优势?
我是一个自学成才的新手程序员,因此,如果我不喜欢程序员的话,我深表歉意。 我正在从事一个项目,在该项目中,我将向开发人员提供不断更新的数据,这些开发人员实际上将创建一种工具,用于根据对数据的查询生成报告。 似乎每个参与人员都认为他们需要将数据值(不是模式,而是域/值本身)硬编码到报告生成程序中。 例如,假设我们正在报告人员情况;该报告将分为几类,每个部门都有一个标题,然后在每个部门标题下将是职务的子标题,然后在每个子标题下将是雇员列表。开发人员希望对部门和职位进行硬编码。另一方面,我认为他们可以/将在运行时查询这些事情,对它们进行排序,并根据存在的值动态生成报告标题。 由于潜在价值的列表将随着时间而变化(例如,将创建/重命名部门,将添加新的职务),因此需要不断更新代码。在我看来,我们可以跳过代码维护步骤,并动态组织报告。 由于我不是开发人员,所以我想知道自己缺少什么。将值硬编码到这样的工具中可能有什么优势?这通常是程序的设计方式吗?

1
为什么建议在Flask.run上使用flask CLI?
在Flask 0.11中flask,引入了CLI。docs和changelog都建议这样做。 开发服务器文档: 从Flask 0.11开始,有多种内置方法来运行开发服务器。最好的一个是flask命令行实用程序,但是您也可以继续使用该Flask.run()方法。 命令行 强烈建议使用flask命令行脚本(命令行界面)进行开发,因为由于其加载应用程序的方式,它提供了卓越的重新加载体验。基本用法是这样的: $ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run 更新日志: 添加flask了flask.cli用于通过单击CLI系统启动本地调试服务器的模块。与旧flask.run()方法相比,建议使用此方法,因为它采用不同的设计,因此可以更快,更可靠地工作,并且可以替代Flask-Script。 到目前为止,我还没有注意到这种“高级重装体验”。我看不到在自定义脚本上使用CLI的意义。 如果使用Flask.run,我只需编写一个python文件: #!/usr/bin/env python3 from my_app import app if __name__ == '__main__': app.run(debug=True) 如果使用CLI,则必须指定环境变量。在CLI文档中声明可以将其集成到activatevirtualenvwrapper脚本中。我个人认为这是应用程序的一部分,并认为它应该在版本控制下。las,需要一个shell脚本: #!/usr/bin/env bash export FLASK_APP=my_app:app export FLASK_DEBUG=1 flask run 当然,任何Windows用户开始协作后,都将附带一个附加的bat脚本。 同样,第一个选项允许在启动实际应用之前使用Python编写的设置。 例如,这允许 在Python中解析命令行参数 在运行应用程序之前设置日志记录 他们似乎在提倡添加自定义命令。我看不出为什么这比编写简单的Python脚本更好,为什么可以通过入口点公开这些脚本。 通过Python运行脚本使用已配置的记录器时的示例记录输出: $ ./run.py DEBUG …
13 python  flask 

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.