I'm a fan of John Sonmez. For the most part, he offers quality advice. There are two things that he constantly harps on and those two things resonate with me. Number one: you need to have a blog and write regularly. Now, I said it resonates, not that I have integrity. While I agree wholeheartedly with John when it comes to the value of this, I fall short when it comes to consistent blogging. But, I intend to change that as I follow along with John's blogging course.

The other major piece of advice John Sonmez pushes: become a specialist. If you have deep knowledge in a particular area of software development, you'll be much more valuable than you will be as a generalist. Think about that. If you were looking for a job and your main qualification is that you're a web developer, that's not a terribly helpful.

What kind of web development? It's such a broad category. You know HTML really well? Some CSS perhaps? You can sling server-side code using ASP.Net? Great, but that's too broad to make you stand out in terms of skill set. Having a general set of skills isn't a bad thing, it's just not something that's unique and a unique skill set is something special.

For instance, how many of us have put JavaScript on our resume as a bullet point? As a developer, you have to know at least some JavaScript. Most likely, you really have a cursory understanding of the most obvious JQuery API's and you know how to define a function (in global scope of course) but that's really the extent of it. But if you understand prototypal inheritance, if you actually understand what "this" means in JavaScript, you're starting down the path to specialization. Deep knowledge.

This idea of specializing has long been on my mind and I have a hard time deciding what to specialize in. But, I think I've arrived at a conclusion. I'm strongly considering specializing in Xamarin. There are many good reasons to do so, but there are also risks. I truly enjoy mobile development, but it's a big pain too. In terms of marketability, having deep knowledge of cross platform app development is very valuable.

Of course, I considered just specializing in iOS development. It's a great place to be. But, there's a lot of iOS developers out there. As much as I like Swift, I know that I'd have to learn Objective C if I truly wanted to have deep knowledge on that platform and I'm just not willing to work with that steaming pile of syntax. And then there's Android development...no. Just no.

But to me, and to many businesses with limited budgets, there's high value in the cross platform options. Many involve JavaScript, WebViews or native compilation, but none offer the value of Xamarin. It's truly native, C# is the language, the tools are relatively mature, it's well supported and documented, it's cross platform, Microsoft owns it and backs it, and the team that creates and supports Xamarin is very dedicated.

The risk is that, if I do specialize in Xamarin, I'm putting a lot of time and effort in a single platform. It could fail, I still have to learn the iOS and Android API's (no getting around that), Microsoft could decide it's not viable and pull the plug. There's a lot of risk, but, I think that's the case with anything. I'm willing to bet my time on Xamarin and I'm pretty sure that it will become my speciality.

What do you think about specialization? Do you have a speciality?