There is an infographic up on Code.Org today that shows the immense gap between the number of computer science related jobs and the number of qualified resources in the market now and coming into the market over the next 15 years. In Wisconsin alone, there are:
|7,909 open computing jobs (growing at 3.6x the state average)|
|781 computer science graduates|
|67 schools teach computer science|
I think that it is fascinating that over the span of just one or two generations of users, computers have gone from esoteric machines hosted in the bowels of a university or government complex and the realm of uber-nerds to ubiquitous devices seen as merely appliances that we throw away when they break. The understanding gap, specifically in the United States (which is seriously lagging behind in STEM education as a whole), is that we still need Computer Hardware engineers to developer faster and smaller devices and Software Engineers / Developers to write the code that runs on them at all levels.
The need for computer skills will continue to GROW as we embrace more technology and apply it to even more diverse areas of our lives, not diminish. Unfortunately, the number of Americans that can actually fulfill that need is dwindling, and it is making us much less competitive in the world.
I'm a software developer and architect for a major player in the Microsoft ecosystem. Say what you will about the company, if you work in an office or own a PC, you are surrounded by code bits that run on their operating systems. This fact is not going to change, and companies all over the world, who live and breathe in this infrastructure are CONSTANTLY looking for innovative ways to improve their business, and it almost always includes software. As a company, we are under constant pressure to staff more people into roles at all levels and in all geographies, and we just don't have enough people with the right amount of skills.
You, dear reader, can change that. You can do it at your own pace, and except for your investment of time, you can do it for free. There are a myriad of resources, focused at all levels of experience and desired skill sets, out there on the web that can get you the skills you need if you just apply yourself to learning them. From websites that focus on just learning and applying various software language skills to entire collegiate level Computer Science curricula, all the info you need is there to become a part of the solution.
This entire discussion is predicated on the assumption that you are reading this and are already done with or not interested in going back to school. There is also an IMMENSE discussion here that should be focused around how and what educators need to be teaching in high school and at the Universities, and what the student / professional is responsible for once they are out in the wild. I FREQUENTLY talk to professors (I like to do campus outreach), and the general consensus is that the CS program at the university is not a trade school, and that students are coming to them to learn the philosophy and not the craft. This makes me want to scream and bash my head.
Just give me the skills
The Code Academy focuses on web based development, specifically:
- Web APIs like Facebook, Twiter and others
University Style Learning
You might be the kind of learner that appreciates the philosophy as well as the practical applications, and to that end, I would highly suggest watching / listening to any of the great college curricula that are out on the web. Many of them include all of the test and assignment content to make studying approachable (though you would still have to get the appropriate texts in some cases).
- MIT Open Courseware - Introductory Programming Courses
- Stanford University
- Computer Science on Coursera
Education and Continuing Education
"But wait," you say. "I am already IN the software workforce, what should I be doing?"
To that I respond, "All of the above, and then some." Hone your craft, learn new skills, mentor others and be better than you were yesterday.
I constantly rail at profs that "Clean Code" and "The Clean Coder" coupled with a strong practice of TDD (or ANY testing theory) HAS to be a part of the practice taught to students. The departments could have the TAs address it in their rec classes, it could be a required 200 level class, ANYTHING...SOMETHING, but you NEED to know (or have at least been exposed to) this stuff when you get to me. It's inexcusable that students aren't better versed in the basic tenets of their chosen craft. Once you are in the workforce, it is no different. I personally believe that we, as Computer Scientists, must CONSTANTLY reflect on our craft and its practice, and make the effort to both hone our own skills and to mentor others.
If you are in the software development field (or want to be), and you haven't read Uncle Bob's books, you should really stop whatever it is you are doing and go and do so, and then come back and we can talk about Craftsmanship and Practice.
And while you are at it, take a small drive through Test Driven Development. Now, I realize that TDD is a religious argument for some, but testing MUST be a part of the practice of your craft, I don't care if it's test first or not, or if it's TDD, BDD, DDD, ADD, ADHD or whatever. You MUST know how to test your code, and starting your testing journey by thinking about your tests first might fix some of the bad habits that I know you (and I) have.
|Test Driven Development: By Example|
If you have other favorite learning sites or books on the craft of development, post them in the comments, and lets raise the awareness of this opportunity and the skills of those that are interested.
In this Series:
|Part 1 - On Software, Getting Started and Staying Relevant|
|Part 2 - On Software, Stacks and Technologies|
|Part 3 - On Software, .NET|
|Part 4 - On Software - Owning your brand|