6.1 Career Ladder
Programmers also have rankings depending on their skills. Once upon a time, terms like "coder," "programmer," and "hacker" were used, but now everything has shifted to English names from American IT.
For a developer, there are 6 main levels:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- TechLead
- Principal Software Engineer
From country to country and even from company to company, some parameters may vary, but the essence is:
Intern Software Engineer — these are interns. They are in the process of learning programming, have no commercial experience, nor experience in participating in large projects. They usually work under the supervision of more experienced colleagues. Their main task at work is to study the codebase and the basics of software development by doing simple coding tasks and participating in testing.
Junior Software Engineer — they are programmers, but 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 career stage is focused on deepening technical skills and understanding project tasks.
Middle Software Engineer (or just Software Engineer): they have more independence in making technical decisions, are responsible for significant parts of a project, begin mentoring less experienced colleagues, and more actively participate in architectural discussions. Usually have 2–5 years of practical experience.
Senior Software Engineer: they are responsible for designing and implementing complex systems, providing mentorship and leadership within the team, participating in strategic project planning, and often representing the team in interactions with clients and other stakeholders. Usually have 5–10 years of experience.
TechLead: they are accountable for the final technical outcome of a project, lead development, solve the most complex problems, ensure compliance with technical standards, and coordinate the activities of developers.
Principal Software Engineer: they work at the highest technical level, often participating in shaping the technical strategy of the company, developing innovative solutions, and establishing technical standards, serving as the main mentor for technical leaders and being a key expert in complex technical issues.
This is interesting. Large companies may have additional roles and sub-roles. For example, Google has such roles:
- Staff Software Engineer (L6): has significant influence on the technical policy of their department.
- Senior Staff Software Engineer (L7): works on large and complex projects, defines the strategic direction of technological development in the company.
6.2 Lego Products
Way back (in 1975) Niklaus Wirth, the creator of the Pascal language, wrote a book "Algorithms + Data Structures = Programs". A lot has changed since then.
A modern software product is not what it was 10 years ago, and definitely not what it was 20 years ago. There's no point in even mentioning 1975—it was 50 years ago.
A modern programmer no longer writes programs by hand. They more like assemble them from ready-made parts (libraries) and write code that helps these parts interact.
Modern software products can consist of dozens and hundreds of programs. Some of them run on the user's computer or mobile devices, but most run on servers in data centers.
Many of these programs, such as a web server or a database, are already written. They just need to be properly configured to work as needed. Although over time the configuration process can become so complex that it effectively turns into development. (*facepalm*)
Programmers constantly battle with themselves. Instead of rewriting similar code in different programs, they write libraries that can be configured (customized) to suit their needs and then just plug them into all the necessary places.
In 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 the code from scratch is considered bad form. Instead, you need to assemble a program from quality and proven solutions - libraries, frameworks, packages, and modules.
But even this approach is already becoming outdated. The trend of the last 10 years is moving to the cloud, large data centers that provide everything your programs need. Want a database? We have hundreds to choose from. Want a rare unique web server? We've got those too! Any whim for your money.
6.3 "I'm an engineer" © Elon Musk
There's no need to write complex and boring stuff anymore. If you need some cool, complex functionality, there's already a library for that. You just need to: a) know that it exists, b) find the right one (there can be dozens of analogs 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, install, and configure it. And now — just log into the "cloud" admin and turn it on.
This is actually one of the reasons for Python's popularity. It's very well suited not for writing large and complex solutions but specifically for "gluing" various parts together. And judging by its popularity, it does an excellent job.
And the profession itself has transformed from Python developer to Python Fullstack Software Engineer. A modern Python developer should understand how a database works to interact with it properly. Understand HTML & JavaScript to connect the frontend with the python backend. And Docker is needed — it's now an industry standard.
Modern development doesn't really look like it did even 20 years ago. A modern programmer writes code no more than 50% of their time. The rest of the time they read docs, learn new technologies, and spend time in meetings. Lone programmers are a thing of the past.
GO TO FULL VERSION