A few questions about learning to code.

I lost my job due to the pandemic and I’m giving serious thought to retraining as a front end web developer. It’s a growth industry (or so I’ve heard), I think I’ll enjoy it, and I’m looking for a change anyway. Since the lock down started, I’ve learned to write HTML and CSS to what I guess is an intermediate standard* and so the next step is to learn JavaScript.

From what I’ve read, JavaScript is a tough language to learn. Way harder than HTML/CSS. I know there’s quite a few professional and amateur coders here so before I start I wanted to ask a few questions so I know what I’m in for.

  1. So far, I’ve been treating my retraining project like a 9-5 job. Roughly how long do you think it would take an average person to learn JavaScript well enough to apply for an entry level front end development job if he worked at it for 8 hours a day, six days a week? Am I looking at a month? Three months? A year?

  2. JavaScript has lots of different libraries and frameworks. Do I need to know any of them to get an entry level front end developer job? Or is it enough just to know HTML, CSS, and JavaScript?

  3. If the answer to the previous question is ‘yes’, what would be the best one to learn next?

Thanks!

P.S. - If you want to know what level of HTML/CSS I’m at, you can check out this website:

This isn’t my site, but the site I designed is virtually identical to it. This guy evidently took the same course I did. It’s 99% HTML/CSS and 1% jQuery.

Specific languages aren’t as important as learning how to be a software engineer. Once you understand the concepts, languages become relatively easy to learn. Mastering a language takes time and experience, but if you’re a new coder that’s not going to be expected.

Are you taking any formal instruction, like from a community college or certificate program? I think that would be extremely useful, combined with your self-study. Having someone guide you and grade your work can’t be underestimated. Saying you’re self-taught might make it difficult to get through the hiring door. All the places I’ve worked only hire engineers with a BS or BA as a minimum. But those are mainstream companies; there was a lot more flexibility during the dotcom boom, for example. I worked at some startups where we hired people right off the bus from Iowa with an MS certificate because engineers were is such high demand and low supply. That’s not the case now.

I wouldn’t worry about individual libraries or packages. They’re job specific so there’s no way of knowing in advance what a particular job needs. Find a project you find interesting and learn everything you need to make it happen. That will help teach you how to identify and evaluate what’s important; a skill that can useful everywhere.

In addition to what Telemark said, in my 41+ years in IT (yes, I did deal with punch cards) I found that something good analysts/programmers/engineers had in common was the ability to be, for want of a better term, a “computer whisperer” — that is, the ability to approach a set of instructions as a computer would rather than the way a human sees it. Computers are absolutely literal: unless something’s broken, they will do exactly as told whether or not that’s what you intended; and unless you can put on that mindset, you can bust your head against a program malfunction for what seems like an eternity.

(The foregoing primarily addressed debugging, but it applies to development as well: once you have — or develop — the ability to “think” like a computer, it becomes much easier to break a process down into steps that the computer can follow. After that, language differences are primarily a matter of grammar and syntax.)

A wild suggestion: would it be helpful to try your hand at Python? Most current programming languages are fairly similar in construct, they only differ in specifics and in syntax.

The advantage of Python is that it doesn’t bother you very much about householding tasks: you can con focus on the logic of the program. And it is easy, by incorporating libraries, to quickly have something up and running that can actually be shown and has some value. Python may also be useful to make you understand the back-end of web servers.

Hence Python might help you to pick up the skill of understanding how computers think and how to program them (as OttoDaFe rightly says is key). Then actually dealing with Javascript is necessary to understand the additional complications of that language. But then you already understand what programming is.

The thing about Javascript is the latest version ECMAScript 6 is well regarded as a mature language that has settled down. Older versions are something of a dogs dinner. Part of the reason for this is because Javascript is a odd language in that it is designed specifically to run in a browser environment and browsers are fundamentally messy. There have been several companies trying to dominate the browser market, each with their own implementation and enhancements. To write a Javascript program to keep all of them happy sometimes requires the use of translators that will detect the browser and translate from ECMAScript 6 to an older version.

