Вы когда-нибудь видели лендинги курсов по программированию? Наверняка да, ведь времена «мидлов за полгода» и «джунов за три месяца» отгремели совсем недавно. Страницы многих успешных эдтех-компаний здесь похожи. За обещаниями золотых гор на золотых песках удаленки мы вглядываемся в светлые лица преподавателей, и после reasons to believe нас встречает… программа обучения. Двух-, а то и трехуровневая простыня со всеми важными темами. И чем их больше, тем лучше: ведь на другой чаше весов уже поджидает стоимость курса.

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

Немного о себе. Моя работа всегда была связана с текстами. В основном айтишными. Я много пишу с экспертами на разные темы, но никакими системными знаниями о языках программирования в итоге не оброс. До этого курса моим высшим достижением был фан-сайт группы «Кино», написанный на информатике с Dreamweaver. На фоне одноклассников с кодом в блокноте выглядело круто, но в голове осталось немного (спасибо, визивиг).

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

А теперь время дневниковых записей: как я провел январь.

Первые «умные слова»

В моем экспресс-курсе не обошлось без обзорной лекции о базовых вещах. Что такое компьютер, я более-менее представлял. Думал, что совсем заскучаю, но получил в свой словарь два новых термина: «компилируемый язык» и «интерпретируемый язык». Следом в зачет пошел одобрительный кивок друга-программиста — когда за пивом поведал ему новость о своем курсе и вывалил эту пару определений. И это мне еще про Python ни слова не сказали!

Среда разработки

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

Здесь и далее я буду отражать свои эмоции от обучения. Они адресованы в первую очередь тем, кто делает первые шаги в программировании, как я, или вообще сомневается в этой затее. Так вот: современные среды разработки — это восторг. PyCharm сам готовит все необходимое для работы, нужно только скачать Pycharm и установить его (по дефолту это бесплатно). Цветовое выделение кода срабатывает на лету; со временем я запомнил, как должны выглядеть те или иные слова, что я вбиваю, и неправильный цвет мгновенно напоминал мне об опечатке или другой проблеме. А еще PyCharm сразу сообщает об ошибках, причем делит их на фатальные (без которых не заработает) и нефатальные («лучше так не делать, могут быть проблемки»). Максимально дружелюбная среда для работы.

Переменные, числа и математика

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

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

Условные конструкции

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

Условные конструкции открыли и мой первый затык. Когда мы утверждаем, что нечто равно чему-то, нужно ставить “=”. Когда мы проверяем, что нечто равно чему-то, нужно ставить “==”. Двойное равно не входило в мой лексикон чуть ли не до финального проекта. А PyCharm не писал, что это ошибка. Много раз я шерстил вроде бы нормальный код вдоль и поперек, пока в голове не улеглось.

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

Списки и циклы

Если мы хотим перебрать что-то в диапазоне, например, от 1 до 5, мы пишем: for i in range(1, 6). Последнее число в диапазон НЕ включается, а первое включается. Ок, смирился. Можно обратиться к элементам диапазона с конца, используя отрицательные числа. Это удобно. Но при этом первый элемент списка — он для питона не первый, он нулевой, счет с нуля идет. Особенности нумерации — это первое, что меня удивило в языке. Вероятно, на более глубоких уровнях познания это имеет логическое обоснование. Привыкаю и смотрю дальше.

Ага, врубился
Ага, врубился

К этому моменту я уже привык, что в программировании все нужно объявлять и объяснять. Окей, я объявил, например, что ввожу с клавиатуры некоторый диапазон, в котором должен работать обработчик (обработчик?) for, вот этот самый range. Но как обозначить i так, чтобы обработчик понял, что нужно двигаться по диапазону? Да никак! Эта “i” выглядела для меня так, будто появляется из ниоткуда, но при этом подразумевала именно то, что мне нужно. В других примерах я увидел, что вместо “i” можно указать “_”, а потом узнал, что подойдет любой символ.

В этот момент я был как никогда близок к тому, чтобы все бросить. Спасибо, Stack Overflow, ты прекрасен! И спасибо другим ребятам, что проходили курс: в ответ на мое нытье они признались, что до циклов еще не дошли, порадовались моему прогрессу и вовремя приподняли мотивацию.

Функции и рекурсия

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

Рекурсия, как концепция, показалась очаровательной. Вдохновила на внеклассное чтение, провел весь вечер, залипая на фракталы :)

Структуры данных 

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

Классы

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

Модули

Классическое начало Fallout представляете? Вспомните момент, когда вылезаешь из убежища/пещеры в совершенно новый, открытый мир — где не знаешь, чего и ждать, так что ждешь всего и побольше. То же самое и с модулями Python. Целая вселенная возможностей оказалась на расстоянии строчки-двух импорта. Таким же когда-то мне представлялся мир модов на скайрим, но кайфа от побед в питоне я получил больше :)

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

Выход из убежища в Fallout 4
Выход из убежища в Fallout 4

Итоговый проект

Курс не включал гайдов по итоговому проекту, но я знал, что согласно плану создателей курса, я должен был сделать тренажер с флеш-картами для изучения иностранного языка. Это когда тебе дают определение слова, а ты должен написать, что это за слово. И так много-много раз в случайном порядке до полного запоминания. К тому моменту я закончил прекрасную игру Yakuza 0, богатую новыми для меня словами и фразами на английском. В итоге выписал штук 80 — база готова.

