8 steps to become a professional software developer

So you want to become a professional developer? In this blog post I have put together a list of 8 things all professional developers should know.

1. The syntax

Start learning the syntax of the language you want to be a professional in. You need to have comprehensive knowledge about the programming language syntax . It is not enough to just know IF and For Loops. That won’t make you a new Jeff Atwoods or Jon Skeet. Spend time to really understand the syntax well, how you can use it to accomplish your will.

Learn how you work with objects and types, how inheritance is used in the language. Generics (if supported) is also important to know and understand. You have also arrays and collections, operators, casts, delegates, lambdas (if supported) and events. Other important parts of the syntax is string manipulation e.g. regular expressions and how you can use regular expression patterns to manipulate strings. You have memory management (and pointers), errors and exceptions.

Learn the tricks professional software developers use in their work. There is a lot of “shortcuts” in the syntax. For example, the one-line if statement in some languages, (expression) ? “value if true” : “value if false”. There is a lot to the syntax. Learn it well!

2. The framework

Equally important as the syntax is the framework on top of the syntax. It is in the framework the logic happens, the syntax itself is just instructions of how to use the framework. For example the framework lets you read and write files, manipulate images, using network sockets, messaging and much more. A good understanding of the framework you use is as important as knowing the syntax, they go hand in hand. Without the framework there is not much you can do with the syntax.

The whole framework is a very big chunk of knowledge to put in your brain, so it might be a good idée to split it up a bit. Of course you need good knowledge about the core classes and types that is used or inherited throughout the framework  but for example, if you are a web developer, focus on the namespaces (classes / types) that is most targeted against web development. I do not say you only need that part of the framework, but you might not need to know every details of the image manipulation namespace (classes / types) if all you do is developing dynamic web pages (this argument of course rest upon the fact that you do not develop a web page that manipulates images.). You are smart, you get the point I’m trying to make.

Also remember there is most likely a good documentation some poor developer or technical writer have posted somewhere on the internet just sitting waiting for your eyes to read. Use it!

3. The IDE

So you have a solid understanding of the syntax of your programming language and know a lot about the possibilities and limitations of the framework. To make it easier to craft your software, you need to have a good IDE (Integrated Development Environment). An IDE is like a lengthening of your fingers, you should know how to use it even if you are asleep. Know the hot-keys for faster and easier access to functions. Know the limitations of the IDE, where you need to install a plugin to the IDE, or use external tools, maybe even build you own tools for the job. There are a lot of good IDEs out there, e.g. Microsoft offers Visual Studio (and WebMatrix for simple ASP.NET development) for their .NET Framework, while you can use e.g. Eclipse for Java, PHP and C/C++ and other languages. Of course there is more to choose from. Use the one that fits you, and learn it well.

4. Design patterns

Design patterns is a programming pattern you use to solve common programming problems. There is three categories of design patterns, creational patterns, structural patterns, behavioral patterns. You also have a forth category, architectural design pattern that may be applied at the architecture level of the software. When you work on a project there might be problem you comes across that other, smarter (just kidding, you are the smartest, that’s why you read this post?), people have solved before you. Why would you invent the wheel again?

So if you are going to to put the title professional developer under your name, you must be able to back it up with some design pattern knowledge. Of course you can not solve all problems just by throwing design patterns at the it. But you can solve a lot of them.

5. Testing & Debugging

Testing and debugging is a very important part of todays (and yesterdays) software development. With the tools available for us today it has become easy to do the same testing that where only done by enterprise development teams just a couple of years ago. Also with new programming methods using Agile practices like Scrum and XP it is now very important to have good test in place if you should be able to ship software fast, without compromising on quality. But what do you need to know about testing and debugging to become a professional developer?

The first and most important (all testing is important but it’s a nice way of starting a sentence) is unit testing. This means you write a test to every method and function you develop. So when you need to change some part of the system you can validate that the software is not broken by running your unit tests.

The second thing that is important is Integration testing. This is the part you test after all your unit tests have validated. This is where you combine you modules and test the integration between them.

Then you need to know about System testing, this is the part where you test the whole system. If your application also have a GUI (Graphical User Interface) it would be a good to know how to test the GUI to.

When all your testing have validated and a user reports a bug, you need to be able to debug your software. And because you have read 3. The IDE you know how to debug software with the help of your IDE. Learn it, use it!

6. Source control & Deployment

You are not a professional developer if you x-copy you source code to production and hope for the best. Or as Scott Hanselman and Rob Connery do it, using Dropbox to do some pair programming (delete the last, they are professionals, that’s what they say at least). You might consider yourself a pragmatic programmer that solves the damn problem, but there is better ways of solving this damn problem. A professional developer uses source control (also known as revision control or version control) to store the source of your development projects. When working in development teams (all developers in development teams are professionals right?) it is essential to have a centralized storage for the projects source. Then everybody in the team have access to the latest source and can check in changes to the source code. Even if you are a single developer you should use a source control system. It is also easy to keep backups of your source.  “The cat ate the source code!” is not a valid excuse to a program manager or customer.

With todays source code system you have a lot of built in support for deployment, you can have daily or weekly builds automatically deploy to a staging server and reports on the output result of those build emailed to you. This is a good way of having control over your projects. There is a lot of good functionality in a source code system and you need to know how to utilize them.

7. Infrastructure

Are you developing software in vacuum with the purpose of never being deployed and run on hardware? If you do, you can jump this, to the others, keep reading. All professional developers should have a good understanding of the hardware and operation system the application will run on. For example, if you are a professional developer developing a website in ASP.NET would you thing you would be a better programmer if you know anything about Windows Server, IIS, HTTP and DNS? I bet you would. Maybe your network communication software would perform better and more stable if you know about how the TCP/IP works? It might even be required to get it running. Know your infrastructure!

8. Documentation

For many developers this might sound boring and time consuming. And yes it is, if you don’t know how to do it! Starting with a blank Word document is never a productive way of get things started. There is basically five types of documentation for software.

  • Requirements -  Statements that identify attributes, capabilities, characteristics, or qualities of a system. This is the foundation for what shall be or has been implemented.
  • Architecture/Design – Overview of software’s. Including relations to an environment and construction principles to be used in design of of software components.
  • Technical – Documentation of code, algorithms, interfaces, and APIs
  • End User – Manuals for the end-user, system administrators and support staff.
  • Marketing – How to market the product and analysis of the market demand.

A professional developer might not need to master all the five types of documentation but one should know how to write Technical documentation and Architecture/Design documentation. Most IDEs can help with documentation, e.g. extracting code comment and class header comments and parse them into a readable document. Using the IDE and other tools, documentation do not need to be a boring, time consuming necessity, but instead a great way to be a more professional developer, automate the documentation as much as you can. Then the documentation will “come for free”.

 

This 8 things is what I believe all professional software developers should know. You might think different, and if you do, please let me know in the comments below, I might argue against you or update this post. Just comment.

One more thing, it might be the single most important thing, that all professional developer needs is experience.

Follow

Get every new post delivered to your Inbox.