Previous Entry Share Next Entry
photo24

[repost] учиться, учиться, but how

Оригинал взят у bvlb в учиться, учиться, but how
У программирования есть уникальная особенность: можно очень дешево построить что угодно и тем самым это что угодно качественно выучить.

Хочешь знать страшный и ужасный TCP/IP, стать гуру нетворк программинга под юникс? Так реализуй TCP/IP стэк, хоть на питоне, хоть на баше. Там, слава богу, нет ничего страшного. С одной стороны торчит API беркли сокетов, с другой raw sockets - надо просто раскрасить картинку заполнить кодом пустоту между ними. Не нужно реализовывать ни алгоритм нэгла (любимй вопрос умников* на собеседованиее), ни select/poll, просто для начала установку соединения, посылку-прием данных, полноценное закрытие, реакцию на обрывы. После этого в голове останется четкое понимание как что устроено, на которое будет легко и без труда лепиться все остальное.

Вместо этого добросовестный человек читает все N томов Стивенса (что, за исключением APUE, дело в равной мере благородное и бессмысленное), и быстро увязает в субстанции, ошибочно называемой API, потому что если какой-то набор из четырех структур и 6ти вызовов взять и подвергать на протяжении 40 лет непрерывным жесткому облучению, генетическим мутациям и случайному блужданию по плоскости, то получится конечно то, что торчит из юникса, но никак не API. Потом человек читает что-то вроде Камера, узнает, что ничто не является ничем (см. историю проля TTL), тонет в море информации, не будучи способен отличить в ней важной от второстепенного и "изучение сетевого программирования" на этом можно считать законченым.

То-же самое касается многопоточности и вообще чего угодно. Написать собственный планировщик на уровне user space, делать переключение между потоками при вызове блокирующих (и не только) системных вызовов (обернув их предварительно во что-нибудь), что может быть проще? Там реально не будет никакого кода. Но многозадачность станет в голове на место раз и навсегда и останется независимой от выбора базиса при переходе от одной системы к другой.

Работы будет в 10 раз меньше, чем при чтении книжек о том, как титаны устроили это в священном ядре соляриса, а отдача будет в 10 раз больше.

Человеку с минимальным опытом должно быть понятно, что принцип правильный и работает.

На практике однако он встречает неожиданное сопротивление в рядах падаванов. Среднего качества падаван, не тронутый силой, впадает в ступор и раздражение при предложении пойти и написать на питоне простейший веб-сервер, один раз и навсегда уяснив что такое заголовок HTTP и как связаны между собой поведения транспортного и прикладного уровней. Эта мысль просто не проталкивается в мозги существа 199x+ года рождения, выросшего среди API и сервисов "из каждого утюга", которые выполняют то, что должно явно по воле Аллаха, коия простирается где-то от уровня сисколов и ниже. Т.е. дело не в том, что не знает, а в том, что все, что ниже API это для кого-то другого.

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

Остается два замечания:

1. Задание такого же рода можно давать на собеседовании, _если хорошо продумать как именно его давать_. Может получится лучше, чем спрашивать идиотские алгоритмы, лучше српашивания которых все-равно никто еще ничего не придумал. (т.е. придумал, но с неоправданно большими рисками на фолс позитив).

2. Жаль, что в математике так нельзя учить(ся). Т.е вообще не понимаю как. Можно пробывать самому доказывать теоремы, не читая доказательства, можно решать задачки, можно вертеть все с разных сторон и придумывать контр-примеры, но вот как дать что-то реализовать? Ыы..

---
* под "умниками" тут не подразумевается ничего хорошего


  • 1
sassa_nf November 13th, 2013
"как дать что-то реализовать?"

берём Агду, и реализуем

juan_gandhi November 13th, 2013
О, вот именно.

juan_gandhi November 13th, 2013
А кстати да. Ты что-то знаешь, если можешь запрограммировать.
Да даже не нагла и силли-уиндоу, а простая вещь - есть строка из цифр, десятичное число; переведи в hex.

2. Запросто. Именно что самому доказывать теоремы, в этом и состоит. Строить там хрен что построишь новое (новые теоремы в смысле), но тоже можно попробовать, конечно. Поварьировать аксиомы. А что, если в аксиоматике Пеано убрать единственность нуля? И т.п.

в мозги существа 199x+

Serge Shikov November 13th, 2013
Ради объективности, это не особенность существ 199x+ года рождения. Такое всегда было.

Просто раньше это было в другом количестве и другом месте. И например пишуших на фортране не интересовали особенно потроха OS/360. И даже на ассемблере вполне можно было писать, не понимая ничего глубже макрокоманд или уровня вызовов SVC. Ну и писали.

justy_tylor November 13th, 2013
На все эти разделения прикладных и системных программистов ещё Чак Мур в прошлом веке ругался. А разгадка одна - разработчики оппа-говнодрайвер и оппа-говносайт в равной степени склонны завышать ценность 100500 API своей области (чтобы постфактум перевести затраты времени на потребление этого шлака в ЧСВ) и занижать необходимость наличия базовых знаний в другой (ибо ЧСВ узкого специалиста от такой необходимости страдает).

sleepy_drago November 13th, 2013
приходите после практики на зачет (с) старый забытый универ.

geekyfox November 13th, 2013
всё так, но однако вечный вопрос "а зачем?"

anonim_legion November 15th, 2013
Если можете, наишите еще про высшее образование. А то, всякий раз, когда человек гордится дипломом, мне хочется его расспросить, причем не по специальности, а что-нибудь из истории, философии или например был у нас такой предмет "основы бизнеса" - так пусть расскажет, чем ИП от ООО отличается.

wizzard0 November 15th, 2013
а чего про него писать? мне универ принес ряд полезных вещей. мог бы принести больше. корреляции универа с мозгами нету, но в универе мозгов в среднем больше. ну как-то так, банальности сплошные.

  • 1
?

Log in

No account? Create an account