Dev of the Week: John Sonmez
- 3 Easy Ways To Market Yourself as a Software Developer
- Getting Started With Google’s Dart Language
- Your Job Title Is Wrong, Here Is What It Should Be
Thanks for talking to us! What have you been working on lately?
I spend a good amount of my time right now creating courses for the online developer training site Pluralsight. I have created over 40 courses there on a variety of different technologies and topics. (http://psight.me/simpleprogrammer) My real passion is for teaching and helping people learn. I like the make the complex simple.
I am also working on a top secret product that will help developers learn to market themselves in order to get better jobs and advance their career. I've actually started a sign-up list here where anyone who is interested can sign up to find out about it when it launches.
In addition, I'm doing weekly YouTube videos about programming and career advice, with a motivational sort of approach here: http://youtube.com/jsonmez
And I've recently started a podcast about programming and fitness called Get Up and CODE!
You write frequently about Agile development -- could you tell us a little bit about your experience with Agile and how it contributes to your success as a developer?
I really first started getting interested in Agile when I started learning test driven development. I was very interested in what Kent Beck was doing with the whole eXtreme Programming. I started adopting Agile on all of the projects I was working on and really helping to bring it organizations that were having lots of problems getting features out the door and getting feedback.
To me, the big benefit of Agile is feedback. In software development, no one knows what needs to be built. Everyone has ideas of what it should be and most of those ideas are different.
But, when we take an Agile approach where you are delivering a product in iterations with quick feedback cycles, it helps everyone to see what really should be built and be able to make course corrections and changes before too much effort is spent going down the wrong road. It is also very encouraging an motivational for everyone involved to see actual progress and deliver value as soon as possible.
Are there any particular developer tools or resources you couldn't live without?
My answer to this question is a bit strange, but it is the internet.
How did we ever write code or learn new technologies without the internet?
I think many developers take this huge library of all the world's knowledge for granted, because they are so used to it today, but I remember a time when you had to learn how to program by reading poorly written books. I remember learning C by essentially reading a reference manual for the language. The learning curve was steep, because I had very few sources of information and I couldn't look up answer to my questions.
Today, I can learn a new technology and even programming language in a week or less, because of how easily I can find the answers to my questions online. There is a vast amount of information available to developers today which give us the ability to "stand on the shoulders of giants."
One of the reasons I write blog posts is so that I can help contribute to that body of knowledge, because I realize how valuable it is.
I really like DZone, because it is a great curation of so much of that valuable information.
Do you have a favorite open source project (or projects) that you've contributed to recently?
I really like ServiceStack, which is a .NET project that makes it really easy to create a web service, especially a REST based one. It also has many other components that are very easy to use for creating a web application or API in .NET.
I've added some minor code to the project and I have done a training video on it at Pluralsight.
Google's Dart language is also very awesome. I was a bit opposed to it at first, but once I started using it, I realized how productive I was with that language and platform.
Do you follow any blogs or Twitter feeds that you would recommend to developers?
I follow Scott Hanselman's blog, because he always has awesome information about many technology and development topics that interest me. I also follow Alvin Ashcraft's Morning Dew to get a nice list of stuff happening in the .NET space For unit testing and really great design advice, I highly respect and follow Mark Seemann. There are a few others that I subscribe to as well, but much of my reading today comes from when I find on Hacker News or Reddit. Some of the blogs I used to follow are not updated very frequently like Jeff Atwood's Coding Horror blog. I think this is unfortunate though because blogging is so beneficial. I don't think the medium will be replaced anytime soon.
Did you have a coding first love -- a particular program, gadget, game, or language that set you on the path to life as a developer?
I actually really got into the idea of programming when I first started playing MUDs or Multi-User Dungeons online. MUDs are basically early versions of World of Warcraft and games like that, but they were completely text based. I wanted to be able to create my own MUD, so that I could design a MUD to operate how I wanted it to. I ended up downloading the source code for a MUD and learning C as I modified it and hosted my own MUD for a while.
That experience made me realize that programming was the ultimate form of creation we could experience in this life. There was no limit to what you could create if you could learn to program.
I've always secretly wanted to program video games, but I've never really gotten around to it, because I have been so busy doing everything else. I've created a few games and even created courses on game programming, but I'd like to someday really devote a larger amount of time to it.
I always joke that when I "grow up" I am going to be a video game programmer.
Anything else you'd like to mention?
Just some advice for new developers starting out and for developers looking to grow and improve their career:
The world of programming and software development can seem intimidating. So many different technologies, so much to learn, but don't worry. You don't have to know it all and the more you learn, the more you will realize that everything is just a variation of a few core things. There hardly is every anything really "new." Instead the pendulum swing back and forth, ever moving forward as it does. The old becomes new again, the new becomes old again.
Focus on a single stack. Make sure you can build an application end to end using some set of technologies. This will make you the most valuable and give you experience with all the parts of a software system. Mobile is a great opportunity to be able to build real applications that are small enough to be created by a single developer and can be a great learning experience.
Most importantly though, check your ego and help others. As software developers we need to stop sending the message software development is complex. Yes, I know it takes practice and there is a volume of information to learn, but in reality software development is easy. Once you learn to break things down, just about everything becomes simple. It is a matter of learning to break things down. Don't be afraid to help others, because you fear that it will in some way diminish your own value or make your accomplishment or knowledge seem less. Instead, help others as much as possible and you will truly become valuable. You will find that you learn and are enriched by helping others more than any learning or practice you could do on your own.