В этом году ВКонтакте при поддержке Промсвязьбанка запустила стипендиальную программу VK Fellowship для преподавателей информатики. Совместно мы отобрали 15 преподавателей из регионов России: создателей авторских курсов по программированию, школьных учителей, директоров центров дополнительного образования, тренеров, которые готовят школьников к международным олимпиадам по программированию. Они получили стипендии от ВКонтакте и Промсвязьбанка и теперь участвуют в наших выездных школах.



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

— Для начала давайте познакомимся.

Инесса Шуйкова:  Я работаю директором и учителем информатики в ГОАОУ Центр поддержки одаренных детей «Стратегия» города Липецк. Преподаю С++ и Pascal в 6-11 классах.
Петр Калинин: Живу и работаю в Нижнем Новгороде. Веду занятия в лицее №40, на базе ННГУ им Лобачевского, а также дистанционно, без привязки к конкретному учебному заведению. В основном, на Python, Pascal, C++. С отдельными ребятами занимаюсь на Java, C# и более экзотических языках. Большая часть ходит в 9-11 классы, но некоторых веду уже с 4 класса.
Сергей Беляев: Я живу в Красноярске. Работаю педагогом дополнительного образования в Красноярском краевом Дворце пионеров. Языков в работе много — C++, Pascal, Python, Basic, Java Script, Perl. Возраст у учеников разный — обычно от 12 до 18 лет.

О преподавании программирования


— Как нужно организовать обучение программированию в школах?

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

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

Сергей: Общая программа в рамках предмета информатики должна быть такой, как сейчас: программирование поверхностно и в ознакомительных целях. Более содержательный курс — для профильных классов с физико-математическим уклоном. Профессиональное обучение разумно лишь в рамках дополнительного образования.

— Главные проблемы обучения программированию в России? Как их решить?

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

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

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

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

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

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

Петр: Четкого ответа у меня нет, но полагаю, что имеют право на существование развивающие игры и задания программистского направления. Например, я купил своей трехлетней дочери игру «Такси» от Мосигры.

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

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

Инесса: Да, это так! Даже если вы не будете программировать на работе, то понимание того, как устроены программы и информационные системы, позволит вам уверенно чувствовать себя в будущей цифровой среде.

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

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

Об особенностях изучения языков программирования


— Какие задачи по программированию самые сложные и интересные?

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

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

Сергей: Считается, что наиболее сложные темы — это рекурсия, структуры данных (особенно деревья отрезков и декартово дерево) и теория графов. Конечно, в любой теме могут быть простые задачи. Так же как и в любой простой теме вида «простая математика» может быть вовсе не простая математика, хоть и без программирования. Поэтому все это довольно субъективно, нельзя утверждать, что все задачи одной из тем обязательно сложнее любых других. Для меня лично наиболее сложными кажутся задачи из теории игр, в частности, те, которые используют метод минимакса.

— Можно ли начать обучение С++, минуя Pascal и Basic?

Инесса: Да, однозначно можно. Подтверждение — мой опыт работы с детьми.

Петр: Конкретно на C++ — можно, но не рекомендую. Я бы рекомендовал заменить C++ на Python. Pascal и уже тем более Basic точно не нужны.

Сергей: Конечно. Я так делаю уже 15 лет. Если основная цель — познакомить учеников с элементами программирования в сжатые сроки, а не целенаправленно программированию обучать, то лучше все-таки подойдет Python.

— В каком порядке нужно начать изучение С++, чтобы не заблудиться в дебрях?

Инесса: Советую начинать сразу с решения простейших задач. Пример хорошего курса — «Введение в программирование С++» Михаила Густакашина.

Петр: Я считаю, что в любом языке надо сначала освоить базовые вещи, позволяющие писать простейшие программы (переменные, if, циклы, массивы, строки, вещественные числа). С ними уже можно решать практически любую олимпиадную задачу. Остальное — уже по мере надобности.

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

— Как писать понятный код на С++?

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

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

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

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

— Как вы относитесь к использованию Boost в учебных целях?

Инесса: Не использую его в работе

Петр: В принципе, позитивно, но в школе это не нужно.

Сергей: В реальном программировании ничего не имею против этого расширения. Но я обучаю детей олимпиадному программированию, а там школьники им воспользоваться не смогут, поскольку Boost не входит в стандартный набор библиотек ни одного из стандартных компиляторов языка C++. Так что приходится довольствоваться тем, что есть, например, STL (Standard Template Library).

— У вас есть успешный рецепт подготовки учеников на олимпиады по программированию?

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

Петр: Базовая теория, решение задач, понимание формата олимпиады, аккуратное тестирование.

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

— Есть ли в вашей программе что-нибудь, что делает ее уникальной?

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

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

Сергей: Во-первых, использование авторского ресурса «Школа программиста». Во-вторых, использование авторских печатных методических пособий. В-третьих, весь теоретический материал представлен в презентациях для более наглядной иллюстрации материалов образовательной программы.



О самообразовании


— Самообучение и обычное обучение. Как это лучше сочетать?

Инесса: Обучение с учителем по классической схеме – это осень важно, чтобы овладеть базой, наработать уровень, «стать на крыло». Когда ребёнок становится призером, победителем серьёзных олимпиад продолжением классического обучения становится тренировочный процесс, выездные школы, самообразование (дистанционные курсы, личные регулярные тренировки).

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

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

— Говорят, что программированию стоит учиться до определенного возраста, причем возраст этот меньше 30 лет. Потом эффективность сильно падает. Как вы относитесь к таким возрастным ограничениям?

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

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

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

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

Петр: Я верю, что есть и толковые курсы, и поверхностные. Плюс многое зависит от самого ученика.

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

— Что было для вас сложнее всего во время собственного обучения? Какие этапы можете выделить?

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

Сергей: Если вспомнить, что это был 1989 год, когда не было интернета, домашнего компьютера и учителей, а только один программируемый калькулятор с инструкцией, то да, определенные сложности были. Но я все равно смог освоить базовые принципы программирования. Тогда я учился в девятом классе. Это был первый этап.

