Full-stack developer, personal experience
When I started my adventure with programming or, more broadly, with computer science over a quarter of a century ago, the world was different :-) (yes, the only sure thing in life is that it changes). On the one hand, it was more accessible; to write a computer program, you only needed to master one programming language (in those days, Pascal, C, C++, or Assembly for the hardcore). On the other hand, it was more brutal: to write a computer program, you had to know everything in depth, from the computer hardware itself: how the processor works, what's inside it, how to use the memory, how to read/write something to a floppy disk or hard drive, through the operating system and how to control input/output devices through it or use system interrupts, up to the programming language and how to use it effectively (computers were slower :-)).
Today, the number of languages, tools, libraries, frameworks, operating systems, technologies, various programming practices, etc., can be overwhelming for someone just starting their programming journey. On the other hand, programming languages are higher-level—we generally don't care too much about how the processor works or what's inside the operating system. Instead, we focus on what we want, not how to achieve it. It's also much easier to find out how to do something; just enter the appropriate keyword in the search engine, and you'll have the answer.
And this is where full-stack software developer comes into view, a role somewhat mythical to me.
A full-stack software developer has a broad knowledge of various technologies and tools used in the software development process. In their work, such an engineer deals with both the front-end and back-end applications. They are responsible for the software's overall application design, implementation, testing, and maintenance. They are a Renaissance person (a modern-day Leonardo da Vinci with a degree in computer science).
There's a trade-off, of course. To be good in a particular field, you have to dedicate time and energy, and since a full-stack engineer deals with many fields, they can only be an expert in some of them. That's why you need to be good in many areas but not necessarily an expert to be a full-stack developer. A term for this is a general specialist (primarily applicable to the junior level). However, it's worth striving to be more advanced in at least one area and, at the same time, have a good knowledge of the other regions.
The first question arises: is this path really for me? Sure, everybody's talking about the incredibly high average salary, but it's not a guaranteed best solution. Someone may prefer to focus on a specific occupation, such as front-end or back-end developer (for example, despite my knowledge as a front-end developer, I like to work on back-end components) but wants to be an expert in that area.
From my experience, although many job descriptions for a programmer may include the term full-stack developer, in the realities of business, it often turns out that it's just a name. In reality, the person in this position deals with only one very narrow area. This is especially true in larger organizations developing their software for many years; the chance to deal with everything in such an environment is relatively small. It may be different with a smaller start-up, where the software development team is small, and the program is in the development phase: then, the programmer deals with everything. Similarly, if you dream of freelancing, it's worth being good in many areas to complete the entire project independently. As you can see, how we envision our professional future impacts whether it's worth full-stack engineering.
Is it worth having (or at least mastering to some extent) everything that it takes for the full-stack developer?
Yes. Especially when someone is starting, it's good to develop a general understanding of what's happening in the IT world and then decide whether to focus on a specific direction. For many people, this means choosing computer science studies, which, by their nature, provide us with a broad knowledge base. However, there are other paths, and the careers of many programmers have proven that there are better ones. At university, we learn many things that, from my experience (and I was an academic teacher for many years), do not necessarily come in handy later. Sometimes, the required practical experience is also needed during studies. Is there an alternative? We live in times when access to knowledge and materials helping us learn anything is practically unlimited, available at our fingertips, and free of charge. We need a plan and a general vision of our path.
What should you know before you get this role?
To become a full-stack software engineer, it's a good idea to start by acquiring basic knowledge in computer science, programming, and web technologies.
Below is a list of areas you should develop.
Familiarity with front-end frameworks: This is more advanced, so you don't need to master it immediately. However, learning to use popular frameworks like React, Angular, or Vue makes working with user interfaces easier. They allow for faster and more accessible creation of interactive web applications. Which one you choose is not critical, but start with one that is popular, actively developed, has good documentation, and has a large community. For example, choose React over Vue (not because the latter is wrong, just less popular). When selecting a framework, you must master various auxiliary tools, like Redux for React (although it's unnecessary).
Basics of DevOps: Knowledge of DevOps is increasingly required for full-stack development. Learn basic tools like Docker and Kubernetes, and understand what CI/CD processes are and the tools supporting them, such as GitHub Actions.
Learning testing: Learning to create unit, integration, and functional tests will ensure the high quality of the software you develop. Choose tools that match the programming language and frameworks you use.
Developing soft skills: In addition to technical competencies, soft skills like communication, teamwork, time management, and adaptability to change are essential. Work on them simultaneously with developing your technical skills.
Working on personal projects: Create projects that showcase your abilities at full-stack development. These can be single projects, like websites, mobile applications, or even computer games. Include them in your portfolio (GitHub is your friend here) so potential employers can assess your skills.
Networking: Join developer communities, participate in code reviews, and attend conferences, workshops, and meet-ups. Build your network of contacts (be aware of websites like LinkedIn), which will help you find a job in the future. Be a team player who can prove themselves as essential to a cross-functional team.
Lifelong learning: Technologies and tools in the IT industry change rapidly. To stay current and continuously grow your full-stack engineering, be open to new trends, and never stop learning. Are you ready for this? :-)
Learning the basics of programming
On the previous list of skills to master, learning the basics of programming was highlighted. This may be the first and simultaneously most challenging step for many people.
Of course, there isn't just one path, and each of us is different, but from my experience, the best way is to learn through practice.
So, if we choose a programming language, it's best to start creating simple programs right away rather than learning all the possible constructs of the programming language and then wondering what to do with it.
It's great if the programs we create serve a purpose for us, making it easier to determine what they should do and how to do it.
Don't expect your programs to be perfect the first time you try, make mistakes and learn to eliminate them. The ability to search for and eliminate errors in programs (both your own and others) is one of the most important skills of a programmer. Take this opportunity to practice persistence and patience, as sometimes errors can be challenging to find.
Online courses or books can complement the above, although in many cases, the programming language documentation is sufficient. As for online courses, those that encourage you to practice are especially useful, and I highly recommend Hyperskill.
However, don't let your time be entirely devoted to watching (!) successive tutorials on the Internet, even if they are excellent and you are completing all the tasks or instructions of the person who prepared the tutorial. In this way, of course, you learn, but... it is a reproductive, not a creative activity. Often in this way, you create false beliefs that things are easier than they seem and, at the same time, that you know how to do something when, in practice, you have seen someone else do it, and in the end, you would not be able to repeat it independently. Try to contemplate this idea while watching this video to the end ;-). Don't get me wrong, tutorials are excellent (many people put a lot of effort into preparing - often for free - materials based on which you can learn), and I use them myself. The key is how to use them—if you learned something from a tutorial, can you apply it independently? As a supplement, it's excellent, but it cannot replace your own (deliberate) practice.
Other ways to improve your skills that I recommend include:
- participating in open-source projects;
- building a portfolio (as mentioned above, practice on a wide range of products);
- taking part in hackathons or programming competitions;
- attending training sessions, workshops, and boot camps;
- seeking guidance from a mentor.
Level up Frontend skills and advance your career
• Wide range of learning tracks for beginners and experienced developers
• Study at your own pace with your personal study plan
• Focus on practice and real-world experience