Math Nerds vs. Code Monkeys: Should Computer Science Classes Be More Practical?

They are the crème de la crème, the supernerds of computer science who spent four long years poring over theorems and studying algorithms and have finally achieved their degrees. Competition to hire them is fierce, with top technology firms offering ever higher salaries and outlandish perks.

But once they arrive, what can these just-hatched developers actually do? Some may have picked up a few programming languages on their own, but they were not taught these job-essential skills at school, and companies must offer them months of training before they become productive. In the meantime, creative minds in the mold of Gates and Zuckerberg are dropping out of school. Should computer science programs be less theoretical and more practical? We look at both sides of the argument.

 

code monkey math nerd

“I’m graduating with a computer science degree, but I don’t feel like I know how to program,” a student complained on an Internet forum, worried that his knowledge of C and Python wouldn’t suffice in the workplace. “I’ve worked hard but don’t have the confidence to go out on my own and write my own app.… If nothing turns up I will need to consider upgrading and learning more popular skills or try something marginally related like IT, but given all the effort I’ve put in that feels like copping out.”

Most of the answers on the forum amounted to Just Do It!:

  • “Throw yourself in the deep end.”
  • “Find a project, any project.”
  • “Many employers don’t care what courses are on your transcript or even what your GPA is. Instead they want to know what you can do, and especially what have you built.”

Good advice, says software engineer and author Gayle Laakmann McDowell, whose books offer tips for people looking for jobs in the tech industry. “There are library books out there; pick up some to learn the basics. Then build something on your own.” McDowell recommends sites like www.codecademy.com for students learning new programs.

Which begs the question: Why aren’t computer science students learning these skills in college? Should computer science programs teach more practical skills?

“The ideal program has theory but is backed in programming and practical applications. There are programs that are too theoretical and others that are too practical,” McDowell says. If a school is too oriented on the practical and emphasizes programming too much, students aren’t challenged on solving complex problems.

Another potential complication: “They’ll get tied too much to today’s hot language, and in 10 years, it’ll be a dead language.”

Large companies offer training to new hires, but usually newbies start writing code within two weeks, if not on Day 2.

“At Apple, I wrote code on the third day there, never having used that program before,” McDowell says. “You need to pick up coding languages easily. It’s fairly easy to learn a language if you know a couple of others.”

Computer science grads who throw themselves into the soup of real software engineering will most likely pick up the skills they need after a few weeks of nervousness.

“Coders Should Learn By Coding”

But not everyone is happy with this state of affairs. The demand for people who can code is urgent and growing every day. Is the four-year degree in computer science that most employers insist on really the best way to satisfy it?

No, says Jeffrey McManus, creator of an online course called www.CodeLesson.com. McManus wrote a post for his personal blog entitled More Universities Should Shut Down Their Computer Science Programs.

“Computer science focuses on theory. It comes from math departments,” McManus said. Most students, on the other hand, want to learn applied software engineering, not computer science. Like McDowell, McManus says that the ideal program would offer a balance between the theoretical and the practical. But he says most computer science courses aren’t very good at teaching the up-to-date skills necessary to the field because the professors received their degrees years earlier, when tools and tactics were different. Software skills are best taught online, he argues.

“Coders should learn by coding, not by sitting in classrooms listening to lectures,” McManus says. And developers can’t expect to learn programming skills from their employers, who are increasingly less willing to invest in employee training.

Some computer science students agree. Sheldon Kreger, who studied computer science but dropped out before graduating, is now a successful web developer at www.OpenSourcery.com. He learned coding on his own and from other students, and continues to learn from colleagues.

“It’s widely understood that computer science doesn’t necessarily make you a good programmer,” Kreger says. “It gives you theoretical knowledge, but because there are so many topics, you skim through everything quickly, and a lot of people come out not being very good programmers.”

Some students he met did know programming, but they had learned it outside of school. Kreger says he learned a lot from working in groups with them.

The professors, on the other hand, were busy with administrative tasks and didn’t help with coding. And the classes? Here’s Kreger’s comment on McManus’ blog:

