I've worked extensively in Java, Ruby, and Clojure, so I have plenty of experience with having and not having meta-programming and macros. In my opinion meta-programming and macros are not black art, they are simply part of the language. If someone chooses to do something that isn't easy to understand, that's not the fault of the language, it's the fault of the programmer.
(this is the royal You, not Brian) Your language choice should probably factor in your desire to dig into metaprogramming or macros. You don't need to use those features of the language in your own code, but you'll surely run into both using someone else's framework or library. If you prefer not to deal with the complexities that can arise from having those features available, not using Ruby or Clojure is probably a good choice. Conversely, if you want the power of metaprogramming and macros, and are willing to learn them deeply enough that you can deal with some poorly written metaprogramming or macros, then you should prefer Ruby or Clojure. Better to have the ability when you desire it, than not to have it - if you're willing to put up with other people (ab)using that power at times. It's a balance, and I strongly believe that people program in many different ways. (among other tradeoffs) You can have a powerful IDE and a ton of boiler plate, explicit code, or you can have little refactoring support and the ability to eliminate the boiler plate code; you have to chose which you value more. You also need to know that the choice you make will eliminate working with some people - those that choose the other way. Neither group of people will be good or bad, both will have great and terrible programmers who simply prefer to program in differing ways. On Fri, Nov 15, 2013 at 2:51 PM, Brian Craft <craft.br...@gmail.com> wrote: > Pulling this from another thread: > > On Nov 14, 2013, at 2:28 AM, Sean Johnson <bel...@acm.org> wrote: > > The magic of meta-programming (Ruby) vs. magic of macros (Clojure) vs. no > magic (Python). This probably comes down to personal preference, and so is a > potential benefit of any of them, depending on your preference, but it's a > significant difference, so it's worth pointing out. By "magic" I just mean > when the system seems to be more doing something much more powerful than you > can readily see just by looking at the code. A simple few lines of code are > doing all these wondrous things that aren't spelled out completely in the > code (unless you peek under the covers and can understand the black arts > that lie there). In Ruby/Rails this is the result of a lot of > metaprogramming happening, based on conventions (that must be learned). In > Clojure this happens through macros that implement powerful DSLs. In Python, > it doesn't happen nearly as much. Code tends to be more transparent. > > > > This description of ruby, clojure, and python very much matches my > experience (though with ruby I'm relying on the accounts of other developers > that I know, since I haven't personally used ruby). > > Why are black arts and opaque code desirable? It's almost a tautology that > these things are unmaintainable: you can't maintain code if you can't > readily understand it, e.g. if it depends on "black arts", or is not > transparent. > > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.