I'm a Administrator (unix, Linux and some windows apps such as Exchange) by experience and have never worked on any programming language besides C# and scripting on Bash and lately on powershell.

I'm starting out as a service provider and using multiple network/server monitoring tools based on open source (nagios, opennms etc) in order to monitor them. At this moment, being inspired by a design that I came up with, to do more than what is available with the open source at this time, I would like to start programming and test some of these ideas.

The requirement is that a server software that captures a stream of data and store them in a database(CouchDB or MongoDB preferably) and the client side (agent installed on a server) would be sending this stream of data on a schedule of every 10 minutes or so.

For these two core ideas, I have been reading about Python and Erlang besides ruby. I do plan to use either Amazon or Rackspace where the server platform would run. This gives me the scalability needed when we have more customers with many servers. For that reason alone, I thought Erlang was a better fit(I could be totally wrong, new to this game) and I understand that Erlang has limited support in some ways compared to Ruby or Python. But also I'm totally new to the programming realm of things and any advise would be appreciated grately.

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

This question appears to be off-topic. The users who voted to close gave this specific reason:

"Questions about what language, technology, or project one should take up next are off topic on Programmers, as they can only attract subjective opinions for answers. There are too many individual factors behind the question to create answers that will have lasting value. You may be able to get help in The Whiteboard, our chat room." – MichaelT, gnat, GlenH7, Corbin March, Jimmy Hoffa

10 Answers
10

If you were experienced with Erlang, or had the help of someone that was, then that could be fine also. But being new to programming, you should start with a language that has an established community, and the frameworks and tools that come along with that.

When it comes to getting things done, language features rarely compete with an established community. But when you want to bend your mind, play around with Erlang, or Haskell, et al.

I personally prefer Ruby to Python, and have found the community--especially on SO--to be very helpful, regardless of its size. There are some very active experts. Also, Ruby has a one-to-one mentoring community via the ruby mentoring project.

Erlang really shines when you need concurrency, but it doesn't seem like that is an issue with your design.

