Ask HN: Advice choosing a general purpose language for the future?
In my spare time I have managed to learn some Python which I have used for small pet projects. (I also managed to find time to do a Python Programmer certification through the O'Reilly School of Technology)
I want to break out of the pure Data Warehouse and Business Intelligence space but keep finding myself jumping between different programming languages. I have actively tried to avoid C# as I feel that I do not want to tie my skill set completely to Microsoft technology.
I like Python a lot but truly dislike the fact that I cannot "compile" projects into executable solutions for Windows at times. Similarly it can’t be effectively used for mobile app development. (C# with Xamarin seems to make sense here.) However Python does seem to play really well with a lot of the different Cloud platforms out there, especially Google's Cloud Platform.
Java would be another candidate but to be honest I would rather settle on C# instead of Java. The C# tooling feels much better than the Java tooling plus I find it really difficult to get excited about coding in Java after using Python.
Is there any one language that would provide me the best of all worlds, allowing me to build applications across Windows, Linux, and Mobile and tie in well with the cloud services from Google, Microsoft and Amazon? I truly feel like a dog chasing cars when it comes to programming.
9 comments
[ 1.3 ms ] story [ 17.5 ms ] thread- useful glue-language
- prominent C API.
- It handles web applications, scientific applications, shell-scripting, data-processing.
- It's installed on virtually every OS X and Linux/BSD machine.
- job market is active and work tends to pay well.
- The contrib (open source, permissively licensed libraries) are robust, abundant and well-documented.
- The standard library is also.
- Python 3 unicode support + python 2.7 support via unicode_literals
- Support for deployment to Google's cloud, Amazon, Heroku
- Many prominent tech companies (facebook, google, dropbox) sponsor and release open source applications for python.
- Faster implementations such as Pypy (a speedier, pure-python implementation) and Pyston (LLVM implementation) are under active development
- REPL via bpython, ipython, ptpython is great
- Mature language (around since the 90's)
I could go on and on. You can't really miss with python, it's a "safe language" from a job perspective, but also superb should own your desires go to freelance, your own startup, etc.
I find myself bashing my head against the Windows platform way too many a time. (A hangover from my current day job)
Are there any significant drawbacks to using Python? (Other than the usual cries about the GIL and it being interpreted voiced by certain groups in the programming world.)
Drawbacks, the tooling is superb, but it will take you months to wrap your brains around the tooling, idioms and best practices. Expect a learning curve to get acclimated with things.
Another plus is the community is self-aware and wants to get work done.
There are other programming languages where if you criticize them - instead of taking it as an engineer - they get their feelings hurt and delve into deeper denial.
In 2015, there are numerous tools to handle cases where GIL, as an example. https://wiki.python.org/moin/Concurrency/
Coming from a pure Microsoft background, and that not being C# but databases and cubes, I find some of the freedom in the ways of working with Python "scary" at times. Microsoft tends to build a nice set of tracks that their developers seem to follow so it all ends up very corporate and "best practice". (Just my personal opinion) It thus feels like there are much more "training wheels" applied for beginners in something like C# and .Net than what you have in most open source technologies.
Thanks again for your replies.
Message passing Ruby, homoiconic Lisps like Clojure, or the diagramatic J is each, like the languages you know, better for some things than others. Finding "the language of your soul" doesn't start with a specification. Comfort with picking up new languages is a sound long term skill.
Good luck.
I tend to haxe for my side projects and it sounds like in principle it's not far off what you're looking for.
The haxe compiler outputs js, python, c++, java, c#, php (along with a bunch of others) and bares a lot of resemblance to c# or java. For personal projects it's perfect - write once, run natively everywhere, and with a single codebase for client and sever.
But there are good reasons not to use it too. Its community is still fairly small and highly game-dev-centric so you'll probably have trouble finding the sort of high quality data science libraries you might find with a language like Python. That being said, haxe can take advantage of libraries on its target platform, so if you're compiling haxe to python, all the python libraries are available to you. The next problem with haxe is that it's the job market for it is still very small compared to the other major languages.
So it's ideal for personal projects, where you just want to get as much done as possible without being bogged down by platform specifics, but unless you're in game dev, you're going to struggle to get employment from it.
I agree with anon3_ that Python's a sensible choice for employability and compatibility. Node.js and ES6 are worth a look into too, especially if you're looking to get into server-side work. Because of its popularity, there's an awful lot of weight behind javascript and it doesn't look like it's easing up any time soon.
I have noticed that JavaScript seems to have never ending support. Strangely I have never been tempted to go full JavaScript, probably due to me not having much exposure to it in my day to day work.
Thank you very much for the feedback, it is greatly appreciated.
- best interoperability with Java of all JVM languages (except Groovy) - language support for DSLs (in the form of extension function literals) - statically typed - type inference - non-nullable types - smart casts - properties - elvis operator - much easier to learn than e.g. Scala but also less expressive