Developer Story: An adventure of a young developer in Riganti

Published: 12/1/2017 1:15:00 PM

Hi, my name is Patrik and I want to be (not just) a .Net developer. I´m working at Riganti for almost 1 year and occasionally I study on BUT. Today I am going to tell you why programming is my passion. In my nature, I am a very curious person and programming is exactly the position for people like me. You can explore new things every day, and there will be always so much information you don’t know. So, here is my adventure of a young developer.

Everything started in January 2016, when I was writing my bachelor thesis on “Model-View-ViewModel design pattern in WPF applications”. When I was procrastinating, I found a framework called DotVVM. I was really impressed by the thought of writing almost the whole web without JavaScript, with .Net in C# and with the MVVM pattern. Nowadays, I hate JavaScript, because my only experience with this language was a web application which I worked on from 2015 to 2016 in my previous job. A junior .NET developer who works in the rich environment of Visual Studio is spoilt, with great intellisense and debugger. It was really painful for me debugging JavaScript in browser developer tools and it caused me some debugging nightmares.

In my last semester of the bachelor degree I chose an optional subject called XMW5 which was lectured by Martin Dybal and Roman Jašek. The practice exam from this course was to create a WPF application. During the deployment of the application I went to consult it a few times, which was very interesting and informative to me, and these guys gave me a job opportunity. That time I said no, because I was studying, and I didn’t have time for work. But then I really started to care about programming.

After my bachelor study I wrote an e-mail to Martin Dybal, and I asked him if the job offer he gave me before was still valid. His answer was quick “Yes. When do you have time for a job interview with Tomáš Herceg?” So, in the evening I had a call with Tomáš, I proudly presented my “awesome” application, which, by the way, loaded the whole database into business layer’s facade, called .ToList(), then sorted and filtered it. The result was sent to a higher layer of application. And, of course, the class had over 1000 lines of code. Now I know it was terrible, but as James Joyce says: “Mistakes are the portals of discovery.”

At the interview, Tomáš appreciated my multitier application, but he told me about some mistakes which he had seen in my application. After this quick “code review” he asked me when I was able to enter for a job.

Nowadays, I’m proud of being a part of Riganti’s team in which there are very inspiring and creative people, who you can turn to about everything. After one year at this company, I have learnt many things about software development, such as architecture, best practices and patterns and, of course, I got an overview of many technologies. And DotVVM is one of most interesting technologies for me. Why? Because DotVVM is very simple to learn and powerful at the same time. I know that it is impossible to work out all the kinks, but you really appreciate this framework when you create more complex applications.

The first time I have met DotVVM in the real-world application was a project for an American customer and my task was to create custom UserControl with code behind, called ProductCarousel. This control knows how to load data from the facade with delegate and it can do paging as well. In retrospective, it was easy for me, who had never used DotVVM before, to type a control like this.

After successful completion of the control, guys asked me if I wanted to work on BusinessPack. I said I would, because I really like new opportunities. So, my first experience with creating a public control was TextView, which allows you to display multiline text and find links and mail addresses and converts them to hyperlinks automatically. The text in the control is HTML encoded to prevent XSS attacks. While writing this control, I was discovering typescript, DotVVM control “HTML tree” API (which Dušan described in this blogpost) and I used my theoretical knowledge about regular expressions in practice. After this “little” control I created the MaskedTextBox control which allows you to enforce users with a specific value of input format. You can create your own KeyValuePair<char, MaskPattern> to specify a pattern for char. Object MaskPattern contains 2 regular expressions – client (JavaScript) and server (C#) definitions.

After these controls, a great control GridView came, which is the most complex control in DotVVM framework I know about. My task on this control was to rewrite it to our new “HTML tree” API. Deploying of GridView is difficult, but you want to keep the control API simple, customizable but utilizable for many usages. We often have discussions which take hours about a property or method name. Sometimes, rewriting a control was very stressful, sometimes it took hours spent by debugging JavaScript on the client side, but after all the obstacles, GridView is now using this new API which allows us to add new features or fix issues easily. I know that I wrote that, I don’t like JavaScript, but the whole DotVVM team overcame this disinclination, and developed controls like this for you, so you don`t have to type JavaScript/TypeScript yourself.

If you find any bug or inconsistent behavior, please contact us on gitter. If you prefer personal contact, or you would like to find something more about this framework, come to one of our conferences and you can ask us everything you would like to know at the DotVVM stand.

Patrik Švikruha