Calling all programmers – What language should I learn next?

I’m in the process of transitioning from a career in banking to (hopefully) front-end web development. As such, I’m teaching myself HTML/CSS and Javascript. I’ve also signed up for a course which will teach me about JQuery, JSON, and APIs. My question is, given that I am committed to learning these languages, what language should I try and learn next to broaden my appeal as a front-end web developer to prospective employers and, hopefully, earn a bit more money?

A back-end technology. Java & C# are the big ones, but there’s a lot of others - PHP, Ruby, etc. The important bit is learning the difference between front-end and back-end development, the specific language is almost secondary.

A basic understanding of databases and SQL would also serve you well.

Instead of a new language, I would learn a framework like React or Angular 2. Or start learning some server side coding via NodeJS.

HTML/CSS and Javascript are a good start. Plenty of material to work with there.

The CS program I designed for my college has as a sequence Web Dev 1 - HTML and CSS, Web Dev 2 - JavaScript/jQuery and PHP, and a Database course using mySQL. Be sure to learn about Ajax and XML/JSON parsing. Learning all of those will give you a complete package, aren’t too difficult to pick up, can be done for free (XAMP or WAMP), and gives you a good foundation for future growth. Good luck!

This.

Everything front-end is JavaScript, but usually abstracted away in very high-level frameworks.

People don’t want you to code in raw JS unless you absolutely must. Instead of learning another programming language, learn SQL (shouldn’t take long) and then get comfortable and mock up a few sites using some frameworks, especially the big, popular, monolithic ones. They’ll have many best practices that’ll be good to keep in mind even if your particular employer ends up using some smaller, scattered, piecemeal framework.

I recommend React instead of Angular 2. Angular development has been a mess lately, and it looks like it will be a mess for some time.

It’s not all about what programming languages you know; learning new language syntax is pretty easy in my experience. I once got an offer from a Java shop even though I’ve never written a line of Java in my life, I interviewed in C# and told them that I could read through a Java book in a week and hit the ground running.

Whiteboard interviews are going to be what make or break a job offer. My advice (bear in mind that I do a lot of back-end C stuff so YMMV) is to study your data structures and algorithms. Read Cracking the Coding Interview for an idea of what is commonly asked on a whiteboard interview.

I given many programming interviews, and I have been interviewed for programming positions many times. I’ll try and give you the most comprehensive list of topics I can think of:

[ul]
[li] Can you implement a stack, queue and a list?[/li][li] Do you know how hash tables work (associative indexing, and chaining)? Can you implement one?[/li][li] Know basic recursion (factorial is good, graphs and trees are good too). Know how to tail recuse.[/li][li] Know you string algorithms. These are essentially a subset of array based questions. Reverse a string, remove characters, find a palindrome.[/li][li] Know all about graphs and trees. Both as data structures, and the algorithms that you use to traverse them. I had a YouTube interview once, and I was able to answer all 5 of my on-sight questions with some variation of a Breath-First Search. In other words know BFS, DFS, In-Order, Pre-Order, Post-Order, Dijkstras and Bellman-Ford algorithms. Know how to implement Graphs with adjacency matrices, and with lists. Know the trade offs between the two.[/li][li] Speaking of trade-offs, know your Big-Oh notation. Any interviewer worth his salt is going to ask about time complexity, and possibly space complexity. [/li][li] Know your sorting and searching algorithms. There’s a lot of overlap between the two. Quick-sort is a very common interview question, binary-search is a very common interview question. Know mergesort, heapsort and radixsort. Know when it’s prudent to use each.[/li][li] If you interviewer is a hard-ass, it may behoove you to study dynamic programming paradigms, bitwise arithmetic, multi-threading, statistics and discrete math as well. I failed an interview at Tesla because I couldn’t implement the a function which required knowledge of the central-limit theorem.[/li][/ul]

This is all stuff the every CS student learns at some point in college. So it’s all fair game for a programming interview. All of this stuff is in the book I recommended.

Are you self taught? It sounds like you are. If that’s that case I have one other book recommendation.

[ul]
[li]**CLRS **. This is the canonical Algorithms and Data Structures textbook. Just about every CS student has to read it at some point. It’s pretty comprehensive. Learn it and love it.[/li][/ul]

*** Edit: Mind you this is very general advice. It may not be the most helpful in the niche you’re looking into, font-end web-devvy stuff. Take with a grain of salt.

