Как научить программировать свою девушку, если ты не педагог, но она в тебя верит +24



Когда твой парень - fullstack


Когда твой парень — fullstack


Работая программистом и проживая в пяти минутах ходьбы от офиса, крайне тяжело успеть «отойти» от работы, отойдя от работы.


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


Как бы не так!


Конечно же, решение приходит в самый не подходящий момент: кого-то застаёт за рулём, кого-то в трамвае, кого-то, кому повезло работать рядом с домом, где-нибудь во дворе, а то и в лифте. В моём случае следующий за решением поток мысли выливается на девушку, которая, ну ещё бы, в программировании, что называется, ни в зуб ногой.


И вот однажды она приходит к тебе и торжественно заявляет:
— Я готова! Готова учиться программированию! Давай!


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


О том, как я, не имея никакого практического опыта в обучении, решил ввести в программирование человека, объяснившего, что «ты же умный» и «всё у нас получится», расскажу под катом.


Добро пожаловать!


Зачем?


На этот, казалось бы, абсолютно справедливый вопрос я получил не менее справедливый ответ:
— Ты всё равно постоянно говоришь о программировании, а так я хоть понимать тебя буду.


Честно? Не уверен, что это веская причина для того, чтобы стать программистом, пусть даже и не профессиональным. С другой стороны, я глубоко убеждён в том, что в будущем, возможно, не столь отдалённом, программирование если и не станет чем-то бытовым, то, как минимум, сделает очень серьёзный шаг в этом направлении. А как известно, не можешь остановить хаос — возглавь его!


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


Велосипеды — наше всё


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


На самом деле, конечно, как и любой велосипедист, я тут же нашёл множество причин не использовать существующие решения. И, пожалуй, кто-то найдёт их не объективными, но я и не претендую на последнюю инстанцию. Итак, что же не так в куче бесплатных онлайн курсов?


Языки программирования


Обучать программированию русскоговорящего человека нужно, само собой, на русском языке. Множество терминов, регулярно читаемых нами в документации к stdlib очередного языка, воспринимаются нами, профессиональными программистами, интуитивно: statement, expression или даже parse — это то, что нам не приходится переводить, даже если наш уровень английского предполагает именно перевод, а не мгновенное понимание текста. Человеку, не связанному с программированием и даже просто с IT, многие из наших терминов просто сломают голову, напрочь отбив желание продолжать обучение.


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


