Java Vs Python for a Start-Up: Help us Decide.

Update(01/28/2013): Looks like this post is still getting attention. So let me bury some ghosts. We decided to go for Python but due to personal circumstances I wasn’t able to continue with GrabHalo. I have  built  a similar mobile back-end but in Golang(http://golang.org/) because it’s even simpler(in accessibility) than Python for quite a few software challenges. Python, I still love and continue to tinker with, on a regular basis. As primarily an Android Developer, I have to use Java at-least 35 hours/week. And I still hate it. It limits creativity by bogging down me in an ocean of verbosity. 

Disclaimer: I am pitching for Python.

Language Wars. Don’t you just love them? The adrenaline rush, the supreme feeling of clobbering your opponent on the head with quirky intelligent insights, the high of proving your point when the opposition is too slow with a come back. It’s like debating religion. It’s like MTV’s “Yo Momma”. It’s way better than discussing politics and sometimes even better than tasting a blueberry yogurt(the Burn Notice way).

Recently I am involved in an ongoing debate of: Java vs Python. I work in a startup GrabHalo and we are “the shit”(we got selected in Startup Chile ,July 2012). We are working on Location based Messaging. Needless to say, like all passionate debates, this thing is going nowhere. So here I am, taking the next logical step and opening up the fight to scale up to a proper battle. Just like the old days.

Java, I loved You.

I started my career as a Java Developer at a big IT MNC in Pune, India in 2009. During the mandatory 3 months Java Training, impressed my manager and was recommended by him to be deployed as a “proper” Java resource. “Proper”, since only a few who go through such trainings actually get to write code. In my batch of 40 people, I was the only one who went ahead to write code, rest of them were cast into Testing and Support.

On the job, I did well again and received an award or two for “Project Innovations”, which is their way of saying, you actually did the job you were supposed to do, here, have an appreciation certificate and a battery operated table lamp. Pardon the obvious lack of humility here, but I want to say is, once upon a time, I did love Java.

Ok, Let’s get to it. Why I loved Java ?

  • It’s easy to understand. The documentation is extensive and the community is helpful.
  • Coming from Assembly and C, it was a big relief not to manage your registers.
  • I could get things work easily.
  • Awesome IDE: Eclipse!

I loved Java because it was easy. But was it the right tool for a job? As an Electrical and Electronics Engineer, the significance of right tools has been beaten into me by numerous finger burns at the soldering station, days and nights lost due to the Millimeter with a lower precision or impedance, wasted PCB’s due to the incorrect diameter of the hole drilling bit. That list is huge and the only inference is: delays, delays and delays.

Why I started hating Java and loving Python?

I resigned from my job at the IT MNC to join an Android tablet startup, where among other things I learned Android Framework and Python. This was the first Python project I started with: Kivy(check it out, it’s really cool). Kivy allows you to create OpenGL UI widgets in Python while giving you the same performance as C(the OpenGL code is written in Cython). My first reaction vis-a-vis Java, after getting an average grip over Python was: I felt cheated.

Here I was working with a language which allowed me to precisely put my thoughts into code. Java too promised me that but now I did not feel that way. Following code snippet perfectly sums up my feelings, though it is a rather simplistic view.

Hello World in Java:

public class HelloWorld {

public static void main(String[] args) {
System.out.println(“Hello, World”);
}

}

Hello World in Python:

print “Hello, World”

What! I don’t need to jump all the hoops! The Kivy project got me thinking: “So what we can do is write code in Python because it is simpler, and if there is a heavy computational task, just offload it to C.”  Wait, that’s what I did while designing microcontroller boards too, if there was extra heat I put in a heat sink, if the analog switch generated current spikes, I replaced it with a transistor. The realisation was painful. I was a JavaLand citizen not long back. So I decided to look at some stats.

source

Java is faster and Python is third last from bottom. But, why didn’t  it feel that way. I couldn’t put my finger on the exact problem. My lack of formal Computer Science education did not make it any easier. I needed a good computer-sciency sounding term.

After a fairly intensive research, I found it: Expressive Power

In computer science, the expressive power or expressiveness of a language is the breadth of ideas that can be represented and communicated in that language.

Language Level Relative to C
C 1
C++ 2.5
Fortran 2
Java 2.5
Perl 6
Python 6
Smalltalk 6
MS Visual Basic 4.5

source

Python lets you express more using lesser words. On the other hand, Java has been called the Kingdom of  Nouns and the Culture of Bloat. Paul Graham says this about Java.

Now that was something I wanted to hear. Of Course. It all made sense now. Since I can express myself  faster, I had more time to make the code stabler and bug free. And in some cases, juice up the execution time by offloading the task to the King Pin(i.e C). I love Python now.

Java for Backend Development?

Now this question is giving me sleepless nights. I have the following reservations:

  • Development: Java will take 2-3 times more lines of code to implement the business features.
  • Deployment: Slower Deployment Cycles.(hence slower iteration).
  • Concurrency: Can Java Web Servers(e.g Tomcat Apache) handle high level of concurrency? Answer: Debatable
  • Node.js,Twisted : Can Java Web Servers give me the same features of an evented/non-blocking  I/O? Answer: Nope ( Update: I jumped the gun on this)

Python for Backend Development?
My reservations:

  • Python is slow in execution.

I also found this gem: http://gaejava.appspot.com/. The tests show Python is slower in some and faster in other use cases,  but it is not too bad.

What are our business needs?

  • We should be able to handle high number of api requests(using a No-Sql Database).
  • We should be able to serve high number of push notifications.( This has a clear winner in Node.js).

Well, there you go. All advice and criticisms are welcome. Do not be gentle.

-Adnaan

Discuss on HN.

Update: Found similar thread on HN. It’s  2 years old but still relevant: http://news.ycombinator.com/item?id=1378815

116 thoughts on “Java Vs Python for a Start-Up: Help us Decide.

      • Java can handle concurrency just fine, but I understand your preference for Python.

        Have you considered working with Jython? All the benefits that java brings, but writing in Python code. You can even interact with java APIs, and Java classes other people have written.

        You seem heavily tinted towards Python and your argument isn’t well put.

        I suggest though that you program in whatever language you feel fits your mind best as you only lose efficiency from struggling with your tools.

        Good luck, and I hope (even if you wish to stay in normal python) that you look into your options in less of a superficial manner and don’t start a debate with an obvious bias. What makes language wars are posts that underestimate the problem at hand and state facts about things they don’t understand.

        • though jython lets you interact with java api’s but on the other hand you won’t be able to use anything from the “cpython” which is the standard python.
          moreover having worked with frameworks like django,web2py and web server like tornado, i feel that there is almost equal support for python as for java for various implementations on the server side

      • i think you said what you feel and experienced for me at least and i’m still in school and love java and also python and i think it helped me very much even though i don’t know anything about java servers or stuff like that. thanks for every thing, Great Help, have a Great life.

  1. I always say “Developer Happiness”. Having worked with Java/C# myself, I’m just happier programming in Ruby (or Python). It’s easier to find developers who are like minded and appreciate the expressiveness those languages provide. It’s harder to weed through the Java/C# developers who “know” software but don’t *know* software. I would like to think many of the same programmers I work with (or will work with) think the same way.

    I call premature optimization on deciding to use Java purely on the basis of benchmarks unless you did a spike test and know of something specific. Even so, you could always use a dynamic language on top of the JVM with JRuby/Jython, come down into there if you need the pref or (as you said) into C. Or in your case, try out PyPy. Most likely a smart caching setup or better client-side code will be better than your server-side being 10-40% faster.

    I know of a site whose server (in Ruby) returns in 50-200ms, which is respectable. If you statically compiled it in ASM, sure – you could get that down. But the browser takes 8 secs to load the page and navigate around. It’s obvious where the work should be done. Most likely it’s not at the server where you’re hitting 500ms+ responses but everywhere else that adds up.

    If you’re building a web site or an API with the right architecture, then the language doesn’t really matter. How happy are you or how comfortable are you in recommending a friend to join your company if you don’t like starring at a full page of cruft yourself?

    • You bring up some really significant points about hiring developers and premature optimization. Helps me a lot. Thanks

  2. Dude, you already answered yourself.
    Enjoy python. Be more productive, release faster.
    Still having performance problems?
    Why don’t you give pypy a try? Pypy is very fast on compute intensive tasks (sometimes close to c) and usually up to 5x faster on common code.
    And it’s getting faster every day!

  3. Java and only Java, Web Apps, Desktop Apps, Web services , Batch programs, Mobile Apps, business Apps, Scientific Apps, you name it, general purpose language Sir. No body hates Java only hates The new owners of it.

    • Yes, the owners are kind of forcing Java down my throat. I would have liked Java, if it was more independent and had alternative options on the platforms it exist. Specifically mobile platforms like Android and J2ME.

      • For mobile applications which access data from the back end through REST or whatever, I do not mind Python or any other programming language, being said that someone should convince me that alternative language has many +1’s over Java. I am basically a Java developer and used groovy/grails in big projects.I feel coding in and with groovy/grails is easier and faster to execute projects but as the complexity and requirements for parallel processing grows issues creep in. What issues – Thread related. BTW we knew(not as much as we know after implementing :) ) interpreted languages are slow, more error prone and hard to debug before started using this framework, constraints on time, cost, etc made us to adapt. My opinion – If there are time constraints and client do not get bothered by silly bugs, response time then we can use any interpreted language and I love groovy/grails. Sorry not sure If python has framework as good as grails. For high medium to large scale projects there is no option but to go for strongly typed langs.
        For back end programming whatever we talk it is hard to replace Java based libraries, messaging, frameworks, RDBMS connecters, knowledge base, IDE’s and what not every thing. I used to talk with the same tone that certain language is much easier to code, etc but eventually realized that we need to consider future prospects such as what if application’s user base grows, what if functionality and thus code base grows, what if there is more tighter definition of response times, can we use libraries like hadoop, redis, Is this language natively supported by these libraries, what if requirements for bug free software grows, can we write test cases which will be executed at run time if yes how much time needed for this.

  4. I think using Hello World as an example of Java’s ineffective syntax and boiler-plate, is an over-simplification. It’s not a scripting language and not intended to be used as one.

    Why I would choose Java over Python is the platform. You can then write Java, Scala, Clojure, Groovy, Jython, Jruby or any other of the numerous JVM languages and get the benefits of the platform. Of course Java will stay as the base language on JVM, but those others will drive the platform forward.

  5. Why do you want to choose only one of them? I would have chosen Java on the backend not just because it is fast and handles concurrency, but also because of the great ecosystem of libraries and servers that support them. Python is “batteries included” and also have a lot of libraries, but there are so many great sources of libraries for Java that seems more robust and dependable.

    On the frontend it’s a bit different. While Play and other framworks that has been released in the later years as a response to Rails look good, I would probably go for Python for now.

    So to summarize:

    I would have used Java for web services on the backend and Python for the web frontend.

    But of course this will also depend on the skills of the developers. And also it’s quite popular to “dislike” Java these days, so perhaps you will attract a different type of developer.

  6. …one caveat though…
    Like you, I love python. And my concerns about performance are rapidly disappearing thanks to pypy.
    However, the current trend in web development is moving as much as possible of the business logic to the client (browser).
    Html5, css3, ajax and fast javascript engines are game changers, specially with the advent of mobile platforms and tablets.

    My choice:
    Python (or pypy) on the server (just to serve data through a json api).
    Business logic in Coffeescript in the browser.
    Coffeescript is a pythonesque syntactic layer on top of javascript, and it’s as good and fun as python or ruby, since it takes features from both languages.

    Coffeescript coupled with jQuery is an absolute pleasure.
    And if more structure is needed, you can use Backbone.js (or Knockout or Agility) as an MVC framework.

      • adnaan sir i wanted to know as i have completed my computer engg and now i m confuse between to choose java aur linux pplz help me can i have ur contact number soo tat i can get some help from u
        you can give me a miscall at 8082771393

  7. i see you haven’t even included C++ for consideration! i mean, if access to C was a big + for python, then c++ should be the obvious choice no? somewhat less verbose than java, as powerful as C and arguably as good as python for concurrency etc.

    but no, c++ doesn’t qualify as the language of choice for most startups. because Java Platform isn’t comparable to c++ or python, which are languages. most application software companies use the Java platform, (jvm, apis) and use of Java, the language is incidental. hence the existence and popularity of scala and clojure.

    since some of the most powerful computer science concepts of recent times, web index (Solr), map-reduce (Hadoop), no-sql store (HBase, Hive) are readily accessible on the Java Platform, its a great place to start.

    the same cannot be said of python, although an incredible amount of libraries are now available to make py qualify as a platform.

    but, lets take a step back and realize that some of the badass computer engineering companies today (Google, Facebook, Microsoft), use c++ as their primary backend language. i mean c++ or its siblings (C#, Go). why? becos, these companies have the requirement and the man-power needed to build their own platforms using c++.

    i think, for a startup, its safe to use off the shelf, open source software which for the most part are available in java and resort to python, rails or c++ based codebase only if their engineering demands it.

    if anyone here doesn’t like this java dominance of OSS, we should make contributions to the python and c++ open source communities. this java dominance is mostly due to Sun and Yahoo, who turned over their codebase to Apache and struggled themselves as businesses.

    • “since some of the most powerful computer science concepts of recent times, web index (Solr), map-reduce (Hadoop), no-sql store (HBase, Hive)”
      Recent times = 1980s
      Just repackaged in shiny new wrappers and hyped by companies.

  8. I learnt Python for few months and recently i switched to Javascript.
    I know! it is not Python vs. Java but Python vs. JS but yet you are welcome to read and follow me.

  9. >>I also found this gem: http://gaejava.appspot.com/. The tests show Python is slower in some and faster in other use cases, but it is not too bad.<<

    From that page I can't even see what the tests are supposed to do, let alone how the programs were written or how the measurements were made!

    • I do not mean the actual writing of code, but the expression of your idea into a working code. In my opinion it takes longer in Java to get to a result.

    • Further,

      I must have missed this. But, what is your purpose?

      Your article sounds like you are replacing a web server (apache) with Python.

      So, I am at a loss for your real intent? Is this just a ‘what is faster? My car or yours?’ Or do you have a specific project in mind?

      Wayne

      • I am debating the relevance of Java in the context of a start-up environment with limited resources, short deadlines and a haphazard/quick release cycle. I have mentioned my two business needs at the end of the article.

        • No.

          You are not debating the relevance.

          You are debating speed of programming with limited resources.

          That is an entirely different problem.

          Trying to program on the CHEAP is a much bigger problem.

          How many concurrent users?

          What database?

          These are relevant to your business needs.

          30% less code? That may be relevant.

          But, if you code cannot scale? NOTHING else matters.

          I do not see a problem with Python scaling. Nor with Java.

          I supported java with over 40,000 concurrent users some time back.

          But, the bigger issue is ALWAYS will it work in PRODUCTION.

          There is no bigger nightmare than your code not working because you tired to learn a new language in a hurry to get by on the CHEAP.

          I have seen that several times.

          If you are worried about short deadlines, stay with what YOU KNOW.

          Wayne

        • I can tell you from personal experience working with Java,Python, Ruby and PHP in very small teams (2-3 developers) doing web startups that Java was our best choice, and resulted in the fastest development with the most flexibility and the best tools. It’s not about the language, but about the framework, the community, and the tools. Have you tried building and app in Spring or Grails? Once you spend time working in an IDE like IntelliJ IDEA, there is just no going back to scripting in VIM. Tool support for Python, Ruby and PHP is pretty bad, and almost non-existant for certain things. I don’t know how to say this gently, but the way you describe Java it just sounds like your exposure to it happened on some kind of legacy project, or your team lead was clueless.

      • If you build houses using just a small shovel, overtime you will become an expert at building houses with a little shovel. What’s more, you will feel quite comfortable with this shovel, since you know it very well and it’s almost part of your body.
        The question is,is it wise to build a house with just a little shovel?

        When people started to use C instead of assembler, it was like touching heaven with your hands.
        When people started to use java instead of c/c++ it was the same thing.
        Now you have python, ruby amongst others.
        They used to be slow, but this is changing. And they have an extremely powerful and expressive syntax.
        They are succinct, meaning that you can express more with lesser typing.

        The exampe above (hello world) illustrates it very well.
        But you must use, and get used, to features such as list and dict comprehensions to know what I’m talking about.
        And ranges, generators, slicing, keyword arguments, and many more…

        When you see that you are writing 30% of the code you used to write in java, and getting the same results, you realize that this is something serious.

        And it’s not only writing code what matters. Then you (or somebody else) must maintain it, and keep on working with it.

        Maintaining 300 lines of code is much better that maintaining 1000 lines of code. Specially when it’s more clear and readable.

        Python lets you translates your thoughts into action immediately.
        No verbose syntax, no fighting against the type system.
        Python is not alone with this. Ruby is good enough too.
        And Coffeescript is an excellent alternative to javascript.

        You must try it out to know what I mean…

        • “Maintaining 300 lines of code is much better that maintaining 1000 lines of code. Specially when it’s more clear and readable.”. Right on.

        • What is your definition of maintenance? Write short code and not bother about its consequences? You don’t write 1000 lines in 1 method or a class. Open any well formatted Java project in eclipse or idea the code is very much readable and clear. For other things like sending email, string manipulation, data structures, etc you use very well and robust apache libraries with which you can do in as many lines as in Python. Well you write Interfaces, POJO’s etc which you think will increase code, well you have understand design patterns and their apparent benefits. Many people give a basic example of Hello World and alarms wow Java took 5 lines to print but python or whatever took only single line. Are you developing an Hello World program or writing code for a project. 1) No verbose syntax and type system – longer explanation is given in one of comment based on interpreted language groovy. 2) Translates your thoughts – It depends on thoughts – linux scripting, server maintenance tasks is easier with python/perl. 3) Ruby – longer explanation above.

        • Hi, I have been working with Java and Python in big projects. And one important thing when it comes to big projects is readability of code. And here the declarations of variables and interfaces in Java (that provide most of the plus lines or so called boiler plate) are VERY USEFUL!!! In big projects it is often that python code becomes unreadable because you simply do not know what object a variable is. And you spend so much time just working out that.
          Python in some sense is much more polymorph and object oriented than Java. Sometimes this can be useful but most of the time you do not need this super-polymorphism. And when you do not need it then declarations are VERY GOOD in the long run. Actually the missing declarations disadvantage of Python could be overcome, if programmers were careful with comments. But in practice they are not. Even standard python modules have very bad comments about types in the code.

  10. OK, My friend will call in 5 minutes. So, I’ll be short.

    Your first response was the only realistic one.

    You are answering a project manager’s question based upon junior developer expertise.

    That is ALWAYS dangerous.

    Finding Python developers long term will not be as easy as Java.

    writing 30% less code is not as important, your IDE should handle that.

    What about scalability?

    What about data concurrency?

    Page locks?

    How many users?

    You mentioned a flat database – it sounded like – SCARY.

    All of these questions are questions of scope.

    Unless this is for a graduate class, I would still lean towards Java. Developers are much easier to find.

    Senior developers are much EASIER to find.

    Imagine finding a senior developer next week? That is what you are really asking, and do not know to ask.

    Wayne
    PS – gotta go.

    • “What about scalability?” <– It is up to the programmer to make his code scalable. Profile the code to find bottlenecks, Unless if we are doing hcore math computing most of the time is wasted on accessing network/database. you cant optimize your code to perform better in that case.

    • pinterest (70 million users), reddit are the 2 sites built on python….ur argument of saying “java developers r easy to find” is like telling the animation studios to use windows instead of linux (more than 90% of them use only linux servers+open source rendering softwares, how do i know? well my company HP offers hardware to most of them and they call us for support) since windows admins are easy to find! (also windows is easy to learn unlike java),
      windows is easy to operate,
      windows is the most used (just like java),
      windows has huge support and tools,
      most of the stuff is in GUI..etc., etc.,
      b4 any1 judge me for a fanboy, let me declare that i do not know programming and from months i was searching for language to begin with and i have decided to go for python bcoz of its success stories and coder friendliness (also bcoz of oracle acting like an ass with java libraries suing everyone including google after they acquired sun, the current LEAD of oracle mark hurd is the ex CEO of HP who was shown the door for misconduct) and ever apache opposed them and there were some big flip flops….anyway long story short, ur analytical reasons sounded like excuses to me…

      • No it is not. It is the voice of experience.

        The reality is always MAINTENANCE. The biggest problem is not development, it is maintaining and fixing the problems missed during development.

        I have people asking me, all the time, to ramp for small programming projects, Ruby, Ruby on Rails, Java, Python.

        Oracle.is SO easy. But, you wouldn’t know about that it seems.

        What is your scope of your project?

        How many CONCURRENT USERS? WHAT DATABASE?

        Without that all the other questions continue to be wasted time. Without scalability from the word, conception, you will always be patching code from the beginning.

        Just try Windows 8 and tell me it is not like learning a new operating system.

        Later.

        • speaking about oracle facebook uses mysql, not oracle and they do have a pretty huge IO on their servers (again we at HP offer consultation to their servers so I know it)…as a VCP-DV 4/5,EMC-ISA,Server+,A+,MCSE,MCTS,Office 365 certified consultant, I can say onething, its not the art which is superior but its the artist. trying to prove which is better, kung fu or tai chi is a no brainer question, u may however judge who is better bruce lee (started with wing chun a form of kung fu) and jet li (owns a school of tai chi) can be a fair question. As a consultant at HP who is a partner with almost all biggies we get to try many alpha, beta versions of OS & applications and sorry to disappoint u but i ve used win svr 2k12+win8 pre beta versions before anyone in the world knew how it might even look. i opted out of windows 8 bcoz of the issue that i had with my games and any hardcore gamer would opt out of windows 8 bcoz of the compatibility issues.

  11. “Right tool for the right job” and “I hate java” reek of hypocrisy and an obvious bias towards a language so I’m not even going to attempt to answer the main question. You are trying to find a solution with the narrow vision of a junior coder, and I say coder not developer because developers don’t hate languages, coders do.

    Only your team understands your business needs and to expect an answer here is just plain stupid. You can code in pure brainfuck if your team is great at it. Languages aren’t bottlenecks, developers are.

      • Yes, Coders. I’m sorry for my previous reply. It wasn’t helpful at all and was full of disdain. I’ll try to make up here :).

        Language alone should not be the only criterion. Also, find out about support for IDEs, debuggers, memory profilers, test frameworks, scalability, logging, exception handling etc. If you have to integrate with 3rd party packages like Hadoop, Solr, Hive etc., find out whether packages exist and how easy they are to implement. Python may be terse but if you end up spending time on all these tools, it may not be worthwhile.

        Also, startup is not a place to become an expert in a language. If you already are expert in one, run with it. But if that slows the whole team down, that’s a bad idea.

  12. This is great for me! As a middle-aged creative learning new skills in order to bootstrap a startup, I think I will stick with hand-holding IDEs and finding cash for hiring experts.

  13. Despite the fact that many people want to bash your blog, I think it is the best real-world comparison between the two languages that I have read. I know that many computational chemists use python for the same reason you stated. It is amazingly succinct. I would like to learn python, but am still mastering Java, and Java is the language of now. python is the language of fairy tales, because few real developers use it. The only thing that makes Java better is its cross-platform capability. If you are running some software on your own hosted server, then you don’t realize the importance of that. If you were trying to install python based software onto a computational server with a different linux distro that the original developer used, you would realize the importance of that. IMO, java is too verbose, I agree. But we must use what everyone else is using.

  14. Java is all about OOP. It’s about designing your classes and their interactions.
    The complexity of a project comes from objects interactions, not from many functions with code that just do the thing.
    It’s about clarity of the design that makes things maintainable.

    I do not like the way Python mixes up static variables with classes definitions with static members of classes and etc…
    Python wasn’t built to be just OOP, this is why it lack in some cases the infrastructure for this.

    Then I think the right tool for the right job.
    If you want a backend with business logic, relational DB, etc… I see Java+Spring+Hibernate a very powerfull combination.

    I do not know if Python has anything to compete with that.

    On the other hand if you want something easier, lightweight scripting type of functionality then Python is the winner.

    • Had to jump in, sorry…

      Python WAS built to be OOP. And I fail to see any confusion regarding static variables (which technically aren’t even static, in python) with classes definitions, in any way.

      Python is not the answer to everything (that would be 42). But it’s far from not being an option. There are many, many options. I can agree that Hibernate is more complete than SQLAlchemy (Python alternative), but I honestly believe that Django is way ahead of Spring.

      Java’s main strengths above other programming languages are, in my opinion:
      – Availability of libraries (which Python comes close)
      – IDEs and debugging tools (Eclipse is really good)
      – Community (Python has a good community, but Java is twice as large)
      – Very easy to find new programmers

      I also believe that, after a fashion, languages are what the word means… just languages. A REAL programmer can grasp into any new decent programming language, and while it will take him a while to reach his full productivity, he’ll be able to code in a new language within days. I have worked with Java and C# programmers, on a Python project. It took them less than a week to reach a reasonably good programming speed, and close to a month to be as productive on Python as they were on Java and C#.

      That is NOT exclusive to Python. What I mean is that language familiarity is not that big of a difficulty.

      I’d suggest focusing on the weakness and strengths of each solution. Make some tests! Specially scalability tests… If Python meets your requirements, there’s no reason not to use it.

      • I totally agree with you.
        Python is an option – but you pointed out correctly the advantages that today Java has.
        Things are changing though.

        What I ment with static and private variables and many other things is that the language itself is not strict enough according to my desire in these aspects.

        I don’t know enough Django but from what I know it seems hard for me to believe it matches Spring. I do not know of any IC container in Python.

        • The IC container does the great job to hide the concrete implementations and gives a great ability to program to interface. Python doesn’t need that. Even so, spring guys came up with spring framework for python too, anyways..

        • You don’t need IoC to have a good web framework, and there is so much more to spring than just IoC. Django is decent choice, as is Flask, Pyramid, and many other frameworks. It all depends on what your team already knows and what you are trying to build. Also, if you decide to use java, count on $1000/ month for hosting, Python will be much cheaper.

    • What about Grails if you want to build something quickly? Then when you need to do more, you just open up the hood, and you have Spring underneath (Grails is built on Spring)

  15. a developer does spend much more time on maintaining than coding. If writing more lines of code, leads to good documentation and apply strict rules to prevent errors, than that should be prefered. For example, “int i = 12″ is longer than “i = 12″, but the first one defines type and apply some rules for variable “i”. Syntax is unimportant as all of the languages does same things; conditions, loops, function calls, assignments etc. There should be a standard on common syntax. as java is evolved from C++ and accepted and used for decades, it is a stronger candidate for a standard.

  16. Python is very expressive and reduces development to deploy time. But since its dynamic, developer are suppose to be more responsible.
    Using Pypy or CPython will give quite a lot of speed, any more than that is seriously not need. Jython is good, but doesn’t allow many c-libraries.
    For Concurrency, Java is great, but using eventlets in python, lot of that is taken nicely care of.
    So the real decision comes down to, whether you want a platform that is JVM based (with all its benefits) or non jvm based (with all its openness, flexibility and options).
    Since Im replying quite late, I am sure you guys must have made some decision, please Edit the blog with what you did you choose and how you managed the shortcomings of that choice.

  17. Hmm, researching the same subject and looking into “Dive into Python” book (recommended by a number of people):

    Web Services:

    http://www.diveintopython.net/http_web_services/index.html

    XML Processing:

    http://www.diveintopython.net/xml_processing/index.html

    etc

    I would definitely not call this expressive, nor DRY. I’m wondering if I’m looking in the wrong place and there are much more succinct ways of doing the same. If anyone has different references, please post it here. Otherwise, this looks about as readable (or less) as a typical modern Java code.

    • Dive Into Python is still a fantastic material. But it was written 12 years ago! Imagine that this code is to be compared with Java 1.3 code. Python always had readability in mind. And in some ways it forces code to be organized. I can’t stress enough how disgusted I am when I need to maintain a non-indented code…

      If you want some good random examples of python code, AS is a good place to start. Take a look at http://code.activestate.com/recipes/langs/python/?query_start=1

      I’m not an exclusive Python programmer; currently I have to maintain Python, PHP, JSP and Ruby codes. Although I am fully aware that all languages have their strengths, I always feel a certain relief if the code I have to review is written in Python, as it makes my life easier.


      The Zen of Python

      Beautiful is better than ugly.
      Explicit is better than implicit.
      Simple is better than complex.
      Complex is better than complicated.
      Flat is better than nested.
      Sparse is better than dense.
      Readability counts.
      Special cases aren’t special enough to break the rules.
      Although practicality beats purity.
      Errors should never pass silently.
      Unless explicitly silenced.
      In the face of ambiguity, refuse the temptation to guess.
      There should be one– and preferably only one –obvious way to do it.
      Although that way may not be obvious at first unless you’re Dutch.
      Now is better than never.
      Although never is often better than *right* now.
      If the implementation is hard to explain, it’s a bad idea.
      If the implementation is easy to explain, it may be a good idea.
      Namespaces are one honking great idea — let’s do more of those!

      – Tim Peters

  18. Very good discussion..
    Recently I started learning Python. The language looks very good . However I am worried about it’s future as it’s not fast (given it’s interpreting nature).

  19. One common gripe about python is performance. You can think about using coroutines (see “shrapnel” for example) to handle concurrency in python without using threads which get into the GIL, and using processes to use multiple CPU cores.

    However, I still dislike Python _because_ it’s dynamically typed. My argument is not about the performance implications of dynamic typing, but the maintainability and quality implications of it. For one thing, whole classes of bugs become compile time rather than run time. Also, the explicit typing helps annotate the code so it’s easier to read, and less likely to be misunderstood.

    • I agree about python’s performance. But as said before, you can improve it a lot by using different implementations. Now, about python being dynamically typed, here are my 2 cents:

      First, no discussion about annotating the code. “Explicit is better than implicit”, after all. However, if you’re working on a local namespace, I don’t really know how one would use an integer in place of a string, or that having previously declared the variables would change anything at all. Dynamic typing is not weak typing. And it permits duck typing, which I find very useful.

      Also, if one is trying to dive into metaprogramming, and specially if you need code introspection, correct me if I’m wrong, but it is made 10x harder with static typing. Specially if you’re importing dynamic code.

      I personally find that the tradeoff is worth it

  20. Hey , I second your thought. I’ve also experienced the same kind of thing about java vs python. I’m a student and was learning java from last 2 yrs as a part of my curriculum. I thought of building a search engine as my project. while researching for the project i came across a cool site that helped building a search engine using python and the code was so easy to understand that i actually learned it in a week.Now i’m stuck with which language should i use for building my search engine. Your response will be very helpful. Thanks.

      • Design patterns are great for complex business logic, BUT you don’t have to master design patterns to build apps on the JVM. There are many language paradigms that are implemented in Java, eg Scala, Clojure, Groovy etc. You can build a massive web app in Java and not know a damn thing about design patterns. I’m talking the real world here, not some prof sitting inside the ivory tower pretending that his research is actually relevant to people on the ground trying to get stuff done quickly. And hey, maybe you just need to install Drupal and a few plug-ins, and then call it a day. Rule #1, don’t re-invent the wheel and try to roll your own if you can avoid it, not once, not ever. It’s all about risk avoidance, so don’t let your stakeholders tell you what to build, show them an existing open source app and say “This is what we recommend”, then customize a bit here and there. (Unless you have specific and complex business logic)

        • While it is true you “don’t have to master design patterns”, I have yet to come about the software that doesn’t reek of bad code when design patterns and principles are neglected. Typically, we see bad code and bad software architecture in Websites and Web applications, i.e., they are mostly built upon a framework, creating dependencies on the framework — real world here. Over time, the more modifications and customization made to the software, the worse the software becomes until finally the developers scream to the managers for a restart. If patterns and principles are not applied correctly, on any level, this is the inevitable outcome — real world here. Even the smallest logic (and all logic is specific) should adhere to these principles. It ensures decoupling, abstraction and extension.

        • Hi Frikki, I agree about your comment on code rot due to lack of good design for about 10-20% of your code in some cases, but when does anyone build a web app without using a framework? Fframeworks actually reduce dependencies e.g. using aspects and pointcuts. If you are building a web app without a framework, you must have some very unique and unusual requirements. Try as I may, I just can not imagine what type of web app would not benefit from a framework like Spring, thereby saving large quantities of time, money and frustration in the process. (In fact, I cannot image doing anything without a framework, including learning how to read, play table tennis or guitar, etc. )

        • Of course it is valuable to use a framework for deploying applications on “the Web”. What I am getting at particularly is that the application should be *decoupled* from the Web framework. You should be able to change the chosen Web framework for any other, at anytime, without much hassle and effort. Your application should provide boundaries (intefaces) for the framework to interact with. The framework should be completely unaware of the interactors that have application specific business rules and entities that have application independent business rules. Web frameworks typically provide an MVC delivery design pattern. However, MVC is not an architecture. The Web is *delivery mechanism* and architecture is about intent. How the user interacts with the delivery mechanism (the Web) is totally irrelevant for the application. The problem with MVC Web frameworks is that all the business objects are stored in the framework’s models, which controllers and views interact with and act as middle men to the Web. To fix the problem, the controller should compose a request model which is delivered to the application through the application boundaries (interfaces). A presenter should be responsible for interacting with the response model through the application boundaries before talking to the Web framework views. This is decoupling and is considered good architecture. Ask yourself what will happen to your current “Web applications” when the delivery mechanism changes. How will your software adapt? Is it tied to the delivery mechanism and the chosen framework? If so, your software probably won’t be there in 2-3 years time.

        • The coding world you describe sounds potentially painful, time consuming, and most importantly, fragile. These ideas could be harmful to others who are just getting started with a new project and are sincerely trying to answer the question Python vs. Java (which then leads to “Which framework) Writing your own plumbing code from scratch should be avoided at all cost, unless your requirements are unique, or you are a some sort of genius who has the time to code 24/7. I just don’t know anyone who would disagree with this statement, unless you jumped in a time machine and travelled back to circa 2001. Decoupling, the use of interfaces, and understanding that MVC has been overcooked over the past 10 years does not require some kind special knowledge that is only available to few insightful people; it is in fact it is *common* knowledge among even mediocre web architects. In short, all good modern frameworks take these facts into account. So again, I’m really curious about 1) What frameworks have you worked with recently, and 2) Do you have any unique and special requirements that are not covered by one of the major frameworks in Python or Java? 3) And what specific modern framework can you name that promotes coupling rather than assist with decoupling? This is an interesting thread, but it would now benefit from drilling down into some details. When we drill down, I’m sure we’ll discover that MVC is just a small slice of a framework, and often not required at all (it is more appropriate for event driven apps of a certain scope)

        • Absolutely not. To the contrary, the method I describe ease coding pain, releases unnecessary time from application upgrades due to changes in the delivery mechanism, is very strong, well-proven and documented. I suggest you read upon the principles of S.O.L.I.D., “Clean Code – A Handbook of Agile Software Craftmanship” by Robert C. Martin (Prentice Hall, 2008), and watch this presentation from summer 2012 http://vimeo.com/43612849

          1) Django, Rails, ZF2, Symphony, Spring, backbone.js; 2) Requirements for what? The application or the delivery mechanism? 3) Most major frameworks promotes strong coupling between the framework and the application. All Web applications are event driven. You brought up Web apps in your previous post, to which I responded with my critique of the coupling of the Web framework’s MVC design pattern to the actual application logic.

          Where do you start building your application — around the delivery mechanism? The Web? Technology changes and so does the delivery mechanisms. That the Web has been pushing software development style in a bad way over the last 11 years is nothing but a disaster to good craftmanship and clean code. What you refer to as “*common* knowledge” is mediocre, yes. It is not a professional way of developing software that scales well. What happens to your software when it business requires it to be deployed on, say, a desktop or some other new way of user interaction? The application shouldn’t care at all. You should be able to only change your delivery mechanism framework, not re-code your entire application, because all you business objects reside in your chosen frameworks models.

          I having a feeling that you misunderstand my critique. I am not promoting “write everything yourself” — I am promoting, decouple you application from the delivery mechanism, the same way that data storage and entities is decoupled from application specific business rules.

  21. hey there and thank you for your information – I’ve certainly picked up something new from right here. I did however expertise several technical issues using this site, as I experienced to reload the site lots of times previous to I could get it to load correctly. I had been wondering if your hosting is OK? Not that I am complaining, but sluggish loading instances times will sometimes affect your placement in google and could damage your high-quality score if advertising and marketing with Adwords. Anyway I am adding this RSS to my e-mail and could look out for a lot more of your respective intriguing content. Ensure that you update this again very soon.

  22. Hi Guys,
    Few more points to support Java.

    – The key point to mention why scripting languages like python, php etc evolving is because of the hosting flexibility. Most of the hosting centers provide a LAMP/python/apache by default. They do not allow to run java. Now Amazon cloud is the best choice for java developers.
    – Java fundamentally evolved with standards in mind. JSR etc. Very important step to maintainability and scalability.
    – Java has choices of servers and all maintains/must maintain same standard of deployments.
    – Java is the best choice for enterprise and even small scale projects due to its openness and continuous improvements.
    – Java is widely accepted and developer friendly language.
    – For long term code maintenance, java is the best.
    – It is a matured language too. All issues has been shared and resolved by community.
    – Rather supporting many languages try support one and improve that for the future needs. Kill these new programming languages and focus on one or two. If someone (MAY BE PYTHON DEVELOPERS) want the way Java works like python, go and take the java source code and add such features (it is open source). Make it in such a way that…… print “hello world” is enough to create a java file and compile and run. Lazy programming…

    One final point, irregardless of programming languages, the developers attitude do reflects in the code. Feel like an advice? I don’t care.

    I developed applications in C,C++, OBJECTIVE C, PHP, Java , c#, VB and out of all these languages the useful one is C and Java.

    -pjv

    • It had to happen…

      Just wanted to point out. You started really well on your enumerations. Then you confused facts with opinions. The point here is not to say “USE X BECAUSE X ROCKS THE WORLD”. The point here is to say “I like X because it does Y”. I’ll point out where I disagree on your assessments.

      – Script languages such as Python, PHP, Ruby, etc are evolving because evolving is the natural course of any language! Most hosts provide LAMP (P can stand for PHP or Python), but also provide IIS. And most of them (I’d say 80%) also allow you to run Tomcat.
      – Any decent language (*cough cough* Python and Ruby *cough cough*) have standards in mind. But when a language reaches a point (a point that both Python and Java reached ages ago) it has to CREATE standards. Improving a language means creating new, faster and more efficient ways of doing something.
      – I don’t understand your point
      – Java IS NOT the best choice for both enterprise and small scale projects. Java *CAN BE* the best choice for any number of enterprise and small scale projects. But it’s subjective. It all depends on what the project is, and what you want to do. For instance, Java does not like concurrent processes running on the same machine. What if you want a simple web interface for a real time application? I’ll give you a first-hand example: telephony. I develop telephony solutions. And I don’t think I could ever run any of my servers with any java program running on the background. It runs very fast, true, but at the cost of exhausting all the server’s resources. In another real-world example, say you want to develop a CRM and you want your customer to write plugins/addons/whatever to it. Then Java might be your best bet. It all depends on what you want. There is no “de-facto” answer.
      – I agree with java being widely accepted and adopted, and also a developer-friendly language.
      – Why do you say that for long-term code maintenance java is the best? Correct me if I’m wrong (and I can be WAY OFF here)… but I believe that syntax REALLY changes between java versions. A friend of mine works with Java, and he said that there are projects stuck with Java 1.5 because migrating it to a newer version would take a huge amount of time. Java probably does the same (I really don’t know), but I know that python provides a migration path for old code. I recently had to port a Python 2.3 code (a really nasty one, although not too big) to Python 3.3. We’re talking about 10 year-old code. It took me less than 20 minutes.
      – Java is indeed matured. But it’s IMPOSSIBLE for ANY language at ANY point in time to have ALL issues resolved. Of course java has issues, every language will have them. I agree, though, that java is very production-ready for almost any circumstance needed. But then again, so is any major language.
      – You can’t change the way a language works “just because you want it different”. And it’s not lazy programming, it’s simply different ways of programming. You can’t change Java to make it dynamically typed, for instance. You could, theoretically, change the java source code and do it, but the result wouldn’t be Java. Python has a different way of doing things. So does Ruby. Let me give you a quick example. Say you have a class called Customer. And, when you make an instance of this class, you want to pass from one to three arguments. Let’s say “name”, “status” and “lastseen”. If you want to do it on Java, correct me if I’m wrong, but you have to write three completely different constructors, all with the same name and a different number of arguments. Now, I won’t dig into the whole “I want to pass one argument, but I want to choose which one”, but instead, I’ll just put it this way: Python’s way is not the correct way. Nor it’s the wrong way. It’s simply a different way. And I prefer Python’s approach.

      Sorry about the long post :-)

        • And you think that by Telephony you think I mean “making phones”. That is not what I meant at all! I mean enterprise telephony – IP PBX, IVR, TTS and such. You’d need a hardware at least twice as powerful to run the same functionality on Java.

          Popularity doesn’t indicate what is best, only what is most used. If everybody thought as you, and only used the most used programming languages, you’d be probably programming on Basic, Cobol or something along those lines. And OO programing would not have launched – it was retaliated as a “confusing logic” back on the beginning. If you have an argument, present it. I’d love to discuss anything at least a little technical.

      • “A friend of mine works with Java, and he said that there are projects stuck with Java 1.5 because migrating it to a newer version would take a huge amount of time.”

        In my experience with Java, that is usually because of 3rd party library dependencies. Any Java source code they have should be able to be recompiled into a newer version without problems.

      • Nice reply :) But he started writing test cases for the code he has written in Java unlike python/perl/groovy developers who depends on end users to report bugs :) .

  23. The fundamental of all programming languages are on top of C. So do the Python. Why people are not inventing something like C rather working on top of it by just changing name slips as Java, Python, C++ etc.. no matter what…still the old C is your system underwear. So, Basic and Cobol is much better than python in that low level sense. Go for performance rather looking for simplicity….”Old is gold”

    • There are several Python interpreters, each coded on a different language. CPython (built on top of C) is the most famous. There is also PyPy (built on top of Python itself), Jython (built on top of Java), IronPython (built on top of the .NET framework), Stackless Python (on C and Python), Unladen Swallow (developed by Google, built on C, I think) and CLPython (built on Lisp), to name a few. So?

  24. There is no programming language evolved so far to defeat C and all are still relying on C in one way or another way. You had a comment “If everybody thought as you, and only used the most used programming languages, you’d be probably programming on Basic, Cobol or something along those lines. And OO programing would not have launched…”. This is wrong, there are people using Basic a lot now…it is as strong or more stronger than python (in windows world). Cobol is popular in main frame industries. Lots of legacy systems are running strongly on those, but those does not made much hype in the market..they are living silently. Enhancement is what we need, not rebuilding new syntax and create hypothesis in the market ….. if you want OO go for C++ that is the 100% object oriented language that is much faster than java/python. It can do web applications as well with tons of frameworks. You can play very low level to high level and no need to rely on any other languages to do things….Summary “modern programming languages are just cosmetics on top of these fundamental languages”.

    • Let me leave my 2 cents here.

      First of all, I think C is great. Don’t get me wrong, C is extremely fast and reliable. But C is simply not practical enough for fast development. It’s probably the best choice for anything where performance and efficiency is the key requirement. Although I write mainly in Python, sometimes a library will have such an use that it ACTUALLY pays up to write that library in C instead of Python. But these cases are actually rare, in my line of work.

      Then again, C++ is not fast for development. Say what you will, I worked with CppCMS before, and it’s great, but it’s simply MUCH faster to use some other frameworks on other languages, because those other languages were created to be faster to develop with. Simple as that. There’s no way you can build anything on C++ that will take less than 1/5th of the speed it would take to develop on Django, Rails or Spring. Also, it takes close to twice the time to fix bugs. True, a C++ code will run faster, and it will use less resources… but nowadays, RAM and CPU are way cheaper than programmer’s hours, 90% of the time.

      Again, don’t get me wrong. There are reasons to use C++, plenty of them. But when you are presented with the necessity to deliver a product within a time frame, and later you have to maintain that code, your choice would be something faster to develop, whichever this is.

      Lastly, I agree with what you said about Cobol and Basic, but I think you didn’t understand what I said. I didn’t “talk less” about Cobol and Basic. But you just proved my point. There is space for every decent language. There are reasons to go any way you want. That’s why any decent programmer is not a “Python programmer”, a “Java programmer”, a “Shakespeare programmer” or even a “C++ programmer”. A good programmer is simply a programmer. The languages he chooses to work with depends on what needs to be done. I actually had to interview a couple dozens programmers for my company. One of the most important questions I asked was “what do you program on?” (I know that in English this may be misinterpreted, but on my main language it’s pretty clear that I mean the programming language). The best answer would be “I have most experience in [insert any programming language here]“, or “I like [insert any programming language here] most”. The worst would definitely be “I am a [insert any programming language here] programmer, because it rocks the world, and it’s the only language anyone will ever need in the entire universe, even 500 years from now, because old is gold”.

      Any way, I think this discussion went from “a decent discussion on Java or Python for a startup” to “my lawn is greener than yours”. Then, I’m removing this thread from my notify list, and will not be visiting here any more. Thanks the several serious comments here.

    • Why stop at C? use assembler, better still use machine code since that’s what everything gets translated to eventually. You simply have no understanding of programming language.

  25. I would hire the person who answered the last answer because he/she would be an expert in one and has the courage to attain any solutions from the one they learned, and improve it to achieve the predicted result …. such people are more focused too .. it is also good for maintenance. “Rolling stone gathers no moss”. Anyway, I am tired too….all the best! Enjoy the life!

  26. Type safety and refactoring are the two reasons I prefer java. Lack of refactor support in my view is killer.
    I also find the type system of java makes code more comprehensible.

  27. As a start-up, you can use any language you want. However, here are my 2 cents for Python:
    – less code than Java or C/C++
    – by its design, supports component-based-development (cbd), allowing for optimizations in C/C++ if needed
    – cleaner syntax and housekeeping code compared with Java and C/C++
    – development is only 20%-30% of life cycle costs; maintenance is 70%-80% of total cost of ownership. Hence you want to develop in a language that you can easily maintain, which is arguably Python.

    I’m switching all of my product efforts into Python and leveraging additional tools for cross-platform requirements.

  28. good to see you. I am from Hyderabad and starting out too. Desperately want to go for Big Data things like Hadoop etc. ( not needed too much, but just for craze of tech)..but finally was to settle for python and nltk.

  29. I’ve been coding on and off since 1987. If I had to make a living coding in Java, I would surely kill myself. Now, this is NOT an invitation for any of you readers to offer to kill me. Clearly, this is a personal preference of tools. I really like the argument about expressiveness; it sums up my sentiments exactly. Coding in Java makes me feel like I have to type fast and accurate to avoid drowning. I much prefer C, Javascript, Python, Perl, VB, C++, Tcl, and any other language that does reasonable things with namespaces and doesn’t introduce bugs by the nature of its import mechanisms and verbosity. Oh, yeah, it’s god-awful slow and the UI looks like crap.

  30. Long ago, in a land far.. far away…, there was this language , and it was called Basic!, and it was easy!, fun to use!
    and almost any type of program could be written in it.

    Then the powers that be, said, lets make programming so complicated that only people that study, .. lets say “Java” for two years might be able to write a “hello world” Class in it.
    Whats a class you ask? Well its a fancy name for a function or procedure in Basic.

    Why the change?, because we the powers that be can!.

    My point, Basic was great!!.., and still is!! Python and Java wish they were Basic!.

    check out DarkbasicPro (free), Purebasic (money) , AGK (application Game Kit(60 bucks or so)) , Blitzplus (free now) , Freebasic (do I need to say it? free) , Monkey (basic like),BlitzMax(basic like with some OBJ) and so on.

    Oh and they all compile to assemble code, not byte code like Java or Python!

    Both Python and Java pale when it comes to these great Basics, yet every programmer I know swears that Basic is bad!,….. BULLSHIT!!
    The Basics of today can do Games, Web Applications, Gui’s, Business apps, Droid apps (AGK and Monkey), Iphone Apps (AGK and Monkey), any type of program you can imagine, and in the case of Purebasic, at C++ speed. Oh and most have 3D built in.

    SO when I hear people argue which is better Python or Java, I turn and say, Basic is better!! and faster!!!

    , always has been, always will be!

    Nuff said true believers!

  31. Oh and you may wonder why I left a comment about Basics on an old post about Python. I want to steer the young people, or newbs coming into programming in the right direction when it comes to ease of programming and to languages that if used right, will make anything you want.

    And I’m so tired of people calling Python the New Basic, its not, BASIC is the new Basic, try one and you’ll never go back to class based programming again, unless forced to by a corporate stooge.

    • 10.Not sure if being sarcastic
      20 Must try to understand.
      30 Come On! Who doesn’t love BASIC?!!
      40 Still not sure
      50 GOTO 10
      60 PRINT “Sure let’s replace every language on earth with BASIC”
      70 END

  32. Addy, that was funny as hell !!,

    and yes, lets replace them all with a basic like syntax,
    Then there would not be this freakin learning curve every time a new language comes out.
    But I think Programmers get bored and just need some new breed of code to type in. Problem is, most learn Java, or ActionScript 3, or Python, and never make a damn thing that does anything worth while in them.
    Troll the net, more basic code online than any other language, well besides Javascript, which basically runs the whole show! well that and PHP
    Oh and shareware games have been wiritten in Blitztbasic than any other language period!

    And its been proven that OOP is a big time failure as productive code,the programmer spends more time fixing why a class messes up than you do actually gettin the damn program running. Dont believe me? google that too!

    I can write a program in about 5 minutes in Basic , that in, lets say, C++ , Or actionScript, will take at least an hour to code and debug!

    Dont believe me?, then go download any basic, lets say, Freebasic, or Purebasic, or Darkbasic pro, or Blitzplus, or……
    then make a program that animates a 64×64 shape acrossed the screen and back. Now I’ll hand python that much, least its a bit easier even though you still need a library for screen functions that most basic come with, built in!.

    Oh and I love how you never get to line 60, Brilliant!!

  33. Oh and before you think I’m totally hating on Python!, I’m not, its pretty good language as a language thats not basic!
    hell I just got a Raspberrry Pi 512K that comes with python, so looks like I’ll be writing in it also.

  34. adnaan you are great ………………………… ! i am 2nd student pursuing BTECH in Comp.Sc ………. I am in love with python as you said ” Love at first sight ! ” but get depressed when anyone say “There is no prosperous job in python in india and stuff like its 20 – 40 % slower than java …………..” please Guide me ! solve my confusion !

    • Vishnu,
      I am not sure how you got the idea that getting jobs in python is tough. In any case, you shouldn’t worry about jobs from 2nd year. Just focus on your programming skills. Solve interesting problems using interesting tools. Follow your heart and it will be fine.

  35. Firstly “Expressive Power” of a language has nothing to do with productivity. In your case all the languages you stated were tutring complete and designed for random access machines. The metrics you gave was for productivity.

    Here’s the golden rules I stick to –
    * Compute / memory intensive programs – C (C++ is evil unless you know how to program in it the right way)
    * Mid-level to large scale applications (non real time) – Java
    * Small scripts which I’m not going to extend much – Python

    Can Python scale to mid / large level applications? Yes – It easily can.

    Why don’t I use it? Design patterns – Java somehow forces me to program the right way. So I have never found scalability to be an issue. On the other hand I have had to re-write Python several times.

    Unlike you I moved from
    (C) -> (Java) -> (Java,JS,Python,…) -> (C )
    I’m a embedded developer (the really embedded kind), and I find C lets me do ANYTHING, whereas I am limited in Java and even more limited in Python. I understand your viewpoint about writing less code to do more, but I think that applies to a basic application level and can’t really be extended to enterprise / embedded scenarios.

    Also from your requirements why not take a look at https://developers.google.com/appengine/docs/whatisgoogleappengine. It’s really great for a startup’s scalability.

  36. Thanks for your great info,
    I am a PHP programmer and was looking to learn a new language which can help me enhance the performance of my programs.
    But i cant really decide which one to choose.
    Could you recommend me a language??
    Thanks a lot
    Jerome

  37. Haven’t seen any mentions of the granddaddy of interpreted languages here. APL knocks most of your arguments into a cocked hat, Its ability to cope with arrays means it can be almost as efficient as a compiled language. And many other features mean it takes many fewer lines of code than Java, or Python, or Basic. It has now got OO facilities, and “structured programming” constructs to replace the old “computed goto” that so drew the ire of the computer science geeks. OK, agree with the comment that only 20-30% of the lifetime cost of a project is development; good design will reduce both development and maintenance costs. And in too many contexts applicable for APL, the lifetime of a project is the about 2 years – the time a commissioning manager stays in her job. Just thought I’d try to open your horizons a little. Rant over.
    .

  38. The benefit of Java is it’s low enough level to write another language in it:
    Visualize in Matlab (Written in Java)
    Write in Scheme (SISC written in Java)
    Connect with Java for anything extra
    Deploy to the desktop, server, web, android, arduino, etc

  39. Hello……Sir
    what to say…..still confused with what way to go!!!!!!!!!!!
    I am an ECE engineer……..looking for start in IT……..
    i have learned JAVA n development………..
    also learned Python and Django………..want to start with Pyhton as technology……….
    but finding hard to find a start in Python..
    can you suggest me the way……….

  40. For me:
    1. Solve the business processing in Python. The hard part is to get the business processing designed such as way that the architecture can be converted easily into a OOP language such as Java or C++.
    2. Convert the python code into Java/C++ an then have all database, RMI, RPC and whateever you would need.

  41. I am a hard core java developer. Last summer I started to read a few books on Python since I was hearing a lot about it. Python appears to be full of nice little functions that do many interesting things for you. It appears to be a C-Like language and a little closer to the machine than java which insulates you from the machine via the JVM. I am not sure if Python is good for huge projects. It seems to be slow and very poor when it comes to multi-threading. With todays multi-core machines, multi-threading is a very, very important aspect of programming … that is … if you wish to create powerful and fast code. From what I can see of Python so far, looking from the outside as an intelligent observer, it seems to be more of a scripting language based on the C programming language. It probably would make a good prototyping tool and Web tool. But not a full fledged programming language capable of implementing huge systems. It can be used to create huge systems, of course, but the result would be comparable to spaghetti code. I think anyway …

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s