“Sure, I learned what a stack is and coded one up by hand, but I can learn what a stack is in about 5 minutes from a book. No client cares if I ever coded up a stack, and if I needed to for some reason, I would pull it out of a pre-existing library. But, learning about vectors, stacks, and linked lists took an entire semester, and hundreds of dollars of tuition money. Seriously?”

Don’t Fly My Plane

On the other hand, some former students think the theoretical and mathematical parts of their education are extremely valuable.

“If something starts to break and you don’t understand what’s happening, much less why it’s happening, you’re in trouble. The people who took computer science know what’s happening under the covers and can diagnose when something goes wrong,” says Jaime Torres, whose degree in electrical engineering included solving complex computing problems. He now works for data mining company ICF International doing content management and working with Sharepoint and ASP.net.

Torres concedes he might be able to do his job without the degree, “but I don’t think I’d be as effective,” he says. “Code monkeys” who dot the i’s and cross the t’s are necessary in today’s software-driven world, he asserts, “but to have them writing the software that’s flying my plane… I don’t want them doing that.”

The Billionaire Dropouts

Many students enter the computer science field as a route to career success. But it’s hard for them to close their eyes to the impressive roster of successful college dropouts, including billionaires Bill Gates, Paul Allen, Steve Jobs, Michael Dell, Larry Ellison, and Mark Zuckerberg.

And of course, PayPal founder and venture capitalist Peter Thiel, who told 60 Minutes that everyone thinks they need a college degree just like everyone thought they had to have a house or two during the housing bubble, but the reality is that higher education is overpriced and often unnecessary. His 20 Under 20 fellowship pays $100,000 to 20 students every year to drop out of college.

Ed Lazowska, who holds the Bill and Melinda Gates chair in computer science at the University of Washington, says that dropping out and learning on your own can work for some, but it’s not suitable for most students. One pragmatic reason is that few companies will hire software engineers without a degree.

But there’s something more fundamental, something he calls “thought skills,” acquired from working in teams and doing things, not from a programming book.

“The further out you are from a degree, the less important it is what you majored in. What’s more important is the stuff your mom told you about and you rolled your eyes: critical thinking, analysis, the ability to speak and write. Any top bachelor’s program will teach these. In the end, that’s what makes people successful.”

Few would disagree about the importance of these so-called soft skills. But while people skills and critical thinking require a group setting and life experience, colleges are turning more and more to the online world to teach skills like programming.

The Online Tsunami

More than a dozen colleges and universities, including Princeton, Stanford, the University of Pennsylvania, and Duke, are partnering this year with www.Coursera.com, a new company founded by two Stanford computer scientists that provides online courses, some of which now provide credit. Offerings are expanding, but most of the initial classes were in computer science, math, and engineering. The response has been what one professor called “a tsunami.” Last year, before the expansion, the company taught 43 courses and registered 680,000 students from 190 countries with its original partners (University of Michigan, Princeton, Stanford, and the University of Pennsylvania.)

Coursera is only a year old and is not yet self-sustaining economically, though it hopes to be at some point. Currently, its contracts state that if a revenue stream emerges, it will be shared between it and its university partners. Some colleges have questions about the program and are reluctant to climb onboard. McManus, whose company partners with the University of Victoria in Canada, says some institutions have built-in resistance to outside teachers and courses.

But given the massive interest in the program and the proliferation of sites like McManus’ CodeLesson, Codecademy, and www.Lynda.com , it seems likely that online education, whether it comes from massive-enrollment courses from Coursera or from smaller courses offered by other companies, will increasingly form part of students’ college experience, particularly when it comes to fields like computer science.

If so, practical courses offering hands-on coding experience and exposure to hot new languages could have a place on campus without interfering with basic and theoretical classroom instruction. It seems only appropriate that the debate between the theoretical and the practical in computer science education will eventually be resolved online.

See also:


code-review-suck-odwebinar-cta


