От первых строк кода до профессионала: моя история

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


Глава 1. Зачем учиться программированию?

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

Когда я был подростком, не мог и представить, что программирование станет моей профессией. В моей семье все так или иначе были связаны с математикой: мама, тетя, брат. Мне с 10 лет уже говорили «Ты у нас пойдешь учиться на программиста». Но я не понимал «Что это?»; «Как это?»; «Почему Я???», веди в моей семье никто так и не стал работать в этой сфере. Тогда я думал: «Математики ‑это умные деды в очках в университетах, программисты ‑ что‑то про волосатых типов в очках».

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


Глава 2. Как начать обучение?

На протяжении многих лет я часто слышу такие вопросы: «Сложно ли стать программистом?», «Где этому можно научиться?», «А ты можешь меня научить?». Эти вопросы всегда вызывали у меня улыбку. ?

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

Но если вы настроены серьезно, вот несколько моих советов:

  1. Определитесь с направлением. Подумайте, что именно вы хотите разрабатывать. Возможностей масса: сайты, серверы, мобильные приложения и многое другое. Я рекомендую начать с универсальных языков, таких как Java, C# или Kotlin. Они позволяют изучать основы программирования через консольные приложения, а затем переходить к более специализированным задачам.

  2. Проведите исследование. Разберитесь, какой язык программирования подходит для создания того, что вам интересно. Например, если вы хотите делать мобильные приложения, изучите Kotlin или Swift; если сайты — JavaScript и HTML/CSS.

  3. Обратитесь за советом. Если у вас есть друзья‑программисты, попросите их объяснить в двух словах на примерах из жизни: «Что такое программирование?» Это поможет вам лучше понять суть профессии.

  4. Найдите учебные материалы. Ищите книги для начинающих, например, «Java для чайников»:). Установите бесплатное программное обеспечение для написания кода, такое как IntelliJ IDEA, Visual Studio Code или Eclipse. Читайте учебник и выполняйте практические задания, чтобы закрепить материал.

Если вы успешно справитесь с этими шагами и не сдадитесь, у вас есть все шансы продолжить обучение и со временем стать Junior Developer. Удачи на этом пути! ?


Глава 3. Мой первый опыт: программирование, но неосознанно

Мой первый шаг в программировании случился на уроках информатики в школе. Мы изучали язык Basic. Это был далекий от привычного нам интерфейса черный экран, куда нужно было вводить команды. Я понятия не имел, что происходит. Учитель проверял задания, одноклассники не понимали ничего.
Однажды к нам пришла новая ученица, и она сама что то делала, стучала по клавиатуре и получала оценку 5 — мы считали ее зубрилой и вообще странной :-)

Тогда я не осознавал, что эти странные строки кода  —  мой первый опыт программирования.


Глава 4. Новая школа  —  новые вызовы

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

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

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

Какова была моя реакция ? Я спросил у себя  —  И это все ?! Это так просто ?!
После этого урока мои оценки не опускались ниже 4-ки, да и 4-ка уже была фейлом.


Глава 5. Университет: расширение горизонтов

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

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

Тут хочу отметить — я никогда не был отличником, моей целью не было получать хорошие оценки (В 1-м семестре у меня было 3! двойки по математике). Я просто любил писать код и это было моим «драйвером».


Глава 6. Первая работа: сложный старт

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

Третья попытка была успешной. На тот момент я только что приобрел телефон HTC на Android OS. На тот момент это было нечто — телефоны с Touch дисплеями только начали появляться на рынке. Оффтоп — на него я заработал подрабатывая летом грузчиком:‑)

Я нашел вакансию Android-разработчика, выполнил тестовое задание и получил одобрение. Так началась моя карьера, которая длится уже 12 лет.


Заключение

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

Спасибо, что дочитали до конца! ?