Во-первых, в массе своей, это либо курсы по веб-программированию (PHP, JS, Python, etc), либо по этому вашему энтерпрайзу (Java, C#, etc), либо же это C/C++ — всё это не торт для новичка.


Первая категория обычно не учит собственно программированию, предлагая за несколько уроков сделать готовый продукт — сайт обычно. Я не вижу в этом ничего плохого, если цель человека — создать сайт, но давайте будем честны: подобные курсы дадут вам некий архитектурный паттерн (MVC, скорее всего), кодовую базу для нескольких модулей, и всё — никаких знаний. Именно благодаря этим курсам мы имеем такое количество глупых вопросов в телеграмм-каналах и форумах, посвящённых какому-то языку или технологии. И винить новоиспечённых программистов в этих глупых вопросах нельзя — они не получили базовых знаний, отсюда и все беды.


Что касается двух других категорий, то я, опять-таки, считаю, что это не то, что с чего нужно начинать новичку.


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


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


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


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


Именно тут и выяснилось, что материалов для обучения человека программированию с нуля на Go в рунете нет. Есть прекрасные туры, профильные сайты и всё-всё-всё, что позволит тебе освоить язык за день-два, если ты уже умеешь в программирование. Но она — не умеет.


Здравствуй, велосипед!


Практическая ценность


Бо?льшая часть курсов предлагает в итоге иметь в своём уютном домашнем репозитории либо произвольное количество разрозненных примеров, либо некий готовый продукт, обычно вам не нужный.


Конечно, бесплатный курс «Простой магазин на React+Redux» — это опыт, однако, как я уже говорил, на практике это полезно разве что человеку, желающему заиметь магазин, но не желающему нанимать кого-либо для его разработки.


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


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


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


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


Но что может заинтересовать девушку?
Свою первую программу (не считая того, что мы писали на уроках) я написал для младшего брата, когда тот стал учить таблицу умножения: ввод диапазона чисел, случайный вывод двух из них брату с предложением ввести их произведение, проверка и так далее по кругу.


Это был, наверное, мой седьмой класс. В этом возрасте написать полезную (хоть сколько-нибудь) программу было для меня счастьем, то есть я был заинтересован. Но заинтересовать семиклассника написанием примитивного «калькулятора» — легко, чем заинтересовать взрослую девушку?


Идея пришла, как водится, из быта. В очередной раз за готовкой, она попросила меня записать в блокнот пропорции ингредиентов.


Дорогая, нам срочно нужен велосипед!


Большой и с коляской


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


Но неужели это просто будет база рецептов?


Конечно нет!


На чём, что и в каком порядке будем писать, я понял в тот же миг.


Back-end


То, что начнём мы с Golang, — это было решено ещё до того, как стало понятно, что мы будем писать. Теперь же можно было определиться с тем, за что именно будет отвечать Go.
API. Конечно же, API!


Язык позволяет средствами стандартной библиотеки поднять простой http-сервер, который будет прослойкой между БД и клиентами.


Кстати, в качестве БД решено было использовать PostgreSQL. SQL — отличный язык для развития логики работы с данными, плюс мы сможем потрогать PL/pgSQL, который, в общем-то, в достаточной степени схож с Go, а значит, на этапе разработки бэкенда мы уже сможем в той или иной степени выучить три языка.


Front-end


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


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


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


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


Игнорировать тренд на реактивность — глупо, ведь у нас нет тонн легаси-кода, кроме того, некоторые из этих фреймворков крайне просты в изучении.


Речь идёт о Vue.js. Конечно, можно было бы использовать React или более экзотические решение наподобие Svelte, но мне кажется, что эти технологии — для более зрелых разработчиков.


Кроме того, клиентская часть будет писаться на TypeScript. Наверное, со мной многие не согласятся, но всё же я считаю, что динамическая типизация — это хоть и благо, но благо только в руках тех, кто понимает, что же такое типизация вообще.


Именно поэтому продолжать обучение, как мне кажется, правильней на языке со статической типизацией. Именно на языке, поэтому Flow не рассматривался. С другой стороны хотелось сохранить максимальное соответствие с JS, не уводя девушку в CoffeeScript, Elm и т.д.


Говоря о фронтенде и современном стеке технологий, нельзя не вспомнить о Progressive Web Application (PWA).


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


Собственное приложение в мобильном телефоне вне зависимости от платформы? Не нужно учить сложные для новичка языки? Это же прекрасная мотивация, пожалуй, одна из лучших, как мне кажется.


Поэтому наш фронтенд должен, кроме всего, удовлетворять всем требованиям, предъявляемым к PWA.


Общий язык


Последний вопрос, на который мне оставалось найти ответ, — это формат общения клиента с сервером.


На одной чаше, как же иначе, был REST со всеми его преимуществами и недостатками, а на другой — GraphQL. Предлагать чистый REST мне не хотелось, так как это влечёт определённые проблемы, которые и породили такие решения как GraphQL. Однако сам GraphQL, на мой взгляд, тоже не является удачной технологией, хотя определённый интерес представляет. Но опять-таки, интерес для меня, для других разработчиков — да, но для новичка GraphQL, как способ решения проблем, сопряжённых с использованием классического REST, интересен не будет, ведь новичку все эти проблемы неведомы, не так ли?


Почему бы не попытаться совместить идеи REST и GraphQL?


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


Итоги


Что же нам предстоит пройти:


  • Сначала необходимо разработать архитектуру серверной части;
  • Затем познакомиться и спроектировать структуру базы данных;
  • Имея базу данных, мы приступаем к изучению Go и написанию сервера API;
  • Далее происходит знакомство с HTML и CSS;
  • Освоив основы вёрстки, быстренько разбираем синтаксис TypeScript;
  • Разобравшись с TypeScript, начинаем писать фронтенд на Vue.js;
  • Дорабатываем фронтенд до уровня PWA.

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


Однако, надеюсь, он всё же себя оправдает, а мой опыт станет полезным кому-то, кто попадёт в ту же ситуацию.


Спасибо за внимание!

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (245):

  1. AnutaU
    /#19321596 / +20

    Половина статьи — здравые, в общем-то, мысли о том, что нужно объяснять основы, а не кидаться в курсы «создать сайт за 3 дня». И тут же бэкенд, фронтенд, REST API. Если разбираться и объяснять, а не показывать как некую магию, это же офигенно сложно для новичка, разве нет?

    • demonarxs1
      /#19321666 / +6

      Поддерживаю. Если изучать с основ — можно дать просто базу. Или посадить за html и css. И уже в дальнейшем, после понимания этой темы перейти к frontend и потом к backend. Но так с наскока… Я думаю если просто показать — будут теже самые курсы на 3 дня, по типу «Создай свой сайт». Ну если только девушку не посадить клепать сайты после этого. Тогда может после 10-12, она заинтереуется и начнет вникать… прийдет осмысление…

      • x-foby
        /#19321856

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


        С другой стороны, конечно, это может не сработать. Но я надеюсь, что интерес к сотворению чего-то, полезного для себя любимой, сыграет свою роль, и всё получится!

        • Simplifier
          /#19321920 / +2

          Ну а где полезное? Через сколько она увидит первый результат? Примерно через год (или больше), когда дойдете до интерфейса?

          • x-foby
            /#19321928 / +1

            Думаю, что здесь придётся искать компромиссы. С одной стороны, да, она должна видеть результаты работы как можно скорее, с другой же — она должна понимать, что она делает.

            Здесь всё будет зависеть от того, как у меня получится преподнести материал.
            Я буду стараться!

            • Siddthartha
              /#19322902

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

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

              • nmrulin
                /#19323116

                Ещё есть PascalABC, очень хороший язык, как учебный — замена старому Turbo Pascal. Всё больше школ на него переходят.

                • dimonoid
                  /#19324388 / -3

                  Можно начать с элементарного СИ, уколоться неопределенностями/недокументированными возможностями и плавно перейти на паскаль, потом на питон(тут начинается радость от всяких плюшек таких как практически неограниченная точность чисел без проблем с типами), а после — на джаву. Некоторые пункты кроме первого можно пропустить, имхо.

                  • 0xd34df00d
                    /#19325590

                    без проблем с типами

                    Нет статических типов — нет проблем!

                    • dimonoid
                      /#19325676 / -1

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

                      • 0xd34df00d
                        /#19325682

                        И проблем не вызывают, нужно только в названии переменных писать с чем работаешь в каждый момент времени, чтобы не забыть.

                        Не нужно. Серьёзно, если вы в именах переменных указываете их статические типы, вы что-то делаете не так. А если динамические, то у вас невыразительная система типов.


                        Да, типы важны, поэтому нужно начинать с СИ как я и написал, но позже можно и без них, если уже разобрался как типы работают.

                        Я боюсь, что С не является ни необходимым, ни достаточным, чтобы понять, как типы работают.


                        Вычислить число пи с точностью 1000 знаков после запятой? Тут без питона никуда

                        Это ещё почему?


                        конечно есть сторонние библиотеки, но лучше без них

                        Кому лучше?

                      • iig
                        /#19325690

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


                        Небольшой пример можно?

                        • dimonoid
                          /#19325722

                          First_str='test'
                          Second_n=2 #n-number
                          Ну и всегда есть type(), в случае если забыл написать что есть что. Ну и отладчик не забываем.

                          • iig
                            /#19325754

                            Смысл не раскрыт. Какая польза от подобных суффиксов? Или вы практикуете повторное использование переменных?

                            • dimonoid
                              /#19325774

                              Ну, переменные типа temp я могу много раз использовать в программе в разных местах с разными типами. Зачем засорять память? Но с обычными переменными я так не всегда поступаю, но бывает.

                              • iig
                                /#19325802

                                Зачем засорять память?

                                Подозреваю, что для очистки памяти в питоне есть питоновские способы… Так же как и в С…

                      • Druu
                        /#19325824

                        И проблем не вызывают, нужно только в названии переменных писать с чем работаешь в каждый момент времени, чтобы не забыть.

                        Шел 2018.

          • nmrulin
            /#19323112

            Ну простейшую программу типа «Hello World» можно за 15 минут научить написать.

    • Barbaresk
      /#19321742 / +11

      Вот тоже сильно удивился. Начали за здравие, а закончили за упокой. Когда ко мне девушка подошла с такой же просьбой, то мы начали с клепания веб-верстки и даже это затянулось надолго, т.к. даже чисто HTML5 + CSS3 без js далеко не так тривиальны для новичка, как кажутся.
      А тут сразу фуллстек.

      • x-foby
        /#19321858

        Я потому-то и решил попробовать по-другому, что видел множество примеров неудачного погружения через вёрстку.
        Здесь, пожалуй, кроме первоначальной заинтересованности, стоит учитывать темперамент человека, усидчивость, склонность к тому или иному образу мышления. Я, к сожалению, не большой мастер в этом, поэтому буду пробовать так, как описал.
        Хотя любые советы, само собой, приветствуются!

        • Dr_Faksov
          /#19324294 / +2

          Автор, я твоя девушка. Свою первую программу я написал в 86 на Фортране (вру, раньше, для калькулятора). Правда последние лет 10 больше балуюсь для друзей, програмируя под Excel.
          Так вот, я представил, что мне надо ЭТО изучить и испугался. Я уже не молод, конечно, и в мозги информация лезет туго. Но я-то хоть представление о програмировании имею…

    • x-foby
      /#19321840

      Это очень сложно для новичка, вы правы! Именно поэтому я и взялся писать об этом на Хабр, ведь, хоть я и описал порядок по пунктам, но кто знает, как оно пойдёт дальше, а «Хабр всё помнит».
      В общем-то, цель этой статьи, как и всего будущего цикла (надеюсь, возможность будет), опробовать описанный метод, зафиксировать все грабли, попавшиеся на пути, и рассказать всё это коллегам, чтоб помочь им, внезапно очутившимся в похожей ситуации, своим опытом, каким бы он по итогу ни оказался.

      • LekaOleg
        /#19325848

        Когда прочитал название статьи очень долго смеялся со своей девушкой)) Так как ситуация была точно такая же!
        Но мы начали с HTML и CSS. Так как у не просветлённых мышление как у обычных пользователей. Им нужно понять как делаются формочки, менюшки, иконочки и тд. что бы интерес не пропадал, а дaлее переходить к JS (уже объясняет как работает та ли иная кнопочка, почему двигает тот или иной объект) (ну и на последок Ajax и тд мелкие технологии). Этого было достаточно для того что бы она начала свою карьеру Джуниром в front. Сейчас она на этапе изучения PHP (так как в компании используем в качестве back). Ну и для закрепления Mysql (postgre, там от ситуации). И под конец пару книг по Архитектуре, паттеранам и тд.
        Это написал просто Вам на скорую руку (обобщённо).
        В моей практики это 4-й человек. И только у неё получилось!))) Первые 3 сдались! (мотивация).

        • Druu
          /#19325874 / +2

          Этого было достаточно для того что бы она начала свою карьеру Джуниром в front. Сейчас она на этапе изучения PHP (так как в компании используем в качестве back).

          А ведь могла картины писать или музыку играть.

          • LekaOleg
            /#19325986

            Это её выбор. Так как работала не программистом но в сфере IT. На данный момент даже места рабочие рядом). Её брат двойняшка тоже программист. Так что большая IT семья!
            Но всё же всем бы советовал поступать в Вуз. Так как не стоит недооценивать силу образования (имею ввиду от самообразования и конечно же уровень самого вуза).

            • Druu
              /#19326234

              Это её выбор. Так как работала не программистом но в сфере IT. На данный момент даже места рабочие рядом).

              А если бы деньги не требовалось зарабатывать — это был бы ее выбор? :)

        • x-foby
          /#19326128

          Очень рад, что у Вас и Вашей девушки получилось! Это прекрасно!

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

          Из троих профессиональных программистов, ехавших сегодня на рыбалку, двое начинали с консольных QBasic/Pascal/C, и один — с вёрстки. Кстати, в числе начинавших с QBasic/Pascal/C — девушка.

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

          Ну вот и проверим!)

    • 0xd34df00d
      /#19322106 / +3

      нужно объяснять основы

      Прям с лямбда-исчисления и стратегий выполнения, да.


      Ну или хотя бы с Кормена.

      • AnutaU
        /#19322842

        А это сарказм был?

        А то я конечно одобряю и то, и другое, но в текущей ситуации — «а так я хоть понимать тебя буду» — Кормен может пригодится только если автор — спортивный программист, и диалоги там получатся примерно такие:

        — Дорогая, на контесте такая-то задача была, дак я затолкал жадность за квадрат, а доказать не могу
        — Ну вот же, по индукции…

        • 0xd34df00d
          /#19323206

          И сарказм, и не сарказм. Если бы мне было кого обучать, я бы действительно начал с лямбда-исчисления (или подкинул книжку Haskell From the First Principles), если вообще не с матлогики (и нет, это скорее будет не булева алгебра, а исчисление предикатов).

          Впрочем, не знаю, у меня, наверное, какое-то скучное программирование, я дома в основном задачки всякие для себя решаю и учебники раскуриваю, озарения в основном приходят по ним.

          • tyomitch
            /#19323396

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

          • JC_IIB
            /#19325070

            или подкинул книжку Haskell From the First Principles

            Взгугланул я отзывы

            TL;DR: «книга очень плохая» (С)

            Кому верить-то? :)

            • 0xd34df00d
              /#19325612

              Себе, конечно же!


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


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


              С третьей — а лучше всё равно ничего нет. RWH шикарная, но, увы, старовата, и не с основ. LYAH вроде ничего, но тоже уже староватая.


              С четвёртой — я так, глазами пробежался по рецензии. Ну, за эти 1200 страниц вам расскажут ещё и про всякие там Foldable/Traversable пополам с монадными трансформерами, и расскажут, что да как. Это как если бы Прата (которого я рекомендую по C++) включил в себя кусочки Мейерса и Саттера, и мы бы потом удивлялись, что учебник могут поднять только очень сильные программисты. Удивляться, что на рекурсию ушло 25 страниц, тоже странно — у того же Пирса на fixed-point combinator в нетипизированном лямбда-исчислении ушло, наверное, две страницы, и ещё две ушло на описание fix для STLC, а это куда более фундаментальные и ещё менее очевидные вещи.

        • Dr_Faksov
          /#19324300 / -2

          Мы с милёнком занимались
          Искуством компиляции
          Очень вредное оно
          Пропали менструацмм

          Мой милёнок сущий хакер
          Я его послала нахер
          Захотел он, его мать
          Кое что во мне взломать!

          Мой милёночек меня
          Вчера разархивировал
          Дизассемблером меня
          Дефлорасемблировал

          Мы с милёнком занимались
          Да наладкою сети
          Заголовок чтоб пакета
          Мог в мой роутер войти

          Мой миленок по ночам
          Что-то програмирует
          Докинг-станцию мою
          Напрочь игнорирует

      • Druu
        /#19324934 / +1

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

        • iig
          /#19325042 / -1

          самое то, чтобы поддержать интересный разговор в культурном обществе.

          ORLY? Культурное общество, которое в теме, наелось этими разговорами на скрамах. А которые не в теме — не поймут…

          • Druu
            /#19325050 / +2

            Культурное общество, которое в теме, наелось этими разговорами на скрамах.

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


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

            • 0xd34df00d
              /#19325620

              Я как-то на митинге щегольнул, что мутабельные ссылки возвращают тьюринг-полноту STLC.


              Правда, это был митинг интересующихся хаскелем.

              • AnutaU
                /#19325632

                Да вы, батенька, знатный щёголь!

    • nerlihmax
      /#19322680

      Мое личное мнение сводится к тому, насколько и как сильно разбит на подмодули курс обучения чему-либо. Я, будучи заинтересованным школьником, классе в 7-8 учился в «ИТ» в интернете по ВУЗовским курсам: это позволило мне в 10-11 классе подрабатывать фрилансом в веб-фуллстак. Мои же не менее заинтересованные одноклассники учились всему методом проб и ошибок, гайдами и туториалами. Они к тому же 11-ому классу знали и умели от силы половину того, что умел я. Их скорость познавания нового была в разы меньше. Отсюда я сделал вывод — чем более структурирован план обучения и чем более он прямо-линеен — без перескоков от темы к теме — тем более просто и эффективно познается материал. По сей день я удостовериваюсь в своей теории.

    • Source
      /#19323988

      Мне тоже показалось, что у автора раздвоение личности… Сначала ему не нравились курсы с целью создать сайт, а в итоге он решил обучать на примере создания сайта. Только по сравнению с обычными курсами для новичков, усложнил всё на пару порядков.
      Тема, конечно, сложная… Но одно точно: нужен короткий цикл "обучение" -> "программирование" -> "результат". Ну, какой-нибудь консольный конвертер из миллилитров в граммы и обратно для разных кулинарных субстанций, а не вот это вот всё...

    • aPiks
      /#19324848 / +1

      Я тоже не понял, как автор собирается вот это всё впихнуть в неокрепшую голову своей девушки. Тем более, что новичкам важно видеть какой-то результат на каждом этапе. А какой результат будет тут, скажем, через неделю — две после начала?
      Как по мне, так начинать надо было с обратной стороны. Сначала html, css, js. Потом typescript, который плавно подвел бы человека к статической типизации. Да и после объектов в js понять все эти json было бы намного проще. Ну а потом можно Go. Единственное, PostgreSQL это очень жирно для новичка. Можно начать с MySQL. Для начальной цели она подходит, а изучить можно недели за 2, занимаясь по 10 минут в день.

    • qpwoei
      /#19325000

      за пол года, при должной самомотивации девушки, этого более чем достаточно что бы ее мозг начал работать в правильном направлении, она научилась держать «лопату» в руках и начала самостоятельно рыть траншею, периодически спрашивая «ой, я тут лопайто ударила и этот тросик искрить начал — это баг или фича ?»

  2. KevlarBeaver
    /#19321664 / +10

    А если я автомеханик, я должен ознакомить девушку с тем, как перебирать двигатель?

    • fshp
      /#19322026 / +3

      Через выхлопную трубу

      • 4eyes
        /#19325072

        Это если механик-гинеколог.

    • agarus
      /#19322274

      Было бы странно этого не сделать, если это то что вы любите и вам уже хочется получить плюшки работы учителя — возможно наиболее значимой профессии :)

  3. mapron
    /#19321696 / +10

    Начал за здравие, закончил не очень. Если девушка не фанатик, готовый на энтузиазме работать несколько недель, мне кажется на первом шаге у вас выйдет пробуксовка уже на второй день.
    Для изучения основ лучше все же брать задачу, которую вы сами могли бы полностью реализовать за 10-15 минут (не преувеличение).
    (был небольшой опыт такого обучения — по итогу можно сказать успешный (программистом не стала, но стала понимать меня)).

    • x-foby
      /#19321870

      Как думаете, возможно ли на описанных мною этапах, практиковать ваш метод?
      Идея завершаемых за 10-15 минут задач мне очень нравится. Это «детский» подход, который, как мне кажется, на взрослого человека может подействовать с не меньшим успехом.
      Главное — постараться подобрать действительно интересные задания, желательно применимые в конечном проекте.

      • Revertis
        /#19322546

        Можно начинать со Sketch'а, делать простенькие игрушки.

      • mapron
        /#19322922

        Да черт его знает в самом деле. Я думаю было бы нелепостью утверждать «нет, это не может работать» — т.к. все люди разные, сработать может даже самая лютая херня) Скажем так, я был просто скептичен. Если вы «задекомпозируете» свое обучение на вполне себе завершамые кусочки «по 1-2 сторипоинта», то возможно будет больше выхлопа — даже если девушка «сорвется» на второй день, все равно будет какой-то завершенный результат =)

        На самом деле, вопрос в том что девушка больше хочет сама «просто научиться понимать все эти штуки» или научиться «думать как программист».

  4. vadimr
    /#19321702 / +10

    Святая женщина!

  5. tommyangelo27
    /#19321712 / +11

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

    • kinall
      /#19321752

      Хех, когда-то именно такой подход надолго отвратил меня (и, думаю, не только меня) от программирования вообще. Все эти «неА и Б или Цэ или неД», блок-схемы с ветвлениями и 10011001 — это одна вселенная (нудная и скучная, пахнущая меловой пылью, геранью и ватой на школьных окнах), а Doom, keygen'ы и вирус ILoveYou — совсем другая (загадочная и магическая, где работали заклинания). И связи между этими вселенными никак не виделось…

      • SergeyMax
        /#19321838 / +7

        Человек, которому скучно от ветвлений и 10011001 — никогда не станет программистом.

        • iig
          /#19321918 / -5

          Есть мнение, что математика программисту тоже не нужна. Вместе с историей, философией и прочим высшим образованием.

          • fshp
            /#19322036 / +4

            Можно долго спорить на эту тему. Но для начала стоит понять, кого вы подразумеваете под программистом?


            Например человек разрабатывающий ПО для томографов, где требуется реализация преобразования Радона, это программист? Нужна ли ему математика?


            А например разработчики игровых движков, они программисты? Нужна ли им математика и физика?


            В общем случае вообще не корректно говорить об математике. Нужно говорить о предметной области, а она везде разная.

            • iig
              /#19322220 / +1

              Это шутка была, не совсем веселая. Программисты они всякие бывают, про 1Сников забыли упомянуть.
              КМК, нужно иметь понимание и в базовых областях (та же математика), и в предметной. И в нескольких смежных. А то может получиться совсем узконаправленный специалист, умеющий решить ровно одну задачу по ровно одной схеме.

            • altai2013
              /#19322244 / +1

              В ответ на классический пример с математикой в 3D-движках, автопилотах и медицине, обычно приводят не менее классический ответ про процент программистов, работающих в этих отраслях :) На мой взгляд, значимость математики в сфере программирования переоценивается. Тем 5% людей, которым она нужна, проще взять несколько обучающих курсов и получить необходимые знания. Там не такой большой объем, чтобы не справиться. Вместо этого у нас бомбардируют мат.анализом 100% разработчиков, включая 1С-ников, PHP-шников и администраторов баз данных. Неэффективно.

            • homocomputeris
              /#19322630

              Так всё просто: есть такая специальность «математик — системный программист». Он, очевидно, математику знает.
              А вот программисты приложений, по мнению ОКЗ, «создают и поддерживают программный код, указанный в технических инструкциях и спецификациях для программных приложений и операционных систем». Вот дали ему формулу — он кодит.

        • 0xd34df00d
          /#19323236

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

          Где-то видел забавное мнение о том, что вся эта computer science делится на два лагеря: логики и алгоритмисты. Алгоритмисты любят считать сложность, рисовать блок-схемы и ковырять битики. Логики любят заниматься какой-то абстрактной чепухой. Так что, может, человек просто принадлежит другому лагерю.

          • SergeyMax
            /#19323312 / +3

            Мне скучно от 10011001
            Хм, а по вашему нику и не скажешь!

      • FoterIS
        /#19323248

        Для меня это было самое интересное на курсах информатики в школьные годы.

  6. DaneSoul
    /#19321784 / +4

    Зачем лезть в дебри фронтенда? Тем более при том, что там каждые несколько лет все сильно меняется и к фундаментальным основам это имеет слабое отношение.
    Зачем вообще начинать с клиент-серверной архитектуры?

    это либо курсы по веб-программированию (PHP, JS, Python, etc)
    Курсы по Python есть не только по Веб-программированию.
    Посмотрите вот этот курс для начинающих — www.coursera.org/learn/interactive-python-1 (и его вторую часть), где с нуля учат делать простые игры на Python прямо в браузере (у них есть интерпретатор Python на JavaScript), адаптируйте его для Вашей девушки и будет и интересно и познавательно!

    • x-foby
      /#19321880

      Спасибо, обязательно посмотрю!


      Разработка сервера и клиента в данном случае не является первоцелью, на текущий момент просто это оказалось тем, что её заинтересовало (как конечный продукт), в отличие от попытки разработать игру. Думаю, здесь нужно отталкиваться именно от этого — от интересов ученика.

      • sunnyfox
        /#19325996

        Поддерживаю автора комментария выше. Я много лет каким-то боком немножко относилась к программированию. Бейсик и ТурбоПаскаль с рисованием домиков в школе, С в вузе (дааа, те самые указатели надолго понизили мне самооценку и желание… заниматься программированием), HTML и CSS в рамках самообучения, VBA на работе и т.д. Но при этом основная рабочая деятельность лежала совсем в иной плоскости. А вот после нескольких курсов Python for Everybody профессора Чака на Курсере я таки ушла с головой в программирование, сменила работу, и, не побоюсь признаться, получаю от этого неистовое удовольствие :) Отличный на Курсере материал (разве что по-английски, одному из условий в посте не соответствует). И Python — замечательный язык с простым и лаконичным синтаксисом.
        Мне кажется, начинать объяснения лучше именно с алгоритмов (на примере тех же рецептов — готовый простейший алгоритм), и выбрать как раз язык с динамической типизацией, он не требует запоминать и понимать всякие int, float, string, bool, их отличия, можно сразу перейти к основам алгоритмической логики. На типах и прочей теории вы можете сразу завязнуть и потерять интерес «клиента». Я понимаю желание сделать систему «кошерной», современной и т.д., но как уже выше неоднократно отметили, это не для начинающих. Голова взорвется.

        • Druu
          /#19326242 / +2

          Мне кажется, начинать объяснения лучше именно с алгоритмов (на примере тех же рецептов — готовый простейший алгоритм), и выбрать как раз язык с динамической типизацией, он не требует запоминать и понимать всякие int, float, string, bool, их отличия, можно сразу перейти к основам алгоритмической логики

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

          • sunnyfox
            /#19326838

            Я же не предлагаю ей сразу в энтерпрайз с этими знаниями, это лишь первый шаг обучения. В том же Scratch, когда котика по экрану гоняешь, ты не пишешь у каждой команды тип переменной, мол, пройди int шагов и скажи string. После понимания алгоритмов на следующем этапе можно перейти глубже и детальнее. Заблуждение в том, чтобы девушку, у которой ноль знаний, грузить сразу всем. Это как первокласснику, не знающему буквы, начинать объяснять причастные и деепричастные обороты и запятые на письме, а то он же неграмотный будет. Я согласна, что типизация — обязательная необходимая часть знаний, но если она реально заинтересуется и захочет писать код за деньги, а не только понимать своегл парня, то на усвоенном каркасе уже будет понятнее, что такое компилятор и как он работает, почему важно указывать тип переменной, как это влияет и т. д. Тупо зазубренные int, float, bool, без понимания сути, ничего не прибавят к качеству кода.

  7. mksma
    /#19321808 / +8

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

  8. alan008
    /#19321864 / +2

    Scratch!

    • x-foby
      /#19321888 / +1

      Читал как-то про него на Хабре. Мне кажется, что это очень крутая штука для малышей, но не совсем подходящая в моём случае.
      И здесь претензий не к инструменту, а ко мне — не думаю, что я бы смог придумать что-то, что позволило бы заинтересовать мою девушку в Scratch!

      • ganqqwerty
        /#19322246 / +5

        Я попробовал припомнить, сколько своих девушек я обучил программированию, получилось пять. Скретч — это ваш выбор. Пусть сделает игру, например пинг-понг или Марио. Другой вариант — Lego Mindstorms, пусть заставит работа пройти квадратную траекторию с помощью их labview-подобного языка.
        После пары месяцев таких задачек покажите ей код простой веб страницы и заставьте написать html. Дайте понять, что все сайты в мире состоят из html-прямоугольников. Покажите как с помощью css можно закруглить уголки и сделать цвета. Покажите как с помощью js можно делать анимашки или калькулятор.


        Переход к пониманию того, зачем вообще нужен что-то считающий сервер — сложный момент. Проще всего принести несколько компов/мобилок и запрограммировать кнопку «я был тут» на php, на которую с нескольких компов и нажимать — а она пусть увеличивает счётчик (хранение в plain-файле, никаких баз данных).


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

        • 0xd34df00d
          /#19323238

          > получилось пять

          TFW обучили больше, чем у меня их вообще было. Зачем вы так :(

  9. Daddy_Cool
    /#19321866 / +1

    Ответ на вопрос ЗАЧЕМ — невнятен.
    Девушки существа более прагматичные, а тут речь о том, чтобы заниматься чем-то а) творческим (что как правило женщинам труднее), б) непонятно зачем.
    Есть вероятность, что дальше «Hello, world!» вы не уйдете. Хотя я могу конечно быть не прав — интересно как всё будет дальше. Ни в коем случае не хочу обидеть прекрасную половину человечества, просто наблюдения/личная статистика.

    • x-foby
      /#19321900 / +1

      Девушки, кроме прагматичности, ещё и не склонны сдаваться. Вообще не правильно, наверное, вот так вот гендерно кого-то определять, но, по моим наблюдениям, всё же девушки чаще доводят начатое до конца, даже если это перестаёт им нравится.
      Надеюсь, в данном случае это тоже сработает.

      • Daddy_Cool
        /#19321954 / +2

        ещё и не склонны сдаваться.
        Если в конце есть четко выраженная цель на уровне «иметь» — то да.
        «Научиться программировать» — плохая цель по формулировке — отсутствуют критерии достижения.
        «Вообще не правильно, наверное, вот так вот гендерно кого-то определять,»
        А… ну да — тут я сильно извиняюсь. Я как это… слегка «биологизатор». )))

      • evocatus
        /#19322086 / +13

        Вопрос в том какова настоящая мотивация.

        На этот, казалось бы, абсолютно справедливый вопрос я получил не менее справедливый ответ:
        — Ты всё равно постоянно говоришь о программировании, а так я хоть понимать тебя буду.

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

        Если говорить про изучение, то почему бы и нет, Go действительно хороший инструмент для этого, только я, как человек, 4 года преподающий программирование в школе помимо основной работы, сразу бы посоветовал забыть про все эти REST, PostgreSQL, Vue.JS и пр., потому что даже на освоение процедурного программирования (без указателей и массивов — только ветвление, циклы и консольный ввод/вывод) уйдёт около года.

        И тут автору следует себя спросить — он всерьёз хочет сделать full-stack девелопера из девушки? Хорошо объяснить общую логику работы всего этого, фундаментальные закономерности (по сути всё сводится к этому пресловутому процедурному программированию), но не нужно, закусив удила, сразу бросаться в омут, а вести дело следует таким образом, чтобы девушка могла прекратить сохранив лицо и ни в коем случае не доводить до скрытого раздражения и пр. Устраивать реалити-шоу на хабре — откровенно дурная затея. Надеюсь, что она про это не в курсе.

        • x-foby
          /#19322330 / +1

          Мне тяжело что-то добавить к Вашему комментарию, потому как всё в нём — правда.
          Позволю себе лишь добавить маленькую ремарку.
          Многие вещи, на мой взгляд, зависят от степени доверия. Скажем, публиковать чью-то историю (это ведь не только моя история), не поставив в известность другого участника этой истории — это, на мой взгляд, противоречит всем нормам морали. Поэтому нет, она в курсе.
          Из уровня доверительности отношений между людьми так же выстраиваются их взаимоотношения уровня учитель-ученик. В школе, объясняя ветвления и циклы нескольким десяткам незаинтересованных учеников, вы можете потратить и год, да. Почему? Мне кажется, потому что ученики Вам не доверяют. Не доверяют не лично Вам как человеку, Вы здесь вообще не при чём. Речь идёт о недоверии социальной группы «школьники» к социальной группе «Школьные преподаватели», и речь о доверии своего личного времени — им не интересно в циклы и ветвление, так же как не интересно в Основы Православия и Кубановедение.
          В моём случае человек целенаправленно доверил личное время мне. Думаю, возможно ожидать чуть более быстрого результата.

          И всё-таки спасибо за глубокий комментарий. Этим, пожалуй, и ценна возможность дискуссии, что можно копнуть совсем в другую сторону, например, в личность автора, и это действительно будет интересно!

          • evocatus
            /#19322544 / +1

            Я согласен с тем, что взрослый человек, тем более с высшим образованием, это не школьник и будет обучаться быстрее при наличии мотивации и хорошего учителя. Но тут может быть «ошибка выжившего»: те, кто к этому склонны и кому это интересно, начали это изучать интенсивно ещё в школе и, в итоге, пришли в эту профессию, или смежную. С другой стороны, если в школе/институте условий для этого создано не было — плохой учитель, отсутствие интереса/времени, гендерные предрассудки и пр., то талант мог остаться неразвитым, а сейчас может взлететь.
            На самом деле хорошо, чтобы она хотя бы в общих чертах понимала специфику вашей работы, чем вы там занимаетесь, какие там бывают проблемы. Это, кстати, можно рассказать даже без обучения программированию (прекрасный пример — серия рассказов Карела Чапека «как это делается»). Потому что в парах с хорошими глубокими отношениями и в семьях партнёры интересуются «как дела на работе» и лучше, если это будет не пустой разговор, а возможность поделиться успехами/проблемами, услышать мнение со стороны, получить совет. Поэтому, мне кажется, что вам следует также сделать симметричный шаг по отношению к ней. И вообще — счастья и удачи.

            • x-foby
              /#19323082

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

              Спасибо! Не могу не ответить взаимностью: Вам тоже желаю счастья и удачи!

    • alaskanebraska
      /#19322964 / -1

      Зачем вы пытаетесь подвести какие-то аргументы к полу? Женщины бывают абсолютно разные и с разным складом ума. Как и мужчины. Кстати, как человек, которому больше по душе писать статьи и рассказы, чем код (хотя код нужно писать частенько), я не понимаю, что в этом творческого, особенно в сравнении. Продумывать алгоритм решения задачи — совсем не то же самое, что сочинять рассказ. Это у меня трудности, потому что я женщина и не склонна к творчеству? :-)

      • Daddy_Cool
        /#19323016

        «Зачем вы пытаетесь подвести какие-то аргументы к полу?»
        А почему бы и нет? Пол есть некая характеристика объекта, почему бы не строить модели по влиянию этой характеристики на… всё?
        «Продумывать алгоритм решения задачи — совсем не то же самое, что сочинять рассказ.». Попытался мысленно сравнить ). Программирование труднее — рассказ нельзя написать неправильно — он может быть хорошим, может быть плохим, но критерий работоспособности к нему неприменим.
        Ну кстати можно посмотреть свою статистику — сколько вокруг вас женщин-программистов или писателей.
        А где/как почитать ваши статьи/рассказы? Интересно очень!

  10. untilx
    /#19321878 / +3

    А к чему, собственно, такие сложности? Возьмите старый добрый Delphi или c#: тут и строгая статическая типизация, и ооп, и отличная IDE, и работа с формами, которая очень помогает в освоении ооп. К тому же не будет всей этой ерунды с разделением на фронт и бэк, которая ей совершенно не нужна.

    • x-foby
      /#19321910 / +1

      Я не писал на Delphi с конца нулевых, интересно сейчас посмотреть, что и как там.
      Но всё же, мне кажется, садить новичка в эти самые отличные IDE стоит, только если его цель — стать профессиональным программистом.
      К тому же, дома у нас не Windows.


      Однако, в будущем, если она всё-таки не бросит меня (как педагога, конечно же), можно попробовать, спасибо!

      • untilx
        /#19321934 / +4

        www.lazarus-ide.org

        Сажать за нормальную IDE стоит хотя бы потому, что с ними порог вхождения намного ниже. Гораздо понятнее, когда ты берёшь и кидаешь мышкой кнопку на форму, а не описываешь вручную всю разметку страницы. В этом плане даже QtCreator будет проще, чем html+css+js.

        • x-foby
          /#19321956

          Про Lazarus я знаю, конечно! Возможно сейчас он не такой сырой, каким был, когда я знакомился с ним. Можно будет посмотреть на досуге, спасибо!

      • iig
        /#19321972

        Я слышал про некий кроссплатформенный Kilyx, родственник Delphi..

        • x-foby
          /#19322338 / +1

          По-моему, Kylix закончился ещё во времена, когда за Delphi стояла Borland, а не Embarcadero

        • nmrulin
          /#19323134

          Дельфи сейчас на андройд компилирует.

  11. lxsmkv
    /#19321906

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

    • x-foby
      /#19321916

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

      • sotnikdv
        /#19322208

        Вы мудрый.

        «Я не отвечаю за выбор цели, я отвечаю за достижение цели. Ты выбрала это сама. Ты приняла это решение. Ты попросила меня довести тебя до этой цели. И я согласился помочь за счет моего личного времени. Я в тебя верю, ты умная, просто не любишь думать. Я вложил в тебя кучу личного времени и сил. Ты вложила кучу сил и времени. Поэтому, как бы не было трудно, пошли дальше» — эту мантру я говорил каждые несколько недель.

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

        Ну и заложите вейпойнты, типа сесть и спросить, мы двигаемся дальше? Каждые месяцев 6.

        • x-foby
          /#19322340

          Да, вы правы, это обязательно и нужно было упомянуть об этом в статье.
          Постараюсь это сделать в следующей. Спасибо!

  12. sotnikdv
    /#19321926 / +11

    Фундаментальная ошибка — ожидать, что обучение будет быстрым. И что можно быстро рассказать нужные вещи и все.

    Если бы все было так просто, не платили бы такие зарплаты программистам.

    Другой склад ума, другая способность фокусироваться, способность жить с «я не знаю» и «у меня не получается» и жить в состоянии стресса и неопределенности. Необходимость пользоваться мозгом регулярно (это проблема и для существующих программистов). Сюда же знание английского.

    Уже поверх этого накатываются технические знания. И процесс сей долгий и мучительный.

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

    Жена, например, прошла собеседование в долине и работает Sr. Software Engineer не имея ни дня работы до этого. Процесс был долгий и тяжелый. Но мы начинали не просто с нуля, а с отрицательного уровня.

    План обучения то я могу дать, более того он доступен на сайте проекта, но все эти споры о том что и в каком порядке давать — они бессмысленны. В процессе обучения программиста важна настойчивость и размеренная работа, это как раз случай, когда «терпение и труд все перетрут». Ум, талант и т.д. — важное, но недостаточное условие успеха и даже не необходимое.

    Ну и по-сути, если человек хочет этим заниматься профессионально, вам придется повторить многое, что вам давалось за 5 лет в институте. И сэмулировать ему среду, коллег, дедлайны и т.д.

    В общем это разговор на полноценную статью.

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

    • x-foby
      /#19321952

      Спасибо за столь подробный комментарий.
      Я как раз-таки и писал о том, что не хочу обучать свою девушку в формате экспресс-курса, поскольку, как показывает опыт, в том числе, как понимаю, и ваш, — ничего это не даст.

      Да, предстоит долгая и усердная работа, к которой мы, вроде бы, готовы.

      Согласен на счёт бессмысленности споров о порядке обучения в том плане, что это, пожалуй вопрос большого количества факторов, в том числе личностных.
      И всё же, если Вам не сложно, дайте ссылочку на на план обучения — возможно, это заинтересует не меня одного.

      • sotnikdv
        /#19322200 / +2

        К сожалению, экспресс-курс ничего на дал, мы пробовали.

        Из проблем, с которыми мы столкнулись (и которые ИМХО у вас тоже) были:
        — Неверная постановка цели. Правильная цель — дотянуть человека до найма в качестве джуниора или интерна. После этого его развитие пойдет гораздо более быстро. Поэтому наша задача — конкретно уровень джуниора. Все остальное определяется этой целью, программа и т.д.
        — Нехватка времени. Нормальная учеба не-айтишника требует много времени, а не 2 часа после не-айтишной работы. Но если человек работает в IT, то 2-3 часа после работы в течение 8-12 месяцев вполне хватит. Вы недооцениваете фактор мышления. Сделать джависта из PL/SQL девелопера — это 8-12 месяцев по 2-3 часа. Сделать джависта из билетного кассира — это годы фуллтайма. Сделать джависта из бухгалтера имея 2-3 часа в день — это я даже не знаю, зайдите через 3 года, расскажу как вышло.
        — Нехватка мотивации. Сами понимаете, вдумчиво вбиться головой об стену не каждому дано, а без мотивации так вообще признак неумного человека. Вопрос мотивации каждый решает по своему. Единственное, что могу сказать, это должен быть выбор человека, а не навязанное Вами.
        — Нехватка коллег приводит к угасанию интереса и развалу процесса. Как это ни странно, проще менторить группу, которая помогает друг другу, держит в тонусе друг друга, делает код ревью, обсуждения и т.д.
        — Нехватка времени ментора или отсутствие процесса как такового. Т.е. процесс развалится уже на вашей стороне. Делайте ежедневные стендапы. Найдите несколько менторов, ваших друзей и коллег.
        — Забывание. Почему я говорю о размеренной работе, люди, которые работали нерегулярно, демонстрировали просто ужасающее забывание и деградацию. Поэтому критично важны стендапы и ровная работа каждый день.
        — Неверный отбор кандидатов. У меня их прошло с полсотни, появились закономерности. Умные, но нетерпеливые и недостаточно настойчивые отвалились. Люди, которые приходили с «я хочу, сделай мне чудо», т.е. я для них был необходим и без меня они не могли даже начать — отвалились. Идеальные кандидаты те, кто уже сам начал что-то делать, а вы его просто можете ускорить в его прогрессе. Дошли до конца не самые умные, не самые быстрые, а те, кто был настойчив и умел ровно работать, каждый день, размеренно и спокойно, кто сам начинал делать без меня.

        Из общих рекомендаций:
        — Отдельно нужно учить кодить (код, теория и архитектура) и проходить собеседования (задачки и дизайн-вопросы). Две последовательных фазы. 12 и 6 месяцев фулл-тайм для неайтишника, если он умеет и любит думать.
        — Хвалю Ваш план, но это должен быть финальный проект фазы учить кодить. Перед ним, около года, должна быть серия разгонных задач. j2core.com, посмотрите план и вопросы на теорию. (Ему уже 4 года, он по прежнему ориентирован на джава стек, но проект понемногу мутирует в тусовку, в которой кто-то ушел в сторону девопс, кто-то в джаваскрипт и т.д. Нас там 3 ментора, два инженера и два студента. И я очень надеюсь, что мы доучим последних через год и наша туса останется сугубо дружеская. Ибо надоело до жути)ю
        — Репо, код ревью, стендапы и обсуждение теории с 1-го же дня
        — Подумайте о группе, несколько студентов и несколько менторов.
        — Приготовьтесь к 2 годам упорной работы. Но опять же, это если цель — сделать из нее программиста.

        Обратите внимание, ни слова о программе :)

        Представьте, что вам нужно научить программированию 14 летнего школьника, вашего текущего HR и кассира из кинотеатра, ну пусть 35 лет. Вот в это мы уперлись. Даже я бы сказал ударились. Когнитивные способности, время и мотивация.

        • altai2013
          /#19322250

          Чтобы умные не отваливались, нужны другие методики обучения. Мы все привыкли к усреднению, к массовому образованию, всем так проще и оно работает для большинства. Но с трудными и с умными нужно работать по-другому, чтобы они не отваливались.

          • sotnikdv
            /#19322602

            Вы неверно поняли мысль.

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

            Этому наблюдению сто лет в обед, пришло из спорта — «напор уделывает класс».

        • x-foby
          /#19322346

          Мне нравится читать такие комментарии — в них есть вещи, которые я не продумывал, к которым пока ещё сам не дошёл.
          Спасибо! Постараюсь учесть то, что не было учтено изначально!

          • sotnikdv
            /#19322606

            Самое ценное знание, которое Вы можете почерпнуть из комментариев, это то, что это возможно :)

            Да, можно взять далекого от IT человека и сделать из него хорошего программера. Я недавно вообще взял почти безнадежный случай и думаю оно «взлетит».

            Остальное — рекомендации.

            • x-foby
              /#19323092

              Удачи Вам в этом ещё одном случае!

              И спасибо за содержательный диалог!

    • andrew8712
      /#19322194 / +3

      Жена, например, прошла собеседование в долине и работает Sr. Software Engineer не имея ни дня работы до этого. Процесс был долгий и тяжелый. Но мы начинали не просто с нуля, а с отрицательного уровня.


      прошла собеседование в долине


      работает Sr. Software Engineer


      не имея ни дня работы до этого


      Обидно становится, когда после 7 лет разработки ты все еще не чувствуешь себя Sr. Software Engineer, а тут…

      • sotnikdv
        /#19322206 / +3

        Если бы в вас вкачали столько времени и знаний, Вы бы уже обрели сверхразум, не то что Sr. Engineer тайтл.

        5 лет только фуллтайм обучения, при этом менторили ее на непрерывной основе Principal Engineer / Software Architect и Sr. QA Engineer / Sr. Java Engineer. Плюс тусовка IT. Плюс некоторые вопросы вообще задавались местным топам.

        Поэтому не расстраивайтесь. И да, задайте в своей компании вопрос о менторстве, это вас ускорит.

        P.S. С другой стороны мой хороший знакомый, CTO крупной корпорации, которому я год сносил мозг, посмеялся и сказал «что еще раз говорит, что процесс найма в долине — г… но»

        • ganqqwerty
          /#19322256

          Очень интересно послушать ваш опыт, особенно учитывая то, что вы достигли осязаемого результата (пусть и странного, начинать карьеру с сениора — дискредитирует понятие сениора).

          • sotnikdv
            /#19322588

            Ну, перекачал немножко :) Тайтл не я давал, а ей дали после собеседования.

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

            Я, в общем, ваше разочарование разделяю. Поэтому еще 4 года назад выдал своей кошке тайтл Senior Software Engineer с аргументацией, что она «тоже нихрена не знает, но хоть глупостей не говорит».

            Вот, недавно до принципала повысил, нужно будет бумагу официальную оформить и в рамку на стену.

  13. BestNastos
    /#19321930 / +1

    Автор, я в Вас верю! У моего мужа получилось XD
    Учили Java, начинали с JavaRush. Но ваша программа мне видится огромной и непосильной. Судя по себе, я бы это осилила минимум за год (а то и два) усердной работы и чудовищной мотивации. Если действительно нацеливаться на хорошие знания. Это при том, что я по образованию учитель английского и с языком проблем нет :)

    • x-foby
      /#19321938 / +1

      Благодарю!
      Очень интересно слышать мнение человека, непосредственно пришедшего в наш лагерь подобным образом.
      Сколько времени у вас ушло на базу? Были ли проблемы с какими-то конкретными областями?

  14. orion76
    /#19321962

    Эк Вы размахнулись…
    Такое не каждому крепкому джуниору под силу, вот так вот, сразу…
    Но тема интересная…
    Я тоже дочь (падчерицу) к айти приучаю…
    Еще когда в школе с ней уроки по математике учил, заметил — зачатки абстрактного мышления и логики есть… Надо только развить…
    Прошли с ней курс на ютюбе по верстке и css…
    Когда работу вэб-форм объяснял, она сообразила, как ей пароль от аккаунта вкантактов у ее парня увести-)
    Перед освоением sass хотел начальный курс по js пройти, чтобы сначала поняла, что такое переменные, if-then, while, for и т.п.

    Но… интерес внезапно прекратился…

    Теперь ломаю голову, как его возобновить…
    Пока кроме «ремня» ничего в голову не приходит-)
    Надеюсь, жисть поможет убедить-)

    • FreeNickname
      /#19322000 / +2

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

    • x-foby
      /#19322356

      Я думаю, что в Вашем случае сначала необходимо подумать, а нужно ли оно ей?
      Возможно интерес угас не из-за вашего стиля преподавания, а просто от того, что сейчас её волнуют более интересные вещи, раз уж Вы заговорили о парне)
      В конце концов, главное — чтоб человек, особенно ребёнок, был счастлив!

  15. edogs
    /#19322024 / +1

    harward cs50 посмотрите.
    Очень дельная вещь как для начинающих, так и для не совсем начинающих, так и для тех кто хочет понимать о чем речь пусть и не собирается идти в эту профессию.

    • x-foby
      /#19322364

      Спасибо! Обязательно гляну на досуге.

  16. iliabvf
    /#19322054

    Я вот неделю как помогаю жене проходить FreeCodeCamp, отличная штука, всем советую. У нее есть шанс пройти React, посмотрим.

  17. 0xd34df00d
    /#19322104

    сильная статическая типизация

    Строгая. Сильная и строгая типизация — немного разные вещи.

    • AnutaU
      /#19322182 / +3

      Опаньки, а можно поподробнее и желательно со ссылкой на источник? Мне везде термины «строгая типизация» и «сильная типизация» попадались как синонимы, которые оба соответствуют англоязычному «strong typing».

      • 0xd34df00d
        /#19323228

        Я сам себе ссылка!

        Серьёзно, на русскоязычную литературу я сослаться пока не могу, так как русскоязычной литературы по системам типов толком нет. Приходится разделять на ходу и обобщать по результатам неформальных дискуссий.

        В англоязычной литературе упоминается скорее не сила и не строгость типизации (так что оба термина так себе), а выразительность [expressiveness, power] и безопасность [safety] соответственно, где безопасность определяется вполне конкретным образом (типизируемые термы всегда имеют применимые правила вычисления на любом шаге вычисления в small-step operational semantics, например).

        При этом радоваться одной лишь безопасности (как в случае Go) несколько странно — вон, STLC тоже безопасное, но достаточно легко показать, что оно даже не Тьюринг-полное.

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

        • AnutaU
          /#19323730

          Подождите. Вы говорите, что сильная и строгая типизация — это разные вещи, но не говорите, в чём разница. Более того, где почитать — тоже не говорите. Это получается не общепризнанный факт, а частное мнение — ваше и тех, с кем вы это обсуждали (но мы даже не знаем, с кем). Я знаю, что вы очень уважаемый товарищ, но это же как-то… несерьёзно?

          Ну с русскими терминами в этой области швах, я согласна. Но вы говорите, что англоязычных аналогов вовсе нет? Если вы считаете, что термины «строгая» и «сильная типизация» вообще некорректно употреблять, то к чему ваш изначальный тезис?

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

          • 0xd34df00d
            /#19323784

            Сильная — это expressive, строгая — safe (не стоило рассчитывать на мелкое слово «соответственно»). Собственно, эти же аналоги я упомянул выше, не знаю, почему вы говорите, что я говорю, что этих аналогов вовсе нет.

            Про safety я уже написал комментарий назад, про expressiveness, впрочем, говорить сложнее, оно более субъективно, хотя и там можно вводить критерии, да и вообще можно определить его двумя разными способами — как множество инвариантов, выразимых в типах, так и множество семантически корректных программ, которые типизируемы (на самом деле ещё можно говорить о логиках, которые выражаются системами типов, но это совсем смешно в контексте дискуссии).

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

            При этом и STLC, и System F нормализующие, то есть, они оба не Тьюринг-полны, но при этом, думаю, никто не будет спорить, что F выразительнее.

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

            Если вам хочется ссылок прям на англоязычную литературу — можно сослаться на классического Пирса с классической Types and Programming Languages, например, или на более нового и математичного Недерпельта с Type Theory and Formal Proof. У последних, увы, нет доступной pdf'ки, а первый особо не формализует понятие выразительной силы, но вполне говорит вещи вроде «In automated theorem proving, type systems usually very powerful ones based on dependent types—are used to represent logical propositions and proofs.» или «The power of intersection types is illustrated by...» или «The most powerful form of parametric polymorphism is the impredicative or first-class polymorphism…». Ну, в общем, погрепайте сами книжку по слову power. Заодно можете погрепать по strong или strict — в контексте систем типов это не используется.

            А телеграма у меня нет, увы.

            • AnutaU
              /#19323826

              Спасибо, теперь понятнее. Безопасность — это видимо то же самое, что корректность (soundness)? Тут рядышком ещё полнота (completeness), видимо предельный случай для выразительности.

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

              • 0xd34df00d
                /#19323838

                Спасибо, теперь понятнее. Безопасность — это видимо то же самое, что корректность (soundness)? Тут рядышком ещё полнота (completeness), видимо предельный случай для выразительности.

                Блин, а вы междисциплинарно шарите!


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


                Но эти термины вполне устоялись, если не в контексте систем типов (в более научном смысле, как у Пирса), то по крайней мере на «бытовом» уровне, когда нужно охарактеризовать языки или сравнить.

                Окей, как вы называете безопасность, как — силу в смысле упомянутого вами completeness, и как — в смысле возможности навесить на себя побольше гарантий инвариантов на уровне системы типов?


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

                Представляется наименее противоречивым с имеющейся практикой. Но да, YMMV, что мы и наблюдаем в этой ветке.

                • AnutaU
                  /#19323852

                  Окей, как вы называете безопасность

                  У Пирса безопасность употребляется как синоним soundness. Про инварианты лучше утром подумаю, а то ещё не засну :D

                  Раз уж мы книжками кидаемся, то вот довольно современный и всеобъемлющий талмуд — Michael Scott, Programming Language Pragmatics. Там легко можно найти про strong typing, причём в том же примерно смысле, в каком википедия пишет, и в каком все привыкли понимать. Это с такой добротной инженерной (или практической) точки зрения на языки, без углубления в теории типов. Так что этот термин вполне употребляется и его перевод на русский уже занят.

                  • 0xd34df00d
                    /#19323882

                    У Пирса безопасность употребляется как синоним soundness.

                    Англоязычный Пирс говорит про soundness в основном в контексте сравнения алгоритмических и декларативных описаний всяких там типизаций-субтипизаций. Soundness в смысле safety и параллелей с логикой я у него совсем не помню. Да и больно он практический для этого :)


                    К слову о книжках, я ещё Харпера откопал, Practical Foundations for Programming Languages, там да, strong используется целый один раз за всю книгу как синоним к safe.


                    Эх, терминология.

    • Druu
      /#19324978

      Строгая. Сильная и строгая типизация — немного разные вещи.

      Сильная и строгая — это действительно одно и то же, strong typing. Это, условно говоря, когда нет неявных кастов (а слабая, с-но, когда таковые есть). Например, в js слабая динамическая типизация, т.к. 1+'1', а в ts — слабая статическая типизация, т.к. тот же терм валиден, хоть и имеет конкретный тип. В c# — сильная статическая, python — сильная динамическая, с++ — слабая статическая, хаскель — очевидно сильная статическая, лиспы — в основном сильная динамическая (зависит от диалекта офк, scheme-derived обычно сильные динамические, всякое интерпретируемое говнецо — бывает слабое динамическое) и т.д…
      Формлаьно строгим этот термин не является, конечно же.

      • 0xd34df00d
        /#19325640

        Э, ну. В любом языке с сабтайпингом у вас есть неявные апкасты, при этом, очевидно, некоторые из этих языков вполне себе safe.


        Я там выше писал, что надо как-то разделять safety (которое progress и preservation) и expressive power (которых тоже минимум джве).

        • AnutaU
          /#19325684

          Не только в кастах дело: в C например можно всё сломать, обратившись к обычному числу как к указателю. Или указатель на одну структуру скастить к указателю на другую, совсем несовместимую, и система типов это не проверяет. И в рантайме тоже никто это не проверяет — получайте UB.

          • 0xd34df00d
            /#19325688

            Это как раз ровно то, что safety должно предотвращать (а у сей progress theorem не выполняется, хотя я вообще не уверен, что для них есть где-то более-менее официальная операционная семантика).

        • Druu
          /#19325856

          Э, ну. В любом языке с сабтайпингом у вас есть неявные апкасты, при этом, очевидно, некоторые из этих языков вполне себе safe.

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


          Я там выше писал, что надо как-то разделять safety (которое progress и preservation) и expressive power (которых тоже минимум джве).

          Это, конечно, тоже разные вещи, но обычно под сильной/слабой типизацией все же по умолчанию понимают штуку вообще к статическим типам не относящуюся, иначе, согласитесь, бессмысленно было бы рассуждать о том, сильная или слабая типизация в динамических языках. Она там с точки зрения статики везде, очевидно, одинаковая (т.е. никакая).
          А в случае safety и expressive power,, кажется, так и говорят — "типобезопасность" и "выразительность/мощность".
          И, опять же, не думаю что можно формально строго определить понятие выразительности.


          Это как раз ровно то, что safety должно предотвращать

          Ну вот если у вас есть такой аналог safety в рантайме (то есть чекер терм пропустит, но потом рантайм ругнется, что вы яблоки пытаетесь использовать вместо жирафов), то это, условно говоря, и есть strong typing. Сишка вам не ругнется — с ее точки зрения все будет валидно.

          • 0xd34df00d
            /#19325902

            Это такое понятие на пальцах — если язык позволяет в рантайме складывать жирафов с яблоками, значит, типизация слабая. А если нет — то сильная.

            Мне не очень нравится смешение из наличия «правил выполнения» для складывания жирафов с яблоками (сиречь приведение типов) и из отсутствия ограничений типизации на такие складывания при отсутствии таковых правил (то самое safety). Это, ИМХО, два почти ортогональных измерения.


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

            Я согласен с этим тезисом и без всяких «бы». Но, похоже, взгляд на типизацию как на статическую (пока мы не залезаем в зависимую теорию) ерунду, позволяющую статически же, гм, тайпчекать термы с гарантированной завершимостью [для большинства полезных программ], ещё менее распространён.


            Ну вот если у вас есть такой аналог safety в рантайме (то есть чекер терм пропустит, но потом рантайм ругнется, что вы яблоки пытаетесь использовать вместо жирафов), то это, условно говоря, и есть strong typing.

            Именно! Если единственный способ делать даункасты в языке гарантирует выкидывание экзепшонов (как в джаве), то всё безопасно. Если же у меня есть static_cast, и вся проверка ограничивается принадлежностью статических типов одной иерархии (как в плюсах), то нет никакой безопасности.

  18. selivanov_pavel
    /#19322148 / +3

    Прочитал «Как научиться программировать свою девушку». Задумался.

  19. ganqqwerty
    /#19322162 / +5

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

  20. third112
    /#19322172

    В статье верно отмечено:

    Думаю, что поспособствовало этому изучение в школе QBasic и Pascal, простых, понятных и дающих базовые понимания.
    Ok! ИМХО на стандартном Паскале и надо учить. И брать задачи на 10 мин.:
    Свою первую программу (не считая того, что мы писали на уроках) я написал для младшего брата, когда тот стал учить таблицу умножения: ввод диапазона чисел, случайный вывод двух из них брату с предложением ввести их произведение, проверка и так далее по кругу.

    Еще: поиск счастливых билетов, 8 ферзей, жизнь, простые методы сортировки и т.д. Описание ЯП Паскаль (Вирта) можно прочесть за день, понять и попробовать за 1-4 недели.
    ИМХО цель будет достигнута:
    Ты всё равно постоянно говоришь о программировании, а так я хоть понимать тебя буду.
    Потом могут возникнуть другие цели — тогда и ЯП можно сменить, и технологии изучить.

    • ganqqwerty
      /#19322286 / +1

      Все эти ферзи и сортировки — это из области абстрактного искусства с нулевой прагматичностью для человека извне. Тестилка для брата — куда лучший пример, тут цель видна сразу.
      Поначалу писать надо игры, вирусы, домашние странички, секундомеры для мобилки, анимации, генераторы гороскопов, текстовые квесты, интерактивные мультики на скретче, терменвоксы на ардуине, роботов на майндстормс, коптер чтобы взлетел, полетел вперед и вернулся… такие штуки.

      • hengenvaarallinen
        /#19322408

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

        • ganqqwerty
          /#19322934

          Ух. Тригернуло меня на ферзей, десять лет программирую и до сих пор мне абсолютно неинтересно, как их расставить.

          • third112
            /#19326790

            И Ханойские башни не интересны? и преобразование арифметических выражений?
            На каких задачах предлагаете изучать рекурсию?

            • Druu
              /#19327194

              На каких задачах предлагаете изучать рекурсию?

              На математических. Уравнения, неподвижные точки, вот это вот все.

              • third112
                /#19327248

                Девушка хочет понять программирование, а не математику и физику. Если нет достаточных мат. знаний основ — будет доп. трудность, ненаглядность. Классики, вроде Вирта и др., успешно применяли наглядных ферзей, башни и т.д. Зачем изобретать велосипед?

            • ganqqwerty
              /#19327570

              Ну если это веб, JS, вот это все — то на задаче «напечатать объект непонятно какой глубины» или на задаче «выкинуть из объекта непонятно какой глубины все вхождения свойства prop1, потому что API, который мы юзаем, с этим свойством не пропускает». Или, например, реализовать функцию lodash.set — она клевая и полезная. Или вот напечатать генеалогическое древо. Что-нибудь, что имеет хотя бы намек на практический результат.
              Средний человек смотрит на ферзей и думает «зачем это вообще надо? да и шахматы я не люблю, а если бы любил, там такая ситуация никогда бы и не встретилась». Смотрит на ханойские башни и думает «а зачем они перекладывают только по одному кольцу, не проще просто снять все кольца, положить на землю и надеть их на ту башню, на которой они должны быть?»
              Я когда обучал студентов (и особенно школьников) сортировкам, регулярно сталкивался с непониманием того, почему за один раз можно брать лишь два элемента массива и делать лишь одно сравнение. Ограничения должны как-то объясняться, иначе здравомыслящий человек будет чувствовать, что играет в какую-то неинтересную игру с искусственными правилами.

              • third112
                /#19327754

                иначе здравомыслящий человек будет чувствовать, что играет в какую-то неинтересную игру с искусственными правилами.
                ИМХО про все игры можно сказать, что у них искусственные правила. Не только про развлекательные, но и, нпр., про биржевую игру. Так, нпр., Генри Форд возмущается в своей книге курсами валют: что бы вы сказали, если бы сегодняшний метр был равен 0.98 метра вчерашнего?

                И выше Вы сказали:
                Поначалу писать надо игры


                Много людей играют в очень простые игры типа пасьянса FreeCell не спрашивая:
                «зачем это вообще надо?» Конечно, м.б. начинающему хотелось бы написать сложную и более интересную игру, но надо выбирать посильные задачи.
                почему за один раз можно брать лишь два элемента массива и делать лишь одно сравнение
                Пусть попробует взять больше элементов зараз, сделать больше сравнений, доказать, что работает правильно и быстрее :)

                • ganqqwerty
                  /#19327840

                  Ну, когда я говорил про игры, я думал про игру типа «угадай число, которое загадал компьютер».

                • ganqqwerty
                  /#19327872

                  Пусть попробует взять больше элементов зараз, сделать больше сравнений, доказать, что работает правильно и быстрее :)


                  Я в этом случае притаскиваю на лекцию пару десятков карточек с числами и предлагаю их отсортировать, комментируя каждый свой шаг максимально подробно. И человек понимает, что тоже действует по некоторому алгоритму, обычно — сортирует вставками.
                  p.s. принимать экзамены по карточкам было особенно прекрасно. Садишь студента и говоришь ему — ты quicksort, сортируй вот эту колоду карт и рассказывай мне, как ты это делаешь.

                  • AnutaU
                    /#19328016

                    Ооо, я давным-давно школьникам так объясняла сортировки: одного выбирали в качестве «процессора» и он сортировал остальных по росту.

      • third112
        /#19326784

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

        Я и предлагаю конкретные игры, но на 10 мин., а не на несколько лет.
        вирусы

        ИМХО слишком специфично. И какая из них прагматика? :)

  21. ABy
    /#19322238 / +7

    Ждём статью «Как научить программировать своего кота, если ты не Куклачев, но кот хочет жрать»

    • tvr
      /#19322518 / +1

      Ждём статью «Как научить программировать своего кота, если ты не Куклачев, но кот хочет жрать»


      И продолжение —
      «Как грамотно мотивировать кота работать за еду для себя и хозяина на Upwork».

  22. shvilek
    /#19322254

    Попробуйте с приложений под мобильный. Врядли для рецептов девушка будет таскать ноут на кухню. На первом этапе можно делать без бэка. Порисуйте вместе экраны, переходы между экранами, составьте т.з. того что она хотела бы увидеть. А дальше по желанию или на нативном(kotlin, java / swift) или нет(python(kivy), react-native, dart(flutter)). Список рецептов можно усложнять постепенно и на каждом этапе видеть результат.

  23. pfihr
    /#19322282

    На Go идеально обучать основам. Он же квинтесенция C и Pascal, которые в мою молодость были основой для воспитания поросли. Можно и примитивные типы, и примитивные структуры, и базовые алгоритмы быстро попробовать, и посмотреть, как они в ассемблерный код превращаются.

  24. agarus
    /#19322284 / +3

    — Я готова! Готова учиться программированию! Давай!

    Девушка, похоже уже освоила Inversion of control :)

  25. saphire13
    /#19322306 / +1

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

    • x-foby
      /#19322390

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

      • saphire13
        /#19323038

        Без отрыва от практики, так сказать? Да, никто не мешает. Но понять, допустим, цикл типа for для простого перебора значений БД будет немного сложновато (если совсем далек человек от программирования, как я уже говорил), а там дальше еще foreach есть.
        Я клоню к тому, что начать стоит с самых-самых азов. Никто не мешает вам объяснять принципы алгоритмирования сразу показывая как это применяется, но на мой взгляд получится каша в голове, так как новые знания должны накладываться на базу, которая будет принята, осознана и переварена. Но в любом случае буду с интересом следить за вашими успехами.

        • x-foby
          /#19323108

          Да, пример с for и foreach очень даже удачен. Конкретно циклы я, пожалуй, не рассматривал бы с ней в рамках PL\pgSQL, а отложил бы до этапа знакомства с Golang.
          Думаю, что общую для разных этапов информацию, правильней будет давать на этапе либо требующем этой информации, либо являющимся наиболее удобным.
          В общем, где-то, думаю, придётся импровизировать. И пусть наши успехи и ошибки помогут другим!

  26. jehy
    /#19322324 / +6

    Вчера открыл, прочитал, было много эмоций — закрыл и дал впечатлениям отстояться, теперь могу написать комментарий спокойно. По пунктам:


    1) Можно считать за придирку, но ваша статья местами (в том числе по заголовку) выглядит так, словно это уже готовый и проверенный рецепт. Не надо так. Её будут открывать неискушённые люди, принимать за истину в последней инстанции, и пробовать. Вы в ответе за тот опыт, который они в конце концов получат.
    2) Навскидку просуммируем то, что вы решили быстренько положить в ваше обучающее приложение:


    • Разработку бэкенда на Go
    • JavaScript + TypeScript (ну потому что учить только второму не выйдет)
    • РСУБД
    • Vue.JS
    • HTML, CSS

    Итого это пять полноценных глубоких курсов. Которые вы хотите запихнуть в разработку одного приложения. При этом результат своих действий человек увидит примерно по окончанию всего этого.


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


    Ну, как обычно "критикуя — предлагай". Что-то и этого уже выше сказали:


    1) Оптимально давать короткие задачки, которые дают быстрое обучение каким-то узким вещам и чувство удовлетворения студенту. Насчёт 15 минут — это вряд ли — но задачки на пару часов (то есть на вечер) — это хорошо. Хотя бы потому что даёт человеку ощущение того, что он чему-то научился и чувство пройденного этапа. Это важнее, чем кажется.
    2) Не надо мешать в кучу огромное количество разных технологий. Мой опыт говорит о том, что обучать таки лучше с вёрстки, но если вам так не хочется — можно начинать с консольных программ или со сред, в которых можно накидать формочки с кнопочками. Или с микроэлектроники — мигать диодиками и все дела. И только когда какой-то этап более-менее уложится в голове — можно идти дальше. Иначе в голове будет каша из js/go/sql/etc.
    3) Обучать тому, чего не знаешь — хорошая идея только на первый взгляд. По факту, наверняка окажется, что ты чему-то научил неправильно, или сидишь тупишь над простыми вещами часами. Что будет крайне негативным опытом для студента. Поэтому лучше обучать тому, что знаешь. Как ни странно, это очень полезно, поскольку даёт структурировать в голове свой опыт и узнать много всего, на что раньше не хватало времени или желания.


    Кстати, даже ваше книгу рецептов на самом деле можно писать итеративно и с промежуточными результатами. Например:
    1) Научиться HTML. Пускай напишет свою веб страничку с рецептами.
    2) Научиться JS. Пускай сделает там менюшки, свистелки и перделки.
    3) Научиться JS фреймворку. Пускай переделает на него.
    4) Научиться какому-нибудь ЯП. Пускай хранит свои рецепты в JSON файликах и показывает. Пускай ЯП генерит странички полностью (никаких API).
    5) Научиться СУБД. Пускай переложит данные из JSON файликов в таблички.
    6) Сделать API и довести до "взрослого" приложения.


    В результате получаем то же самое, но по возрастающей сложности и с промежуточными результатами.


    З.Ы. не знаю, откуда взялось мнение о том, что, если человек не будет обучаться языку со статической типизацией в первую очередь, то произойдёт что-то непоправимое. Знаю много людей, которым обучение PHP никак не помешало потом писать на C или Java. В обучении есть одна основная задача — чтобы человек что-то написал, и ему понравилось. Если это произошло, то дальше всё будет хорошо. Если нет, то нет никакой разницы, чему именно вы его не научите.

    • x-foby
      /#19323128

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

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

      Так что спасибо Вам и в Вашем лице всем, кто не просто не согласился, но и, «критикуя — предложил». Вы помоги!

  27. powerman
    /#19322362 / +5

    У меня тоже хватает (успешного) опыта в обучении программированию, и я предлагаю максимально серьёзно отнестись к тому, что написали sotnikdv и jehy. Ключевые моменты — обучение потребует около года, много (4-5) часов почти каждый день, промежуточные результаты очень важны (так что задачи надо подбирать так, чтобы можно было увидеть результат хотя бы раз в пару дней) и для этого нужна очень сильная мотивация (нацеленность на получение профессии с последующей работой).


    Что касается Вашего случая, то, на мой взгляд, Вы радостно бросились решать не ту проблему. Результат такого подхода, обычно, не радует никого. Я думаю, что обучаться нужно не Вашей девушке, а Вам. И обучаться вовсе не программированию, а умению излагать волнующие Вас рабочие проблемы дома своей девушке на человеческом языке, а не программистском. Это навык из серии "если ты не можешь объяснить сложную проблему пятилетнему ребёнку простыми словами — значит ты эту проблему и сам толком не понимаешь". Описанная в статье проблема — девушка Вас не понимает. Значит, учитесь объяснять. Когда (и если) проблема девушки преобразуется в "хочу нормально зарабатывать программированием" — вот тогда начинайте учить её программированию.


    P.S. Кстати говоря, выбор Go я лично поддерживаю. Частично потому, что язык действительно простой. Частично потому, что бэкенду сейчас учить проще — фронт слишком динамично меняется, за ним тяжело угнаться, а новичку не помешает иметь в начале карьеры относительно стабильный период в несколько лет, когда полученные им знания и навыки сохраняют актуальность. Более того, я часто выкручивался из проблемы подбора задач, результат которых можно увидеть сразу же, через юнит-тесты — их в Go очень просто писать, и они позволяют относительно наглядно увидеть результат работы почти каждой, только что написанной, функции. Этого оказалось вполне достаточно, чтобы давать обратную связь "вау, оно работает!", необходимую чтобы часто получать позитивное подкрепление "задачка готова/у меня получилось" (ну и плюс это сформировало очень положительное отношение к написанию тестов в принципе, с пониманием громадной пользы, которую они дают, и которого так не хватает многим программистам).

    • commanderxo
      /#19323002 / +1

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

      Один из лучших советов в обсуждении! Действительно, если научиться объяснять суть своей работы человеческим языком, то:
      • Девушка начнёт понимать чем вы занимаетесь и что вас тревожит, а вам не придётся отшучиваться про пианиста в борделе.
      • Вы сможете объяснить коллегам, ПОЧЕМУ задачу лучше решить так, а не иначе.
      • Вы сможете объяснить начальству почему некоторые задачи решаются легко, а другие ставят команду в тупик, хотя вроде бы речь о схожих проблемах.
      • Вы сможете парой фраз понятно объяснить шефу чем вы вообще занимаетесь и какая от вас польза фирме. Если вместо обычного программистского «абра-кадабра, мумба-юмба, НАДО сдвинуть сроки релиза» ваш начальник услышит понятное изложение вставших перед командой проблем, то он сможет и захочет вам помочь. Менеджеры любят чувство понимания, причастности и контроля.
      • После всего вышеперечисленного, из вас может получиться хороший тимлид и архитектор, а значит меньше работы на дом, больше времени для девушки, да и денег тоже больше.
      • Очень, очень часто, объясняя кому-то нынешнюю архитектуру, сам замечаешь косяки и возможности улучшения, а вовремя заданный посторонним человеком вопрос «а вот об этом ты подумал?» может быть решающим для успеха проекта.
      • Работа программиста это не 100% написание кода. Например, когда мне нужно было подготовить презентацию для инвесторов, я сперва объяснил что же делает наша программа своей жене. Нарисовал на доске важнейшие юз-кейзы в виде картинок, и тут оказалось, что рисунки-то у меня убогие, с актёрами в стиле палка-палка-огуречик. Жена у меня художник, подсказала как парой штрихов придать человечкам эмоции и обозначить действие. Заодно научился чему-то.

      Обучая десятилетнюю дочь программированию, заметил, что простые и «естественные» понятия как переменная, присваивание, и т.д. появляются в голове не сами по себе, и даже не в результате прочтения умной книжки, а только после многократного решения простых задач. Опыт, увы, достигается лишь упорством и настойчивостью. Для обучения программированию попробуйте решить одну и ту же простую проблему несколько раз, на разных уровнях абстракции. Например:

      • Берём простейшую (для программиста) задачу, например написание Тетриса или Сапёра, и решаем её целиком во фронтэнде, фокусируясь на JavaScript, переменных, вложенных циклах и прочих элементарных конструкциях языка.
      • Теперь решаем её ещё раз, но обращая внимание на внешний вид. Разбираем зачем нужен CSS и хорошо структурированный HTML. Вполне возможно, что вариант вашей девушки будет выгдядеть красивей и изящней, чем у опытного фул-стек-девелопера.
      • Переписываем логику заново, теперь с использованием вашего любимого фрэймворка. После этого не только девушка, но и вы сами, сможете объяснить посторонним людям зачем они нужны, эти фрэймворки, где кончается мода, и начинается реальная польза. /* Осторожно! Не исключено, что придя на следующий день в офис, вы решите что нынешний код безнадёжно перегружен ненужными свистелками, и перепишете его на vanilla-js */
      • Если задор не иссяк, можно добавить back-end, например для хранения таблицы рекордов. Причём не напирать на конкретную реализацию БД, а рассмотреть обмен данными между клиентом и сервером, защиту от читерства и потенциальные методы взлома вашего сервера. Проводя аналогию с электирчеством, в наше время не так уж важно знать от какого генератора берётся в розетке ток, а вот не трогать руками оголённые провода учат даже детей. Или, например, я никогда не задавался вопросом сколько клапанов в двигателе моей машины, но могу показать где находятся подушки безопасности и уверен, что они прикрывают всех пассажиров.
      • Главное помните, что для большинства людей программирование это не самоцель, а всего-лишь инструмент для решения какой-то другой проблемы. Умение понять и точно описать суть этой проблемы это обычно уже больше половины её решения.

      • x-foby
        /#19323170 / +1

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

        У меня нет проблем с коммуникацией. И в наших отношениях нет проблем с коммуникацией.
        Моя девушка вникала, пожалуй, во всё, чем я когда-либо занимался, так же как и я всегда стараюсь изучать её предметные области. Такие вот у нас отношения.

        Что касается плана обучения, он расходится с моим, но из него есть что почерпнуть!
        Спасибо!

      • 0xd34df00d
        /#19323272

        У меня, наверное, неправильные цели и приоритеты, но с первой половиной комментария я несогласен совсем.


        Мне бы хотелось, чтобы коллеги объясняли мне, почему что-то надо решать так, а не иначе. Это значит, что я глупее коллег, и это хорошо.


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


        А вот тимлидом мне бы не хотелось быть совсем. И рисовать презентации инвесторам тоже не хотелось бы. И выступать перед ними не хотелось бы.

        • tyomitch
          /#19323436 / +1

          Почему вы считаете, что начальнику понимать в программировании важнее, чем программисту — в презентациях для инвесторов?

          • 0xd34df00d
            /#19323528

            Хм, хороший вопрос.

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

            А презентации — это всё же совершенно отдельный скилл. Иными словами, в вашем вопросе вместо «в презентациях для инвесторов» можно подставить достаточно произвольные вещи, вплоть до найма, расчёта бюджета и всего подобного.

            • commanderxo
              /#19323722

              А презентации — это всё же совершенно отдельный скилл.

              Да не особо отдельный, ведь те презентации на которых зовут программистов, по сути должны и так лежать в документации к любому проекту сложнее «Hello World». В нашем случае было так: фирму продавали, целиком, со зданиями, сотрудниками, товарами на складах, базой клиентов и самописным софтом. Собственно переговоры вело начальство, технарей туда не приглашали (и это правильно), но покупателям кроме всего прочего нужно было показать и состояние софта. И вот тут неплохо когда кто-то в команде может за 40 минут (на больше всё равно не хватит внимания) показать умным, но далёким от программирования людям:
              • Зачем нам нужен софт
              • Какие бизнес-процессы он поддерживает
              • Почему мы пишем некоторые программы сами, а не покупаем готовое
              • Кто на фирме пользуется нашими программами
              • Какую пользу бизнесу принесли в прошлом году вон те 15 бородатых людей в свитерах с оленями
              • Какие новые возможности должен дать софт в следующие 12 месяцев (тем самым пресекая в зародыше мысли объявить IT чистым центром затрат, с последующим соблазном «соптимизировать»)
              • Почему в XXI веке каждая фирма это IT-фирма, даже если мы торгуем одеждой


              Это существенно лучше, чем дать инвестором поймать у кофеварки джуниора, который скажет что у нас тонны прошлогоднего легаси-говнокода которые он никто! не понимает, и вобще, давно пора всё выкинуть и переписать заново на вышедшем на прошлой неделе крутом фрэймворке.

              Одним словом старая басня про строительство собора на новый лад.

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

              • 0xd34df00d
                /#19323790

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

                Или, например, что вы работаете в HFT и пишете инфраструктуру или хардкорный low-latency плюсокод. Какие там презентации кому делать? Зато там топы вполне могут поговорить за перспективы раста в этом всём вот прям с вами, им не надо ничего объяснять.

                • commanderxo
                  /#19323830

                  А что представлять, и у нас так было. Есть ещё в продакшене код написанный в 2000-x директором фирмы. Когда-то все сидели в одной комнате, а через десять лет непрерывного роста у нас несколько сотен сотрудников. Умение объяснить чем занимается твой отдел важно хотя-бы для координации процессов с другими командами.

                  А вот когда менеджер среднего звена со словами «давно не брал я в руки шашку» запускает SQL Server Management Studio, опытные сотрудники начинают нервничать, подозревая что он сейчас опять на пару дней углубится в решение интересной задачи, забыв при этом про свои прямые обязанности. Начиная с определённого размера фирмы, вовлечение топов в микроменеджмент конкретного куска кода это опасный знак.

    • x-foby
      /#19323150

      Спасибо за мнение.

      Вы — личность в Go-сообществе известная, поэтому в содержании секции «P.S.» я не сомневался!

      Что же касается основной мысли Вашего комментария, то я, как уже отписал и остальным участникам дискуссии, согласен с этой позицией, но здесь нужно учитывать контекст.
      Конкретно в нашем с моей девушкой случае дело действительно не в моём неумении разговаривать на другие темы или переводить с программистского на русский. Здесь дело просто в том, что мне повезло жить с человеком, который хочет понимать меня ещё лучше. Проще говоря, то чем мы планируем заняться, — это не попытка решить проблему плохой коммуникации. Отнюдь!
      У нас нет подобных проблем!

      P.S. Только что приехали с рыбалки. Ездили двумя парами, и вторая семейная пара — программисты. Мы мало обсуждали специальность, но иногда всё равно проскакивает. Ей — интересно. Отказать в помощи любимой девушке, мне кажется, будет крайне эгоистично.

    • 0xd34df00d
      /#19323262

      Это навык из серии "если ты не можешь объяснить сложную проблему пятилетнему ребёнку простыми словами — значит ты эту проблему и сам толком не понимаешь".

      Мне всегда бомбит с этого тезиса.


      Хочу послушать объяснение квантмеха пятилетнему ребёнку простыми словами. Или, фиг с квантмехом, конечной теоремы Рамсея. Или теоремы Гёделя о неполноте, как она связана с категоричностью и разрешимостью теорий, и так далее.

      • commanderxo
        /#19323336 / +2

        Мне всегда бомбит с этого тезиса.
        Хочу послушать объяснение квантмеха пятилетнему ребёнку простыми словами.

        Цитата, судя по всему, восходит к Ричарду Фейнману, а он объяснять умел. В том числе и квантовую механику. Не для пятилетних, конечно, но на уровне 8-го класса средней школы. А вот его рассказ про огонь поймут наверное и дошкольники.

        • 0xd34df00d
          /#19323536 / -1

          При этом Фейнман говорил что-то вроде «если вы думаете, что понимаете квантовую механику, то вы не понимаете квантовую механику», что довольно иронично.


          Ну и если говорить о конкретно этом примере, лично я склоняюсь к тому, что правильная интерпретация квантмеха — shut up and calculate, то есть, объяснение квантмеха не включает в себя ничего кроме писанины закорючек, достаточно хардкорных для пятилетнего ребёнка.

      • vadimr
        /#19323546

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

        • 0xd34df00d
          /#19323552

          Неизвестно почему? Плохо измеряем? Кажущейся — это как? Почему в макромасштабе тогда всё работает? А вот дальнодействие, мне васян из 5А рассказал — это что? Почему оно пугающее? Там что, частички связаны маленькими ниточками?

          Про Гёделя, может, тоже можно объяснить легко, но почему-то опыт показывает, что в правильном направлении понимает, о чём там речь, довольно малая часть людей даже с вышкой в технической сфере.

          Но тут, конечно, перво-наперво нужно определить понятие объяснения, а то, может, мы тут вообще разное обсуждаем.

          • vadimr
            /#19323570 / +1

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

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

            Для меня лично с детства классическая картина с её дурными бесконечностями и демоном Лапласа была гораздо более непонятна.

            • 0xd34df00d
              /#19323600

              Все вопросы, которые Вы привели, касаются не квантовой теории самой по себе, а её несовместимости с классической механикой, которой уже забита голова вопрошающего.

              Боюсь, что голову забивает не классическая механика как в первых томах Ландафшица (или хотя бы в каком-нибудь Сивухине), а жизненный опыт.


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


              А в макромасштабе, как нам кажется, всё работает, потому что постоянная Планка очень маленькая, и её невооружённым взглядом не видно.

              Сверхпроводимость и сверхтекучесть начинают комплексовать о своих характерных размерах.


              Для меня лично с детства классическая картина с её дурными бесконечностями и демоном Лапласа была гораздо более непонятна.

              Я не вижу принципиальной разницы в детерминизме классической механики (в фазовом пространстве) и в детерминизме квантовой теории (в каком-то там хитром пространстве функций вероятности, ибо унитарненько).

              • vadimr
                /#19323622 / +1

                > Я готов поспорить, что если вы возьмёте сто пятилеток и объясните им вот про мельчайшие детали, то все сто из них, если попросить, формализуют и выкристаллизуют это в тезис о том, что мы измеряем плохо, а не в то, что у частиц вообще строго определённых координат в соответствующих пространствах нет.

                Да почему ж? Этот вопрос можно специально разъяснить. Вот стакан молока, которое кажется неизменным, однако в действительности в нём происходит бурление микробов, отчего оно вскоре скисает. Также и кванты со сверхтекучестью. Бурление незаметно глазом.

                > Я не вижу принципиальной разницы в детерминизме классической механики (в фазовом пространстве) и в детерминизме квантовой теории (в каком-то там хитром пространстве функций вероятности, ибо унитарненько).

                Принципиальная разница в том, что сколлапсировать волновую функцию можно как угодно, несмотря на то, что плотность вероятности детерминирована.

                • Druu
                  /#19325006

                  Вот стакан молока, которое кажется неизменным, однако в действительности в нём происходит бурление микробов, отчего оно вскоре скисает. Также и кванты со сверхтекучестью. Бурление незаметно глазом.

                  Это все отлично но такие объяснения в 99% случаев приводят к неверному пониманию в тех или иных моментах. Проблема аналогий в том, что они всегда неточны.


                  Принципиальная разница в том, что сколлапсировать волновую функцию можно как угодно, несмотря на то, что плотность вероятности детерминирована.

                  А вы уверены что волновые функции существуют? Это что такое? реальный физический объект такой? А уверены что если они существуют, то коллапс существует? Это что такое? реальный физический процесс такой?

                  • vadimr
                    /#19325018

                    Любое объяснение приводит к неверному пониманию в тех или иных моментах, в том числе и самые продвинутые на сей день математические формулы. Действительность вообще отличается от наших представлений о ней. Поэтому тут нет никакой беды.

                    • Druu
                      /#19325046 / +1

                      Любое объяснение приводит к неверному пониманию в тех или иных моментах, в том числе и самые продвинутые на сей день математические формулы.

                      Конечно, проблема только в том что корректное объяснение лишь может привести к неправильному пониманию, а некорректное — приведет совершенно точно. Потому что является де-факто ложью. Да, именно так — все эти рассуждения о "стаканах молока" просто прямая ложь де-факто.
                      Кванты не ведут себя как микробы в молоке, понимаете? Ни в каком смысле не ведут.

                      • vadimr
                        /#19325254 / -1

                        Любое объяснение – прямая ложь де-факто с точки зрения понимания, к которому мы придём через миллион лет. Есть разные уровни понимания действительности, мы в любом случае находимся на низших из них. Духи, микробы или кванты – это всё равно только модели, служащие для грубо приближённого описания действительности. Нет никакой принципиальной разницы. Разум человека развивается сто тысяч лет, а впереди миллиарды.

                        • Druu
                          /#19325446 / +1

                          Любое объяснение – прямая ложь де-факто с точки зрения понимания, к которому мы придём через миллион лет.

                          Конечно, нет.

                  • vadimr
                    /#19325346

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

                    С другой стороны, если люди придумывают такую философскую ахинею, как копенгагенская интерпретация, то это показывает, что знание уравнения Шрёдингера не сильно приближает их к пониманию реальности по сравнению с верящими в духов и в микробов в молоке.

                    • Druu
                      /#19325450

                      Разумеется, никаких волновых функций реально не существует
                      С другой стороны, если люди придумывают такую философскую ахинею, как копенгагенская интерпретация, то это показывает, что знание уравнения Шрёдингера не сильно приближает их к пониманию реальности по сравнению с верящими в духов и в микробов в молоке.

                      Ага. Тогда что вообще объясняют такие объяснения?

                      • vadimr
                        /#19325610

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

                        Вот ползает червяк. Он объясняет себе и своим деткам, что где темнее, там более влажно. В абсолютном смысле это неверно, но для его повседневного опыта обычно работает. Так же и волновая функция для человека.

                        • Druu
                          /#19325866

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

                          Но то, что кванты ведут себя как микробы в стакане молока — это не знание. Это нонсенс.

                          • vadimr
                            /#19325980

                            Для практических целей пятилетнего ребёнка это вполне достоверное знание.

                            • Druu
                              /#19326244

                              Это не знание, это чушь из разряда "детей в капусте находят".

                    • 0xd34df00d
                      /#19325746

                      если люди придумывают такую философскую ахинею

                      Ну вот мы и приходим к тому, что правильная™ интерпретация — shut up and calculate.

                • 0xd34df00d
                  /#19325740

                  Вот стакан молока, которое кажется неизменным, однако в действительности в нём происходит бурление микробов, отчего оно вскоре скисает. Также и кванты со сверхтекучестью. Бурление незаметно глазом.

                  Заметно. Оно же вот заметно глазу сверхтечёт, или заметно же глазу стрелка на омметре упирается в ноль. Вполне себе измеримые макропараметры.


                  Это как если бы молоко пыщ-пыщ-пыщкало.


                  Принципиальная разница в том, что сколлапсировать волновую функцию можно как угодно, несмотря на то, что плотность вероятности детерминирована.

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

                  • Druu
                    /#19325868

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

                    Кстати, тоже, никогда не мог понять этого бомбления на счет недетерменизма. Уравнения детерменированы? Детерменированы, все замечательно, я по начальным данным могу предсказать эволюцию системы. Ну да, состояние будет описываться, скажем так, хитро. Дак ну и что? Почему у людей какой-то разрыв шаблона возникает от этого? Неясно.

                    • 0xd34df00d
                      /#19325914

                      Ну, типа, коллапс вероятностный, всякое такое. Просто привычный из макромира язык существенно отличается в сторону простоты, отсюда и разрывы шаблонов.


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

                      • Druu
                        /#19326250

                        Можно ещё, кстати, учесть, что (по крайней мере, насколько я понимаю) язык макромира вполне вкладывается в квантовый язык (и интерпретация квантмеха, где наблюдатель запутывается с явлением, делает примерно это).

                        А это самое смешное — получается, если просто интерпретировать модель квантмеха "в лоб", без каких-то выдумок и т.п. вещей, то, действительно, все вкладывается, да и вообще just works, логично и без каких-либо усилий. Но потом кто-то приходит и начинает выдумывать какие-то коллапсы и прочие странные вещи, от которых далее рвет шаблон. Воистину странная ситуация.

  28. dariasavage
    /#19322370 / +1

    Любезный автор, проверьте серьезность намерений своей половины, а заодно разложите матчасть, вручив ей Таненбаума. Вот это начало начал, вот это путь ниндзя. Что за кодинг, когда не знаешь размер байта и архитектуру комплюхтера. (свой опыт, жена геймдева, ныне PM)

    • x-foby
      /#19322378

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

      Но ваш личный опыт опыт лишний раз говорит о том, что на этапе планирования обучения необходимо оценить личностные качества ученика. Спасибо!

    • 0xd34df00d
      /#19323280 / -1

      Да ладно, Таненбаум так себе проверка по сравнению с этим.

  29. NiniCassini
    /#19322374

    Учиться программированию довольно сложно, надеюсь девушку мотивирует не только «я смогу понимать что ты говоришь о работе», иначе далеко не уедешь. Но очень радует, что есть парни которые поддерживают своих девушек. Мой меня в свое время засмеял, когда узнал о моем решении, сказал не женское дело.
    В итоге учу все сама, с Hexlet, даже решусь рекомендовать этот ресурс если у вас нет замечатльного парня-ментора :))

  30. Karlson_rwa
    /#19322420

    А поведайте, пожалуйста, какое у вашей девушки образование? Или она в процессе? Т.е. насколько она далека от IT вообще.

    • powerman
      /#19322434 / +1

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

      • Karlson_rwa
        /#19322446 / +2

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

      • 0xd34df00d
        /#19323284

        Очевидно, что это имеет значение. Стиль мышления и способности к построению непротиворечивых абстракций очень сильно коррелируют с успехами.

        • tyomitch
          /#19323494

          Стиль мышления слабо коррелирует с полученным образованием: 17-летние абитуренты, выбирая свою будущую специальность, чаще всего ни про неё ничего не понимают, ни про свой стиль мышления и способности.

          • 0xd34df00d
            /#19323540

            Стиль мышления — это не какая-то природная данность. Его вполне можно воспитать образованием.


            Просто в 13-18 это делать проще, чем в 30.


            17-летние абитуренты, выбирая свою будущую специальность, чаще всего ни про неё ничего не понимают

            Это, кстати, не очень хорошо, ИМХО.

            • tyomitch
              /#19323700

              Стиль мышления — это не какая-то природная данность. Его вполне можно воспитать образованием.

              Можно воспитать, а можно и не воспитать. А можно и не воспитывать, смотря как с преподами повезёт.

              Я всё к тому, что полученное образование о стиле мышления не говорит.

              • 0xd34df00d
                /#19323792

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

    • x-foby
      /#19323896 / +1

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

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

  31. vadimr
    /#19322552

    Для меня лично программирование — это мир чистых ветвлений и рекурсий, а вот эта вся фигня, которая упоминается в статье — издержки производства, которые необходимо знать, чтобы в данное время в данном месте извлекать из программирования деньги. На мой взгляд, описанное похоже на то, когда человека, который хочет научиться водить машину, станут для начала учить постановке седельного тягача к аппарели. И да, я бы тоже в таком случае выбрал Scratch! А моим первым языком был Лого.

  32. bogolt
    /#19322580

    Я в свое время показывал как писать простейшие вещи на pygame. Большой плюс такого подхода — сразу виден результат а не абстрактные цифры. Ну а дальше человек просто понял, что да разобраться можно но «не мое». Два вечера и тема закрыта.

  33. Sergey-S-Kovalev
    /#19322660 / +1

    1. Создание алгоритма на бумажке. Учим однопоточной логике.
    2. Синтаксис. Переменные. Циклы. Булева логика.
    3. Работа со стоками.
    4. Ввод, вывод, работа с текстовыми файлами.

    Все. Можно делать рецептурный справочник. Простенький интерфейс, дает сделать рецепт и сложить его в структурированном виде в простой файл, новый рецепт в новый файл. Он же и дает их прочитать.

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

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

  34. Scf
    /#19322688

    Когда-то я начинал изучение программирование на бейсике с программ, рисующих картинки.


    Эксперимент показал, что и сейчас это хороший способ увлечь девушку программированием :-)
    Вот такая штука, на яваскрипте: https://scf37.me/1.html

  35. Cadog
    /#19322730

    В свое время помог немного другу освоить программирование. Начинал он с hiasm (визуальное программирование). Когда он понял основы и стало тесно, то перешёл на c#. И далее самостоятельно начал развиваться.

  36. akkuraten
    /#19322800

    Согласна, что Go лучший язык для начинающих + эти книги ru.hexlet.io/pages/recommended-books + netflix на английском с русскими субтитрами. Терпения вам обоим)

  37. MuKPo6
    /#19322952

    Всё сугубо индивидуально. У меня было два ровно противоположных по результату опыта. В случае удачного опыта обучение основам реляционных баз данных проходило легко и непринужденно, всё схватывалось на лету, и ничего два раза повторять не приходилось. Медсестра, помощник стоматолога, в итоге сменила работу на web-разработчика. Второй случай проходил с жутким скрипом и кучей вопросов, по которым я понял, что тут совсем иной склад ума и продолжать бесполезно.

  38. alaskanebraska
    /#19322978

    Как научить — накидать туториалов, книг и прочих ссылок и оставить разбираться самостоятельно, разрешив задавать вопросы в сложных случаях. Ибо learning by doing.

  39. cronk
    /#19323178

    Возьмите меня в падаваны!
    Серьезно, вы описали курс моей мечты практически. Я сильно заинтересован в результате. Уже могу говнокодить (на питоне) и когда-то писал свою хоумпагу.
    А то курсов до фига — и по бэкенду, и по базам, и по верстке. А как оно всё вместе работает — хз.
    Возьмите, а?

    • x-foby
      /#19323186

      Если вы серьёзно, то давайте обсудим это в лс.
      Но я не уверен, что это будет легко, ведь объяснять человеку что-то очно — это одно, а обучать удалённо — совсем другое.

  40. biomassa
    /#19323190

    Интересные рассуждения и вроде бы неплохой план, но…
    Пока читал в голове созрела и твердо укрепилась мысль: Девушка уже забыла о том что она хотела учиться программированию, и когда парень (автор) начнет ей пытаться объяснять какие-то жутко запутанные и непонятные глупости она мило поморгает глазками, надует губки, покрутит пальчиком у виска, и быстренько сменит тему. Девушки они такие...

  41. poloart
    /#19323582 / +2

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

    Я никогда не учил её программированию и безопасности. Но основные тезисы она легко воспроизводит.
    Вроде «вордпресс — это завирусованное говно» или «консоль линукса — это лучшее, что есть в нашей жизни» или «nginx наше всё, apache — фанера для пенсионеров».
    Тезис на тезис — и она легко заткнёт в разговоре начинающих эникеев.

    А больше ничего и не требуется. Мне надо всего лишь вечерами иными изливать душу на определенную тему — про юзеров то, про заказчиков или просто про несовершенство технологий. И человек, который скажет тёплые слова про nginx — вы таких много рядом найдете? А у меня женушка завалит про proxy_pass парочку моих же слов — и вот уже на душе теплее.

    • nikbond
      /#19323940

      Ну это какая-то китайская комната получается, а не девушка.

  42. poloart
    /#19323632

    И ещё хочу написать вот о чём. Может, и не стоит учить ваших девушек, возможно, будущих жён, программированию и в целом, вашей теме?

    Это же как удобно — переключаться вечерами на простые жизненные мелочи.

    Исходя из заголовка темы «как научить программировать свою девушку...» — может, и не стоит вообще учить-то, а? У нас же и так за рабочий день столько в голову залетает сложных алгоритмов… вы не пробовали программировать за полночь? а я пробовал — сложно уснуть потом, всё лезут решения в голову.

    Если у меня напротив вечерами была бы девушка-айтишник, крыша бы моя уже давно сказала «превед» и поехала в сторону. Так как девушки такой нет — у нас нормальный «баланс сил». Мне она парит про «экстрасенсов», а я парю про «php7» — ну и всё норм.

    • x-foby
      /#19323912

      — Папа, а существуют программисты, которые не писали за полночь?
      — Не, сынок, это — фантастика…

      Я согласен с Вами! Собственно, примерно с этого-то статью и начал: прихожу домой через 5-10 минут после окончания рабочего дня — аккурат когда приходит в голову какое-то решение.

      Эти ситуации случаются не так часто, поэтому пока она ещё не может, как ваша жена, уткнуть молодого джуна ремаркой об условном позднем статическом связывании в условном php, но вот захотелось ей вникнуть — не отказывать же.
      Я не был инициатором, честное слово)

      • SquareRootOfZero
        /#19326132

        Подарили бы ей сразу томик Кнута или там Кормана — и дело с концом. Типа, вот, милая, дочитаешь — приходи.

  43. buzzroll
    /#19323992

    Хосспаде, почему именно такой стек для обучения с нуля? Мне кажется, куда логичнее было бы, после общей понятийной базы вроде основ архитектуры, базовых алгоритмов, вещей вроде Big O notation, подсунуть жене питона.

    Django(Flask)/Postrgesql хватило бы начинающему за глаза. Во фронт вообще не стоит лезть, это работа отдельного специалиста.

  44. ainoneko
    /#19324394 / +5

    Про «обучение программированию» посторонней девушки:

    Заголовок спойлера
    Заходит девyшка, спpашивает:

    – Сколько y Вас стоит консyльтация специалиста?

    – Пятьдесят pyблей. Плюс Вы оплачиваете компьютеpное вpемя — по шесть pyблей за каждые полчаса.

    – Хоpошо, это меня yстpаивает.

    Идёт к кассе, оплачивает консyльтацию и час pаботы с компьютеpом, пpоходит к машине, садится, я сажyсь pядом.

    – Итак, что Вас интеpесyет?

    – Я хочy наyчиться пpогpаммиpовать.

    – -=8-o Что?? Вы хотите это сделать за час???

    – А что — не хватит? Сколько мне доплатить?

    Я некотоpое вpемя исхожy междометиями, потом немного yспокаиваюсь и пытаюсь объяснить, что люди yчатся этомy годы и что за один и даже за несколько pабочих дней этого сделать невозможно… Она пеpебивает меня:

    – Hо мне надо наyчиться пpогpаммиpовать только для Internet.

    – Да какая pазница?.. — начинаю, было, опять кипеть я, но вдpyг в мой pассyдок закpадываются кое-какие подозpения, и я начинаю допpос с пpистpастием, в пpоцессе котоpого выясняю, что имела в видy девyшка под “пpогpаммиpовать для интеpнет”: ПОЛЬЗОВАТЬСЯ ЭЛЕКТРОHHОЙ ПОЧТОЙ

  45. vlreshet
    /#19324482

    Мой опыт показывает, что самое сложное в обучении женского пола программированию это найти задачу которая будет оптимальной в плане «сложность-интересность». То есть, написать решалку квадратных уравнений — легко, но совсем не интересно (для посторонних от IT людей). А написать многопользовательскую игру — офигенно интересно, но в то же время безумно сложно, учить на этом нельзя. А WEB так вообще плохая штука для обучения, так как нужно за раз освоить минимум 3 языка — js для сервера и фронта, html, css. И это при условии что бек у нас на ноде, а базы нет. В общем для себя я так и нашёл решения этого условия — чтобы и не сложно, и увлекало. Это я в детстве радовался когда мой код просто запускался без ошибок, а в консоли появлялась единичка либо «test»…

    • Scf
      /#19324852

      см. мой коммент выше)

  46. gerasimenkoao
    /#19324554 / +3

    Моя жена — медработник.
    Я — админ БД.

    за 21 год я не стал врачем, она — программером.

    Но при этом вместе ловим рыбу.

    Вопросы к автору:
    Ваша девушка борщ вкусный готовит?
    А Вы?
    Она Вас грузит проблемами кулинарии/уборки/макияжа или своей работы?

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

    • Scf
      /#19324856 / +1

      Кстати, тоже очень важный момент — девушка программист может разлюбить готовить, убираться и красиво одеваться — оно вам точно надо?

      • tvr
        /#19325130 / +2

        девушка программист может разлюбить готовить, убираться и красиво одеваться — оно вам точно надо?


        Да это ещё ладно — не самое страшное в жизни.
        Главное — чтобы свитер и борода не выросли.

    • 0xd34df00d
      /#19325756

      Отношения должны быть устраивающими всех участников, симметрия — лишь частный случай.

  47. CoreTeamTech
    /#19324794

    Вы молодец, что решили поддержать свою девушку в этом непростом начинании. Вы в свойственной программистам манере, составили план обучения и выбрали стек технологий — это то, как учили вас и учились вы сами. Но я хотел бы вам указать на очень важный нюанс. Если вы не планируете обучать группы людей онлайн или преподавать в университете, то старайтесь избегать академичности. Для вашей девушки, вы — ментор. Научите ее думать как вы. Научите ее задавать вопросы. Правильно гуглить. Правильно искать ответы. Осознанно выдавайте обратную связь. Учите ее общаться предметно, постепенно вводя термины из индустрии.

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

    Другой наиболее явный пробел у начинающих программистов — это валидация корректности. Это не столько о TDD, сколько о том, как правильно мыслить. Как самому себе ответить, без гугла и стековерфлоу, что программа выдает правильный результат во всех случаях? Одно только это понимание, как проверять свои предположения и результаты, очень сильно помогает в быту.

    Еще один важный навык — это работа с программами и операционной системой. Я не говорю о теории операционных систем. Необходимо убрать страх перед запуском программ, особенно консольных (тем более в Линукс или макОс). Все наверное сталкивались с вопросом «я тут нажал что-то, не сломал ли я чего?» Горячие клавиши, диалоговые окна, менюшки, контекстные меню — весь продвинутый пользовательский опыт должен стать если не родным, то очень знакомым для нее. У этого навыка несколько полезных эффектов: ученик не будет бояться современной IDE, сможет эффективнее (быстрее) работать, в голове будет четкое понимание, что все есть — программа, на которое можно будет ссылаться.

    О практике. Не хотелось бы вдаваться в предрассудки, но американская потребительская модель — получить работающий продукт в процессе обучения — это не эффективно. Во-первых, как вам уже заметили, на обучение уйдет минимум год. Выбранное вами приложение перестанет быть мотивацией гораздо раньше и, скорее всего, имеющиейся альтернативы буду сильно лучше. Если вы надеетесь, что одновременно с продиранием сквозь дебри азов программирования и освоения технологий, ваша девушка еще и сможет экстраполировать полученные знания дальше на другие типы приложений — вы ошибаетесь. Она будет начинающим программистом книг рецептов. Вместо таких «морковок» стоит использовать осмысленные промежуточные результаты на каждый этап. Этот результат ваша девушка должна достичь сама. То есть без наработок открыть новый проект в IDE, написать весь необходимый бутстрап-код, решить задачу и получить результат, проверить его правильность.

    Надеюсь ваша девушка оценит наш дивный, чудный ИТ-шный мир :)

    Напоследок я напишу одну фразу, которой сотни лет, и над которой стоит подумать вам самому, иначе я не закончу свой комментарий никогда:

    Обучение — это управление вниманием ученика

    • CoreTeamTech
      /#19324990

      Кстати, когда база и мышление будет на месте, и если у жены iPhone и Mac, то я бы предложил Swift и разработку под мобильные. Создать приложения рецептов на swift гораздо прямолинейнее, и в чем-то быстрее чем на HTML/CSS. UI строго формализован и можно собрать многое из готовых компонентов, через визуальный редактор. Мне удалось знакомую обучить с 0 до джунниор iOS разработчика всего за 1.5 года! Правда теперь она UX-дизайнер, но тешу себя мыслью, что в том не моя вина :)

      • x-foby
        /#19325412

        Дома Ubuntu и Android, поэтому что-то нативное под iOS писать нет возможности.

        А вообще swift сам думаю как-нибудь всё-таки пощупать, уж больно высокие рейтинги у него)

    • x-foby
      /#19325402

      Спасибо большое! Соглашусь с вами, пожалуй, во всём с одной лишь поправкой: я не мог в рамках одной статьи описать все вводные данные и, уж тем более, детали курса, поэтому постарался описать всё тезисно. По факту же ваши мысли отлично укладываются в то, каким я вижу процесс вовлечения своей девушки в наш уютный ИТ-шный мир.

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

  48. motomac
    /#19324902

    Примерно схожим образом учил свою жену фронтенду. Ускоренный курс с места в карьер. Vue.JS вполне себе освоила и даже написала годный SPA (с моей помощью, конечно). Теперь меня же консультирует по некоторым вопросам фреймворка. Но как только встает вопрос о простейших фундаментальных вещах, таких как циклы и ветвления, начинает плавать. Наверно для женской натуры HTML/CSS и вообще визуальная составляющая понятнее и притягательнее абстрактности, потому и схватывается легче.

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

    • AnutaU
      /#19324976

      Наверно для женской натуры HTML/CSS и вообще визуальная составляющая понятнее и притягательнее абстрактности, потому и схватывается легче.

      Не первый раз встречаю здесь в комментах что-то про женскую натуру и недоумеваю. Моя «женская натура» тяготеет к скриптам и консольным приложениям, и жестоко страдает от gui и тем более от web фронтенда. Может, это всё-таки не от пола зависит?

      • yoshka
        /#19325206 / +1

        Многим людям свойственно делать необоснованные переходы от частного к общему. Конечно, дело не в «женской натуре», а в том, что у кого-то больше скилл прокачан в алгоритмике, а у кого-то в дизайне.

      • motomac
        /#19325748

        OK, OK, OK!
        для женской натуры для натуры отдельной взятого человека — моей жены — HTML/CSS и вообще визуальная составляющая понятнее и притягательнее абстрактности.

        • SquareRootOfZero
          /#19326896

          Судя по тому, что вы пишете, ваша жена просто толком не училась — освоила некий набор действий, применимый к некоему конкретному фреймворку, для достижения некоего конкретного результата, и на этом всё. Раньше человек покупал в книжном магазине книгу по Delphi или Visual C++ и по инструкции учился рисовать формы с кнопками, а сейчас идёт в интернет и смотрит вебкасты по Vue.JS. Шаг влево, шаг вправо от инструкции — уже огромные трудности. Что-то совсем другое — полный ступор. Знаю, сам таким был: поручат написать, к примеру, конвертер файлов, первым делом рисую форму и на ней кнопки «открыть файл», «сконвертировать файл», «закрыть файл» и т. п. Не потому, что визуальная составляющая кнопок притягательнее — просто учился так, «синдром утёнка».

    • x-foby
      /#19325426

      Собственно, именно поэтому выбран не JS, а TS, и разработка фронта вынесена в последние пункты.

      Ну а насчёт женской натуры мы тут с Адой Лавлейс посовещались и решили, что всё это — не более чем предрассудки :)

  49. third112
    /#19326816

    ИМХО если цель научить программировать для интереса, а не для работы, то технологиям учить не надо. Они только запутают. Начиная с нуля ученику трудно понять, чем по сути HTML отличается от JS :)

  50. bbc_69
    /#19327154

    Если честно, считаю, что ты сильно переоцениваешь возможности неподготовленного человека. Я считаю, что первой программой должна быть та, которая считает правильные пропорции при приготовлении блюда. При том, поначалу можно данные писать прямо в программе, потом уже делать запрос пользователю. Потом попытаться сохранить рецепты. Но тупо в обычном файле. И уже потом смотреть, что с этим делать. Использовать БД или ещё что-то там. В качестве языка сойдет обычный паскаль, хотя мне питон нравится больше.

  51. Legomegger
    /#19327156

    Нисколько не реклама, но hexlet как раз таки обучает основам. Все с 0 и до конца (почти). Сам очень доволен курсами + хорошее коммунити. А в вашем случае полный новичок думаю с вероятностью в 80 % оставит обучение. Ибо это нереально

  52. gerasimenkoao
    /#19327698

    Да, ту еще пару мыслей, если Автор действительно вознамерился учить свою девушку:

    По выбору языка — конечно создать свою книгу рецептов с занавесками это весело (если она таки готовит), но:

    1. Можно выбрать язык, который не знает и сам автор — тогда учиться будет интересно обоим.

    2. Lua/Python — тогда она сможет творить в мире IoT, да хоть на базе esp8266 — к примеру, системой умного полива цветов перед «девочками» сможет похвастаться.
    В других случаях (кроме книги рецептов и онлайн фотоальбома) — не поймут.

    Я это к тому, что обучение должно проходить исходя из возможности создание полезного и интересного для нее продукта.

  53. iig
    /#19328296

    Был бы автор заметки, к примеру, рыбаком — девушка попросила бы его научить ловить рыбу. И на рыбацком форуме было бы длииинное обсуждение, с какой снасти начинать обучение и на каком водоеме…