Time is flying by. Already week 7? Already project 4?
I wanted to spend this week talking mostly about design. Design in something that seems hard to master, and on top of that, we don't get very much practice with it in school. I'm sure there are some good books on design out there. If you happen to know any offhand, I'd love to know the names. The project has taken up quite a bit of time so far, and I don't think it will let down much, but it's good to know a good book to read when I get the time for it. From the reading next week and the whole basis of the book Refactoring, I assume we will be covering more about design, and that would be freakin' awesome. (and I'll add another post as I get less stupid)
In school, we don't have much experience with designing large and complex systems. This project is the largest and most complex thing I will probably ever create in school unless something suddenly appears next semester. The runner up would by the final project for CS345 where my partner and I created a language that was a combination of Prolog and Jython which made for an... interesting... language. Still, the greater point is that we don't really have much design to think about. Jython does have a large codebase that you can learn about design from, but I'm sure many just found where the code needed to be changed and ignored anything else. Every other project during school has been basically like "oh it outputs the right answer usually from one file and the code looks reasonable? awesome". We just don't get to organize ridiculously complex code bases in school.
My experience with design in internships has been lacking also. Two of my internships involved writing code from scratch rather than working out of an existing code base. So basically, a few other interns and I, all of which were probably lousy at design, had to work together to create a design. Neither experience really gave enough feedback for us to know if we were really doing what was best. For all I know, I could have been learning completely lousy design practices for 6 months. My last internship, I was actually working on an old existing codebase. It finally gave me a view into what complex design looked like, though it was hard to understand why it was implemented a certain way.
Software design is massively important to a project. If a code base isn't extensible or understandable enough for example, you're going to be fighting a terrible battle to have a good product in the end. I may be asking for too much out of school. We do, after all, still have the rest of our careers to keep learning. And design isn't just some algorithm. There are good practices overall, but different situations call for different things, and that may be something best learned through experience with a specific project. Honestly, I don't know.
On a slightly unrelated tangent, I'm kind of bummed by the locking in of our schema early on. It comes off as very non-agile/XP to me. It's not letting us change design specs over time. Maybe nothing in the required specs will require a change in our schema, but for features that step out of the box, it could matter.. maybe... I do see the purpose in locking on to one so that data sharing is a lot better, maybe I've just been XP-brainwashed (or XP-empowered at least).
Test this Friday? It's going to be a fun week.
No comments:
Post a Comment