The (ir)Relevance of a CSci Degree in Corporate IT
Occasionally, someone will express surprise when they learn that I don't primarily hire computer science graduates at my software development and implementation consultancy. In fact, I typically maintain that most organizations would do better to have relatively fewer computer science graduates in their IT organizations than they do. This is one of the reasons I tend to ignore the press about the "troubling" decline in students pursuing C.S. degrees. The only reason it is a fundamental problem is if those hiring the coming generations of IT professionals do not put the relevance of a CompSci degree (or any degree) in context. My hope with this post is to provide readers with some context as to the significance, or lack thereof, of a CSci degree for the typical systems developer in corporate IT.
Why don't I place a premium on specialized study of Computer Science? In a nutshell, it is neither necessary, nor is it typically sufficient, training for a great deal of business systems development.
I can assure you that if I were running Google or Microsoft, I would be hiring plenty of people who studied computer science; the same is true if I were running the software group at Cisco or NASA. Those organizations create computationally complex systems that benefit from specialized knowledge in areas like network routing, lexical analysis, compression and other specific discipines of computer science, to name but a few. The body of existing knowledge in those areas is sufficiently large that like any science, it is critical to know was has already been learned if one is to pioneer new work. This is systems-level programming.
However, the majority of business systems are much more pedestrian from a development perspective. Usually, this is referred to as application-level programming. Typically, application-level developers make use of tools and foundation technology (the systems-level code) for everything from application and database servers to business rules engines to user interface toolkits and screenbuilders. The code to stitch these things together, especially given the rich libraries provided by languages like Java, becomes comparatively straightforward - even if the business logic being implemented may be complex.
Possibly a real-world example of the split would help to clarify this. My firm's custom development practice uses an internally-developed application framework - now in it's third generation. This framework in turn leverages a small handful of third-party technologies. The architecture and much of the systems-level functionality in the framework is created and maintained by computer science grads, although the first versions of it were created by a guy with a background in philosophy and legal theory (yours truly before I was too busy managing the business).
However, the majority of the developers who use the framework to create business applications have a variety of education backgrounds - physics, math, accounting, actuarial science, political science. And lest you think I am talking about the development framework enabling "business users" to build applications, I am not - this is not point-and-click - everyone is writing Java and SQL and using an alphabet soup of different tools and standards - and even contributing to low-level framework itself.
To put it another way: how many best-selling novelists have a degree in English or best-selling musicians a music degree? Certainly, one could point to Tolkien as an example of an author whose deep knowledge of English, and language generally, enabled him to create stories of immense sophistication and popularity. But just as many less sophisticated books can be very entertaining, enlightening or informative, not all work in software requires the same theoretical background as for example, tuning Oracle's database query optimizer. By the same token, I imagine people with an academic background in music would be better suited to writing a symphony.
In fact, not only does that specialized training fail to produce a tangible benefit in many cases, but it (presumably) came at the expense of a deeper study of domain knowledge that may be even more relevant to what is typically the most challenging aspect of creating a business applications - understanding what needs to be created.
I believe the most common significant challenge we encounter in business technology revolves far more around the question of "what are we building?" than "how can we build it?" Consider your own experience (direct or anecdotal): for most development projects that run over budget, or technology solutions that turn into "shelfware" rather than being fully deployed within a business, was the problem that the system didn't function (technically, i.e. it crashes, can't run, etc) or that the system didn't work for the need (functionally, i.e., it was too cumbersome, it didn't support common exceptional cases within the business, etc).
From what I hear and see from others, most commonly the problem is the latter one - a problem of the system running, but not working well for the business. Consider the sheer number of ERP projects from name vendors like SAP or Oracle that are labeled as failures. I can assure you that their technology - whatever criticisms might be fairly lodged against it - actually does work. The failure stems, almost invariably, from the fact that the solution designed was a poor fit for the problem.
Most of the time, if an application is experiencing technical problems - performance or scalability issues are the most common ones - they can be solved by the work of technical specialists. These specialists may or may not be computer scientists, but they are most often extremely technical, and they also can leverage broader experience in narrow, but generally-applicable, areas like performance tuning. As I said earlier, there are very few businesses that are breaking genuinely new ground in their technical demands. Consider the performance and scalability requirements of companies like Visa, Federal Express, NASDAQ and others: most business systems require less than 1/1000th of their transaction processing power.
More common is that it is not the underlying technical architecture that causes a system to fail, but a flawed conceptual framework or information architecture. There is very little computer science education is doing to address this more common (and frustrating) source of project failure. At best, and this is rare, there is token instruction in capturing and documenting requirements from users. Sadly, most such exercises revolve around relatively simple systems requirements - and usually ones that are comparatively easy to define.
In the business world, however, there is a great deal of complexity and subtlety to business requirements - and they also tend to be very open to change for a variety of factors (competitive landscape, government regulation, etc). In these cases, domain knowledge and experience augmented by a good systems-thinking approach would serve the need better.
The typical solution applied to this problem is to separate the roles of system analysts and developers. The more business-savvy systems thinker works with the system sponsors and endusers and documents the requirements for the system. This requirements document is then pacakged up and sent along to a developer for implementation. Problem solved? Typically not, but that is a discussion for another post. To summarize the basic problem: no matter how much detail a specification has to it, there are certain to be ambiguous points that require the developer's judgement at the time of implementation.
Moving back to the realm of technical failures, there are times in which a system architecture is so terribly flawed as to be a hopeless foundation for building a system, in much the same way that the Mississippi delta may be hopeless foundation for building a city. I have seen a small handful of such systems over time. A reader might jump in and say, "but technical expertise of the sort provided by a CSci degree would at least tend to reduce the risk of such failure, wouldn't it?" When I contemplate the debacles I have seen, they are split across both self-taught and university-trained software deveopers. Although the reasons for the architectural mistakes are somewhat different across the types of developers, a lack of real-world experience (or an unwillingness to learn from experience) seems to be the common thread. In fact, it could be argued that many technologists in the typical corporation tend to increase the risk profile of their projects by introducing too much complexity when a less complex technical foundation would have been entirely adequate for the task at hand.
I have already rambled on, but this topic merits further comment, for which I presently lack the time to provide. I will provide either an update to this post or an additional post on the subject in the next few days.
Some final comments to you fellow ACM members - Some of the comments suggest that I may have struck a nerve, although this was not my intention. I am in no way attempting to denigrate the study of computer science, and I would encourage the reader who feels I am to re-read the piece. It's all a question of fit. Believe me, talented computer scientists are necessary to us all, at a societal level as well as in specific roles in businesses. However, I believe true CSci talent is likely to be underutilized in many parts of the typical corporate IT environment. Filling the halls of corporate IT with well-educated computer scientists would be a triple loss:
- The skill fit inside of corporate IT might be poor;
- More than likely, the CSci degree-holder will not be challenged as a computer scientist in a corporate IT role;
- Society loses because it is an inefficient allocation of a relatively scarce resource.
Gee, thanks for telling me that now that I'm two months from graduation... :-P
Posted by: Chuck | October 25, 2005 at 05:52 PM
Yep, what we need is more software made by people who kinda-sorta know how to program...
-- Response --
The hubris of youth. I don't think you should worry that your degree is in CSci - it will not harm your chances of being hired, certainly.
As to kinda-sorta knowing how to program - I would maintain that most business system development is not technically taxing; identifying the problem to solve is almost invariably the key challenge.
Posted by: Chuck | October 25, 2005 at 05:56 PM
Gee, let's change some of the words and see if this holds up --
How about: Business managers are wasting their time with MBAs, how many top-notch CEOs were catapulted into their positions and career success by virtue of an MBA?
Or: Engineers should not devote the years of hard study toward matering their craft, and God Forbid, should never waste time with a graduate engineering degree, or a PE certification. After all, everyone "knows" that most engineering is done via computer programs nowadays.
Perhaps the author should return to school and get an advanced degree in philosophy, so as to be able to form a coherent argument.
-- Response --
Nice straw man, however, the analogs you choose seem to be at best, specious.
First, the MBA degree is a graduate degree - it is also a generalist degree, as it happens. Second, you may wish to perform an exercise on your own time: please feel free to report back the percentage of CEOs of the Global 5000 who have their MBA. Actually, as a more interesting measure, you might want to identify the leadership of every firm that has joined the S&P 500 over the past 10 years and let me know the incidence of the CEO holding an MBA in that subset.
Second, I was unaware that engineering today is done by computers, I think "with" would be the more accurate preposition. Also, last I checked, the number of deaths due to failed software (even if we want to look at say the implantable med device market) is negligible compared to the number of people who could (and have) perished due to engineering errors. The difference between engineering licensure and CSci degree are significant - again, a poor analogy.
Posted by: constantnormal | October 26, 2005 at 08:02 AM
This is a completely on-target essay. I am a senior enterprise architect for one of the nation's largest corporations (and also a member of IEEE and ACM). Full-blown computer science is generally unnecessary in my world. What I need is for people to have grounding in enough computing to know what is possible processing-wise and how things are built and run, with some of the basic foundations of discrete math, logic, and modeling (object, data, process), and finally some exposure to IT infrastructure case studies and patterns. But bit-level CSCI stuff will be less and less useful over time as the tech commoditizes and the real value-add work moves up the stack - and believe me, there is plenty of opportunity there...
American corporations whose primary business is NOT technology are ill-served by today's computing education. CSCI degrees are too technical, and B-school MIS degrees not technical enough. We need new models much more focused on practical work, just as doctors going into practice have their internships and residencies, while core medical science research is reserved for teaching hospitals and major universities.
To some of the comments: Do you think that an IT job in corporate America even entails writing much software anymore? Business process analysis leading to product evaluation and integration is the model. And if we do decide to rewrite a core transactional system, yes, I will hire some CSci graduates, no doubt - they would have a competitive advantage in system design and construction, and would be preferred.
But they probably won't lead the business process analysis, requirements capture, or data architecture efforts, not without some deep resumes showing particular expertise in those areas - and for those types of positions, CSci grads will have no particular advantage over competitive candidates with no formal CSci background.
For further views on this & related see my weblog www.erp4it.com.
Posted by: alphasong | October 26, 2005 at 10:00 PM
The real difference is that Computer Science, in almost all cases, is a research undergraduate degree.
We in IT are one of the only professions that looks down upon applied degrees. Doctors, Lawyers, Engineers, Accountants, etc. all have a primary path to their professions via an applied degree. We, however, seem to think that some miracle occurs once a CS student graduates and they will learn how to apply their theory to a business domain the minute they walk out the doors of academia.
What is it about computing that we think just studying the science is enough? If doctors took this approach, all MDs would study biology, then hang their shingle out as doctors. Engineers would study only chemistry or phyiscs, then go out and design physical structures with no concept of materials, project management, or engineering requirements.
We need more applied computing graduates. We need to understand the application of computing and information science as a profession.
Karen Lopez
www.infoadvisors.com
Posted by: Karen | November 01, 2005 at 10:16 AM
I've a BS Physics, and a BS CompSci, and currently am working on an MBA. From what I've just read, it seems you are saying you need the easy and the fun work done, but the hard work can be outsourced or hired on an as-needed basis. Is this good news (they want Systems Analysts, not coders!) or wishful thinking (people like me, who I understand, who think like I do, I'll hire)? You are the one doing the hiring, so you know who you want. It just seems to me that just as a Physicist can pickup programming, certainly, but not all programmers can become Physicists, there is a similar but not quite so skewed difference in the complexity of information (and the rate at which it is presented in school) between CompSci vs. Business. Of course, it could just be that the classes are easier and the filtering is done for Business in the "real world" rather than at the University level. Still, I'd hate to think you were outsourcing talent to the point that the average IQ of your firm dropped 5 points.
Posted by: George Kamp | November 15, 2005 at 10:45 AM
Computer Information Systems or Computer Science degree will get you a job. However, I think the main point of this whole debate was that business technology will benefit from anyone who has a solid knowledge of IT Infrastruture. Networking with hardware, software, database, etc. Computer Science from my point of view really targets the root of Logic and Design of programs, along with a solid background in natural sciences(physics, calculus). The military will certainly hire you for the Department of Defense doing ballistic missle simulations. A friend of mine works at this research center with a CS degree doing nothing but World War III simulations.
That same friend of mine never quite made the cut for the business environment. Although he received phone calls for interviews, most of the employers asked him to take a pre-test or assessment involving basic A+ Comptia hardware, Network+, and MCSE knowledge(Just information based on those certs, was Certs were not required). He admitted he didn't have a strong background in any of that. He just knew how to design and anaylize software programs in common languages. I told him that sometimes a BS in Computer Science and a Bachelor in Business for Computer Information Systems are like apples and oranges. He felt he wasted alot of time and money learning what he did because here in TEXAS(yes we suck, we know), they don't respect CS students that much; at all actually. Some friends of mine with two year associate degrees in IT have better business IT jobs than CS grads - I know this one CS grad still working at Best Buy as a 12.00 an hour Service Tech. His boss has a two year associates degree in I.T. networking from a community college(lol!) with two certifications(A+ and CCNA) and makes 18.00 an hour).......
I say screw CS and go with what the business wants. If you want top secret clearance and live a very abnormal life, go with a CS degree and work for the military.(sorry, I'm bitter due to seeing the way Texas handles Technology here).
Posted by: Ben | December 01, 2005 at 10:44 AM
Computer Information Systems or Computer Science degree will get you a job. However, I think the main point of this whole debate was that business technology will benefit from anyone who has a solid knowledge of IT Infrastruture. Networking with hardware, software, database, etc. Computer Science from my point of view really targets the root of Logic and Design of programs, along with a solid background in natural sciences(physics, calculus). The military will certainly hire you for the Department of Defense doing ballistic missle simulations. A friend of mine works at this research center with a CS degree doing nothing but World War III simulations.
That same friend of mine never quite made the cut for the business environment. Although he received phone calls for interviews, most of the employers asked him to take a pre-test or assessment involving basic A+ Comptia hardware, Network+, and MCSE knowledge(Just information based on those certs, was Certs were not required). He admitted he didn't have a strong background in any of that. He just knew how to design and anaylize software programs in common languages. I told him that sometimes a BS in Computer Science and a Bachelor in Business for Computer Information Systems are like apples and oranges. He felt he wasted alot of time and money learning what he did because here in TEXAS(yes we suck, we know), they don't respect CS students that much; at all actually. Some friends of mine with two year associate degrees in IT have better business IT jobs than CS grads - I know this one CS grad still working at Best Buy as a 12.00 an hour Service Tech. His boss has a two year associates degree in I.T. networking from a community college(lol!) with two certifications(A+ and CCNA) and makes 18.00 an hour).......
I say screw CS and go with what the business wants. If you want top secret clearance and live a very abnormal life, go with a CS degree and work for the military.(sorry, I'm bitter due to seeing the way Texas handles Technology here).
Posted by: Ben | December 01, 2005 at 10:48 AM
Search for in all major search engines simultaneously on the site http://www.iknowall.com.
Simultaneous search on Google, Yahoo and MSN Live Search.
Try http://www.iknowall.com
Posted by: iknowall | June 01, 2007 at 02:43 PM