My experience on becoming an Umbraco focused .NET developer after being a Symfony focused PHP developer for over ten years.
Moving into a new field of work can be daunting, even when it’s closely related to your current field of work. When I was asked if I was interested in becoming an Umbraco focused developer, after being employed as a PHP developer for over ten years (of which over 5 years here at ilionx), I was enthusiastic but extremely insecure and hesitant at the same time. I assumed it would be difficult. Same as I, as a native Dutch speaker, can’t just learn German overnight despite the languages being similar, I doubted if I could really just learn a new programming language.
Focusing on .NET
I started by doing some self-study, focusing on .NET, but instantly ran into the first roadblock. .NET beginner courses were too easy. I had over ten years of experience in programming, I knew what a string and an array were, I knew what classes and interfaces were, I just didn’t know the correct C# syntax. On the other hand, advanced .NET courses were too hard because I was missing that base syntax knowledge. It was frustrating, to say the least, and there were times where I questioned if I could even do it.
Frameworks and CMSs weren’t new to me either, I had plenty of experience working with Symfony and building my own CMSs on top of it, and had worked with large pre-built CMSs such as Drupal and WordPress on numerous occasions. So, because my self-studies on .NET basics were both frustrating and boring me, I decided to stop these courses and skip ahead to my end goal: Umbraco. I didn’t know C# or .NET, but I knew CMSs, so I figured perhaps I could start there and approach the studies top-down instead of bottom-up.
Focusing on Umbraco
Admittedly, my view on pre-built CMSs was poor because of my previous experience, knowing them as inflexible, slow systems which come with countless features installed which one doesn’t actually need. I installed Umbraco with low expectations, but found myself pleasantly surprised, both by the CMS itself and by how easy it was to get it up and running. In literally minutes, I had something tangible I could play around with, with both the Umbraco CMS backend fully functional and the underlying source code to explore since it’s an open-source project.
The fact that I, with extremely limited knowledge of C# or .NET, could get a whole website up and running in minutes using Umbraco gave me a boost of energy, and from that point on I basically threw myself in the deep end and started helping my Umbraco colleagues out with their projects. And, surprisingly, this went well.
Whereas before I’d been lost and overwhelmed by the amount of knowledge I had but was lacking simultaneously and trying to figure out how to bridge the gaps, by learning through Umbraco it gave me structure and bite-sized pieces. Instead of starting from scratch somewhere I had a task to work on, e.g. implementing a new property editor, and I could use this as a guideline. Instead of worrying I started just working on it, and I learned along the way.
Adding a new property editor requires adding new templates, so that forced me to look into how Razor works opposed to the Twig I was used to. It had to create an API endpoint, which had me exploring the Umbraco docs to figure out how their controllers worked, and I found I learned the basic syntax I’d been stumbling over along the way by looking at how Umbraco did it in other portions of the application. When you’re actually playing with the code and seeing working examples, it’s suddenly not so hard to figure out how a List works and how it differs from PHP’s arrays.
Same as with learning a new regular language, learning the basics from a textbook is good, but nothing will have you learning as quickly as moving to a country where the language is spoken and surrounding yourself with people who speak the language. I threw myself into the code and surrounded myself with people who knew the language, and in no time at all I was up and running as a full-fledged Umbraco developer. Just a month or two later, I took on my first Umbraco project as lead developer.
Practice is the key to learn anything
Do I still stumble over some basic syntax? Absolutely. Do I still need to check the Umbraco docs or ask for help? Daily. However, every time I do so I learn some knowledge which I can immediately apply, which makes the knowledge stick, instead of learning random syntax and then having forgotten it again by the time you need to use it.
My view on CMSs has changed entirely in the process, and I suppose you could call me an Umbraco fangirl at this point. The system is light-weight, well-structured, doesn’t come with any unnecessary features out of the box but is easily extendable if you do need them. Making a website multilingual was a nightmare in the CMSs I’d previously worked with, but Umbraco does it out of the box.
The community is active and enthusiastic, so assistance is easy to come by and bugs are fixed quickly. Since it’s open source you can also submit your own fixes and features, and they get reviewed quickly instead of being shelved for months to be forgotten. There’s training and courses hosted by Umbraco themselves, which served as a fun way to guide me through the more complicated parts of the system such as Search Indexing.
Just do it
I guess what I’m trying to achieve with this article is take away some of the insecurity of other developers considering to switch languages, who might’ve been in the same position as me where they stumbled over the frustration of being kicked back to being a junior after being a senior for years. Our way of learning a new language isn’t going to be like the trajectories described online, since we already know the “grammar” of the language but need to learn new “vocabulary”. You need to find your own way, and if that’s by doing things the wrong way around than that’s perfectly fine.
If you have the programming basics down, then you’re never too old or not competent enough to learn a new language. The best advice I can give you: Just do it!