Tkinter я кое-как осваивал уже сам, по многочисленным гайдам в Сети. Предварительно отрисовал простенькую блок-схему с user journey. Помимо рандомного выбора определений поставил ограничение на 20 карточек за сессию и подсчет правильных ответов — с выдачей какого-нибудь игрового персонажа в зависимости от результата.

Думаю, вы представляете, как это примерно должно работать. У меня получилось где-то 80 строчек кода (не считая словарную базу). В них входило 10–15 модулей (графических элементов) Tkinter и три функции — проверка ответов с подсчетом результата, переход на следующий вопрос с подсчетом показанных карточек, создание финального сообщения на основе числа верных ответов.

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

К чему всё это?

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

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

Надеюсь, и в вашей работе всё еще находится место таким эмоциям. Успехов!

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


  1. nochkin
    00.00.0000 00:00
    +12

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

    Если в статье написано как есть на самом деле, то это достаточно неплохой успех. Осталось только найти дельное применение.

    P.S.: Tkinter -- это не python-way на мой взгляд. Так просто сложилось, что он больше привязан (шутка для тех, кто в теме) к Tcl/Tk, чем к идеям питона.


    1. vasgg
      00.00.0000 00:00
      +8

      Автор Tkinter — Гвидо ван Россум, куда уж более python-way


      1. nochkin
        00.00.0000 00:00
        +4

        Там дело в том, что это простой binding на библиотеку Tk GUI. То есть, интерфейс остался как если бы это был C код со всеми вытекающими. Для python-way надо добавлять ещё один слой абстракции, что бы не видеть этого ужаса внутри.


        1. domix32
          00.00.0000 00:00
          +1

          Думается мне, что использовать вместо стандартного tkinter какой-нибудь PyQt во-первых тоже не очень Python way, а во-вторых заметно сложнее, учитывая что автор новичок. Ну и собсна это та ситуация, когда имеет смысл предлагать альтернативы, которых вы так и не назвали.


          1. nochkin
            00.00.0000 00:00

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

            Я как раз для новичков советую брать не GUI (разве что если не надо GUI для какого-то реального проекта вот прямо сейчас), а что-то типа Web разработки или такого плана.

            К сожалению, для GUI я не знаю альтернатив. Но альтернативы для обучения предложил выше.


            1. domix32
              00.00.0000 00:00

              что там тоже тонкий слой связки с C библиотекой

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

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


              1. nochkin
                00.00.0000 00:00

                Если цель -- просто научится кодить, то можно и JS. Но если целью является освоение питона, то вариант с JS для новичка будет сомнителен.

                А так на том же питоне можно сделать много интересных Web проектов без использования JS.


                1. anonymous
                  00.00.0000 00:00

                  НЛО прилетело и опубликовало эту надпись здесь


                  1. nochkin
                    00.00.0000 00:00

                    У меня нигде не написано про фронт на питоне. Речь про обучение. Конечно, питон на серверной стороне. Откуда вдруг информация, что речь про питон на фронте?


                    1. magiavr
                      00.00.0000 00:00

                      Сегодня сложно представить мало-мальски сложный сайт, для которого понадобился бэк на питоне, без фронта с использованием JS и CSS.


                      1. nochkin
                        00.00.0000 00:00

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

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


                    1. domix32
                      00.00.0000 00:00

                      Ну, кстати можно и фронт :D


                      1. nochkin
                        00.00.0000 00:00

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


            1. truthseeker
              00.00.0000 00:00

              Обвязка над C++, не C. Да ещё и местами не стандартные даже для плюсов моменты там используются во фреймворке. Часть вещей в PyQt питонизировали. А некоторые моменты 1-в-1 как в Qt для C++. Давно щупал, подробностей уже не припомню, но в целом PyQt меньше похоже на Python way, чем Tkinter, ИМХО.


    1. klauss_z Автор
      00.00.0000 00:00

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


    1. ev_i
      00.00.0000 00:00
      +3

      Учить что-то ради того, что бы это выучить -- то ещё неблагодарное занятие. 

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


      1. nochkin
        00.00.0000 00:00
        +1

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

        Для фитнеса можно задачки по математике решать. Там можно найти этого "фитнеса" на любой уровень подготовки и потом уровень поднимать если есть желание.


  1. KirovA
    00.00.0000 00:00
    +10

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


    1. klauss_z Автор
      00.00.0000 00:00
      +2

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


    1. Chillingwilli
      00.00.0000 00:00

      Повезло, у меня полно примеров обратного.


  1. velipre_xella
    00.00.0000 00:00

    Хотел написать, что похоже на рекламу учебного курса и ИДЕ от ДЖетбрэйнз.


    1. klauss_z Автор
      00.00.0000 00:00

      Я бы тогда ссылку на курс с ютм-ками повесил :)

      Насчет ИДЕ Джетбрейнз — что дали на курсе, в том и разбирался.


      1. Chillingwilli
        00.00.0000 00:00

        А лучше варианты есть?


        1. gremlin244
          00.00.0000 00:00

          Мне что-то кажется, что для того чтобы писать всякие хеллоу ворлды на 20 строк, и чисто для себя ознакомиться с циклами, условными переходами и прочим базовым синтаксисом, огромный PyCharm это какой-то оверкил, хватит и notepad++ за глаза.


          1. iig
            00.00.0000 00:00
            +4

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


        1. niwir
          00.00.0000 00:00

          Смотря для чего. Для скриптов и программ Spyder. Для веб PyCharm лучший.


    1. Wrench_IT
      00.00.0000 00:00
      +9

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


      1. KayAltos
        00.00.0000 00:00
        +1

        Я еще на Visual Studio на питоне себя неплохо чувствую, пусть это, наверное, и извращение


        1. Chillingwilli
          00.00.0000 00:00

          Да, не моё точно


      1. hssergey
        00.00.0000 00:00

        Я долгое время пользовался Eclipse с питоновским плагином. Но потом как-то переполз на VS Code и понял, что и тут все вполне неплохо и юзабельно.


    1. Survtur
      00.00.0000 00:00
      +1

      Когда мы утверждаем, что нечто равно чему-то, нужно ставить “=”. Когда мы проверяем, что нечто равно чему-то, нужно ставить “==” [...] А PyCharm не писал, что это ошибка

      Не, это не реклама, а клевета. По крайней мере в условных конструкциях с if/while pycharm точно ругался бы на одинарное равно.
      А вот при создании булевых переменных, там да, может быть неоднозначно. Хотя наверняка задетектится ошибка неиспользуемой переменной.



      1. klauss_z Автор
        00.00.0000 00:00

        Да, проверил, и правда подчеркивает. Видимо, я просто долго забивал разбираться :(


    1. Tim_86
      00.00.0000 00:00

      Согласен, только второе не нуждается в рекламе, поэтому остаётся только первое. И, на мой взгляд, не просто "похоже".


  1. MAXH0
    00.00.0000 00:00
    +3

    Это нормально если Вы еще учитесь. Вот сейчас все педагоги страны страдают на "Коде будущего" обучая школьников программированию по похожей схеме (она действительно универсальна). Сложность итогового проекта, конечно, попроще, но в целом так же. 10 класс такой проект вполне тянет.

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


    1. klauss_z Автор
      00.00.0000 00:00

      Согласен насчет опасной иллюзии. Увы, "инфобизнесмены" усиленно ее поддерживают.

      Насчет цели — тоже верно, без конкретного проекта на финише мотивация совсем не та.


    1. AirLight
      00.00.0000 00:00

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


      1. Volderon
        00.00.0000 00:00

        Интересно, а как примерно выглядит путь до этой формошлепской работы? Какие минимальные знания требует работодатель от такого ремесленника?


        1. AirLight
          00.00.0000 00:00

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


      1. oratorslova
        00.00.0000 00:00

        Вы ещё скажите, что ВУЗы не нужны.


        1. AirLight
          00.00.0000 00:00

          Это лучше вы за меня еще что-нибудь скажите - у вас хорошо получается!


  1. Tzimie
    00.00.0000 00:00

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

    Но в 1984(?) году я писал программы на Фортране, и мама относила на ЕС ЭВМ пробивать на перфокартах. Я учился в 8 классе, но мне было очевидно, что такое переменная в цикле и даже что делать с рекурсией (в Фортране тогда были только статические переменные, надо было все переменные превращать в массивы со счётчиком уровней)

    Вопрос: в чем разница в голове? Возможно автор гуманитарий? Интересно узнать его жизненный путь ДО изучения Питона


    1. klauss_z Автор
      00.00.0000 00:00
      +3

      О, вы крутой!)

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


      1. heiheshang
        00.00.0000 00:00
        +1

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


        1. 12rbah
          00.00.0000 00:00
          +5

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

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


          1. heiheshang
            00.00.0000 00:00
            +1

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


          1. klauss_z Автор
            00.00.0000 00:00
            +1

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


            1. zaiats_2k
              00.00.0000 00:00
              +1

              В отличие? В человеческих тоже надо ой как много знать помимо грамматики, чтобы написать приличный роман или монографию.


              1. klauss_z Автор
                00.00.0000 00:00

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


                1. tyomitch
                  00.00.0000 00:00
                  +1

                  Ой ли?

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


                  1. klauss_z Автор
                    00.00.0000 00:00
                    +1

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


        1. holodoz
          00.00.0000 00:00
          +1

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


          1. heiheshang
            00.00.0000 00:00

            Все правила максимально формализованы, исключений и разночтений нет. В чем по вашему разница. Перевести с C++ на Lisp то же та еще задача. Как переводчик, человек професионально занимающейся языкознанием, какие проблемы у вас были при изучении компьютерных языков ?


            1. holodoz
              00.00.0000 00:00
              +5

              Например произношение в английском, насколько оно формализовано? Почем по этим строгим правилам гласные в read читаются как в слове lead, a в read как в слове lead?


              1. heiheshang
                00.00.0000 00:00

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


                1. klauss_z Автор
                  00.00.0000 00:00

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


      1. pOmelchenko
        00.00.0000 00:00
        +1

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

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


    1. dyadyaSerezha
      00.00.0000 00:00
      +1

      Но в 1984(?) году я писал программы на Фортране, и мама относила на ЕС ЭВМ...

      Сразу представил, как мама несет автора коммента к большим шкафам. Но дальше не срослось)


    1. vtal007
      00.00.0000 00:00
      +3

      в любом треде найдет чел, который с детского сада писал программы. И очень удивляется, почему не все так.
      У Вас в школе весь класс писал на фортране и на перфах относил мамам? или просто вот совпала, Мама-прогер и сын с теми же увлечениями?
      Я в 8-ок классе учился в 90-х. Никакого фортрана не было. Алгебра была, физика была. Информатики не было. В Вузе был у нас кусочек бейсика. В бейсике циклы пишутся вообще не так как в питоне (от слова "совсем"), поэтому мои умения писать "go to" вообще не пригодны для питона


      1. fpir
        00.00.0000 00:00

        Закончил школу в 1990, информатика была, писали на псевдоязыке,

        
        начало
         нц
          пока x<3
           y=y+1
          x=x-1
          кц
        конец

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

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

        Кстати, примерно так и сейчас пишу, потом перевожу на bash, python или JS, такой я переводчик, не думаю на пайтоне, а перевожу на него)

        Пысы, я не программист.


        1. vtal007
          00.00.0000 00:00

          Угу, на бейсике пишется иначе


        1. Chamie
          00.00.0000 00:00

          Кстати, примерно так и сейчас пишу, потом перевожу на bash, python или JS, такой я переводчик, не думаю на пайтоне, а перевожу на него)
          Да вы, батенька, компилятор из промежуточного языка! Почти как CLR/LLVM/etc.


  1. s_f1
    00.00.0000 00:00

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


    1. klauss_z Автор
      00.00.0000 00:00

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


    1. 12rbah
      00.00.0000 00:00
      +3

      Неужто за 15 лет забылось за ненадобностью?

      Честно говоря мне кажется что многое забывается через пару лет, если не используется в жизни, да если повторить, то вспомнить будет быстрее чем изучать с нуля, не знаю как у вас было, но если вспоминать школу, то после лета 90% людей на условной математике/информатике ничего не могли вспомнить и им нужно было 3-4 урока, чтобы снова вкатиться в это, а тут 15 лет прошло, почти любой человек забудет.


      1. s_f1
        00.00.0000 00:00
        -2

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


    1. zendynar
      00.00.0000 00:00
      +1

      Но ведь всё, описанное в статье, входит в школьную программу.

      Школа школе рознь, мы в 11 классе делали презентацию в PowerPoint на тему "как я провёл лето", обязательно с музыкой.


      1. klauss_z Автор
        00.00.0000 00:00

        О, знакомые методички -)


  1. ainur_fa
    00.00.0000 00:00
    +1

    "первый элемент списка — он для питона не первый" - так во всех языках программирования, это не прихоть именно python)

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


    1. klauss_z Автор
      00.00.0000 00:00

      Спасибо за рекомендацию, может, продолжу степиком.


    1. chersanya
      00.00.0000 00:00
      +9

      "первый элемент списка — он для питона не первый" - так во всех языках программирования, это не прихоть именно python)

      В некоторых языках принято с нуля, в некоторых с единицы - нет тут консенсуса.
      С нуля исторически в языках, которые ближе к железу. Ну, питон просто из С взял, насколько понимаю.
      С единицы чаще для языков, приоритет в которых на математическую/научную работу, типа Fortran, Julia, Mathematica, Matlab, R. Ещё популярный Lua туда же.


    1. ZyXI
      00.00.0000 00:00
      +10

      Не во всех. К примеру, в lua первый элемент имеет индекс 1. Насколько я понимаю, причина в том, что большинство массивов — это некоторая область памяти, в которой по порядку располагаются элементы. Если первый элемент имеет индекс 0, то он расположен по адресу (начало массива + 0 ∙ размер элемента). Если 1 — то по адресу (начало массива + (1 − 1) ∙ размер элемента). Т.е. на вычисление адреса элемента нужно потратить на одну инструкцию больше.


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


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


      1. PsihXMak
        00.00.0000 00:00

        Я помню, как паскаль взрывал мне мозг, т.к. массивы там нумеруются с нуля, а строки с единицы. Из-за этого постоянно путался.


        1. tyomitch
          00.00.0000 00:00
          +6

          Гнусная клевета на Паскаль: там обе границы массива задаются явно, хоть [-10..10], хоть ['a'..'z']


          1. PsihXMak
            00.00.0000 00:00

            Массивы да, но строковый тип string нумеруется с единицы. Если не верите, можете сами попробовать обратиться к нулевому элементу string[0].


            1. L0vkach
              00.00.0000 00:00
              +3

              Потому что в нулевом элементе хранится длина строки.


              1. iig
                00.00.0000 00:00

                Это в старых паскалевских строках. В 21 веке использовать, пожалуй, моветон.


                1. PsihXMak
                  00.00.0000 00:00

                  Почему? Delphi весьма не плох для своих задач.


                  1. iig
                    00.00.0000 00:00
                    +2

                    В Delphi вроде как завезли zero-terminated strings.

                    Паскалевские строки - они не только короткие, но ещё и 8-битные, с unicode может получиться неудобненько.


                    1. PsihXMak
                      00.00.0000 00:00

                      Возможно вы имеете в виду PChar. Но, весь строковый функционал получил string, в котором так же первый символ по прежнему начинается с единицы.


                      1. iig
                        00.00.0000 00:00

                        https://docwiki.embarcadero.com/RADStudio/Alexandria/en/String_Types_(Delphi)

                        Я про элемент с индексом 0 ;) (выше по треду)


      1. tyomitch
        00.00.0000 00:00

        Т.е. на вычисление адреса элемента нужно потратить на одну инструкцию больше.

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

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

        Если мы про Python, Java и т.п. языки, отказавшиеся от поддержки беззнаковых целых, то сравнения с нулём всё равно не избежать.

        В общем, для компьютера разницы нет никакой, разница есть только для людей.


        1. Roma_letchik
          00.00.0000 00:00

          А можно пример про сравнение корректности индекса? Сначала не понял, и потом каак не понял :(


          1. tyomitch
            00.00.0000 00:00

            Если массивы с 0, то отрицательные индексы некорректны


        1. ZyXI
          00.00.0000 00:00

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

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


          Если мы про Python, Java и т.п. языки, отказавшиеся от поддержки беззнаковых целых, то сравнения с нулём всё равно не избежать.

          В общем, для компьютера разницы нет никакой, разница есть только для людей.

          У Python есть отдельная семантика для отрицательных индексов. Конкретно для него был бы другой вопрос, если бы он начинал индексы с единицы: почему в нуле дырка (или что‐то ещё более неожиданное).
          У Java: нет, сравнение с нулём все ещё не нужно на большинстве машин, если вспомнить, как представляются знаковые целые в памяти.


          Для компьютера разница была пока улучшения в процессоре и оптимизирующих компиляторах её не убрали.


          1. tyomitch
            00.00.0000 00:00

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

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

            У Python есть отдельная семантика для отрицательных индексов. Конкретно для него был бы другой вопрос, если бы он начинал индексы с единицы: почему в нуле дырка (или что‐то ещё более неожиданное).

            Конкретно про него -- у людей, не травмированных Си -- возникает вопрос, почему элементы нумеруются то с нуля (в начале списка), то с единицы (в конце). Намного менее неожиданной для них была бы нумерация 1, 2, 3... с начала, -1, -2, -3... с конца, и IndexError в нуле.

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

            Я не понимаю, о чём вы.


            1. ZyXI
              00.00.0000 00:00
              +1

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

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


              Я не понимаю, о чём вы.

              Дополнительный код. Все отрицательные числа в нём больше, чем положительные, если вы сравниваете число, как если бы оно было беззнаковым. Многие современные компиляторы знают, что i32val >= len || i32val < 0 — это то же самое, что и (i32val as u32) >= len (при условии, что известно, что len >= 0). Вот, к примеру, результат компиляции на Rust:


              use core::hint::unreachable_unchecked;
              
              pub fn invalid_index(index: usize, len: usize) -> bool {
                  index >= len
              }
              
              pub unsafe fn invalid_index_i_unsafe(index: isize, len: isize) -> bool {
                  if len < 0 { unsafe { unreachable_unchecked() } }
                  index >= len || index < 0
              }
              
              pub fn invalid_index_i(index: isize, len: isize) -> bool {
                  index >= len || index < 0
              }

              playground::invalid_index:
                  cmpq    %rsi, %rdi
                  setae   %al
                  retq
              
              playground::invalid_index_i_unsafe:
                  cmpq    %rsi, %rdi
                  setae   %al
                  retq
              
              playground::invalid_index_i:
                  cmpq    %rsi, %rdi
                  setge   %cl
                  testq   %rdi, %rdi
                  sets    %al
                  orb %cl, %al
                  retq


            1. ainoneko
              00.00.0000 00:00

              Конкретно про него -- у людей, не травмированных Си -- возникает вопрос, почему элементы нумеруются то с нуля (в начале списка), то с единицы (в конце). Намного менее неожиданной для них была бы нумерация 1, 2, 3... с начала, -1, -2, -3... с конца, и IndexError в нуле.

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


              1. tyomitch
                00.00.0000 00:00

                Но после последнего всё равно IndexError, а не первый :-/


      1. force
        00.00.0000 00:00

        Тут не только оптимизации, но ещё и уменьшение количества ошибок и повышение читаемости.

        Например, если есть массив длинной n * m, то если мы считаем индексы с 1, то обратиться к элементу (i,k) уже становится весьма коряво (i - 1)*n + (k - 1) + 1, что быстро привёдет к оптимизации (i -1) * n + k, а вот эта -1 будет всех путать. Да, для этого есть многомерные массивы, для которых компилятор всё это под капотом сделает, но ситуации бывают разные, это просто пример.


        1. tyomitch
          00.00.0000 00:00

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


          1. ZyXI
            00.00.0000 00:00

            Многомерных массивов может «не быть»: я не говорю о том, что язык их не поддерживает (хотя иногда и такое бывает), а о том, что способ их реализации не подходит для вашей задачи. Из языков, которыми достаточно часто пользуюсь лично я, многомерные массивы вида «один большой кусок памяти плюс набор размеров массива» (один из наиболее производительных вариантов) со всеми размерами определяемыми во время исполнения без библиотек поддерживает только LabVIEW. (Со сторонними библиотеками — все, если не считать различные DSL.)


          1. force
            00.00.0000 00:00

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

            Да и в целом, эта единица будет лезть везде. Сколько операции будет при проходе по массиву с индекса 2 по 10? 10 - 2 + 1, а двух массивов одного с 2,10, другого с 3,7? 10-2 + 1 + 7 - 3 + 1. У нас уже Не единица, а двойка вылезла.

            А если мы делаем простой кольцевой буфер размера N, то вместо того, чтобы крутить индексы через i % N мы начнём городить извращения вида (i - 1) % N + 1


            1. tyomitch
              00.00.0000 00:00

              Сколько операции будет при проходе по массиву с индекса 2 по 10? 10 - 2 + 1, а двух массивов одного с 2,10, другого с 3,7? 10-2 + 1 + 7 - 3 + 1. У нас уже Не единица, а двойка вылезла.

              Уж это-то от базы никак не зависит


              1. force
                00.00.0000 00:00

                Оно зависит как раз терминологией. При индексации с нуля есть договорённость, что отрезки определяются как [..) - включение левого и исключение правого. Т.е. склейка объектов не приводит к дублированию индекса, который приходится вырезать этой единичкой. Также универсальнее получаются методы поддиапазонов, т.е. допустимо взять поддиапазон из 0 элементов. substring(5,5), при индексации с единицы, получится substring(5,4) - что совсем уж крипово.


                1. tyomitch
                  00.00.0000 00:00

                  Вы так говорите, как будто при индексации с 1 есть договорённость, что отрезки включают правую границу?

                  Но ведь нет никакой связи между базой и способом задания правой границы.


                  1. iig
                    00.00.0000 00:00

                    А тут нам пригодится теория чисел. Ряд [0,1,2,..n-1] - это система вычетов по модулю n. С такими обьектами можно делать привычные математические операции. Это удобно. А если убрать 0 - начинаются сложности. 2-2=? например. Нужно помнить, что иногда нужно +1, иногда -1, и не перепутать.

                    PS А если n - степень двойки, то это unsigned int ;)


    1. Tzimie
      00.00.0000 00:00
      +1

      Удаляю коммент, опередили)


    1. TonyEscobar
      00.00.0000 00:00

      Ну, чисто справедливости ради - в подавляющем большинстве. В некоторых все-таки с 1, а в особо интересных (как ST) - можно и свои старт/конец задавать (и по желанию нумерация будет идти сразу с 12, к примеру, или любого другого целого числа)


  1. Falcon_eye
    00.00.0000 00:00
    -2

    мемы орные)


  1. Dimit_001
    00.00.0000 00:00

    А подскажите, пожалуйста, где вы учились?

    Я уже год, как подбираю курсы и не могу найти((

    Или вообще нужно в какое-то высшее учебное заведение подаваться?

    Заранее спасибо ????????


    1. Vadiara50
      00.00.0000 00:00
      +1

      Не ТС, но я бы посоветовал Вам бесплатные курсы со Stepik, там достаточно хороший выбор для старта и понимания, какая область нравится


    1. klauss_z Автор
      00.00.0000 00:00

      Вы о профессии переводчика или о программировании? Если первое - учился в МГОУ (который "областной"), не советую повторять мой путь. Если второе - курс на платформе LearnHub размещен.


      1. Dimit_001
        00.00.0000 00:00

        Спасибо!


  1. Didimus
    00.00.0000 00:00

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


    1. klauss_z Автор
      00.00.0000 00:00
      +1

      Ghostwriter, он же литературный негр. Ничего государственного, чистый бизнес :)


      1. flass
        00.00.0000 00:00
        +1

        Остербайтер словом)


      1. Didimus
        00.00.0000 00:00

        Это какая-то очень неудачная калька


        1. klauss_z Автор
          00.00.0000 00:00
          +2

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


          1. Didimus
            00.00.0000 00:00

            В России слово негр означает того, кто работает. Это оскорбление нынче?


            1. klauss_z Автор
              00.00.0000 00:00
              +3

              Это жаргонное значение, не норма языка.

              В западных странах негр как nigger — это оскорбление, это тоже фактор не в пользу "литературного негра". На каких-нибудь международных переговорах скандалом может обернуться.

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


      1. vadim_bv
        00.00.0000 00:00

        а я подумал, писатель гостов или по гостам


  1. igrishaev
    00.00.0000 00:00
    +3

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

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


    1. Dimit_001
      00.00.0000 00:00
      +2

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


      1. igrishaev
        00.00.0000 00:00

        Ответил чуть ниже.


    1. iig
      00.00.0000 00:00
      +1

      потратить год

      За целый год можно достичь и чего-то более полезного чем выучить Паскаль ;)

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

      Понимание структур данных и алгоритмов с паскалем никак не связано. Разве что в некоторых учебниках алгоритмы описываются на паскале-подобном псевдоязыке ;)

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

      Ну, не учили решать бизнес-задачи - вот и не умеет. Тут надо ещё и в предметной области разбираться.


      1. igrishaev
        00.00.0000 00:00
        +5

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


        1. iig
          00.00.0000 00:00
          +3

          Ни один вайтишный питонист не знает толком, как устроен список или хеш-таблица

          А должен? Структуры данных и алгоритмы - это совершенно отдельный курс. И автоматически к знанию паскаля не прилагается ;)


          1. igrishaev
            00.00.0000 00:00

            Прилагается. Полистайте задачники по Паскалю.


            1. iig
              00.00.0000 00:00
              +4


          1. Didimus
            00.00.0000 00:00
            +1

            Книжка даже такая была. На Паскале


          1. kenoma
            00.00.0000 00:00

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


            1. iig
              00.00.0000 00:00

              незнание базовых структур типа словарей

              Это называется соломенное чучело ака подмена тезиса. Если кто-то, изучая python, прошел мимо встроенных типов данных - тут, наверное, не в python дело?


              1. kenoma
                00.00.0000 00:00
                +1

                Как написал igrishaev "обойти список словарей и составить словарь со списками", это что, требует по вашему отдельного алгоритмического курса?


                1. iig
                  00.00.0000 00:00
                  +1

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


    1. thenikita
      00.00.0000 00:00
      -3

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

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

      По поводу вайтишников - после года паскаля у вас будет ТОЛЬКО понимание структур данных и никому на одно место не упавшего паскаля и никто вас не наймёт, а того, кто эти полгода учил фронтэнд и реакт и ознакомился с базовыми понятиями информатики и алгоритмами уже работает как полгода и клепает формочки и продолжит активно учиться.

      "Но все хотят скорей окончить курс и получать 100.500 денег в минуту."

      Представляете? Да, люди хотят работать за хорошую зп, а не за копейки. А вы никогда не думали почему? Меня возмущают подобные комментарии потому, что люди их пищущие пытаются принизить людей которые хотят переучиться из других профессии во взрослом возрасте. Любой взрослый человек понимает, что у него нет 1 года, чтобы учить теорию в вакууме, надо получать навык и идти зарабатывать деньги и идут туда, где хорошо.

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


      1. igrishaev
        00.00.0000 00:00
        +1

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

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


        1. thenikita
          00.00.0000 00:00

          Результат для вайтишника - это работа в айти.

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

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

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

          Если есть время учите основательно, но паскаль я абсолютно никому не рекомендую - это пустая трата времени, за этот год использования питона или Js, вы уже поймете все глубины глубин этих языков и привыкните к синтаксису очень неслабо. И на JS есть курсы по алгоритмам и на Python. Кстати на питоне есть очень классный курс на ютубе от очень классного профессора(забыл как зовут, его борода звал к себе на интервью ещё), бесплатно!

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

          Короче, мне надоело, есть ещё миллион причин почему ваш подход очень плох для вайтишников.


          1. Nikita_Soin
            00.00.0000 00:00

            Курс Тимофея Хиртянова от ФПМИ, вместе с его практикой прибавляет несколько баллов iq)


            1. thenikita
              00.00.0000 00:00

              Да, спасибо, его и имел ввиду)


        1. iig
          00.00.0000 00:00

          Позволяет изучить суть программирования

          Это как?

          не отвлекаясь на IDE

          IDE здорово помогает. Лучше программировать в блокноте или на бумажке?

          установку пакетов

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

          утиную типизацию

          Венгерскую нотацию практиковали задолго до python, в Delphi :)

          магические методы

          Например?


  1. Frolman
    00.00.0000 00:00

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


  1. engine9
    00.00.0000 00:00
    +1

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


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


  1. vtal007
    00.00.0000 00:00
    +1

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


    1. tyomitch
      00.00.0000 00:00
      +2

      По сравнению с чем Python сложный?

      Со Scratch разве что?


      1. vtal007
        00.00.0000 00:00
        +1

        По сравнению с чем Python сложный?

        по сравнению с русским языком


        1. jetexe
          00.00.0000 00:00
          +8

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


          1. vtal007
            00.00.0000 00:00

            По сравнению с изучением родного русского языка


            1. klauss_z Автор
              00.00.0000 00:00
              +2

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


              1. vtal007
                00.00.0000 00:00
                -1

                Да я вообще не сравнивал. я просто написал, что Питон нифига не простой
                А чел начал спрашивать "в сравнении с чем"


            1. jetexe
              00.00.0000 00:00
              +3

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


              1. vtal007
                00.00.0000 00:00

                Да я вообще не сравнивал. я просто написал, что Питон нифига не простой
                А чел начал спрашивать "в сравнении с чем"
                Я не изучал русский 20 лет. Я его по сути знал уже к первому классу. Пусть не все слова, но разговорный (устный и письменный) был нормальный.
                Да и проблем в первом классе не было. Жи-Ши пишутся через И. а Жы-Шы черз Ы
                У дочки в 8-ом классе с питоном тоже проблем нет. Ток они и время тратят побольше меня на питон, и мозги помоложе, готовы впитывать абстрактную хрень (как-то циклы, инпуты, стринги и инт, делимости и тд и тп), поскольку в школе и без питона хватает всякой ерунды. Как Вам "Си" на основах Микропроцессорной техники? А предмет "основы делимости", нафига это воообще детям? что они с этим делать будут? что, все скопом поступают на мехмат МГУ и за 3 года заканчивают ? не знаю. Но вот такая у них "Матвертикаль". И "Мат" тут возможно не математика :)


                1. tyomitch
                  00.00.0000 00:00
                  +1

                  Может по сравнению с теми языками, которые он знал раньше, питон и простой. 

                  Да я вообще не сравнивал. <...> А чел начал спрашивать "в сравнении с чем"


                  1. vtal007
                    00.00.0000 00:00

                    "Может" - относится к тому челу, который говорил что питон простой
                    Я не сравнивал, потому что у меня нет опыта изучения какого-нить C или Java


                    1. nikweter
                      00.00.0000 00:00
                      +1

                      Так назовите язык программирования проще чем python.


                      1. klauss_z Автор
                        00.00.0000 00:00

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


      1. WASD1
        00.00.0000 00:00

        Я думаю, что python сложный язык, маскирующийся под простой, особенно при обучении.

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

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


  1. WASD1
    00.00.0000 00:00
    +2

    Когда мы утверждаем, что нечто равно чему-то, нужно ставить “=”. Когда мы проверяем, что нечто равно чему-то, нужно ставить “==”.

    С "=" мы не утверждаем, что нечто чему-то равно. Мы присваиваем объекту значение (создаём новый объект или присваиваем значение старому).

    "=" как утверждение это в Haskell (там оно так и называется equation - уравнение).


    1. klauss_z Автор
      00.00.0000 00:00

      Спасибо за уточнение, не обратил внимание на этот нюанс.


      1. WASD1
        00.00.0000 00:00
        +2

        # разницы в определениях нет
        (subverse1, subverse2) = "однажды в студёную", "зимнюю пору"
        
        # тут разница в определении видна, verse по-вашему должен кажды раз вычисляться
        # в реальности он вычисляется однажды и хранится в памяти
        verse = subverse1 + " " + subverse2

        Да заметьте вот минимальный пример.

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

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


        1. iig
          00.00.0000 00:00

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

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


          1. WASD1
            00.00.0000 00:00

            вы про "мутабельность" "иммутабельность" или про суть определения?

            ПС
            Если про первое - согласен, наверное лучше было бы привести пример со словарями (но тут не уверен понятен ли он).
            Если про второе - то что значит "утверждаем что равно"? Какой квантор ставить?


            1. iig
              00.00.0000 00:00

              Есть оператор присваивания

              Есть оператор сравнения

              Есть ещё моржовый оператор

              Как они работают - не секрет, просто не нужно их путать ;)

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


              1. WASD1
                00.00.0000 00:00

                К чему вы эти не относящиеся к делу слова написали.
                Вопрос: верно ли определение автора.
                Утверждение: не верно (более хороший пример c set внизу).

                Если всё ещё считаете, что верно - докажите.


                1. iig
                  00.00.0000 00:00

                  Я считаю, что ваш пример с set неверный ;) Я догадываюсь, что вы хотите показать , но программа всё равно выполняется сверху вниз. То, что вычислено создано в 1 строке (множесnво с именем sum) не должно вдруг поменяться. Это не С с его указателями ;)

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


                  1. WASD1
                    00.00.0000 00:00

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

                    Моя позиция:

                    1. В статье есть неверное утверждение как работает equals sign, вот оно: "Когда мы утверждаем, что нечто равно чему-то, нужно ставить “=” (equals sign)"

                    2. Я привожу пример с mutable data, когда видно, что утверждение плохое и неверное. Если читать определение буквально и дотошно, что в момент присваивания - в sum должно лежать AST: (|, a b), на самом деле в sum лежит результат вычислений.

                    3. Эту разницу между call-by-name \ call-by-value новички ещё не знают и узнают не скоро, но корректные определения надо давать с самого начала.

                    4. Правильно определение equals sign "Когда мы вычисляем значение и 'присваиваем его в переменную(*)' " *) правильно наверное передаём его в lvalue - или что там у python в этом месте не нашёл.

                    Теперь ваша позиция в явном виде и возражения к моей пожалуйста.


                    1. iig
                      00.00.0000 00:00

                      Когда мы утверждаем, что нечто равно чему-то, нужно ставить

                      В python нет такого понятия как утверждение. Поэтому нет особого смысла развивать или опровергать видение автора.

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


                      1. WASD1
                        00.00.0000 00:00

                        э... о чём мы вообще тогда спорим?

                        ПС
                        И к стати где прочитать определение понятия присваивания в python? Я беглым поиском по их документации не нашёл.
                        Нашёл 3.1.1.number (equal sign) и такие же обрывочные определения для других типов.



      1. WASD1
        00.00.0000 00:00

        Тут коллега хороший вопрос задал, обсуждение может быть долгим, но по факту вот этот пример лучше (лучше пример на изменяемых типах данных), чтобы прям видно было, что после "a |= {10}" равенство перестало выполняться.

        sum = a | b
        print(a, b, sum)
        print(id(a), id(b), id(sum))
        #вот вывод:
        #$ {1, 2} {3, 4} {1, 2, 3, 4}
        #$ 1005001 1005002 1005003
        #########################
        a |= {10}
        print(a, b, sum)
        print(id(a), id(b), id(sum))
        #вот новый вывод, заметьте, a изменилось, sum нет, т.е. "раверство" перестало выполняться
        #$ {1, 2, 10} {3, 4} {1, 2, 3, 4}
        #$ 1005001 1005002 1005003


  1. rg_software
    00.00.0000 00:00
    +1

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

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

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

    Сейчас же надо скачать интерпретатор/компилятор, убедиться, что версия правильная, что настроен тулчейн (редактор + компилятор хотя бы), что в учебнике не используются какие-то устаревшие конструкции, ну и дальше аккуратно идти по струночке от простого к сложному, чтобы не отклониться вбок и не провалиться в какие-нибудь лямбды или операции с Unicode. А это чертовски сложно, потому что даже какой-нибудь Pygame Zero постоянно заставляет лезть куда-то "под капот" или читать довольно фрагментарную документацию, а ещё с ней толком не работает intellisense. В общем, иногда создаётся впечатление, что самое разумное -- это забыть вот это всё, расчехлить какой-нибудь Турбо-Паскаль и учиться "как полагается".


    1. tyomitch
      00.00.0000 00:00

      Сейчас же надо скачать интерпретатор/компилятор, убедиться, что версия правильная, что настроен тулчейн (редактор + компилятор хотя бы)

      Во-первых, зачем редактор и компилятор? Работа с интерактивным REPL ничем не отличается от работы с синклером в каком-нибудь 1985 году (и intellisense одинаково нет ни там ни там)

      Во-вторых, даже качать ничего не надо, онлайн-сред сколько угодно, да хотя бы https://www.online-python.com/ (и intellisense там есть)


      1. rg_software
        00.00.0000 00:00
        +1

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


        1. iig
          00.00.0000 00:00

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



  1. Thedudeinasweater
    00.00.0000 00:00

    То что вы описади это 3 недели подготовки из полноценных 8-12 месячных курсов.

    Что дрлжно было произойти?

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


    1. klauss_z Автор
      00.00.0000 00:00

      Да ничего не должно было.

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


  1. HireHoffee
    00.00.0000 00:00
    +2

    Каждая решённая задача в программировании ощущается как победа надо боссом в Дарк Соулсе


  1. alartus
    00.00.0000 00:00

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