Resilience in Coding: Miro Wengner on Thriving in the Software Industry
May 31, 2023In this insightful discussion, we sit down with Miro Wengner, an accomplished software engineer with a deep-rooted affinity for Java. Miro shares his professional journey, highlights the significant challenges in the field, and reflects on the key moments that shaped his career.
Profile
- 🐦 Twitter: https://twitter.com/miragemiko
- 👔 LinkedIn: https://www.linkedin.com/in/mwengner/
- 💻 GitHub https://github.com/mirage22
- 🏠Home Page: https://www.wengnermiro.com/
Fun fact: When I was in my early 30s, I took my sister to Amsterdam. We visited almost all the museums, and I realized they kept selling me a student ticket without asking me the whole time. And it happened many more times after that. So finally, when I was 38, my wife told me I should grow a beard and that I didn't look like a student, so I've had a beard ever since. So I could get a beer without showing id.
Bazlur: Can you tell us about your background and how you got started in the software industry?
Miro: I still remember the moment, like yesterday. It was shortly after the revolution in the Czech Republic, I was shortly 9, and we (me and my brother) got our hands on the first computer. It was real; It was a ZXSpectrum+2 with a Cassette player attached to it. We've been playing Bruce Lee and a bunch of others. I was very impressed; the idea of developing my own game was so present.
I started "studying" the basic language, but I really had no idea. My gaming efforts ended with moving objects over the screen, but it was awesome.
Anyway, later on, I was influenced by my friend's father. He did concepts for some car companies and always had the most powerful computer back in the 90s. Sometimes I watched him for a long time—his precision and attention to detail.
During my studies, I do remember a second very strong moment, which was joining Sun Microsystems. Entering the ground of the SUN changed my world perception, literally. It was like lightning; I got "access" to the world where many things have started, and technologies or approaches we are using today have been "invented." It all began as a student job, and it has evolved over the years. I got the opportunity to contribute to projects, learn, and be influenced by amazing people. I do remember being hungry for information; it was my hobby in those days.
The third thing I realized at Microsystems was the power of knowledge sharing and the beauty of thought transformation. It was a lot like designing mechanical parts for a new vehicle, as I observed many times as a little boy. Of course, the difference was that we had a whiteboard and bytes, but it was no less exciting; we had "beautiful hardware" at SUN.
I've met so many people at SUN that I can't even count them on all my fingers. I'm so grateful they crossed my path, allowing me to participate in many amazing projects from Java, SunLabs, NetBeans, Glassfish, Hudson(Jenkins) to Solaris and others.
I actively sought out projects that would take my skills to the next level, and many times I felt like I was exactly where I needed to be. I also started presenting, writing the SUN blog, and things like that, but it wasn't as common as it is today; it was more like riding down a hill on a snowboard and doing some cool tricks, just exciting.
Those three moments greatly influenced my entire career and, I would say, life, and it was just the beginning.
Bazlur: What were some of the most memorable projects or challenges you faced, and how did they help shape your professional growth?
Miro: It's a great question; I'd say all of them, one way or another. One of my first tasks was to help improve the validation and efficiency of automatic translations in 2001–2002. The team I was part of built a distributed system with many interconnected nodes across the globe. It was a great time because I gained extensive knowledge in various areas such as hardware, operating systems, scripting, the Java platform, and application development.
I remember that solving concurrency problems was very challenging. As a young engineer, I think it quickly advanced my skills. The critical point was that I was working with people at a different level of knowledge, just better than me, and I was looking to work with such people to improve my skills. Brainstorming with them was like a leap forward, and it's necessary if one wants to be good at something. Just get out of your comfort zone and move.
Brainstorming with people who are better than me and have a different level of knowledge was like a leap forward. It is essential if one wants to be good at something. Just get out of your comfort zone and move.
Bazlur: It's great to hear about your experiences and how they shaped your professional growth. I'm curious: What motivated you to specialize in Java?
Miro: This may sound ironic, but it was partly due to the constant instability of the operating system I used in my early days at university. I switched to Unix, which meant very few games as a result. A side effect was that I got time. I was on my way to find out how to program hardware with some "advanced" logic. So the Java 1.3 reference manual was handy, as C didn't satisfy me enough. I started "playing around" with Java 1.3 at university and, by chance, got an offer to join SUN shortly after, so my journey began.
In those days, the community wasn't as big as it is today, but the attitude was fantastic in different ways; we didn't have iMessage, WhatsApp, etc. Java kind of drove everyone, and I felt it too!
I remember once discussing virtual machine-based languages and why they can achieve optimal performance over compiled languages. Well, that piqued my curiosity and still does, and after all, Java has made fantastic progress in recent years. The Java platform results from several fields, such as mathematics, statistics, probability, and hardware. It's fascinating, and it's all moving forward!
Bazlur: In your opinion, what factors have contributed to Java's continued growth and success in recent years?
Miro: Java has become a reliable platform, a tool that can be used to fulfill simple to complex scenarios. A tool that can be used to create maintainable and extensible solutions that can be diagnosed. Using Java platform tools, you can uncover and understand behaviour and identify bottlenecks, allowing developers to address them. At the same time, Java provides a significant level of optimization.
There is much more to the story, but to keep it brief, all of this would not be possible without the community's investment and the contribution of highly motivated individuals or groups who spend their free time informing the community of progress.
2018 was a milestone year for the Java platform with the release of Java SE 11. Tools like Java Flight Recorder and Mission Control were fully open-sourced, along with 6-month release cycles. You could say a new era for Java started here.
2018 was a milestone year for the Java platform with the release of Java SE 11. Tools like Java Flight Recorder and Mission Control were fully open-sourced, along with 6-month release cycles. You could say a new era for Java started here.
To summarize, it's a community, open-source, and continuous evolution driven by community requests; it's a "closed" loop that helps keep progress moving forward in the timeline.
Bazlur: Let's shift gears and talk about the current state of software development. In your opinion, what are some of the biggest challenges that developers face today? Additionally, do you have any advice on how to overcome these challenges?
Miro: You ask excellent questions. Let's investigate them a bit closer. Although we have come a long way since the days of Cobol and software testability, a considerable number of developers could still use assistance with applying SOLID programming principles effectively to create maintainable and extensible applications. Such applications should meet the core business requirements and avoid leading to insurmountable bottlenecks.
In fact, I recently wrote a book titled "Practical Design Patterns for Java Developers." In it, I have outlined 42 design patterns and 13 anti-patterns that are essential in this cloud and concurrent application era.
In my opinion, this is the first challenge: creating transparent, maintainable, and extendable code, regardless of the language used. The second challenge lies in ensuring that the community stays informed about the significance of the ongoing evolution in software: understanding what it is, how it works, and why it's essential.
This, in my opinion, is the first challenge: creating transparent, maintainable, and extendable code, regardless of the language used. The second challenge lies in ensuring that the community stays informed about the significance of the ongoing evolution in software: understanding what it is, how it works, and why it's essential.
A third challenge can be learning to respond to anti-patterns, a natural state of software development. This is due to the dynamics of application development requirements. It's critical to recognize this fact and respond appropriately.
This brings me to the second question about referring newcomers: I would advise them to stay hungry for information (the what) and take the time to explore the essential details (the why) and how to apply the newly acquired knowledge (the how). When the solution doesn't fit, let's explore what might. You see, it appears to be a short cycle moving along the timeline and generating an individual's knowledge base. In principle, it's not about jumping or mixing technologies; it's about understanding and learning.
Bazlur: What advice would you give someone new to the software industry who is unsure about which career path to take? Could you also provide insights into the various roles within the industry, such as developer, quality assurance, manager, and developer advocacy, and the specific skills and interests needed for each of these roles?
Miro: This is another excellent question for which there is no trivial answer, as each person's case is unique. Still, I would advise newcomers to match their hobbies and interests with the path they choose to take. Of course, define the direction first; it should crystallize based on current capabilities. Patience, thinking, and study are golden gifts. In my opinion, quick success does not lead to the desired satisfaction.
In my opinion, quick success does not lead to the desired satisfaction.
It is also essential to learn to fail because failure is the best way to learn on many levels. It's similar to anti-patterns in software.
This is similar to anti-patterns in software development - learning how to respond to them is more beneficial than trying to avoid them because they can be the natural outcome of progress.
From the different roles you mentioned, there is momentum that brings them together. It is a combination of knowledge of mathematics, statistics, and probability. I know it seems a little weird, but being able to apply the 80/20 rule makes things easier, and there is no AI that I believe can replace the human brain based on the current state of the art.
Bazlur: Thank you, Miro, for sharing your insights. Do you have any enjoyable or memorable stories from your time in the software industry that you would be willing to share with us?
Miro: Of course, I have many of them, but it would be a long article, and one story is special. It was in 2009 that I was asked to introduce speakers at the conference, and one of them, my good friend Andres Almiray, had a birthday. So an idea flashed in my head, and I started singing the song "Happy Birthday" in front of the whole audience. Honestly, I'm not the best singer, but a nice effect was that the audience joined me during my performance. Andres didn't expect anything like that. Me neither, but it was great that we celebrated this day together.
Bazlur: Thank you so much for sharing your insights with us. We really appreciate your time. If we have any further questions, we will be sure to reach out to you. Before we end, is there any parting advice or resources you would like to share with our readers, such as a list of recommended books or any other helpful information?
Absolutely, one book I already mentioned above was recently published, "Practical Design Patterns for Java Developers." I recommend it to developers, architects, project owners, or even managers.
In this book, the vehicle assembly is taken as a carrier abstraction, which allows for a discussion of the chosen approaches' programming principles, decisions taken, and effects. The book contains links not only to supplementary literature but also to internal parts of the JDK. In addition, I recommend reading classic books like "Introduction to Algorithms (Cormen and co.)" because the basics don't change.
Conclusion:
Our dialogue with Miro serves as a testament to the resilience, continuous learning, and community involvement required to excel in the dynamic software industry. His journey and insights offer invaluable advice for anyone aspiring to make their mark in this field.
I hope you, as a reader, have found this interview beneficial. Stay tuned for next week's interview with another industry star.
Note: This comprehensive and insightful interview was conducted through various digital platforms, including Google Docs, email, and Slack. We welcome any suggestions to enhance our process, ensuring better future experiences.