From Zero to Hero! The long way…

borysshulyak

Boris Shulyak

Posted on March 7, 2023

From Zero to Hero! The long way…

Becoming a software developer is not an easy journey. In fact, it can be a long and difficult road. However, with perseverance and hard work, it is possible to achieve your goals. In this article, I will share my own experience of becoming a software developer, from my early beginnings to my current position as a Frontend Tech Lead. So, let's dive in!

I started learning programming in 2015 when I was 13 years old. I started programming to take part in the school programming competition. Do you have any idea what programming language I have chosen? Hehe, okay, I have not chosen the programming language coz my school teacher made the decision for me. I should say that I knew nothing about programming at that moment.

So … it was a Pascal

Yes, yes, the blue window. My IDE looked like this:

Pascal IDE

For 4 years I solved the problems from the E-olymp site. Here is the profile I created at school in 8th grade. I have solved 216 problems of different ranks.

E-olymp profile

Do you wanna see my first task and solution? The first problem was named “Cheese for Anfisa”:

First problem

The solution in Pascal language:

var a,b,k,c:int64;
begin
  read(a);
 read(c);
  read(b);
  k:=(a*b*c)-1;
  writeln(k);
end.
Enter fullscreen mode Exit fullscreen mode

I knew nothing about best coding practices, like splitting the code, DRY, SOLID, etc.
My list of variables looked like the ABC.

The main task was to solve the problem in any way. And … I dealt with it. Every year I took first place in the programming competition among all schoolchildren in my city. In 2018 I took first place at the regional olympiad and took part in the All-Ukrainian Programming Olympiad.

I have solved problems with graphs, implemented sorting algorithms, etc.

It was really funny. I had a best friend and we programmed together, solved different problems, and traveled to different cities for competitions. My family was very proud of me.

The last task I have done on E-olymp was The Shortest Path:

type mnoz=set of byte;
var d:array[1..2000,1..2000]of longint;
    dist:array[1..2000]of int64;
    p,from:array[1..2000]of longint;
    s:mnoz;
    t,v,n,m,x,y,i,j,k:Longint;
    min:int64;
    f1,f2:text;
begin
  assign(f1,'input.txt');
  reset(f1);
  assign(f2,'output.txt');
  rewrite(f2);
  read(f1,n,m);
  read(f1,x,y);
  for i:=1 to n do
    for j:=1 to n do
      d[i,j]:=-1;
  for i:=1 to m do
    begin
      read(f1,j,k,v);
      d[j,k]:=v;
      d[k,j]:=v;
    end;

  for i:=1 to n do
     s:=s+[i];
  s:=s-[x];
  for i:=1 to n do
    begin
      if d[x,i]=-1 then dist[i]:=50000000000
                   else dist[i]:=d[x,i];
      from[i]:=x;
    end;
  from[x]:=0;
  dist[x]:=-1;

  while s<>[] do
  begin
    min :=500000000000;
    for i:=1 to n do
      if (i in s)and(dist[i]<min)and(dist[i]>-1) then
      begin
        min:=dist[i];
        k:=i;
      end;
    for i:=1 to n do
      if (d[k,i]>-1)and(dist[k]+d[k,i]<dist[i])then
        begin
          dist[i]:=dist[k]+d[k,i];
          from[i]:=k;
        end;
     s:=s-[k];
   end;
   {if dist[y]=200000000 then
   begin
     writeln(f2,-1);
     close(f1);
     close(f2);
     exit;
   end;}
   write(f2,dist[y]);
   writeln(f2);
   i:=y;
   t:=1;
   while i<>x do
   begin
     p[t]:=from[i];
     i:=from[i];
     t:=t+1;
   end;
   for i:=t-1 downto 1 do
      write(f2,p[i],' ');
   write(f2,y,' ');
   close(f1);
   close(f2);
end.
Enter fullscreen mode Exit fullscreen mode

The best skill I have learned is compiling code in my head. I often solved problems in my head and wrote the source code of the entire program in a notebook. All this experience helped me a lot when deepening into programming - data structures and algorithms were given to me so easily.

Goodbye, Pascal

After school, I entered the Kyiv Polytechnic Institute with a degree in software engineering. I have started to learn C# and implemented a lot of data structures and algorithms using this language, e.g. HashTable.

