Louis Brandy writes about programming, C++, performance, and genetic algorithms, including a StarCraft 2 build-order optimizer.
HN commenters list it among favorite programming blogs and cite its StarCraft 2 genetic algorithm post that produced the 7 roach rush.
Before I explain my answer, the reader must understand that I'm a pretty satisfied Python programmer now who wouldn't go back. But in terms of actually bringing happiness to me in one brilliant burst of energy, there's only one language in my history that achieved this:
Perl.
Oh sure I detest Perl, now. It provides you with too many ways to make code that fails to express the problem clearly to another programmer, and I'm long past believing that code can survive having only a single mind contemplate it. But it came at a perfect moment for me.
I had spent my childhood dreaming of science fiction futures and tinkering with electronics and computers and always feeling like I was missing some last little a-ha that could make it click and put all the facts in my head together toward acts of creation. I hung out on BBSes with cocky BBS software authors and hackers and really wanted to be part of that crowd. I figured I would take a course at some point and they'd lead me by the nose and by some sort of socratic process I'd suddenly snap and be just like these folks.
So at this point C was being poo-poo'd in favor of C++, and C++ was rapidly on the rise as the premier industry OOP language par excellence. So I tried to learn it. I enrolled in a CS program that taught C++, and made some small progress, but not enough to work on the projects I found interesting. I raced ahead in the assignments and read ahead in the book and found myself in an inevitable slide down the…
There is nothing good in there! Run away! :P There are reasons companies like Google et al. strictly enforce their developers to use only a subset of C++, or to use it as an "augmented C". There's also this fun problem as you learn and use it: http://lbrandy.com/blog/wp-content/uploads/2010/03/c++.png
http://yosefk.com/c++fqa/index.html isn't a book, but the author shares your disgust for C++ and it's fairly detailed. As he says somewhere, he knows C++ better than it deserves to be known. I also don't like C++ as much as C (and I'd like to replace ever having to use either of them with Rust, hence Rust is my language-of-the-year to learn for 2013), and I found the FQA immensely useful for understanding the craziness and defectiveness of C++.
I'd also recommend http://www.amazon.com/The-Standard-Library-Tutorial-Reference/dp/0321623215/ I own the first edition and found it useful.
When I was playing SC2 frequently a few years ago, someone made a program that used genetic algorithms to construct build orders [1]. It would produce a build that technically worked, but in a lot of cases they weren't very viable.
I tried to make a blink stalker rush that'd be the rough equivalent of the build shown in the post liked above, just with the Protoss race in the game. The program would tell me to do things like make two extractors but put fewer than necessary probes on them, pull probes to extractors after X trips or at X time (can't remember which), things like that.
1. http://lbrandy.com/blog/2010/11/using-genetic-algorithms-to-find-starcraft-2-build-orders/
Yes, but even well designed games (from a gameplay pov) can have unexpectedly powerfull builds, like what happened with Starcraft 2 and the genetic-algorithm build order[0]. So simulating builds/gameplays can give you another edge at detecting strange/powerful scenarios.
I also think you should rely on player feedback and community to spot this kind of things, but that could become time consuming if you're a lone developer.
[0] http://lbrandy.com/blog/2010/11/using-genetic-algorithms-to-find-starcraft-2-build-orders/
I love the story of the Seven Roach Rush. To quote the linked article, "The most interesting part of this build, however, is how counter-intuitive it is. It violates several well-known (and well-adhered-to) heuristics used by Starcraft players when creating builds."
I'm fairly certain that this application of machine learning will present some surprising strategies.
http://lbrandy.com/blog/2010/11/using-genetic-algorithms-to-find-starcraft-2-build-orders/
Berlin based design studio OnFormative did a similar project using Google Maps as source material: http://www.onformative.com/lab/googlefaces/
Very nice to see more projects where algorithms and art come together. This post also reminded me a bit of this project where a face detection algorithm and a psuedo-genetic algorithm are combined to create faces out of noise: http://lbrandy.com/blog/2009/04/genetic-algorithms-evolving-human-faces/