6.1 Career Ladder
Programmers themselves are also graded based on their qualifications. Once upon a time, terms like "coder", "programmer", and "hacker" were used, but now everyone has switched to American IT terms.
For a developer, there are 6 main levels:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- Tech Lead
- Principal Software Engineer
From country to country, some parameters may differ, but the essence remains about the same:
Intern Software Engineer are trainees. They are in the process of learning programming, without commercial experience or experience in large projects. They typically work under the supervision of more experienced colleagues. Their main task at work is to learn the codebase and software development basics by performing simple coding tasks and participating in testing.
Junior Software Engineer are programmers without serious commercial experience or with less than a year of experience. They work under the guidance of more experienced developers, implementing parts of projects and participating in code review cycles. This stage of their career focuses on deepening technical skills and understanding project objectives.
Middle Software Engineer (or simply Software Engineer): they have more independence in making technical decisions, are responsible for significant parts of projects, begin mentoring less experienced colleagues and actively participate in architectural discussions. Usually have 2-5 years of practical experience.
Senior Software Engineer: responsible for designing and implementing complex systems, providing mentorship and leadership within the team, participating in strategic planning of projects, and often representing the team in communication with clients and other stakeholders. Typically have 5-10 years of experience.
Tech Lead: as a technical leader, responsible for the final technical result of the project, guiding development, solving the most complex tasks, ensuring technical standards are met, and coordinating developers' activities.
Principal Software Engineer: works at the highest technical level, often involved in shaping the company's technical strategy, developing innovative solutions and establishing technical standards, serving as the main mentor for technical leaders and a key expert in complex technical issues.
Large companies may have additional roles and sub-roles. For example, Google has roles like:
- Staff Software Engineer (L6): has significant influence over the technical policy of their department.
- Senior Staff Software Engineer (L7): works on large-scale and complex projects, determining the strategic direction of technological development in the company.
6.2 Lego Products
A long time ago (in 1975), Niklaus Wirth, creator of the Pascal language, wrote a book called "Algorithms + Data Structures = Programs". Much has changed since then.
A modern software product is not what it was 10 years ago, and certainly not what it was 20 years ago. And as for 1975, well, that was 50 years ago.
Modern programmers no longer write programs by hand. They rather assemble it from ready-made parts (libraries) and write code that helps these parts to interact.
Modern software products can consist of dozens or even hundreds of programs, some of which run on the user's computer, their mobile devices, and most of them run on servers in data centers.
Many of these programs, like a web server or database, are already written. They just need to be properly configured to work as required. Though over time the process of configuration can become so complex that it effectively turns into development. 🤦♂️
Programmers constantly fight with themselves. Instead of writing similar code in different programs again, they write libraries that can be configured to meet their needs and simply integrate them wherever needed.
Over the past 20 years, programmers have written a lot of libraries, frameworks, and open repositories. There are literally millions of them. And now writing all code from scratch is considered bad practice. Instead, you should assemble a program from solid and proven solutions—libraries, frameworks, packages, and modules.
But even this approach is becoming outdated. The trend over the last 10 years is moving to the cloud—large data centers that provide all that your programs need. Want a database? We have hundreds to choose from. Want a rare unique web server—we got you covered. Any whim for your money.
6.3 "I am an engineer" (c) Elon Musk
No longer need to write complicated and boring things. Now, if you need some cool complex functionality, there's always a library for that. You just need to: a) know it exists, b) find the right one (there can be dozens of varying quality), c) figure out how to integrate it into your project.
Work has only become more interesting with this approach. Now you can add new functionality to a product 10 times faster. 30 years ago, if you needed a web server, you had to write it. 20 years ago—buy it, install, and configure. And now—just go to a cloud admin panel and turn it on.
This is, by the way, one of the reasons for Frontend's popularity. A complex backend can now be written in JavaScript with Node.js or simply "turn on" various services in cloud data centers. Frontend has stopped being heavily reliant on backend limitations and has unleashed its full power. And judging by its popularity, it's doing its job well.
The profession of a Frontend developer has transformed into a Frontend Fullstack Software Engineer. A modern Frontend developer needs to understand how a database works to work with it competently. Understand HTML & JavaScript, NginX to set up frontend-backend interactions. And Docker is needed—that's just industry standard now.
Modern development is very different from what it was even 20 years ago. A modern programmer writes code no more than 50% of their time. The rest of the time, they're reading docs, learning new technologies, and attending meetings. Lone wolf programmers are a thing of the past.
GO TO FULL VERSION