| One criticism I have of education systems is that they structurally encourage only superficially studying content. Let's take my compilers class as an example. I go to a 75 minute lecture 2 times a week and I do about 4 hours of homework a week. I do this over 18 weeks. That's only roughly 120 hours of study over the course of a semester. That's only as many hours as most full time employees work every 3 weeks! And the sad thing is, I imagine if I spent 3 weeks reading a compiler book, reading though the source of lex and yacc, and implementing some kind of basic compiler using them, I'd be a much better programmer than what we're doing-- implementing a C compiler for MIPS in java, using a shitty lex library and only implenting the parts the professor thinks is important. This brings me to another point. Programmers are necessarily autodidacts because shit changes incredibly fast. You can't be a one trick pony. So if we're pushing kids through these incredibly formulaic methods of learning, what are we really preparing them for? A life of being an enterprise code monkey? The student who taught themselves anything, even if they are missing a few core details, are more equipped to fix those gaps in their understandings. I did a hackathon a couple weeks ago that had a sort of business spin on it. There was this group of 4 guys that made a college choosing application based off your GPA, as a desktop java application with a GUI that had background images and looked like an early 2000s keygen program. The thing is, I have absolutely no doubt that these guys are good students and they'll probably find an alright job out of school. But all they know is java development. I think that students that want to be more than that probably shouldn't go to school. Here's a question to you: if I handed you a résumé, without a bachelor's degree, but instead included my github profile and a list of books I've read cover to cover and some open source contributions, am I going to get the salary I am worth? |
The comparison doesn't seem fair. First, I suppose you have others classes at the same time. And if you don't, you're free to do additional work on your own. In any case, hard concepts take time to sink in. You're better off learning this over a longer period of time.
Besides, don't think full time employees do meaningful intellectual work 8 hours a day. There are always a lot of distraction. And even when coding, it's not the same as writing tons of boilerplate code than understanding new complicated concepts.
> And the sad thing is, I imagine if I spent 3 weeks reading a compiler book, reading though the source of lex and yacc, and implementing some kind of basic compiler using them, I'd be a much better programmer than what we're doing
Are you sure that you'd be able to do that? supervised education helps you to pace yourself, focus on what is important and to keep motivated over the long run. The actual content is maybe the least important.
Besides, going through lex and yacc sources sounds like a huge waste of time for someone who wants to learn about compilation. There may be some value in this, but it should be last on your priority list.