4 ms·
I have another idea, based on the observation that traditional compiler building courses are like a "waterfall" and the OP's proposal is simply a "reverse water
by hyperliner 12y ago
I have another idea, based on the observation that traditional compiler building courses are like a "waterfall" and the OP's proposal is simply a "reverse waterfall."
What if the course was designed based on an "Agile," evolutionary methodology?
In that course, you would divide the course work in 4 "scrums". In each scrum you do a little bit of everything (little bit of lex, little bit of parse, little bit of syntax analysis, little bit of code generation). In the first scrum you also would cover the architecture and high level overview of the "roadmap."
Of course, at the end of the first "scrum" you would have a very primitive compiler for a very primitive language and without a lot of error checking, but students would have been exposed to the end to end experience.
The second and subsequent "scrums" would only deepen each part of the compiler, and students would benefit from knowing the interactions across modules and simply learning more sophisticated techniques.
I remember when building my first compiler in college that I really had no clue why we were learning about tokenization and state machines for so long when I really wanted to generate optimized code.
- pessimizer 12y agoI hate the 'scrum' + 'agile' buzzwords, but if those are stripped out, I like the idea of starting off by building a crappy but end-to-end compiler for a language that does almost nothing, and making it nicer as the course moves along.
- hyperliner 12y agoI agree with the buzzword comment for "agile." Just wanted to send the idea of natural evolution. (A bit off topic, but Scrum is however an actual methodology name.)
- pessimizer 12y ago>Scrum is however an actual methodology name. I understand that, I'm just unsure of what benefit having scrums would be in this context, or whether that term is even appropriate for what is essentially an instructor introducing the next assignment (which never needed a special name before.)