How I teach / Как я учу

(Russian text below.)

How I teach.

I have always been a bad student, and instead of reading books at the beginning, or even just manuals, I was eager to get into it, impatiently tried to figure it out myself, like a poorly educated self-taught "hacker" (in the original sense of the word). "Right off the bat." And only later, in books, I discovered what I had already seen before, in my practice, and the efficiency of learning from books increased significantly for me -- a puzzle in my head formed much better, faster, and more completely.

When reading books before practice I was always bored to death -- "in one ear and out the other".

About 10 years ago, I was solving puzzles from the Project Euler website with little knowledge of mathematics. I tried to solve them myself, like a blind kitten, intuitively, googling anything what could help. Only after that, I still find in math books and wikipedia what I had already seen myself before, a knowledge although not always correct and precise, but I got it by cost of sweat and tears. And, as it turned out, this method suited me better than if it was the other way around (read books at the beginning, and then try to solve exercises). By the way, at the Project Euler website, if you enter the correct answer, you get an access to the forum where those who have already solved this problem are chatting, and they compare different methods of solving and talking the mathematical theory. Reading these discussions can be very enlightening, but after your successful solution, not before. Reading this before making your own solution (and google the correct answer for this) will be boring and dull. Reading a detective fiction, it’s interesting to strain your own brain, but knowing beforehand that the butler did it, it’s not interesting to read it at all.

And even earlier, when I learned all sorts of programming languages, books about them, and standards, I read only years after how I have used this language in practice for years.

This method does not pretend to be absolutely correct, but it seems to me that it can help someone else. As Russians say, "audacity is not an offence, it is a blessing", in the process of obtaining knowledge and skills, being audacious is very useful.

Yes, you feel backward due to the constant reinvention of the bicycle, but storming a problem with little or no knowledge can be very helpful.

Once I spent several weeks implementing some algorithm (I won't elaborate on which one yet). To my surprise, it worked at about the same speed as the standard one, well-known method. At first I was upset -- of course, everything was invented even before my birth, back in the 1960s, and, as usual, I’m the last to know. But then my mood stabilized -- after all, this meant that I walked this path correctly, and I came to the best solution myself, without computer science education.

Compare, what is more interesting, at the beginning, to study the map of an unfamiliar city, then walk through it, or vice versa, get lost there without a map/navigator/google maps, pester strangers around with questions, how to find the place your search for. And then find all these places on the map and read about them in wikipedia? Yes, it will take more time, but it will all be etched in your memory much deeper.

So in the process of teaching reverse engineering, I immediately give people tasks, including these. And in the case of skidding, I help, suggest, make hints, ask leading questions, I indicate where and what to read, including my book. (I don’t even ask anyone to read my book before a student start learning.)

Whether all this is correct or not, I wouldn't argue. But I think there is someth good and useful point. It helped me and still helps.

Good luck!


Как я учу.

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

А читать книги до практики мне всегда было невыносимо скучно -- "в одно ухо влетало, в другое вылетало".

Лет 10 назад, я решал задачки с сайта Project Euler, мало зная математику. Я пытался одолеть их сам, как слепой котёнок, интуитивно, в т.ч., гугля то, что могло бы помочь. Только после этого, я до сих пор нахожу в мат.книгах и wikipedia то, что уже видел сам, знания, хоть и далеко не полные и не точные, но которые я уже получил ценой пота и слёз. И, как оказалось, этот метод подходил мне лучше, чем если наоборот (в начале читать книги, а потом пытаться решать упражнения). Кстати, на Project Euler, если вы вводите верный ответ, вам открывается доступ в форум, где чатятся те, кто уже решил эту задачу, и они сравнивают разные методы решения и обсуждают мат.теорию. Читать эти обсуждения бывает очень интересно, но уже после вашего успешного решения, а не до. Читать это до самостоятельного решения будет скучно и неинтересно (и для этого гуглить правильный ответ). Читая детектив, интересно и самому напрячь мозг, а зная зараннее, что убийца -- дворецкий, читать уже совсем не интересно.

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

Такой метод на абсолютную верность не претендует, но мне кажется, он может помочь еще кому-то. Как говорят, "наглость -- второе счастье", а в процессе добычи знаний и умений, быть наглым это очень полезно.

Да, вы чувствуете себя отсталым из-за постоянного переизобретения велосипеда, но штурмовать задачу с минимумом знаний или без оных, может быть очень полезно.

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

Представьте, что интереснее, в начале изучить карту незнакомого города, затем пройтись по нему, или наоборот, заблудиться там без карты, навигатора или google maps, приставать к людям с вопросами, как что-то там найти. А затем найти все эти места на карте и прочитать про них в wikipedia? Да, это займет больше времени, но в память всё это впечатается куда глубже.

Так что в процессе обучения reverse engineering-у, я сразу даю людям задачи, в том числе и отсюда. И в случае пробуксовки, помогаю, подсказываю, намекаю, задаю наводящие вопросы, указываю, где и о чем нужно прочитать, в т.ч., в моей книге. (Читать мою книгу до начала обучения я даже и не требую ни от кого.)

Правильно всё это или нет, спорить я не буду. Но мне кажется, в этом есть что-то хорошее и полезное. Мне это помогало и помогает до сих пор.

Удачи!


Please drop me email about bug(s) and/or suggestion(s): blog@yurichev.com. List of other blog posts. BTW, I'm teaching. Follow me in social networks: Twitter, Telegram, GitHub, Discord, Facebook.