Следующий этап — это обучение в рамках УПК в 10-11 классах на компьютерах без винчестеров. Но зато уже с клавиатурой, монитором (в качестве которого выступал черно-белый телевизор) и преподавателем. Тогда я изучил Basic и Pascal. Далее в ВУЗе мои возможности и познания в области программирования сильно расширились. Мы изучали C++, Lisp, Prolog и Assembler. А с пятого курса я сам начал педагогическую деятельность, стал преподавать Pascal школьникам.

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

Лишь в 2003 году я заинтересовался олимпиадным программированием и переключился на обучение этому школьников.

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

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

Сергей: Пожалуй, основная моя ошибка — это неправильный выбор средств программирования для создания веб-сайтов. Я до сих пор использую технологии от Microsoft: Windows + IIS + ASP + MSSQL. Все разработки требуют не только лицензии, но и больших вычислительных ресурсов. Гораздо лучше отталкиваться от бесплатного ПО. В то время да и сейчас все еще актуально создание программ и разработка сайтов под Unix с использованием Apache + PHP + MYSQL.

Комментарии (151)


  1. oisee
    17.12.2018 17:46
    +2

    Boost и С++ вместо Basic и Pascal?

    Попахивает нарушением венской конвенции! (1971)


    1. iborzenkov
      17.12.2018 18:27
      +1

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


      1. LAutour
        17.12.2018 21:40

        Паскаль в свое время не мешал нашим выигрывать на международных студенческих олимпиадах по программированию, когда другие обычно выбирали С\С++.


        1. A__I
          18.12.2018 06:40

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


        1. pehat
          18.12.2018 16:13

          Правда, для этого приходилось всегда держать в голове quicksort и декартово дерево.


      1. roscomtheend
        18.12.2018 11:16

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


    1. DrZlodberg
      18.12.2018 09:17

      Ну хоть не PERL. Хотя boost тоже весёлый. А чем С не угодил? Если не лезть глубоко в его заморочки — обычный язык.


      1. oisee
        18.12.2018 10:58

        C, C++ и Objective C — это три разных человека!


        1. DrZlodberg
          18.12.2018 11:08

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


      1. domix32
        18.12.2018 20:18

        За перл действительно можно под трибунал. А в C нет нормального ООП да и в целом всякого хорошего что есть в современном C++ — nullptr, enum class, кастов всяких, указателей поумнее, да те же шаблоны. А то ж многие работодатели страдают после того как недавний студент начинает по всему коду делать new и забывать про delete.
        Си разве что для олимпиадников может оказаться лучшим выбором.


  1. prishelec
    17.12.2018 19:49
    +2

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


    1. msdos9
      17.12.2018 20:01

      В Паскале тоже есть указатели, и ничего, мы в 80-х как-то переварили…


      1. mrlolthe1st
        17.12.2018 20:56
        +1

        Они там вообще не на таком уровне, куда проще.


        1. Siemargl
          18.12.2018 03:49

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

          другое дело, что их использование нужно «не на таком уровне, куда проще»


          1. LAutour
            18.12.2018 06:56

            Совсем легко для новичка:
            a* b, *c
            a *b, *c
            a **b
            a = *b
            паскаль:
            a: ^b
            a := b^


            1. roscomtheend
              18.12.2018 11:22

              type a = ^b;
              c = ^a;
              d = ^c;

              function x(var q: a; w: c): d;


          1. zinpub
            18.12.2018 11:52

            Уже можно


          1. geher
            18.12.2018 13:21

            разве что вычитать нельзя и плюсовать

            var
            p:pointer;
            b:array[0..10] of integer;
            begin
            p:=@b[0];
            p:=pointer(integer(p)+sizeof(integer)*4);


            1. Siemargl
              18.12.2018 18:12

              стандартный паскаль с дельфи и прочими расширениями не путаем


              1. geher
                18.12.2018 19:26

                Паскаль не стоит на месте и развивается. Так что Object Pascal — его естественное продолжение.
                А если говорить о стандартном паскале, то там тоже не все так страшно, даже если sizeof(integer)<>sizeof(pointer), а указатель не является целым числом.


                type
                a = record
                 case i:integer of
                 1:p:pointer;
                 2:r:record
                       s:word;
                       o:word;
                    end;
                end;
                

                Данная конструкция позволит в теории организовать арифметику с указателем в системе, в которой адрес представлен двумя словами — сегментом и смещением на процессорах 8086, например.
                Конечно, это не полноценная адресная арифметика в с/с++, но все же.


    1. Laney1
      17.12.2018 20:19

      вы видимо слабо представляете, на что способны школьники, желающие хорошо выступать в олимпиадах по программированию) (а C++ там сейчас фактически обязательный стандарт, 95% решений пишется на этом языке)


      1. geisha
        18.12.2018 02:29
        +1

        95% бабок у подъездов считают, что преимущества C и C++ над паскалем сильно преувеличены, когда речь идет об олимпиадных задачках на один файл и 100 строк кода.


        1. paluke
          18.12.2018 09:27

          Когда в олимпиадной задаче нужен std::map или даже просто надо отсортировать массив, паскаль резко сливает С++ и питону. А вот олимпиадных задач, где необходимы были указатели, я что-то не припомню.


          1. geisha
            18.12.2018 09:35

            Ага, цель задачек — проверить, умеют ли школьники пользоваться std::map и -o3 в опциях компилятора.


            1. paluke
              18.12.2018 10:12
              +1

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


              1. barbanel
                18.12.2018 16:31

                Да там даже паскаль будет удобнее)


              1. geisha
                18.12.2018 22:36

                Судя по тому, что в ветке комментариев pascal vs c вы постоянно упоминаете питон, последний у вас явно вызывает сильные чувстсва. Ничего, это нормально: у меня тоже. Со временем вы научитесь сдерживаться.

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


                1. paluke
                  19.12.2018 06:14
                  +1

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


          1. Error1024
            18.12.2018 18:44

            Вы тролите? В Delphi давно уже есть все нужные дженериковые примитивы


            1. paluke
              18.12.2018 19:44

              Где Delphi с дженериками? На acm.timus.ru есть только freepascal 2.6, на codeforces.com — Delphi 7, FreePascal 3, PascalABC.NET 2


              1. Error1024
                18.12.2018 21:44

                А разве это проблема Pascal/Delphi, а не acm.timus.ru/codeforces.com с устаревшими компиляторами?


                1. paluke
                  19.12.2018 06:10

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


              1. MacIn
                18.12.2018 21:49

                Где Delphi с дженериками?

                На официальном сайте Embarcadero скачивайте и радуйтесь жизни.


              1. Groramar
                19.12.2018 15:59

                FreePascal 3
                Новый FPC уже с дженериками. Ждем официального релиза, пока что в транке.


    1. myxo
      17.12.2018 20:22

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


      1. oisee
        17.12.2018 20:32

        C или C++?


        1. myxo
          17.12.2018 21:06

          Обычно все же Си. У нас двухнедельная интенсивная школа. За это время Си освоить вполне реально, с++ уже сложно.


          1. LAutour
            17.12.2018 21:47

            А в какой среде? Удобная и быстрая IDE с отладкой при изучении имеет не малое значение.


            1. myxo
              17.12.2018 23:42

              гораздо большее значение имеют хорошие преподаватели и интересные задачи.
              У нас каждый преподаватель в своей небольшой группой сам выбирает инструментарий. У меня это обычно linux + vim + gdb.


              1. LAutour
                18.12.2018 07:09

                Многие взрослые «пугаются» консоли, а то дети (которые сами не хотят).


                1. myxo
                  18.12.2018 08:26

                  Поэтому и учим. Люди боятся того, чего не знают.


          1. UnknownUser
            18.12.2018 16:02

            linux+vim+gdb…
            А какого возраста дети, если не секрет?
            Меня тут коллеги пытаются убедить что даже Си школьникам преподавать — преступление против человечности, а тут vim )).


            1. myxo
              18.12.2018 16:13

              После 7 класса и выше.

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

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


              1. UnknownUser
                19.12.2018 09:06

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


                1. domix32
                  19.12.2018 19:03

                  Если это Dive into Python или основы JS, то очень даже неплохо все выйдет.


            1. iga2iga
              18.12.2018 16:15

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


    1. oisee
      17.12.2018 20:31

      Ну он не столько сложноватый, сколько ненужный, странный и неконсистентный.

      При всём богатстве выбора: от python/ruby, go, swift, rust, haskell/erlang, lisp/closure, (вставьте своё любимое), почему нужно предпочесть именно c++?
      Ни стандартного кроссплатформенного компилятора, ни пакетного менеджера, ни сколь-нибудь консистентного подхода.

      Если выбирать по критерию «близость к железу» — то лучше предпочесть С. (И более консистентный, но не менее ужасный для 2018года Objective-C.)

      C++ травмирует молодую психику также как и Basic.
      Будут потом думать, что C++ = OOP.


      1. Siemargl
        18.12.2018 03:43

        а для чего для олимпиадных задач нужно наличие?

        кроссплатформенного компилятора, ни пакетного менеджера, ни сколь-нибудь консистентного подхода


        1. oisee
          18.12.2018 10:32

          Чтобы иметь возможность готовиться к ним на любой платформе? Без «undefined behaviour».

          Встречный вопрос: какие такие возможности для решения именно олимпиадных задач даёт C++?
          Которых нет в других перечисленных более современных языках?
          (То, что средствами самого языка никак файл не открыть с входными данными? Или что i/o это тоже не часть языка? :)


          1. Siemargl
            18.12.2018 18:20

            ответа я не увидел. как связано UB и пакетный менеджер ???

            i/o для C/C++ является частью стандарта и реализации

            При всём богатстве выбора: от python/ruby, go, swift, rust, haskell/erlang, lisp/closure, (вставьте своё любимое), почему нужно предпочесть именно c++?
            кроме питона остальное — пока что экзотика или нишевое(свифт) в реальном мире. зачем учить экзотике или языку — однодневке?

            но не надо С++ первым языком — он не для обучения


      1. Siemargl
        18.12.2018 03:53

        С++ == OOP =)
        но учиться лучше на чем то попроще

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


        1. oisee
          18.12.2018 10:50

          Не, именно «=» ;)

          Да и дело тут не в «попроще», а в том, что есть не менее быстрые, универсальные и без архитектурно неконсистентного багажа языки. Зачем изучать гибрид удава с ежом и всю эту историческую подоплёку их взаимоотношений и различных противоположных подходов, если рядом есть уже готовый метр колючей проволоки? (Rust/Swift/Go)

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


      1. domix32
        18.12.2018 20:38

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


    1. MooNDeaR
      17.12.2018 23:53

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


    1. DrZlodberg
      18.12.2018 09:13

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


    1. UnknownUser
      18.12.2018 15:58

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


  1. mrlolthe1st
    17.12.2018 20:48
    -4

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


    1. PUNK778
      18.12.2018 16:13

      «Pascal в свою очередь прост и лаконичен.» Python, вот кто прост и лаконичен.

      fix: Фанаты С/С++/паскаля как фанаты всей техники апле — раз я этим пользуюсь это круто.
      <ирония> С/С++ я считаю вобще не языки, а компиляторы.</ирония>


  1. kaleman
    17.12.2018 20:49
    +10

    От статьи попахивает «ламерством» за километр. Особенно про сложности программирования после 30 лет. Я вот после 30 только вкатился и никаких проблем)
    Или что Паскаль и Бейсик травмируют психику. Эти языки идеологически близки к С#, области их применений совпадают, но почему то никто не говорит, что С# травмирует психику)


    1. oisee
      17.12.2018 21:08
      +1

      Ну смотря какой бейсик, если типа VB/VBA — с функциями и прочим — то он ничем не травмирует, а если суровый классический где из переходов только GOSUB/GOTO и из циклов только FOR — то это может быть слишком оторвано от современности.
      Уж лучше с ассемблера тогда начинать.


      1. MacIn
        17.12.2018 21:41
        +2

        Так такой уж нигде и не встретишь.
        Мой любимый диалект — MS Quick Basic (и то это конец 80х), там есть и разбиение на модули, и циклы с пред и постусловием и пр.

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


        1. bopoh13
          18.12.2018 18:09

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

          oisee из циклов в QB ещё есть: DO WHILE/UNTIL...LOOP, WHILE...WEND + выбор SELECT CASE.


      1. kaleman
        17.12.2018 21:46
        +1

        Я имею ввиду .NET версии этих языков. Все они есть в Visual Studio, и по-возможностям не слишком сильно отличаются друг от друга. Все таки сейчас конец 2018 года, а не 70-ые прошлого века.


        1. oisee
          18.12.2018 12:58

          У этих бейсиков от бейсика только название — они практически ничем не отличаются от того же Objective Pascal/Java/C#.

          Обвинения в адрес бейсика в «травмоопасности» относятся только к «настоящему» бейсику. (Который «Beginner's All-purpose Symbolic Instruction Code» с обязательными номерами строк.)

          И вот, скажем, расцвет клонов ZX Spectrum в России — это середина 90-х (может быть Москва/Питер — начало 90-х). Да, там в период расцвета скорее уже фигачили на ASM'е, но встроенный Sinclair Basic — именно что классический: номера строк и GOTO/GOSUB/RETURN. Это то, с чего начинали нынешние 35-40-летние IT. Травмоопасен ли он?

          И это прямо 90-е, а никак не 80-е или 70-е.

          (При том, что на самом же спектруме были расширения: LaserBasic/BetaBasic/MegaBasic с функциями и процедурами.)


          1. MacIn
            18.12.2018 19:21

            Обвинения в адрес бейсика в «травмоопасности» относятся только к «настоящему» бейсику. (Который «Beginner's All-purpose Symbolic Instruction Code» с обязательными номерами строк.)

            … которого живьем, «в природе» никто и не видел давно.
            Почему мы не берем при обсуждениях, скажем, первый стандарт С++, вместо современного состояния, а с Бейсиком производится именно это?


            1. oisee
              18.12.2018 20:41

              Это нужно спрашивать тех, кто эти обвинения выдвигает. Но новых давно не слышно. Всё по старинке повторяют Дейкстру (1975).


  1. Sergey6661313
    17.12.2018 21:08

    Расскажу те моменты которые были действительно важными в обучении меня любимого: (хотя я так ничему серьёзному и не научился, но на работе первым спрашивают именно меня, а не ребят из IT отдела...):
    -Материал из интерактивной обучающей справки встроенной в windows 3.11 по работе с мышкой (он лучший, да-да не смейтесь!). Потому что мышкой водить все умеют, но не понимают и даже не задумываются что они делают. Многие люди в возрасте давно пользующиеся компьютером не знают когда нужно использовать двойной клик, а когда правый (каждый раз получают результат только эксперементальным способом); почему при перемещении мыши в сторону курсор едет по диагонали ( мышку то не ровно держат). Короче базовей чем базовые знания — только умение работать с аппаратурой. Но почему то все это пускают на самотёк. Короче считаю это действительно важным моментом на котором необходимо акцентировать обучение, хотя к программированию это и не относится. Это тот момент когда так называемые «устаревшие» знания очень даже помогли бы но их не знают даже старики.
    -Книгу «dos для чайников». Потому что там лучше всего описана фаиловая система. Конкретно рассказано зачем именно нужны каталоги, откуда появилась маркировка в windows дисков (A, C, D, E) и что именно они делают. (заодно и с командной строкой знакомит и когда в учебнике по любому языку будет сказано скомпилировать выполнив команду в терминале ученик уже не растеряется). Лучше книги не найти.
    -правки скриптов для бота игры ultima online. Никакого понятия как писать код, но коротенькие скрипты обычно читаются очень легко даже не понимающему человеку. Давно заметил что людям очень легко даются задания в стиле попробовать найти переменную в коде и исправить чтобы добиться своего результата. Как минимум это привлекает к программированию. Без этого кажется что языки это китайская грамота. А после этого наоборот — кажется что ты это уже где-то видел.
    -учебник по Java (не помню имени хорошего автора, но помню что в книге помимо хорошего описания там был отличный пример с java web апплетами и рассказом о двойной буферизации… короче можно было сразу попробовать что-то как тогда казалось крутое) там отлично показывало что такое объектно ориентированное программирование. Сразу оговаривалось как работает память в компьютере. тем более что сейчас куча фреймворков написаны таким образом чтобы взаимодействие с ними осуществлялось по большей части как раз в обьектно-ориентированном стиле.). Я просто не находил подобного в других книгах, да чё уж там я и эту конкретно до сих пор сного найти не могу :))
    -Затем python где всё можно написать проще и быстрее. и сразу знакомство с PyQt, peewee и kivy без понятия того как этот самый python работает в принципе.
    Затем долгие попытки просто собраться сесть и изучить си и ассемблер. Даже не читая всё серьёзно — многократное возвращение к одному и тому же материалу из разных источников всё же сформировало внутреннее представление как именно это всё работает, и как люди до этого дошли…
    Когда на самом деле надо было тупо сидеть и штрудировать все известные человечеству алгоритмы. Но это не интересно…

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


    1. DrZlodberg
      18.12.2018 09:27

      Первый шаг с алгоритмами можно оставить и на самих учеников. Из личного опыта: у нас в школе пытались ввести информатику.
      Год первый: Был правильный преподаватель, который учил правильным и умным вещам. Но нихрена не понятным… Честно всё списал и в памяти не осталось ровным счётом ничего, кроме самого факта, что такое было.
      Год второй: Пришла дама, которая сказала «вот вам компьютер с васиком, вот десяток операторов, которые делают такие и такие вещи. Играйтесь». Месяца через полтора пытался написать игру на бумажке…
      Теория на пустом месте крайне плохо ложится в детские головы (сужу по своему классу). А вот когда уже есть опыт ковыряния — всё проще. Про более старших ничего не могу сказать, я тогда уже на асм перешел.


  1. IvanTamerlan
    17.12.2018 23:18
    +1

    Петр: Я считаю, что в любом языке надо сначала освоить базовые вещи, позволяющие писать простейшие программы (переменные, if, циклы, массивы, строки, вещественные числа). С ними уже можно решать практически любую олимпиадную задачу. Остальное — уже по мере надобности.

    И в университете, и в школе — это основы. Вне зависимости от языка. Правда, есть проблема, когда простые действия сложно выполнить средствами языка или это будет что-то нереальное. Например, редактирование двоичного файла — тут и на С/С++, и паскаль, и питон — можно применить. А вот тот же PHP уже как-то не в тему. Ближе к извращениям в контексте редактирования двоичных файлов — Lua и Brainfuck. Невозможные — HTML и CSS как и другие неполные по Тьюрингу

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

    Этот неловкий момент, когда даже про отступы не всем рассказывают. Или не всем понятно как табуляцией/пробелами пользоваться. Например — отступы есть, но имеют случайную длину. О чем это я, когда даже в Word встречаются абзацы, оформленные с помощью пробелов!

    — Можно ли начать обучение С++, минуя Pascal и Basic?
    Петр: Я бы рекомендовал заменить C++ на Python
    Сергей: Если для знакомства, то лучше все-таки подойдет Python.

    Тогда уже и С++ не нужен? И Python будет даже идеальным, т.к. изначально обучает правильно использовать отступы строк. У С/С++/паскаль и прочих с отступами проблемы, ведь эти языки не требуют отступы и особо отступы не контролируются.


    1. masai
      18.12.2018 01:02

      Невозможные — HTML и CSS как и другие неполные по Тьюрингу.

      Breaking news: HTML+CSS is Turing complete


  1. Groramar
    17.12.2018 23:51
    +2

    Странное утверждение в заголовке.


  1. RedCatX
    18.12.2018 02:29
    +4

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


    1. Siemargl
      18.12.2018 03:56

      нет ООП, в этом Оберон лучше

      а база одинаковая


      1. pavlushk0
        18.12.2018 10:51

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


        1. Siemargl
          18.12.2018 18:27

          средствами стандартного паскаля — нельзя


          1. geher
            18.12.2018 19:29

            Можно. ООП — это не про языковые конструкции, а про модель предметной области.


            1. Siemargl
              18.12.2018 19:52

              да, только с помощью наследования и инкапсуляции (полиморфизм еще можно сэмулировать). а их нет в стд.паскале


            1. ainoneko
              19.12.2018 13:43

              Это да. Я когда-то читал книгу про ООП на Фортране-77.


              1. BorlandDelphi
                19.12.2018 13:57

                А можно пример?


                1. ainoneko
                  19.12.2018 14:12

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


                  1. masai
                    19.12.2018 17:41

                    Может, учебник Кушниренко и Лебедева для мехмата? Только он «Программирование для математиков» назывался. Он в обложках разного цвета был. У меня тоже в красной, хотя в интернете везде тёмно-зеленая на картинках.


      1. RedCatX
        18.12.2018 13:15

        Даже в Borland Pascal 7 было ООП, а в более современном FreePascal и Delphi классы практически ничем не уступают С++ и Java.


        1. barbanel
          18.12.2018 16:38

          Более того, в последней версии среды разработки (Rad Studio 10.3) уже можно объявлять переменные прямо в цикле for.

          begin
            for var i: Integer := 1 to 10 do ...
            for var Item: TItemType in Collection do...
           
            for var i := 1 to 10 do ... 
            for var Item in Collection do ...
          end;


          1. Siemargl
            18.12.2018 18:31

            и какое отношение это имеет к теме обучения?


            1. barbanel
              18.12.2018 18:33

              Никакого.
              Это комментарий к комментарию уважаемого RedCatX, а не к статье.


              1. Siemargl
                18.12.2018 19:57

                Ааа, который не знает про оператор оверлодинг, РАИИ, метапрограммирование и приведение классовых типов средствами языка =)

                Хвалите друг друга, да.

                Впрочем, это оффтоп тут


          1. MaxVetrov
            18.12.2018 20:09

            А вне цикла можно? Между begin и end?


            1. Groramar
              19.12.2018 16:04

              да


      1. opencloser
        19.12.2018 12:31

        Pascal, python — мой текущий стек. Сложно представить любой белее менее большой проект без ООП, я честно не понимаю как можно писать стабильный и понятный код, что бы не стыдно было его показывать новым коллегам. Для меня Pascal удобнее C, хотя и на нем опыт достаточный был, выбрал осознанно.


    1. petuhov_k
      18.12.2018 08:52
      +1

      Ну а чем С# или, прости хоспаде, JavaScript хуже Pascal? То, что он пригоден для написания чего-то там, не означает, что он будет использоваться для этого. Почему бы не обучаться сразу на гораздо более востребованных языках? Для JS, вообще достаточно блокнота.

      Ничего не скажу об эффективности изучения C++ в школьном возрасте. Но все, с кем я учился в техникуме и университете, и кто не осилил указатели в C++, хотя у них и получалось что-то на паскале, программистами не стали.


      1. prishelec
        18.12.2018 10:10

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

        Все изучали сами. Чуть было понятных лекций по Delphi и Pascal. Зато книги по этим языкам у меня были отличные, что меня с головой и затянуло в программирование.

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

        По ассемблеру была препод женщина «живой процессор». Наши боялись как огня. Объясняла довольно тяжко и без заинтересованности (без энтузиазма).

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


      1. webkumo
        18.12.2018 10:30
        +2

        Нет, ну JS это уже реальная травма психики. После него и ООП и функциональщина будут даваться с трудом.


        1. oisee
          18.12.2018 13:07

          Ok, TypeScript!


          1. RedCatX
            18.12.2018 13:23
            -1

            И зачем? Грядёт wasm, и скоро можно будет писать фронтенд хоть на Паскале, хоть на Java — всё одно будет…


          1. domix32
            18.12.2018 20:49

            А для тайпскрипта одним блокнотом к сожалению не обойдешься


  1. Pilat
    18.12.2018 04:45

    Отталкиваться надо не от языка программирования а от решаемых задач.
    Пример — обработка текстов — оптимально Perl. Обработка больших объёмов бинарных данных — С/С++.

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


    1. KamAdm
      18.12.2018 08:56

      Пример — обработка текстов — оптимально Perl.

      Это вы про регулярные выражения?


      1. Pilat
        18.12.2018 09:40

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

        Например, слесарей учат работать напильником и учат на примере гаечного ключа (у меня этот ключ уже 30 лет лежит) На каких примерах учат программистов? Абстракции не всем интересны.


    1. DrZlodberg
      18.12.2018 09:32

      Вы жестоки. После Perl им потребуется помощь психолога, чтобы переключиться на что-нубудь типа C++. Особенно если привыкнут использовать специфические для перла конструкции с постусловием типа a=b+c if(z) и приколы с переменными/фекциями по умолчаниямю. Ну и регулярки тут уже помянули.

      Perl офигителен для ковыряния текстов, но для начала всё-таки стоит давать более универсальные навыки.


      1. oisee
        18.12.2018 13:09

        А зачем уже счастливому и всемогущему человеку переключаться с Perl? =)


        1. DrZlodberg
          18.12.2018 13:12

          Эмм… За новыми задачами? Далеко не всё на нём писать… удобно.


        1. myxo
          18.12.2018 13:40

          Чтобы счастливому и всемогущему человеку было что поесть?


          1. oisee
            18.12.2018 14:11

            1. myxo
              18.12.2018 15:08

              По вашим ссылкам.
              242 вакансии «perl»
              3 205 вакансий «c++»

              Но вообще поиск в hh по ключевому слову — не показатель.Там часто пишут что-нибудь типа «Знание как минимум одного из скриптовых языков: perl, bash, python.»


            1. domix32
              18.12.2018 20:54

              Надо было еще 1С привести и Дракон.


        1. domix32
          18.12.2018 20:52

          Есть еще и не всемогущие окружающие, которым придется это читать в попытках понять происходящее. А то и, упаси рандом, поддерживать это дело. Если вы конечно не lone wolf со своим стартапом


    1. Groramar
      19.12.2018 16:13

      Обработка больших объёмов бинарных данных — С/С++.
      Мы сейчас бинарные данные обрабатываем терабайтами на Delphi/Lazarus. Windows/Linux. Отлично работает.


      1. Pilat
        19.12.2018 16:26

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


        1. Groramar
          19.12.2018 16:47

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


  1. iig
    18.12.2018 09:21

    "Оно то, конечно, ничего, ежели б кабы то! Но так, как оно не токмо то, а прямо почём зря.."
    Где-то так. Учить можно чему угодно и как угодно, 200 лет назад в школьников палкой сколачивали латынь и богословие… Сейчас в тренде программирование.


  1. koropovskiy
    18.12.2018 10:20

    Боги желтых заголовков! Так вырвать слова из контекста. Этому место на Lenta.ru.

    «Можно ли начать обучение С++, минуя Pascal и Basic?»
    PS Конечно чтобы изучать C++ не надо сначала изучать Pascal или Basic.
    Но вот надо ли первым языком изучать С++? сильно сомневаюсь. Впрочем как и опрашиваемые преподаватели.


  1. kassadz
    18.12.2018 11:57

    У нас, в Воронежской области процентов 99 сидят на Pascalе, т.к. он входит в «рекомендованные» языки (это ответ на js, vba...), много разных методичек -для учителей/учеников, как ни говори, хорошая ide.
    Ну и главное, конечно без математики никуда. А, еще, а Вы программы (школьные) смотрели? Что и чему там учат? Я как то давно общался с одним товарищем, который принимал участие в написании стандарта по информатике для базового уровня (но не часть программирования), Когда, товарищ, увидел, что хотят в базовом и профильном уровне — сразу была названа фамилия другого товарища — это конкретный технарь, далёкий от школьного образования. Вот и получается, что программы (разделы) стандарта пишут люди далёкие от школы. По моему, лучше придерживаться старому принципу — «лучше меньше, да лучше», нежели чем жить как сейчас. Это в редких школах есть учителя информатики, которые адекватно воспринимаю новые технологии, в большинстве же случаев это не так.


  1. iga2iga
    18.12.2018 15:45

    Ох уж этот извечный спор, что для чего лучше… Могу судить только по себе, ибо вообще начинал с ассемблера z80. Если понимаешь как устроен компьютер изнутри, то с языками высокого уровня вообще проблем не возникает. Помню еще на том же спектруме был и c++ и pascal и балуясь с ними на досуге, написал классическое заполнение экрана #FF, сделал вывод, что по скорости кода pascal опережает местный c++ примерно раз в 5. Ну а тонны скобочек, звездочек и точек с запятыми, идиотски реализованная работа с указателями лишь подогрели мое неприятие плюсов как языка. Сейчас, конечно без проблем могу использовать и его, вопрос лишь в том, что он мне ни разу не пригодился, потому что абсолютно всё можно сделать красиво и сразу с интерфейсом в том же Delphi или Lazarus'е c FPC. Обработка гигабайт эквайринговых выгрузок сбера (текстовые данные) — 20 минут и удобное приложение готово, обработка гигабайт xml выгрузок по организациям, с преобразованием в эксель или бд — полчаса-час максимум (не забываем, что это уже с интерфейсом). Да мне проще работать даже с MS Office из Delphi (обработка таблиц или шаблонов Word), чем из родного VBA. Чем мне заменить для этого Lazarus или Delphi? Ну а учитывая ещё и появившуюся у них кроссплатформенность, вообще считаю бессмысленным заморачиваться на что-то другое… Ну кроме как если отсутствуют биндинги на нужные либы, написанные на плюсах. Ну и скорость компиляции и удобство IDE и отладки, знаете ли, далеко не на последнем месте находятся.


  1. sardaselo
    18.12.2018 16:37
    +2

    Достаточно глупое заявление, с тем, что Pascal и Basic не нужны. Как раз таки они нужны для того, чтобы человек, который впервые сел за программирование писал 90% всего сам. Благодаря этому в человеке взращивается умение понимать, когда нужно использовать один алгоритм, а когда совершенно другой. Например, тот же самый sort(), ведь в спортивном программировании, особенно на С++ это всего одна строчка, когда в паскале около 2-3 десятков. Да, по началу будет сложно, но как только человек «перерастёт» Pascal и сядет за C++ он поймёт, что обучение на Pascal было необходимым.


    1. iig
      18.12.2018 16:50

      Опсь. На плюсах за написание своей сортировки пузырьком как-то наказывают?


      1. sardaselo
        18.12.2018 17:36

        Большинство знакомых спортивных программистов использует sort(), ведь зачем тратить время на написание своей сортировки(того же пузырька)? В СП время очень много значит, как пример в ACM ICPC.


      1. IvanTamerlan
        18.12.2018 17:45

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

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


  1. alsii
    18.12.2018 18:16
    -1

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


  1. JTG
    18.12.2018 19:36

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

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


  1. Space__Elf
    18.12.2018 20:24

    Я бы рекомендовал заменить C++ на Python. Pascal и уже тем более Basic точно не нужны

    Обучение лучше начинать с языка со Строгой Типизацией.


    1. iig
      18.12.2018 20:41

      https://pikabu.ru/story/kak_prostrelit_sebe_nogu_boyan_dlya_programmistov_462373


      ЗАДАЧА: Прострелить себе ногу.
      C: Вы простреливаете себе ногу.
      Pascal: Компилятор не позволит вам прострелить себе ногу

      Так что как раз для учебных целей pascal вполне годен ;)


    1. JTG
      18.12.2018 21:10

      Вы, наверное, имели в виду статическую типизацию. Python — strongly typed, там вроде как строгая динамическая типизация.


      1. Error1024
        18.12.2018 21:49
        -1

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


        1. SadOcean
          19.12.2018 12:53
          +1

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


      1. iig
        19.12.2018 11:56
        +1

        Не только.
        Со строками, например, в pascal все очень просто. В C — достаточно сложно. В python… Необычно.


        1. BorlandDelphi
          19.12.2018 11:57

          А как в Питоне это выглядит и работает?


          1. iig
            19.12.2018 12:21

            В питоне строка — это обьект с кучей методов. Ок, ООП наше все и сразу, даже если мы не собирались прямо сейчас вникать в эту концепцию. Но метода length() у строки нет, есть функция, которая эту длину возвращает (в байтах или в символах? надо мануал читать). Ок, это исключение просто запомнить.
            python "из коробки" значительно мощнее чем pascal, но хитростей в нем очень много.


            1. masai
              19.12.2018 13:55

              Но метода length() у строки нет, есть функция, которая эту длину возвращает (в байтах или в символах? надо мануал читать). Ок, это исключение просто запомнить.

              Вы просто слишком опытный программист, раз ищете именно метод и сомневаетесь, в байтах или в символах. В Python всё гораздо проще.


              Не нужно использовать ООП для базового использования строк. Есть функция len, которая работает со всеми объектами, имеющими длину (строки, массивы, словари и т. д.). Как именно она работает (а она как раз и вызывает тот метод) – для новичка неважно. Это можно отложить до времени, когда будет изучено ООП. Мы же не изучаем алгоритмы сборки мусора в Java сразу после того, как познакомились с new.


              По поводу байтов или символов. Всё тоже очень просто. Строка (тип str) – последовательность символов. Значит и длина в символах. Как они внутри кодируются – это уже не наша проблема, и новичка особо волновать не должно. А если нужны байты или кодировка нас волнует, то есть тип bytes.


              В Python очень мало хитростей на самом деле.


              1. webkumo
                20.12.2018 01:15

                Мы же не изучаем алгоритмы сборки мусора в Java сразу после того, как познакомились с new.

                А вот познакомить с самым тупым алгоритмом в этот момент было бы неплохо (в конце концов — остальные STW-алгоритмы просто более хитрые, а не STW в проде вроде пока один и к нему раньше полноценного понимания JMM и STW алгоритом GC лучше не приближаться)… так же как и дать самую общую инфу по JMM.


                1. masai
                  20.12.2018 14:04

                  Было бы неплохо, согласен. Но про new нужно сказать уже на первом-втором занятии, так как без него никуда. И если вывалить на ученика/студента сразу все подробности, то они так и будут лежать мёртвым грузом, так как на следующих занятиях они использоваться не будут. Но сказать, конечно, что такое сборка мусора вообще, нужно.


                  Так и в Python. На первом занятии можно сказать, например, что len узнаёт длину отправляя запрос самим объектам. А когда дойдёт дело до ООП и __волшебных_методов__, уже можно будет рассказать про то, как именно этот запрос выполняется.


            1. BorlandDelphi
              19.12.2018 13:56

              В питоне строка — это обьект с кучей методов

              Круто!


            1. Groramar
              19.12.2018 16:40

              В питоне строка — это обьект с кучей методов
              К слову говоря, это не так уж плохо. И в новых паскалях уже давно к строкам написаны хелперы. И можно обращаться вот так: s.Length, s.ToInteger, s.Replace и т.п. И это удобно, на самом деле.
              Старые варианты, конечно, никуда не делись: Length(s), StrToInt(s), StringReplace(s, ...)


  1. Vitvitsky
    19.12.2018 07:55

    Мое мнение, как не_разработчика, Python гораздо интереснее и целесообразнее изучать в школе. Но опять же это безотносительно спортивного программирования, о котором я ничего не знаю.
    Математические задачи, графики, прикладные задачи математики в физике, химии, биологии можно легко комбинировать с Python и результаты демонстрировать в докладах, оформленных с помощью Jupyter или как вариант с помощью LaTeX.
    Для заинтересованных в разработке — уже подключать Qt.


  1. pkalinin
    19.12.2018 11:16

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

    Тут много дискуссий вызвал извечный вопрос про то, с какого языка начинать обучение программированию и, в частности, мой ответ, который еще и оказался вынесен в заголовок статьи. Давайте я более подробно раскрою свой ответ. (Отмечу, что за ответы Инессы и Сергея я не отвечаю и не во всем с ними согласен :) )

    Я рекомендую всем начинающим начинать обучение с питона. На нем вполне можно получить базовые навыки программирования (и, как я это писал в ответе на другой вопрос — это не типы, не ООП, а переменные, циклы, if'ы и т.д.; представление о типах данных вы, конечно, тоже получите, пусть и несколько неявное). И после этого вы не просто можете написать пару учебных программ, но вы владеете инструментом, который вам наверняка пригодится и в дальнейшем в жизни — в университете, в работе, если ваша работа хоть как-то, пусть косвенно, будет связана с программированием. Если вы будете профессионально заниматься программированием, то скорее всего вы изучите и другие языки, и все продвинутые концепции, но питон все равно всегда вам пригодится. А если вы не будете профессиональным программистом, но будете писать какие-нибудь небольшие скрипты, то питона вам будет более чем достаточно.

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

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

    Ruby, go, swift, rust, даже C# и Javascript — все-таки (как минимум, пока что) достаточно нишевые языки. Это, естественно, мое мнение, я могу и ошибаться, но кажется, что именно питон сейчас является такой «затычкой к каждой бочке», языком, который пригодится более-менее везде, особенно для людей, не ставших профессиональными программистами. А профессиональные выучат себе любой другой язык, когда он понадобится.

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

    (И да, отмечу, что я имею в виду именно чистый питон, а не Jupiter и т.д.)

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


    1. iig
      19.12.2018 11:37

      бейсик вам после школы почти наверняка нигде никогда не пригодятся

      Скрипты в MS Office на каком языке? ;)
      Если интересует карьера программиста — да, basic это узкая ниша.


      1. pkalinin
        19.12.2018 20:25

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

        Я же пишу — «почти» никогда. Да, конечно, и паскаль вам может теоретически пригодиться, но все-таки это весьма и весьма редко.


    1. BorlandDelphi
      19.12.2018 11:49
      +1

      Я рекомендую всем начинающим начинать обучение с питона

      А что с упомянутой выше типизацией и возможностью прострелить из-за этого ноги?


      1. domix32
        19.12.2018 19:09
        +1

        Можно подумать в Cи/Паскале это сложно сделать.


        1. Error1024
          20.12.2018 02:52

          В Паскале надо оочень постараться скомпилировать такой код.


          1. geher
            20.12.2018 10:04

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


            1. Error1024
              20.12.2018 13:14

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


      1. pkalinin
        19.12.2018 20:27

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

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


    1. Siemargl
      19.12.2018 12:33
      +1

      Паскаль (ок, и Оберон — раз я уж зацепил тему) имеет очень краткое описание и учебники.
      Плюсом имеем весьма учебную и продвинутую среду PascalABC

      Даже книга Гослинга по Яве — 250 страниц.

      А по Питону имеем книгу Лутца на 1280стр. Вчетверо толще учебника по информатике для старшеклассников — это, на мой взгляд, перебор.

      Может есть что покороче для школьников?
      Ну и рекомендуйте IDE для обучения


      1. paluke
        19.12.2018 12:59

        Для школьников про питон? pythontutor.ru


      1. pkalinin
        19.12.2018 20:29

        Зачем школьникам, начинающим изучать программирование, читать полноценные книги по языку? Им нужно-то небольшое подмножество языка, и для этого нужна не большая книга, а небольшая методичка. У меня на сайте (algoprog.ru, см. уровень 1) есть все нужные материалы, или вот ниже советуют pythontutor — на мой взгляд, там не очень понятно для школьников, но это мое личное мнение.


        1. Siemargl
          20.12.2018 12:25

          Возможно, этого и достаточно школьникам — но и только им.
          Когда то давно, я тоже так считал — что пролистать некоторую основу (методичку) и пару примеров и будет достаточно.

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

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


      1. pkalinin
        19.12.2018 21:24

        А IDE — я рекомендую WIng IDE 101, хотя это несколько спорный вопрос.


    1. Groramar
      19.12.2018 16:53

      Всё течет, всё меняется. Популярность языков меняется. Пока что Питон на взлете. Надолго ли? К слову, визуал Бейсик тоже на взлете. Рано Бейсик хороним :)


      1. pkalinin
        19.12.2018 20:30

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


  1. rrust
    19.12.2018 19:48

    на Питоне я писал, давно, теперь нет. Там удобно было быстро получить желаемые изменения и функционал.
    А сейчас Powershell. Потому что тоже самое, можно быстро отладиться и при этом таскать среду исполнения уже не нужно.
    Необходимые DLL можно прямо из себя же сгенерить через встроенный C#.
    И наоборот можно подключить к C# программе скрипты на Powershell с доступом к внутренним объектам.
    Но конечно C/C++ так и остается основным выбором, если программа в основном работает с WinAPI.


  1. customtema
    20.12.2018 13:18

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

    Из опыта.