Now you may wonder why anyone would use an old browser when it is so easy to upgrade. Well many large companies tend to change the standard programs they use on the desktop very infrequently because it would be too expensive to re-write many of their internal systems so they insist that older browsers are supported for systems used on their internal company network. Cross browser compatibility is also an issue for companies that want to reach as wide a range of customers as possible on the Internet. Writing such code is challenging.

Writing Javascript programs that have cross browser compatibility often means you have to master the use of lots of tools. Javascript has a very extensive eco-system of ‘tooling’ to help manage and optimise the code. There are package managers, translators, minifiers, job runners, version control and all kinds of other programs. Then there are the Javascript frameworks, every year there is new favourite that people rave about and a new book appears on the bookshelf. It is moving target.

Learning the language, especially the latest version is the easy bit. Anyone can write a new program. But learning how to use all this paraphrenalia is much more challenging. Here is a mind map that some fellow has kindly put together to try to make sense of the complicated ecosystem of tools and skills. It is rather intimidating. ‘Geek Overload’ is a thing.

https://coggle.it/diagram/XfeRbWj7xy3dsEX8/t/web-development-in-2020

But the worst thing is that jobs rarely invite you to write new programs for a totally new system. More often you have to take apart a lot of code that has already been written, not very well, by a coder who has left the company. Reverse engineering a dodgy codebase is the worst job in computing. It takes a lot of discipline to write code well that can be easily understood by other programmers and it is easy to get into a spaghetti mess with Javascript and it is also quite hard to debug. It can be a beast that is difficult to tame.

The old adage regarding asking directions in rural Ireland outside a pub and being told by a local after a minute of thinking that it would be much simpler to direct you ‘if you did not start from here’. Well that is what it is like with Javascript. I can understand why it is attractive, you can start easily by get everything working in front of you. But that is deceptive. You can easily end up in a bog of complications and exceptions if you have to write code that works on all browsers and all shapes and sizes of device.

It is wiser to start from a better place. The backend languages that run on the server are far better organised. Python is a good suggestion. It is easy to learn and has some specialist libraries that are good for AI and managing Big Data. These areas a very rock and roll at the moment. A far better career trajectory than being a Javascript jockey animating eye candy for design heavy websites. :cool:

You need to know JQuery. HTML5 and CSS does a ton of stuff now that we used to have to hand-roll, usually with Javascript, so that’s nice. I just did a thing with animated SVGs that didn’t require a lick of JS. Unheard of a decade ago. JQuery packs in all the extra stuff that hand to be hand-rolled too.

You’ll want to know forms, and how to validate them. You’ll use JQuery and plain Javascript for that.

I discovered Bootstrap a few years ago and it was a total game changer for me as a web programmer. My role was always HTML/CSS, my partner did the heavy lifting database stuff, an we’d have design done by any number of designers who weren’t me (I don’t have a designer’s eye). Adding Bootstrap virtually eliminated my need for a designer…all of the layout and alignment was 90% done automatically. And responsive design is no longer an issue for me. I just need the designers to do graphics and colors, and even then I can get by pretty well without a designer if the client is too cheap to pay for one.

I get the feeling Bootstrap is not all that popular with real serious designers. I don’t run into too many templates or software using Bootstrap. But to me, coming from the coding game to the design game (as opposed to coming from the design game to the coding game) it’s been invaluable.

It’s probably not enough. Like Telemark says, there’s not a specific language or library you need to know, but I think you need to know at least some library. If they ask you what libraries you’ve worked with and you can’t name any, that won’t look good. My company uses AngularJS, which is generally well-regarded, so absent any other recommendations or info, you could look at that one. But really, the odds of you randomly picking the one that is used at wherever you land a job is pretty low. Just pick something.

I’ll also echo Telemark’s warning that it’s not easy finding the first job without experience or education. You might look for little jobs you can do in the community for cheap or free, to be able to point to a working site and show off some code samples.

Good luck.