Мой Telegram blog. Подпишись, если интересно!

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


  1. exTvr
    05.01.2025 21:22

    На протяжении многих лет я часто слышу такие вопросы как:

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


  1. JBFW
    05.01.2025 21:22

    Программирование нужно любить )

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


  1. anotes
    05.01.2025 21:22

    Опять про успешный успех?


  1. profFortran
    05.01.2025 21:22

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


    1. randomsimplenumber
      05.01.2025 21:22

      давайте теперь каждый напишет свою историю,

      А давайте лучше позовём chatgpt, у него этих историй как г@@на за баней, и все интересные /с


  1. nivorbud
    05.01.2025 21:22

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

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

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

    По хорошему, обучение надо начинать с азов.

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

    2) Как минимум на пять баллов освоить школьную информатику.

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

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

    5) Изучить (хотя бы отчасти) язык С/С++. Это нужно для понимания, как работать с памятью и прочими достаточно низкоуровневыми вещами, что даст понимание работы других высокоуровневых языков. Изучить алгоритмы.

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


    1. sshikov
      05.01.2025 21:22

      Для программиста не нужны полгода для "изучения питона", ему достаточно пары дней.

      Ну, преувеличиваете, но в целом с идеей согласен. Когда про себя пишут "X разработчик", сразу напрашивается вопрос - а что, на Y уже совсем никак-никак не можешь? Т.е. какая-то база у тебя вообще есть? Скажем, если ты веб приложения пишешь, то ты минимум в двух языках уже должен разбираться хотя бы на уровне чтения кода и способности вносить правки, не ломая ничего (хотя сегодня и на одном языке все пишут).

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

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


      1. nivorbud
        05.01.2025 21:22

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

        C/C++ нужен для понимания, что и как работает под капотом. Вообще хорошо бы еще и с ассемблером немного познакомиться, а лучше с машинными кодами.

        Небольшой пример. Дочка пыталась питон освоить. Я ей предложил написать функцию вычисления медианы. Она прислала мне код:

        def get_median_num(nums):
          sorted_nums = sotred(nums)
          mid = len(sorted_nums) // 2
          return (sorted_nums[mid] + sorted_nums[~mid]) / 2

        Спрашиваю, где взяла? Так как такой код "обычный" программист не напишет. Отвечает: "нагуглила", и что ей этот код показался самым простым.

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


        1. vadimr
          05.01.2025 21:22

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

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

          Автору этого алгоритма нужна теоретическая подготовка, а не язык C/C++.


          1. nivorbud
            05.01.2025 21:22

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

            Автору этого алгоритма нужна теоретическая подготовка, а не язык C/C++.

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

            ЗЫ

            Кстати, не исключаю, что автор этой функции фанатично стремился уложиться в ПЯТЬ строк кода :). Ему это удалось...


            1. vadimr
              05.01.2025 21:22

              Ну так-то и в одну бы мог:

              get_median_num = lambda nums : (lambda s, m : (s[m]+s[~m]/2)) (sorted(nums), len(nums//2)

              ;)


              1. nivorbud
                05.01.2025 21:22

                А в НОЛЬ строк кода слабо уложиться? :)

                Главное грамотно убедить заказчика, что ему эта ф-ция вообще не нужна :).


                1. sshikov
                  05.01.2025 21:22

                  Это высший пилотаж, но обычно так делают бизнес-аналитики :)


              1. JBFW
                05.01.2025 21:22

                И что делает волшебная функция lambda? А если такой в языке нет, напишете ее?

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


                1. vadimr
                  05.01.2025 21:22

                  Это ключевое слово языка Python. Просто тело безымянной функции.

                  Написать её невозможно, так как именно из неё всё в программировании и состоит, как из первичного кирпичика (ну и так как очень немногие языки позволяют писать специальные формы, к которым относится lambda, а не только функции). Другое дело, что не во всех языках она доступна пользователю.


        1. sshikov
          05.01.2025 21:22

          C/C++ нужен для понимания, что и как работает под капотом. 

          Вы все равно до конца этого не понимаете скорее всего. Потому что C++ сильно выше уровнем, чем железо. И это уже так было скажем в 70-х годах прошлого века, потому что микропрограммы уже были в S/360. А сейчас этих уровней только становится с каждым годом больше.

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

          А кто вам сказал, что они реально так хранятся (и это устроено точно так же, как вы это видели в C++), а это не фича питона?

          Ну т.е. еще раз - я совсем не против того, что хороший инженер должен знать, как оно там устроено внутри, просто в ряде случаев это самое "внутри" это например стековая виртуальная машина JVM, или еще что-то другое, что не имеет прямого отношения к системе команд (кстати, каких команд? вы же в курсе, что нынче засилье x86 закончилось, и в жизни уже куча скажем ARMов?).

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


          1. nivorbud
            05.01.2025 21:22

            Вы все равно до конца этого не понимаете скорее всего. Потому что C++ сильно выше уровнем, чем железо.

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

            А кто вам сказал, что они реально так хранятся (и это устроено точно так же, как вы это видели в C++), а это не фича питона?

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

            Ну т.е. еще раз - я совсем не против того, что хороший инженер должен знать, как оно там устроено внутри, просто в ряде случаев это самое "внутри" это например стековая виртуальная машина JVM, или еще что-то другое, что не имеет прямого отношения к системе команд (кстати, каких команд? вы же в курсе, что нынче засилье x86 закончилось, и в жизни уже куча скажем ARMов?).

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

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

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


            1. vadimr
              05.01.2025 21:22

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

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


    1. alex_k777
      05.01.2025 21:22

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