Качество кода, квалификация программиста (а также связь этих понятий с GOTO и Дейкстрой)

Здесь выкладываем всё! Смешные картинки, истории, анекдоты, всё, что вызывает у вас смех.

Модератор: Модераторы разделов

frp
Сообщения: 1445
ОС: Debian Squeeze

Качество кода, квалификация программиста

Сообщение frp »

Использован этот перевод статьи Дейкстры: http://khpi-iip.mipk.kharkiv.edu/library/e.../pp/ewd215.html

Теорема: Квалификация среднестатистического программиста на Java или Javascript или на другом языке без goto стремится к бесконечности. Также стремится к бесконечности опыт программиста на любом языке ФП.
Доказательство:
По вышеприведенной ссылке:
квалификация программистов - функция, обратно зависящая от частоты появления операторов go to в их программах.

Тоесть квалификация=x/(частота_использования_goto). Т.е. если частоту использования goto устремить к нулю, то получим квалификацию, которая стремится к бесконечности независимо от x. Без особых извращений, о которых среднестатистический программист не знает, goto в Javascript сделать нельзя, значит, частота использования goto будет равна нулю, значит, квалификация программиста устремится к бесконечности что и требовалось доказать.

Следствие: Раз на Java и Javascript пишут такие квалифицированные программисты, то быдлокод на Java и Javascript существовать теоретически не может (:
Следствие 2: Раз быдлокод существовать не может, значит это браузеры тупые а не код если браузер пишет что в коде синтаксическая ошибка (:
Следствие 3: Если браузер заколбасило от Javascript значит это браузер кривой (: Закапываем коллективно Firefox, также все браузеры на движках Gecko и KHTML (:
Следствие 4: Если Javascript вызвал утечку памяти значит это браузер кривой (: Закапываем все браузеры с поддержкой Javascript :) Остаемся наедине с Lynx и w3m.
Следствие 5: Если Java-машину заколбасило от класса на Java, значит, это Java-машина плохая (: Закапываем машину от Sun, OpenJDK, JamVM, а также машину от мелкософта и все остальные машины (: Остаемся без Java (:
Следствие 6: Раз все реализации Java и Javascript кривые, то нужно писать на языках ФП. Закапываем императивные языки: C, C++, Ассемблер, а также все что на них написано (: А также закапываем RISC Intel микроассемблер, на котором написана прошивка Intel-процессоров (: Раз процессоры становятся неработоспособными без прошивки и программ на микроассемблере, то закапываем их тоже.
Следствие 7: Т.к. мы закопали интерпретаторы языков ФП (следствие 6 - закапывание всего что написано на императивных языках), а также все железо, способное исполнять программы (т.к. оно исполняет комманды на императивном языке), то забываем о компьютерах и программировании.

PS. Вы все еще уверены, что Дейкстра был прав на 100%?

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

PPPS. Ориентация смайлов изменена чтобы обойти лимит на их количество.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Качество кода, квалификация программиста

Сообщение diesel »

Код: Выделить всё

Communications of the ACM, Vol. 11, No. 3, [b]March 1968[/b], pp. 147-148.
Copyright (c) 1968, Association for Computing Machinery, Inc


таки надо делать скидку на год издания :)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Качество кода, квалификация программиста

Сообщение drBatty »

frp писал(а):
17.03.2010 21:49
Использован этот перевод статьи Дейкстры: http://khpi-iip.mipk.kharkiv.edu/library/e.../pp/ewd215.html

Теорема: Квалификация среднестатистического программиста на Java или Javascript или на другом языке без goto стремится к бесконечности. Также стремится к бесконечности опыт программиста на любом языке ФП.
Доказательство:
По вышеприведенной ссылке:

ну это всё от языка зависит.
а быдлокод можно встретить на любом ЯП. если в bash нет goto, то быдлокодеры его сделают, например:
while true;do #это GOTO
brake
#тут код

done # а это метка на которую передала управление GOTO.

сам видел такое :(
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Качество кода, квалификация программиста

Сообщение frp »

diesel писал(а):
17.03.2010 21:53

Код: Выделить всё

Communications of the ACM, Vol. 11, No. 3, [b]March 1968[/b], pp. 147-148.
Copyright (c) 1968, Association for Computing Machinery, Inc


таки надо делать скидку на год издания :)

1. Мы в юморе.
2. Найдите вменяемого опытного программиста не-ассемблерщика и не старой закалки, который поспорит с утверждениями Дейкстры насчет goto (да, есть программисты которые не согласны с тем, что goto должен быть удален из языка и с тем, что его использование во всех случаях неоправдано, но нет программистов, несогласных с тем, что goto нельзя использовать когда без него можно обойтись без значительных потерь быстродействия или читабельности кода)
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Качество кода, квалификация программиста

Сообщение Portnov »

frp писал(а):
17.03.2010 21:49
Тоесть квалификация=x/(частота_использования_goto). Т.е. если частоту использования goto устремить к нулю, то получим квалификацию, которая стремится к бесконечности независимо от x

Неверно. Если x тоже стремится к нулю, то результат может стремиться куда угодно. :)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Качество кода, квалификация программиста

Сообщение diesel »

frp писал(а):
17.03.2010 22:23
1. Мы в юморе.

да я заметил. я о том что надо делать скидку на то что статье больше сорока лет, и много воды с тех лет утекло. модные нынче ЯП и подходы собственно Дейкстре, как одному из основоположников "структурного программирования", во многом обязаны. Поэтому нет ничего странного что goto не в моде :)

frp писал(а):
17.03.2010 22:23
2. Найдите вменяемого опытного программиста не-ассемблерщика и не старой закалки, который поспорит с утверждениями Дейкстры насчет goto (да, есть программисты которые не согласны с тем, что goto должен быть удален из языка и с тем, что его использование во всех случаях неоправдано, но нет программистов, несогласных с тем, что goto нельзя использовать когда без него можно обойтись без значительных потерь быстродействия или читабельности кода)

В какой-то мере любовь к goto можно считать критерием вменяемости. По поводу значительных потерь быстродействия можно поспорить, вполне типичный для linux kernel пример(~/linux-2.6.34-rc1/scripts/dtc/srcpos.c - просто первый попавшийся, grep goto много найдет):

Код: Выделить всё

   if (fname[0] == '/') {
        file->file = fopen(fname, "r");
        if (!file->file)
            goto fail;

        file->name = strdup(fname);
        return file;
    }

    if (!search)
        search = &default_search;

    while (search) {
        if (dtc_open_one(file, search->dir, fname))
            return file;

        if (errno != ENOENT)
            goto fail;

        search = search->next;
    }

fail:
    die("Couldn't open \"%s\": %s\n", fname, strerror(errno));

если представить как это будет смотреться на asm'e, и соответственно выполнятся процессором - ниче так, живенько. код читаем. Хотя С - это почти ассемблер (: Кроме С goto еще активно любят в Basic'е, но про Basic Дейкстра отдельно заметил:
Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации


По поводу goto вспоминаются споры с несколькими преподами в универе, по поводу целесообразности применения этого оператора. Подробностей увы не помню. А еще с примера с goto нам в школе начали объяснять циклы, и за это я до сих пор благодарен. Сначала нам рассказали про то что делает goto, и скорее всего материал даже закрепили, а потом пришла очередь циклов. Фактически нам просто показали несколько примеров кода: с уже известным goto, и с while, until, for, которые делали одно и тоже, больше для понимания того что происходит и не нужно было. В учебниках вместо этого любят проводить всякие абстрактные логические построения, с минимумом примеров, как там уловить мысль с первого раза можно - вообще не представляю. Самое смешное, что учитель который нам это все рассказывал вовсе-то и учителем не был, просто программист(ка) с большим опытом работы.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Качество кода, квалификация программиста

Сообщение drBatty »

diesel писал(а):
18.03.2010 00:14

Код: Выделить всё

while (search) {
              if (errno != ENOENT)            goto fail;
}

fail:

причём тут goto? это типичный break

PS:
вот типичный быдлокод (мой), вот тут - да, власть GOTO:

Код: Выделить всё

#!/bin/sed -rf

N
/\n$/ b
h
s/\n.*//
t begin_loop
    :begin_loop
    /.{40}/ b end_loop
    s/([^ ]) ([^ ])/\1  \2/
    t begin_loop
    s/([^ ])  ([^ ])/\1   \2/
    t begin_loop
    s/([^ ])   ([^ ])/\1    \2/
    t begin_loop

g
P
D

:end_loop
G
s/\n.*\n/\n/
P
D

тут GOTO - это команды t и D
абсолютно нечитаемо, несопровождаемо, непонятно, неинтуитивно. не... быдлокод короче: непонятные прыжки из семи мест кода в другие два(и в коде меньше 10 строк, можно и в одну записать) - это ващехрензнаетчто. ага. за то коротко, и даже работает. ;)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 860
Статус: Оператор вычислительных машин
ОС: Debian

Re: Качество кода, квалификация программиста

Сообщение Janik »

frp писал(а):
17.03.2010 21:49
Следствие 5: Если Java-машину заколбасило от класса на Java, значит, это Java-машина плохая (: Закапываем машину от Sun, OpenJDK, JamVM, а также машину от мелкософта и все остальные машины (: Остаемся без Java (:

Давно пора. :)

Насчет GOTO: немного не согласен с Дейкстрой, потому что можно запутаться в коде и без GOTO.
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Качество кода, квалификация программиста

Сообщение frp »

Нашел еще одно следствие теоремы: у меня квалификация программирования на всем кроме турбопаскаля, бэйсика и ассемблера стремится к бесконечности. Просто я достаточно наюзался goto именно под этими языками. На других языках не юзал ни разу (если не считать реализацию goto на javascript при помощи быдлопрепроцессора).
Значит если 100 моих строк кода, написанных за 10 минут и неотдебаганых, сегфолтятся, то это значит что это плохой компилятор :) и плохая ОС и заодно плохая оперативка и процессор :) А самый лучший компилятор Borland C++ - сделанные на нем программы не сегфолтились :)
Спасибо сказали: