Inspired by a recent post by @etherealmind, I’ve been thinking about the pros and cons of learning different programming languages, and what would be best suited for SDN.
Pros: The standard when it comes to sockets and “hard core” network programming.
Cons: Pointers, memory allocation, and a tendency (for me at least) to build monolithic code.
APIs/Frameworks of interest: onePK
Pros: Widespread use, and lots of libraries for doing things. Cross-platform. OpenDaylight uses it.
Cons: Requires a lot of “cruft” to do simple things.
APIs/Frameworks of interest: onePK, Spring, OSGI, OpenDaylight
Pros: Great high level language, lots of libraries, used by many projects like POX
Cons: Less useful for OpenDaylight stuff
APIs/Frameworks of interest: onePK, Django, OpenStack (added 2013-25-04)
Pros: Another nice high level language, Rails, used in Chef/Puppet, seems to work well for building DSLs
Cons: Less useful for OpenDaylight and onePK
APIs/Frameworks of interest: Chef, Puppet, Rails
Pros: Widespread use in web programming. Node.js allows for server side stuff to be build and is fast due to V8. Node.js encourages event-driven programming which may map well to network stuff.
Cons: “Different” syntax (which gets somewhat fixed by Coffeescript)
APIs/Frameworks of interest: Express
Pros: A functional language that runs on JVM, interop with Java, “cleaner” than Java
Cons: Not as widespread use.
APIs/Frameworks of interest: Lift
Cons: Doesn’t seem to work well with OSGI. Smaller user base.
APIs/Frameworks of interest: Compojure
Its tough to find one language that does everything I want, with minimal fuss. At first glance it seems like Java can do everything, with Python as a close second. I’m interested in the JVM functional languages such as Clojure and Scala, but it may be tough to get help with problems when using those languages. What I’ll probably end up doing is use Python when I can, then drop to Java when necessary. Am I missing anything? Feedback is welcome!