Joel says teaching Java is bad for CS students

Joel Spolsky writes a very interesting essay about why teaching Java in colleges is actually bad for the computer industry (and for the students themselves). I’ve heard the same kind of thing repeated around halls at Microsoft. Almost every team I interview with my camcorder says they can’t find enough C or C++ programmers to get their stuff done. Some on very exciting teams with hundreds of millions of users. Some that, gasp, actually have budget to hire real programmers. And, this isn’t just a US problem. The problem exists at our offices around the world. Every team I talk with says they wish they could hire more hard-core programmers.

  • http://samgentile.com/blog/ Sam Gentile

    Well said Andrew. Ditto.

  • http://samgentile.com/blog/ Sam Gentile

    Well said Andrew. Ditto.

  • andrew

    Strange. I have been working in “hard-core” languages (at companies that you might have heard of;) for years and I am dying to get out of it. I am sick and tired of the crap that C/C++ forces you to do. And I am sick of self-important folks like Spolsky talking about how this language or that technology isn’t sufficiently “hardcore” for him. I have met several shitty programmers that are only “proficient” in C/C++. And some of the best in the biz right now are in alternate languages. Hell, one of the best programmers I know is working on a large Python project right now, and I can promise you that he could code rings around Spolsky in any language Joel wants to bring to the table.

  • andrew

    Strange. I have been working in “hard-core” languages (at companies that you might have heard of;) for years and I am dying to get out of it. I am sick and tired of the crap that C/C++ forces you to do. And I am sick of self-important folks like Spolsky talking about how this language or that technology isn’t sufficiently “hardcore” for him. I have met several shitty programmers that are only “proficient” in C/C++. And some of the best in the biz right now are in alternate languages. Hell, one of the best programmers I know is working on a large Python project right now, and I can promise you that he could code rings around Spolsky in any language Joel wants to bring to the table.

  • http://blogs.linux.ie/stuff Mark

    Yeah and everyone who doesn’t program in assembly language is a wimp. I have no idea what a hard-core programmer is when what you’re actually asking for are more C programmers.

    I’m starting to get why Ray Ozzie has his work cut out for him, obviously real men use pointers, not any of that fuzzy higher level stuff.

  • http://blogs.linux.ie/stuff Mark

    Yeah and everyone who doesn’t program in assembly language is a wimp. I have no idea what a hard-core programmer is when what you’re actually asking for are more C programmers.

    I’m starting to get why Ray Ozzie has his work cut out for him, obviously real men use pointers, not any of that fuzzy higher level stuff.

  • http://scobleizer.wordpress.com/ scobleizer

    Andrew and Mark: actually we’ve been hiring a lot of .NET types too lately and many of our newer projects (like Microsoft Max) are done wholly in .NET too.

    I wonder if programmers who’ve done things in C make better .NET or Java programmers?

  • http://scobleizer.wordpress.com/ scobleizer

    Andrew and Mark: actually we’ve been hiring a lot of .NET types too lately and many of our newer projects (like Microsoft Max) are done wholly in .NET too.

    I wonder if programmers who’ve done things in C make better .NET or Java programmers?

  • scott

    If Microsoft thinks Java is not a language used by “hard-core” or “real” programmers then why did MS invest so much resources to clone it? Was C# a waste of time?

  • scott

    If Microsoft thinks Java is not a language used by “hard-core” or “real” programmers then why did MS invest so much resources to clone it? Was C# a waste of time?

  • http://peterdickten123.wordpress.com/ peterdickten

    At least in Europe, there are almost no more c/c++ projects. In my daily project offer email, c/c++ has almost disappeared. The very few left over projects are writing device drivers and porting projects (from c++ to java or c#)

  • http://peterdickten123.wordpress.com/ peterdickten

    At least in Europe, there are almost no more c/c++ projects. In my daily project offer email, c/c++ has almost disappeared. The very few left over projects are writing device drivers and porting projects (from c++ to java or c#)

  • http://scobleizer.wordpress.com/ scobleizer

    scott: last I noticed you can’t write Windows’ kernel in .NET. Sorry. That doesn’t mean .NET isn’t useful for a whole range of things. And, many of our big projects have been done in C/C++ and aren’t going to be ported to .NET anytime soon (Internet Explorer, most of Office, most of Windows, most of the games, etc).

  • http://scobleizer.wordpress.com/ scobleizer

    scott: last I noticed you can’t write Windows’ kernel in .NET. Sorry. That doesn’t mean .NET isn’t useful for a whole range of things. And, many of our big projects have been done in C/C++ and aren’t going to be ported to .NET anytime soon (Internet Explorer, most of Office, most of Windows, most of the games, etc).

  • andrew

    In answer to your question as to whether C/C++ makes one a better .NET programmer, I am not sure. Certainly, having an underpining knowledge of how heap management works would make one a more efficient .NET programmer, but an intricate knowledge of the minutiae of C/C++ can hamstring a .NET programmer. Who cares if I know what trigraphs are? Or the difference between a OLESTR and a BSTR? It is all busllshit that is abstracted out now with .NET and that is a GOOD THING.

    The only thing that C/C++ is good for now is managing legacy code that is either too damn big or too damn brittle to change. And who wants to do that? If the choice is between building something from the ground up in a modern language or once-a-quarter service packs in code that is 10+ years old, that is a no-brainer.

  • andrew

    In answer to your question as to whether C/C++ makes one a better .NET programmer, I am not sure. Certainly, having an underpining knowledge of how heap management works would make one a more efficient .NET programmer, but an intricate knowledge of the minutiae of C/C++ can hamstring a .NET programmer. Who cares if I know what trigraphs are? Or the difference between a OLESTR and a BSTR? It is all busllshit that is abstracted out now with .NET and that is a GOOD THING.

    The only thing that C/C++ is good for now is managing legacy code that is either too damn big or too damn brittle to change. And who wants to do that? If the choice is between building something from the ground up in a modern language or once-a-quarter service packs in code that is 10+ years old, that is a no-brainer.

  • Tetra

    “And some of the best in the biz right now are in alternate languages. Hell, one of the best programmers I know is working on a large Python project right now, and I can promise you that he could code rings around Spolsky in any language Joel wants to bring to the table.”

    This brings up a very good point. When you’re teaching programming to CS students, the language you use is almost secondary. It’s the ideas, techniques and concepts that are the most important lesson to be learned.

    Why is Java so popular? Well, it’s a ‘modern’ language, it can be used on just about any platform and it helps cover a lot of programming basics. A student well-versed in Java should be able to jump to any other language he or she pleases with relative ease. At Johns Hopkins, my alma mater, I think they take the right path – teach Java at the beginners level and switch over to C/C++ for the intermediate level.

  • Tetra

    “And some of the best in the biz right now are in alternate languages. Hell, one of the best programmers I know is working on a large Python project right now, and I can promise you that he could code rings around Spolsky in any language Joel wants to bring to the table.”

    This brings up a very good point. When you’re teaching programming to CS students, the language you use is almost secondary. It’s the ideas, techniques and concepts that are the most important lesson to be learned.

    Why is Java so popular? Well, it’s a ‘modern’ language, it can be used on just about any platform and it helps cover a lot of programming basics. A student well-versed in Java should be able to jump to any other language he or she pleases with relative ease. At Johns Hopkins, my alma mater, I think they take the right path – teach Java at the beginners level and switch over to C/C++ for the intermediate level.

  • BillyG

    #1 in my http://del.icio.us/BillyG/school folder, guess I’ll have to show them that on Tuesday, thx, maybe now they’ll listen!

  • BillyG

    #1 in my http://del.icio.us/BillyG/school folder, guess I’ll have to show them that on Tuesday, thx, maybe now they’ll listen!

  • Ahsan

    I think what Joel Spolsky is getting at is, there is a greater need of developing problem solving skills of students by introducing them to different languages, thought processes and philosophies. Learning computer science concepts from “Structure and Interpretation of computer programs”(SICP) using Scheme; machine structures from “Computer organization and design” using VHDL and C; data structures from “Introduction to Algorithms” accompanied by K&R’s “The C Programming Language” at Freshman/Sophomore level will open up your mind in so many different ways than a student who only knows the JAVA way of doing things. Joel Spolsky’s article is not about C programmers being better than Non-C programmers, its about increasing the quality of Computer science education. It doesn’t matter if you use C or SQL or BASIC, what matters is that you are using the right tool for solving the problem and you can only learn this if you KNOW that JAVA is NOT the only way.

  • Ahsan

    I think what Joel Spolsky is getting at is, there is a greater need of developing problem solving skills of students by introducing them to different languages, thought processes and philosophies. Learning computer science concepts from “Structure and Interpretation of computer programs”(SICP) using Scheme; machine structures from “Computer organization and design” using VHDL and C; data structures from “Introduction to Algorithms” accompanied by K&R’s “The C Programming Language” at Freshman/Sophomore level will open up your mind in so many different ways than a student who only knows the JAVA way of doing things. Joel Spolsky’s article is not about C programmers being better than Non-C programmers, its about increasing the quality of Computer science education. It doesn’t matter if you use C or SQL or BASIC, what matters is that you are using the right tool for solving the problem and you can only learn this if you KNOW that JAVA is NOT the only way.

  • http://www.livejournal.com/users/jackwilliambell/ Jack William Bell

    I say Joel is so right that he is wrong. Details here:
    http://www.livejournal.com/users/jackwilliambell/

  • http://www.livejournal.com/users/jackwilliambell/ Jack William Bell

    I say Joel is so right that he is wrong. Details here:
    http://www.livejournal.com/users/jackwilliambell/

  • http://www.kirupa.com/ Kirupa

    No programming language is good for all situations. Like most everything else in engineering, somebody who understands how to use the right tool for the right job is more valuable than, in this context, a buffet-style programmer whose depth of programming does not extend beyond the current flavor of the week.

    Instead of colleges teaching CS students a particular programming language, colleges should instead allow students to code assignments in any language they want. As long as the end result of the program fulfills any specifications and guidelines of the problem at hand, the language used should not matter. I think many colleges today tie students down to one particular language without exposing them to other languages unless they are forced to in job situations.

    Only an intro course on programming fundamentals should enforce a single language to give all students a good starting point. In my case, it was Scheme (6.001), and for all its faults, knowing Scheme actually helped me to learn new languages faster. For example, I and many of my peers were able to learn Java in under a week for a software engineering class.

    Most students who understand how to think like a program when approaching a problem can easily pick up a new language such as Java or C# quickly. Once you get the idea of programming down, most languages only differ in terms of syntax and some clever hacks and workarounds.

    Instead of focusing too much on which programming language somebody knows, companies should instead ask how quickly a potential intern like me can learn a new language instead. I’m fairly certain an excellent Python programmer, given a few days, can become an excellent programmer in Java or any .net language.

    Cheers!
    Kirupa =)

  • http://www.kirupa.com Kirupa

    No programming language is good for all situations. Like most everything else in engineering, somebody who understands how to use the right tool for the right job is more valuable than, in this context, a buffet-style programmer whose depth of programming does not extend beyond the current flavor of the week.

    Instead of colleges teaching CS students a particular programming language, colleges should instead allow students to code assignments in any language they want. As long as the end result of the program fulfills any specifications and guidelines of the problem at hand, the language used should not matter. I think many colleges today tie students down to one particular language without exposing them to other languages unless they are forced to in job situations.

    Only an intro course on programming fundamentals should enforce a single language to give all students a good starting point. In my case, it was Scheme (6.001), and for all its faults, knowing Scheme actually helped me to learn new languages faster. For example, I and many of my peers were able to learn Java in under a week for a software engineering class.

    Most students who understand how to think like a program when approaching a problem can easily pick up a new language such as Java or C# quickly. Once you get the idea of programming down, most languages only differ in terms of syntax and some clever hacks and workarounds.

    Instead of focusing too much on which programming language somebody knows, companies should instead ask how quickly a potential intern like me can learn a new language instead. I’m fairly certain an excellent Python programmer, given a few days, can become an excellent programmer in Java or any .net language.

    Cheers!
    Kirupa =)

  • http://blogs.linux.ie/stuff Mark

    Robert: Better than good programmers who’ve done the same things in .Net or Java? I wouldn’t think so. A good programmer is a good programmer, Joel is having trouble working out what exactly a good programmer is beyond his C comfort zone.

    The idea that someone well up on a language can’t tell another good programmer in that language is a bit weak.

  • http://blogs.linux.ie/stuff Mark

    Robert: Better than good programmers who’ve done the same things in .Net or Java? I wouldn’t think so. A good programmer is a good programmer, Joel is having trouble working out what exactly a good programmer is beyond his C comfort zone.

    The idea that someone well up on a language can’t tell another good programmer in that language is a bit weak.

  • http://scobleizer.wordpress.com/ scobleizer

    Jack: ahh, excellent points! And what hiring managers are hoping for are the stars. Maybe I should call them stars instead of “hard-core.”

  • http://scobleizer.wordpress.com/ scobleizer

    Jack: ahh, excellent points! And what hiring managers are hoping for are the stars. Maybe I should call them stars instead of “hard-core.”

  • Anonymous

    “I wonder if programmers who’ve done things in C make better .NET or Java programmers?”

    I’m personally trying to obtain a solid understanding of lower level languages so that I know the consequences for my actions at a higher level.

    In my university (University of Waterloo), it’s Java first year and C/C++ thereafter, which I think is a good thing.

  • Anonymous

    “I wonder if programmers who’ve done things in C make better .NET or Java programmers?”

    I’m personally trying to obtain a solid understanding of lower level languages so that I know the consequences for my actions at a higher level.

    In my university (University of Waterloo), it’s Java first year and C/C++ thereafter, which I think is a good thing.

  • http://lazycoder.com/ Scott

    Jeff Atwood and I had a back and forth about this topic a while back.

    http://www.lazycoder.com/weblog/index.php/archives/2005/04/26/bad-developers-are-made-not-learned/

    http://www.codinghorror.com/blog/archives/000277.html

    I agree with Joel a little bit, but I think that the concepts are more important than the languages. I think that using Java is an excellent way to get the students to focus on good design and architecture, but that eventually it’s good for a programmer to understand what’s going on under the hood.

  • http://lazycoder.com Scott

    Jeff Atwood and I had a back and forth about this topic a while back.

    http://www.lazycoder.com/weblog/index.php/archives/2005/04/26/bad-developers-are-made-not-learned/

    http://www.codinghorror.com/blog/archives/000277.html

    I agree with Joel a little bit, but I think that the concepts are more important than the languages. I think that using Java is an excellent way to get the students to focus on good design and architecture, but that eventually it’s good for a programmer to understand what’s going on under the hood.

  • http://brandonlive.com/ Brandon Paddock

    I don’t think teaching Java is a mistake. However I think schools like the University of Rochester where I studied have it right. They start you off with Java but later expand into C/C++ and general programming paradigms. Then you can diverge based on interest – LISP for the AI people, etc.

    I think it’s a shame when college grads *only* know Java and haven’t been exposed to anything else. It’s not that they should be C# or C++ wizards, but that they should understand the basics and be comfortable with the fact that pretty much any algorithm they write is going to end up working pretty much the same in any language.

    What’s a lot harder to find, and always in demand around here, are programmers proficient in COM, Win32, and ATL programming. You don’t get that at universities – you mostly get Unix and STL at best.

  • http://brandonlive.com Brandon Paddock

    I don’t think teaching Java is a mistake. However I think schools like the University of Rochester where I studied have it right. They start you off with Java but later expand into C/C++ and general programming paradigms. Then you can diverge based on interest – LISP for the AI people, etc.

    I think it’s a shame when college grads *only* know Java and haven’t been exposed to anything else. It’s not that they should be C# or C++ wizards, but that they should understand the basics and be comfortable with the fact that pretty much any algorithm they write is going to end up working pretty much the same in any language.

    What’s a lot harder to find, and always in demand around here, are programmers proficient in COM, Win32, and ATL programming. You don’t get that at universities – you mostly get Unix and STL at best.

  • Pingback: Pete Kruckenberg's Perfect World

  • Trevor

    I’m back at university for 8 months finishing a degree after being in the real world for 10 years. And other than the intro courses in Java, most of the comp sci courses offered are language agnostic, use languages that make sense, or dont use a programming language at all. The AI courses teach lisp and prolog, operating systems and graphics courses use C/C++. Algorithms in Pascal. Object Oriented Programming in Java. Graph Theory used a pencil.

    I think once you get into the 3rd and 4th year courses, they arent teaching you how to write program anymore, they are teaching you how to solve problems.

  • Trevor

    I’m back at university for 8 months finishing a degree after being in the real world for 10 years. And other than the intro courses in Java, most of the comp sci courses offered are language agnostic, use languages that make sense, or dont use a programming language at all. The AI courses teach lisp and prolog, operating systems and graphics courses use C/C++. Algorithms in Pascal. Object Oriented Programming in Java. Graph Theory used a pencil.

    I think once you get into the 3rd and 4th year courses, they arent teaching you how to write program anymore, they are teaching you how to solve problems.

  • Pingback: Chui’s counterpoint » Blog Archive » JavaSchools and skill sets

  • Pingback: Backup Brain

  • http://www.dahowlett.com dahowlett

    A number of things struck me as a non-geek thinking about the implications of this situation:

    1. I don’t recall seeing any mention of AJAX – interesting to say the least.
    2. If as seems the case, C++ teaching is on the wane yet MSFT needs those skills, what does this mean for future code maintenance? Is it bad enough to qualify as a skills crisis?
    3. One of the most intractable problems I’ve been told about is about being able to navigate between different code bases. Is this likely to create issues for forward development of new product versions?
    4. I’ve heard so many definitions of .NET, I’m wondering what Robert is referring to here and its relevance to the issues. (If this is a monumental statement of ignorance then fine, educate me please)

    As an aside, I was talking this evening with a 30+ years’ experienced chap whose name would be familiar to many. He’s getting to grips with AJAX and finding there is little out there of any substance that helps in developing his product.

    So to at least one person’s comments – it seems a good programmer is exactly that. Someone with a penchant for code. In which case, MSFTs quest should not be for C/C++ folk but rather people who are ‘good programmers.’ From everything I’ve learned – and I’m sure to be corrected in some measure – ‘good’ programmers revel in solving hard problems.

    I can’t imagine a bigger challenge than solving some of MSFTs apparent issues in that regard.

    But then it also seems that good folk want to be at places that mirror the attributes currently espoused by GOOGs HCM policies. That looks rather tougher for MSFT to answer than presenting a good business case for new hires.

  • http://www.accmanpro.com Dennis Howlett

    A number of things struck me as a non-geek thinking about the implications of this situation:

    1. I don’t recall seeing any mention of AJAX – interesting to say the least.
    2. If as seems the case, C++ teaching is on the wane yet MSFT needs those skills, what does this mean for future code maintenance? Is it bad enough to qualify as a skills crisis?
    3. One of the most intractable problems I’ve been told about is about being able to navigate between different code bases. Is this likely to create issues for forward development of new product versions?
    4. I’ve heard so many definitions of .NET, I’m wondering what Robert is referring to here and its relevance to the issues. (If this is a monumental statement of ignorance then fine, educate me please)

    As an aside, I was talking this evening with a 30+ years’ experienced chap whose name would be familiar to many. He’s getting to grips with AJAX and finding there is little out there of any substance that helps in developing his product.

    So to at least one person’s comments – it seems a good programmer is exactly that. Someone with a penchant for code. In which case, MSFTs quest should not be for C/C++ folk but rather people who are ‘good programmers.’ From everything I’ve learned – and I’m sure to be corrected in some measure – ‘good’ programmers revel in solving hard problems.

    I can’t imagine a bigger challenge than solving some of MSFTs apparent issues in that regard.

    But then it also seems that good folk want to be at places that mirror the attributes currently espoused by GOOGs HCM policies. That looks rather tougher for MSFT to answer than presenting a good business case for new hires.

  • Farooq

    did u read his other comment Scoble? :

    “The very fact that Google invented MapReduce, and Microsoft didn’t, says something about why Microsoft is still playing catch up trying to get basic search features to work, while Google has moved on to the next problem: building Skynet^H^H^H^H^H^H the world’s largest massively parallel supercomputer. I don’t think Microsoft completely understands just how far behind they are on that wave.”

    what do u think?

    on topic: for the most part Joel is right…I started off with C/C++ in university and then it took me one course to learn Java in the following year…it’s definitely I guess *trivial* if u go the C++ -> Java route…

  • Farooq

    did u read his other comment Scoble? :

    “The very fact that Google invented MapReduce, and Microsoft didn’t, says something about why Microsoft is still playing catch up trying to get basic search features to work, while Google has moved on to the next problem: building Skynet^H^H^H^H^H^H the world’s largest massively parallel supercomputer. I don’t think Microsoft completely understands just how far behind they are on that wave.”

    what do u think?

    on topic: for the most part Joel is right…I started off with C/C++ in university and then it took me one course to learn Java in the following year…it’s definitely I guess *trivial* if u go the C++ -> Java route…

  • Innocent Bystander

    As is teaching C#, or C++. They are all crap languages designed by people ignorant of industry history with no taste. I agree with Joel to some extent (although his assertion that MIT produces decent developers rings false based on a number of candidates I’ve seen there).

    As a former uber developer who is now a hiring manager I definitely agree that anybody who tends to refer to himself as a “java developer” will probably fail the tech interview big time. Java has a bunch of libraries that hide a bunch of inefficiencies and complexities and nobody in the Java community has ever worried about scarcity of machine resources.

    This means these people can’t analyze an algorithm for complexity and haven’t the first idea what it means to optimize for either space or speed. They only know one language and thus have only one viewpoint on how to write code.

    C# developers will be no better. The key seems to be to look for people with a decent spread of different languages and environments. These people can adapt and have many viewpoints.

  • Innocent Bystander

    As is teaching C#, or C++. They are all crap languages designed by people ignorant of industry history with no taste. I agree with Joel to some extent (although his assertion that MIT produces decent developers rings false based on a number of candidates I’ve seen there).

    As a former uber developer who is now a hiring manager I definitely agree that anybody who tends to refer to himself as a “java developer” will probably fail the tech interview big time. Java has a bunch of libraries that hide a bunch of inefficiencies and complexities and nobody in the Java community has ever worried about scarcity of machine resources.

    This means these people can’t analyze an algorithm for complexity and haven’t the first idea what it means to optimize for either space or speed. They only know one language and thus have only one viewpoint on how to write code.

    C# developers will be no better. The key seems to be to look for people with a decent spread of different languages and environments. These people can adapt and have many viewpoints.

  • http://blogs.msdn.com/alfredth Alfred Thompson

    The problem is not so much the language used as the way the early CS courses are taught. You can teach a first course using C and not cover recursion and pointers. Trust me – I have. But it is not a good idea. The courses that do a good job using Scheme (look at courses at Northeastern and MIT for example) work not so much because of the language (they use Scheme) but because of the teaching methodology. They have a world class researcher teaching the first CS courses at Northeastern. And he’s a good teacher as well. A lessor teacher can use the same tools and do a poor job. Some of my old students are willing to name names on that score but I’ll refrain. There is a lot involved in teaching early CS courses but few universities put their best people on it. Carnegie Mellon does BTW. There are some others. But at a lot of schools that role falls to the low person in seniority and they really want (and need for tenure) to focus more of their energy on research. I’d like to see MS Research put some people and money into the whole area of teaching CS 1 through CS 3. We can and need to do better.

  • http://blogs.msdn.com/alfredth Alfred Thompson

    The problem is not so much the language used as the way the early CS courses are taught. You can teach a first course using C and not cover recursion and pointers. Trust me – I have. But it is not a good idea. The courses that do a good job using Scheme (look at courses at Northeastern and MIT for example) work not so much because of the language (they use Scheme) but because of the teaching methodology. They have a world class researcher teaching the first CS courses at Northeastern. And he’s a good teacher as well. A lessor teacher can use the same tools and do a poor job. Some of my old students are willing to name names on that score but I’ll refrain. There is a lot involved in teaching early CS courses but few universities put their best people on it. Carnegie Mellon does BTW. There are some others. But at a lot of schools that role falls to the low person in seniority and they really want (and need for tenure) to focus more of their energy on research. I’d like to see MS Research put some people and money into the whole area of teaching CS 1 through CS 3. We can and need to do better.

  • David Scheidt

    Wow, it seems like most of the comments missed the point of the article. It seemed like what Joel was expressing was how he measured new candidates for hire. To him, Java takes away the pitfalls of programming. Of course it does! That was part of the bedrock of Java’s (and C# and .NET and Delphi and all the scripting languages) design. What he is lamenting about is the lack of knowledge being passed along.

    If I were Joel, I’d be less concerned with the languages, and *MORE* concerned with the tools. Recursive algorithms are very cool, but how many colleges have classes in Debugging? I don’t care WHAT language you use, being able to step through code and being efficient at seeing state is MORE important than the language. Don’t get me started at how few ‘REAL’ developers don’t know how to use source control…

    I guess it comes down to fundamentals. What does one person consider fundamental? Joel see metaprogramming as a fundamental. Someone else may see business knowledge as a fundamental. Others may want environment knowledge as a fundemental. Personally, I’d want to hire people who had it all .