软件工程

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

22
在使用独特的编程语言的工作中是否有弊端?[关闭]
我刚从大学获得CS学位,所以我想找到一份工作,可以在其中学习更多有关该领域的知识并积累一些专业经验。 我曾在一家使用自己的内部编程语言的公司采访过,但我认为没有其他人会使用它。他们没有提到使用任何其他语言或将其用于开发环境。 从事这样的工作我应该担心什么?如果以后要换工作,是否会因为没有获得任何特定于语言的经验而不得不再次开始寻找入门级职位?

9
编码时如何通过分析克服瘫痪?
当我开始一个新项目时,我经常会立即开始考虑实现的细节。“我要在哪里放置DataBaseHandler?我应该如何使用它?要使用它的类应该从某些Abstract超类中扩展。发送请求和解析数据的方法?” 我最终停滞了很长时间,因为我想为可扩展性和可重用性编写代码。但是我觉得几乎不可能过去思考如何实现完美。 然后,如果我只想说“拧紧它,就完成它!”,我很快就会碰壁,因为我的代码没有组织好,混合了抽象级别,等等。 您有什么技术/方法来启动一个新项目,同时建立一个可以很好地扩展的逻辑/模块化结构? - -编辑- - 好吧,这已经是很难接受答案的问题类型了,但是希望获得更多反馈,看看是否有共识。TDD听起来真的很酷,坦率地说,我一直在意欲加快使用JUnit等的速度。与此同时,TDD的拥护者如何看待这一事实,即与TDD有关的合理点解决了我的问题?特别的问题是,TDD似乎并没有真正解决设计问题。当然,我同意TDD将帮助我定义我想做什么,然后我可以逐步研究如何做,但是有许多不同的总体设计模式/结构可以全部通过单元测试。就是这样:它测试单个UNITS。我想我有点困惑...我不知道。也许我' 谢谢!

5
“证明是程序;它证明的公式是程序的类型”
这可能是哲学上的问题,但我相信对此有一个客观的答案。 如果您阅读有关Haskell的维基百科文章,则可以找到以下内容: 该语言源于Haskell Curry及其知识分子后代的观察,即“证明是程序;它证明的公式是程序的类型”。 现在,我要问的是:这真的不适用于几乎所有的编程语言吗?Haskell的哪些功能(或一组功能)使其符合此声明?换句话说,此语句影响语言设计的主要方式是什么?
37 haskell 

8
我对第一份编程工作有什么期望?[关闭]
我刚刚被录用为我的第一份编程工作!我今年25岁,已经使用Java 6年了。 现在我被录用了,我很担心自己的技能不会达到雇主的期望。恐怕我会被分配到一个项目,并且不得不问很多我的同事会觉得是业余的问题。 这是理性的恐惧吗?您最初的编程工作经历是什么?我应该期待什么?你能给我什么建议? 谢谢。

17
我如何对自己的编程技能更有信心?[关闭]
编程对我来说并不陌生。我最初在12岁时开始做标记(HTML,现在请不要嘲笑我),在13岁时我开始做一些BASIC编程(此时我对Flowcharts,Pseudocodes非常了解),但后来我被告诫高中时期的生物学,因此错过了诸如C,Java等语言的“真实”编程知识。我为UG BE学习了CS(与BS类似,但更理论化)。我自己(在较小程度上)学习了C&C ++(我的教授感到非常痛苦,并且课堂上充斥着代码小丑(谁在学校已经学过了,因此没有注意课堂,也没有让像我这样的小凡人也不必专心听课)),并可以制作出很棒的加法或乘法程序(现在甚至是花木园的程序) 我的主要问题是,我总是对自己有限的编程技能感到不足和窒息,而对代码丑陋不屑一顾(相信我,我在很久以前就遇到过这个网站,但现在可能会鼓起勇气进行实际发布一个问题),有时甚至因上述无能而感到沮丧。大多数人说,编程不一定与语言有关,而是与人的心态以及他们用来解决问题/问题的技术有关。我同意这样的观点,但是我能获得这样的“心态”吗?如果这样的话,我应该如何进行“编程/编码”?如果有什么设定的方法和步骤可以最有效地达到“禅宗”呢?编码”。我该怎么做?同样,如果某些圣徒想指导这件被压倒的$#!^也不会有什么坏处。 PS:我将永远感激任何认为我值得他们度过时光的人,并且作为奖励,我将命名为我随他们发行的第一款软件。(如果我要运送一个,即) TL; DR:从未真正学习过“编程/编码”,即使我尝试也无法解决问题。帮我!

