Despite the best laid plans of colleges and universities, there remains a skills gap between what computer science graduates learn in their undergraduate years and what they need to become proficient in a typical at-work environment.
In short, many people on both sides of the equation—teachers as well as potential employers—say the educational system is not doing enough to keep pace with the ever-changing needs of IT, and that entering the work force often is as much of an educational experience as is college, particularly for programmers.
Ari Zilka, chief technology officer at Terracotta, in San Francisco, said he knows very well about the skills gap, as he worked his way through college in the high-tech business while attending the University of California, Berkeley.
"I found that UC Berkeley had an excellent curriculum but not only was my schooling lagging behind work, it became very hard to even go to school because work had me learning the concepts and their applicability and nuances that teachers didnt even seem to know."
Zilka noted that many of the new hires hes seen during his career continue to echo the same sentiments as he did.
Some of the things the school didnt teach Zilka and many who are now entering the work force include issues around communication, development skills, and business and product design.
On the communication front, Zilka said, "Presentation skills are critical, and selling and influencing peers is critical."
To read more about the state of the enterprise IT career, click here.
Some of the development skills that schools might emphasize more include design patterns, coding style and practices, scalability and performance tuning, and a focus on the entire software development lifecycle, Zilka said. He noted that things like quality assurance, unit testing, and stage and release are not usually taught.
Moreover, Zilka said he and his friends used to joke that they would walk out of school knowing mathematical theory, but nothing they would actually use in work.
"In reality, I find that if your school was strong and you learned compilers, OSes [operating systems], hardware design, database design, advanced math and statistics, and the like, you find ways to apply all that theory but you dont learn how to be a developer or a sys admin or any of that," Zilka said.
Bjarne Stroustrup, the creator of the C++ language and a computer science professor at Texas A&M University, said, "There is a gap. It is hard to precisely characterize because there are so many different kinds of jobs," he said. However, "It is important to remember that universities should educate—for a life time of further learning—not train for specific tasks."
Yet, "That said, many students have no clue about software development and couldnt program their way out of a paper bag—thats unnecessary and puts them into a bad situation even if their primary job function is not programming."
For example, said Stroustrup, "inter-face design, testing, use of scripting is often not taught, at best, students are assumed to absorb it by osmosis. Most dont and equate programming with fiddling with tiny programs. At TAMU [Texas A&M University], we are trying to address that. I think a bachelors is too short time; for most jobs you really need a masters—there is too much to learn for just four years."
Rawn Shah, IBM developerWorks Community Programs Manager, agreed with Stroustrup. Shah works for IBM in Tucson, Ariz.
"Today, some of the most sought after developers are those who work with environments and ideas that are complex," Shah said. "The opportunities to do those are harder to find at the basic university level, but are much more obvious at the masters or Ph.D level."
Bill Scherlis, director of the Institute for Software Research at Carnegie Mellon University, which is home of one of the premier computer science programs in the U.S., acknowledges the skills gap and said CMU is working to help address the gap.
"We hear it all the time from our colleagues in industry that university graduates have programming skills and technical knowledge, but they are somehow not equipped to take on software engineering" roles in the corporate environment, Scherlis said.
"When graduates join organizations [after college] they are often shocked to realize they are dealing with limited resources, deadlines, fuzz requirements, requirements that change weekly, applications that scale, the use of frameworks and libraries, existing code—that may be bad code with bad design decisions, issues of interaction within and among teams, and having to develop code that is secure," Scherlis said.
Those are some of the challenges students are faced with that they may not have faced in school, he said. "And we are crafting responses into the curriculum," Scherlis said. "We have to introduce our students to the mission of real engineering and collaboration."
One way to do that is to foster more team development, Scherlis said. "They get experience and deal with the realities of interacting with other individuals." Indeed, Scherlis said, the school encourages computer science students to take a course in social psychology to better understand how teams work because team development is such a key part of the corporate development environment today.
In fact, the school sponsors collaborative projects between an external organization looking for real solutions to IT problems and student teams at CMU. "And education is secondary to the external organization; they are truly looking to our teams to help them with a problem first and foremost," Scherlis said. So both parties benefit.