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

Когда твой парень - 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.

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


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


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

Поделиться публикацией
Комментарии 310
    +38
    Половина статьи — здравые, в общем-то, мысли о том, что нужно объяснять основы, а не кидаться в курсы «создать сайт за 3 дня». И тут же бэкенд, фронтенд, REST API. Если разбираться и объяснять, а не показывать как некую магию, это же офигенно сложно для новичка, разве нет?
      +9
      Поддерживаю. Если изучать с основ — можно дать просто базу. Или посадить за html и css. И уже в дальнейшем, после понимания этой темы перейти к frontend и потом к backend. Но так с наскока… Я думаю если просто показать — будут теже самые курсы на 3 дня, по типу «Создай свой сайт». Ну если только девушку не посадить клепать сайты после этого. Тогда может после 10-12, она заинтереуется и начнет вникать… прийдет осмысление…
        –4

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


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

          +4
          Ну а где полезное? Через сколько она увидит первый результат? Примерно через год (или больше), когда дойдете до интерфейса?
            +1
            Думаю, что здесь придётся искать компромиссы. С одной стороны, да, она должна видеть результаты работы как можно скорее, с другой же — она должна понимать, что она делает.

            Здесь всё будет зависеть от того, как у меня получится преподнести материал.
            Я буду стараться!
              +5
              Думаю, что поспособствовало этому изучение в школе QBasic и Pascal, простых, понятных и дающих базовые понимания.

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

                0
                Ещё есть PascalABC, очень хороший язык, как учебный — замена старому Turbo Pascal. Всё больше школ на него переходят.
                  –3
                  Можно начать с элементарного СИ, уколоться неопределенностями/недокументированными возможностями и плавно перейти на паскаль, потом на питон(тут начинается радость от всяких плюшек таких как практически неограниченная точность чисел без проблем с типами), а после — на джаву. Некоторые пункты кроме первого можно пропустить, имхо.
                    0
                    без проблем с типами

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

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

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


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

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


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

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


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

                        Кому лучше?

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


                          Небольшой пример можно?
                            0
                            First_str='test'
                            Second_n=2 #n-number
                            Ну и всегда есть type(), в случае если забыл написать что есть что. Ну и отладчик не забываем.
                              0
                              Смысл не раскрыт. Какая польза от подобных суффиксов? Или вы практикуете повторное использование переменных?
                                0
                                Ну, переменные типа temp я могу много раз использовать в программе в разных местах с разными типами. Зачем засорять память? Но с обычными переменными я так не всегда поступаю, но бывает.
                                  0
                                  Зачем засорять память?

                                  Подозреваю, что для очистки памяти в питоне есть питоновские способы… Так же как и в С…
                                  0
                                  Польза может быть, если используются две переменные, хранящие одно и то же в разных типах. Или даже в разных единицах измерения.
                                  Например, если мне некоторая величина поступает в виде строки из текстового поля, мне её нужно преобразовать в число, а потом эта величина мне потребуется в метрах и в дюймах.
                                  Получаем что-то вроде
                                  strValue = getValue();
                                  mValue = parseFloat(strValue);
                                  inValue = mValue*0.0254;

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

                                  Разумеется, всё упирается в потребность. Очень-очень редко она возникает.
                                  А приписывать префиксы повально каждой переменной — это дурацкая идея, против которой, ЕМНИП, выступал сам автор венгерской нотации.
                                    0
                                    Если такой трюк нужен больше чем 2 раза, возможно, стоило бы завернуть это дело в класс с методами as_str(), as_float(), as_inch()… ;)
                                    Как я понял, у dimonoid python, но он имел в виду нечто иное…
                                      0
                                      стоило бы завернуть это дело в класс с методами as_str(), as_float(), as_inch()

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

                                      dimonoid в python просто слишком увлёкся новым для себя подходом к именованию. Бывает на определённом этапе самообразования.
                                        0
                                        Ради десятка промежуточных значений в одной процедуре?


                                        Почему бы и нет? +1 к понятности кода, -1 к вероятности ошибиться. Нельзя, даже если очень хочется, сделать глобальную переиспользуемую в нескольких местах временную переменную — бесценно. ;)
                                          0
                                          +1 к понятности кода

                                          И к накладным расходам на вызов методов.
                                          сделать глобальную

                                          Зачем?
                                            0
                                            +1 к понятности кода
                                            И к накладным расходам на вызов методов.


                                            Преждевременная оптимизация это называется ;)

                                            сделать глобальную
                                            Зачем?


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

                                              Заинлайнится.

                                          0

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

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

                                    Шел 2018.

                          0
                          Ну простейшую программу типа «Hello World» можно за 15 минут научить написать.
                      +19
                      Вот тоже сильно удивился. Начали за здравие, а закончили за упокой. Когда ко мне девушка подошла с такой же просьбой, то мы начали с клепания веб-верстки и даже это затянулось надолго, т.к. даже чисто HTML5 + CSS3 без js далеко не так тривиальны для новичка, как кажутся.
                      А тут сразу фуллстек.
                        –2

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

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

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

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

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

                                  0
                                  100% был бы! Так как моего дохода хватает с головой что бы обеспечить себя её и наших родителей) Сам процесс саморазвития в нашей профессии привлёк меня и её! (Хотя я закончил и техникум и институт по специальности ПИ — программная инженерия, в сумме более 9 лет).
                              0
                              Очень рад, что у Вас и Вашей девушки получилось! Это прекрасно!

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

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

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

                              Ну вот и проверим!)
                            +4
                            нужно объяснять основы

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


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

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

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

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

                                Впрочем, не знаю, у меня, наверное, какое-то скучное программирование, я дома в основном задачки всякие для себя решаю и учебники раскуриваю, озарения в основном приходят по ним.
                                  +1
                                  Напоминаю, цель автора — не сделать из своей девушки синьора для гугла, а сделать, чтобы она могла понимать то, что он ей рассказывает о своей работе вебдева.
                                  Не думаю, что лямбды и предикаты ей в этом помогут.
                                    0
                                    или подкинул книжку Haskell From the First Principles

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

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

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

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


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


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


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


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

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

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

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

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

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

                                    +1

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

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

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

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


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

                                          0

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


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

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

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

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

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

                                              +3
                                              Заведённый.
                                                0
                                                Это если механик-гинеколог.
                                                +1
                                                Было бы странно этого не сделать, если это то что вы любите и вам уже хочется получить плюшки работы учителя — возможно наиболее значимой профессии :)
                                                  +16
                                                  Начал за здравие, закончил не очень. Если девушка не фанатик, готовый на энтузиазме работать несколько недель, мне кажется на первом шаге у вас выйдет пробуксовка уже на второй день.
                                                  Для изучения основ лучше все же брать задачу, которую вы сами могли бы полностью реализовать за 10-15 минут (не преувеличение).
                                                  (был небольшой опыт такого обучения — по итогу можно сказать успешный (программистом не стала, но стала понимать меня)).
                                                    0

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

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

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

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

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

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

                                                                +6

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


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


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


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

                                                                  0

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

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

                                                                      Встречный вопрос: корректно ли остальных называть программистами?
                                                                        0
                                                                        Безусловно. Программирование — широкий профиль, как и врачи. Кто-то делает операции на сердце, а кто-то отбеливает зубы, но все получали профессию врача.
                                                                      +1
                                                                      Так всё просто: есть такая специальность «математик — системный программист». Он, очевидно, математику знает.
                                                                      А вот программисты приложений, по мнению ОКЗ, «создают и поддерживают программный код, указанный в технических инструкциях и спецификациях для программных приложений и операционных систем». Вот дали ему формулу — он кодит.
                                                                    0
                                                                    Мне скучно от ветвлений, 10011001 и применений законов де Моргана к булевым выражениям, хотя я вроде как даже могу с относительно чистой совестью назвать себя неплохим программистом. А вот от матлогики, алгебры и прочего абстрактного мне совсем не скучно, и я очень жалею, что открыл для себя эти разделы математики достаточно поздно.

                                                                    Где-то видел забавное мнение о том, что вся эта computer science делится на два лагеря: логики и алгоритмисты. Алгоритмисты любят считать сложность, рисовать блок-схемы и ковырять битики. Логики любят заниматься какой-то абстрактной чепухой. Так что, может, человек просто принадлежит другому лагерю.
                                                                      +6
                                                                      Мне скучно от 10011001
                                                                      Хм, а по вашему нику и не скажешь!
                                                                    0
                                                                    Для меня это было самое интересное на курсах информатики в школьные годы.
                                                                  +8
                                                                  Зачем лезть в дебри фронтенда? Тем более при том, что там каждые несколько лет все сильно меняется и к фундаментальным основам это имеет слабое отношение.
                                                                  Зачем вообще начинать с клиент-серверной архитектуры?
                                                                  это либо курсы по веб-программированию (PHP, JS, Python, etc)
                                                                  Курсы по Python есть не только по Веб-программированию.
                                                                  Посмотрите вот этот курс для начинающих — www.coursera.org/learn/interactive-python-1 (и его вторую часть), где с нуля учат делать простые игры на Python прямо в браузере (у них есть интерпретатор Python на JavaScript), адаптируйте его для Вашей девушки и будет и интересно и познавательно!
                                                                    0

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


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

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

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

                                                                          0

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

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

                                                                      Scratch!

                                                                        +1

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

                                                                          +9

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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

                                                                                  +3
                                                                                  www.lazarus-ide.org

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

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

                                                                                      +2
                                                                                      По-моему, Kylix закончился ещё во времена, когда за Delphi стояла Borland, а не Embarcadero
                                                                                        0
                                                                                        Дельфи сейчас на андройд компилирует.
                                                                                          0
                                                                                          Kilyx, к сожалению, давно умер, так толком и не родившись (поговаривают, благодаря 'стараниям' одной известной компании из Редмонда).
                                                                                          Делфи сейчас сама компилирует (кроме Win32/Win64, само собой) под Android, iOS, MacOS, Linux, работает с вебом (с помощью сторонних компонент).
                                                                                          0
                                                                                          PascalABC под Linux есть.
                                                                                          0
                                                                                          К слову, выпустили Delphi Community Edition. Можно совершенно свободно использовать что бы 'поиграться'. И не только :) Как раз 10.3 выпускают, пробуйте.
                                                                                          0
                                                                                          Проблема еще в том, что многие просто скажут, зачем мне компьютер, если рецепты можно просто записывать в блокнот. И даже будут правы. И количество того, что нужно изучить, чтобы сделать функцию похожую на записывание в блокнот, только на компьютере — удручающе зашкаливает, не в пользу компьютеров.
                                                                                            0

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

                                                                                              0
                                                                                              Вы мудрый.

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

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

                                                                                              Ну и заложите вейпойнты, типа сесть и спросить, мы двигаемся дальше? Каждые месяцев 6.
                                                                                                0
                                                                                                Да, вы правы, это обязательно и нужно было упомянуть об этом в статье.
                                                                                                Постараюсь это сделать в следующей. Спасибо!
                                                                                            +15
                                                                                            Фундаментальная ошибка — ожидать, что обучение будет быстрым. И что можно быстро рассказать нужные вещи и все.

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

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

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

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

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

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

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

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

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

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

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

                                                                                                Из проблем, с которыми мы столкнулись (и которые ИМХО у вас тоже) были:
                                                                                                — Неверная постановка цели. Правильная цель — дотянуть человека до найма в качестве джуниора или интерна. После этого его развитие пойдет гораздо более быстро. Поэтому наша задача — конкретно уровень джуниора. Все остальное определяется этой целью, программа и т.д.
                                                                                                — Нехватка времени. Нормальная учеба не-айтишника требует много времени, а не 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 лет. Вот в это мы уперлись. Даже я бы сказал ударились. Когнитивные способности, время и мотивация.
                                                                                                  0
                                                                                                  Чтобы умные не отваливались, нужны другие методики обучения. Мы все привыкли к усреднению, к массовому образованию, всем так проще и оно работает для большинства. Но с трудными и с умными нужно работать по-другому, чтобы они не отваливались.
                                                                                                    +1
                                                                                                    Вы неверно поняли мысль.

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

                                                                                                    Этому наблюдению сто лет в обед, пришло из спорта — «напор уделывает класс».
                                                                                                      0
                                                                                                      Понимание роли «напора» приходит с опытом :) Одна из причин, почему умные люди довольно часто неуспешны в жизни — им сложно принять мысль о том, что большие цели надо планировать и долбить годами, а не брать их одним гениальным марш-броском.
                                                                                                    0
                                                                                                    Мне нравится читать такие комментарии — в них есть вещи, которые я не продумывал, к которым пока ещё сам не дошёл.
                                                                                                    Спасибо! Постараюсь учесть то, что не было учтено изначально!
                                                                                                      0
                                                                                                      Самое ценное знание, которое Вы можете почерпнуть из комментариев, это то, что это возможно :)

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

                                                                                                      Остальное — рекомендации.
                                                                                                        0
                                                                                                        Удачи Вам в этом ещё одном случае!

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


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


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


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


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

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

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

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

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

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

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

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

                                                                                                        Вот, недавно до принципала повысил, нужно будет бумагу официальную оформить и в рамку на стену.
                                                                                                    0
                                                                                                    С интересом прочитал бы отдельный материал о вашем опыте :) О каком «сайте проекта» речь, не понял из комментария?
                                                                                                    +1
                                                                                                    Автор, я в Вас верю! У моего мужа получилось XD
                                                                                                    Учили Java, начинали с JavaRush. Но ваша программа мне видится огромной и непосильной. Судя по себе, я бы это осилила минимум за год (а то и два) усердной работы и чудовищной мотивации. Если действительно нацеливаться на хорошие знания. Это при том, что я по образованию учитель английского и с языком проблем нет :)
                                                                                                      +1
                                                                                                      Благодарю!
                                                                                                      Очень интересно слышать мнение человека, непосредственно пришедшего в наш лагерь подобным образом.
                                                                                                      Сколько времени у вас ушло на базу? Были ли проблемы с какими-то конкретными областями?
                                                                                                      0
                                                                                                      Эк Вы размахнулись…
                                                                                                      Такое не каждому крепкому джуниору под силу, вот так вот, сразу…
                                                                                                      Но тема интересная…
                                                                                                      Я тоже дочь (падчерицу) к айти приучаю…
                                                                                                      Еще когда в школе с ней уроки по математике учил, заметил — зачатки абстрактного мышления и логики есть… Надо только развить…
                                                                                                      Прошли с ней курс на ютюбе по верстке и css…
                                                                                                      Когда работу вэб-форм объяснял, она сообразила, как ей пароль от аккаунта вкантактов у ее парня увести-)
                                                                                                      Перед освоением sass хотел начальный курс по js пройти, чтобы сначала поняла, что такое переменные, if-then, while, for и т.п.

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

                                                                                                      Теперь ломаю голову, как его возобновить…
                                                                                                      Пока кроме «ремня» ничего в голову не приходит-)
                                                                                                      Надеюсь, жисть поможет убедить-)
                                                                                                        +3
                                                                                                        Ну вы же ей объяснили, что уводить чужие аккаунты, особенно аккаунты близких людей – это нехорошо, да? В смысле, именно объяснили, не используя ремень?
                                                                                                        А то я будто фильм с открытой концовкой досмотрел.
                                                                                                          0
                                                                                                          Я думаю, что в Вашем случае сначала необходимо подумать, а нужно ли оно ей?
                                                                                                          Возможно интерес угас не из-за вашего стиля преподавания, а просто от того, что сейчас её волнуют более интересные вещи, раз уж Вы заговорили о парне)
                                                                                                          В конце концов, главное — чтоб человек, особенно ребёнок, был счастлив!
                                                                                                          +2
                                                                                                          harward cs50 посмотрите.
                                                                                                          Очень дельная вещь как для начинающих, так и для не совсем начинающих, так и для тех кто хочет понимать о чем речь пусть и не собирается идти в эту профессию.

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

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

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

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

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

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

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

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

                                                                                                                    А может заходите в наш чатик в телеграме про языки и компиляторы, там много уважаемых товарищей и можно подискутировать.
                                                                                                                      0
                                                                                                                      Сильная — это 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 — в контексте систем типов это не используется.

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

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

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


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


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

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


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

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

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

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

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

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


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


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

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

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

                                                                                                                    0

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


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

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

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

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

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


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

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


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

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

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

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


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

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


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

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

                                                                                                                    +6
                                                                                                                    Прочитал «Как научиться программировать свою девушку». Задумался.
                                                                                                                      +12
                                                                                                                      Ужас. Просто дайте ей закодить мультик-игру на Scratch. Пусть она поймёт, что программирование — это ввод набора команд, заставляющий что-то меняться на экране. Пусть нарисует квадратик с помощью цикла. Пока что ваш план состоит в том чтобы научить ее плавать, бросив в чан с кипящей кислотой.
                                                                                                                        0
                                                                                                                        В статье верно отмечено:
                                                                                                                        Думаю, что поспособствовало этому изучение в школе QBasic и Pascal, простых, понятных и дающих базовые понимания.
                                                                                                                        Ok! ИМХО на стандартном Паскале и надо учить. И брать задачи на 10 мин.:
                                                                                                                        Свою первую программу (не считая того, что мы писали на уроках) я написал для младшего брата, когда тот стал учить таблицу умножения: ввод диапазона чисел, случайный вывод двух из них брату с предложением ввести их произведение, проверка и так далее по кругу.

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

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

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

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

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

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

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

                                                                                                                                      Ложное противопоставление.

                                                                                                                                        0
                                                                                                                                        >Девушка хочет понять программирование, а не математику
                                                                                                                                        Ложное противопоставление.

                                                                                                                                        Хотите сказать, что программирование=математика?
                                                                                                                                        А здесь, нпр., на вопрос «Роль математики для информатики в школе высокая?» почти 36% ответили «нет».
                                                                                                                                        Можно привести и другие примеры, где математику и CS противопоставляют. ИМХО математика и CS пересекаются, но не совпадают полностью.
                                                                                                                                          0
                                                                                                                                          Школьная информатика — увы и ах. С математикой она перескекается только в заданиях типа закодировать длиннющую бессмыссленную формулу со скобками на языке Pascal ABC. Остальное — знакомство с Windows и Office.
                                                                                                                                            0
                                                                                                                                            ИМХО зависит и от программы и от учителя. Нпр., в книге С.Окулов, Программирование в алгоритмах, которая предназначена для школьников, есть рядовые задачи, а есть олимпмадные. И много разной математики: арифметика многорозрядных целых, комбинаторика, теория графов, вычислительная геометрия и т.д.
                                                                                                                                            0
                                                                                                                                            Хотите сказать, что программирование=математика?

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


                                                                                                                                            Я и сам несколько лет вполне успешно что-то там писал, не понимая.


                                                                                                                                            А здесь, нпр., на вопрос «Роль математики для информатики в школе высокая?» почти 36% ответили «нет».

                                                                                                                                            Я бы там тоже ответил, что нет, потому что в школе что на уроках математики, что на уроках информатики преподают какую-то ерунду.


                                                                                                                                            Да и судить по школьной информатике о всём программировании — ну такое. Как, впрочем, и судить по школьной алгебре с геометрией о всей математике.


                                                                                                                                            ИМХО математика и CS пересекаются, но не совпадают полностью.

                                                                                                                                            Не совпадают, конечно. CS — подмножество математики.

                                                                                                                                              0
                                                                                                                                              CS — подмножество математики.
                                                                                                                                              Кое-что из CS не входит в математику. Нпр., файл не мат. объект, человеческий фактор в GUI, эвристические алгоритмы и т.д.
                                                                                                                                              в школе что на уроках математики, что на уроках информатики преподают какую-то ерунду.
                                                                                                                                              Пока в мире не придумали ничего лучше.
                                                                                                                                                0
                                                                                                                                                Нпр., файл не мат. объект, человеческий фактор в GUI

                                                                                                                                                Я бы сказал, что это и в CS не входит. Особенно человеческий фактор.


                                                                                                                                                эвристические алгоритмы и т.д.

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


                                                                                                                                                Пока в мире не придумали ничего лучше.

                                                                                                                                                Что не мешает испытывать лёгкий баттхёрт.

                                                                                                                                                  0
                                                                                                                                                  Я бы сказал, что это и в CS не входит.
                                                                                                                                                  Файл во многих ЯП, ЯП часть CS. Уже в начале 90х гг. (а м.б. и раньше) вводная книга Inside Macintosh начиналась описанием метафоры рабочего стола, где подчеркивалась большая роль учета человеческого фактора для удачной разработки GUI. И нашумевшая книга «Софт — отстой! И что с этим делать?» во многом посвящена этому фактору. Еще можно посмотреть статью Human–computer interaction (HCI) и т.д. Что касается эвристических алгоритмов — тут в первую очередь антиматематичный бездоказательный подход, умышленно возведенный в статус принципа.
                                                                                                                                                    0
                                                                                                                                                    PS Разница «CS vs математика» в первую очередь в целях, что отражает известная шутка:
                                                                                                                                                    Программист решает задачи, которые нужно решить (для практики), а математик решает задачи, которые решаются (и не всегда нужны для практики)
                                                                                                                                          0
                                                                                                                                          Девушка хочет понять программирование, а не математику и физику.

                                                                                                                                          А в программировании все то же самое, рекурсивная функция — это неподвижная точка.


                                                                                                                                          И никакого другого понимания в природе не существует. Либо на пальцах, и объяснять тут вовсе ничего не надо (рекурсивный вызов ничем не отличается по факту от обычного, что такое обычный вызов человеку же понятно? значит, понятно, и что такое рекурсивный), либо неподвижная точка.

                                                                                                                                            0
                                                                                                                                            И никакого другого понимания в природе не существует.
                                                                                                                                            Существуют более простые для девушек формулировки — см. Вики с картинками:
                                                                                                                                            Рекурсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя.

                                                                                                                                            (Картинки помогут понять это определение!)

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

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

                                                                                                                                              Так вы и дали определение как в математике, но только плохое. Зачем оно нужно? Зачем тогда в принципе объяснять, что такое рекурсия, если, еще раз, это не является вне теории каким-то отдельным концептом и рекурсивные вызовы работают совершенно аналогично нерекурсивным? Объяснили про обычные вызовы => рекурсия изучена.

                                                                                                                                                0
                                                                                                                                                Так вы и дали определение как в математике, но только плохое.
                                                                                                                                                Не я дал, а Википедия. Но и она сама определения не дает, а только пересказывает «авторитетные источники». Что оно плохое -эксперты вики так похоже не считают. ИМХО оно достаточное с рекурсивными картинками, и больше на старте не нужно. И дело не в том, как работают рекурсивные вызовы, а дело в работе мозгов ученика (в его психологии), который узнает о важном подходе решения ряда типовых задач через рекурсию. ИМХО в вики понимание этого подхода сделано максимально простым — для старта это самое главное.
                                                                                                                                                  0
                                                                                                                                                  Не я дал, а Википедия.

                                                                                                                                                  Именно вы выбрали определение из википедии, а не какое-то другое.


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

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

                                                                                                                                                    0
                                                                                                                                                    Ничего дополнительно вам изучать не требуется.
                                                                                                                                                    Почему тогда большинство учебников особо разбирают рекурсию?
                                                                                                                                                      0
                                                                                                                                                      Почему тогда большинство учебников особо разбирают рекурсию?

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

                                                                                                                                                        0
                                                                                                                                                        Все преподы мира сговорились особо уделять внимание рекурсии? — похоже на конспирологию ;)
                                                                                                                                                          0
                                                                                                                                                          Все преподы мира сговорились

                                                                                                                                                          Именно так и выглядит каргокульт, ага.

                                                                                                                                                          0
                                                                                                                                                          где рекурсию разбирать действительно смысл есть (вроде того же хаскеля)

                                                                                                                                                          А чего там в хаскеле-то особого по сравнению с каким-нибудь C++? :)

                                                                                                                                                            0

                                                                                                                                                            То, что без рекурсии цикл написать не получится :)

                                                                                                                                                          0

                                                                                                                                                          Как вы посчитали "большинство"?

                                                                                                                                                            0
                                                                                                                                                            У меня сложилось такое впечатление. А у Вас?
                                                                                                                                                              0

                                                                                                                                                              Я не считал. Надо еще определиться, что мы считаем учебником. Они ведь разные бывают. Есть scratch и javascript для детей, есть SICP и алгоритмы Кормена, а еще есть куча онлайн площадок для обучения. Что насчет самодельных методичек, которые делают преподаватели учебных заведений ради своих целей?

                                                                                                                                                                0
                                                                                                                                                                что мы считаем учебником

                                                                                                                                                                Учебником нужно считать то, что рекомендовало МО для обучению предмета «Информатика» в общеобразовательной школе. Это то, что входит в обязательную программу.
                                                                                                                                                                  0

                                                                                                                                                                  Мне стало любопытно и я нашел "Методическое письмо об особенностях преподавания информатики и ИКТ в 2017/2018 учебном году".
                                                                                                                                                                  Учебники из списка рекомендаций полистать сейчас не получится, но в самом письме есть абзац:


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

                                                                                                                                                                  Так что ответ на вопрос "Почему тогда большинство учебников особо разбирают рекурсию?" будет
                                                                                                                                                                  "потому что это будет на ЕГЭ".

                                                                                                                                                            0

                                                                                                                                                            Да если б они ещё её разбирали.


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


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

                                                                                                                                                              0
                                                                                                                                                              Привели книжку для мехмата МГУ, когда у нас здесь разговор про легкий старт на уровне начальной школы. Если всех начинать учить с уровня мехмата, то школу нужно отменить и набирать на мехмат из дет.сада в возрасте шести лет.
                                                                                                                                                                0

                                                                                                                                                                Она на самом деле не для мехмата МГУ, её и школьникам так-то давать можно, каких-то априорных знаний математики там особо не нужно (кроме отсылки к топологии во второй книжке в альтернативном доказательстве теоремы о компактности то ли FOL, то ли исчисления высказываний, но это одна теорема, которую можно дропнуть). Нужно там только некоторое абстрактное мышление.

                                                                                                                                                                  0
                                                                                                                                                                  каких-то априорных знаний математики там особо не нужно (кроме
                                                                                                                                                                  Нужна прежде всего мат.культура определенного уровня, понимание «языка математики». Согласен, что ученик матшколы осилит эту книгу, т.к. ему понятнее 1 формула, вместо десятков обычных слов. А вот выпускник обычной школы с интересами только в гуманитарных областях через год после окончания на вопрос чему равна длина окружности ответит «пи эр квадрат»…
                                                                                                                                                      0
                                                                                                                                                      Рекурсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя.

                                                                                                                                                      У меня импредикативность от этого определения, борода выросла и не стрижётся.


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

                                                                                                                                                      А она, я забыл, программирование понимать хочет или что с ним делать?

                                                                                                                                                  0
                                                                                                                                                  неподвижные точки

                                                                                                                                                  Пару дней назад переписывал какой-то код с идриса на хаскель и открыл для себя очень изящное представление натуральной бесконечности как fix S для


                                                                                                                                                  data Nat :: Type where
                                                                                                                                                    Z :: Nat
                                                                                                                                                    S :: Nat -> Nat
                                                                                                                                                    0

                                                                                                                                                    Так Nat и сам неподвижная точка так-то (как раз наибольшая в случае хаскеля, т.к. включает бесконечность) :)

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