3 ms·
It sounds like you are not in a situation in which taking a technological dead end would be catastrophic, so I would advise following whatever path seems most i
by dilap 13y ago
It sounds like you are not in a situation in which taking a technological dead end would be catastrophic, so I would advise following whatever path seems most interesting to you, and not worrying too much if it's the "right" thing.
That said, here's my 2¢.
I have a background in C++, straight C, Python, and Objective-C, and have dabbled in a bunch of other languages. In Python, I have worked on a backend for real-time routing app (which wrapped a C++ routing core); a frontend (in Qt) for a scheduling application (that embedded a C++ optimizer); and am currently working on a backend for a social app.
I have no experience w/ clojure, though it seems very interesting; the most salient feature (from my outside perspective) is its encouragement of programming using immutable datastructures. I have some experience w/ macros from emacs lisp and dabbling in scheme, and I would encourage you to avoid them -- macros are basically an easy way to define a new language, which isn't something you should be doing unless you have a really good idea of why you are doing it. (But other people would disagree w/ this.)
As for Python, it's a lovely language, but beware:
(1) It's slow. This is something that doesn't matter until suddenly it does; people will just say you should "write the slow bits in C", which I have done, but I would strongly advise against because
1a. Integrating C and python is a pain-in-the-ass; imagine all the normal pain of a compiled language, and multiply it by maybe 3
1b. It's actually a very hard optimization problem to find a computational core that can be called infrequently enough that the overhead from Python->C doesn't kill you. I suspect that for many programs, this cut occurs at "the program essentially written in C".
(2) It's dynamically typed; this is an eternal flameware, but I'll just say the longer I've been programming, the more I appreciate having as many compile-time checks as possible. Think of types as an incredibly comprehensive set of tests that were written for you for free. If you do use python, I strongly recommend using something like pyflakes or pylint.
I can't speak to clojure. :)
I might also consider something like Go -- it's simple, it has a reasonable set of static guarantees, and it performs reasonably quickly. But I've only experimented w/ toy programs so far -- caveat emptor!
And good luck :)
- scobar 13y agoYour first point is accurate. I will likely start with Python because that's what I'm most attracted to currently. I want to thank you for taking the time to offer your advice with such a thoroughly written explanation from your POV. I will check out Pyflakes and Pylint. I was already intrigued by Go, so I'll learn and dabble with it for fun programs. I really appreciate your help.