views:

2012

answers:

19

I am currently attending college and the languages that I will 'know' by graduation are C++ and Java. That being said, i am also in the process of teaching myself Python. I know that every programming language has its own pros and cons, but would it be possible to become a python developer out of school? I always have more 'fun' programming in Python than i do in C++ or Java, and I am also in love with Pythons documentation. I know C++ will always be on top in terms of speed, but what would be the benefit of memorizing every javadoc against focusing on Python instead? are there good jobs to be had with Python?

edit: also, would it be beneficial for me to look at C# as well? Microsoft is really throwing their support at it so that could be a decent career path as well.

+3  A: 

I know a talented guy whose primary operating system is ubuntu and successfully uses Python as his primary language. Of course, he knows C/C++/Java/... too, but likes Python more. I think if you work mostly with open source stack, it's gonna be a great tool. In Windows world, however, I suggest C#.

Mehrdad Afshari
+1  A: 

Dice.com has 972 results (posted within the last 30 days) for Python, so it's eminently possible. That's not to say there aren't more jobs available for Java or C#, but you also have to weigh the much larger pool of applicants for those languages.

Hank Gay
+5  A: 

Any software engineer worth his salt can pickup new languages relatively quickly. There are certainly jobs to be had doing Python, but there are many more jobs doing Java and C#. My suggestion is to find a job that you are interested in where they are flexible about picking the right language for the task at hand rather than dictating a corporate standard.

I also suggest that you learn one language per year, even if you will never use it at work. It's good for your mind.

Erik Engbrecht
I don't know that "one language per year" is good advice to give to students and recent graduates. These people should be concentrating on depth of knowledge in one language rather than gaining shallow knowledge in many. Just my opinion.
Bill the Lizard
While I do agree that Novice programmers should concentrate on one language and get an in-depth knowledge of that language. I personally believe that at the same time they should also learn other languages don't just exclusively focus on your "in depth" choice.
CalvinR
When you're a novice is precisely the time when you should be expanding your mind. A novice is probably going to working in one primary language (plus others like SQL, JavaScript, etc) while at work. So to avoid being a one trick pony he should learn something completely different on his time.
Erik Engbrecht
I'm still in school so java and C++ takes up most of my time. I am learning Python on the side, but i agree that students have a lot to cover for their first langauge.
Deinumite
So many concepts carry over from one language to the next that one could argue that constantly learning new languages is a very effective way to improve depth of knowledge in your core language. (Natural languages, too - I learned more English grammar by studying German than English.)
Dave Sherohman
+1  A: 

A lot of the current "business" jobs (especially with the US Govt) either use C# or Java. At this stage in your life, you shouldn't have to pick one or the other. For that matter, you shouldn't have to pick at any stage in your life. As a technology professional, you should be able to adapt to changing and emerging technologies as necessary.

However, you should also do what you like, not necessarily where the money is. If writing Python makes you happy, I'd say try to find a job where you can write Python. Your job should be fun because you're going to be doing it 8 hours a day, 5 days a week for the foreseeable future.

With that said, there are Python jobs out there, you just need to look outside of the "big" career sites like Monster and Dice. Slashdot jobs, Daily WTF jobs and even Python user groups often post job listings.

Kevin
+1  A: 

It's definitely possible and one of the big reasons why is because it's such a good 'glue' language. There is a good interface to C/C++ that lets you cross-call in either direction without too much trouble. For your java needs, you've also got jython which lets you do the same thing, right out of the box.

Dana the Sane
+30  A: 

It is beneficial for a good developer to know many languages. Some languages are better for certain tasks than others. Other languages are just fundamentally different and using them helps you to discover new solutions to problems.

Python is a great language. Knowing C is a must (as Joel would agree with and Jeff still needs to learn!) But, be adventurous! Learn a new language every year. Play with Erlang or Scala or Clojure just to see what they are about.

You will likely reach for a particular language as your general everyday tool, but don't get locked into thinking that you should use it for everything.

"When your only tool is a hammer, every problem looks like a nail."

kstewart
I'm not sure knowing C++ is a must, unless you believe everyone should know how that brand of template metaprogramming works. IIRC Joel only said C.
Pete Kirkham
That is a great quote at the end.
BBetances
Great quote indeed.
Rodrigo
Good advise, I wish I read this when I was closer to starting out... Of course, it didn't exist as this site didn't even exist but the point stands.
Frank V
+2  A: 

Employers look for "smart and gets things done" before they look at the number of languages you know. Learning Python certainly won't do you any harm, and is a better choice than C#. If you know C++ & Java you'll pick up C# no problem (my employer hires previously Java & C++ people directly into C# positions). Just beware of turning down interesting jobs because they don't use your favorite language; what makes for a good/interesting/fun job/project/workplace has very little to do with the language used.

timday
+6  A: 

Depends on your career path. Either way, exposure to multiple languages is good and will make you a more flexible programmer.

