Its been a while since my last post, but we U of T students all know that in October and November, midterms and assignments are unrelenting. On the bright side, there is no shortage of material to talk about since my last update, so without further ado, here's my take on program correctness.
Program correctness has always been my least favourite topic in CSC165, and unfortunately it still has that honour in 236. I find these proofs to be very rigid and cumbersome. There doesn't seem to be that moment of satisfaction that you get when you discover an elegant solution; rather, I just trudge along until the proof is done. I think my problem is that I take too much as assumption. As CS students, we can usually tell if a simple piece of code works, but there's a huge leap between 'I'm pretty sure it works' and 'I KNOW it works'. For that, I suppose the level of rigour we have been using is necessary. Maybe if I would appreciate it more if I tried it on an algorithm that I didn't understand, but for now, I'll just have to keep going.
On a lighter note, I've greatly enjoyed the work we've done so far on formal languages. Before knowing what the topic was, it sounded very dull to me in the course outline. And at first, it was a little difficult to sort through all the new definitions and notations. But behind all this, the problems turned out to be challenging and even fun. Attempting to convert a language described into a DFSA or regular expression is rewarding, almost like a puzzle. And even proving the validity of these languages seems like a useful and informative exercise. I look forward to whatver else we will do with formal languages in the coming weeks.
PS: If you're looking for a fun distraction, try Manufactoria. Its a game where you have to process binary strings, reading only one character at a time - essentially, building a physical DFSA. It gets difficult, but is also very rewarding when you come up with a solution.
No comments:
Post a Comment