Succeeding in Computer Science Requires More Than Theoretical Education

by Michelle Parent, productOps engineering intern

Entering the upper division classes within the computer science realm of my degree, and five months into my productOps internship, a clear distinction between what is and what is most likely not applicable the “real” tech world had already been established.

When applying for an internship, I felt I was at an extreme disadvantage due to not yet having a bachelor’s degree. I studied aerospace engineering and mathematics prior to transferring to computer science, so I am technically only a “second-year”. To try and make up for this, and give myself the best chance at an interview, I finished 150 hours of Udemy courses incorporating the Amazon Web Services empire, Docker containers, and web development with two finished websites to showcase.

During the technical interview for the internship, it wasn’t the C/C++ or Java textbooks that moved me forward. Nor was it algorithmic complexity, pointers working behind the scenes, or the many assignment points lost from lack of bounds checking that were important. It was the external development tools and projects I’d studied and worked on outside of the required textbook readings that gave me an advantage and the opportunity to work at productOps. I believe that the computer science foundation built by higher education strays from the necessary skills and achievements deemed valuable by technical employers. Today, a computer science bachelor’s degree may be incomparable to experience with popular developer tools and platforms.

Higher education does not endorse time spent outside of theoretical practice while tech companies prize applied knowledge and practical skills.

Now, five months into my internship, I realize that the typical practice of grading on mistakes and the idea that “mistakes are not okay due to point deficits” has completely evaporated from the way I program. In its place, an emphasis on innovation, problem-solving, continuous learning and inevitable failure (except on final delivery) are prioritized. The world of STEM is always advancing and failure has long been considered a necessary stepping stone for innovation. Why then are success and failure considered mutually exclusive when studying and being assessed? After speaking to many freshly-graduated coworkers, this belief is not uncommon. Some have expressed their reluctance to apply for internships, participate in local hack-a-thons, or even implement their own ideas in personal projects because they feel their GPA is much more important than external exposure.

Higher education does not endorse time spent outside of theoretical practice while tech companies prize applied knowledge and practical skills. Here are some aspects I’ve learned while interning at productOps you probably won’t learn sitting in a computer science class:

Team Work

There is no such thing as group work in computer science classes (defined as “cheating”), yet it is essential every day at productOps for both co-workers and the other interns. Individual production is a rarity. There has not been a single assignment in my college career that has prepared me for the expectations of being a team member in the tech industry. More importantly, there is nothing to prepare a computer science major for the significance of how their source code will be interpreted when handed off to a team member. Without peer review, or any revision at all (except sometimes for extra credit), students never realize what “poorly written code” can look like and its effect on real-world scenarios. Even though students are “allowed” to use others as resources, the use of their interpretations is cautioned against, as this sometimes correlates to the way they structure code and may be considered “cheating”.

Version Control

At school, there is no weight of version control sitting on my shoulders while I program some fictional personal loan calculator assigned by my professor. Every day at productOps, there is an inherent emphasis on delivering “9/10 features on time rather than 10/10 a day late.” Without version control, or Github for that matter, implementation is delayed, accountability is nonexistent, and productivity levels decrease rapidly. Though it makes sense professors with hundreds of students wouldn’t incorporate version control in their assignments — as it would eliminate the automation of grading — the concept is absolutely essential in the technical world. In my experience, lack of exposure to such a universally adopted tool among professionals sets up aspiring coders to fall even further behind.

Continuous Integration

The idea of continuous integration — the practice of integrating into a shared repository repetitively — is also missing from computer science classes. Many students, myself included, are not asked to make revisions or additions to previously written assignments. However, when working in a group, the many moving parts associated with a project require a system to which team members contribute or “check-in” code preventing out-of-date work. The act of pull requests, merge conflicts, and branch management becomes crucial to keep the flow of performance consistent and sane. Without this action being taught in higher education; modularization, efficiency, and business logic remain questionable and unintentionally prevents a programmer from advancing to a professional standard.

Though change within the higher education system is needed, it has become the duty of students to prepare themselves for the actuality of a post-degree occupation’s expectations. A great full-stack web development course that helped me prepare for my interview was The Web Developer Bootcamp taught by Colt Steele on Udemy. His guidance in creating multiple projects using relevant languages and platforms are pertinent tools I use regularly at productOps. Likewise, Docker Mastery: The Complete Toolset from a Docker Captain and AWS Solutions Architect — Associate 2018 are both exceptional training tools and areas of essential knowledge. In parallel to self-education, picking the minds of any software developers/architects, user experience engineers, and DevOps engineers is imperative to having an accurate understanding of what the tech industries are seeking in potential candidates.

Having been fortunate enough to find an engaging internship, it is extremely crucial to take the extra steps to advance your knowledge outside of theory and place the importance on tools and practices commonly used by developers today.