Please do the rest of us programmers a favor and don't pick a career path based on money or job availability. Choose something you like and that you are good at.

On languages:

  • Python is good for rapid prototyping and "fast enough" purposes, not as popular on Windows systems.
  • Java is cross-platform and enterprisey, never hurts to be familiar with it.
  • C# is very Windows-centric, ignore if you don't want a career in Windows systems.
  • C/C++ is also cross-platform but depending on your interests, you could put more focus on standard/GTK/QT/Windows libraries.
HUAGHAGUAH
+ for encouraging to do something your good at
Fire Crow
A: 

It's a good idea to find something you enjoy which you can also get paid for. It's worth knowing C++/Java as well but you will get more out of your career doing something you enjoy.

Peter Lawrey
+3  A: 

In the six month contract I finished last December, I used Python + GTK for a code generation plugin into a UML tool and for file conversion, C++ and machine code to generate trampolines to call an API that took callback function pointers without user data, C to generate bindings for that API from Java, Java for a UI (since the rest of the project's UIs were Java), a domain specific language for configuring SCADA systems, and helped debug some VB6 and some XAML.

Every large project I've worked on has been multi-language. A oft repeated pattern is to have a scripting/configuration language and a heavy-lifting core. I started out with Lisp and C++, then VBA and C++, then JS, Java (which often tried to be both, without quite being a good application language or a good systems language), then Python. Lately I'm refreshing myself with C99.

If I were starting over, then Python and C# would be a good combination to focus on for employment. But having at least a passing familiarity with C and having enough understanding of assembly to be able to read the ABI of the OS you work with would be good too.

Pete Kirkham
A: 

Instead of python I would devote some time to learning perl and ruby. perl is ubiquitous with developers and with cpan has a VAST number of modules for absolutely anything you may need to do. ruby is the preeminent object oriented scripting language. I've never really loved a programming language (I tend to reserver that feeling for family, close friends, and some very hot women) but I fell in love with ruby after about 2 weeks of programming in it. After a while of programming ruby (and I swear this is no exaggeration) your code becomes a natural extension of your thinking processing. In other words your thoughts are immediately translated into code with any intervening "translator". I've NEVER experienced this with a programming language. When it happens it's almost like a mystical experience, no joke!

klyde
Most of the people that I've heard talking about python had fallen in love too and refer to it the same as you do with ruby, in fact, I am starting to use python and I'm feeling that language-mind synchronization as well. When people get "the python way" they feel enlightened like never before :)
Sam
+28  A: 

Python is a great language. This year we had a big website project come and the boss made the brave step of making us all (including himself) learn python and django to do it. I am very happy he did. I've been programming for years in loads of other languages, Java, C, ObjC, Haskell, C#, javascript. With python I've been more productive than ever. Python seems to have the best features of all of them, without the clutter.

Python is great because:

  • It expands your mind: one of the few languages where you can usefully write a meta-meta-metaclass. Most other languages can't even express that.
  • Extremely versatile. You can, for example, safely completely alter how inheritance works, if you wish, using simple code (again through metaclasses). You could even dump inheritance altogether, for your own classes. You can completely alter how attribute lookup works via descriptors.
  • Decorators are another great idea. Check them out.
  • __getattribute__ is another great idea.
  • operator overloading is as easy as in C++, perhaps easier.
  • Multi paradigm: you can explore functional and OOP design.
  • Easy to start with - let me recommend you to install ipython along with your python distro and just mess around with it.
  • Decent, thorough documentation. Plus, documentation is built right into objects. in the shell you can do e.g. reduce.__doc__ to see documentation for that function.
  • Plays well with lots of other languages. If you are using C++ and boost, have a look at boost python, you'll be able to interface your c++ code with python, in an almost criminally easy fashion. With distutils it is easy to import c code into python, hence:
  • There are loads of libraries for just about anything you want to do. It's easy to install them using setup.py or python eggs. You can import them right into the python shell and start testing them out, and see instant results.
  • Easy to install. Should be < 5 mins, no brainer.
  • The iterator idiom makes your code look, well... like poetry. Not to mention list comprehensions, blissful.
  • If you are writing anything to do with the web, you have django. This is a big plus.
  • Platform independent. Always a bonus.
  • IronPython lets you use it in dot net. This will give you an advantage - as you can make use of python libs/language to solve problems where expedient (probably a load of cases).

Python has its warts:

  • The major one for me is that in their natural form, python objects don't enforce encapsulation. However, python is flexible enough that you can roll your own, and besides, this is also a disciplne thing. We can always write getters/setters which are just as bad.
  • It's true the layout style takes a little getting used to, but once you are used to it, it feels just as natural and somehow seems to get out of your way.
  • Coming from a C++ background you may be more used to strong type checking. It is true that python's lack o it sometimes bites, but by and large it is not a problem, and means less typing and more readable code. Python is also strongly typed, just dynamically!

