Hiring software developers is hard work; any employer looking to fill developer roles will tell you that. This is made more difficult by the number of employers looking to onboard new hires while, at the same time, there are few developers looking for a job.
Finding a good developer is tough. And making the problem worse is software development education isn’t keeping up. Not enough developers are making it through.
In my post “Things Need to Change in the Software Development World”, I listed three issues I see our industry struggling with. The first one was the lack of “thinking time” provided to software developers. The second was the plethora and sometimes questionable quality of available UI frameworks. The third was the lack of engineering discipline we see in today’s education systems.
Lack of Standardized Curriculums
Teaching software development begins early. The earlier people are exposed to software development the more likely they are to choose it as a field. If you start kids coding in elementary, they will be more likely to want to be a software developer when they are older. Sadly, we’re not making the most of this interest.
According to code.org, there are only eight states that have adopted policies to give all K-12 students access to Computer Science (CS) courses. That means these children who go off to study CS or software development after graduating high school possess a varied set of skills. This directly impacts how these programs build out their curriculums. If there were more standardized approaches to teaching kids CS before graduation, it could provide the students with a boost and provide more predictability for certificate and undergraduate programs.
It’s time we quit treating computer education like some kind of hobby. We must equip children with the necessary skills to solve the next generation of problems in the software development industry.
Lack of Engineering Focus in College
The classic college education isn’t broken, but it needs a lot of fixing. Today we are creating a lot of computer scientists, but few software engineers. The industry needs more people who can design and develop large software systems. Unfortunately, most college curriculum these days is more about learning data structures, not learning how to structure large systems. They may know the syntax, but they don’t understand the principles necessary for thoughtful construction. Potential developers right out of college are often woefully underprepared to join a software development team.
Classic college education has another problem: it isn’t producing enough graduates. According to code.org, Nebraska produces around 500 new CS graduates a year while almost 2,500 CS jobs are available. That gap makes finding and hiring skilled developers extremely challenging. The pool of developers is too small, and companies with unfilled positions suffer for it.
Lack of Continuous Education
After suffering the bumps and bruises of working in the software field a few years, developers often realize that they need to learn how to write better code and architect systems better. But where are they going to get that education? Existing education programs are usually geared to take people from zero to developer. Not much is out there to help move people from developer to senior developer.
Unfortunately, what is available is little more than tech conferences talking about new tech that promises to solve all of the developers’ problems. But in the end, that new tech ends up creating different problems. There aren’t many opportunities to learn how to write better software. This leaves developers stuck and sometimes frustrated or continuing to build less-than-ideal systems.
As Donald Knuth says, “Software is Hard.” But I feel a big reason for this is the awkward state of current software development education. The education isn’t aligned to produce better developers.
Software development is still more art than science; still more groping in the dark than walking a good road. While we haven’t completely failed at delivering software, as an industry we are not improving as we should. In this series, I have mentioned a few ways in which we are failing. We need to encourage more thinking, we need better UI / UX development experiences, and we need to rethink how we are educating software development. Once our industry can consistently and continually improve in these areas, I believe we will see some amazing advancements happen.