My Journey as Full-Stack Developer

code

Oh boy, another developer that started as self-taught and wants to tell everyone how unique the experience was. How demanding it was. How much he picked up along the road, and how many skills he acquired now that he stands somewhat along a path where he's pretty much self-sufficient and can handle to build complete applications on his own.

Guess what, this story has been repeated and told over and over again. But for any developer that has started as self-taught, with no prior coding experience and no IT background, and has progressed further perhaps through schools or boot camps, it does not cease to be fascinating. Every time we tell ourselves this story, we are the first ones who make it hard to believe. Especially if our background was the most further that can be from an IT background. Every time I think about how it started for me I still don't realize how further I went down the road. Although I took the path that any aspiring first front-end, then full-stack developer takes, I often realize that nothing is ever straightforward in programming. We are somehow pushed to believe from the media that developers are some kind of chosen breed that has everything figured out. So far from the truth. My academic background is in business, my working background was in sales and customer service. My interests were lying in painting, design, photography, music. Never been too keen on technology. Always liked traveling. Combine it all together and you have some average Joe that just never thought about getting interested in programming. Ever. That's why it surprises me that something that I thought would never ever interest me would turn into not only a passion and a career change but also into a way of living, thinking, and seeing things. Like most developers with no CS degree, I began my journey into web development and programming with an online course. Udemy has tons of them. While I was taking an introductory course of Python at The Shortcut in Helsinki, I was attending a programming club for beginners. One of the instructors advised all students interested in web development to take the Complete Web Developer Bootcamp, a Udemy course taught by Colt Steele. The course is still nowadays among the highest and most popular Udemy courses. It covers HTML, CSS, Bootstrap, JavaScript, JQuery (yeah, that JQuery that no one uses anymore), Node, Express and MongoDB. It is a great course for any beginner web developer who wants to get the big picture.

I learned the basics of HTML, CSS, and JavaScript, DOM manipulation, and did a couple of front-end projects. Before starting the backend section of the course, like most developers with no prior programming experience, I hit a wall when starting learning JavaScript. Pretty much all beginners experience a sort of honeymoon phase when starting to learn how to code, but for web developers is even different I believe, cause HTML and CSS are considered the "easy" part of it. Since it is a new thing, we think after the first couple of weeks that we can do it, and we feel sort of electrified. Then, after starting to learn JavaScript, everything starts turning blank. Like, what is this and how can I actually use it on a web page? How can I use an array, an object, a loop, a function to actually make a web page or a web app do what I want it to do? Thinking like a programmer can be extremely hard at the beginning. Since I did not have any prior programming experience, I felt so dumb when starting with JavaScript and did not seem to remember or learn properly how to write a simple function, remember the syntax of a loop. An object or class was something obscure to me. Any developer who went through this phase knows what I'm talking about. You feel stupid, you feel powerless. You think you cannot do this. And this is only the basic part of JavaScript, the bone structure that you are supposed to enhance later on with React, Redux for the frontend, and translate to backend programming with Node and Express.

I really did feel so powerless, however, back then I was not very interested into become a full-stack developer. I wanted to do a mix of UI Design and Front-End, so I did take my time. Instead of digging deeper into programming and rushing towards finishing the course, I was at the same time taking another course on UI/UX design and using tools like Adobe XD to learn the principles of UI design. I did spend quite a lot of time learning how to design websites and took Advanced CSS and Sass taught by Jonas Schmedtmann, a teacher who has a very unique approach towards using CSS tools like Flexbox and especially the Grid system. That course did teach me a lot, and I spent hours improving my CSS skills, built some simple landing pages and websites to master these skills. Backend developers will probably be horrified hearing this, what a waste of time! Even front-end developers might still consider spending a bunch of time practicing pure CSS a waste of time, as the keen focus should be on learning JavaScript and later on React (or Angular or Vue). But I did not regret this. Yes, it did slow down my learning process towards JavaScript, but back then I did not study full-time, I had a job, and other responsibilities. I went back on taking another JavaScript online course, went through the basics again, but still felt like I wasn't learning properly. It just wasn't clicking. When everything is served already in front of you with code along with projects and tutorials, the learning process is extremely passive. That is why I do discourage aspiring developers from doing one course after another, especially if related to the same tech stack. You might be thinking you are building things, improving, and learning. In reality, you are just copying someone else's code. While taking a course is great if you are learning that specific stack for the very first time, it does become useless once you know you should start using your own logic, and are afraid to do so.

After learning more JavaScript and some basics of React, I did start to feel I was, like many aspiring developers, getting stuck into tutorial hell, or tutorial purgatory. Unable to develop my own logic, and felt powerless when I had to build something on my own without the use of a tutorial. But I kept pushing, made a portfolio website with some projects I made during my self-studies, sent out some applications, even got an interview. But I wasn't ready, and still felt so weak in programming. Plus, it does totally depends on which country you live in. I barely use Facebook for anything, but I'm quite active in web development groups, and I often read that in some countries, junior developers get hired just knowing HTML, CSS, and JavaScript, perhaps a little React. I kind of laugh at it sometimes, cause here in Finland, pretty much no-one would ever hire you knowing merely these three. Anyone could argue with it, I could argue with it too. If you are really good at those, why can't you have a chance and learn on the job? Cause it takes time. And one thing I learned here, is that companies do not have time to spend teaching juniors. So I took the advice of a good friend of mine and applied for a Bootcamp. Good thing is, instead of spending $10.000 for a Bootcamp, here in Finland you can get it for free.

