От первых строк кода до профессионала: моя история
Программирование — это не просто профессия, это образ жизни, требующий времени, упорства и желания учиться. Эта статья — рассказ о моем пути: как я стал программистом, через какие трудности прошел и что помогло мне дойти до успеха. Если вы только задумываетесь о программировании, здесь вы найдете ответы на вопросы: зачем учиться программированию, как начать и для кого это подходит.
Глава 1. Зачем учиться программированию?
Начнем с самого важного вопроса: зачем учиться программированию? Ответов здесь много, но основные из них звучат так: это престижная и высокооплачиваемая профессия, которая дает свободу. Вы можете работать удаленно, воплощать свои идеи в реальность, а также слышать от окружающих восхищенное: «Ого, ты программист!».
Когда я был подростком, не мог и представить, что программирование станет моей профессией. В моей семье все так или иначе были связаны с математикой: мама, тетя, брат. Мне с 10 лет уже говорили «Ты у нас пойдешь учиться на программиста». Но я не понимал «Что это?»; «Как это?»; «Почему Я???», веди в моей семье никто так и не стал работать в этой сфере. Тогда я думал: «Математики ‑это умные деды в очках в университетах, программисты ‑ что‑то про волосатых типов в очках».
Теперь, с позиции опыта, я могу сказать: программирование — это возможность. Это шанс создавать, зарабатывать, работать из любой точки мира и придумывать свои проекты. Ну и не менее важное — общаться с успешными людьми, и не только из мира IT.
Глава 2. Как начать обучение?
На протяжении многих лет я часто слышу такие вопросы: «Сложно ли стать программистом?», «Где этому можно научиться?», «А ты можешь меня научить?». Эти вопросы всегда вызывали у меня улыбку. ?
Программирование — это не та профессия, где вам один раз показали на практике или дали почитать методичку, после чего вы готовы к работе. Все намного сложнее. Это долгий процесс, требующий внимания к множеству деталей. Технологии постоянно развиваются, и чтобы оставаться востребованным, нужно регулярно учиться новому, быть в тренде и цениться на рынке труда.
Но если вы настроены серьезно, вот несколько моих советов:
Определитесь с направлением. Подумайте, что именно вы хотите разрабатывать. Возможностей масса: сайты, серверы, мобильные приложения и многое другое. Я рекомендую начать с универсальных языков, таких как Java, C# или Kotlin. Они позволяют изучать основы программирования через консольные приложения, а затем переходить к более специализированным задачам.
Проведите исследование. Разберитесь, какой язык программирования подходит для создания того, что вам интересно. Например, если вы хотите делать мобильные приложения, изучите Kotlin или Swift; если сайты — JavaScript и HTML/CSS.
Обратитесь за советом. Если у вас есть друзья‑программисты, попросите их объяснить в двух словах на примерах из жизни: «Что такое программирование?» Это поможет вам лучше понять суть профессии.
Найдите учебные материалы. Ищите книги для начинающих, например, «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)
JBFW
05.01.2025 21:22Программирование нужно любить )
И не какой-нибудь Bredlin или Cofe, а просто любить, чтобы когда у тебя в голове появляется дурацкая идея "а сделаю-ка я сайт новостей, котоый будет сам новости отовсюду собирать" (ну да, новостной агрегатор) - то берешь в руки клавиатуру, бутылку пива, и делаешь. Просто так, потому что интересно и захотелось.
profFortran
05.01.2025 21:22А давайте теперь каждый напишет свою историю, и из интересного технического ресурса, которым он когда-то был, Хабр превратится в свалку историй "как я сделал это". И так уже манагеры и корпорасты своими манагерскими и заказными корпоративными статьями всё засрали...
randomsimplenumber
05.01.2025 21:22давайте теперь каждый напишет свою историю,
А давайте лучше позовём chatgpt, у него этих историй как г@@на за баней, и все интересные /с
nivorbud
05.01.2025 21:22Имхо, всё перевернуто с ног на голову. Плюс путаница в терминологии. По сути сейчас везде предлагается обучиться не на программиста, а на пользователя/оператора той или иной программы, высокоуровневого языка программирования или фреймворка.
Это как предлагать научиться стать врачом. Причем сразу стать, без базовых знаний анатомии, химии и прочего. И сейчас, кстати, это уже технически возможно. Анализы крови по сотням показателей, операции (например, на глазах) и пр. производятся с помощью роботов, в полностью автоматическом режиме. А что касается интерпретации результатов..., то на этот счет существует куча регламентов, что тоже автоматизируется. Но оператор такой системы - врач ли?
С программированием аналогично. В большинстве рекламных роликов "как стать программистом за полгода" речь идет не о программистах, а по сути об операторах той или иной системы. Для программиста не нужны полгода для "изучения питона", ему достаточно пары дней.
По хорошему, обучение надо начинать с азов.
1) Хотя бы на удовлетворительном уровне (понимания сути) освоить школьные предметы. Программирование осуществляется не в вакууме, программируются реальные процессы, суть которых программисту полезно понимать или хотя бы надо иметь способность в них разобраться.
2) Как минимум на пять баллов освоить школьную информатику.
3) Изучить основы высшей математики. Не глубоко, но что означает интегрирование и дифференцирование надо понимать. А также понимать математические обозначения.
4) Расширить знания (хотя бы поверхностно) в сторону: электроники, схемотехники, архитектур вычислительных систем, принципов работы сетей и баз данных. Изучить (слегка) как работают процессоры (регистры, алу и пр.), как взаимодействуют с памятью.
5) Изучить (хотя бы отчасти) язык С/С++. Это нужно для понимания, как работать с памятью и прочими достаточно низкоуровневыми вещами, что даст понимание работы других высокоуровневых языков. Изучить алгоритмы.
Это минимум. После которого можно уже серьезно смотреть в сторону любых языков, фреймворков и прочего.
sshikov
05.01.2025 21:22Для программиста не нужны полгода для "изучения питона", ему достаточно пары дней.
Ну, преувеличиваете, но в целом с идеей согласен. Когда про себя пишут "X разработчик", сразу напрашивается вопрос - а что, на Y уже совсем никак-никак не можешь? Т.е. какая-то база у тебя вообще есть? Скажем, если ты веб приложения пишешь, то ты минимум в двух языках уже должен разбираться хотя бы на уровне чтения кода и способности вносить правки, не ломая ничего (хотя сегодня и на одном языке все пишут).
Ну и некоторые детали я бы все-же уточнил. Потому что на мой взгляд, во многих и многих применениях сегодня разработчику не нужно знание C/C++. И даже иногда вредно. Т.е. я бы скорее заменил это на специфические разделы математики типа теории категорий или лямбда исчисления - тоже чтобы понимать другие, более практически ориентированные языки, но с другой точки зрения.
То есть, ваш список - он валидный, просто не для всех специализаций (и да, специализацией я тоже не считаю знание лишь "питона"). Я бы назвал это теоретической базой.
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]" подразумевает весьма глубокие знания о том, как в компе в двоичном виде хранятся отрицательные числа - в виде дополнительного кода.
vadimr
05.01.2025 21:22Это горе от ума какое-то. Человек проделывает трюки с отрицательными индексами через дополнительный код (кстати, а ему кто-нибудь обещал, что отрицательные числа будут представляться именно дополнительным кодом?), но для вычисления медианы использует сортировку массива, что неэффективно и по времени, и по памяти.
Итого, предложенный код: неясен для чтения и модификации; использует неявное предположение об архитектуре машины (или интерпретатора), которое теоретически может и не оправдаться; неэффективен по времени; неэффективен по памяти. Бинго, как говорится.
Автору этого алгоритма нужна теоретическая подготовка, а не язык C/C++.
nivorbud
05.01.2025 21:22Итого, предложенный код: неясен для чтения и модификации; использует неявное предположение об архитектуре машины (или интерпретатора), которое теоретически может и не оправдаться; неэффективен по времени; неэффективен по памяти. Бинго, как говорится.
Автору этого алгоритма нужна теоретическая подготовка, а не язык C/C++.
Вот как раз для возможности делать подобные выводы и нужна база, нужно понимание, как там что работает под капотом. Только в этом случае можно судить, уместен в конкретной ситуации выпендрёж или неуместен (иногда это необходимость).
ЗЫ
Кстати, не исключаю, что автор этой функции фанатично стремился уложиться в ПЯТЬ строк кода :). Ему это удалось...
vadimr
05.01.2025 21:22Ну так-то и в одну бы мог:
get_median_num = lambda nums : (lambda s, m : (s[m]+s[~m]/2)) (sorted(nums), len(nums//2)
;)
JBFW
05.01.2025 21:22И что делает волшебная функция lambda? А если такой в языке нет, напишете ее?
Код с сортировкой хотя бы делает то что от него ожидают, особенно если без отрицательных индексов, которые могут и не работать в других языках.
vadimr
05.01.2025 21:22Это ключевое слово языка Python. Просто тело безымянной функции.
Написать её невозможно, так как именно из неё всё в программировании и состоит, как из первичного кирпичика (ну и так как очень немногие языки позволяют писать специальные формы, к которым относится lambda, а не только функции). Другое дело, что не во всех языках она доступна пользователю.
sshikov
05.01.2025 21:22C/C++ нужен для понимания, что и как работает под капотом.
Вы все равно до конца этого не понимаете скорее всего. Потому что C++ сильно выше уровнем, чем железо. И это уже так было скажем в 70-х годах прошлого века, потому что микропрограммы уже были в S/360. А сейчас этих уровней только становится с каждым годом больше.
А на самом деле, использование здесь этой штуки: "[~mid]" подразумевает весьма глубокие знания о том, как в компе в двоичном виде хранятся отрицательные числа - в виде дополнительного кода.
А кто вам сказал, что они реально так хранятся (и это устроено точно так же, как вы это видели в C++), а это не фича питона?
Ну т.е. еще раз - я совсем не против того, что хороший инженер должен знать, как оно там устроено внутри, просто в ряде случаев это самое "внутри" это например стековая виртуальная машина JVM, или еще что-то другое, что не имеет прямого отношения к системе команд (кстати, каких команд? вы же в курсе, что нынче засилье x86 закончилось, и в жизни уже куча скажем ARMов?).
Я скорее клоню к тому, что того что хотелось бы знать, становится слишком много для одного человека. И место C++ в вашей модели мира вполне может занимать какой-нибудь k8s, или там хадуп, как у меня, и от них до уровня железа и дополнительного кода - дохрена уровней, которые нельзя игнорировать.
nivorbud
05.01.2025 21:22Вы все равно до конца этого не понимаете скорее всего. Потому что C++ сильно выше уровнем, чем железо.
Ну, я не стал писать про ассемблер. В идеале надо ручками попробовать писать в машинных кодах. Но это в идеале. А Си - как компромисс: понять, что такое указатели, как работать с памятью, узнать, что такое компилируемый язык и т.д. Это всё же сильно отличается от Питона, где под капот спрятано практически всё, да еще обильно приправлено синтаксическим сахаром.
А кто вам сказал, что они реально так хранятся (и это устроено точно так же, как вы это видели в C++), а это не фича питона?
Думаю, они везде так хранятся. По крайней мере, в дополнительном коде хранились еще до языка С.
Ну т.е. еще раз - я совсем не против того, что хороший инженер должен знать, как оно там устроено внутри, просто в ряде случаев это самое "внутри" это например стековая виртуальная машина JVM, или еще что-то другое, что не имеет прямого отношения к системе команд (кстати, каких команд? вы же в курсе, что нынче засилье x86 закончилось, и в жизни уже куча скажем ARMов?).
По барабану. Поймите меня правильно. Я не предлагаю на глубоком уровне всё это изучать, я о том, что крайне желательно понимать суть и принципы. Знание принципов позволяет быстро разобраться в новой теме. С базовыми знаниями вы разберетесь. Без базовых знаний - тупик.
Я скорее клоню к тому, что того что хотелось бы знать, становится слишком много для одного человека. И место C++ в вашей модели мира вполне может занимать какой-нибудь k8s, или там хадуп, как у меня, и от них до уровня железа и дополнительного кода - дохрена уровней, которые нельзя игнорировать.
Как написал выше, достаточно понимания общих принципов и взаимосвязей. И вместо С/С++ конечно можно взять, что угодно другое, не надо мои слова воспринимать буквально, это я для примера привел.
vadimr
05.01.2025 21:22Думаю, они везде так хранятся. По крайней мере, в дополнительном коде хранились еще до языка С.
Отрицательные вещественные числа, например, хранятся в прямом коде. А были и такие машины, на которых целые числа рассматривались как частный случай вещественных, и, как следствие, отрицательные целые числа тоже хранились в прямом коде. И, насколько я понимаю, ничто в стандарте Питона не мешает использовать и там такое решение.
alex_k777
05.01.2025 21:22То есть покупаем школьный учебник по информатике, потом учебник по основам высшей математики, затем учебники по электронике, схемотехнике, архитектуре вычислительных систем, принципам работы сетей и баз данных? И все? Прочитав все это я уже могу называться программистом?) Конкретных авторов может посоветуете тогда?)
exTvr
Да когда ж вы уже, сцуко, закончитесь, а? Вы и ваши нейросетевые влажные истории, смысл которых заключается только в "А ещё вот моя телега, залазь - прокачу!".