http://cemerick.com/2012/05/02/starting-clojure/ http://clojure-doc.org/ http://clojure.org/cheatsheet
and (source <thing>) have been great resources.
1 - https://www.coursera.org/course/progfun 2 - https://www.coursera.org/course/reactive
(OTOH Python is still the slowest language around... http://benchmarksgame.alioth.debian.org/u32/benchmark.php?te...).
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.
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.
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.
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.
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.
I hope... >.<
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
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).
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.
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.
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...
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.
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.
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.
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.
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.
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 ).
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).
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.
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.
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.
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.
While learning that, learn a tool like RabbitMQ.
... 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.
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.
I guess these are all dead now?
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...
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.