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

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

    image
    «Опять двойка» — картина художника Фёдора Решетникова

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


    • Путь в серьёзное программирование долгий и сложный
    • Программирование требует полного погружения и требует «безбашенно ворваться»
    • Технологии и подходы меняются очень быстро
    • Алгоритмы и основы практически не меняются, а только дополняются
    • Освоить новую технологию, если вы уже специалист в какой то технологии, многократно проще
    • Кроме технических навыков, самоорганизации, поиска информации и прочие нетехнические навыки также важны, и они не меняются от смены технологии или языка

    Эти постулаты можно оспаривать и много обсуждать, но это не цель данной статьи.

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

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

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

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

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

    Про вузы похоже на школы: Диплом потом не нужен, вообще, совсем. Кроме момента эмиграции. Для получения рабочей визы в другой стране диплом очень поможет, но и это решаемо. В университет имеет смысл идти только за навыками. И это матанализ, линейная алгебра, дифференциальные уравнения, дискретная математика, теория вероятностей, матстатистика. Какие модные технологии сегодня есть в университете абсолютно не важно. Хорошо, когда вокруг университета бегают HR крупных компаний, всякие Яндекс, Intel, IBM, Касперский и другие. Туда вполне реально попасть, и они, как правило, содержат всякие лаборатории и спецкурсы, которые очень хороши.

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

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


    Идёте и гугл, яндекс или чем вы пользуетесь и забиваете там запрос: «бесплатные онлайн курсы программирования» и выбираете просто по описаниям 5 разных языков. Почитайте про разные, может что-то зацепит. Если что-то зацепило, всё выбор сделан, берите это.

    По каждому языку идёте в википедию и читаете про этот язык. Что-то не понравится, то выкидывайте. Останется 2-3 языка. Если что-то зацепило, всё выбор сделан, берите это.

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

    Поищите курсы про интересную вам специфику на разных языках.

    Пробуйте всё что нравится.

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

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

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

    Несколько очень частых вопросов


    Нужен ли английский?

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

    Нужна ли высшая математика?

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

    Нужна ли высшее образование?

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

    Нужно ли X?

    Чтобы начать прямо сейчас — нет. Точно не стоит откладывать по принципу «выучу, потом займусь программированием». Ну вы поняли :)

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

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

    И напоследок пара прикольных игр, которые я считаю полезными: lightbot.com и www.euclidea.xyz/ru
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 76

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

      Идёте и гугл, яндекс или чем вы пользуетесь и забиваете там запрос: «бесплатные онлайн курсы программирования» и выбираете просто по описаниям 5 разных языков. Почитайте про разные, может что-то зацепит. Если что-то зацепило, всё выбор сделан, берите это.


      Серьезно? Советовать начинающему, вообще без опыта, выбрать язык по впечатлениям из гугля или википедии? Или по описаниям курсов? Это же почти 100% гарантия ошибиться.
        0
        На первом языке никто никогда не будет программировать всегда. Вся статья о том что конкретный выбор не имеет значения.
          0
          Ну, нахвататься нехороших привычек можно легко. Избавиться потом от них сложно.

          >Вся статья о том что конкретный выбор не имеет значения.
          Вот я и сомневаюсь. Если вы выберете в качестве первого языка Хаскель, или скажем Lisp (любой из), у вас в итоге будет совсем другой набор базовых навыков, чем если вы выберете тот же javascript (и пойдете в сторону веба). Психологические барьеры зачастую очень сложно преодолеть, я не думаю, что все люди такие же, как вы или я, и им легко свой выбор в любой момент поменять, и взяться за другое направление.

          Выбор не имеет значения (почти) только если вы выбираете между очень похожими, и скажем так, обычными языками. Ну там, Java или C# — наверное все равно, переход на другой не будет так уж сложен (хотя экосистемы уже очень разные).

          Ну то есть, в целом наверное можно согласиться, что начать можно с чего угодно — но результат все-таки будет отличаться. Если меня спросить, то я бы пожалуй сказал, что стоит взять сразу два или даже три языка, возможно разных, и попробовать с ними поиграться. В мое время это были скажем Алгол-60, Фортран, PL/1, ассемблер S/360 (причем три из них де-факто процедурные, и похожие), а сейчас можно и что-то поинтереснее найти для начала.
            +1
            Главное — пробудить и развить интерес. Потом можно будет повторить первый этап и найти язык который кажется лучшим с учётом полученного опыта.
              +1
              Да, именно так.
                +3
                Я ничего не имею против интереса. Просто автор, если вы заметили, предлагает начинающему _самому_ выбрать язык. По интересу, да — как его описывают в интернете другие люди.

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

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

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

                        0
                        А как же PyCharm?
                          0

                          Это уже другое дело.

                          0
                          Моей IDE была тетрадка, карандаш, и книжка про ассемблер в трясущейся электричке. И это незадолго до выхода на диплом по совсем другому профилю :)
                            0

                            Ну, когда программа измеряется первыми сотнями строк — можно и так.

                              0
                              Первые программы длинней и не бывают :) Как-то слабо представляю сценарий уровня «бдыщь, хочу научиться программировать! и тут же фигакс, git clone git@github.com:freebsd/freebsd.git» :-)
                        0
                        С моей точки зрения для начала все языки подходящие, вообще слово подходящие сразу вызывает вопрос «подходящие для чего?»
                      +1

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

                        –1
                        Возможно у вас нет тех 40+ лет опыта, как у меня? Я таких людей видел и вижу постоянно, которым тяжело переучиваться. Они изучили что-то одно, и пытаются на этом тянуть годами и десятками лет. Если у вас не так — это же не значит, что всем это легко?
                          0
                          Такие люди есть, с этим ничего нельзя сделать. Но вот угадать нужную через 20 лет технологию сегодня вевозможно даже имея опыт, а мы говорим об обучении. Кому-то повезёт больше, кому-то меньше. Но тот кто начал делать добьётся больше чем самы везучий давитель дивана.
                            0
                            Насчет угадать — согласен. И насчет того что лучше начать хоть что-то, чем выбирать бесконечно — тоже. Собственно, чтобы не гадать (без опыта), можно было бы дать какие-то советы поконкретнее, скажем, описать некоторые группы языков, которые внутри более-менее похожи. Но я прекрасно понимаю в тоже время, что давать такие советы сложно.
                          0
                          Ну не совсем, мне крайне сложно было справиться с lisp, Forth и тот легче пошел.
                        +1
                        На первом языке никто никогда не будет программировать всегда

                        Первый мой язык был интеловский ассемблер, второй — C. Потом было до фига всяких. Прошло больше 20 лет, и сейчас я пишу на C и ассемблере (правда, уже не интеловском).
                          0
                          Вы будете долго смеяться но 5 или 6 моих первых языков я действительно никогда уже не использую, да их и вообще почти никто не использует
                            0
                            Таким количеством я и сейчас похвастаться не могу :) Третьим был BASIC. Вот на нём и была написана первая серьёзная программа (моделирование выхода с хроматографической колонки, да с гуем, мышкой и прочими свисто… это самое). 1994-96. Потом плюсы, (как же без PHP), Java, Perl… Да вроде и всё из серьёзного. В конечном итоге, вот прямо сейчас, пилю CRTL для ОС. Си, ассемблер, иногда Perl :)
                              0
                              Дела давно минувших дней, предания старины глубокой…
                              Лично у меня: машинные коды(в восьмиричной системе!) Урал-1, потом Алмир, фортран-4, ассемблер 8080, Бейсик в нескольких инкарнациях, Алгол-60, ассемблер Электроника-60, Паскаль, а вот дальше уже Lisp(это для AutoCAD), Forth(это для обработки измерений в реальном времени), Си и разные ассемблеры, Lua. Я пишу довольно редко и всегда для управления каким-либо железом, почти всегда в реальном времени, поэтому С++ никогда не пользуюсь, хотя знаю конечно, и вообще ООП с железом плохо дружит. Более высокие уровни я всегда сплавляю другим, сам смотрю только архитектуру и дизайн
                                0
                                Эх… На самом деле мой первый компьютер был СМ1800. 1984 примерно. Не зашло. Потом был бум ZX, вообще мимо.
                        0
                        Ошибиться в чем? Если о том, что будет ненужен — 99,9% будет не нужен, но ПОТОМ! а сейчас если понравился — хватай и смотри, потом разберешься и это гораздо лучше чем тебя будут водить за ручку и говорить «Сначала учи это, а потом это» — ну не интересно это! Потом разберусь что надо, а сейчас запустить свое «Hello world» да еще с ошибкой и исправить ее тут же! Вот где кайф, а матрицы я уж как нибудь и потом подсчитаю
                          0
                          >Ошибиться в чем?
                          В своем будущем. И потом не разберетесь, не надейтесь. Потеряете интерес, и уйдете в эффективные менеджеры. Хотите сказать, что такой сценарий невозможен?

                          >«Сначала учи это, а потом это» — ну не интересно это
                          Я совершенно согласен, что интерес (для начала) — это очень важно. Но обучение не может строиться на одном интересе, потому что ему свойственно пропадать. Иногда нужно усвоить некоторые фундаментальные вещи, возможно сложные для понимания. Или когда сразу не очень понятно, зачем они нужны.

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

                            Значит судьба такая.


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

                            Если интерес пропал — значит он не настоящий.

                              0
                              Так зачем это еще и стимулировать? При обучении стоит создавать его искусственно. В том числе — путем внесения разнообразия в языки.
                                0

                                Если интерес приходится создавать искусственно, то нужно ли учиться?

                                  0
                                  А можно простой вопрос — у вас дети есть? Они учатся в школе? И изучают там только те предметы, что им интересны? Хотел бы я на такое посмотреть.

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

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

                                      +1
                                      Человек хочет стать программистом по зову души или сугубо ради денег?

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

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

                                          0
                                          И почему это мне ничья помощь не потребовалась?

                                          Таких как вы, среди миллионов программистов, в пределах статистической погрешности. И половина из них тут на Хабре :)
                                            0

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


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

                                              +1
                                              Мне это странно. Если человеку не интересно программировать, то может ему не надо становиться программистом? Зачем себя насиловать?

                                              Потому что человеческое восприятие, оно не полярно. Да, бывают исключения, когда кто-то сам загорелся идеей, сам разобрался, сам довёл до конца. У меня, например, было точно так же, я вырос в семье горного мастера и химика, безнадёжно далекой от электроники в целом, и от вычислительной техники в частности. Но мне как-то случайно мама три с лишним десятка лет назад купила детскую книжку про кружок программирования на калькуляторах, я «загорелся», и отец, нифига не понимая собственно в этом деле, но видя мой интерес, подарил мне на день рождения МК-61.
                                              А все остальные вокруг меня пришли в программирование другим путём. Кто-то просто пошел в институт, потому что специальность была популярная, кто-то курсы закончил, у кого-то семья ИТшников. И они хорошие программисты, никто себя не насилует, но без человека, который их заинтересовал, будь-то родители, преподаватели и так далее, они не стали бы программистами. И даже я сам, не будь той книжки (или какой-то другой такой же), чёрта с два стал бы программистом.
                                        0
                                        >Человек хочет стать программистом по зову души или сугубо ради денег?
                                        Это вопрос сложный. У меня ребенок вообще не думает про деньги. Хотя пора бы уже думать, на что собирается жить уже совсем скоро. Если деньги при выборе не единственный стимул — то это не самый плохой вариант, мне кажется.
                                          0

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

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

                            Ну как «очень быстро»? Только в период интенсивного роста в каком-либо направлении. Например, недавно так росла веб-разработка, но пик уже пройден, сейчас идёт стабилизация. Во многих остальных сферах ИТ вы будете спокойно использовать технологии и подходы десятилетней давности ещё лет пять-десять. Поэтому эта «аксиома» — нифига не аксиома
                              0
                              Вот представье что человек учится в 7 классе школы и хочет программировать, очень много кто начинает в этом возрасте. До того как он пойдёт искать работу, это минимум второй курс, пройдёт 7 лет. Всё поменяется даже там где не меняется.
                                0
                                А самое главное, что интересного там делать в 7м классе?
                                  0
                                  Ну, это самый важный вопрос, если вообще говорить о 7 классе.
                                    0
                                    Как что? Игрульки какие-то спрайтовые.
                                      0

                                      Любые расчёты по интересующей его теме. Я, вот, в Бейсике на ДВК орбиты рассчитывал.

                                        0
                                        Ну да, Вы себе даже не представляете как интересно рассчитать дальность полета модели ракеты с пружинным стартом в зависимости от угла пуска, правда это был 6 класс
                                    +2
                                    Си.
                                    +6
                                    С посылом статьи в целом согласен. Я учился программировать на BASIC на спектруме во времена выхода пентиумов 3 и 4, то есть это было не актуально совсем. Ни разу на практике не пригодились те знания, но навык программирования от языка зависит мало, и он спокойно был перенесён сначала на Паскаль, C, а потом и C++.
                                    К списку полезного в вузе я бы добавил теоретическую информатику: алгоритмы, конечные автоматы, машина Тьюринга, методы оптимизации и всякие P = NP. Не то чтобы оно было нужно постоянно, детали все давно забыты, но знание о принципиальной возможности или невозможности решения задачи весьма полезны. Помогает не биться линий раз в стену невозможного и не сдаваться перед преодолимыми сложностями.
                                      0
                                      Вот тоже хочет написать об этом.
                                      Согласен с автором. Если начинать учение, то только с того, что нравится. Поменять язык/профиль/технологию потом будет не так уж сложно. А вот со сложностями справиться поможет только увлечение. Если его нет, то очень сложно будет. Возможно, но сложно.
                                      0
                                      Было бы полезно добавить обзор популярных языков. Статья выглядит так «Выбирайте область которая нравится и берите популярный там язык который нравится, все». Где же перечисление этих областей и языков в общих чертах?
                                        +1
                                        Я понял что не могу дать хорошего совета таким образом и сознательно не рекомендовали ничего конкретного. Посыл в том что конкретика менее важна чем продвижение.
                                          +3
                                          Я понял что не могу дать хорошего совета

                                          В этот момент надо было убрать руки с клавиатуры и не пытаться писать этот «гайд». Конец.
                                            +3
                                            Спасибо, именно такие советы я научился игнорировать давно и успешно. И в гайде написал что слать всех лесом и делать что нравится — хорошо.
                                          +1

                                          Перечисление есть во всех остальных статьях для новичков, а в этой ценный совет про получение удовольствия от процесса.

                                            +1
                                            Я скорее согласен с автором — хватай что нравиться а не то что полезнее. Язык это все таки другая сущность, например если нравиться физика, то совсем не обязательно понравиться С++
                                              0
                                              Язык это все таки другая сущность, например если нравиться физика, то совсем не обязательно понравиться С++


                                              А если у тебя всё настолько плохо с пунктуацией, и с «тся»-«ться», куда иттить?
                                                0
                                                А это важно? И, кстати, не с пунктуацией а с орфографией :-))
                                                  0
                                                  Важно. Если человек не владеет родным языком, как ему можно доверять во всех остальных?
                                                  не с пунктуацией

                                                  «скорее» нынче не вводное слово?
                                                    0
                                                    И, кстати, в моей фразе слово «скорее» не является вводным словом, попробуйте для ясности заменить его словом-синонимом «полностью»
                                            +2
                                            Пусть монетку бросит. Орел C# если решка то Java. Остальные языке далеки от этих двух. Почему именно они? Потому что 1) Можно сделать вообще что угодно. 2)Куча народу у кого что-то можно спросить. 3) Куча библиотек и гайдов. 4) Статическая типизация. Человек сразу научится с типами данных работать. Если к играм больше тянет то однозначно C#. Ну а С++ имхо слишком сложный и проблемный для первого ЯП. Все остальные либо динамические типизированные либо малопопулярные поэтому лучше эти два.
                                              0
                                              Просто начните с Паскаля, как и многие пацаны из 90-х, не зря же его преподавали практически везде где нужно было научить программированию. Бейсику тоже учили он здох совсем и на мой взгляд Паскаль все таки понятнее Бейсика. Вторым языком учите бессмертную классику — С или С++, т.к. большинство языков С-подобные и произошли именно от них. Ну а потом учите любые извраты. Если вы начнете с Пролога, то вы явно будете каким то не заурядным программистом и вам тоно не помогут никакие советы…
                                                –1
                                                Выбирать надо не язык программирования, а качественный учебник программирования — который будет учить не особым случаям и исключениям из правил в модном языке, а основам алгоритмики. Будет учить сравнивать эффективность и применимость разных алгоритмов для решения одной задачи… А язык будет тем, который используется в этом учебнике для объяснения алгоритмов.

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

                                                Потому, если говорить об императивных языках, для начального обучения нужен предельно простой язык с минимумом «магии» (например, this в ООП — это уже «магия») и максимально жёсткой статической типизацией. В первой редакции учебника Вирта использовался Pascal, во второй — более простой (и при этом более мощный) Modula-2, в актуальной — ещё более простой (и, опять же, более мощный) Oberon-07.
                                                  +1
                                                  Выбирать надо не язык программирования, а качественный учебник программирования — который будет учить не особым случаям и исключениям из правил в модном языке, а основам алгоритмики

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

                                                  Вот как раз перейти с С/Паскаля на что-то менее строгое (не знаю, можно ли термин «строгий» применить к С, конечно) намного проще, чем наоборот.
                                                    0
                                                    Боюсь, любой учебник с основами алгоритмики в качестве старта для программирования напрочь отобьёт желание программировать у кого угодно.
                                                    Если даже предельно простой Вирт может отбить желание, значит реального желания и не было.
                                                    Вот как раз перейти с С/Паскаля на что-то менее строгое (не знаю, можно ли термин «строгий» применить к С, конечно) намного проще, чем наоборот.
                                                    Паскаль (если это именно классический Pascal, а не PascalABC.Net) — отличный учебный язык. Но С таковым не является: практически любой ЯВУ со статической типизацией будет строже, чем C; плюс придётся учить те базовые вещи, которые в С отсутствуют: начиная с передачи по ссылке и представления о том, что массивы — полноценный тип данных, а не синтаксический сахар для адресной арифметики.
                                                      +2
                                                      Если даже предельно простой Вирт может отбить желание, значит реального желания и не было.

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

                                                      Давайте исходить из того, что реализаций классического Паскаля не существует. Паскаль, на котором человек будет учиться, это либо FreePascal/Delphi, с указателями и прочим добром, либо PascalABC.Net.
                                                      плюс придётся учить те базовые вещи, которые в С отсутствуют

                                                      О, это как раз намного проще. Я не считаю, что С — такой уж хороший язык для обучения, тот же Паскаль намного более подходит. Но изучив С, человеку очень легко изучать другие языки. Как раз за счёт того, что появляется полное понимание, как внутри работают более сложные типы.
                                                        0
                                                        Понимаете, желание программировать никогда не бывает желанием сортировать массивы или делать бинарный поиск.
                                                        Желание написать роман никогда не бывает желанием выучить правила грамматики русского языка. Но без знания этих правил любой текст превратится в нечитаемый набор букв.
                                                        Основы алгоритмики, это лишь одни из многих инструментов для достижения цели
                                                        Нет, основы алгоритмики — это те базовые знания программирования, без которых любой проект превратится в кучу кривых велосипедов.
                                                        реализаций классического Паскаля не существует
                                                        FreePascal/Delphi прекрасно понимают код, написанный на классическом Pascal. Тогда как на PascalABC.Net этот код вызовет кучу предупреждений. Но главное даже не этом, а в том, что в Pascal/FreePascal/Delphi присваивание — оператор, а в PascalABC.Net — операция (как и в C, кстати) и одно это разрушает принципы, на которых построены и классический, и объектный Pascal.
                                                        с указателями
                                                        В классическом Pascal указатели тоже есть, только там они всегда явные. Что намного лучше для обучения, чем «здесь играем, здесь не играем» Delphi.
                                                        изучив С, человеку очень легко изучать другие языки. Как раз за счёт того, что появляется полное понимание, как внутри работают более сложные типы.
                                                        Изучив C первым языком, человеку придётся долго и мучительно переучиваться писать качественный код на языках, в которых C'шного трюкачества нет. Что касается понимания работы сложных типов, то для этого куда полезнее вторым языком изучить основы ассемблера.
                                                          +1
                                                          Желание написать роман никогда не бывает желанием выучить правила грамматики русского языка. Но без знания этих правил любой текст превратится в нечитаемый набор букв

                                                          Сейчас, в 21 веке, несложно быть успешным программистом, не прочитав ни единой книги по алгоритмике. Хорошо это или плохо, вопрос отдельный. Но несложно, это факт. Есть какие-то исключения, области, где алгоритмика до сих пор нужна, но это именно исключения. В 99% случаев вам, чтобы софт нормально работал, надо просто знать «кирпичики» библиотек, которые есть на вашей платформе. И метод sort() будет для вас прекрасно сортировать, даже если вы понятия не имеете про алгоритмы сортировки.
                                                          Изучив C первым языком, человеку придётся долго и мучительно переучиваться писать качественный код на языках, в которых C'шного трюкачества нет.

                                                          Наоборот, если человек приучен писать качественный код на С, он везде будет писать качественный код. А если не приучен, то совсем не важно, на каком языке он пишет :)
                                                            –1
                                                            Сейчас, в 21 веке, несложно быть успешным программистом, не прочитав ни единой книги по алгоритмике.
                                                            Можно быть успешным кодером, умеющим собирать из готовых библиотек код, решающий шаблонные задачи. Только вот к программированию это никакого отношения не имеет.
                                                            И метод sort() будет для вас прекрасно сортировать, даже если вы понятия не имеете про алгоритмы сортировки.
                                                            Только до тех пор, пока решаемые задачи позволяют более-менее эффективно использовать встроенную сортировку. Как только попадётся что-то нетривиальное, выбивающееся из «средней температуры по больнице», под которую делаются стандартные библиотеки, о встроенном методе sort придётся забыть.

                                                            Впрочем, сортировки надо изучать не для того, чтобы каждый раз писать свой велосипед, а для того, чтобы на их примере учится понимать применимость алгоритмов для разных входных данных, учиться оценивать эффективность собственного кода.
                                                            если человек приучен писать качественный код на С, он везде будет писать качественный код
                                                            Проблема только в том, что научиться писать качественный код на C, как первом языке, многократно сложнее, чем на Pascal или на Go. Качество кода — это прежде всего дисциплина кодера. И чем больше вольностей позволяет первый язык, тем сложнее привить эту дисциплину. А в плане бесконтрольности и вседозволенности хуже С только ассемблеры и модные языки с динамической типизацией.
                                                              +1
                                                              И чем больше вольностей позволяет первый язык, тем сложнее привить эту дисциплину.

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

                                                                0
                                                                Дело не в размере кода. Классическая конструкция
                                                                while (*b++ = *a++);
                                                                содержит три!!! побочных эффекта в одном простейшем выражении. Так не получится написать ни в Pascal, ни в Go. Но в C это абсолютно нормальная и даже поощряемая практика.

                                                                Язык, в котором можно написать
                                                                a ^= b ^= a ^= b;
                                                                , провоцирует учащегося писать именно так. А там, где более «строгие» языки выдадут сообщение об ошибке, в C будет никак не отображаемое UB — при котором ошибочный код может выдать правильный результат: учащийся даже не поймёт, что совершил ошибку.
                                                                  0

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

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

                                                                Разделение на «кодеры» и «программисты» — штука совершенно надуманная. Причём надуманная, как правило, чуваками, которые хотят выделить свою значимость и профессионализм в сравнении с кем-то, пишущим нечто более примитивное. На самом деле все они программисты, и те, кто тензорные вычисления для задач ИИ сочиняет, и те, кто формы для главбуха Марьи Ивановны шлёпает.
                                                                Как только попадётся что-то нетривиальное, выбивающееся из «средней температуры по больнице», под которую делаются стандартные библиотеки, о встроенном методе sort придётся забыть.

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

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

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

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

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

                                                      Самое читаемое