11
“ blub悖论”和c ++
我在这里阅读文章:http : //www.paulgraham.com/avg.html,有关“ blub悖论”的部分特别有趣。作为主要使用c ++编写代码但接触过其他语言(主要是Haskell)的人,我知道这些语言中的一些有用的东西很难在c ++中复制。问题主要是针对精通c ++和其他某种语言的人,您是否使用某种强大的语言功能或惯用语言,如果仅使用c ++编写则很难概念化或实现? 特别是这句话引起了我的注意: 通过归纳法,唯一能够看到各种语言之间功能差异的程序员就是那些理解能力最强的程序员。(这可能是Eric Raymond所说的Lisp,使您成为更好的程序员的意思。)由于Blub悖论,您不能相信其他人的意见:他们对碰巧使用的任何语言都感到满意,因为它决定了语言的正确性。他们对程序的思考方式。 如果事实证明我等同于使用C ++的“ Blub”程序员,那么就会引发以下问题:如果您遇到过其他语言所遇到的有用概念或技术,您会发现很难概念化在用C ++编写或“思考”? 例如,可以使用Castor库在c ++中实现在Prolog和Mercury等语言中看到的逻辑编程范例,但最终我发现从概念上讲,我在考虑Prolog代码,并在使用时转换为c ++等效语言。为了扩大我的编程知识,我试图找出是否存在其他类似的有用/强大习语示例,它们可以用其他语言更有效地表达,而我可能不是C ++开发人员。我想到的另一个例子是lisp的宏系统,从程序内部生成程序代码似乎对某些问题有很多好处。这似乎很难在c ++中实现和考虑。 此问题并非旨在进行“ C ++ vs Lisp”辩论或任何形式的语言战争类型辩论。提出这样的问题是我发现有可能找出我不知道的事情的唯一途径。