First step is to understand the coding systems mentioned above. Except for Javascript they are not general purpose programming languages and you may not need to develop proficiency in any of them, but you should certainly understand what they do and be able to use them in some rudimentary manner. You’ll get that from examples in any online course or instruction manual.

If you really want to be a software engineer you need an in depth knowledge of some useful programming language. I recall your thread on the Monty Hall problem, you showed some ability there. If you want to simply design webpages and make use of existing data already structured for you then you don’t need much else, but there is an endless supply of people with that ability. If you want to take projects from the ground up, integrate existing data, create new interfaces that don’t rely on Lego parts, then you’ll need more in depth experience solving problems. You were using Python and that’s a pretty good start, to broaden your perspective you might want to look at some form of Java or C. Unabashed Fascist mentioned some of the serious core skills needed in software development, and it’s a big leap from reading about stacks, recursion, and tree traversal to actually implementing such facilities in code. It’s not the only path to take, you could be quite successful as a UI designer and implementer without such skills, but if you want to stand above the crowd you’ll need those skills that take time to develop.

The advice you received in that earlier thread still applies, look at existing code to see how it works, learn to modify existing code to suit your purposes, and you’ll have to take on bigger coding challenges to gain what is only available from experience. Every good programmer at one time painted themselves into a corner in some complex code and had to work their way back and get it right. There’s a long list of would be programmers who never get past that and spend the rest of their careers avoiding challenges and fearing the worst will result from any attempt to try something new. It’s the difference between gaining knowledge and gaining wisdom, and the latter is far more valuable.

That list is a bunch of irrelevant stuff for 99% of developers, let alone for a front end developer. Seriously, when would a front end developer ever implement a hash table? The answer is never.

Asking these questions is a hugely flawed method of interviewing programmers. To use a front end developer as an example, who cares if they know different sort methods? For them, the answer to “how should I sort {X}” is use .sort for 99.999% of use cases. Only if you are interviewing for someone to implement that 0.001% use case should you care if they know different sort algorithms.

As others have mentioned, learn SQL. No other language will be perceived as more generally valuable by more employers.

After that, a framework isn’t a bad idea. Learning a .Net language, e.g. VB.Net, couldn’t hurt as well, and again knowing something like that is generally viewed positively.

But definitely SQL first.

I don’t disagree with you, about whiteboard interviewing being a flawed practice. Most of this stuff is irrelevant in day-to-day use. Other than knowing what tool to use, and when to use it. For instance w.r.t hash tables, you would absolutely want your applicant to know that they’re useful for when you need quick look-ups.

But we’re talking about different things. I’m not really talking about on the job, day-to-day usefulness. In my experience at least, you need to know this stuff in order to even get a job at a lot of places. They are the de facto method of culling out applicants. Like it or leave it. When I got out of school, all of the companies I applied to (I applied to several dozens, included a lot of big companies, like Google, YouTube, Tesla, nVidia, Microsoft, Vanguard, Mathworks, Apple, etc) used come variation of these whiteboard programming questions.

I actually did get that exact interview question you mentioned (implementing a hash table) during my phonescreen for Tesla, they wouldn’t even fly me down if I hadn’t been able to answer it.

*** Edit: Shoot, I feel the need once again to clarify that every job I applied to was mathematical/scientific in nature. Computer Vision / Image Processing is my niche. Front End Dev is a total mystery to me, however I assume they use the same methods for interviews. Correct me if I’m wrong.

meh n/m

You may very well be right, but it seems downright sick to send a guy wanting to be a web dev down the path of learning sorting algorithms for white board interviews. I haven’t interviewed for a job in… ever, actually, but if I were going for another web dev job and someone handed me a marker and asked me to implement a hash table, I would hand the marker right back and say, “Thank you for your time but this isn’t a company I want to work for.” Front end development is such a horrid mess as it is without worrying about remembering discrete math. Gives me the shivers just thinking about it.
To the OP, the advise to learn a back end language is sound, as is the advice to learn SQL. You’ll need both. Node.js is still fairly hot and doesn’t seem to be going away, and has the benefit of being javascript, which you’ll need to know anyway. PHP and C# are good options as well. There’s a lot of components to a modern web page, don’t expect to be an expert at any of them but you’ll want to know how they all fit together.

If front end development is a total mystery to you, why are you giving advice on the matter?

To answer your quest, no, front end devs are not typically asked those types of questions. For a junior dev it will typically be a handful of “How do you do this/Explain this concept” for the first interview. If you pass that they give you a relatively simple exercise to complete.