I have met a man who worked at a large Epam company as a front-end developer. He advised me to learn JavaScript. The basic things of this programming language were given to me quite easily. After that, I created a couple of landing pages and continued to solve problems in JavaScript. The same person suggested learning React and taking part in a Real-Estate startup as a front-end developer. I mastered React in a couple of weeks and successfully got to work. This course has made my career start. I was mentored by my friend and was provided with a great MR`s review.
Everything was new to me. We have created all the UI components from scratch, without any UI components lib - it was fun.

Our tech stack was:

  • React, Next.js, TypeScript
  • Redux, Redux-Thunk
  • Redux-Form
  • SCSS
  • GitLab CI

I have worked without a salary and decided to get money for my work. So the new job was waiting for me. Next 6 months I worked on so boring projects but successfully mastered my skills as a frontend engineer. I have worked on British banking projects and on large consulting ones. I have fell that could solve any problem.

The tech stack was pretty similar, like:

  • React, TypeScript
  • Redux, Redux-Saga, Redux-Thun => Redux-Toolkit
  • Formik
  • SCSS
  • Jest, React Testing Library
  • GitHub Action

After that, I changed my work job again.

Start of true Engineering

I got into a great company. I was offered a job without even waiting for the end of the interview. Among all the candidates, I was the best. I worked with a Frontend architect and it was a wonderful time. We have created a unique platform that allows the creation of multi-brand websites for different partners. The whole project was implemented using Rush.js monorepo which included a huge number of packages. We have spent a lot of time, solving many difficult engineering issues, creating great development processes, and providing best practices.

I was a part of this project from idea, architecture creation, and choosing tech stack till releasing 7 products into production.
We have developed a large monorepository, strong CI/CD, covered a lot of code with unit and integration tests, created several knowledge-sharing sessions, involved all the engineers in true Trunk Based development. All the time I was a Code Owner and reviewed more than 2000 MRs and built really great product.

Our tech stack was:

  • React (Next.js)
  • MaterialUI, JSS, Storybook, Atomic Design
  • ReactHookForm
  • Node.js, GrpaphQL, ApolloClient, ApolloServer, Apollo Subscription, Apollo Federation, SignalR, Kafka
  • Jamstack, Strapi
  • Rush, pnpm, Gitlab CI/CD
  • Jest, React Testing Library, Cypress, Wiremock

Well, it was my most loved project and most valuable experience.

Changing the mindset

In that place of work, I have started learning things that really matter, instead of specific technologies: design principles and patterns, software development methodologies and best practices, architecture principles and patterns, etc. I do it to this day and I will continue to do this for a very long time ))

Technical writing, open sourcing

In that place of work, I have implemented a lot of processes and understood that each of them should be well documented, so I have described everything on the paper. I thought "Why can't I share my knowledge in the same way" - after that, I created my first blog post.

Times go by and now I have my own Engineering Playbook with more than 50 pages and some small open source libs:

Project Description
📚 Runespoor Archive: Engineering Playbook Runespoor Archive is a set of documents that may help you to increase overall efficiency for team members and the whole team in general, and to strive to be better engineers
🚯 Runespoor Eslint Config Battle-tested, ready for production set of Runespoor ESlint configs.
Runespoor Timezones The full list of timezones, their names, country codes, and gmt offsets.
📐 Strapi Formula Field A Custom Field plugin for Strapi Headless CMS that provides an integration with powerful math library.

Contributions:

And it is only the beginning - I'm going to create father more useful content.

Here we are!

Currently, I work as a Tech Lead on an interesting startup. Everything is so ... nice and sincere: the idea, tech stack, processes, colleagues. I've assembled a great team of engineers. This place of work is the most pleasant in my experience. We also follow many best practices in software development and continue learning and implementing others.

Our tech stack is:

  • React
  • ShadcnUI, RadixUI, Storybook
  • TanstackQuery, TanstackTable, AgGrid, TailwindCSS
  • ReactHookForm
  • Vitest, React Testing Library
  • GitHub Actions

I feel that we will bring a lot of value to business, and will do it with high quality and on time.

Future plans

  • Continue learning important software development things and growing up to Stuff Engineer.
  • Develop a personal brand and open-source stuff.
  • Create a personal product.

Conclusion

After all these years of learning and hard work, I can say that becoming a software developer is a never-ending journey. There is always something new to learn, a new technology to explore, and a new challenge to overcome. However, with perseverance and hard work, anyone can become a successful software developer.

My journey from zero to hero was not easy, but it was worth it. I have learned a lot, met amazing people, and worked on exciting projects. If you are considering a career in software development, my advice to you is to be patient, work hard, and never give up on your dreams. Who knows, maybe one day you will be the one sharing your own story of becoming a software developer.

Thank you for reading my story, and I wish you all the best on your own journey!

Gratitude

  • I want to say thank you to the best woman in the world, my wife Diana for her love, daily support, motivation, and inspiration.
  • I am grateful to my parents for always guiding me on the right path.
  • I am grateful to my current team (Kostiantyn, Andrew, Oleksii, Viktor) for their daily efforts, their support, respect, and desire to grow up.
  • I am grateful to my ex-colleague, architect, Andriy Halyasovskyy, for his patience and experience, which he passed on to me - I know, he still wants to work with me as much as I want it.
  • I am grateful to my friend, Sergey Khomych, for introducing me to the world of web development.
  • I am grateful to my computer science teacher who introduced me to programming.
💖 💪 🙅 🚩
borysshulyak
Boris Shulyak

Posted on March 7, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

do{}while()_c++;
beginners do{}while()_c++;

June 8, 2023

From Zero to Hero! The long way…
beginners From Zero to Hero! The long way…

March 7, 2023

Clean Code where to start
beginners Clean Code where to start

July 8, 2022

My 10 Favorite Web Development Courses
beginners My 10 Favorite Web Development Courses

September 7, 2019