There’s a common feeling I get when programming in Java. “Shit. I can’t do that. Methods aren’t first class citizens”. The same holds (in greater generality) for types, code, macros, tables and a variety of other things.
Some of these problems have solutions in the works. First class functions have of course been around for ages, dependent types are giving us first class types, multi stage programming gives us first class code and macros. Not sure about tables, but that’s probably because I don’t know enough database theory.
Common theme here: Anything which is not a first class citizen in your language will at some point become a pain when you want to manipulate it as one in order to get the right abstraction for your problem.
I wonder how far we can get around this? Certainly the various lisps seem to come the closest, but I’m not sure they go far enough.