11
“有趣的评论”是不好的做法吗?[关闭]
我想问你在源文档中添加一些“复活节彩蛋”是否不专业。也许您已经阅读StackOverflow的民调源文档中有趣的评论,我曾亲自在许多这样的事情我在工作中的公共API文档中跌跌撞撞,包括搞笑的(或不)的东西(例如该弱BZZZTT !! 1!事情在Android公共文档中,我至少可以提供更多示例。 我不能对我自己有最终的意见,因为我自己有矛盾的论点。 赞成论点: 它可以使某人振作起来,并使他/她的一天变得更加有趣/更有效率。源代码的主要部分无论如何都不需要注释(如果项目正确完成),因为特定的方法(例如)是不言自明的,或者如果它是一堆奇怪的cr脚代码,则不能会以有意义的方式进行解释,因此开个有趣的笑话不会损害您可以从文档中获得的可能信息。 缺点参数: 如果您非常专心/沮丧,那么您最后需要做的就是愚蠢的笑话,而不是给您有关文档代码部分所需的信息,这只会使您更加沮丧。如果所有人都开始这样做,那么文档的外观将是一个可怕的想法。另外,开玩笑的人可能是唯一认为这很有趣/有趣/值得浪费时间阅读的人。 你怎么看?

2
如何保持基本技能免于萎缩?[关闭]
编码只是专业编程的一个方面。我的工作需要我编码,但也需要我做更长的时间–有时我不只是编码,甚至需要几天或几周的时间。 我担心在开会,绘制架构图和注释需求时,会让来之不易的编程技能萎缩。(更不用说我不信任人们编写不理解代码的需求。) 我不能只阅读有关编码的书籍和杂志。我在业余时间参与了一些开源项目,而stackoverflow和朋友们也有所帮助,因为我有机会帮助人们解决他们的编程问题而无需进行微管理,但是它们都不是结构化的,因此很容易工作首先是我可以轻松解决的问题。 我想我想找到的是一组结构化的练习(不在乎什么语言或环境)…… …我可以定期做 …有某种时间要求,所以我可以告诉我是否一直在忙 …有某种得分方式,所以我可以判断自己是否犯错 有这样的事吗?您将采取什么措施来保持技能的新鲜度?


8
有建筑气味吗?
Web上有大量参考和列出代码气味的资源。但是,我从未见过有关建筑异味的信息。这是在某处定义的,并且有可用的列表吗?是否已对架构缺陷及其对项目速度,缺陷等的影响进行了正式研究? 编辑:我并不是真正在答案中寻找清单,而是有关建筑气味的文档(在网络上或书籍中)。

11
人脑的随机数生成算法?[关闭]
您是否知道或已设计出任何实用的,易于学习的“头脑中”算法,从而使人们可以生成(有点“真实”)随机数?“头上”是指..优选地没有任何外部工具或设备。同样,期望高输出(每分钟许多随机数)。 在SO上询问此问题,但并没有引起太大兴趣。也许这更适合程序员。

7
C#开发人员-我尝试过Lisps,但我不明白。
经过几个月的关于Lisp,CL和Clojure的学习和使用,我仍然看不到有什么理由代替C#编写任何令人信服的理由。 我真的很想提出一些令人信服的理由,或者有人要指出我缺少的东西确实很大。 Lisp的优势(根据我的研究): 紧凑,富有表现力的符号-不仅是C#,是的...但是我似乎也可以用C#来表达那些想法。 对函数式编程的隐式支持-具有LINQ扩展方法的C#: mapcar = .Select(lambda) mapcan = .Select(lambda).Aggregate((a,b)=> a.Union(b)) 汽车/第一= .First() cdr / rest = .Skip(1)....等 Lambda和高阶函数支持-C#具有此功能,并且语法可以说更简单: “(lambda(x)(body))”与“ x =>(body)” Clojure中的“#(”与“%”,“%1”,“%2”很好 与对象分离的方法分派-C#通过扩展方法具有此功能 多方法分派-C#本身没有这种方法,但是我可以在几个小时内将其实现为函数调用 代码就是数据(和宏)-也许我没有“获得”宏,但是我没有看到一个不能将宏的概念实现为函数的示例。它不会改变“语言”,但我不确定这是一种优势 DSL-只能通过功能组合来实现...但是可以工作 无类型的“探索性”编程-对于结构/类,C#的自动属性和“对象”都可以很好地工作,并且您可以轻松地升级为更强大的类型 在非Windows硬件上运行-是吗?在大学以外,我只认识一个不在家中运行Windows或至少在* nix / Mac上运行Windows VM的人。(再说一次,也许这比我想像的要重要,我刚刚被洗脑了……) 自底向上设计的REPL-好的,我承认这确实非常好,我在C#中错过了它。 我在Lisp中缺少的东西(由于C#、. NET,Visual Studio,Resharper的混合使用): 命名空间。即使使用静态方法,我也喜欢将它们绑定到“类”以对它们的上下文进行分类(Clojure似乎有这个,CL似乎没有。) 强大的编译和设计时支持 类型系统允许我确定我传递的数据结构的“正确性” 拼写错误的内容会实时下划线;我不必等到运行时就知道 建议自动进行代码改进(例如使用FP方法代替命令式方法) GUI开发工具:WinForms和WPF(我知道Clojure可以访问Java GUI库,但是对我来说它们是完全陌生的。) GUI调试工具:断点,插入,逐步,值检查器(文本,xml,自定义),监视,按线程调试,条件断点,调用堆栈窗口,可以跳转到任意级别的代码在堆栈中 (为公平起见,我在Emacs + Slime方面的工作似乎提供了其中的一部分,但我偏爱VS GUI驱动的方法) …
37 clojure  lisp 

14
如果您在竞争对手的网站上发现漏洞,该怎么办?
在为我公司的项目工作时,我需要构建功能,以允许用户将数据导入竞争对手的站点/从我们的竞争对手的站点导入/导出数据。这样做的时候,我发现了一个非常严重的安全漏洞,总之,它可以在竞争对手的网站上执行任何脚本。 我的自然感觉是本着诚意向他们报告这个问题。利用这个问题来获得优势,这使我心烦意乱,但是我不想走这条路。 所以我的问题是,为了帮助他们,您是否会报告直接竞争的严重漏洞?还是闭嘴?有没有更好的方法来解决这个问题,也许至少可以从我通过报告问题来帮助他们的事实中获得至少一些好处? 更新(澄清): 感谢您到目前为止的所有反馈,我们非常感谢。如果我要补充一点,我要补充的是,所涉及的竞争是市场的庞然大物(在几个大洲有数百名员工),而我的公司才在几周前才成立(三名员工),您的答案是否会改变?不用说,他们绝对不会记得我们,并且,如果有的话,只会意识到他们的网站需要工作(这就是我们首先进入这个市场的原因)。 这可能是道德上或商业上的折衷之一,但我很欣赏所有建议。

30
20年前编程是如何进行的?[关闭]
如今,我们有许多编程辅助工具可简化工作,其中包括: 集成开发环境 调试器(逐行,断点等) Ant脚本等进行编译 像StackOverflow这样的网站可以帮助您解决编程问题 20年前,这些事情都不存在。人们使用了哪些工具进行编程,而没有这些更新的工具,他们又如何做?我有兴趣进一步了解当时的编程方式。
37 history 


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.