Some quickies:
InstantVoodoo.com -- Funny.
The first scientifically recorded case of homosexual necrophilia in the mallard duck -- Who knew? Also a winner of an Ig Nobel prize this year.
Click here, you idiot -- What the recent ruling in Eolas vs Microsoft means for the next IE update.
Jumpers -- A New Yorker article about "the fatal grandeur of the Golden Gate Bridge". There's one quote in there that's incredibly haunting, though I won't ruin it by revealing it here. (Via Crooked Timber)
Evolution of Alphabets -- Neat animated gifs depicting the evolution of alphabets.
Colour scheme picker -- My new favourite tool for picking colour schemes. Invaluable.
C++ Reference Guide -- By far one of the best and most concise reference guides to C++ that covers many topics other resources don't even touch.
That's it for now, I guess. :)
// posted at 18:15. permalink comments
I've just finished a substantial piece of coding in c++ and I think I'm finally starting to get a handle on c++. Key points:
Memory management. It's no wonder mistakes can creep in given the number of different contexts different types of memory management come into play, not to mention syntactical gotchas like delete vs delete [] and so on. It's nice to have choice, but not when the selection overwhelms the programmer and simplifies the act of making mistakes.
Some people say just strictly follow some convention with managing pointers and you'll never go wrong. I don't buy it. If everyone's following some unwritten rule for managing pointers you might as well not give us the gun to blow a hole in our feet and encode the protocol in the language itself. It's not like anyone purposefully wants their program to segfault?
C++ can be fun. Hah, imagine that. It can be fun, but most of this is derived from using STL algorithms and other functional programming concepts. The only thing that sucks about this is the awful syntax you have to use, and at times it's overly verbose or clunky (consider functors vs plain higher order functions in functional languages).
Some people use C++ strictly as a better C with the occasional class thrown in even though Stroustrup books almost repeatedly warn against it. But I don't see what he expected considering the name of the language and the requirement he set in being backwards compatible with C. Maybe this is a historical mistake and Stroustrup didn't think it possible to do what Java eventually did with its C-like syntax but non-compatibility.
Without any doubt, I prefer dynamic languages. The leverage they give you for quick prototyping or exploratory programming is completely unmatched by static languages. Other people have said it before, and I agree that static languages go hand in hand with a false belief that you can pre-plan everything in your program. The resulting feeling you get is like you're building some monolithic building that you need plans for right down to the tiniest detail. Dynamic languages feel completely different--they're fluid and they encourage a Zen-like process of manipulating the ideas in your head... though this probably just goes to show how subjective language preferences are and the fact that for me, dynamic languages map better to how I think about and solve problems.
Likewise with the above, I strongly dislike static typing. It is definitely worth--ah, what the hell, screw the politeness: static typing sucks. I'm sorry. I'd trade type safety for rapid prototyping and flexibility any day. Maybe it's better if there's type inferencing like in ML? But that'd probably just relieve the burden of declaring types, not in manipulating them.
All in all, it's enlightening learning more and more C++, but then many of its features are present in other languages in more elegant forms anyway. In other words, I don't really like C++ but I don't really hate it either.
// posted at 01:58. permalink comments