Hacker News new | comments | show | ask | jobs | submit login
Ask HN: What is the best technology to learn right now?
53 points by scatter 1044 days ago | hide | past | web | 66 comments | favorite
Hi All,<p>I have built a few websites using various CMSs like Drupal and Joomla. Now I want to learn building something from scratch.<p>I am PhD in Electrical Engineering and can do basic programming in several programming/scripting languages including C, Matlab, Perl/Shell scripts etc.<p>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 ?

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

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.

Actually I completely disagree with you. Coming to Clojure with absolutely no lisp or functional programming background (and little java experience), and while it's been challenging to learn a new way of thinking, it wasn't hard to find documentation, read source code, or ask a question in #clojure. Leiningen really made the process more streamlined.

http://cemerick.com/2012/05/02/starting-clojure/ http://clojure-doc.org/ http://clojure.org/cheatsheet

and (source <thing>) have been great resources.

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.

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 and http://clojuredocs.org open at all times, a REPL available at all times, and either use emacs/*nix or accept being in the suburbs.

I wish I had an answer, but I wasn't a Lisp beginner when I started with Clojure.

I'd definitely suggest using Linux, installing Clojure + Leiningen2, and getting familiar with the REPL. Also, getting Clojure Programming by Chad Emerick, et.al, is a solid first step to at least getting some things started.

Learning Clojure is like any other language: if you want to really dive in, you have to think of a project to get started in and take it step-by-step. I have not written algorithms or done scripting with Clojure, so I don't know how that stuff would work out. I feel there are better languages for that kind of stuff.

The "Clojure Programming"[1] book is good. Also "The Joy of Clojure"[2], to ease you into the philosophy/mindset of Clojure.

There's also http://www.braveclojure.com which is still a work in progress but it's good for diving in.

[1]: http://shop.oreilly.com/product/0636920013754.do [2]: http://joyofclojure.com

The Clojure koans are a good place to start - https://github.com/functional-koans/clojure-koans

I think this has a great set of links: http://www.quora.com/Clojure/What-are-the-best-resources-for...

The koans would be a good starting point: https://github.com/functional-koans/clojure-koans

I have similar feelings about Scala. Combines functional programming w/ a strong/static type system and all the benefits of the JVM. Very practical and fun which I found was not the case w/ Haskell and ML languages. And you couldn't ask for better timing, first day of class starts tomorrow[1]! (and in a month and a half, reactive programming[2])

1 - https://www.coursera.org/course/progfun 2 - https://www.coursera.org/course/reactive

One ding to Scala's practicality, it's such an enormous language that to use it in production with a large team almost requires a C++ level of discipline in deciding which elements of the language to use. It's a terrific language though and the fact that it runs on the JVM is a huge advantage.

Can you please tell me more about your experience with Haskell?

I too have been enjoying Clojure with the same ferocity as the above poster. I also really recommend Python, as its got some solid engineering practices "baked in" and a great community to boot.

For a JVM language it appears to be remarkably slow (http://benchmarksgame.alioth.debian.org/u32/clojure.php), especially compared to Scala (http://benchmarksgame.alioth.debian.org/u32/scala.php).

(OTOH Python is still the slowest language around... http://benchmarksgame.alioth.debian.org/u32/benchmark.php?te...).

The people who will admire LISP skills are a very elect group of people even among "programmers". Getting stuff done in Clojure takes a lot of effort at first and finding help is much more difficult. There are ~5000 questions on SO, and 150'000 on Rails. In general there are quite a few downsides to Lisp, which Paul Graham likes to overlook. I'm very impressed with Lighttable which is build in Clojurescript. What libs do you use? I find it difficult to get started. It is my impression that you have to invest a lot of time to build things you don't to be building.

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.

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.

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


Perl isn't a flavor of the moment language, and can do everything you say, plus sees a lot of use in bioinformatics and linguistics. It's a mature language that predates python. As for a lot of good libraries, Python's PyPI has 34665 packages to CPAN's 124,546 modules. And it's community is well known for it's helpfulness and humility, perhaps because of the character of it's creator.

Most modern dynamic programming languages owe a debt to Perl, and the modern web certainly does. It has a variety of modern frameworks: Catalyst Dancer Mason Maypole Mojolicious Cyclone 3

I'd say Catalyst and Mojolicious are the one's I've heard about most.

Perl may not be considered as cool as Python by some, and there are reasons you can criticize it, but it's not any of the reasons you gave.

Perl predates Python by 4 years, which is not a whole lot given they're both 20+ years old now.

By "flavor of the moment", I was not referring to Perl, but rather to all the "compiles-to-JS" type stuff.

Merely comparing package repository sizes is not any indicator of quality or future prospects. Once you're beyond a few tends of thousands of packages, the bases are basically covered.

The biggest ding against Perl is the readability and maintainability. For scientific and data analytics oriented code, generally written by non-programmers who do not understand good software development process, Perl is frequently way too much rope.

Coolness has nothing to do with Python's popularity. (Unlike e.g. Rails which soared to popularity as a "Non-Java" way to do web apps, and then became a bit of a victim of its own success.) The scientific Python people I know all moved to Python from Matlab, C, and Perl because it made them more productive.

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

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

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.

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.

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

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

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

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.

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.


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.

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

and this Stack Overflow question: http://stackoverflow.com/questions/13693795/to-swap-or-not-t...

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.

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

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'?

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


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.

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/

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.

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.

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

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

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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

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.

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

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.

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

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

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

I guess these are all dead now?

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

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

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

Lol. Hope all these comments help...

Can't go wrong with JavaScript.


depends what you will be doing as a job.

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

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact