Clurgo logo
  • Clurgo
  • Blog
  • From Junior to Senior: Mastering software development is a process! An interview with Bartosz Jędrzejczak

From Junior to Senior: Mastering software development is a process! An interview with Bartosz Jędrzejczak

2/19/2024 Karolina Szafrańska

Share

Imagine a person coming to their first job. They bring to the table a fair amount of expertise in algorithms, a pretty good programming background in C++ and Python from the college, and an eagerness to learn and prove their capability. The twist, however, is their limited experience with Java—just six months—and this is the key technology they’re expected to work with. It certainly sounds like a steep learning curve ahead, doesn’t it?

Probably the title of this interview series is a bit of a spoiler, but bear with us: there were many steps along the way that brought them closer to their goal, but there were also moments of doubt. However, this very person became someone who now finds solutions to the most complex problems on his own and helps others find their way in commercial projects.

Do you want to know how he did it?
Get to know Bartek Jędrzejczak!
It is worth it.

Bartek! Thank you very much for taking the time to meet with us, especially since you recently changed the project and must be busy. Could you tell us a little bit about what you are doing now?

Bartek: Sure! It’s a foreign client for whom we are developing a business and employee management application. We use an interesting technology stack here, such as Kafka, PostgreSQL, MongoDB, and Keycloak for authorization, and the whole thing is deployed on AWS. In that sense the project is very cool, there is a lot to dig into. I am also happy to be able to work in English.

And what is more important to you when choosing a project? What will the system you are co-developing be used for, its larger and overall purpose? Or do you pay more attention to what tasks you will have in your job on a daily basis?

An important aspect is when you see that the project has a functional purpose and you know that people will use it. That gives you additional motivation. The possibility of my own professional development is also important. Technologies shouldn’t be very niche or out-of-date. It’s good to work in a technology that will be useful not only in the here and now.

You’ve mentioned that the project you are developing now uses Kafka. That’s a very popular technology right at the moment.

That’s correct. Microservices are easily scalable applications that we deploy for example on Kubernetes. This approach has gained popularity in the last few years. Since such a system is distributed among several applications, they need to communicate with each other. It is possible to do it synchronously, for example through REST messages, but they can also communicate asynchronously through Kafka. I have used Kafka in projects for the Polish Post. Now we are using this technology in a project for a US customer that I am working on.

Before you specialized in Java, databases, and Kafka, you had to learn a lot. Do you remember when and why you started programming?

When I was in elementary school I took extra classes in computer science and I learned Logo. There is a turtle that you give commands to – it jumps, and makes geometric objects from simple ones like triangles and squares to more complex shapes. That was my first contact with writing to make something happen as a result of the code. Before going to middle school, I started reading books from the “Felix, Net and Nika” series. There is a protagonist, Net, who is very good at programming. He did magic tricks with computers and wrote an artificial intelligence called Manfred. This story inspired me to explore how AI can be created, and what programming is all about. I was into computers, I played a little and did my first projects, so I went to high school with a computer science profile and then to college with that orientation. I learned C, C++, Java, C#, and Python. I wrote my Master’s thesis in the latter language. I must admit: I have tried several languages and of all of them, Java is the one I like the most.

And why was it Java?
I started with C++, which was cumbersome in several ways. One of them was the need to free memory. Java has a garbage collector that does this automatically when objects are no longer used. Because of this and several other language-specific issues, Java seems much friendlier to me. Back in college, I had a class called Event Programming where we used Java. The lecturer explained the different aspects of this kind of programming in a very pleasant way, and from the very beginning, it seemed logical to me.

Do you remember any cool projects from your studies?

Yes, I remember several. For example, I applied a genetic algorithm in a project aimed at scheduling meetings and allocating them in the conference rooms, taking into account the meeting’s size and duration. This already gave me the satisfaction of applying programming to real life and solving a real problem. Most of the time, when the opportunity arose, I chose Java.

Looks like you had chemistry with Java right from the start 🙂

This story is actually closely related to how I came to Clurgo. I got acquainted with Java during the third semester of college, and when I was going into my fourth semester I applied for a job in Clurgo. I had a technical assessment with Piotr, and even though I had very little to do with Java before, I knew the basics and had a good programming background. I remember Piotr asking me about various things: algorithms, data structures, databases. Of course, he had also asked about Java, but I couldn’t say much about it yet. I was very happy and grateful to get my first job despite my little Java experience, and I knew that I had a lot of catching up to do. I must admit that I learned most of my Java skills in Clurgo!

Do you remember your first moments in Clurgo?
I ended up in the project under Piotr’s guidance, sitting on his right side and getting feedback frequently. At first, I was overwhelmed and thought to myself: “Wow, I really don’t know anything yet!” But in fact, it was that feedback that made me learn good practices from the very beginning. Thanks to Piotr’s reviews and shared insights, I quickly aligned with the standards expected in commercial projects, despite my limited experience. Piotr didn’t just focus on coding. He also introduced me to the nuances of working in a professional environment. He taught me effective communication with clients and team members and how to present information clearly to help identify and solve problems efficiently.

It seems like it’s fundamental to have a lot of potential and knowledge, but apparently it also makes a huge difference to be lucky and to come across a good leader. Then it’s kind of a downhill.
Well, I’m very lucky that I ended up at Clurgo and immediately got mentored by Piotr, who taught me good practices. Then I was able to pass the knowledge on to the next people who came into the company.

