From Zero to Hero! The long way…
Tags: beginners, programming, javascript, webdev
Published: 2023-03-07 14:17:27

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 Senior Frontend developer. 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aum4h6shsh5cvfjp5rp7.jpg)

For 4 years I solved the problems from the [E-olymp site](https://www.eolymp.com/en). Here is the profile I created at school in 8th grade. I have solved 216 problems of different ranks.

![E-olymp profile](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmq5r6423mcnkpwr7x32.png)

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

![First problem](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ghve8ij0ls8kynpnd8vb.png)

The solution in Pascal language:

```pascal
var a,b,k,c:int64;
begin
  read(a);
 read(c);
  read(b);
  k:=(a*b*c)-1;
  writeln(k);
end.
```

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**”](https://www.eolymp.com/en/problems/4856):

```pascal
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.
```

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](https://github.com/BorysShulyak/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](https://github.com/BorysShulyak/JS-Core-Task) 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. I was mentored by my friend and was provided with a great MR`s review. 

Our tech stack was:

- React, Next.js, TypeScript
- Redux (redux-toolkit),
- Redux-Form,
- SCSS.

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 in React, TypeScript, websockets, Redux Toolkit, Redux-Thunk, Formik, etc.

After that, I changed my work job again.

## Here we are!

 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 allowed 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:

- FE - Next.js apps, ui-kit, dal, eslint configs;
- BE - Apollo Federation gateway, microservices, graph data source.
- Infrastructure packages to avoid code duplicating for CI/CD

The core part was a Strapi headless cms that allowed the creation of a "conveyor" for implementing a huge number of different portals.

I was a part of this project from idea, architecture creation, and choosing tech stack.
I have communicated closely with customers, designers, QAs, created a road map, and played the role of key developer.
We have provided strong customization abilities from the admin panel - operators and developers could easily change the UI and content of each website.

Our tech stack was:

- React (Next.js), MaterialUi, Storybook, Atomic Design
- GrpaphQL, ApolloClient, ApolloServer, Apollo Federation
- Jamstack, Strapi
- Rush, pnpm, Gitlab CI/CD
- Jest, React Testing Library, Postman

I have dived into a lot of architectural problems, challenges, and new technologies. 

## 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 am grateful to my girlfriend, Diana, who supports me at every step, motivates and makes me happy.
I am grateful to my parents for always guiding me on the right path.
I am grateful to my computer science teacher who introduced me to programming. 
I am grateful to my friend, Sergey Khomych, for introducing me to the world of web development.
I am grateful to my mentor, Andriy Halyasovskyy, for his patience and experience, which he passed on to me.