While I agree with Steve about Python, I personally prefer Erlang just because I like the syntax and style more than Python. Since both languages can do what you want, it is a matter of preference. Try messing around with both languages to see which feels more natural for you and then go with that one. It doesn't make sense to use a language that you don't like (which is why I can't get into Ruby at all).

Erlang is very powerful stuff, but it really shines when you need to scale things really big, or when you need applications that run forever across multiple computers and you can upgrade the software without shutting down the application.

It takes time to learn the language, Erlang, and it also takes time to learn the distributed processing patterns of use.

My advice is to choose both Erlang and Python. Treat Erlang as a long term investment and spend a day every now and then, digging into some aspect of it. But treat Python as the daily bread and butter tool. To keep Erlang on your radar, install and use a number of services written in Erlang. You've already mentioned Couchdb. Also install RabbitMQ for AMQP messaging, ejabberd chat server, and Riak for applications that fit better with a key-value store rather than a document db like Couch. Build Erlang R14B03 from source, and then build all of these services from source as well. Do not use any OS packages from Ubuntu/Debian or Redhat/Fedora for your key tools. Same goes for Python. Build it from source, and do NOT install it in the standard system places. Leave the default Python install alone because many OS components depend on it. Put your Python in something like /home/python.

By having a number of Erlang-based tools in production, you get the benefits without all the hard work, and your Python apps can leverage those benefits. Over time, you will begin to understand how Erlang functions, especially if you cluster some of the apps, such as RabbitMQ. Find the Erlang cookie, and learn how to run an Erlang shell on your desktop with a server's cookie, and open a remote shell inside RabbitMQ or CouchDB.

Python is a language that can do an awful lot, especially when you consider that Python skills transfer over 90% to IronPython on .NET, Jython on the JVM, and PyPy running on a special JITted Python VM. There are tools like Cython and Pyrex that let you write libaries which run almost as fast as C libraries. It is an amazing and sprawling ecosystem which is hidden under the hood of more well-known companies than most people realize. If you were only going to learn one language for your whole career, then Python is one of a very few languages where that would work.

I would start with Python, easy to learn, large community and best of all it will help you with other sysadmin tasks that may be a pain to do in bash or C#. Erlang is an awesome language and scarily effective at what it does but it has a very narrow focus compared to Python.

So, I would start by learning Python as you will find many uses for it in many places. Take a look at Erlang later because it never hurts to have more tools in your toolbox and Erlang in particular teaches you to think about old problems in new ways which is incredibly valuable experience.

I advise you to use Erlang. First of all, as your clients grow, your application will use the Hardware resources very well because erlang has built in SMP support.Erlang is very good for prototyping and Agile development, U will quickly write something, test it, refine it and deploy it,even u can change it as it runs!!!!

Python is an easy language but its Object-oriented (main stream), to build your application well in python u will need a good understanding of its OOP strategy (which u will find a bit wierd, yet much more flexible compared with that of C#). For concurrency in python, u will need to use threads or libraries with Erlang-like concurrency (not good, though) for example, "candygram".Also, without SMP library, your python app will run using one Core of Amazon Cloud hardware.

I have personally used Erlang in a number of projects. I was a python guy but well, Erlang is so symbolic that using its libraries is so easy. Debugging, refactoring, Testing e.t.c are so easy in Erlang.

Erlang has the most beautiful syntax i have ever come across. The paradigm is so simple to understand. Also, an Erlang program will be way too short if u compare it with one written in Python. Stick on using python for scripting jobs for system administration, but in the cloud..... I advise you to try Erlang.

Finally, Erlang is rich in libraries. Libraries are stable. Python has very many libraries that may confuse a beginner. They are poorly managed because a newbie can hardly tell which one to use. Most python books do not point out how to use or choose from these libraries. Erlang on the other hand, has well documented libraries. Infact, you can even figure out the code before you even get the documentation.

Erlang has OTP. The supervision model makes us write programs that never go down!. Error logging, event handlers e.t.c are so good that most of our clients prefer erlang as compared to the old stuff we used to use !.

Believe me, i have never needed anything else as far as Cloud computing is concerned since i met erlang. Thanks Ericsson!!!

Erlang has fault tolerance pattern inside the framework, and every process has a ready to use 'postal box' for caching messages, a very nice integration with other languages. It's a completely new paradigm compared to OO languages. To build the front-end you can use www.chicagoboss.org, and RabbitMQ to get the messages. Anyway, I saw that ElasticSearch is used for this kind of application. This is an excellent book: http://learnyousomeerlang.com/ . If you need a really low latency buffer/comunication, use ZeroMQ in C++. Anyway, learning Erlang will open the doors for "network programming", because the language was structured from scratch to build distributed systems, in the real imperfect world of connected pieces of hardware.

Erlang is a multi-threading oriented language, it has a very specific purpose. I'm not saying it has bad concepts, because the syntax looks quite neat, but in terms of programmer-friendliness, nothing can beat python.
Ruby is also a good language, but its purpose is a little more specific in terms of abstracted-do-it-like-yoda-would-program, but it ends in doing it like scheme/smalltalk

Do you happen to have an experienced programmer around you who know any of the technologies you are considering? If so, ask said person! The most important thing to have is experience and getting it ALL on your own is extremely time consuming.

If the programmer knows Python, then use that. Same for Erlang. You will want one to discuss your ideas and considerations with before committing to a language or framework. If you don't have a programmer, then be prepared to ask MANY questions here as it may save you quite a bit of time in the long run.

Both are perfectly fine for the task as it was explained. The problems may hide in details, though (and they frequently do!)

If you have some spare time to spend - write two versions, one in Python and one in Erlang (start with whichever you better understand). While you would use only one of the results, you'll have an invaluable first-person experience of the both platforms.

If just you want to get the task done or can't currently afford spending time experimenting - I'd suggest to chose the language you can get better support with. If you have a Python and/or Erlang guru nearby, who could spend some time answering your questions - chose whatever he would suggest. If you don't have anyone experienced to ask - I'd go with Python, as it seem to be more popular.