Contents

There is a lot of theory taught in formal education, but when the truth is told, you really should spend at least 60% of your time doing rote memorization. A lot of the best algorithms are not intuitive at all (besides the much maligned Bubble Sort and Selection Sort)

Memorizing the basics makes the learning of progressively challenging algorithms much more intuitive. Most people spend far too much time problem solving and not enough time doing memorization, which is why so many people end up feeling so stupid.

This is a hot topic of debate.
Some people want to make this an "Algorithms in Python Class", which is valid except that most people interested in algorithms would really rather do them in Java or C. What can I say? The only thing that will be hard is that while Python doesn't have any pointers, and C isn't that hard, there just seems to be some kind of psychological issues with it for folks new to programming. (If you could learn Calculus in college, then how can C be that hard??? Come on!!) I mean, everything is still built on top of C, but choose whichever language you want!

Most great courses and textbooks give examples in pseudocode and in C, so you'll be at a total disadvantage if you don't learn C. And of course we all want to progress beyond basic implementation into stuff like theory and math, and all that is the wisdom of the stars. So do whatever you want!

Pointers aren't scary in any case. It's how your computer works. Just you wait until you hit binary!

Mazes for Programmers: Code your Own Twisty Little Passages building mazes - we'll actually get to use Binary Tree algorithms, which admittedly is rarely encountered in day to day life for a normal software engineer. You get all the coding interview stuff but wrapped in a delightful package hopefully. link

Essential Algorithms: A Practical Approach to Computer Algorithms - Rod Stephens link code is in C++. He does throw some math at you, but the examples are ultimately easy to understand (I hope!) and he throws in a lot of real world examples. Really fell in love with this despite my allergies to C++.

Cracking the Coding Interview - This is really nice, especially if you are only interested in algorithms for interviewing and don't have time for other stuff. She gives a lot of great real-life advice, as interviewing for big tech companies seems like its own thing and it's a difficult but not impossible game to play; just like the SAT's, LSAT's, ... etc. Much of it seems to be simulating your life as if you were a 3rd or 4th year undergrad as a Computer Science major. Most Masters and Ph.D. Computer Science folks can't do this stuff from memory either. So just pretend that you're 21 again, and finishing your last semester as an undergrad at MIT, at Stanford, at UC Berkeley or at Cal Tech and then you'll be all set! ;)

Ensure that programmers and Computer Science majors don't forget this wonderful stuff, which is admittedly not used in everyday Software Engineering. By keeping this alive in our memory, we are less liable to forget it only to just have to review it once the interview at the next big tech company rolls out!

Enable smart people to perform well in interviews and to do incredible whiteboarding skills

Turn interview questions into something fun, because in the end Computer Science is beautiful and is something everyone working in tech should be passionate about.

We meet Sundays 2pm-4pm in the Church classroom and also have individual study group sessions at separate times throughout the week, at Noisebridge.

Held in the Church classroom - purposes are whiteboarding algorithms, learning the deep mysteries of computer science, and delving hopefully into the art and history of why things ended up the way they are today.

Anagrams - anything to do with anagrams (matching them individually as strings or strings in an array) - involves sorting the characters in a string alphabetically. This is generally O (n log n) but depending on the programming language there are ways to beat this. it'd be cool to have a discussion on this sometime

trees are their own beast and so are graphs. I've noticed that we blow most of our sessions just reviewing how to build trees again since everyone's memory is rusty. getting to the really interesting stuff would be cool