你曾经工作过的最具挑战性的开发环境是啥?你做了啥来克服这些限制?
Posted
技术标签:
【中文标题】你曾经工作过的最具挑战性的开发环境是啥?你做了啥来克服这些限制?【英文标题】:What is the most challenging development environment you've ever had to work in and what did you do to get around the limitations?你曾经工作过的最具挑战性的开发环境是什么?你做了什么来克服这些限制? 【发布时间】:2009-03-29 16:21:02 【问题描述】:我所说的“具有挑战性的开发环境”并不是指你在一艘上下摇晃的小船上,有人拿着枪指着你的头。我的意思是,您可以使用的工具是否使问题变得困难?
开发通常是一个代码循环,运行,观察结果,重复。在某些环境中,这是一个非常快速且无痛的过程,但在其他环境中,这是非常困难的。我们最终使用了一些小技巧来帮助我们观察结果并更快地运行代码。
我正在考虑这个问题,因为我刚开始使用 SSIS(SQL Server 2005/8 中包含的 ETL 工具)。取得进展对我来说非常具有挑战性,主要是因为没有关于所有对话框含义的指导,还因为错误非常神秘,而且大多数时候并没有真正告诉你问题是什么。
我认为我必须使用的最简单的环境是 VB6,因为您可以在应用程序运行时编辑代码,并且它将继续使用您的新代码运行!您甚至不必再次运行它。这可以为您节省大量时间。令人惊讶的是,在带有 Java 代码的 Netbeans 中,您也可以这样做。它退出该方法并使用新代码重新运行该方法。
在 SQL Server 2000 中,当触发器中出现错误时,您不会获得堆栈跟踪,这使得定位问题发生的位置变得非常棘手,因为插入可能会产生级联效应并触发许多触发器。在 Oracle 中,您会得到一个非常漂亮的带有行号的小堆栈跟踪,因此解决问题非常容易。
我看到的一些东西确实有助于定位问题:
-
出现问题时的良好错误消息。
出现问题时提供堆栈跟踪。
调试环境,您可以在其中暂停,然后输出变量的值并按照执行路径执行步骤。
一个图形化调试环境,在代码运行时显示代码。
一个屏幕,可以显示变量的当前值,以便您可以打印到它们。
能够在生产系统上打开调试日志记录。
您见过的最糟糕的情况是什么?可以做些什么来绕过这些限制?
编辑
我真的不打算让这成为火焰诱饵。我真的只是在寻找改进系统的想法,这样如果我正在创造一些东西,我会考虑这些事情,而不是为人们的问题做出贡献。我也在寻找解决这些限制的创造性方法,如果我发现自己处于这个位置,我可以使用这些方法。
【问题讨论】:
给我讲个故事...你可能会觉得thedailywtf.com很有帮助... 这个问题太笼统了,主观性很强。 你不能同时拥有它...是好的错误消息还是堆栈跟踪号 1? 我认为我永远不会理解社区 Wiki 的“主观和争论”的东西。如果没有人获得代表,它有什么害处? 投票重新开放,这是一个有效的问题并且是 CW。 【参考方案1】:我正在为客户修改Magento。关于 Magento 系统如何组织的信息很少。有数百个文件夹和文件,至少有上千个视图文件。 Magento 论坛提供的支持很少,我怀疑缺少信息的主要原因是 Magento 的创建者希望您付费让他们成为经过认证的 Magento 开发人员。另外,去年那个时候还没有 *** :)
我的第一个任务是弄清楚数据库架构是如何工作的,以及哪个表存储了我正在寻找的一些属性。 Magento 中有超过 300 个表,我不知道 SQL 查询是如何完成的。所以我只有一个选择...
我使用 phpMyAdmin 将整个数据库(300 多个表和至少 20,000 行 SQL 代码)导出到一个 .sql 文件中,然后我将该文件“提交”到颠覆存储库中。然后,我使用 Magento 管理面板对数据库进行了一些更改,并重新下载了 .sql 文件。然后,我使用 TortioseSvn 运行 DIFF,并滚动浏览 20k+ 行文件以查找哪些行已更改,哈哈。听起来很疯狂,但它确实奏效了,我能够弄清楚我需要访问哪些表。
我的第二个问题是,由于疯狂的目录结构,我不得不同时 ftp 到大约 3 个文件夹以进行微不足道的更改。所以我不得不保持我的 ftp 程序的 3 个窗口打开,每次都在它们和 ftp 之间切换。
第三个问题是弄清楚 url 映射是如何工作的,以及我想要的一些代码存储在哪里。在这里,幸运的是,我设法找到了我正在寻找的 Model 类。
主要是靠运气和其他类似的疯狂冒险,我设法完成并完成了这个项目。从那时起,*** 就开始了,通过对 this bounty question 的有用回答,我终于能够获得有关 Magento 的足够信息,以便我可以以一种不那么疯狂的方式(希望如此)来完成未来的项目。
【讨论】:
很高兴我最后一个项目选择了 Drupal+Ubercart 而不是 Magento 很好的解决数据库问题。【参考方案2】:尝试在 Fortran 中键入您的卡片组,并使用 IBM JCL(作业控制语言)完成,在数据中心窗口上交,第二天早上回来,得到一英寸厚的打印纸,十六进制转储为您的崩溃,以及您帐户的费用清单。
在你的指甲上长出头发。
我想这是对坐在控制台前、切换开关和阅读灯的先前方法的改进。
【讨论】:
【参考方案3】:在 400x 晶片网络上发生。由于只有一台晶片机可以输出到控制台调试是一场噩梦。必须在 Sun 网络上构建测试工具。
【讨论】:
【参考方案4】:我有一次上过一门课,它大致基于SICP,除了它是在 Dylan 而不是 Scheme 中教授的。实际上,它是在旧的 Dylan 语法中,基于 Scheme 的前缀语法。但是因为那个旧版本的迪伦没有翻译,教授写了一个。在爪哇。作为一个小程序。这意味着它无法访问文件系统;您必须在单独的文本编辑器中编写所有代码,然后将其粘贴到 Dylan 解释器中。哦,当然,它没有调试工具。作为一个用 Java 编写的 Dylan 解释器,这是在 2000 年,它非常慢。
涉及打印语句调试、大量复制和粘贴,以及对解释器的大量诅咒。
【讨论】:
天啊,可怜的家伙。那一定很糟糕。【参考方案5】:早在 90 年代,我就在使用 Clipper(一种可编译的类似 dBase 的语言)开发应用程序。我不记得它是否带有调试器,我们经常使用名为“Mr Debug”的第 3 方调试器(真的!)。尽管 Clipper 很快,但我们的一些更密集的例程是用 C 编写的。如果您向正确的神祈祷并说出必要的咒语,您可以使用 Microsoft 的 CodeView 调试器来调试 C 代码。但通常不会超过几分钟,因为程序通常不喜欢花太多时间在 CodeView 上运行(通常是内存问题)。
我有一系列 makefile 开关,用于将我当时不需要调试的代码部分存根。我的调试环境非常稀疏,因此程序有尽可能多的可用内存。我也觉得我当时喝多了……
【讨论】:
Mr.Debug 是 Clipper 的一个很棒的第 3 方插件,但我想说它是由我共同创立的一家公司制作的。 ;-)【参考方案6】:几年前,我对游戏复制保护进行了逆向工程。因为保护是用 C 或 C++ 编写的,所以它们很容易反汇编并理解发生了什么。但是在某些情况下,当复制保护绕道进入内核以混淆正在发生的事情时,它会变得很棘手。他们中的一些人还开始使用定制的虚拟机来降低问题的可理解性。我花了几个小时编写钩子和调试器以便能够追踪它们。环境确实提供了竞争和创新的思想。我可以使用一切以节省时间。错误导致重新启动并且很少反馈出了什么问题。我意识到在行动之前思考通常是更好的解决方案。
今天我鄙视调试器。如果问题出在我可见的代码中,我发现使用详细日志记录最容易。 (有时错误是不了解接口/环境,那么调试器就很好。)我也意识到时间很重要。您需要有一个良好的工作环境,可以立即测试您的代码。如果你的编译器需要 15 秒,你的环境需要 20 秒来更新,或者你的缓存需要 5 分钟来清除,找到另一种方法来测试你的代码。进步让我保持动力,如果没有良好的工作环境,我会感到无聊、愤怒和沮丧。
【讨论】:
【参考方案7】:我的上一份工作是 Sitecore 开发人员。如果错误仅发生在客户端系统上,并且他们没有在系统上安装 Visual Studio,远程调试关闭,并且问题仅发生在生产服务器(而不是临时服务器)上,那么修复错误可能会非常痛苦。
【讨论】:
【参考方案8】:最近记忆中最糟糕的是使用 Dundas 控件开发 s-s-rS 报告。我们对需要编码的网格做了很多工作。痛苦是控件的错误,以及缺乏调试支持。
我从来没有绕过这些限制,只是克服了它们。
【讨论】:
“相当”后面好像少了一个字。以上是关于你曾经工作过的最具挑战性的开发环境是啥?你做了啥来克服这些限制?的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.net 中,基于角色访问页面/功能/菜单的最具可扩展性的方式是啥?