最困难的编程解释

Kai*_*Kai 19 theory

最近我试图向我的项目经理解释一些设计糟糕的代码.所有的管理器类都是单例("这就是为什么我不能轻易改变它")并且代码使用事件调度,函数调用就足够了("这就是为什么它很难调试").可悲的是,它只是一个笨拙的英语混乱.

您作为程序员向非技术人员传达的最困难的事情是什么?您是否发现任何类比或解释方法使其更清晰?

Jus*_*ner 30

线程同步和死锁.

  • 很简单,想象几把锤击中同一个钉子,蒙上眼睛,或者将一组钉子放在一起,试图同时锤击它们.不会工作,或者不会很快.你需要一些方案/计划/仲裁来处理它.:) (21认同)
  • 解释它很困难; 调试它需要一个全新的"困难"定义:P (4认同)

Dea*_*n J 25

花时间在设计上,花时间在重构上.

重构根本不会产生客户端可见的工作,这使得项目中最难以证明工作的合理性.

作为第二个"非客户可见"问题,单元测试.

  • 当你改变某些东西并且它不再起作用时它会被看到. (7认同)

OMG*_*ies 18

我被问到互联网是如何工作的 - 我回答"SYN,ACK,ACK".不要忘记它的SYN,SYN-ACK,ACK ..

alt text http://www.inetdaemon.com/img/internet/3-way-handshake.gif

  • 而且我认为之后是WTF. (18认同)

Mag*_*sol 14

我最困难的问题开始得天真无邪:我的女朋友询问如何在Firefox中呈现文本.我简单回答了"渲染引擎,Gecko,HTML解析器,等等等等."

然后它走下坡路."那么Gecko怎么知道该展示什么呢?"

它从字面上逐渐下降到图形驱动程序,操作系统,编译器,硬件组合以及原始的1和0.我不仅意识到我自己对分层结构的了解存在重大差距,而且最终还是让我(和我!)比我开始时更加困惑.

我应该最初回答"乌龟一路走下去"并坚持下去.:P

  • 你有一个女朋友在Firefox中询问文字渲染吗?极客! (19认同)
  • +1"Turtles all down down" - 这是大多数计算机问题的最佳答案. (8认同)

Ken*_*ack 11

我有一个有趣的案例,试图解释为什么当数据库中的某些记录有空字符串且有些记录为NULL时程序没有按预期运行.当我告诉他们空字符串只是一个包含0个字节的字符串时,我认为他们的头部爆炸了,而NULL意味着未知值,所以你实际上无法将它与任何东西进行比较.

后来我有一个令人讨厌的头痛.

  • +1 ...之前我有过这个,尤其是SQL - "它们都是空的,为什么它们不相等呢?" (6认同)

dav*_*vek 10

1.)SQL:在集合中思考,而不是在程序上思考(对于我们的程序员来说,这很难掌握!).

2.)......这是揭开技术概念神秘面纱的一个很好的例子:

我如何向妻子解释REST


Eri*_*ler 9

"It's because in Oracle, ..."我想到了许多开头的陈述.


Rob*_*rne 9

最大的障碍是"技术债务",尤其是关于该版本的架构是如何正确的,但需要针对下一版本进行更改.这类似于解释"原型与生产"和"1.0版与2.0版"的问题.

我做过的最糟糕的错误是在NeXT步骤UI Builder中进行UI模型.它看起来与最终产品看起来完全一样并且有一些行为.试图解释在那之后剩下6个月的工作是非常困难的.


Jas*_*yon 6

递归如何工作......

  • http://stackoverflow.com/questions/1627018/most-difficult-programming-explanation/1627060#1627060 (18认同)
  • 您应该首先解释递归的工作原理 (5认同)

Mus*_*sis 5

为什么这样的代码很糟糕:

private void button1_Click(object sender, EventArgs e)
{
    System.Threading.ThreadStart start = 
        new System.Threading.ThreadStart(SomeFunction);
    System.Threading.Thread thread = new System.Threading.Thread(start);
    _SomeFunctionFinished = false;
    thread.Start();
    while (!_SomeFunctionFinished)
    {
        System.Threading.Thread.Sleep(1000);
    }
    // do something else that can only be done after SomeFunction() is finished
}

private bool _SomeFunctionFinished;
private void SomeFunction()
{
    // do some elaborate $#@%#
    _SomeFunctionFinished = true;
}
Run Code Online (Sandbox Code Playgroud)

更新:此代码应该是什么:

private void button1_Click(object sender, EventArgs e)
{
    SomeFunction();
    // do something else that can only be done after SomeFunction() is finished
}

private void SomeFunction()
{
    // do some elaborate $#@%#
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么不好? (4认同)
  • @Liran:我添加了代码*应该是*.请注意,没有线程无意义,它会变得多么简单.我不仅难以向非技术人员解释这一点,我无法让代码的原始作者理解为什么它如此糟糕和毫无意义.他一直坚持认为多线程应用程序比单线程应用程序更好. (2认同)

Ale*_*man 5

"为这个迟到的任务增加一个月的新程序员将使它能够在以后发布.没关系,请阅读本书." (神话人月.)管理者仍然不太明白.