4 ms·
I love that taxonomy of TODOs, I'm stealing that ;) > I think what a lot of instructors fail at is they don't give students a working example of how something
by rablackburn 5y ago
I love that taxonomy of TODOs, I'm stealing that ;)
> I think what a lot of instructors fail at is they don't give students a working example of how something works. Sure you're not really going to learn, but what's the point of me having a half-assed assignment that isn't useful for me referencing a couple years down the road?
Like everything else in life it's a balancing act (or a chicken and egg problem). In a university/college context in particular it's not about being practical, it's about learning the (hopefully up-to-date) theory. There are concepts, classes of problems, and mental tools in computer science that are extremely valuable, but if you don't teach them explicitly you have everyone reinventing the wheel, and worse, doing it without a common vocabulary.
But as a student you can learn/memorise some concept (let's say recursion as an example), but you never really 'get it' until you've struggled with a real-world problem and realised that recursion solves it elegantly.
Sometimes the way we teach reminds me of hypnopaedia/sleep-teaching in Brave New World:
```
A small boy, asleep on his right side, the right arm stuck out, the right hand hanging limply over the edge of the bed. Through a round grating in the side of a box a voice speaks softly.
'The Nile is the longest river in Africa and the second in the length of all rivers of the globe. Although falling short of the length...'
At breakfast the next morning, 'Tommy,' someone says, 'do you know which is the longest river in Africa?' A shaking of the head. 'But don't you remember something that begins: 'The Nile is the...'
'The-Nile-is-the-longest-river-in-Africa-and-the-second-in-length-of-all-the-rivers-of-the-globe...' The words come rushing out. 'Although-falling-short-of...'
'Well now, which is the longest river in Africa?'
The eyes are blank. 'I don't know.'
```
The takeaway (in the book at least) is that rote-learning like that has no value because its not conscious knowledge (but it's great for _moral_ lessons, like 'Ending is better than mending'). But I've lost count of the times where I've come up against a problem that niggles at the mind and realised I learned to solve it years ago at university, and it all falls into place. If nothing else, you know what to google for.
So I've come around full circle on how theory-heavy universities are (if we don't teach theory at university, where would we teach it?), but agree that there's a huge benefit to student experience by pairing it with exposure to full systems.
The older I get the more I find myself regretting (/resenting) how we've off-loaded so much job training to universities. You know how students can get exposed to real-world systems and learn real-world lessons? By having them recruited by real-world companies who invest in their development.
Seems like a CS degree would be most useful after you've been working with real-world code for ~5 years. Perhaps we need to split out most of the content of the current undergrad degrees into a CS equivalent of an MBA? Let the undergrads focus on practicality (ie, making the MIT missing semester the core experience), then come back in a few years to learn all the "correct terms" for the problems you've been coming across and learn the best-practice/optimal approaches.
- MeinBlutIstBlau 5y agoIf you really like TODO's, here is my personal system. I've been trying to expand it but these are the major ones. I do it in a specific way too so that they stand out and i can organize in ascending order: TODO: --0-- This is my "talk to my lead" todo. If i can't figure something out, or i need clarification on something, i throw this on here. Sometimes I'm able to figure it out later which is why i mark these. But normally they're reserved for further clarification and I'm just going on assumptions until I need that info. TODO: --1-- This todo is a task that needs to get done or there is something vital and I haven't implemented it or need to figure it out. TODO: --2-- This todo is the redundant or bad code todo. It works and is like a priority 1, but only when it prevents you from completing another priority 1. TODO: --3-- This is a "it's not great and I'd like to redo this, but it gets the job done" level. This one was for when i'd have something petty or minor that i know is maybe bad form or inefficient, but i just don't have the time to deploy and test a complex datastructure to it. So what if I have 4 nested for loops. It works and it's reliable and thats all the client needs. TODO: --4-- This is my wishlist one. Typically I do this more for personal projects, but on occasion at work, I know theres a feature i could implement at some point that could really help out. This usually falls in the category of "if i have absolutely nothing to do." It's just a way to keep ideas somewhere. I've started to having global todos but I haven't fleshed it out much. Typically i'd throw them at the top of a class or something stating an issue or bug. Haven't really messed with it much but my tiering system has helped tremendously.