COMMENTS
I think you have to strongly consider the domain here as well. This conversation is for your web product, correct?
I think the discussion is very different depend on the following:
* is it a desktop, web-based, or real-time product?
* do you need persisent appserver, or is database persistence good enough?
* is it a financial or healthcare product?
I think that these question mandate very different 'right' answers.
Why just C# vs Python? Why not include other languages in the argument? Ruby comes to mind. If you're doing mostly web development- PHP has to be considered.
It can be toxic to a startup to just choose whatever you're most familiar with. There is not a overall "best" language/framework out there. You need to consider all of the options and then pick the option that works best with your problem domain.
HubSpot is a web app, and I've launched successful applications in C#/.NET, PHP and Ruby on Rails. Despite web being a huge RoR evangelist, I must say that the C#/.NET project went significantly better than any project I've ever developed before. But was that the main factor determining it's success? I'd lean towards "No", but the fact that we rarely grappled with the limitations of the language and framework cannot be ignored.
Agree with both comments so far. Domain of the problem is indeed important (in my case, it's primarily business web applications with some destop tools in the future).
On the Ruby On Rails front, from what I have heard, it seems that Python and RoR can be thought of "similar" (that many of the arguments for one would apply to the other).
As it stands, I'm simply trying to surface the issues and questions. RoR is a great environment (from what I've heard), but it just turns out that the discussion I'm having now involves Python.
Python and Ruby can indeed be considered "similar", I suppose- there are definite distinctions and advantages/disadvantages between the two, but when comparing them against something like C#, they can be lumped together.
The real difference in Python and Ruby is that Python doesn't have a good web development framework. Rails really makes Ruby a viable alternative- ActiveRecord is by far the best object persistence framework that I've ever used. Testing is also very, very nice in Rails. I'm not too huge on how Rails handles MVC, but it is most likely better than anything else out there. What does Python have? CherryPy I believe is the most popular, but I haven't heard anybody implementing it and having nice things to say about it afterwards. .NET, while a nice framework, forces you to essentially roll your own version of ActiveRecord.
The major question is this:
Which language/framework will let me concentrate more on business problems and less on technical ones?
For me, that answer is Ruby on Rails for most web applications. Python just doesn't have a good enough Web framework for it to really be a contender- if you used Python without a framework, you'd essentially be rolling your own, which is a lot of overhead before you can even begin to concentrate on your actual business problems. .NET probably lies somewhere in between, with the only two big things being object persistence and testing.
(Side note: I've found that .NET is vastly superior when it comes to storing things in sessions. If you think your app might be storing quite a bit in memory, you might want to give .NET a bit of a bonus)
I have used all three of the languages under discussion for several years. I have launched Web Sites with ASP/VB/COM, C#, and Ruby on Rails, (never found a web framework in Python that I liked). I have found the coding and development work to go significantly faster in Rails than in C#. I still use C# at my day job, and I go home and use Rails, so I'm very current at both of them. There is no doubt about it, Ruby is a *much* more expressive language than C#.
The determination about which language to use boils down to what you are building, and how much traffic you are going to handle. In many ways I look at C# and Java as the new C, they are the lowest level languages that you should be building something in for most cases (there are exceptions where actual C or even assembly makes sense, but they aren't the rule). I'll give you an example, I work in an industry that has to handle massive amounts of transactions at a time. One of our clients spikes up to about 15,000 api calls and 10,000 database calls per second. The application written in C# handles that traffic very nicely on a single 8 processor box, and we have the capability to scale horizontally if needed.
I'm sure given the appropriate hardware configuration a Rails app could handle that much traffic as well.
The real question for me is this, where is the appropriate trade off between ease of programming and hardware? To build the said system we have a team of around 40 C# programmers, and in looking through the system a great deal of the LOC could be reduced by using a more flexible architecture.
If we could reduce our programming staff to 20 or less we could easily afford vastly more hardware if it was needed. Writing a more performant application at the cost of having to have more programmers doesn't seem like a good trade off to me. Hardware and computer power is extremely cheap compared to good development talent. So for me the choice is clear, in my startup I use Rails in order to maximize my development time.
Oh and as an aside, I know for a fact you'd have to justify the use of C# to many potential acquirers. Over the years, many a client has questioned the use of C# and MSSQL instead of Java or C++ and Oracle.
Just a quick note: Python does have good web frameworks, there just isn't a canonical one, nor one with as much hype as rails. Django (djangoproject.com) is plenty nice and as mature as Rails (it's been used in many production sites, comes out of a newspaper project that is as old as Rails.) Turbogears is another offering.
When I readThe title in reddit i thought my co-dev wrote it. We are facing pretty much the same question with our startup. While he comes from a company where he wrote everything in C#/.net i am much more happier with the python/ruby approach which somehow makes me feel more in control(I like to be able to see the fw classes). So far i have come to the conclusion that the approach "best tool for the job" is the most effective. Some things are easier in .net some in python. Python is the quick solution while .net the heavy impressive fw application. I am very excited about your future articles on the topic..
looks like you've got a bug in your comment system's url conversion
I think that the topic should be widened definitely to cover more languages. My own experience is to look at what it is you need to do and then assess the languages on their merits. I do this now after failing terribly using PHP for something - basically we've used PHP for years as most of our development has been web-based. We recently had to create an application to compare webpages for changes (I'll not go into the detail) and we used PHP to do this, including some web crawling. The result was that PHP just didn't cut it and after a large amount of money had been spent on development we ended up having to completely rewrite it (In Python) and it works very well now. PHP is a great fast language for developing front-end sites, but when you need powerful parsing its not great. This has resulted in us now using PHP for the front end display to this particular product, but using Python at the back-end for the intensive parsing and analysis work that we're doing. What I'm trying to say, in a not very good way, is that:
1) Does it necessarily come down to just one language? Why not utilise more than one based on their strengths
2) You need to evaluate what you want to actually do and then see which language(s) fit
There is a more deeper issue, already somewhat identified by your experience with Easel. I see the argument as C# or non-C#. By choosing C#, essentially you are committing yourself to Microsoft technology, on being a Microsoft 'partner'. This is not a bad thing in itself of course. Many successful and hugely profitable and acquireable companies have been built on MS technologies and there is no reason to believe this will stop anytime in the next decade or two (unlike Easel you mentioned). Incidentally the non-C# is further divided into Java or non-Java. Non-Java is further... you get the idea.
Mr Fixit I think the selection of the two languages is more to represent two points:
- Different language/technology orientation and how to deal with it in a startup.
- Lightweight/heavyweight development environments.
So far the writer introduced mostly the first point, while i am hoping he will touch the second point too.
So basically he could have mentioned any number of languages. The languages he chose are in my opinion very representative of the current mainstream programming world.
Ismangil c# has a free Mono port which is quite active. Even if MS decided to close it's upcoming C# 3.0 specs, we would have a fork for free use. Mono is quite nice and some very good applications have been written using it (Novell mainly). I see a much wider division in the programming world. One among heavyweight and lightweight languages/fw. Nowadays you can do anything with every language. Python can be used for desktop applications, network scripts, webframeworks etc.. so can .net. The main difference for those languages is the heritage they bring with them, mainly an open or not framework, community, development principles, development environment etc. etc...
While I think lesson 3 is true I think it's a fundamentally flawed perspective to use when choosing a language. It assumes that you're a company whose sole goal is to be aquired and not to write great software. If you are strategizing based on some long term goal of "being aquired" instead of being a great company worthy of being aquired you'll never produce great software. If you're planning on being a great company then you really should be focusing on doing what it takes to be a great company. If the best language for that goal happens to be a buzzword compliant one then great. If not, is it really worth choosing one that is and knowing you'll be hurting your productivity and working in a less enjoyable language every day really worth that?
the whole article isnt even written yet and already theres a rails v. python flamewar.
python has a lot of great and successful web frameworks, suiting all different tastes: django, pylons, zope, turbogears, etc. It also has a much more flexible ORM than ActiveRecord available called SQLAlchemy, which embraces the reality of difficult real-world database schemas - as opposed to ActiveRecord's philosophy of "you shouldnt need to use those things" (i.e. composite primary keys, etc). in addition, Python's engine is more mature and high-performing than that of Ruby, is widely used by Google, Redhat and others, and also has threading and unicode support which Ruby lacks.
interestingly, there is also a Python interpreter that blends in excellently with .NET called IronPython, downloadable off of Microsoft's site, which includes native support for .NET concepts. That alone makes Python a better choice than Ruby for a developer migrating from C#, or integrating an existing .NET application with Python scripting.
Mike, I agree; I have just started using IronPython and it is a good compliment to C#. To be honest, .NET is a must for any of my projects, and if I can't use the .NET Framework, then I will just use Python (compile it with py2exe) or C/C++. Besides that, C#, Python, and PHP (for .NET) all share something that is a necessity: ease of use.
P.S. I realize this is an old arcticle.
Some time i think it is crazy but i am working on a project to develop a new language. initially i developed it like interpreted c++ then i changed my mind and make it like php. It will not do everything but my aim to have a simple language to develop a website. i decided to make this like dotnet that will support php and c++ scripting. this language has database like mysql, xml regexpression all buit in.
Please have a look at my web site and make some comments.
www.ashnah.com
php like ashnah programming language