Five Things That Will Help You Become a Better Software Developer
Computer Science is built on many core concepts such as algorithms, data structures, programming paradigms, network communications, database persistence, etc. Colleges usually teach you enough to understand the concepts and the lessons operate on a very theoretical level. The lessons don't necessarily teach where or how to apply them. Here are some things that you can learn today to help you put those concepts into practice.
You don't have to become an expert, but tinkering enough to get a good understanding will go a long way for your software development career.
Video Game Development
Video game development is significantly different than line of business programming. And many of the game concepts will not likely ever be implemented on a line of business application. Game actions occur in real time and lead to a different way of thinking about programming. One thing game development will do is help you see deeper into computer science.
Video games will challenge you every step of the way. Making things move and interface with each other while accepting real-time input from the user will allow you to see a different side of programming. Who knows, may be it will even lead you to a new career.
Micro-controller programming such as Arduino development can help you get a deeper understanding of how electronic components talk to each other. You get a better idea of how electronic pulses turn into bits and bytes. It is very different than line of business applications because components have to work in real time.
Micro-controller programming can help you get a better understanding of how electronics tie into software applications.
The reality is that that deep down inside processors, network interface cards and hard drives operate on a real-time basis. The real time concept is buried deep within frameworks and APIs. However, micro-controller programming will help you get a better understanding of what goes on behind those abstractions that we work on a day to day basis.
One additional advantage of micro-controller programming is that if you ever have a big idea you can easily prototype it. So go ahead and give it a try, it's easier than you might think. The Arduino website has all the basic programming tutorials and examples to get you started.
Command Line Interfaces
Command line interfaces have a unique way of handling processes. Command line programs handle some very important tasks. In fact most of the programs that handle the heavy lifting for your web application are likely simply tasks that interface only on a programmatic level or a command line level.
One way to get better at learning how to create command line interfaces is to use them. You can try playing around with Unix and Linux systems to get familiar with CLIs. Apple OS X is a Unix system and as such it has a command line that help you practice your command line skills. DOS can help you understand the windows side of programming CLIs, although DOS is not as sophisticated as the UNIX/Linux command lines.
One of the most popular command line shells is the BASH shell. Here is a good tutorial to get you started. If you have windows and don't have a Mac, Linux or Unix box, you can also try installing Win-Bash which will allow you to use BASH right from the Windows Command line. Another option for you to exercise, if you don't have a Linux box, is to go virtual by installing Virtual Box and installing Linux on it.
Building Secure Software
Security is one of the biggest problems facing the software industry currently. Every week we learn about a new business that was hacked or breached. Target, the U.S. Personnel Office, Ashley Madison, the list goes on of major systems that have been breached. Building secure software is not an option, it is a necessity. A good start for learning about building secure software is the OWASP.
As you read through the OWASP you will find that the lessons in the OWASP lead back to good programming practices as a whole. In addition you will learn about some things that are not taught in school such as SQL Injections and Cross Site Scripting (at least I they didn't teach that 15 years ago when I attended college).
All systems eventually age. Sometimes organizations end up with multiple systems. The needs of the organization require one system or application to talk to another. There is a documented and accepted set of patterns to help you tackle this difficult task. That set is known as the Enterprise Integration Patterns.
Many frameworks exist help you with this challenge such as MSMQ, Rabbit MQ, NService Bus, etc. At some point in your career you will need to connect one system with another. You should at least have a beginner level understanding.
One great resource that I acquired lately and that gives you a good understanding at a high level of messaging is Derick Bailey's RabbitMQ For Developer's course. This course is better for getting an understanding of messaging and its importance in application development.
I hope this short list has helped you. As always please follow me on twitter @fernandozamoraj. I encourage your to comment below and add your list of things that you think are beneficial to a software developer. Please enter your email below to receive the latest updates from my blog.