<irony>Майкл Хартл — самый ужасный программист в мире!</irony>

ноября 18, 2012  |  Published in Best Practices, Уголок философа  |  11 Comments

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

Собственно из-за того бросания в меня ссылками на Хартла и родилось это название <irony>Майкл Хартл — самый ужасный программист в мире!</irony>. Я надеюсь, что использование тега <irony></irony> спасет меня от «Ты сам мудак! Хартл — няша!» ибо, как показывает практика, людей обидчивых и не понимающих иронию очень много. К Майклу Хартлу я отношусь очень хорошо, он написал хорошую книгу, которую я рекомендовал бы к прочтению всем и хотя у меня есть несколько мелких разногласий с автором, я все же считаю его отличным программистом, а его книгу обязательной для прочтения.

Предыстория (совсем кратко и скучно)

Обратился ко мне один человек с просьбой о помощи — необходимо было найти одну багу. Этот человек дал мне ссылку на репозиторий на Github и там я увидел такой код:

def authorized_user
  @micropost = current_user.microposts.find_by_id(params[:id])
  redirect_to root_path if @micropost.nil?
end

Очевидно, что метод назван неправильно ибо делает он совсем не авторизацию пользователя. Естественно я сделал замечание касательно названия метода, а в ответ получил в лоб вот этим — «Этот метод, как и все остальное относящиеся к microposts позаимствован из руководства Майкла Хартла».

Разумеется, святость Хартла непоколебима, и я не мог поверить в то, что Хартл мог назвать так метод, который проверяет не пытается ли пользователь удалить микропост, который уже существует. И, естественно я решил проверить. Потратив 3 минуты времени я нашел в книге Хартла следующий код:

class MicropostsController < ApplicationController
  before_filter :signed_in_user, only: [:create, :destroy]
  before_filter :correct_user, only: :destroy
  .
  .
  .
  def destroy
    @micropost.destroy
    redirect_to root_url
  end

  private

    def correct_user
      @micropost = current_user.microposts.find_by_id(params[:id])
      redirect_to root_url if @micropost.nil?
    end
end

Очевидно, что correct_user — это совсем не authorized_user.

А теперь вернемся к уроку

  1. Все тот же культ карго — подражание без понимания сути — это зло.
  2. Небрежное чтение тех. литературы — еще большее зло, чем то зло, когда вы вообще не заглядываете в нее, ибо, как говорил пророк Исаия (а может и не он) — Чтение документации по диагонали рождает необоснованную уверенность в том, что вы все делаете правильно.
  3. Есть соглашения (и даже принцип легший в основу Rails — CoC — Convention over Configuration) в том числе об именовании методов и переменных. authorized_user — это абсолютно неверное название метода. Судя по названию метод должен возвращать авторизированного пользователя, но делает он совсем другое — выполняет поиск микропоста, который пользователь хочет удалить и если такого не найдено, то выполняет редирект на главную страницу (это необходимо, например, для защиты от двойного клика по ссылке «Удалить», когда по второму клику выполняется повторный запрос на удаление, но записи, которую необходимо удалить уже нет). Соглашениям необходимо следовать иначе код превратится в яму наполненную миазмами, а вам, как программисту, придется в этой яме плавать.
  4. За ваш код несете ответственность только вы сами, а не Hartl, DHH или Matz.
Tags: , , , ,

Responses

  1. itsNikolay says:

    ноября 18, 2012 at 15:45 (#)

    Ну товарищи, никто же из вас не сделал никакого курса по рельсам.
    А Хартл уже несколько лет является единственным человеком который доступным языком объясняет как сделать свое первое приложение.
    Когда я изучал его туториал, обо всех найденных багах я ему писал на мыло. И делал это не для того что бы показать какой я умный.
    Делал я это, дабы сделать открытый учебник лучше. За что получал от него ответы с благодарностью.
    Все как в жизни — или сделай лучше, или довольствуйся чем есть. Призываю всех создавать более качественные продукты или улучшать существующие.
    И не быть Моськами. =)
    Относитесь к данным кускам говнокода как к секретным квестам, который сможет отыскать только внимательный и вдумчивый исследователь. =)
    Удачи!

  2. admin says:

    ноября 18, 2012 at 16:27 (#)

    itsNikolay, видимо ты бегло прочитал пост. Пост совсем не о Хартле и не о его книге.

  3. SqREL says:

    ноября 18, 2012 at 18:27 (#)

    @itsNikolay, если я правильно понял пост — речь идет о субъективном восприятии информации и искажении ёё объектом из-за недостаточно внимательного изучения. Пример: пишите имена переменных со смыслом, результат: my_brand_new_var_which_have_awesome_model_object_created_from_class_MyBrandNewModelWhichMeansAllSignedUpPeopleInMyAwesomeProject
    (утрирую конечно). Но возможно и я не так воспринял автора.

  4. admin says:

    ноября 18, 2012 at 19:00 (#)

    Зачем так усложнять, в конце 4 рекомендации — это суть поста =)

  5. says:

    ноября 19, 2012 at 19:29 (#)

    Хартль виноват во всём!111

    Кстати, я сам по его книге учился.

  6. Гость says:

    марта 12, 2013 at 21:16 (#)

    Нормально метод назван, учи английский что ли.

  7. admin says:

    мая 4, 2013 at 09:03 (#)

    Гость, метод назван неправильно. Метод «поправляет» пользователя, а не возвращает авторизированного пользователя.

  8. loh says:

    ноября 26, 2013 at 09:59 (#)

    Я недавно начал изучать руби и рельсы. До этого работал на С. И вот что я заметил, это прямо режет глаз. Англоязычные сайты и программеры от туда всегда позитивны, конструктивны и приветливы, готовы помочь по любому вопросу, какой бы ты лох не был. Как только переходишь на русскоязычные ресурсы — каждый мало мальски состоявшийся программер выебывается, как будто он и есть разработчик руби и рельс. Откуда это в русских? Случайно забрел сюда, давно перестал читать русскоязычные сайты по программированию, одна злоба, сарказм, ненависть и презрение…

  9. admin says:

    ноября 28, 2013 at 13:11 (#)

    Не понял твою мысль. Здесь ты тоже злобу и сарказм нашел?

  10. Jim says:

    января 23, 2014 at 23:34 (#)

    По всей видимости он нашел их в названии статьи!

  11. Приветливый прохожий says:

    февраля 15, 2014 at 11:23 (#)

    Спасибо за заметку про нехороший код! ))
    По теме друзей что пишут что у нас все плохо, ну это у них в головах все плохо вот и отображают потом вовне, пример этого комментатора по имени звучному loh :)

    Меня вот другое удивило даже здесь, глянул в футер а там «Powered by WordPress using Blueprint.»
    Это что же получается язык описываем, а инструмент описания используемый допотопный вордпресс?

    И кстати как ни странно масса разработчиков делает так на других цмсках и языках. вот это странно, почему?

    Неужели любимый Руби настолько «нелюбим» что с его помощью не хотелось бы и блог сделать про него же самого?

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.