When I joined Integrify Academy in Helsinki, everything did change for me. I was very excited to be accepted, and I was not a total beginner as I did know HTML, CSS, JavaScript, and some React. I quickly realized during the introductory JavaScript assessment that I still sucked at it. My teacher at the time, Asabeneh Yetayeh, promised that after doing the JavaScript part of the curricula (which lasted six months), I would feel very confident with it and that I would not only be able to work with any function, object, array, and write functional programming at ease but also that I would be able to do with data whatever I wanted to. Thing is, he was right. You do only exercise your problem-solving skills when you get stuck and have to think, think, and think, cause no one gives you the solution. That is exactly what happened. Together with the course's curricula, I did also take the 30 Days of JavaScript Challenge, which I still recommend to any person learning JavaScript who gets stuck into grasping the logic. It has plenty of coding challenges and DOM manipulation exercises and no solution. Nothing scared me in terms of writing function and passing whatever parameter, loops were my bread and butter (I became so familiar with for of loops that they became my most used ones), I understood how to work with scope. His teachings and this challenge were a game-changer for me. I did finally hit the point where everything started to click. Sure, the code was not fancy. I could have been way cleaner, shorter. It can always be cleaner and shorter. But the logic surely was there. I was grasping it. And that's what counted the most. Cleaner code can be improved only with time, however grasping the logic on your own, without googling for the solution or look for tutorials, that really starts making the difference. A game-changer is when you start thinking like a programmer, especially cause there is never only one way to solve a problem. When you are given an app to build or a problem to solve, and you start already writing pseudo code logic in your head, think in terms of data structures, objects, and array methods, and how to work with and manipulate data, then you start thinking like a programmer.

Learning well JavaScript was what pushed me towards learning and improving more every day. I spent the remaining time of the course learning React, some Redux, Node, Express, and Mongo DB. I think one of the best moments of my life as a developer is when I saw front-end and backend connecting. When you add data, refresh the page, and it stays there, saved on a database. That was like a "WOAH", moment. We did build a basic backend site, first with template engines and server-side rendering, and then using the MERN stack. Did learn also JAMStack development, and how to build sites using a static site generator together with a headless CMS. Built a client's project with Gatsby, GraphQL, and Contentful, together with another personal project.

At the end of the Integrify's course and while looking for work with not much luck during the COVID time, I kept self-studying and finished some online courses. I learned how to work with both server-side rendering and client-side rendering, user authentication and authorization (which I still consider to be one of the most fascinating parts when working with backend), and pushing towards learning the MERN stack. Learning the MERN stack can be quite a pain at the beginning, cause there is a lot of dots to connect. My goal was to do so with Redux, which can be a game-changer when dealing with a larger application. I felt again a little overwhelmed, and I doubted myself at times, thinking whether I was ready to start working in a software company. I kept applying for jobs with no luck. As said previously, junior developers in Finland are often feeling like they are never ready to enter the job market, due to the companies' very high requirements. As my school Integrify was starting a Full-Stack course at the end of the summer, I decided to apply and keep studying for a further five months. The curricula looked great: TypeScript, React, Redux, Node, Express, MongoDB, PostgreSQL, CSS libraries, Bash scripting, Docker, CI/CD, AWS. Modern stack development that companies are looking for. I was accepted and started the course, thought by Umer Khan and Integrify's CTO, with the exception that this one was completely remote learning since the course included students from all over Finland and also from Germany.

 It was hard, really hard at times. For instance, learning TypeScript, Hooks, and Redux in a few days and building a small frontend application was quite challenging and demanding. The first day I wanted to hit my head on the wall. With programming, you can never be satisfied: you have to remember that you can always learn more, and this is not a catchphrase to use to get your next job interview. It is damn true. You reach a point where you feel gratified with your own efforts and the skills you acquired, and then, when starting to learn a new tech stack, you feel like you are taking baby steps again, and feel like the dumbest person in the classroom (during COVID time it translates into a Zoom classroom). I was dealing with some extremely knowledgeable and competent developers here, and getting used to working with TypeScript and Redux, together with React Hooks which was new to me, had brought me back to a new phase of learning. One of the biggest tasks we needed to work with was a full-stack application, each student on its own.  API design and documentation, write all endpoints and build authentication, backend testing, Mongo DB as a database, frontend with React and Redux. The whole lot with TypeScript.  A month or so to do the whole thing. I think that has been the most rewarding project I ever had to build, though it cost me staying awake until 3 am, almost every night, for about a month. I can say that now I can work very comfortably with Redux and TypeScript, even within larger applications. If Asabeneh was crucial in helping me develop my own logic, Umer was in helping me develop structure and get into a more advanced level of programming. I got very confident in working and becoming more proficient with my stack of choice now, which is TypeScript, React, Redux, Node, Express and Mongo DB, and I can honestly say I'd be able to build pretty much anything with it. This specific stack is what a lot of companies are requiring currently, and even tech stack s constantly evolving, I feel like I'll have an endless amount of fun building things with those, whether is within a company or on my own.

I have to say I am ready now. Ready for a job in a software company, to keep improving and setting the bar to a higher level. When I think I went from the basics of HTML, CSS and JavaScript to the MERN stack (with TypeScript and Redux as superpowers), turned from a simple UI Designer/front-end-oriented beginner to a Full-Stack Developer, it does still surprise me. However, as a developer, you should never be happy with what you know. And, at least for me, but I believe for others too, the more you know, the less you are happy with what you know. You simply get hungry and look out there for more. As my first teacher said, you should approach programming with the mindset and the spirit of a child.  So, this is my story. Then again, there is nothing new here. Most likely, it will be told again, again and again. But for each of us who started learning coding from scratch, it will always sound fresh, cause it's our own, and made us what we are now.