

Ask HN: Advice choosing a general purpose language for the future? - Swinx43

I have spent the majority of my career so far building large scale enterprise Data Warehouse and Business Intelligence solutions on the Microsoft SQL Server stack.<p>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&#x27;Reilly School of Technology)<p>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.<p>I like Python a lot but truly dislike the fact that I cannot &quot;compile&quot; 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&#x27;s Cloud Platform.<p>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.<p>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.
======
haxiomic
It depends on what you hope to use it for.

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.

~~~
Swinx43
I have never heard of haxe, it sounds very interesting and I will definitely
have a look at it.

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.

------
brudgers
Learning a third language after C# and Python will make you a programming
polyglot regardless, so why plan to artificially limit yourself to three?

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.

~~~
Swinx43
Thank you very much for the advice.

------
oweiler
Kotlin

\- 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

------
anon3_
Python:

\- 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.

~~~
Swinx43
Thank you very much for the feedback. If I may ask, how do you tackle the
short comings of the language such as battling with "freezing" an application
to work from an executable on windows?

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.)

~~~
anon3_
You mean [http://www.py2exe.org/](http://www.py2exe.org/)?

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/](https://wiki.python.org/moin/Concurrency/)

~~~
Swinx43
Yes py2exe and freeze etc. I agree the tooling for python is very good and I
find the community to be one of the better ones as you have mentioned.

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.

