Bootcamps & Job search
Is It Realistic to Enter IT as a Programmer from Scratch?
Short answer: yes, but incredibly difficult.
I’ve met people who didn’t have university degrees, but managed to become software engineers on their own and successfully advanced in their careers. There were those who took year-long/year-and-a-half programming courses, or six-month coding bootcamps.
There were also those who actually focused mainly on self-learning, read many books, participated in projects and supplemented knowledge with short courses.
All these people, after 5-10 years of experience in the industry, became “first-class engineers” (yeah, some companies like to declare that they only hire such!). But here I’m writing my opinion, they really became very strong programmers, in many ways surpassing “standard” ones with degrees.
This doesn’t mean that college or courses are for losers!
No, here “survivorship bias” works. We see cool self-taught people who really succeeded, but they are few, compared to those who bought the book “Java for Beginners” and didn’t get past the first page, who took courses and didn’t do homework and dropped out, who completed courses but didn’t pass resume screening or failed the interview, etc. We don’t see them all! They simply “didn’t survive”. Only the most persistent, natural talents, and some lucky ones remained (where would we be without them?!).
For those who are starting from scratch — you need to do the following:
Coding
Learn technologies, 1-2 programming languages, master fundamental CS knowledge.
By “learn”, I mean not just watching videos or reading a book, that’s not enough, you must pass all knowledge through yourself by writing a lot of lines of code in the programming language of your choice. You must really code. Solve problems, there are platforms for practice.
If you want, you can estimate the minimum: say you need to solve 1000 programming problems. Each problem will require 10 lines of code. To solve a problem and write working code, check, learn the material, you need, say, 3 hours and another 50 lines of code (to experiment).
In total, you need 3 thousand hours of learning and 50 thousand lines of code. That’s already a year of learning, 10 hours a day!
Without 1000 solved problems, you will NOT pass most coding interviews. Even programmers with experience fail. You need practice, you need time and persistence.
On the Leetcode platform, 2700 problems are available (Easy: 700, Medium: 1500, Hard: 600). Programmers hang out there for months to prepare for interviews.
A newer platform (probably suitable for those starting from scratch): Codewars (there are 7 difficulty levels).
Programming languages
For beginners:
- Python — present almost everywhere: infrastructure/DevOps, testing/automation, backend, data engineering, ML/AI. Everywhere except front-end.
- Javascript — dominates in front-end, also present in backend.
In my opinion, Python’s design is better than JS. But if you really want front-end, then JS is essential. While solving problems, save your solutions on GitHub. A potential employer will review them and this will increase confidence that in the interview, you’ll solve something worthwhile. More chances you’ll be invited.
Projects
You also need projects, 2-3, so that there’s both front-end and backend, something in WEB with images, which means you need HTML, CSS, JS in minimal volume. But you also need to show that you can store data (“product store”, “clients”, “products”, etc.), which means you need databases: SQL, NoSQL. Also at least in minimal volume. But this is also needed. For SQL there’s Leetcode.
You need frameworks, this is a set of tools and technologies that help implement a project. Each programming language has its own frameworks.
You need to deploy this somewhere so it runs, and to show it, which means you need Cloud (one of: AWS, Google Cloud, Azure), containers (Docker), store code in GitHub and Git, build projects from code somehow, tests and documentation — mandatory.
Say one project: 2,000-5,000 lines of code, there you’ll have Python, JS, HTML, CSS, SQL, etc.
You need 2-3 such projects, a month or two of work on each.
ChatGPT can help you here, it can write some code for you, but integration, finishing, testing, etc. is on you.
Tech blog
Start one, for example, on GitHub. Start with simple posts: “today I learned list and tuple in Python, here’s how they differ”. Start with 5-10 lines. Write once or twice a week. In a year you’ll have cool posts and a cool tech blog (I guarantee!)
Courses or learn everything yourself?
Whatever is more convenient for you, maybe find yourself a mentor.
But this minimum (above) you’ll have to go through. You’ll have to write thousands of lines of code, read and learn a lot of material, create and format projects! You need to do all this!
If a mentor writes a project for you, or you “borrow” code somewhere, it will all come up in the interview. It will be a failure. Courses and mentors won’t replace your hard work. But can make this path a bit more straightforward and a bit more comfortable.
Getting into programming — is a difficult path, a lot of work and diligence. Think three times if you need this, but if you’ve decided, then persistence and good luck to you!
Coding Bootcamp: App Academy
Before starting the main courses, you can take preparatory 4-week courses, which come in two variants: online and live. If after preparatory courses the student doesn’t get into the main course (bootcamp), they promise to return the money. In the preparatory course, JavaScript basics are studied.
Intensive training courses
App Academy allows paying the full amount (lump sum) or deferring the main payment until the moment when the student finds a job with income $50,000+. Deferred payments require a deposit of $3,000, also keep in mind that this option is more expensive overall.
Three programs are offered (all online):
16 weeks
- Study: Ruby, JavaScript, HTML, SQL, Git, AWS
- Price: $17,000 (lump sum)
- In installments: $23,000-27,000.
24 weeks
- Study: Python, JavaScript, HTML, SQL, Git, Docker, Heroku
- Price: $20,000 (lump sum)
- In installments: $31,000.
48 weeks (part-time)
- Study: Python, JavaScript, HTML, SQL, Git, Docker, Heroku
- Price: $22,000 (lump sum)
- In installments: $39,000.
In all three courses, students study JavaScript, well that’s understandable, since it’s used for building the client part of applications (front-end). For server-side development (backend), the first course uses Ruby as the simplest platform, and the other two courses: JavaScript and Python.
Terms You Can Encounter in Job Descriptions
- Front-end (client-side development) — development of WEB page interfaces, involves using technologies: HTML, CSS, JavaScript, ReactJS
- Backend (server-side development) — development of the main program logic, storing user data, technologies: various programming languages, databases (DB), frameworks, libraries, clouds, virtualization.
- Full-stack (WEB development) — this is Front-end + Backend, a WEB application is developed, both interface and logic.
Front-end technologies:
- HTML — hypertext markup language. HTML — is the foundation of all WEB pages. WEB browser understands HTML and displays the page in the browser window according to HTML rules
- CSS — language for describing the appearance of WEB pages. CSS complements HTML, allows beautification.
- JavaScript (JS) — programming language that can be used both in backend and front-end. JS can be embedded in HTML, and this allows adding dynamics to WEB.
Front-end concepts:
- SPA (single-page applications) — single-page application. WEB application consists of one HTML page, which loads everything else through CSS and JS.
- AJAX (Asynchronous JS and XML) — approach to building interactive single-page WEB applications.
JS front-end technologies:
- ReactJS — is a library, a set of capabilities for developing single-page WEB applications in JS. JSX (JavaScript XML) — JS extension: allows embedding HTML in JS. Used in ReactJS.
- jQuery — lighter library than ReactJS.
- Angular — JS framework for developing WEB applications in JS/TypeScript.
- TypeScript — JS extension: adds the ability to specify types in JS. Used in Angular, and generally backend.
Backend technologies
Programming languages:
- Python, Ruby, JavaScript — with dynamic typing.
- Golang, Java, C# (.NET) — with static typing.
Platforms:
- Python: Django, Flask, FastAPI
- Ruby: Ruby on Rails
- JS: NodeJS (ExpressJS, Koa)
- C#: Asp .NET
- Java: Spring Boot
Databases:
- SQL — special language for managing data in relational databases.
- MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server — relational databases.
- NoSQL (Non-relational databases, Not Only SQL) — non-relational DBs. In NoSQL something similar to SQL can be used.
- Couchbase, MongoDB, Amazon DynamoDB, Cassandra, HBase, Aerospike, Bigtable, Amazon DynamoDB — NoSQL databases
- In-memory DB — such DBs place data in computer RAM, can save data to hard disk, but data integrity guarantees are less strict.
- SQLite, VoltDB — in-memory, relational DBs.
- Redis, Memcached — in-memory, non-relational DBs.
Special text formats:
- XML — for sending/receiving data, for defining data schemas.
- JSON — for storing and displaying data,
- YAML — more convenient for humans (reading, writing).
Infrastructure
Virtualization, containerization, Cloud:
- Virtual Machine (VM) — allows running one OS on another OS. For example, you can run a full Linux on a computer running Windows or MacOS.
- VMware, VirtualPC, VirtualBox — examples of such products that allow running VMs
- Docker — container, this is lightweight virtualization, where the guest machine uses the host OS. That is, you can run Linux on Linux, but not Windows on Linux.
- Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud — virtualization in the cloud.
Source Control, Build System, CI/CD:
- Git — version control system (allows code storage and team development, that is, code changes)
- Build System — system for building a product from source code, for example: Jenkins, GitLab, Bamboo
- CI/CD (Continuous Integration and Delivery) — software development method where checks and tests are run on incremental code changes.