So, I wasn’t very good at responding to all the comments on my original post, so I’m going to exercise my editorial fiat and just respond to them all at once, and call it a new blog post. Ain’t I clever?
Joe said:
Joel accidently stumbled kinda close to the answer actually. We don’t need a BFA in programming, we need a community college “java developer” course (or C#, or whatever).
Right there is the first problem- Java or C#? Yeah, if you know one, you can learn the other easily. But that implies learning. At which point, the old joke goes, we’ve settled what sort of lady you are and are just haggling over the price.
The other thing is that business needs Java developers today- but that’s not what they’re going to need ten years, or twenty years, or forty years, down the road. So what’s going to happen to all of those tech-school grads who only know Java then? This isn’t good for the developers.
Nor is it good for the employers, either. The “disquieting implication” I mentioned is that the value a developer has is greater than the sum of their skill sets, after they’ve been working for you for a while. The point and purpose of hiring a programmer is not to generate code, but to solve problems (usually by writing code). Which requires knowing a heck of a lot more than just the Java syntax and the ODBC API. It involves knowing the specific problems your business is likely to have. Who to talk to about various aspects. What the business flow really is (as opposed to the business structure the VP has on a powerpoint presentation).
So, it’s ten or twenty years on, and you’ve spent the last decade or two schooling this Java programmer on your business and your company, and now the time comes to dump Java and move on to the next programming language, and he cannot learn the new language, what do you do? Dump all that effectively irreplaceable domain knowledge? Stick with Java when everyone else is moving is moving on- making it harder to hire new programmers (how many Cobol developers are there today?), and not gaining the advantages of moving to the new language? How much better would it be to be able to keep all that domain knowledge, and just have your existing developers learn the new language?
Business thinks it wants Java Developers. What it really wants are Developers who know Java. There is a difference.
Denis said:
Joel gave some facts in today’s industry but he suggested wrong solution. CS education matters. However, history can’t save people if the people does not _learn_ from it. How to learn? By practice. Knowing GC is a thing, implement a GC module is another thing.
I agree. Well, sort of. There is an advantage to being introduced to the ideas, and then get your hands dirty- introduce the students to the idea of how GC works, and the various ways GC has been implemented- not just reference counting and mark and sweep, but generational copying and all the other extensions. Knowing that there is an answer, and having an idea where to find it, is 95% as useful as knowing the answer itself. “Yeah, I remember that there are better garbage collectors than reference counting- let me look some things up and get back to you…” Getting your hands dirty in code connects the ideas to the real-world.
That said, the big problem here is time. We expect people to be able to get CS degrees in 4 years, maybe 6. Worse yet, it is assumed that going into a degree in CS you know nothing about programming. Not one thing. Hopefully things are better now, but when I took CS, it wasn’t even assumed you had ever seen a computer before, and had to be taught things like how to log on or edit a file. This cuts into the amount of time to teach “real” things, like garbage collection or compiler construction. It’s not unlike the English department had to assume you first had to be taught to read and write, and then in your last year you can read Hamlet and Moby Dick.
In my perfect world, people would recognize that basic programming skills are as important as basic math or science or language skills, and basic programming would be taught in the high schools, if not the grade schools. Unfortunately, that’s not the world we live in, so the next best thing is for people to realize that a CS degree is a start, not a finish.
SimonTeW said:
One of my pet peaves is the concept that “we don’t teach you what you’ll need to know, we teach you how to learn what you’ll need to know”. Actually, it’s perfectly sensible as far as it goes. However, when I was at university it was used as an excuse to teach totally useless rubbish.
Maybe. There is stuff that probably is necessary that attracts some tenured professor’s attention, and he insists that everyone needs to know his particular useless theory. But I suspect not. Just for fun, I went and took a look at my Alma Mater’s CS curriculum. I don’t see anything on there I’d consider “useless rubbish”- in fact, looking at it, many places where it says “OR”, I’d say “AND”.
bdprescott said:
Kids coming into the workforce today do expect that their new employer will change their methodolgies, and programming languages to what the kids were using in college. That’s been going as long as I remember.
Yeah, but has it ever worked? Not to my knowledge.
Buford Twain wrote:
It’s important to note that schools, universities, technical colleges, etc. are IN IT FOR THE MONEY at the end of the day. So, they will not necessarily do what is best for the “good of the world” they will pander to whatever they think will bring in the most cash. We are all responsible for ourselves, we can choose to go to school, or learn something ourselves, it doesn’t do any good to blame educators. They are led by market forces and will tend to supply whatever is in demand. We are our own educators, in the end, whether we choose to pay money to sit in a class or read a book on our own.
You don’t become a professor of CS for the babes and the big bucks, but your point still stands- the rise of “Java Schools” reflects a very real demand, both in the economic sense and in the terrorist hostage taker sense, from current and future students. But if that’s the way things remain, then we as an industry are doomed- entire generations of students will only be taught those things that an 18 year old twit (all 18 year old males are twits, at best) thinks is important. But my point wasn’t to blame the educational system- but rather to try and adjust the expectations of those going for a CS degree.
Raganwald:
I really don’t mean to wail on you- it’s just that your posts make me think. For example, your No Disrespect post. There should be no “easy” programs. Or, rather, they should be exceedingly rare. If a problem is common and easy, it should be automated and the computer should take care of it (except, maybe, for the small hard bits). Which makes me suspect that a large number of programmers are not delivering the value they could or should deliver.
Alaa Salman said:
The dragon book is indeed old. And you can’t really expect to build a commercial grade compiler after reading just the dragon book. Its true that we build compilers differently today, but the theory behind them is still the same. Which is what the dragon book tries to teach…so for example, you cannot dream of writing something like gcc on your own, but after reading the dragon book..you would certainly what it means when somebody talks about a bottom up parser or an LALR grammar for example.
The Dragon Book is necessary, but not sufficient, I agree. If I recall correctly, it’s innocent of BURS- Bottom Up Rewriting Systems, which is the modern (and much better) way to do instruction selection, peephole optimization, register allocation, etc. But when you go to learn about BURS, what do you find out? You’d better know your finite automatas really well.
Related posts:
Pingback: Schools and that jazz « More Ramblings from a Los Angeles Programmer
Pingback: Enfranchised Mind » What use is a CS Degree III: Truth and Consequences
Pingback: Enfranchised Mind » Jeremy Pavleck on Updating Technical Skills (with Graphs!)