For me, it has been by far Functional Programming.
Once you learn what it is and how to do it, you see it eveywhere. The function style, when used appropriately, can leads to much simpler solutions than imperative counter parts and can be an excellent tool in your tool belt when stuck.
Learning functional programming is probably a bit trickier than say, Regular Expressions, because functional programming isn't about a programming language it is about a mindset. Particularly, avoiding mutation, emphasis on data transformation, etc. However, you can pick it up pretty easily if you use it consistently. I would recommend starting at Project Euler
Also, shameless plug here, learning functional programming doesn't just mean that you have to learn a language that won't benefit your day job. If you are a .NET developer, F# provides an excellent way to get started with functional programming.