Подтвердить что ты не робот

Самое сложное объяснение программирования

Недавно я попытался объяснить плохо разработанный код моему менеджеру проекта. Все классы менеджера - это синглтоны ( "и поэтому я не могу легко изменить это" ), и в коде используется диспетчеризация событий везде, где хватило бы вызова функции ( "и почему его так сложно отлаживать" ). К сожалению, это просто появилось как неуклюжий беспорядок английского языка.

Самое сложное, что вам пришлось передать нетехническому человеку в качестве программиста? Вы нашли какие-либо аналоги или способы объяснения, которые стали более ясными?

4b9b3361

Ответ 1

Синхронизация потоков и блокировка мертвой точки.

Ответ 2

Проводите время по дизайну и тратите время на рефакторинг.

Рефакторинг не создает никакой видимой на клиенте работы, что делает работу с ней труднее всего оправдывать.

В качестве второй проблемы, "не видимой на клиенте", модульного тестирования.

Ответ 3

Меня спросили, как работает интернет - я ответил "SYN, ACK, ACK". Продолжайте забывать это SYN, SYN-ACK, ACK..

alt text
(источник: inetdaemon.com)

Ответ 4

Мой самый трудный вопрос начался невинно: моя подруга спросила, как текст отображается в Firefox. Я просто ответил на что-то вроде "движка рендеринга", Gecko, HTML-парсер, "бла-бла-бла".

Затем он пошел вниз. "Хорошо, как Гекко знает, что показывать тогда?"

Он резко перешел оттуда к графическим драйверам, операционной системе, компиляторам, аппаратным архитектурам и исходным 1 и 0. Я не только осознал, что есть значительные пробелы в моем собственном знании иерархии слоев, но и как, в конце концов, я оставил ее (и меня!) Более смущенной, чем когда я начал.

Я должен был сначала ответить "черепахи до конца" и застрять в этом.: P

Ответ 5

У меня был интересный пример, объясняющий, почему программа не вела себя так, как ожидалось, когда некоторые записи в базе данных имели пустые строки, а некоторые были NULL. Я думаю, что их голова только что взорвалась, когда я сказал им, что пустая строка - это всего лишь строка с 0 байтами, а NULL означает неизвестное значение, и поэтому вы не можете сравнить ее ни с чем.

После этого у меня была одна неприятная головная боль.

Ответ 6

1.) SQL: Мышление в наборах, а не процедурно (это достаточно сложно для нас, программистов, чтобы понять!).

2.)... и вот отличный пример демистификации технических концепций:

Как я объяснил REST моей жене

Ответ 7

Множество утверждений, начинающихся с "It because in Oracle, ...", приходят мне в голову.

Ответ 8

Самые большие препятствия - это "технологический долг", особенно о том, как архитектура была правильной для этой версии, но ее необходимо изменить для следующей версии. Это похоже на проблему объяснения "прототип против производства" и "версия 1.0 в сравнении с версией 2.0".

Худшая ошибка, которую я когда-либо делал, - это сделать макет UI в NeXT-шагах UI Builder. Он выглядел точно так же, как будет выглядеть конечный продукт и какое-то поведение. Попытка объяснить, что осталось 6 месяцев работы, оставшихся после этого очень.

Ответ 10

Почему код такой плохой:

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;
}

Обновить: что этот код должен быть:

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 $#@%#
}

Ответ 11

"Добавление нового программиста в месяц к этой поздней задаче заставит его отправиться позже. Ничего, прочитайте эту книгу". ( "Мифический человек-месяц" ). Менеджеры все еще не совсем поняли.

Ответ 12

Важность модульных тестов.

Ответ 13

Концепция рекурсии - некоторым людям это очень сложно.

Ответ 14

Мне иногда очень сложно объяснять концепцию ковариации/контравариантности и проблемы, связанные с ними с другими программистами.

Ответ 15

Убедив друга, что приложение Facebook, которое я разработал, действительно не хранит ее личные данные (например, имя), даже несмотря на то, что все еще отображает его.