Python is a language for people who love coding. It's great for beginners, and great for experienced coders. It is absolutely viable as a main language.

So, yeah, go for it, you won't regret it.

I think that because im not really used to putting {'s everywhere the whitespace "shock" didn't really bother me. Also having lists, dictionaries, string functions etc all readily accessible makes me love the langauge. C++ seems like a function goose chase.
Deinumite
This is a very good post illustrating some of the positive aspects of Python. As much as you would like to become an expert at it, just do not leave C, C++ or Java behind, If you are learning for a couple of years, by all means devote full time but after that do look at other languages.
Senthil Kumaran
Python is strongly typed. http://c2.com/cgi/wiki?StronglyTyped
daniel
Instead of writing getters/setters you can use attributes to add logic only when required without breaking code which relies on direct member variable access.
Dan
Once you use Python programming in C++ might seem painful
Casebash
Ah, I just noticed I made the old mistake and wrote "you may be more used to strong type checking" - should be "you may be more used to static type checking". Python lacks static type checking. Personally I find this a royal PITA in C++, now I have to write more stuff in it. Also I should note that linking with Boost code has meant criminally long compile times for me. Yeah, I agree, C++ is painful.
+3  A: 

Yes, it's possible to have a career (and a good one) using Python (or any other niche-language) as your primary language - but only if you are lucky and live in a city big enough to require these kinds of niche roles.

it's all about supply and demand: If there are more companies looking for a particular skill than people qualified to offer it then you can charge a good rate. If there are fewer people looking than can offer it, then you might find it hard to get a good job. The challenge is to find a skill-set that will be in demand so that you have a good chance of getting well-paid work.

In most developed countries 99% of the professional developers you meet will be experts at one or more of the mainstream languages. If you are a good C or Java developer you might be qualified for a large number of roles, but then again you will find yourself competing against a large number of similarly qualified people.

Chances are there will not be too many jobs for newbie Python developers without spesific industry experience. On the other hand, if you have some kind of relevant background - for example in credit-banking or mobile communications there are many companies which really need Python and will pay well for people with a few years of developer experience.

So yes - you can have a career in a non-mainstream language but you need to know a little bit more than just programming to do it.

Salim Fadhley
A: 

At my current job, we use Python almost exclusively (except for a little bit of VBA in Excel when we are forced to). It was a decision I made here when I started and have never regretted it. It is a little tougher to find people with Python experience, though, so I really look for good programmers that are interested in learning.

But that's also an opportunity for you: while there may be fewer Python jobs than Java jobs, for example, there are also fewer people with Python skills than Java skills so if you know Python, you may have a better shot at those openings.

davidavr
+1  A: 

looking through the previous peoples answers, I note they is a hint on the speed factor about python in it being "fast enough" for most jobs, and i agree. However, i would definitely recommend a lower level language (C or C++) aswell as python. The reason is that it gives you flexibility.

I come from a embedded industry and so started with C and C++ (i just missed the assembler trend). Now C will always beat python code in speed and you will not find an interpreted language like python used on lower level components of an embedded device.

But python will beat low level languages for ease of prototyping and gui toolkit related apps.

So, in a nutshell, learn both to be a good all rounder.

Plus I do find the object orientated training and knowledge in C++ very useful when doing any design work in qny language (including python).

One last thing. I COMPLETELY agree with the response of "do what you enjoy"... enough money to live on is good. but i find no matter how big your salary, if you hate the work, 8 hours goes REAL SLOOOOOOWWW.

Regards

DEzra
A: 

If you are worried about carrer path, I sugegst you look at jobs in your area which are asking for Python. Are there any and do these jobs look interesting to you? If the answer is yes, then Python is fine. If either is no, look at another language.

Or to take another approach, I suggest you look for the jobs you would like to be doing in three, five, tens years time and look at what skills they ask for.

Peter Lawrey
+1  A: 

Most of my software development career has been using languages such as C, Ada, C++, Java, and C#. However, years ago I learned Perl as a utility language because I could use it to do quick jobs that would be too tedious and time consuming to do in the target language I was using. Later, I discovered Python, and I liked the structure of it better than Perl, but it was just as powerful as a utility language. (I later tried Ruby for the same thing, but ended up going back to Python.) Now I am no longer in a product software job, and Python is the primary language I use for any software I do write.

All of this is to say that even if you don't end up getting a job where you are specifically paid to write Python, you still may find it to be a useful tool to have available to you.

Greg Graham
A: 

I didn't have much working experience, but I think it is necessary to learn more than one programming languages before leaving college. And I should make a life by coding for a certain time. Python is great, and it is heard many Google apps were developed using python. Anyway, you could get more chances if you could master more than one kind of language.

Leyond
A: 

Learn deeply the language you currently want to learn which, in this case, is Python. If you bore of it, move on unless you have a paying project or thesis to finish. Rinse and repeat. This is my life :)

Alain O'Dea