Computer science is a difficult subject. It involves the breakdown of abstract problems into formal, model-based solutions that can be worked through step-by-step. For many, this is a long process — one that requires years of study at an institution.
In fact, this study takes so long to accomplish, that one might mistake the time they’ve spent studying as the perfect qualification for working as a professional in the field of software development. The truth is, this couldn’t be any more inaccurate.
The reality of the software industry is that most of the work that needs to be done is fairly mundane code maintenance and feature implementation. In fact, most real world software products are just simple CRUD (Create, Read, Update, Delete) applications. How much computer science knowledge is needed to do this? Pretty much just everything up to and including “Data Structures and Algorithms,” a first-year course for most computer science students across the United States.
Even that knowledge isn’t always necessary to do this work. The bulk of the knowledge needed actually lies in the standards and tools involved in any decent software job: task management, team communication, code comments, code reviews, unit tests, code lint-checkers, debuggers, frameworks, language-specific features, and development-environment setup.
Many universities in the U.S don’t even touch these concepts, leaving young graduates unprepared for the requirements of real-world software jobs. This disconnect can be rooted back to two things: The isolated nature of computer science courses and the lack of exposure to the current tools and needs of the industry.
In many of their classes, computer science students are penalized for working with each other. This can be forgiven, since each student needs to learn how to digest foreign and abstract concepts on their own. There is a negative, though. Isolation reinforces the idea that programming and software development is about the individual’s ability to perform well against their peers and colleagues. This is far from the truth.
In real-world software development, the following soft-skills are some of the most important: being able to patiently sit down and help debug someone else’s code, being able to assign or fulfill tasks in a project, and being able to communicate complex ideas at a high enough level that a non-programmer — a marketing department head, a CEO, a business manager — could understand their value. Real-world software launches are not fueled by genius programmers. Nope, they’re fueled by money, and often, the added skills of non-programmers. Not being able to work with these people leads to unemployment.
The last and most immediate of all problems in the education of computer science students is the lack of real-world, technical-training opportunities that are necessary to be a professional programmer. While some computer science programs have courses for teaching students web or mobile development tools and standards, their quality is often inconsistent, and they’re not required for graduation requirements. There exist curriculums in the U.S. where students might never write code in a technology stack that is actually used by most modern employers, leaving those students to learn the skills themselves, sometimes through extra classes that cost extra money. For students looking to find employment in the industry immediately after their graduation, this leaves them limited to applying to companies that are large enough to take a chance at hiring an inexperienced college graduate.
However, these companies are the minority in the industry. With so many graduates having never written shippable code, the competition for these limited positions is intense — in the same way that the competition for Ivy League school placement is intense. You’re bound to see students suffer from immense mental health problems due to this competition.
Why talk about this? Why bring this up now? Well, as a senior planning to graduate soon, I want to let others in on all the little secrets I had to learn on my own. Writing software is both an immense pain and also one of the most fulfilling jobs I’ve ever had. Just the people I’m surrounded by in the development field make coming to work every day worth it.
All of the professional and technical skills previously mentioned can be learned, you can adjust to them. I wish this stuff was taught in university computer science programs, and I think we’d have a lot more good software developers if it was — but I don’t know if this will ever happen. My best advice is to find a mentor in software development, someone, or some group, that’s far more experienced in the language or toolset that you want to learn. From there, all of these gaps in your knowledge pool of real software development will start to fill.