In this interview, JetBrains Development Academy expert Anton Arhipov has a chat with Igal Tabachnik. Igal recently joined the Academy, but has been a strong contributor to the JetBrains community for ages. He values clean code, test-driven development and continuous refactoring to lower complexity, reduce bugs and achieve better design.
Members of the JetBrains Academy are recognized experts in various areas of software development. They contribute to Java and .NET communities by advocating development best practices through formal and informal publications and meetings, and serve as a versatile source of expertise.
Q: Hello Igal, could you tell us a little bit about yourself, where you’re from and what is your passion?
A: Hello Anton, thank you very much for having me! My name is Igal Tabachnik, I am a developer living in Israel. I was born in Odessa, Ukraine, and immigrated to Israel with my parents at the age of 11. I guess my fascination with computers started at the age of 9, when my mom, who is also a programmer, took me to her place of work, set me in front of a computer (as I recall, it was a “brand-new” 286 Acer PC) and showed me how to launch Prince of Persia from a Norton Commander prompt. About 9 hours later she came back to take me home, but ever since then I was hooked. My passion for computers, and the software that makes them work was born, and burns in me to this day.
Q: In addition to your technical expertise and activities, you are a community guy – speaking at ALT.NET meetups. What are the topics you enjoy speaking about?
A: I enjoy speaking about things that I truly find interesting, be that a cool tool, framework or best practice. Most of the times it will be about something that’s very close to my heart, but I also enjoy sharing things as I’m learning. For instance, I am not a web developer. During the course of my career I’ve worked mostly on desktop applications, and web development was just one of those things I could never get the hang of. But at the last ALT.NET meeting, I gave a talk about a lightweight open-source Web framework called Nancy. With Nancy I was able to create a web application with minimal effort, and I was so excited about it, that I just had to share it with the world! It felt really good stepping out of the comfort zone and talk about a relatively new topic (for me), I learned a lot from this experience.
Q: As a .NET expert, what is your take on the programming languages for .NET? With C# being the main language of the platform, what do you think about VB, F#, Nemerle?
A: The evolution of the .NET framework and the languages built on top of it is truly a work of art. C# became one of the world’s most used and loved programming languages, while VB.NET is very accessible to new programmers who want to learn how to code. Being a multi-paradigm language, C# supports some functional programming concepts, but languages like Nemerle take it to a whole new level, with features like metaprogramming, strong pattern matching and incredibly powerful macros, all using the same .NET framework. I’m very excited that those powerful (and practical) programming languages are being created and embraced by .NET developers worldwide.
Q: From languages to tooling. What are the most important features of your IDE of choice (VS)?
A: IDEs are tools to help developers convert their ideas into code, and in the .NET space, Visual Studio is the best tool for the job. However, most of the time code will be read rather than written, and unfortunately, Visual Studio’s ability to assist developers in reading and navigating code is a bit lacking. This is where 3rd party productivity add-ons, like ReSharper, come in.
Q: What about ReSharper? What are the features of ReSharper you admire the most?
A: One of the most powerful aspects of ReSharper is something which many people don’t initially realize, and that is that ReSharper is able to understand your code better than the compiler, and it lets you write, refactor and navigate the code that hasn’t even compiled! This is invaluable when practicing Test-Driven Development (TDD), for example, where tests are written before the actual production code. Visual Studio would not be able to apply any of its built-in refactorings, such as Rename and Extract Method, until all the code compiles. This is no problem for ReSharper – you’re able to rename, encapsulate, move and navigate the code, even it it’s not written yet!
Q: Could you tell us about your own development – the AgentMulder plugin for ReSharper? How did you come up with the idea for the plugin?
A: One of the principles of good object-oriented software design is the Dependency Inversion principle (the D in SOLID), where higher level components are decoupled from their lower-level dependencies.To help achieve and automate this, there exist frameworks called DI (or sometimes known as IoC) Containers, which can help ‘wire’ those dependencies together. Unfortunately, doing so ‘interferes’ with ReSharper’s analysis, and some types might be marked by ReSharper as ‘not being used.’ This is where the Agent Mulder plugin comes in – it analyzes those containers and helps ReSharper to find and navigate to the ‘auto-wired’ components.
Q: What are the other tools that you think are an absolute must have for a .NET developer?
A: I am a strong believer in using the right tool for the job, but tools can only be beneficial to those who know when and how to apply them. This is why I think that the most important tool in any developer’s toolbox is their brain, and like in any other profession, this tool must be kept very sharp. This is achieved by constantly learning new things – a new programming language, a new technology, as well as most basic principles of programming, like algorithms and data structures, regular expressions and more.
Q: From tooling to processes. Do you have a recipe for becoming a better developer?
A: I am a believer in people over processes. Problems that are typical in software development teams cannot be solved by a single ‘one size fits all’ methodology, agile or otherwise. Developers can only become better professionals when they realize that it is not enough just to write code. Being a better developer means not sacrificing good development practices, even when times are pressing. It’s about trying to improve the process and the people by sharing knowledge, and knowing when to ask for help as well as offer it to others.
Q: What are the agile practices you think are essential for a developer to learn right from the first day of their career?
A: One good advice I received from a colleague at the start of my own professional career was from a book called “How to Solve It” by a mathematician George Pólya, where he suggests the following when solving a mathematical problem:
First, understand the problem
After understanding, make a plan.
Carry out the plan.
Look back at your work. How could it be better?
I believe these simple steps apply for just about anything, but especially software development. Always try to make it a little bit better. Always validate your assumptions. Always value other people’s opinions. Strive for continuous improvement. Never stop asking questions!
Q: Can you suggest an inspirational book for becoming a better developer?
I can definitely recommend two incredible books: Code Complete by Steve McConnell and The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas. Two books filled with solid gold advice and best practices for any software developer. I also highly recommend Clean Code by Robert “Uncle Bob” Martin.
Q: The final question – what’s your favorite movie?
Great question! My favorite movie is Snatch! I’ve seen this movie almost a 100 times and I never get tired of it (even though I can recite it by heart).
Q: Thanks, Igal! Looking forward to working with you at the JetBrains Development Academy, and good luck!