Ответ 16

Почему для запуска этого приложения потребуется еще четыре недели. В конце концов, это займет всего неделю, чтобы сделать быстрый прототип. Он "работает" (или, по крайней мере, выглядит так, как есть), поэтому я должен быть в значительной степени закончен, не так ли?

Объяснения, которые включают безопасность, качество кода (ремонтопригодность), нормализованные схемы БД, тестирование и т.д., обычно отрываются как список абстракций, которые не имеют никакого видимого эффекта для приложения, поэтому трудно объяснить, что они на самом деле вносить вклад в проект и почему они необходимы. Иногда аналогии могут занять вас до сих пор.

Ответ 17

C указатели

* я

& я

Ответ 18

Предотвращение блокировки мертвой точки в многопоточной среде.

Я очистил путаницу, объяснив это визуально на белой доске, вычеркнув две параллельные линии и показывая, что происходит, когда достигаются одни и те же точки одновременно.

Также ролевая игра двух потоков с человеком, которого я объяснял, и используя физические объекты (книгу, кружку кофе и т.д.), чтобы показать, что происходит, когда мы оба пытаемся использовать что-то сразу.

Ответ 19

На самом деле нет правильного или неправильного ответа для этого... все это переживает.

Самая сложная вещь, которую я должен был объяснить нетехническому человеку, - это то, почему он не мог добраться до своего веб-сайта во время поездок за границу, но его член семьи, который жил там (с совершенно другим провайдером), мог добраться до него. Так или иначе, "Fail in Finland" был недостаточно хорош.

Ответ 20

Самые сложные концепции, объясняющие людей, которых я назвал бы программистам, в отличие от разработчиков, являются одними из самых основных парадигм объектно-ориентированного дизайна. В частности, абстракция, инкапсуляция и король, полиморфизм и способы их правильного использования.

Расширение этого уровня сложности объясняет, что такое инверсия управления и почему это абсолютная необходимость, а не только лишние слои кода, которые ничего не делают.

Ответ 21

Я собирался прокомментировать сообщение Микаэля, что некоторые люди просто берут последовательное программирование и, к сожалению, просто остаются с этим.

Но это действительно означает: два серьезно трудно объяснить понятия:

  • monads in haskell (обычно начиная с: "Это как функция, возвращающая функцию, которая делает то, что вы действительно хотели сделать, но..." )
  • отложенные в twisted/python ( "Это похоже... эхх... Просто используйте его в течение года или около того, и вы получите его";))

Ответ 22

Попытка объяснить, почему код был выполнен последовательно. По-видимому, это совсем не интуитивно для некоторых не-программистов (т.е. Моя подруга).

Ответ 23

Почему вы не нуждаетесь в правильной обработке индексов символов в большинстве случаев, когда вы используете строки UTF-8.

Ответ 24

Трудно объяснить, почему в большинстве программ есть ошибки. Многие нетехнические люди понятия не имеют, насколько сложным является программное обеспечение, и насколько легко игнорировать неожиданные условия. Они думают, что мы просто слишком ленивы, чтобы исправить вещи, которые, как мы знаем, сломаны.

Ответ 25

В мире существует 10 разных типов людей.

Люди, которые понимают Двоичные и людей, которые не...

Ответ 26

Говоря прямо, почему развитие - это самая сложная концепция, когда-либо подвергавшаяся человеческому виду. Не связан с каким-либо языком программирования, но в целом. И нет, я не пытаюсь обеспечить себя или вас импульсом эго, единственными реальными ограничениями в этой области являются ваш ум.

Почему? Мы не работаем с константами, и нет границ, единственная причина, по которой ИИ, который мыслит как человек, еще не существует, обусловлен нашими собственными ограничениями. Все остальные аспекты должны придерживаться какого-то закона, развитие не заботится о законах физики или каком-либо законе в этом отношении, следовательно, термин развитие... эволюция.