How’s that for a post title that gives me a lot to talk about? Obviously, I can only talk about things I know I am ignorant of. Also, I will restrict the topic to the vague category of computer science, so that will narrow down the list. And what the hell, I’ll make it a top ten list, since those seem to be so popular these days. So, without further ado, here is the list of 10 things that finish the sentence, “I don’t know… “
#1 “What monads are.” — I have tried and tried to get a straight answer to this one. I have not tried terribly hard, but that’s how these things happen. I know monads are some kind of tricky way to avoid side effects for certain things like IO in functional languages. I know that they’re a transplant from category theory in mathematics, but to date monads are a black magic as far as I’m concerned.
#2 “What currying is.” — Listen. I will just tell you that I have not investigated this one. I keep seeing it thrown around as a feature, or mechanism certain languages have, but haven’t looked into it. A quick trip to Wikipedia would probably cure me, but I need to pad this list a bit.
#3 “What the minimal set of features for a Turing complete language are.” — All modern programming languages are Turing complete, sure. SQL is not. Regular expressions are not. I have an intuitive sense of the ways these things are different from real programming languages. Currently though, if you gave me a brand new programming language you just invented, I couldn’t tell you with certainty whether or not it was Turing complete.
#4 “How to program in Smalltalk, Haskell, Scheme, Objective-C, OCaml, Tcl/Tk, Brainfuck, Befunge, and Python.” — This list only includes languages that A: I could think of off the top of my head, and B: languages I’m interested in learning eventually. Scala almost made this list, but I don’t like the JVM enough to get excited. .NET can likewise go away. I won’t list all the reasons I am interested in these languages, but Befunge is worth learning specifically because it is 2D.
#5 “How to program x86 with all the neat extensions like MMX, and SSE 1,2,3 etc. “ — I have programmed assembly for the Motorola 68000 for a class on computer organisation, but the huge instruction set available on a modern Intel machine intrigues and mystifies me.
#6 “Whether P = NP “ — Luckily, I am in good company on this one. Personally, I don’t think they are equal, but the optimist inside me always holds onto hope. The rate at which mankind would progress following a constructive proof that P=NP would be something to marvel at.
#7 “The exact relationship between time complexity and space complexity.” — Everyone seems to have the intuition that there is always a tradeoff between the amount of computation that must be done and the amount of storage space required. Store a bunch of lookup tables and you can reduce your computational load. Increase the complexity of your algorithm and skip making up a bunch of tables. It seems very fundamental, but is there an exact mathematical theory for a law of “conservation of complexity” or something similar? I don’t know. And I promised myself I wouldn’t go to Wikipedia while making this list. (Actually I already cheated, because I looked up Befunge to make sure it was the 2D language I was thinking of. It was, so I claim it doesn’t count!)
#8 ” enough about reversible computation.” — This one is stretching the format a bit, but essentially, I know a little about reversible computing, but not anywhere near as much as I would like to. The basic idea is really neat: theoretically cool processors. Information isn’t destroyed in the process of computing, so no heat is generated. The sad part is that I have told you basically everything I know about reversible computing in this little paragraph.
#9 “How to write a compiler.” — I am sorely lacking in the skills to write compilers of computer languages. I am more specifically lacking in the skills to write compilers for 2D languages…
#10 “How to parallelize quicksort in Erlang.” — In theory, it should be easy to make divide and conquer algorithms parallel, but I cannot for the life of me figure out how to do this one. It is probably more a result of my lack of competency with Erlang than with any real barrier to writing such an algorithm… But there you go: number 10.
There are a lot more things I could write in here, like: “How long sandwich meat keeps in the fridge.” and, “When it’s finally going to cool down in Florida. It’s still 70 in the middle of December.” and “Who let the Dogs out?” But I think I will leave it this length for the time being.
9 Comments so far
Leave a comment