subscribe-to-our-blog


  • John Vilk

    Honestly, the right approach involves both theory and practice. While you really need to know how to program, you also need to know complexity theory so you can understand how your program is going to scale (both memory-wise and runtime-wise). You need to know common groups of problems so you can use well-vetted algorithms to solve them (e.g. graph coloring). You also need to be imbued with the sense that things are going to change by going over some of the history of computer science. 
     
    Should students be worried if they haven’t learned “language x”? No! If they have already thoroughly learned at least one other language, they should already have the tools in their mental toolkit to pick up another — it just takes some individual initiative. Many people have one specific application that they port to a new language in order to get started with it. I’ve heard things as simple as Sudoku solvers to memcached to a web server. The best part about computer science is that you only need a computer and an internet connection to expand your practical skillset. 
     
    But it will be much harder to independently learn all of the theoretical topics that are covered in college, where you have (assumedly) an expert to lead you by the hand through the fundamentals of the topic they are teaching. And if you find the course easy and boring, you can always approach the instructor for tips on what to study next (or to talk about what’s currently going on in that branch of CS). 
     
    Will you come out of college knowing everything? Heck no! You never stop learning. Ever. You will constantly be confronted with hard problems that will make you think, “I have no idea what I am doing.” But with the toolkit you’ve fostered, you should be able to chip away at it until you’ve uncovered a satisfactory solution (or have determined that the problem as-stated is impossible to solve efficiently :-). 
     
    So, yes, you need both. A ton of personal initiative doesn’t hurt, either — that’s the primary determinant of how much you learn.

  • Ben Austin

    Great points all around John! It’s awesome to get some detailed insight from someone who is experiencing this first-hand.

  • http://www.gwern.net gwern

    Hence the existence of ‘software engineering’ majors.

  • Jerry

    One thing to notice is that the interviews at most top tech firms such as Google, Facebook, and the like are very theoretical. They will beat the interviewee to death with questions on algorithms, linked lists, and Big O. Even Google’s own culture statement says it all: “We hire people who are smart and determined, and we favor ability over experience.” This means intelligence in the form of IQ matters more than practical experience. Is that the best strategy. I think it seems to work for Google, but I am not sure it works for all types of companies.

  • http://www.yellosoft.us/ Andrew Pennebaker

    If you can’t think logically and frame your task in terms of data structures, and functional transformations, you’re going to have a bad time. 
     
    Yes, schools mistakenly believe that advanced Calculus is relevant for computer scientists. Limits are helpful, integrals not so much. Really, propositional logic, boolean algebra, set theory, and for-loops–Jesus Christ, people can’t code them worth shit, nevermind recursion, those are the main mental tools you need to program.

  • Ben Austin

    Do any of you think that the fact that colleges are stretched too thin (as Teresa mentioned in her last post) plays a role in them relying more on a broad, theoretical- and math-based teaching style, rather than more specific, practical style? Or does it really just make more sense to let the schools keep their focus on theory and leave it to the employers train their new employees?

  • Emma

    StackExchange is not a “forum”, it’s a Q&A site (there are supposed to be not discussions). 
     
    The theory of computation is very different from programming practice. The only real problem I see is that many people think computer science is about programming, while that’s rather a side effect – and one that is valuable for jobs.  
    Imagine there would be a lucrative side effect from standing in front of a piano. Would you write an article discussing the idea of dropping the teaching-to-play-the-piano part from piano courses ‘because hey, what economy really wants is people who are good at standing in front of a piano’. 
     
    Lastly I have to point out that this article is written under the premise that you primarily go to university because you want money/a job. I’m not an american btw. 
    (might be posted twice now)

  • http://www.itoctopus.com itoctopus

    No they should not – otherwise we’ll end up with no real programmers. 
     
    If you look around, you will see that real programmers who actually created something that we’re all using are programmers who were taught programming at universities – theoretical programming. 
     
    What we all learned at universities was how to think – we didn’t learn programming languages, we learned how to thinks as programmers, and that’s what really matters. Languages come and go, and good programming languages are also relatively easy (PS: I don’t think that C/C++ is hard), it is the logic that’s hard.

  • http://www.sbp-romania.com Dan

    i agree with itoctopus, university is important because they teach how to learn, and form where to get the information, and how to sue it. 
     
    of course, it’s important to be passionate about programming, but you need some guidance. if jobs, and gates dropped out, it doesn’t mean that this is ok.

  • Joseph

    I disagree with many of the commenters. I dropped out of RIT’s computer science program after squeaking by Calculus I, and then being unable to pass Calculus II… and still facing Calc III and, yes, Calc IV. On top of it, the school used quarters rather than semesters. After three calculus classes, I still had no idea what calculus WAS. :-( Essentially teachers would start the class putting a bunch of symbols on the board and then manipulating them into other symbols without explaining why or how it related to the real world. That’s more a problem with math teachers, which I guess is another subject. 
     
    At the age of 40, I have somehow survived to this day without needing to differentiate anything. Algebra – useful. Calculus – not at all. 
     
    In regards to other comments: people don’t use complexity theory and advanced math to deal with scaling. They profile their programs, find the bottlenecks, and improve them, not perform calculus. Computer science theory isn’t used much in the real world. 
     
    With regard to existing software being written by those with traditional computer science degrees – of course. As stated, companies have only been hiring people with computer science degrees! If software companies were all owned by the KKK, you couldn’t point to their output and make the case that only white people could write software, would you? 
     
    And no, no one learned how to think at the university level. No one learned problem-solving skills at the university level. Such skills come way before and often determine whether one decides to go/can get in to college in the first place. Studies have been done and shown that after two years of college most students can’t write a paragraph any better, critically analyze text any better, solve logic problems any better than they could when they first entered. I’ve asked some recruiters why they require “any degree” for their position, and they trot out a similar canard about “completing a degree shows problem-solving skills, time management and determination”. This is simply an ad hoc explanation to justify the status quo, just like a lot of people here with CS degrees don’t like the idea of being told they served no purpose… people don’t like believing they made a bad choice and will often convince themselves ever more firmly they made the right one the more evidence is presented that they did not. This is shown in product surveys in which consumers who own fading/dying/failing brands (for instance, Blackberry phones) give the most fanatical favorability ratings.  
     
    Dan, if Gates and Jobs dropped out, it DOES mean it’s ok. People are entering college with all the learning skills they already need to teach themselves anything else they need to know. If you’ve got the brains to get into a good school like they did, you’ve got the brains to do anything else. They don’t need Jiminy Cricket’s magic feather (a degree) to make themselves believe they can perform. 
     
    Degrees aren’t equipping people for the workforce, workforces aren’t training and have no idea how to adequately gauge abilities (hence their reliance on degrees), and students are demonstrably no better off on critical thinking, writing and logic skills on leaving college than they were when they entered. Books and online courses show that people can learn themselves – much faster and cheaper – if they have those skills. They don’t need to become “well rounded” and waste years taking philosophy, music, and basket-weaving courses mixed in with what they really want to learn.  
     
    Elementary and high schools need to refocus their efforts on teaching people how to learn (as outlined in “Teaching As a Subversive Activity”). Employers need to abandon the old boys’ club of college degrees as a barrier to entry and focus on standardized skills tests for occupations. Combined with online learning, this will enable people to choose their own path to learning and not be artificially hampered by an antiquated jobs market (speaking of which, recruiters and managers need to be taught how to interview and use critical thinking themselves, as many tests show they make up their minds in seconds, are subconsciously biased by appearance, race and even ethnic-sounding names, etc.). Those who feel spending four entire years to learn stacks and basket-weaving and being saddled with $50K+ of debt will have that option, and those who immerse themselves in hands-on experience, books and/or online learning will have their choice as well.

  • krishna

    I think learning theory is important. The abstract thinking will train the student to be good at logic.

  • Scott

    The problem is that the degree is in Computer Science. If we want graduates to know how to build software, the degree should be an engineering degree with a title like Software Engineering. You know, kind of like Mechanical Engineering which has a backing sciences of kinematics, materials science, etc. 
     
    If you want people to be engineers (which is what those “code monkeys” are,) they need to be trained as such. Comp Sci does not train as such.

  • Pingback: Don’t drop out! | Flexible resilience

  • tenohk

    “Computer science theory isn’t used much in the real world”

    which world do you live in?