Как стать автором
Обновить

Метод Бенджамина Франклина для чтения книг по программированию

Время на прочтение4 мин
Количество просмотров33K
Всего голосов 31: ↑27 и ↓4+23
Комментарии17

Комментарии 17

Хороший совет, но есть еще более расширенный вариант этого совета — не переписывать код подчистую, а пытаться его применить в разрабатываемом учебном проекте. Тогда кроме вопроса «как» закрывается еще и вопрос «зачем», который у опытных разработчиков возникает куда чаще, чем «как»
И продебажить, конечно. Очень удобно проследить за каждой веткой кода и рассмотреть принципы работы программы. Ещё отмечу серию книг Head First, т.к. дельно подается материал и прекрасно усваиваться. Спасибо за данную публикацию.
Книга может и лучшая, но код для понимания(не только новичкам) можно сделать читабельнее:
User.rb
class User < ApplicationRecord
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  attr_accessor :remember_token

  validates :email,    format: { with: VALID_EMAIL_REGEX }
  validates :email,    length: { maximum: 255 }
  validates :email,    presence: true
  validates :email,    uniqueness: { case_sensitive: false }
  validates :name,     length: { maximum: 50 }
  validates :name,     presence: true
  validates :password, length: { minimum: 6 }
  validates :password, presence: true

  before_save { self[:email] = email.downcase }

  has_secure_password

  class << self
    # Returns the hash digest of the given string.
    def digest(string)
      cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost

      BCrypt::Password.create(string, cost: cost)
    end

    # Returns a random token.
    def new_token
      SecureRandom.urlsafe_base64
    end
  end

  # Remembers a user in the database for use in persistent sessions.
  def remember
    self[:remember_token] = User.new_token

    update_attribute(:remember_digest, User.digest(remember_token))
  end

  # Returns true if the given token matches the digest.
  def authenticated?(remember_token)
    BCrypt::Password.new(remember_digest).is_password?(remember_token)
  end

  # Forgets a user.
  def forget
    update_attribute(:remember_digest, nil)
  end
end

Ви-таки хотите сказать, что я буду собирать автомобиль по памяти, все так же не понимая как он работает?)
Именно! На 100-й детали к вам придёт мысль что таки надо понимать как он работает и что именно для этого ВАМ надо искать. Чтобы не пересобирать по нескольку раз одно и тоже только потому что «забыл там шайбу положить». В этом и состоит цель обучения на собственных ошибках, когда в процесс включается мозг. Начинаешь думать заранее а нужна ли тут шайба, чтобы через 2 часа не пришлось разбирать узел чтобы её туда вставить.
Курсе на втором матфака вывел для себя метод подготовки к сдаче теоретической части экзаменов.
Брал список билетов с вопросами. И по порядку — читал вопрос, находил теорему и читал ее доказательство. Не стараясь запоминать, но так чтобы было понятно откуда что берется.
Прочитывал таким образом 10-12 теорем, закрывал лекции-учебники. Брал лист бумаги и пытался доказать их последовательно уже самостоятельно. Стопорясь в каком-то месте, подсматривал это место и снова самостоятельно шел дальше. «Помарочные» доказательства (в процессе которых приходилось подглянуть) не переписывал заново и не возвращался к ним пока все билеты не были пройдены. Если перед экзаменом оставалось время — проходил еще на один раз. Если нет, то уже было все равно не страшно.

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

И еще важно — в эти периоды спал кроме ночи 2-3 за день по часу.

В итоге шпаргалка понадобилась только один раз за весь период обучения.
Да, прочитать и потом самому доказать легче, чем запомнить всё целиком. На экзамене главное вспомнить откуда и куда надо прийти (т. е. про что билет\теорема), и иметь общее понимание курса.
Подход к изучению различних тем по программированию (в т.ч. и используя книги), должен быть следующий:
1) Прочитал текст, разобрался в теоретических аспектах;
2) Выполнил, под Debug-ером приведенный в первоисточнике пример;
3) По мативам данного примера, сделал свой, другой пример, основанный на том, что описано в первоисточнике;
4) Поискал ещё публикации по данной теме (в интернете, в книгах) проанализировал их;
5) Дополнил свой пример, на основании анализа и осмысления.

Вот, ИМХО, подход современного IT специалиста.
C++ за 21 год

так и вижу, как тимлид/скрам-мастер/пм "невозмутимо" взирают на неукоснительное исполнение пп1-5...


N.B. бляха-муха, такие все "правильные", что непонятно, откуда такое кол-во г@в#0кода...

Программирование в книге и в реальности
image
НЛО прилетело и опубликовало эту надпись здесь
Видится мне в этом общая нынче тема: вместо того, чтобы обучать думать, людей учат использовать шаблоны.
Заголовок спойлера
Прошу прощения за политоту, но таким народом проще управлять)

ай, как Вы правы!..
но я не против книг. и даже шаблонов. для себя же понял, что не смотря на все неудобства и боль лучше читать оригинал (на английском). теперь другая проблема: как быстро [по обложке ;)] определить "потянешь" книгу или нет?.. ;)

Знаете, пословица есть, что-то про книги, обложки и суждение.

У вас что, нет времени отзывы прочитать на книгу? Или сначала почитать рекомендации, а потом купить, что советуют?
Отзывы основаны на личных предпочтениях, которые далеко не всегда совпадают с вашими.
Очень хорошо это видно на рейтингах фильмов. По рейтингу 9+ балов из 10, а фильм отстой…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории