November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Monday, October 5th, 2009 04:00 pm

откуда берётся столько быдлокодеров на PHP. А вот откуда.

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

Правильно кто-то написал в комментах: слишком низкий порог вхождения..

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Monday, October 5th, 2009 03:58 pm (UTC)
Я бы вот Паскаль как раз запретил в качестве учебного языка. Базовую алгоритмистику на нем, может, и проще преподавать, чем на [put your favorite tongue here], но так как язык не "чист", у людей формируется какое-то совершенно превратное представление о том, "как же оно на самом деле работает". Люди пишут "var" в function declaration и не понимают, что за этим стоит указатель; пишут func_name := value вместо return (value) и не понимают, как именно происходит возвращение; не могут впоследствии объяснить calling conventions и почему работает printf() в Си с переменным числом аргументов; не понимают сути lvalue vs. rvalue и почему нельзя написать foo := bar := baz и т.п.

Думаю, что преподавать программирование имеет смысл либо на Lisp/Scheme, как это делали в митовском SICP до недавнего времени, либо на традиционных фон-неймановских языках, но тогда уж без этой пошлой паскалевской маскировки указателей (к слову, они там все равно есть в явном виде), которая только запутывает и сбивает с толку, и прочей шелухи, толстым слоем оседающей на мозгах юных падаванов от программирования.
Monday, October 5th, 2009 04:05 pm (UTC)
а это смотря как объяснять. нам вот сначала объяснили, что [в традиционных языках программирования] переменная есть тройка из имени, области памяти с определённым адресом и лежащего там значения.
после чего конструкции по манипулированию этими штуками в разных языках программирования оказываются вполне понятными




Monday, October 5th, 2009 05:02 pm (UTC)
Это хорошо, что вас так учили. Но проблема, имхо, глубже, а именно: отвязываемся ли мы от некоторой конкретной реализации, или нет. И здесь императивные языки терпят полное фиаско, в отличие от функциональных или логических. Причем эта проблема "генетическая": оказывается, очень проблематично описывать, как решать задачу, не скатившись рано или поздно до, в широком смысле, тех же указателей и прочих знаний о underlying машине. Си, по крайней, выходит из положения честно, будучи "портабельным ассемблером", в отличии от [того же Паскаля].

К слову, у меня такие же, как у многих, проблемы освоить, наконец, какой-нить лисп или хаскель. Уж очень закоренело "сишное" мышление, к моему большому сожалению.
Monday, October 5th, 2009 05:05 pm (UTC)
а тогда как раз надо научиться думать в терминах данного языка высокого уровня и не задумываться о том, как там внутри реализовано хранение переменных и передача по ссылке
Monday, October 5th, 2009 05:21 pm (UTC)
Так вот не получается! Рано или поздно захочется докопаться до сути, например, чтобы оптимизировать алгоритм (точнее, его реализацию). Даже "хорошие" императивные языки, типа Java, этим страдают.

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

Проблема, как мне кажется, кроется именно в императивном подходе. Он inherently машинно-зависим, а значит, совсем "не задумываться" не получится.
Monday, October 5th, 2009 05:26 pm (UTC)
императивный подход, кмк, чаще используется потому, что железо работает императивно. Т.е. от объяснения устройства компьютера, до записи императивного алгоритма более человеческими словами - очень маленький шаг.
И более няглядно видно, как вот эти слова, потом обрабатывает процессор.

Насколько это нужно - не знаю :)
Monday, October 5th, 2009 05:40 pm (UTC)
И более няглядно видно, как вот эти слова, потом обрабатывает процессор.

Конечно. Именно в этом простота и порочность традиционных (read: императивных) языков. И поэтому, имхо, стоит начинать изучать программирование с чего-то другого, например лиспа/схемы. А уж затем и указатели, и проблемы типа sizeof(int) != sizeof(void *) станут понятны и очевидны (а главное, таких ошибок станут меньше допускать, хочется верить).
Monday, October 5th, 2009 04:09 pm (UTC)
сам-то Паскаль, может быть. С современных-то позций.
Но после паскаля у Вирта много чего было :)