Shania Twain would have sung: ‘Ok, so you are a software developer in the IT industry? That don’t impress me much..’
The reality of software industry is that 9/10 times you will not get to work on the technologies that you are interested in. Even if you are lucky to work in the area of your choice, chances are that you may be working on the older versions of the technology. Every day there are more and more cutting edge technologies coming out and how do you, as a software professional, get to work on them?
Suppose, you want to keep your skillset upto date(for various reasons :-)) & want to learn new technologies and skills. How do you get about that? The reality is that opportunities are limited and if you just wait for opportunities to come to by; time will run by.!!!
OK, time for a pop quiz: When was the last time you created an application/software from scratch? Most projects require package implementations, maintenance work, adding new features, fixing bugs, etc. Even in the few projects where applications are built from scratch, you would be part of a large team and not creating software all by yourself.
So, what can a software developer do that will impress Shania Twain?
Enter Side Projects: Call them pet-projects, side-projects, pickle-projects, etc whatever.. In a nut-shell, they are projects that you do for yourself. They are a great place to do all you want with no one else asking you to do this or that. Side-projects will allow you to work on the technologies that you want to work on, problem statements that you want to solve — at your pace & leisure without any pressure of worrying about bugs or performance issues. It’s perfectly ok if the side-project build crashes 10 times a day and has a few bugs here and there.
Side-projects will allow you to work towards creating software that you are passionate about, something that you enjoy working on. Yes, side-projects can bring the fun back into programing and can also help prevent the burn-outs that one can encounter while working on customer projects/areas that one is not passionate about.
Side-projects can help you keep up-to-date with latest technologies & emerging trends in software development. You can try out the bleeding edge of software for yourself. Never written a jQuery +CSS3 + HTML5 code yourself? No problem, just start a small side-project using it and soon you can have something to show off as proof of your newly acquired skills. (and this can help you in ways that you can’t even imagine :-))
Having your side-projects will force you to think of your software from scratch. You will need to think of design issues performance issues. You will have to think of trade-offs and make ‘this-vs-that’ decisions. Your side-projects allow you to program in an exploratory way which allows you to take paths that you would have normally not done in your work projects. You can try out different algorithms, logic and see what happens without any worry in the world. Your side-projects will also allow you to incorporate all your past learning’s into creating a new (and improved) project.
And you know what; all said and done, real programming & coding is an art, a creative process that can take you onto a ‘zone’. A ‘zone’ where things just flow… and to get into the zone, you need to be working on code that you are passionate about and may not necessarily come from coding what your day job code requires.
But yes, just like nature, nothing worthwhile will come without its own set of challenges. Yes, you will face challenges in your side-projects.
The biggest challenge to your side-projects will come from your losing interest in your side-project. You will have all the enthusiasm at the start but slowly you could end up skipping days and procrastinating the work to tomorrow. Before you know, two months later you would have forgotten about it.
You will have pressure of time. You may be tempted to say that you don’t have time… but you know what? Most of us complain about not having enough time. The truth is, we have enough time to do whatever we want, but we’re not willing to make the sacrifices to do it. Yes, you’ll have to sacrifice good things for great things.
So, what are you waiting for… Get that side-project going…!!!
Data Structures are the one of the foundations of the software engineering discipline. However, many a times we think that understanding of these Data Structures are meant only for people doing low level programming, or product development or protocol development or something esoteric.
The fact is that if you are a software engineer — in whatever area (ITS, RDS, IMTS, Testing etc…), you can be a GREAT engineer if you know & understand data structures.
In my opinion, one of the best ways to understand complex data structures & algorithm is to see them in action. Now, there are tools available that will make data structures easy & fun to understand. Here is a wonderful tool, completely written in HTML5, that visualizes the most common data structures and algorithms.
PS: While you are appreciating the data structures, spare a second for how powerful HTML5 is 🙂
Every computer literate person, at some point or the other, would have faced an application crash and a message something similar to the following:
“xxxx application crashed. Would you like to send the details to the XYZ company to help make the product better…”
I will be honest that I have seldom hit the ‘OK’ button but have at times wondered how would these crash reports get processed.
Now, here is a great insight into how Mozilla processes the browser crash reports it receives. The project is called Socorro & uses Hadoop, Python, HBase etc.
You can read a wonderful article here. A must read for all Techies, has a short demo video, a PoC showing how Mozilla could integrate Hazelcast into Socorro and achieve caching and processing 2TB of crash reports with 50 node Hazelcast cluster.
Mozilla receives ~2.5K crash reports per minute during peak traffic & stores 2.6 million crash reports per day….!!!!.
PS: Am wondering how much crash reports Microsoft would be getting for it’s applications :-))