Was there a moment when you realized that you were no longer a junior?
It’s rather a process. Over weeks and even months, when more people came to the project, I had the knowledge about both the project and technology to help them. I felt that I was starting to take the initiative, and I was also able to help other team members. I also began to solve more complex tasks on my own. As these situations arose more frequently, I began to notice and appreciate the growth in my abilities compared to just a few months ago. I was still coming for advice to more experienced colleagues, but my skills upgraded significantly, and I was even able to pass on my knowledge to those who entered the project after me.

And was there a moment when you felt that you were already a Senior Developer?

It’s also a process and not a specific milestone. Additionally, it’s something you have to mature to, and I know that I still have a lot to learn. The first sign that I was approaching that point was when I was a technical leader on the project, and I felt like I was holding the entire project in my hands. New people were coming in, I was teaching them how to write code, doing code reviews, and helping them when they had questions. That’s when I started to feel that I had the expertise to grasp the whole project and hold it together. After a few months, one of the people came up to me and thanked me because it made it a lot easier for them to move on to their next project. That’s how the story came full circle because I was able to help someone just as Piotr had helped me before.

Do you have any programming successes that stand out in your mind?
It depends on how you look at it. At the beginning, every problem or task that you manage to solve is a small success that leads to development. So I can say that my career is the sum of such small steps. One of the bigger ones I remember was a project for one of the customers from the public services sector, where I worked on a module that I practically wrote myself. It was responsible for scanning attachments that the client uploaded to the system. I had to send them to the Symantec scanning system, which required tying together several elements: the managing microservice, Kafka, receiving the messages, processing them, handling various scenarios, and finally, when all the attachments were scanned, sending information so that the process could continue. This is an important aspect of the whole system because everything goes through it. I was mainly responsible for this module, which worked without major problems. I remember that as my considerable success.

We developed this project under very high time pressure and you didn’t have much time to work out the solution.
Yes. In addition, the need to build this module arose during the process. The application development was already at an advanced stage, we were taking messages on test environments. Suddenly, this additional requirement came up, and we had to plug attachment scanning into all of this. We had to figure out how to make it – for example, the system couldn’t continue the process unless attachments were scanned, but also should stop when there was a virus in the files. It was a very important contribution to the project and I felt that I really made it well.

Let’s go back to your programming education for a moment. If you had to start again, what would you learn?

I think my path to this point has been pretty alright. I don’t regret the time spent on different programming languages, because I learned the background of other technologies, and their basic advantages and disadvantages. This allowed me to choose consciously. When you start programming, studies give you a background and allow you to learn the algorithms. However, you still learn the most by working in practice. If I had to give advice to students, before anything else, it would be to start looking for a job as soon as possible and to use the programming language in commercial projects.

And nowadays, what are you learning from?
When I’m looking for solutions to problems I’m facing or when something interests me, I watch Devoxx or Confitura conferences on YouTube. I also often read articles in the Baeldung blog. On my own, I learn through my own projects: for example, I set up a small project in which I run Kafka, a PostgreSQL database, MongoDB, and Oracle. I create simple solutions to see what I can possibly deal with. I try not to limit myself to the backend but also to explore DevOps stuff, like database configuration, or frontend. For example, I learned a little bit of React. Learning to think logically is also important, and I can recommend various challenges here, such as Advent of Code that runs every December.

What would you advise beginner programmers?

Definitely not to be afraid to ask questions. When you are at the beginning of your career, you don’t have practical knowledge and you have to rely on others who are more experienced. If you’re not sure about something and you’re afraid you’re going to screw something up, ask again and make sure you know how to do it. As you grow more competent, you will become more confident. Stay open to constructive criticism, and try not to take it personally. It’s also worth being proactive and eager to learn as much as you can. Also – sometimes you need to learn from your mistakes.

Do you remember any of yours?

During my first project I was responsible for the flow part, which conditioned what path the process should take. I had been working on it all day, and the next day I did something wrong and lost my changes. They just disappeared from Git. I didn’t try to hide it, I just went to a colleague and asked for help. It was a good call because it turned out that IntelliJ offers an option to check the local change history of a given file and we restored my code. The lesson here is that it’s worth admitting your mistake and asking for help from experienced people because you might be able to solve the problem. You have to go through that internal discomfort at first caused by constantly asking for something or getting a lot of comments during code review. Over time, you gain experience and simply ask fewer and fewer questions and get fewer and fewer comments.

It seems that, contrary to the stereotype, working in programming is largely about working with people. Can you point out any soft skills that make a good programmer?

I’d say communication skills. They come in handy when communicating with clients who sometimes don’t have a technical background. Then it’s useful to be able to talk properly about what needs to be done and why. Communication between team members is also important. It pays off to be open, willing to share knowledge, and not be afraid to ask someone to explain something. You can reinvent the wheel and agonize over tutorials, or you can simply ask someone more experienced. It is also important to be able to explain your ideas in an accessible way. Ability to give a constructive code review also pays off – it’s always a good idea to suggest a different solution or to present any argument to point why something needs to be improved instead of just leaving dry comments.

I also believe that a good programmer should be proactive, i.e. do code reviews, discuss, and share knowledge. Everyone has different experiences from previous projects, and it’s good to learn from each other. Patience is also important because it allows you to deal with different challenges and approach situations in the right way. If someone wants to be a programmer, they have to have the attitude to always keep learning and just enjoy it. If we have the opportunity to interact with new technologies, it’s a sure thing – every now and then there will be new bugs to fix, new challenges to solve, and we will constantly have to look for new solutions.

In the From Junior to Senior series, we introduce those members of Team Clurgo who gained their first commercial experience with us and are still on board, now mentoring others.
Inspired? Visit the career section and check our openings.

Clurgo logo

Subscribe to our newsletter

© 2014 - 2024 All rights reserved.