Самообразование и Hello, world: проблема вводных курсов и не только

в 18:14, , рубрики: hello world, Учебный процесс в IT

Здравствуйте! Меня зовут Иван и я алкоголик самоучка.
IT подразумевает самообразование. И поэтому я понадеялся на свой собственный мозг – у меня нет высшего образования. Да, в современном мире это меньшая из проблем. Но я затрагиваю это потому, что хочу поговорить об образовании в целом.

Надо ли говорить, что сейчас есть курсы по фотографированию еды в Instagram? Не надо…
Есть «миллионы» платных и бесплатных курсов, а на небезызвестном ресурсе есть даже целый раздел, посвящённый этой животрепещущей проблеме – курсов ради курсов, после которых будущие «вайтишники» могут гордиться, что у них есть бумажка, а курсоделы (кроме шуток) могут гордиться тем, что хотя бы кого-то хотя бы чему-то научили. И в этой круговерти понять можно всех. И тех, кто просто хочет есть и жить, занимаясь сколько-нибудь благим делом – курсоделов, и тех, кто на эти курсы ходит, надеясь получить квалификацию и работать.
Не сочтите за рекламу – не так давно открыл для себя Stepik и да, там есть действительно бесплатные и при этом годные курсы, после которых ты чувствуешь, что обогатил свой кругозор, научился мыслить иначе и извлекать из этого пользу.
Есть МИРЭА и там бесплатная сетевая академия (с некоторыми оговорками) даже с доступом к реальному железу (вендора не называю) – бери и учись, как говорится, будь полезен обществу. Это я к тому, что хорошие примеры – есть и я не хочу здесь плюнуть на всё наше образование в принципе.
Но! Хочется плюнуть, откровенно говоря, в подход к образованию новичков на большинстве курсов, в «учебниках» и «самоучителях». Я помню, что хабр – не место для жалоб. Но хочу обратить внимание на реально существующую проблему.
Итак, «Hello, world» JS, примитивный подход:

window.document.write(“Hello, world!”); // а то и без window – и человек сторонний не узнаёт об объекте window сразу.

Моя реакция: спасибо, я и так знал, что языки программирования позволяют работать с информацией, записывать её и читать в файлы и из файлов. Не дурак. Дальше…
Чуть более приближенный к реальности пример:


function myFunction() {
    document.getElementById("demo").innerHTML = "Hello, world!";
}

Моя реакция: спасибо, теперь я вижу, как интерактивно заменить текст в параграфе, а не просто поверх всего написать хэллоу ворлд. Но и этого мало! Дальше я хочу понять, как научиться разговаривать с языком на ты, написав к нему собственную библиотеку. Потому, что я хочу работать, развивать ту сферу, в которую я прихожу! И вот в этом очень редкие курсы могут мне помочь. Я (предположим, только начал изучать JS) иду смотреть код jQuery, имея довольно скудный набор знаний из этаких HW-курсов, статей и прочего… И конечно начинаю понимать, что в курсе ничему не научился, как и из статей.
Дальше ещё веселее! Допустим, уже наизучавшись вдоволь самостоятельно на протяжении лет и лет, я хочу облегчить себе жизнь и на Jscript переписать обёртку для поисковых систем и сайтов с доками, чтобы очень быстро находить – вообще. Сначала это был вот такой батник:

@echo OFF
:setfind
set /p s="Find: "
"C:Program FilesMozilla Firefoxfirefox.exe" ^
https://www.google.ru/search?q="%s%"
GOTO setfind

Запускаю – забиваю – браузер с нужным запросом и без лишних параметров поиска (а значит гораздо быстрее) открывается сам в нужном месте. Теперь, как уже говорил, я хочу переписать это на Jscript. Иду на MSDN, вижу там рабочим метод
window.prompt(str,str);
Пишу спокойно его в код скрипта и ожидаю интуитивно, что WSH это съест… Но… Объект window не определён. И вот тут я начинаю чувствовать себя идиотом, рою стековерфлоу и нахожу там wsf с экспортом функции инпутбокса аж из VB… Но — это не очень красиво.
В конце концов нахожу красивое, хотя уже не помню где, (при этом оказывается, что я должен был создать файл wsf, тогда как в доках есть все разжёвывания, кроме этого!) и понимаю, что могу всё это написать и что не дурак всё-таки, но – вопрос… Почему ничего такого нет на курсах? Почему в доках есть вот такие самоочевидные конструкции:

