Коротко: можно, но невероятно сложно.
Мне встречались ребята, которые не имели университетских дипломов, но смогли самостоятельно стали software engineers и успешно продвинулись в карьере. Были такие, кто брал годичные/полуторагодичные курсы по программированию, или шестимесячные coding bootcamps.
Были и такие, кто фактически делал основной упор на самообучении, читал много книг, учавствовал в проектах и добирал знания короткими курсами.
Все эти ребята, после опыта 5-10 лет в индустрии, становились "first-class engineers" (ага, так любят декларировать некоторые компании, что они нанимают только таких!). Но тут уж я пишу своё мнение, они действительно стали очень сильными программистами, во многом обогнав "стандартных" с дипломами.
Это не значит, что колледж или курсы — для лохов!
Нет, тут работает "ошибка выжившего". Мы видим крутых self-taught (самоучек), которые реально преуспели, но их единицы, в сравнении, с теми, кто купил книжку "Java for Beginners" и не продвинулся далее первой странички, кто брал курсы и не делал домашки и бросил, кто окончил курсы, но не прошёл resume screening или провалился на собеседовании и т.д. Мы их всех не видим! Они просто "не выжили". Остались только самые упертые, самородки, ну и там какие-то везунчики (куда ж без них?!).
Те кто прям с нуля — вам нужно сделать следующее:
Выучить технологии, 1-2 языка программирования, освоить фундаментальные знания по CS.
Под "выучить", я имею в виду, не просто посмотреть видосики или книжку почитать, этого мало, вы должны все знания пропустить через себя, написав кучу строк кода на programming language of your choice. Вы должны реально кодить. Решать задачи, есть платформы для тренировок.
Если хотите, можно оценить по минимуму: скажем вам нужно прорешать 1000 задач на программирование. Каждая задача потребует 10 строк кода. Чтобы решить задачу и написать работающий код, проверить, выучить материал, вам нужны, скажем 3 часа и ещё 50 строк кода (экспериментировать).
Итого, вам нужно 3 тыс. часов обучения и 50 тыс. строк кода. Это уже год обучения, по 10 часов в день!
Без 1000 решённых задач, вы НЕ пройдёте большинство coding interview. Даже программисты с опытом проваливаются. Нужна практика, нужно время и упорство.
На платформе Leetcode доступны 2700 задач (Easy: 700, Medium: 1500, Hard: 600). Программисты там зависают месяцами, чтобы подготовиться к собеседованию.
Более новая платформа (наверное подойдёт тем, кто вообще с нуля): Codewars (там 7 уровней сложности).
Для начинающих:
- Python — присутствует практически везде: инфраструктура/DevOps, тестирование/automation, backend, data engineering, ML/AI. Везде, кроме front-end.
- Javascript — доминирует во front-end, также есть и в backend.
Имхо, дизайн у Python лучше, чем у JS. Но если вам очень хочется front-end, то без JS никак. Пока решаете задачи, сохраняйте ваши решения в GitHub. Потенциальный работодатель ознакомится и это повысит уверенность, что на собеседовании, вы что-то путное решите. Больше шансов, что позовут.
Ещё вам нужны проекты, 2-3, так чтобы был и front-end и backend, что-то там в WEB с картинками, а значит нужен HTML, CSS, JS в минимальном объёме. Но также нужно показать, что умеете хранить данные ("магазин товаров", "клиенты", "продукты", и т.д.), значит нужны и базы данных: SQL, NoSQL. Тоже хоть в минимальном объёме. Но это тоже нужно. Для SQL есть Leetcode.
Нужны frameworks, это набор инструментов и технологий, которые помогают реализовывать проект. У каждого языка программирования, свои frameworks.
Нужно это где-то всё повесить, чтобы бежало, и что б показать, а значит нужен Cloud (один из: AWS, Google Cloud, Azure), контейнеры (Docker), код хранить в GitHub и Git, строить проекты из кода как-то, тесты и документация — обязательны.
Скажем один проект: 2,000-5,000 строк кода, там у вас будет Python, JS, HTML, CSS, SQL, и т.д.
Вам нужно 2-3 таких, над каждым месяц-два работы.
Тут вам может помочь ChatGPT, какой-то код он может вам написать, но за вами интеграция, допиливание, тестирование и т.д.
Заведите такой, например, в GitHub. Начинайте с простых постов: "сегодня выучил list и tuple в Python, вот как они отличаются". Начните с 5-10 строчек. Пишите раз-два в неделю. Через год у вас будут крутые посты и крутой tech blog (гарантирую!)
То что вам удобнее, может найдите себе ментора.
Но этот минимум (выше) вам придётся пройти. Вам придётся написать тысячи строк кода, прочитать и выучить кучу материала, создать и оформить проекты! Вам это всё нужно сделать!
Если ментор напишет за вас проект, или вы код где-то "позаимствуете", это всё всплывёт на собеседовании. Будет провал. Курсы и менторы не заменят вашей упорной работы. Но могут сделать этот путь чуть более прямолинейным и чуток более комфортным.
Попасть в программисты — это трудный путь, много работы и усердия. Думайте трижды, если вам это нужно, но если решились, то упорства вам и удачи!
Перед началом основных курсов, можно взять подготовительные 4-х недельные курсы, которые идут в двух вариантах: online и live. Если после подготовительных курсов студент не поступает на основной курс (bootcamp), они обещают вернуть деньги. На подготовительном курсе изучают основы JavaScript.
App Academy позволяет оплатить всю сумму (lump sum) или же отодвинуть основную оплату на момент, когда студент находит работу с доходом $50,000+. Отсроченные выплаты требуют депозита в $3,000, также нужно иметь в виду, что суммарно такой вариант выходит дороже.
Предлагаются три программы (все online):
16-недель
- Изучают: Ruby, JavaScript, HTML, SQL, Git, AWS
- Цена: $17,000 (lump sum)
- В рассрочку: $23,000-27,000.
24-недели
- Изучают: Python, JavaScript, HTML, SQL, Git, Docker, Heroku
- Цена: $20,000 (lump sum)
- В рассрочку: $31,000.
48-недель (part-time)
- Изучают: Python, JavaScript, HTML, SQL, Git, Docker, Heroku
- Цена: $22,000 (lump sum)
- В рассрочку: $39,000.
На всех трёх курсах студенты изучают JavaScript, ну это и понятно, ведь он используется для построения клиентской части аппликаций (front-end). Для разработки серверной части (backend), первый курс использует Ruby как самую простую платформу, а два других курса: JavaScript и Python.
- Front-end (client-side development) — разработка интерфейса WEB-страничек, предполагается использовать технологии: HTML, CSS, JavaScript, ReactJS
- Backend (server-side development) — разработка основной логики программы, сохранение данных о пользователе, технологии: различные ЯП, базы данных (ДБ), фреймфорки, библиотеки, облака, виртуализация.
- Full-stack (WEB development) — это Front-end + Backend, разрабатывается WEB приложение, как интерфейс, так и логика.
- HTML — язык гипертекстовой разметки. HTML — основа всех WEB страничек. WEB-браузер понимает HTML и отображает страничку в окошке браузера согласно правилам HTML
- CSS — язык описания внешнего вида WEB странички. CSS дополняет HTML, позволяет навести красоту.
- JavaScript (JS) — язык программирования, который может быть использован как в backend, так и в front-end. JS может быть встроен в HTML, и это позволяет добавить динамику в WEB.
Front-end концепции:
- SPA (single-page applications) — одностраничное приложение. WEB приложение состоит из одной HTML странички, которая подгружает всё остальное через CSS и JS.
- AJAX (Asynchronous JS and XML) — подход к построению интерактивных одностраничных WEB-приложений.
JS front-end технологии:
- ReactJS — это библиотека, набор возможностей для разработки одностраничных WEB приложений на JS. JSX (JavaScript XML) — расширение JS: позволяет встраивать HTML в JS. Используется в ReactJS.
- jQuery — более легковесная, чем ReactJS, библиотека.
- Angular — JS framework для разработки WEB приложений на JS/TypeScript.
- TypeScript — расширение JS: добавляет возможность указания типов в JS. Используется в Angular, и вообще backend.
Языки программирования:
- Python, Ruby, JavaScript — с динамической типизацией.
- Golang, Java, C# (.NET) — со статической типизацией.
Платформы:
- Python: Django, Flask, FastAPI
- Ruby: Ruby on Rails
- JS: NodeJS (ExpressJS, Koa)
- C#: Asp .NET
- Java: Spring Boot
Базы данных:
- SQL — специальный язык для управления данными в реляционных базах данных.
- MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server — реляционные базы данных.
- NoSQL (Non-relational databases, Not Only SQL) — не реляционные ДБ. В NoSQL может использоваться что-то похожее на SQL.
- Couchbase, MongoDB, Amazon DynamoDB, Cassandra, HBase, Aerospike, Bigtable, Amazon DynamoDB — NoSQL базы данных
- In-memory DB — такие БД размещают данные в оперативной памяти компьютеров, могут сохранять данные и на жесткий диск, но гарантии целостности данных менее жёсткие.
- SQLite, VoltDB — in-memory, реляционные БД.
- Redis, Memcached — in-memory, не реляционные БД.
Специальные текстовые форматы:
- XML — для пересылки/принятия данных, для определения схемы данных.
- JSON — для хранения и отображения данных,
- YAML — более удобен для человека (чтение, написание).
Виртуализация, контейнеризация, Cloud:
- Virtual Machine (VM) — позволяет запускать одну ОС на другой ОС. Например, можно запустить полноценный Linux на компьютере под управлением Windows или MacOS.
- VMware, VirtualPC, VirtualBox — примеры таких продуктов, которые позволяют запускать VM
- Docker — контейнер, это легковесная виртуализация, при которой гостевая машина использует ОС хозяина. То есть можно запустить Linux на Linux, но не Windows на Linux.
- Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud — виртуализация в облаке.
Source Control, Build System, CI/CD:
- Git — система контроля версий (позволяет хранение кода и командную разработку, то есть изменение кода)
- Build System — система для сборки продукта из исходного кода, например: Jenkins, GitLab, Bamboo
- CI/CD (Continuous Integration and Delivery) — метод разработки ПО, при котором запускаются проверки и тесты при инкрементальных изменениях кода.