
Ask HN: What is the best technology to learn right now? - scatter
Hi All,&lt;p&gt;I have built a few websites using various CMSs like Drupal and Joomla. Now I want to learn building something from scratch.&lt;p&gt;I am PhD in Electrical Engineering and can do basic programming in several programming&#x2F;scripting languages including C, Matlab, Perl&#x2F;Shell scripts etc.&lt;p&gt;Given my background what would be a good stack to learn for me ? Is it Python + Javascript or node.js or ruby on rails or something else ? Pardon my ignorance if I am just throwing some random names out there ?
======
adrianm
I'll throw my hat in here for learning Clojure. It's a modern Lisp that runs
on the JVM, with a great community and awesome libraries. (For example,
[https://github.com/Engelberg/instaparse](https://github.com/Engelberg/instaparse))
As others have mentioned, it all comes down to what you really want to do. I
use Clojure both professionally (for web development, statistical
computing/analytics software, natural language processing) and for fun on a
daily basis. It's the only language I've yet to come across in my career that
work doesn't make boring. I relish every opportunity I get to code in Clojure,
because after solving every problem in it I end up with a DSL (domain specific
language) that I can extend and mold to the problem as I learn more about it,
and honestly I find that addicting. I can't recommend it enough, even if you
just use it for fun occasionally. At worst, you'll have learned a Lisp and can
judge its merits for yourself. At best, you'll experience what I have:
infatuation that I hope never goes away. It's been about a year now since I
first learned it, and I probably code at least 3-4 hours a day in it. My love
has not abated in the slightest, it has only increased. Give it a shot, you
may like it!

~~~
dizzystar
My weapon of choice is Clojure and I don't really agree with this post. There
is a serious lack of tutorials and guides to get basic things going, the
documentation is all-around horrible, and in general, Clojure is a very
difficult language to get started with, though it certainly has improved
immensely over the past year and it is rewarding once you get past the initial
humps and start to really grok it. Clojure is philosophically, a beautiful
language, but you have to work very hard to get to that point. And may the
programming gods have mercy on his soul if he prefers using Windows.

~~~
random_coder
How do you suggest that one should get past the initial hardships in learning
clojure, assuming one is willing to put the needed effort? I've always wanted
to learn a lisp and clojure seemed good, but couldn't find a good tutorial for
lisp beginners.

~~~
jared314
The only advice that has helped me learn Clojure was: do not travel the road
alone. Coming from a strong OO background, getting started posts/videos, REPL
tutorials, and books only helped me to the point of reading and running
Clojure. I agree with dizzystar that the documentation needs serious work,
because I find myself reading the source for insight into how I should use
things, or structure codebases. I think highly of Clojure, but don't expect it
to be easy. Keep tabs with
[http://clojure.org/cheatsheet](http://clojure.org/cheatsheet) and
[http://clojuredocs.org](http://clojuredocs.org) open at all times, a REPL
available at all times, and either use emacs/*nix or accept being in the
suburbs.

------
pwang
Since you know Matlab and C, I would suggest Python as being a good choice.
It's much faster to develop web-oriented things in than C or Perl, and if you
ever want to do more computationally intensive things, many people find NumPy
and SciPy to be fantastic alternatives to Matlab. The nice thing about Python
is that you can find so many things all in one language: shell scripting;
graphical UIs; web programming and web scraping; web servers and network
programming; convenient interfaces to low-level C libraries; fast vector
libraries and powerful scientific programming... the list goes on. You can
pull data off a serial cable, throw it into a big matrix on your GPU, compute
a bunch of statistics, visualize them in 3D, dump screenshots to PNG, and
serve them up in a dynamic web app... all in one language.

Ruby, JS, Perl, etc. can't really touch this. There are all sorts of "flavor
of the moment" languages right now on HN but at the end of the day, if you
want a mature, workhorse language that's easy to learn, has a lot of good
libraries, and has a great community around it, choose Python.

~~~
kazagistar
If you wanna move towards what the future of mathematical computing looks like
though, you should probably look at Julia. It has one thing other high level
dynamic languages like Python cannot hope to touch: incredible performance
without having to resort to C.

~~~
pwang
You should look at Numba: Direct Python -> x86 and CUDA without touching C.

[http://numba.pydata.org/](http://numba.pydata.org/)

------
zachlatta
What are you looking to do? If you're interested in web development, I highly
recommend learning either Ruby and Ruby on Rails, or Python and Django. You do
mention that you "want to learn building something from scratch" though, in
which case I wouldn't rely on a framework like Rails or Django.

Have you thought at all about Go ([http://golang.org](http://golang.org))?
It's very similar to C with a great concurrency model. It works well for web
servers and, for the most part, makes you work from the bottom up.

~~~
bigiain
"What are you looking to do?"

This is the right question.

I'm _guessing_ from reading your question, that you want to build websites
without using Drupal/Joomla underneath? (Rather than, say, build mobile apps
or robots or hardware?)

Firstly, decide what you want those websites to so - then ask yourself if you
_really_ want to build all the bits Drupal/Jooma give you to start with – the
answer to that is not often "Yes – I want to implement a CMS from scratch!"
(though sometimes it is as a learning tool, if you want to run a website,
building on a whole bunch of other people's work - particularly leveraging
their past security mistakes - is almost _always_ worthwhile.)

If you can articulate clearly what you want the website to do - it'll be much
easier for people to recommend "a good stack" for that task. If your website
idea is for a web interface to MatLab, the answers will be quite different
than if your idea requires a Hadoop cluster running on a petabyte of data.

------
robotresearcher
Computer Science. Not programming, or this-or-that framework, but CS. Most EEs
didn't get all that much of it in college, and it is very helpful. Languages
come and go, but CS is forever.

~~~
ams6110
Yes! If you want to learn a language or framework, pick one. It doesn't
matter. In five years (or less) time it will all be some other language- and
framework-du-jour.

~~~
mitchty
I'm currently learning go, hopefully in 5 years there won't be another
language du jour. Rust maybe but the problem space go is serving isn't all
that crowded.

I hope... >.<

------
rwhitman
It depends what you want to do. Javascript is crucial for anything regarding
web development, so if your goal is to master web dev, definitely have a sound
foundation in Javascript.

Personally I moved from PHP CMS's (years ago now) straight into Python /
Django and loved it, but I still kick myself for never mastering Ruby on
Rails, as my experience has lead me to discover there are 5 Rails gigs for
every Django gig, and being a Rails dev pays quite well these days.

If you build a solid foundation in Javascript and RoR you open yourself to a
ton of opportunities, and you'll be able to adapt pretty quickly to any of the
new tech on the horizon

------
ilaksh
"From scratch" is relative but I guess you mean just without a CMS.

My favorite stack for the last year or two has been CoffeeScript (and now
ToffeeScript which is even better) and Node.js with good old ExpressJS.

I also think AngularJS is probably the best starting point for many web
applications these days. So actually most of your efforts would be with
AngularJS since the front end is often going to be much more complex than the
back end.

The most convenient way to store data I think is in JSON files or with MongoDB
or RethinkDB. Or maybe better take a look at a CRUD framework like
[https://npmjs.org/package/auto-crud](https://npmjs.org/package/auto-crud) .
Again, 'from scratch' is a relative term and actually the farther you stay
away from that the better probably. But of course no one, including me, can
learn everything, so you have to pick a set of tools and become comfortable
with them and that is subjective.

Node has the most advantageous module/package system out there (npm) with the
support for semantic versioning and the sheer number of packages available in
the registry (more than 41,000 at the moment).

------
pedalpete
What's the best 'technology' vs what's the best 'language', I wonder if people
are getting the two confused, or what the question you're asking truly is.

With a PhD in Electrical Engineering, I'd think you could go far in the
growing hardware market.

I think the key in selecting a technology to learn 'right now', you need to
consider when you'll want to use this technology for.

The way I (kinda) do it, is to not look at languages specifically, but what I
want to do with them, and how I can leverage what I already know.

For example, recently I've wanted to start playing with hardware (RaspberryPi
and Arduino). But I didn't just jump in and start learning C, I looked at what
I already know (javascript/ruby/etc.) and am looking at how I can leverage
that in this new technology.

I've also got an interest in algorithms and data, I've done some work with
parse-trees in Ruby and have tried umpteen times to get to using the Stanford
Parser with Java, but it normally ends with me curled in a ball sobbing, so
now I'm doing the Coursera class in Scala (how often do you get to learn a
language from the creator of that language).

I learned RoR, not because it was popular that day, but because I was working
on a project I knew I would be passing on to another team to manage long-term,
they had some RoR experience, and the structure of an RoR project meant I knew
would lead them to easily understand how to manage it without much knowledge
transfer.

So, to me, the best technology to learn is the one where you match your
interests, and your existing knowledge to become an expert in what should be a
growing field. One thing to consider there (of course) is where that
technology will land you in 1-5 years.

------
whalesalad
Elasticsearch. The things you can do with it are pretty remarkable, and it's
not a simple system to understand.

If you're interested in something like working at a startup... having advanced
knowledge of Elasticsearch would make you a pretty desirable candidate.

------
stevoo
Hi,

I have read a lot of good comments here. You might be hard to find the
solution that you want from this answers as there is no solution in what is
the best technology now. A lot will argue, but it wont matter.

You dont require the greatest and mightiest in making a CMS. What you need to
learn how to actual code. Since we do assume that you do not have the greatest
experience in programming, i believe that you greatest strength currently is
in numbers.

That is why i believe that PHP is the language to go. It might have some
quirks and stuff. People might hate it. But it gets the work done for what you
require. It has been out for ever. There is a lot of support. You can easily
find question for everything. There are some great frameworks out there, but i
believe you should keep away from them.

If you pick up PHP, then it is pretty easy to move to Java later on. But that
is another chapter.

So core PHP as it is extremely easy to set up in a LAMP stack. i do home you
are using that. If you dont want to learn CSS and stuff, use bootstrap to get
it out of the way. But i recommend trying to write a css on your own so you
can learn the basic stuff. When you are more comfortable with CSS throw that
out and use bootstrap. Then build you PHP CMS from scratch. Split Everything
out, seperate classes for queries, functions, html. Look into caching,
performance etc.

But most important of all. Have fun doing it.

Hit me up if you want some help/guides/start anything. In my profile.

------
joshanthony
I'll throw in my hat for PHP. There will be many people who will tell you to
avoid PHP and I would have agreed if it wasn't for the Laravel framework.
Laravel 4 is really amazing, it carries the simplicity and power of Ruby on
Rails over to the PHP world. As a framework it covers most of your typical
newbie problems out of the box (e.g. plugging security holes and organising
your code) and you'll end up doing things in one line of code that you
previously did in 5. Laravel also basically forces you to write really
reusable code by using their Eloquent ORM system.

Though my favourite great thing about Laravel is that the community IS ON FIRE
(in a good way). You'll get a response to most questions on Stack Overflow or
the Laravel Forum within a few hours or even less sometimes. The core dev team
are friendly and really available to help out. I found that when people use
Laravel they don't just use it, they love it and become almost strangely
obsessed with it. It's also pretty new so you can safely assume that your
skills will not go out of date really soon or anything.

Take a look at this article for some more info:
[https://tutsplus.com/tutorial/why-laravel-is-taking-the-
php-...](https://tutsplus.com/tutorial/why-laravel-is-taking-the-php-
community-by-storm/)

and this Stack Overflow question:
[http://stackoverflow.com/questions/13693795/to-swap-or-
not-t...](http://stackoverflow.com/questions/13693795/to-swap-or-not-to-swap-
from-codeigniter-to-laravel)

~~~
nickthemagicman
I would like to second this. Laravel is all the lessons learned from a decade
of frameworks, code igniter, kohana, and others.

Its the cutting edge framework. Plus, PHP is the most widely supported
scripting language on the planet. Its the default scripting language for any
host to support.

Also, combine it with Bootstrap and Jquery, You'll have amazing job
opportunities and will be able to make amazing things.

Caveat, learning web dev is a godforsaken nightmare until you know it, then
you feel the POWAH.

~~~
jasonlotito
> Laravel is all the lessons learned from a decade of frameworks, code
> igniter, kohana, and others.

If Laravel learned anything from those frameworks, it's how to make all the
same mistakes using an update version of PHP, and invent new mistakes on top
of it.

No, Laravel is not the solution. It's encouragement of globals, it's decision
to implement solutions in the slowest ways possible. It's a complete mess.

You cannot use Laravel as an example of best practices.

~~~
nickthemagicman
Ohrlly? Your comment is literally an paragraph of inflamatory statements with
nothing to back them up.

Globals? Have you used it since the new version? It's all namespaced now.

"It's decision to implement solutions in the slowest ways possible. It's a
complete mess."

What does that even mean?

I can whip up a really excellent CRUD app in TEN minutes.

What is your 'better' alternative? Are you a Ruby 'rockstar'?

~~~
jasonlotito
> Ohrlly? Your comment is literally an paragraph of inflamatory statements
> with nothing to back them up.

Yeah, it's a comment. Not an essay. These are clearly my opinions based on my
years of experience. That being said, yours offered nothing other than
opinions as well, so it's balanced.

> Globals? Have you used it since the new version? It's all namespaced now.

If it's changed, they haven't updated their docs. I can only go by this:

[http://laravel.com/docs/routing](http://laravel.com/docs/routing)

Could you please direct me to the latest docs?

> I can whip up a really excellent CRUD app in TEN minutes.

That's really not an endorsement to the quality of a framework, nor is it a
unique feature of Laravel.

> What is your 'better' alternative?

In the PHP space? Zend or Symfony. Both do things better. Beyond that, most
other new frameworks suffer from the same problems Laravel has.

> Are you a Ruby 'rockstar'?

No. I'm a programmer, not a programming language.

Laravel does a lot things many would consider bad. Sure, it makes CRUD easy,
and it has a low learning curve, which many consider a feature. But being easy
doesn't mean doing things well. CodeIgniter is easy, after all.

------
grumps
I think that completely depends on your goals. Are you wanting to work for a
startup company? Are you thinking an agency? freelance? Or are you thinking
some large corporations? The answers will vary slightly, IMHO.

If you're thinking Agency/Freelance, I'd look at agencies that you'd like to
work for. Check out any blog posts from the tech team, or current openings.
Sometimes there's little tidbits in there if they're shifting tech directions.

If you're wanting to work for a startup, I'd suggest looking in the startups
in your current location. They're may or may not be a correlation to the
technology that's being used.

If you want to work for a corporation, you would probably be best to learn
.NET/Java. I know that's going to annoy someone but for the most part
companies want .NET.

You could also base in on the who's hiring trends if that's your goal.[1]

If you want to learn for heck of it, pick a technology that seems to draw you.

[1] [http://www.ryan-williams.net/hacker-news-hiring-trends/](http://www.ryan-
williams.net/hacker-news-hiring-trends/)

------
mataug
There isn't any one stack, language or framework that is the best technology
to learn.

My suggestion would be to go with any one of many stacks, learn the basics
like MVC on server and the client, working with HTTP, writing usable html and
css, responsive sites, Working with ORMs, SQL and NoSQL db etc.

Then once you've learnt the basics, learning the another, framework, stack or
language becomes quite easy because the basics pretty much remain the same.

In regards to mobile there are only 2 choices either Android Java or iOS
Objective-C . Neither one is better than the other right now, So if you own a
Mac you can learn either, if you don't, well the choice is obvious. (PS:
Windows mobile, BB are okay, I personally don't recommend)

If you are looking for more conclusive help.

Learn node.js if you already know javascript, because you don't need to learn
2 languages while building a site.

But don't limit yourself with that, once you get decent with node, try to do
python + django or ruby on rails in the side.

And then you can probably move on to go-lang or a Jvm Language.

Be sure to use at least one SQL and NoSQL db.

PS: (Personal Opinion) For the love of god stop using PHP.

------
krob
What world do you want to chain yourself to for the next several years? Do you
have any immediate requirements to be on the MS platform? is linux or unix
fine?

Do your requirements concern high concurrency?

Do your requirements concern science?

You are an engineer and there are some specific things that may come in handy
for your type of work. Python has some major libraries for use in the
scientific community as well as statistical analysis libraries to do similar
tasks to Matlab / R for building graphs and such.

You talk about using CMSs such as Drupal, Joomla. These are all PHP-based CMSs
which dynamically read data from a SQL database. Do you want to continue
working with similar code? Or do you want to jump into the world of a new
language?

Microsoft (C#.NET MVC2) Linux/Unix (Python(django, pylons), ruby(Ruby on
Rails), PHP(Symfony2, Zend2, Laravel, list goes on), Perl(Mojolicious,
Catalyst, etc not sure the rest), Java(GWT, Wicket, Play, Grails), you could
literally roll a dice and figure out what you want to follow.

If you want to go for trendy, in order of trendy: Ruby, Python, Java, go-lang,
Closure, PHP

All these languages are generally accepted as general purpose except for PHP.

As the PHP community matures more however, this is changing, especially for
deployment tools, general cli scripts to accomplish tasks which often times in
the past would be a bash/shell script.

What ever you do, before you make your decision, I think the best determining
factor is ask your own colleagues what they are learning and follow suite,
especially if it's within one of these listed languages. This will help you if
you run into problems since you will already have an established support
network of friends for help.

Hope that's useful.

------
ing33k
there's nothing called best technology, it depends on several factors and what
you want to achieve .

you have mentioned that you have some experience in drupal ,and if you want to
stay in the web dev, I suggest you to learn Symfony2 Framework ( PHP) , MySQL
( or any RDBMS ) + JS ( Jquery, Angular etc ).

------
shanemhansen
Languages are by far not the most important thing. My recommendation to you
would be to go with ruby, despite the fact that I'm not a ruby programmer.

Ruby borrows lots of syntax from perl so you'll feel at home. It's obviously a
first-class citizen on the web these days (RoR much?), and the ruby community
has a perl-like focus on getting sh*t done + testing.

(Disclaimer, my weapons of choice are python and go. go because it's not often
internet giants of that caliber get together an invent a language, the last
one turned out to have a pretty long shelf life. Python because it's simple,
clean, and lots of other non-specific adjectives. Actually I think I came to
python because I wanted a free matlab and stayed for the KoolAid).

------
scatter
Thanks for the suggestions everyone! My goal is to be able to build at least
the initial prototypes for complex web / mobile applications, so that I can
test out some of our ideas. I did this in the past with various content
management systems, but I feel that they are sometimes not flexible enough and
come with a lot of general purpose features that are not necessary for my
application. Currently I am trying to build an education website for children
with illustrated books, repetitive exercises etc., that's very easy to
navigate and can keep track of progress of each student, encourage them to
learn more etc.

------
bachback
Meteor JS is the really cool thing right now IMO. Traditionally that would be
rails or django. If you do python checkout Flask. I find Vagrant on the
backend very useful for managing servers and pushing them to AWS or
Digitialocean.

------
grayrest
If you want to build stuff now and get a job, JS and the frontend will keep
you employed for years. There are a bunch of connected fields spanning across
a ton of tangential disciplines both artistic and programming and lots of
space to find a niche that makes you happy.

If you want to take the hard road, improve yourself as a programmer, Clojure
and Machine Learning. Just be aware that you won't get easy career options for
3-5 years if ever. I'm a believer but history is not on the side of the better
is better lispers.

------
JDDunn9
If you want to write modules for Drupal/Joomla, they are written in PHP, which
is similar to C. Ruby on Rails is known for being easy-to-use. You should
learn Javascript no matter what server side language you choose. Python is a
good choice if you also want to do data-analysis or advanced algorithms. I
wouldn't bother with Node.js until you are comfortable with Javascript. You
can work on Apache without having to learn how to configure it much.

------
jmcdonald-ut
Note that this post is in context of building a web application.

Learning how to build a web application from scratch is not an easy
undertaking. Certainly there is the actual task of learning how to program
from the ground up that is challenging but I will warn you of the more subtle
challenges you will face. Existing packages, libraries, frameworks and more
are there to help you but can be a crutch. Understanding the trade-offs of
writing your own library verse using a preexisting library is important. The
second problem is knowing how to parse information you find online. People
learn new things and love to share those things online all the time. Tutorials
and screen casts will likely be plentiful, but beware that there may be holes
in what you are learning. A fantastic example would be a basic tutorial on
storing information to a database--it likely will not show you how to sanitize
the data. In my opinion learning how to build solid web applications should
then follow a basic formula to overcome these challenges: Learn the basics of
web programming, pick up a framework, and then seek knowledge where needed.

Stay away from a framework in the beginning. Rails, Django, and other popular
frameworks are absolutely essential tools for building web applications but
they abstract a lot of the little things. Not understanding the little things
can make debugging tricky. It can also lead to security flaws in your code. A
good example of the little things includes parsing form input, interacting
with a database, and routing traffic to its intended destination. Having an
astute understanding of the building blocks will help you architect, debug,
and develop solid web applications.

Once you are comfortable with the basics and could build a complex web
application without the help of a framework you are paradoxically ready to use
one. I suggest that your first framework be one that is highly popular so you
can find tutorials and help as needed. Rails or Django are fantastic to pick
up. Since you understand the basics you can then focus on using the best
practices that these frameworks declare in their documentation to build a web
application that can scale and is secure. You will not need to handle what
will now be the mundane task of parsing form input or interacting with the
database.

Now that you are comfortable using a framework you can seek more relevant
knowledge that is applicable to what you want to do. Perhaps you are hoping to
build a web application that shows real time updates for game scores and so
you look into advanced AJAX techniques (or web sockets) for feeding the data
to the user in a lively manner. Maybe you want to tackle something truly
challenging such as converting m4a formatted files into mp3 formatted files.
Programming really gets fun once you start tackling challenges that aren't
quite as well documented. From here you will find the material more advanced,
but with a solid understanding of the basics and a good framework to keep the
basics out of your way you will be able to commit the mental capacity required
to tackle the more challenging tasks.

In the end my advice is to have fun and work hard. Don't skip the basics, but
understand that they are not the end point in programming. It is similar to
learning calculus in mathematics. If you do not have a solid understanding of
algebra you will struggle more than you need to. Build trivial things. Re-
invent the wheel. This is how to best learn.

Best of luck!

TLDR: Pick a language, learn it, and then find a relevant framework and learn
how to wield it.

------
shire
If it was up to me I would tell you to learn Python+Django but since you're
familiar with Drupal and Joomla I would recommend you learn PHP, Wordpress and
Laravel.

PHP is very high in demand no matter what anyone tells you. You will forever
be fixing legacy code or even building your own from scratch PHP is
everywhere.

------
CyberFonic
Depends on whether you prefer working on the front-end or back-end. For front-
end I would suggest JavaScript as used to develop WebApps. For the back-end,
you could look at Go - Google created it and many people have had lots of
success with it, especially when scaling services.

------
shn
Machine Learning. We will only have increasingly more data and we need to make
good use of it. It's cool for the starter. It will take a lot of time to
become good at it, so start now slowly, learning necessary tools, specific
math subjects at least for the beginning.

------
d0m
There's no one true answer, otherwise there would be only one language, right?
Still, if you want to be conservative, I would say Python and Javascript are
clearly two very good languages worth learning.. if not for the wide community
and great libraries.

------
ScottBurson
Well, seeing only the title and not the fuller explanation of your question, I
would have said: data mining.

I realize now that's not what you were asking for, but you might want to
consider it anyway. If you have a PhD in EE, you should have sufficient math
skills.

------
joeblau
People skills, but since we're talking about computers; I'll put a vote in for
Node.

------
jasonlotito
Either JavaScript (and by extension, Node.js) or a mobile language
(Objective-C or Java, pick the one for the phone you have). Python won't solve
anything for you that you can't already solve between C or Perl.

While learning that, learn a tool like RabbitMQ.

~~~
pwang
> Python won't solve anything for you that you can't already solve between C
> or Perl.

... unless you found Perl to be difficult to maintain, and C difficult to
debug and monstrously low-level and segfault-prone for doing simple things
like calling web APIs. When I first learned Python back in the day, even
though I was a pretty decent C++ programmer and shell scripter, I found my
internal "gumption" towards simple programming tasks increased tremendously,
because I knew I could bang something out in Python and _just have it work_ ,
as opposed to being sucked down into a debugging quagmire.

One could argue that C and Perl don't solve anything that isn't already
handled by ASM.

~~~
jasonlotito
I'm not arguing against Python. Merely against learning yet another language
in a domain that the OP has, apparently solved. I can only go by the original
post. So, in the context of this discussion, learning something in another
domain will not only expose him to something new, but also expose him to
something in an area he doesn't already have solved.

Myself, I really don't enjoy reimplementing something I've done already just
for the sake of learning a new language. I'd much rather expand my
capabilities, hence my comment.

> One could argue that C and Perl don't solve anything that isn't already
> handled by ASM.

Which, as you hopefully see now, is not at all what I said.

------
chadhietala
JavaScript for sure. Stay away from frameworks/libraries in the beginning and
learn the ins and outs of the language first.

------
charlesju
What you want to build should determine what language or platform you should
learn to use. What do you want to build?

------
SilliMon
I find it interesting that no one has suggested any Microsoft tools, .NET or
C#

I guess these are all dead now?

~~~
px1999
No, this is HN, they're not supposed to get any love here.

I'd suggest .NET/C# myself. It doesn't have the new flavour of the month feel,
but there are some interesting things happening, and it's a solid platform
with a bunch of serious, good choices for developing websites and
applications. Also, nice documentation and an excellent toolchain. The
downside of course is cost...

That said, language/environment etc all should come down to what the OP is
trying to achieve - there are a lot of things that there are better
alternatives for, but for general purpose webstuff, it's usually a solid
choice...

------
natural219
It really depends on what you're trying to accomplish. I have talked to many
people from business / marketing / other backgrounds that want to learn how to
code. I generally advise them to try and learn some aspects of design --
either "user interface", "user experience", or general product design --
because their goal is to build a particular product, or to start a software
business. IMO there are many skills involved in building technology products
that require little to no programming skill, but understanding _how people use
computers_ on a deep level is far more valuable than spending your time
mastering a programming language or web framework.

If your goal is to become a _programmer_ , I will advise you that regardless
of the language or path you choose, you are in for at least a 1-2 year
learning process in which you will learn a language, an accompanying toolset,
and the basic set of skills required to debug and architect large, complex
programs. You will also be learning a lot of terminology, which is
indispensable for what I believe to be the main skill involved in programming,
which is knowing how to Google things.

To answer your question directly: From my vantage point, the puck appears to
be skating in two directions. Golang is a rapidly growing language developed
by Google, and is considered to be one of the best amalgamations of features
from modern programming languages. I highly recommend it. It has only been out
for four years, so I can't speak to how approachable it is to a newcomer, but
if your goal is to learn a language that will not become obsolete in 5-10
years, I think Golang is a good bet to make.

In the other corner, there seems to be a growing community about a language
called Clojure. It is a little complicated to explain Clojure's appeal to non-
programmers, so be warned that exploring Clojure is slightly "off the beaten
path" compared to many "mainsream" programming languages like Java, Python, or
Ruby.

In short, there is a language called Lisp which is highly regarded in the
elite programming community as the _best_ way to write software. In his
seminal essay "Beating the Averages" [1], Paul Graham offers several
compelling arguments as to why Lisp-based langauges (and programmers) are
superior to other forms of programming. Since I am not a Lisp developer, I
recommend reading his article, since I would probably butcher any attempt to
explain its merits against other popular languages. Anyway, Clojure is a
modern implementation of Lisp, has an incredible community, and appears to be
gaining a lot of traction. Given your background, starting with Clojure might
make a lot of sense. Rich Hickey (the creator of Clojure) is an incredibly
influential figure in programming circles.

Finally, unless your goal is to write mobile applications, a rudimentary
knowledge of HTML, CSS, and Javascript is required to be able to produce
anything in our web-based world.

If you have any more questions, feel free to email me (my email is in my
profile). I enjoy helping people navigate the confusing jungle of modern
programming education, and I can point you in the right direction depending on
what your goals and work ethic are.

[1] [http://www.paulgraham.com/avg.html](http://www.paulgraham.com/avg.html)

------
jemeshsu
Python(Django), Ruby(Rails), JavaScript(NodeJS), Go, Scala or Clojure.

------
nickthemagicman
Lol. Hope all these comments help...

------
double051
Can't go wrong with JavaScript.

------
quadrangle
Yesod?

------
thejosh
depends what you will be doing as a job.

~~~
shn
Context of job constraining. I rather would follow my bliss, more rewarding in
the long run.

