During my career as a Microsoft Certified Trainer, I’ve been training .NET software developers and Windows system administrators – usually they were well established professionals longing for more knowledge and ready to purchase a training course instead of a car.
But there were people, and they still appear regularly, who suddenly make a decision to become a software developer. Either it’s because they were ignited by the idea and believed in own capacity of writing new software, or out of curiosity or any other reason – be it money, prestige or worrying about own future.
So this post is for such people. If you are considering to become a .NET software developer and wondering what should be your first step – I will do my best to explain it right now. If you are seasoned .NET software developer, then perhaps you won’t find much useful information here, but you’ll have a link to give when someone will ask you that question – “I want to become a software developer, what should I do?”.
Step 1. Make up your mind.
For now you are either curious or determined to become a software developer. I am not saying – “Windows” or “Linux” or perhaps “Android” – at this point your future alignment is irrelevant. And so there is a list of questions you need to ask yourself and a longer list of irrelevant questions asked frequently in various discussions.
The worst question you can ask is mentioned above – what should you do if you want to start a path of software developer. It’s worst only because it’s very unspecific and the quality and relevance of replies you’ll get really suffers. Instead – ask yourself one question first:
Why?
Why is it so that you've made this decision to become a software developer? Do you have a system administrator career behind and you think you should dive deeper? Is it because your analytical skills won’t let you sleep? Is it because you have wonderful ideas and need to learn how to use all these tools programmers use to create perfect pieces of computer software?
Reasons could be more prosaic, like – you believe that software development is the most stable and profitable of anything you could do in Information Technologies. Don’t be afraid to answer this first question honestly, as it will help you to decide your first step on becoming a software developer.
Most people I’ve met, who wanted to become software developers, were studying system administration and just found it “too simple” or “not deep enough” for them. They felt the mental capacity to dive into the inners of technology and overall found it interesting.
Did you know that only 1 of 100 people could become a programmer? And not everyone of them could make it to software developer.
According to research, only 1 out of 10 people could craft a computer program. And only 1 of 10 such people could feel desire to do so. Unlike lots of other professions, this one is very demanding for both – natural skills and mental predispositions.
According to Forbes, software developers become the most precious resource in IT for years to come. This is scary to both business owners and you, as this means that not only businesses will get every possibility to hire software developers, but also a lot of people incapable of doing high quality software development work will waste their time on becoming bad to average programmers. This won’t pose any risks for established developers, but it will make it harder for you to enter the path, as the quality of newbies will lower and in the beginning you will inevitably be considered as one.
Is it the prestige of profession that drives you into this direction? The fact of the overwhelming concentration of software developers among the millionaires and overall public perception change during last years may lead to wrong conclusion that all you need is to learn how to code. Besides, it is truly paramount.
Bill Gates, Steve Jobs and Mark Zuckerberg were really good developers, but it wasn’t only their talent as software developers that made them rich and famous. Bear that in mind for a future reference.
As a side note. Some parents are trying to make programmers out of their children. There are courses for children where they learn basic stuff whether they are interested or not. Trying to enforce learning is among the worst things you can do to human being. Don’t.
As you can also read from the Forbes article above, software companies are preparing contests and various events to engage children in software development. If you are parent and think about opening this path for your child (even though it’s up to him to decide whether he will walk that path) – just facilitate his learning if he expresses the will and desire to learn. Buy him a computer (careful about alignment here! PC vs. Apple is never as important question as when you’re buying the first computer for your child!), books and pay for his certification exams. But never demand – free will is paramount in entering the path of software developer.
So, let’s hope you can answer yourself about why you decided to become software developer and not somebody else. If your consideration is genuine, let’s proceed from why to how.
How?
Now, let’s talk about alignments. Yeah, I know it’s not a real “how” yet, but that’s what makes the “how”, as the methods of becoming a software developer are as different as alignments are.
And by alignment I mean the platform you are choosing as the base of your career. What you’ll choose will be hard to switch, although not impossible. When you are established developer of one alignment, it’s not an easy decision to abandon part of your hard-earned knowledge in favor of something unexplored. It’s easy to choose when your mind is open and blank.
So, what is it? Microsoft? Apple? Linux? Any derivative of Linux, like Android? Or even extending existing product using some weird lingo? Again, this is a question which depends from how you’ve answered to the first question – why.
If your only reason to become software developer is to earn money – then perhaps you should develop mobile apps. Even though very cheap – a dollar or two per piece, a successful application could be purchased millions of times. Even better – your application could remain free but be advert-driven, so even more people would be able to download it, providing stable income from advertisements. However, there are few pitfalls.
The first one is in diversity of mobile systems. It’s not like you write application in one language and it is suitable for all. You will have to port your software from one platform to another and this requires knowledge. And this means that you should aim at the most paying mobile platform, so it could earn enough to hire other developers to port your killer app further. And this means – learn programming for iOS.
In order to create software for Apple’s iOS, so they would run on iPhones and iPads, you should either write in Objective-C language, or use MonoTouch platform to write in C#.
If you aren’t going to sell your mobile application, but rather stake on advertisements, then Android is the best market for you – there are more devices that uses Android than ones with iOS, for a simple reason that iOS can only be installed in mobile devices produced by Apple, while Android apps are working on all others. For Android, the native language is Java, but again – you can use MonoDroid to write Android applications using C#.
And for Windows powered mobile devices your best choice is to use C#. So, what would you choose – learn 3 languages and 3 development environments, or learn one language and one environment?
When developing software for mobile devices, you should be prepared for investment. The development environments could be free, like Eclipse, or functional, like Visual Studio. In either way, it’s optimal to use one environment for anything you do, to avoid frustration. Mentioned MonoTouch and MonoDroid are not free either. But what you should fear most is that you’ll need devices in order to test your software on them. Of course, there are good emulators for mobile devices which you should use for debugging, but ask anyone who’s in serious business ™ of mobile applications development, and they will tell you about multiple physical devices on which they test their software before releasing it.
Of course, you will need it “later”, but beware that your software couldn’t be considered safe and stable until you test it on real equipment.
Another way to produce platform-independent mobile applications, is to… not produce them. Instead, you could make them web-based, like small Java or HTML5 applications downloaded from your website and all your application will have – a container for web browser. That way you will have control over the design and updates of your application, see the real use of it, maintain the same user experience and have many more advantages. If your idea is requiring internet anyway, perhaps that’s the way to go. But this will require a bit different skillset. While it’s easy to write a web browser container for any operating system / language / environment, you will have to create the application on web server (either HTML5 or less preferable Java) and, well, some knowledge of web programming will be required.
And web development is another song. While you can write your websites in the same Visual Studio environment where you can create your mobile applications, and even though you will use the same C# language, you will manage different objects and work with different environment – compare it to the hospital, where in one building you can perform things from scratch handling to brain surgery – one environment, one language, totally different approaches.
In case of web development, the way to go is HTML5 for sure, when talking about the client side. Besides that, you need to learn the server-side platform, and although you can yet again learn additional language like PHP, Perl or Ruby, you can go C# and write great ASP.NET applications. And if your client applications will be C# / .NET as well, then using the same server-side will greatly boost your productivity and reliability of your solution.
If mobile applications developers should know mobile devices, programming language and, of course, best practices for mobile applications development, web developers should know more of other stuff.
As ASP.NET web developer, you should perfectly know:
- Your programming language (C# or Visual Basic .NET, for example)
- ASP.NET (it’s not a language, it’s platform)
- Internet Information Server since version 6 (Windows Server 2003)
- HTML4 and HTML5
- JavaScript and Ajax
- Some web design concepts – as more as better.
- Some graphical editor – at least Paint.NET or similar.
- Search Engine Optimization concepts.
- Multimedia concepts – how to stream multimedia using IIS, how to encode video and what is the difference between interlaced and non-interlaced JPEG, for example.
That’s a lot of stuff to learn. If you are “complete zero” in each of these – consider about one month of training for each of them – some will take more, some – less.
The great part about learning C# and ASP.NET is that there are training courses developed and available for any initial level – from zero to professional. Even if you are professional Java developer, there is a course for you which will explain the concepts of .NET from point of view of Java developer.
However, I’ve seen almost no training courses for mobile applications developers aimed at newbies, although there is ongoing work and you should google for it, they must be available in 2012 and later. And that means you should begin from the basics of language, then move to the base platforms and then – to mobile. But, good news for those aiming at applications and web development – there are courses aimed at newbies, and very successful ones.
Let’s talk about training
One of the misconceptions among those not affiliated with IT, is that you should go through some sort of official training in order to become specialist. But that’s totally wrong. You don’t have to.
If you’ll excuse me, I will speak about training for Microsoft technologies, like C# and ASP.NET, as 1 – I am professional in this area and 2 – there is a definitely bigger offering at the market for training in these technologies. However, with some deviations, it could be applied to Linux world as well, at least the concept.
So, if you are at the level 0 and you need to get a job of software developer as soon as possible with little money investment – what should you begin with?
First thing to consider is the way you learn. Or how are you smart. Would you prefer a living classes or interactive video course? Or, perhaps, a well written book and interactive labs would make it easier for you to understand the subject? Depending from your attitude, you should choose the way you get the information, but one thing doesn’t change is what information you should get first.
The best way is to follow the path designed by the creator of technology. And in case of .NET, it’s Microsoft. According to Microsoft, and their defined certification path, the first step should be preparing for the exam 70-636: Microsoft .NET Framework - Application Development Foundation. It’s worth mentioning, that you don’t have to pass this exam, even if you’ll pursue the Microsoft certification. This exam is a prerequisite for certification for .NET framework 2.0 or 3.5, but is not included in the list of exams required for .NET 4.0.
The reason to set it as your step number one is because it includes bits of all the topics covered by .NET, including C# language, web development, application development and even mobile concepts. It’s perhaps the most difficult exam in the line, so don’t aim at passing it. Besides, you should acquire exam preparation materials, such as book and / or video course.
I will list the required materials in the end of this post.
Official training
I would be careful about going to official courses provided by Microsoft authorized training centers. I know, it sounds like “bees against the honey”, but nevertheless. The problem with official courses using Microsoft Official Curriculum (MOC) are that each course is maximum 5 days long and sometimes it’s hard for the trainer to even read it in time – some curriculums are about 1000 pages long and that means trainer should cover about 200 pages per day, or up to 30 pages per hour, including all labs and questions. Sometimes it’s just not feasible.
Also, training in any training center is not personal, so you will get as much as trainer will be able to present in predefined time and level of personalization is extremely low.
There is a training network called “New Horizons”, where training is mainly based on pre-recorded videos which you can watch about 2 times per week in a 2-3.5 hours sessions and then ask questions to trainer who is sitting in the class with you. Well, the problem here is that there is no guarantee this trainer could give you anything more than this video course, if anything at all. And you can get the video course without any training center involved.
You can’t buy MOC without buying the lesson, because Microsoft cares for quality of training. There are some brilliant trainers who can teach you personally as no one else can, using that same MOC as the base material. However, a much less expensive option is to purchase a book at Amazon or any other book store, and even better – a video course.
There are basically 2 types of official courses you can participate in. First is – Microsoft’s official training center. That’s the company which is Microsoft’s certified partner in learning solutions (CPLS). They have right to train courses as long as they have a trainer who has competence and right to train a particular course. You should always ask for trainer’s profile before signing for the course.
Second organization type is so called “Microsoft Academy”. That’s the lowest level of Microsoft’s training centers and basically is a university or institute with right to use MOC in their training. The difference between normal CPLS and Academy is that at the latter the price could be much lower, but so is the quality.
Learning by yourself
As a trainer, I believe that the most valuable thing you get through the guided learning process is the ability to learn by yourself. To guide your training and manage your time and other resources. While it could be hard during the first time, it becomes more and more easier with each new course you take.
When Microsoft decides there should be training for a particular product or technology, first thing it does it creates an exam. After that, trainer creates a training course, MOC, which is supplied to all other trainers. After that, technology specialists starting to write books on the subject. So, when we are comparing MOC and a book with exam name on the cover, the difference is that MOC came first and the book was written with desire to be better.
Whether author succeeded in writing a material better than MOC, or not, you can see by the rating at the book store. If there are many 5-star votes which makes overall rating of 4 stars and higher – this should be a perfect book to put your money on.
For example, this book for exam 70-536 got rating of 3.5 stars out of 5 at Amazon.
Does that mean the book is bad? Absolutely not! One of the reasons why such books get low rating is that some people expected some guru stuff but got disappointed when realized it’s actually aimed at helping novice software developers to succeed in what they do. And you can trust me, this particular book isn’t bad at all.
While there are books which aim at preparing you for the exam, some of them are trying to teach you a particular technology. One of the most famous series is “Unleashed” by SAMS. For example, there is no better material on ASP.NET than book by Stephen Walther. Here it is, by the way:
| ASP.NET 4 Unleashed I am reading this book since it’s first edition, which was about ASP.NET, then about 2.0, 3.5 and now about 4th edition of ASP.NET. The book is huge, but is fun to read and it helped me a lot on my first complex ASP.NET solution when I had to use virtually everything this book is about. I should buy a subscription or something. |
Books are great, they are needful and sometime irreplaceable. They provide you with most of the theory and after that serve as fast offline reference material. However, they are not supposed to be everything you need.
Another great source of free materials is YouTube. Considered to be 2nd most popular search engine in the Internet, YouTube contains many hours of training videos on lots of subjects, including development, testing, deployment and administration of software. While the premium quality content is rare there, the price vs. quality ratio is great.
For premium quality video training, you can visit AppDev, Train Signal, Linda, Career Academy or in worst case scenario – CBT Nuggets. Usually they provide some sections of each course for free, so you could evaluate them before buying. Sometimes it’s hard to swallow the course just because of the manners of the trainer, so always look at the demo even if you are desperate to get any course on the subject.
As the rule of a thumb – watch the video first, then read the book. If you have them both, of course. When during the lesson you encounter new term which you don’t understand – don’t search for it right over, wait till the end of the lesson. If you didn’t get that new term after the lesson is over – look at the book or google for it. It’s like asking your trainer a question – you should do it in the end.
That’s good for the theory. However, it’s clear you need some practical knowledge and experience before you are either prepared for the exam or your first job as a software developer.
Practice is golden
In old days we had some flash-written labs – well, we have them now as well, but they are not as common – where you could see a screen shot of researched application with couple of interactive spots so you could interact with it. Some Microsoft Office apps even could run the real application and perform some checks on what you do. However, it wasn’t possible to simulate anything more complex than Notepad.
Official courses, on the other hands, always include virtual machines where the real software is installed. For example, I am using such machines when preparing my video training “labs” (see other posts for samples). While this might be a good idea sometimes to go to the training center and purchase lab time to fine tune the art of software development, it would be wiser to search for free ones first.
Yes, free labs are available. For software development ones, you can go to MSDN labs. There are absolutely free virtual labs on various platforms and technologies, including Visual Studio 2010 and ASP.NET and whatever else.
If you aim at mobile development, then you can enjoy free emulators. They are available for Windows Mobile, iOS and Android, you only have to download and run them. But beware, that such emulators are “ideal” environments, and end user’s mobile devices are not ideal at best.
Tools needed
Now, regarding the tools you are going to need from the very beginning. First is the Visual Studio, of course. Unlike the Eclipse (Development Environment for Java), Visual Studio comes at the price. Excerpt for the free Visual Studio 2010 Express edition, which will suit your needs during the training.
Now pay attention. If you are a student, there is a great chance for you to get Visual Studio for free. As was said in the Forbes article mentioned above, Microsoft cares about you becoming a Microsoft-oriented developer, so while you are young they can give you these tools for free. Google for it.
There is also a great chance of getting free software at Microsoft events for developers, so subscribe to alerts about upcoming events in your area.
Later you will find that you’ll need more tools to create software, like SQL Server. There are two editions of SQL Server which are totally free – Express and Compact.
First steps
- Get yourself a book on 70-536. See link above. However, check your local store first if your language isn’t English – it’s likely you will find it in your native language then. Practice shows it helps.
- Download Visual Studio Express. There is no need to buy commercial edition yet.
- Create your profile in Microsoft Passport. Use it to subscribe to mailing lists like MSDN Flash and Born to Learn.
- Using Google Reader or similar tool, subscribe to this blog
Seriously though, subscribe to blogs of trainers and developers who write in understandable language. - Do the same using Twitter. When they find interesting tools or websites, you should be the first to know! Subscribe to feeds of Microsoft’s evangelists – it’s their job and passion to get you involved!
- As the result of step 1 – try to pass that exam.
Employment
Yes, the hardest part and what we call the Return Of Investment. Sometimes people are wondering, what they need in order to enter the profession, to get their first job. I’ve been both training and hiring developers, so listen up.
First of all, if you’ve never been a software developer before, your first title could be “Junior Software Developer”. That’s a specialist just below a Software Developer, who’s in turn is below the Senior Software Developer, who’s below the Team Leader / Architect. You never know how long will it take to become a “normal” developer, but you shouldn’t think about it yet – your target is to become usable by software company. And how easy is that?
Usually software companies consists of busy experienced software developers. Some of them are so busy, they only heard that there is a .NET framework version 4. They are still using version 2 because, well, they “had no time” to learn anything new. And that’s good for you.
Most likely these companies are looking for someone, who’s familiar with technology they are planning to implement in the near future. That could be .NET 4, Entity Framework, Workflow Foundation 4 or whatever else. While not employed by that company, you have time to learn that technology and become proficient with it. With things that are so fresh as the latest version of .NET framework, real working experience is not too relevant. So don’t worry about that.
In my next post I am going to write about current Microsoft certifications. You should have one, it’s a great benefit. However, take a word of warning and take it really seriously – you should not cheat on your exams. No “dumps”. Not now, not ever. But especially not now. You can’t imagine the scale of damage to your reputation if during the interview, interviewer will find out you’ve cheated. For example – if you are an ASP.NET certified technology specialist, but you can’t enumerate types of caching that ASP.NET provides. Or if you’ve never heard about caching at all. Not only this company, but also the next one could refuse you, sometimes in the form of not reacting to your CV. So as the golden rule take this – use your knowledge to pass the exams.
In order to be employed, one certificate is enough. This will give a strong signal that you are interested in technology and ready to learn. Usually employers are paying for your training or at least examination. Some Microsoft Certified Partners, especially Silver or Gold level ones, even require their employees to be certified in some areas. So, for example, if you are trying to become an employee of some Microsoft Gold Certified Partner company, and they have a Software Development competence – that certification would be a significant advantage.
You can review the Microsoft Partnership status on the web site of potential employer and in their office while waiting for the interview.
I will write more about advantages of becoming certified professional in a post, dedicated to Microsoft certifications.