JScript uses the alert, confirm, and prompt message boxes of the browser to obtain input from your user. The boxes are methods of the window object. Because the window object is at the top of the object hierarchy, you do not actually need to use the full name (for example, window.alert()) of any of these message boxes, but it is a good idea to do so because it helps you remember to which object they belong.

Но нет того, что должно заставить это просто работать?! Самое смешное, что я сталкивался с wsf много лет назад, но просто забыл, как и с чем это едят. И вот… Я спокойно пишу в новый файл инструкцию… А получается чёрт знает что. По какой такой кофейной гуще я должен был догадываться, что Windows Script Host не умеет в js «с центра поля»? Ладно, хорошо, надо было изучать WSH с начала, сам виноват. Но. Такого я что-то не припомню ни в одних курсах. Учат простейшему — не учат сути. Не учат, как использовать что-то на практике, а потом человек пытается пользоваться микроскопом как молотком.
Фактически – на большинстве курсов учат набору неких абстрактных фокусов, не показывая сущности действий. И после всех этих циклов, выводов и физбазза чувствуешь, что ничему не научился.
Самое смешное – это то, что по следам моего самообучения длиною в годы можно книгу написать, кроме шуток. Тест-драйв оной давал положительный фидбек, кстати.
Можно продолжать…
Берём HW, например, для ActionScript:

trace('Hello World!'); // вы уже понимаете, что я хочу сказать?

Такой пример ничему не учит. Ничего о сути AS не показывает. Новичок уходит «не солоно хлебавши», но с «основами», да…
То же самое касается, например, языка C… Хеллоуворлд не покажет нам истинные возможности языка. А должен. Само по себе образование должно образовывать специалиста — человека, могущего всё изученное применить на практике. Однако получается всё очень странно…
А вот позитивный пример. Самый полезный ХВ, который я видел:

template <typename T>
class Hello
{
    public:
        Hello(T hello)
        {
            std::cout << "Hello, " << hello << std::endl;
        }
};
 
template <>
class Hello<class World>
{
    public:
        Hello()
        {
            std::cout << "Hello, world!" << std::endl;
        }
};
 
int main(void)
{
    Hello<World>();     
    return 0;
}

Чёрт возьми! Он показывает, как использовать шаблоны… Сразу. И не считает новичка идиотом.
В конце концов, то, что лично я хочу получить от образования, нахожу только на «углублённых» курсах, найти которые можно с трудом, иногда — очень большим. При этом платность курса, конечно же, не гарантирует ровным счётом ничего. Почему я говорю о курсах? Они дают хоть какую-то систему в знаниях. А бессистемность обучения – вообще очень страшная штука, тем более в нашем случае… Где системность и упорядоченность – всему голова.
И что в итоге? В итоге потом мы наблюдаем статьи с сетованием на упавший уровень джуниоров и на программистов, которые не могут физбазз… И виноваты не джуниоры, а само по себе то, насколько массовой стала профессия. При этом классическая «вышка» даёт некий базис, основного пласта знаний уже не даёт. Остаётся утыкаться в курсы и разрозненные многочисленные статьи (поправьте меня, если я не прав)… А они, зачастую, хотя и дают историческую справку о языке и обзор возможностей языков, на практике как правило ничего не показывают… И когда человек, например, изучив базовые конструкции в Си пытается что-то сделать с OpenGL — как правило выходит чушь…
Ну и, наконец, как говорится: «Хочешь, чтобы было сделано хорошо — сделай это сам», так что, вполне возможно, скоро сделаю курс, таким, каким его вижу я, и буду готов выслушать всяческую критику и замечания. Сразу и хорошо получается очень редко, пинки готов получать. Не могу на это всё смотреть и бездействовать.
У меня всё. Всем спасибо.

Автор: stranger777

Источник

Поделиться

* - обязательные к заполнению поля