Когда твой парень - 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
    03.11.2018 21:13
    +20

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


    1. demonarxs1
      03.11.2018 21:58
      +6

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


      1. x-foby Автор
        03.11.2018 23:51

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


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


        1. Simplifier
          04.11.2018 00:41
          +2

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


          1. x-foby Автор
            04.11.2018 00:46
            +1

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

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


            1. Siddthartha
              04.11.2018 15:54

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

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


              1. nmrulin
                04.11.2018 17:47

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


                1. dimonoid
                  05.11.2018 09:57
                  -3

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


                  1. 0xd34df00d
                    05.11.2018 17:39

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

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


                    1. dimonoid
                      05.11.2018 18:06
                      -1

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


                      1. 0xd34df00d
                        05.11.2018 18:11

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

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


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

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


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

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


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

                        Кому лучше?


                      1. iig
                        05.11.2018 18:17

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


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


                        1. dimonoid
                          05.11.2018 18:23

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


                          1. iig
                            05.11.2018 18:33

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


                            1. dimonoid
                              05.11.2018 18:39

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


                              1. iig
                                05.11.2018 18:59

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

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


                      1. Druu
                        05.11.2018 19:14

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

                        Шел 2018.


          1. nmrulin
            04.11.2018 17:45

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


    1. Barbaresk
      03.11.2018 22:36
      +11

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


      1. x-foby Автор
        03.11.2018 23:55

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


        1. Dr_Faksov
          05.11.2018 08:44
          +2

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


    1. x-foby Автор
      03.11.2018 23:41

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


      1. LekaOleg
        05.11.2018 19:27

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


        1. Druu
          05.11.2018 19:40
          +2

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

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


          1. LekaOleg
            05.11.2018 20:29

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


            1. Druu
              05.11.2018 22:01

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

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


        1. x-foby Автор
          05.11.2018 21:15

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

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

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

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

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


    1. 0xd34df00d
      04.11.2018 04:30
      +3

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

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


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


      1. AnutaU
        04.11.2018 15:31

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

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

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


        1. 0xd34df00d
          04.11.2018 18:31

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

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


          1. tyomitch
            04.11.2018 20:06

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


          1. JC_IIB
            05.11.2018 14:44

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

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

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

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


            1. 0xd34df00d
              05.11.2018 17:49

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


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


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


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


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


        1. Dr_Faksov
          05.11.2018 08:51
          -2

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

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

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

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

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


      1. Druu
        05.11.2018 13:56
        +1

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


        1. iig
          05.11.2018 14:32
          -1

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

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


          1. Druu
            05.11.2018 14:35
            +2

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

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


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


            1. 0xd34df00d
              05.11.2018 17:51

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


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


              1. AnutaU
                05.11.2018 17:54

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


    1. nerlihmax
      04.11.2018 14:04

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


    1. Source
      05.11.2018 01:49

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


    1. aPiks
      05.11.2018 13:24
      +1

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


    1. qpwoei
      05.11.2018 14:20

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


  1. KevlarBeaver
    03.11.2018 21:57
    +10

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


    1. fshp
      04.11.2018 02:21
      +3

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


      1. tvr
        04.11.2018 12:31

        Заведённый.


      1. 4eyes
        05.11.2018 14:44

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


    1. agarus
      04.11.2018 10:22

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



  1. mapron
    03.11.2018 22:19
    +10

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


    1. x-foby Автор
      04.11.2018 00:04

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


      1. Revertis
        04.11.2018 12:54

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


      1. mapron
        04.11.2018 16:04

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

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


  1. vadimr
    03.11.2018 22:22
    +10

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


  1. tommyangelo27
    03.11.2018 22:26
    +11

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


    1. kinall
      03.11.2018 22:45

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


      1. SergeyMax
        03.11.2018 23:40
        +7

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


        1. iig
          04.11.2018 00:39
          -5

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


          1. fshp
            04.11.2018 02:30
            +4

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


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


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


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


            1. iig
              04.11.2018 09:07
              +1

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


            1. altai2013
              04.11.2018 10:02
              +1

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


            1. homocomputeris
              04.11.2018 13:42

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


        1. 0xd34df00d
          04.11.2018 18:42

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

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


          1. SergeyMax
            04.11.2018 19:20
            +3

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


      1. FoterIS
        04.11.2018 18:49

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


  1. DaneSoul
    03.11.2018 22:57
    +4

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

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


    1. x-foby Автор
      04.11.2018 00:13

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


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


      1. sunnyfox
        05.11.2018 20:33

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


        1. Druu
          05.11.2018 22:03
          +2

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

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


          1. sunnyfox
            06.11.2018 05:47

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


  1. mksma
    03.11.2018 23:19
    +8

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


  1. alan008
    04.11.2018 00:01
    +2

    Scratch!


    1. x-foby Автор
      04.11.2018 00:17
      +1

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


      1. ganqqwerty
        04.11.2018 10:04
        +5

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


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


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


        1. 0xd34df00d
          04.11.2018 18:43

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

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


  1. Daddy_Cool
    04.11.2018 00:02
    +1

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


    1. x-foby Автор
      04.11.2018 00:23
      +1

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


      1. Daddy_Cool
        04.11.2018 00:57
        +2

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


      1. evocatus
        04.11.2018 03:42
        +13

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

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

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

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

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


        1. x-foby Автор
          04.11.2018 11:10
          +1

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

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


          1. evocatus
            04.11.2018 12:54
            +1

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


            1. x-foby Автор
              04.11.2018 17:27

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

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


    1. alaskanebraska
      04.11.2018 16:20
      -1

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


      1. Daddy_Cool
        04.11.2018 16:39

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


  1. untilx
    04.11.2018 00:11
    +3

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


    1. x-foby Автор
      04.11.2018 00:34
      +1

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


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


      1. untilx
        04.11.2018 00:50
        +4

        www.lazarus-ide.org

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


        1. x-foby Автор
          04.11.2018 01:00

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


      1. iig
        04.11.2018 01:13

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


        1. x-foby Автор
          04.11.2018 11:12
          +1

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


        1. nmrulin
          04.11.2018 18:00

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


      1. nmrulin
        04.11.2018 18:01

        PascalABC под Linux есть.


  1. lxsmkv
    04.11.2018 00:26

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


    1. x-foby Автор
      04.11.2018 00:39

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


      1. sotnikdv
        04.11.2018 08:52

        Вы мудрый.

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

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

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


        1. x-foby Автор
          04.11.2018 11:13

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


  1. sotnikdv
    04.11.2018 00:46
    +11

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

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

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

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

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

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

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

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

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

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


    1. x-foby Автор
      04.11.2018 00:57

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

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

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


      1. sotnikdv
        04.11.2018 08:28
        +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 лет. Вот в это мы уперлись. Даже я бы сказал ударились. Когнитивные способности, время и мотивация.


        1. altai2013
          04.11.2018 10:12

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


          1. sotnikdv
            04.11.2018 13:26

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

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

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


        1. x-foby Автор
          04.11.2018 11:17

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


          1. sotnikdv
            04.11.2018 13:29

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

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

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


            1. x-foby Автор
              04.11.2018 17:31

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

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


    1. andrew8712
      04.11.2018 08:16
      +3

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


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


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


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


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


      1. sotnikdv
        04.11.2018 08:45
        +3

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

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

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

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


        1. ganqqwerty
          04.11.2018 10:13

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


          1. sotnikdv
            04.11.2018 13:20

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

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

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

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


  1. BestNastos
    04.11.2018 00:47
    +1

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


    1. x-foby Автор
      04.11.2018 00:51
      +1

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


  1. orion76
    04.11.2018 01:05

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

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

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


    1. FreeNickname
      04.11.2018 01:51
      +2

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


    1. x-foby Автор
      04.11.2018 11:22

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


  1. edogs
    04.11.2018 02:16
    +1

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


    1. x-foby Автор
      04.11.2018 11:23

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


  1. iliabvf
    04.11.2018 02:54

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


  1. 0xd34df00d
    04.11.2018 04:29

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

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


    1. AnutaU
      04.11.2018 07:53
      +3

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


      1. 0xd34df00d
        04.11.2018 18:39

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

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

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

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

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


        1. AnutaU
          04.11.2018 23:02

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

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

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


          1. 0xd34df00d
            04.11.2018 23:31

            Сильная — это 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 — в контексте систем типов это не используется.

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


            1. AnutaU
              04.11.2018 23:58

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

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


              1. 0xd34df00d
                05.11.2018 00:09

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

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


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


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

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


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

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


                1. AnutaU
                  05.11.2018 00:19

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

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

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


                  1. 0xd34df00d
                    05.11.2018 00:45

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

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


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


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


    1. Druu
      05.11.2018 14:12

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

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


      1. 0xd34df00d
        05.11.2018 17:56

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


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


        1. AnutaU
          05.11.2018 18:13

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


          1. 0xd34df00d
            05.11.2018 18:16

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


        1. Druu
          05.11.2018 19:31

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

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


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

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


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

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


          1. 0xd34df00d
            05.11.2018 19:52

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

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


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

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


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

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


  1. selivanov_pavel
    04.11.2018 06:30
    +3

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


  1. ganqqwerty
    04.11.2018 07:29
    +5

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


  1. third112
    04.11.2018 07:45

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

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

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


    1. ganqqwerty
      04.11.2018 10:31
      +1

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


      1. hengenvaarallinen
        04.11.2018 11:41

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


        1. ganqqwerty
          04.11.2018 16:11

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


          1. third112
            06.11.2018 04:39

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


            1. Druu
              06.11.2018 09:35

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

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


              1. third112
                06.11.2018 09:48

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


            1. ganqqwerty
              06.11.2018 11:00

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


              1. third112
                06.11.2018 11:29

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

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


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


                1. ganqqwerty
                  06.11.2018 11:46

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


                1. ganqqwerty
                  06.11.2018 11:51

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


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


                  1. AnutaU
                    06.11.2018 12:13

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


      1. third112
        06.11.2018 04:29

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

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

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


  1. ABy
    04.11.2018 09:56
    +7

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


    1. tvr
      04.11.2018 12:41
      +1

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


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


  1. shvilek
    04.11.2018 10:13

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


  1. pfihr
    04.11.2018 10:28

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


  1. agarus
    04.11.2018 10:30
    +3

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

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


  1. saphire13
    04.11.2018 10:51
    +1

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


    1. x-foby Автор
      04.11.2018 11:34

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


      1. saphire13
        04.11.2018 17:04

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


        1. x-foby Автор
          04.11.2018 17:44

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


  1. jehy
    04.11.2018 11:02
    +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. В обучении есть одна основная задача — чтобы человек что-то написал, и ему понравилось. Если это произошло, то дальше всё будет хорошо. Если нет, то нет никакой разницы, чему именно вы его не научите.


    1. x-foby Автор
      04.11.2018 17:55

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

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

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


  1. powerman
    04.11.2018 11:23
    +5

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


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


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


    1. commanderxo
      04.11.2018 16:34
      +1

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

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

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

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


      1. x-foby Автор
        04.11.2018 18:13
        +1

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

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

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


      1. 0xd34df00d
        04.11.2018 19:00

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


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


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


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


        1. tyomitch
          04.11.2018 20:27
          +1

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


          1. 0xd34df00d
            04.11.2018 21:16

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

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

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


            1. commanderxo
              04.11.2018 22:59

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

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


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

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

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


              1. 0xd34df00d
                04.11.2018 23:35

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

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


                1. commanderxo
                  05.11.2018 00:05

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

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


    1. x-foby Автор
      04.11.2018 18:07

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

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

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

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


    1. 0xd34df00d
      04.11.2018 18:55

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

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


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


      1. commanderxo
        04.11.2018 19:30
        +2

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

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


        1. 0xd34df00d
          04.11.2018 21:19
          -1

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


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


      1. vadimr
        04.11.2018 21:23

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


        1. 0xd34df00d
          04.11.2018 21:25

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

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

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


          1. vadimr
            04.11.2018 21:32
            +1

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

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

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


            1. 0xd34df00d
              04.11.2018 21:46

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

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


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


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

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


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

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


              1. vadimr
                04.11.2018 21:52
                +1

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

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

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

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


                1. Druu
                  05.11.2018 14:22

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

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


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

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


                  1. vadimr
                    05.11.2018 14:25

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


                    1. Druu
                      05.11.2018 14:33
                      +1

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

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


                      1. vadimr
                        05.11.2018 15:36
                        -1

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


                        1. Druu
                          05.11.2018 16:50
                          +1

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

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


                  1. vadimr
                    05.11.2018 16:16

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

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


                    1. Druu
                      05.11.2018 16:51

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

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


                      1. vadimr
                        05.11.2018 17:48

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

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


                        1. Druu
                          05.11.2018 19:35

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

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


                          1. vadimr
                            05.11.2018 20:28

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


                            1. Druu
                              05.11.2018 22:05

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


                    1. 0xd34df00d
                      05.11.2018 18:30

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

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


                1. 0xd34df00d
                  05.11.2018 18:28

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

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


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


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

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


                  1. Druu
                    05.11.2018 19:37

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

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


                    1. 0xd34df00d
                      05.11.2018 19:59

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


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


                      1. Druu
                        05.11.2018 22:08

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

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


  1. dariasavage
    04.11.2018 11:26
    +1

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


    1. x-foby Автор
      04.11.2018 11:31

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

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


    1. 0xd34df00d
      04.11.2018 19:02
      -1

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


  1. NiniCassini
    04.11.2018 11:27

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


  1. Karlson_rwa
    04.11.2018 11:45

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


    1. powerman
      04.11.2018 11:54
      +1

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


      1. Karlson_rwa
        04.11.2018 12:02
        +2

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


      1. 0xd34df00d
        04.11.2018 19:03

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


        1. tyomitch
          04.11.2018 20:53

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


          1. 0xd34df00d
            04.11.2018 21:20

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


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


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

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


            1. tyomitch
              04.11.2018 22:47

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

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

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


              1. 0xd34df00d
                04.11.2018 23:36

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


    1. x-foby Автор
      05.11.2018 00:53
      +1

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

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


  1. vadimr
    04.11.2018 12:57

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


  1. bogolt
    04.11.2018 13:05

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


  1. Sergey-S-Kovalev
    04.11.2018 13:55
    +1

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

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

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

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


  1. Scf
    04.11.2018 14:05

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


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


  1. Cadog
    04.11.2018 14:21

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


  1. akkuraten
    04.11.2018 15:08

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


    1. x-foby Автор
      04.11.2018 18:15

      Спасибо большое!


  1. MuKPo6
    04.11.2018 16:17

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


  1. alaskanebraska
    04.11.2018 16:24

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


  1. cronk
    04.11.2018 18:16

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


    1. x-foby Автор
      04.11.2018 18:20

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


  1. biomassa
    04.11.2018 18:22

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


  1. poloart
    04.11.2018 21:39
    +2

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

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

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


    1. nikbond
      05.11.2018 01:19

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


  1. poloart
    04.11.2018 22:00

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

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

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

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


    1. x-foby Автор
      05.11.2018 01:01

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

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

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


      1. SquareRootOfZero
        05.11.2018 21:20

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


  1. buzzroll
    05.11.2018 01:51

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

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


  1. ainoneko
    05.11.2018 10:00
    +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ОЙ ПОЧТОЙ


  1. vlreshet
    05.11.2018 10:43

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


    1. Scf
      05.11.2018 13:24

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


  1. gerasimenkoao
    05.11.2018 11:12
    +3

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

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

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

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

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


    1. Scf
      05.11.2018 13:27
      +1

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


      1. tvr
        05.11.2018 14:58
        +2

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


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


    1. 0xd34df00d
      05.11.2018 18:33

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


  1. CoreTeamTech
    05.11.2018 13:02

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

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

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

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

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

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

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

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


    1. CoreTeamTech
      05.11.2018 14:16

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


      1. x-foby Автор
        05.11.2018 16:38

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

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


    1. x-foby Автор
      05.11.2018 16:35

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

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


  1. motomac
    05.11.2018 13:47

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

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


    1. AnutaU
      05.11.2018 14:12

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

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


      1. yoshka
        05.11.2018 15:19
        +1

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


      1. motomac
        05.11.2018 18:31

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


        1. SquareRootOfZero
          06.11.2018 07:01

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


    1. x-foby Автор
      05.11.2018 16:43

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

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


  1. third112
    06.11.2018 05:21

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


  1. bbc_69
    06.11.2018 09:24

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


  1. Legomegger
    06.11.2018 09:24

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


  1. gerasimenkoao
    06.11.2018 11:19

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

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

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

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

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


  1. iig
    06.11.2018 12:56

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