Ask HN: Is web development still a viable career choice?
Hello HNers,
I am an aspiring web developer. I have been self learning for around six months and still have not found a solid path to follow. Six months sounds like a lot but realistically it has been a few solid weeks of learning since it is a side hobby that I hope will turn into my career.
Is the Web Dev job market in a good enough state that I should risk more time and money?
Thanks for any advice…
245 comments
[ 9.8 ms ] story [ 249 ms ] threadPython, go, c# and Java can open 'enterprise' doors for you.
I say this in an era of bootcamp grads, online micro degrees Udemy courses etc. where you can now study and 'become a web developer in 3 months etc.'.
It's true, you likely can learn enough about Javascript / frameworks / etc to build web applications in that period of time, but your overall knowledge and ability to draw inferences between web dev and other areas of CS will be severely lacking.
This isn't to poo-poo your path (I myself am a bootcamp grad), more hindsight as part of my journey.
What you are doing now is what most would likely call a 'top-down' path. Build some applications, work on some projects, learn one language all for the sake of building a portfolio. This is great! But it is only a piece of the puzzle. I would highly suggest you sprinkle in some 'bottom-up' learning as well (taking an algorithms class, or something fundamental to CS) and trying to draw the connections between what you are learning in the two domains.
I know that was a bit of rambling so to more directly answer your questions and concerns:
Q: "I have been self-learning for around six months and still have not found a solid path to follow." A: It is likely that self-learning is not cutting it for you. It sounds to me like you need structure. This could take the form of a bootcamp or micro degree or something more involved (slower) and academic... like a bachelors degree with projects mixed in. All have their advantages and disadvantages. At a high level:
- A good bootcamp will require you to be there in person, with fellow students who are on the same path. You will have structured learning and so will meander less. You will leave a good bootcamp having gotten out what you put in (ie if you slacked off they will not hold your hand) but may land a job. You will have spent a good chunk of money and even if you land a job you will have to fill in a lot of gaps.
- Micro degrees (like from Udemy) same caveats as the bootcamp apply but with swings. Will likely be far cheaper, but with less support, and likely less guaranteed outcomes. I haven't looked in a while but it's rare that I find people who have landed jobs doing these programs, while I can find multiple 'good' bootcamp grads who end up at many 'top' tech companies.
- If you go the University route you will have to amp everything up to the nth degree. You will spend more time + money. The effort that you put in will also matter A LOT (ie from what I've heard some people do the bare minimum CS work to pass classes, but never do interesting projects, push for good internships etc so they graduate and can't land jobs). It, however, my belief that if done right this can be the best possible option. A lot of bootcampers severely underestimate the importance of foundational CS concepts, these will be the first people in trouble during a recession or if there is a major technology shift.
Q: "Six months sounds like a lot but realistically it has been a few solid weeks of learning..." A: Six months is not a lot of time to learn almost anything. Let alone a year, or two etc. Especially if that learning has been very undirected (it sounds like you are meandering a lot). I know you are in a rush to be gainfully employed in a new career, but you shouldn't emphasize the time you've spent so much. The best engineers I've worked with are 15+ years into their careers and still think they are idiots.
Find a more structure path for learning, and don't beat yourself up over the time you're taking to learn anything. Good learning and understanding takes time.
Q: "Is the Web Dev job market in a good enough state that I should risk more time and money?" A: Yes, the market is still quite good for anything engineering related. Frontend, Fullstack, Backend you name it. Companies need smart people who can code...
Email in profile if you want to know more.
I can see two viable, yet very different definitions:
1. Frontend web engineer: Versed in HTML, CSS, modern Javascript libraries such as React, Vue, Angular. This is a programming role first and foremost, better paying than #2, and what I would suggest focusing on.
2. "Classic web developer": Versed in HTML, CSS and just enough JS/jQuery. Knows the inside out of some CMS such as Wordpress. Not recommended, yet there are a TON of small companies and clients that just need a small website or ecommerce site. A friend of mine fits this role, I wouldn't define him a programmer by any stretch of the word, yet makes a living adapting Wordpress or Magento into functional websites.
As someone who's neither I rather disagree.
But no one would ever hire me as a "front end developer" or a "full stack developer" without knowing one.
As other people have noted, classifying "web developer" as "frontend web developer" is a bit restrictive.
It's all patchwork on top of JavaScript, though. Another programming language like Elm, or something that compiles to WebAssembly, may be another option to consider.
It is entirely possible to dislike React for being React, rather than for the fact that it's not minimalism. I have to work with React, and it's a constant source of pain for me.
If you're advocating for traditional server-rendered websites (perhaps with very small bits of interactivity via JS), then you're #3: A backend developer.
If you're suggesting building a complex client-side app, just without a framework, then I reckon that this is just a variant of #1. But you'd better be a very experienced developer, or your code is going to be a complete mess. This isn't really a viable path for a new developer just starting out.
In terms of what is being done, I'm far more judicious with removing unnecessary libraries. I've followed up other developers removing any number of modules in favor of hand-crafting from baseline modules. Since it's JSS it includes semi-dynamic styling that is based on async loaded modules. ex: if you don't go onto a chart/graph page, you don't get those modules.
It really depends on your tooling, knowledge and what your needs are. IMHO it's far better than typical jquery + bootstrap + bootstrap extensions that many of those who look down on client-side frameworks lean towards.
Magento is a fairly complex platform too. It uses lots of very formal software engineering paradigms joined together in a well thought out framework. I would consider it a bit more traditional programming than Vue or React, and if I had a general programming role to fill I would sooner hire a Magento only backend dev than a React only dev. React/Vue are very specialized frontend tools and working with themm doesn't translate all that well to general programming.
You're not going to find this kind of developer in a run-of-the-mill WordPress shop. You probably won't find them in the latest startup that is all on the serverless bandwagon, either. But there are quite a few of backend positions in larger organizations where you might coincidentally find better pay and job security as well. Bonus points if you're well versed in security, or know how to talk to the database guys over there.
3. Full-stack web developer.
4. Back-end web developer.
3. HTML, React/Vue (and related libraries like redux/vuex), CSS, SCSS, JS (including ES6+), JSON, REST, Node.js, Webpack, Babel, Python/Java/.Net/PHP/etc., SQL, Postgres/MySQL/etc. DDL/DML, Git/SVN/etc., Apache/NGINX/etc., HTTP/HTTPS, Let's Encrypt, Linux related technologies (SSH, BASH, etc.), etc.
there is a ton of room for number two still. Maybe not in the heart of Silicon Valley, but other major cities—sure. There are a ton of businesses operating using WordPress as their primary platform because it's relatively easy for non-technical or semi-technical users to wrap their heads around.
Here in Toronto there are a lot of thriving WordPress/PHP-stack shops that service those businesses so that they don't have to hire their own web team. I would never want to work with one because I personally really don't like working with that stuff. 100-foot pole sort of situation— but they're there, and they pay okay for the local market.
Web development could be solving someone's essential business problem or totally non-essential for someone else.
The key is to find the customer for whom whatever you're doing will solve essential business problem.
Quite often web development is exactly what customer needs but he won't call it this way. He won't use this wording. He won't look for web developer. He won't pay for web developer.
But if you approach customer by speaking customer's language and showing customer how you can solve his problem - the result could be way more win-win and productive.
You won't hire an expert in "connecting wooden boards with nails" but you'll more likely to hire an expert in "building houses" to build your own house.
That's an idea.
You'd then try to work on projects where your construction specialty is seen to be more valuable than not, that goes to your comment. But that's an entirety different question than whether a specialty should be pursued, and if so what specialty.
E.g. in this case whether it's still a good move for a new developer to start out his career by focusing on web dev v.s. say native mobile dev, or mainframe development or whatever.
What I do think is that 'Web Dev' might be a viable first step within a career. It's a good way to get yourself into a spot where you're exposed to signifiant problems, and if you're lucky, it will also give you exposure to people that can help you along, as you develop your career. (But it's important to be intentional about both.)
At the very least, that's how I answer then question when asked in person... focus on the specific tech as a tool in the short-term, and then focus on effectively solving problems people care about. It's better for them, and most likely, better for your own personal career development.
(Edit: Some of this may just be my own perspective... My professional work has included everything ranging from small scale embedded programming to large scale clustered web apps and platform development. I'm grateful for never having thought of myself as a 'web dev', even though it is something I'm capable of.)
I love this kind of work. Writing learning software for airplane systems. Accounting and auditing systems for fortune 100. Kiosk+POS for water distribution platforms. Security software. Election services software... It's been an amazing 24 years, and I have absolutely every intention to keep learning/working until I die.
I find that a lot of people just think that "web dev" stops at the browser.
Tangent: “general carpentry” is not a superset of plumbing/tiling/plastering. Carpentry is its own skill related to working with wood and similar products. Maybe you meant general contracting? Although that’s still not actually a superset and you won’t find that most general contractors are licensed for plumbing and electric work.
Edit: To summarize, not every web developer needs to be an entrepreneur.
I often wonder at the whole "gotta be a contractor" mentality. I understand there's more money there, but I think that there's a huge value in learning to be a team player where you're building something you are actually invested in, if even for only a 1-2 year period. As a contractor, the skills you build and lessons you learn are important, but they aren't as concrete as living and dying with a particular team and a particular solution for an extended period. In addition, I feel like you are more likely to get vital mentorship at the critical early part of your career as a member of the team instead of a replaceable contractor cog.
This is spot on, whether you are free-lancing or working as an employee in a big organization.
More generally, software development benefits from a large flow of money precisely because, whether directly or indirectly, it enables businesses to accomplish things in a {faster, more efficient, cheaper} way. When career planning, always remember where the money comes.
Interacting with an end-user is not a "solved problem" that has been commoditized. There are still a lot of human touch, optimizations, edge cases and performance issues that are actively being worked on and have not been formalized and standardized in ubiquitous ways for all industries. Sure framework XYZ may get you 80% there but then there are specific UX issues that you will have to delve in, and that's where the real fun begins.
But there are a lot of people doing this work. You have to compete with them. That will take a lot more work.
No, it does not. Learning new skill from scratch takes time. You're trying to master 2 new, orthogonal, in some sense contradictory skills: web development, and self-promotion (to find your place in "the job market"). Take a deep breath.
There's a difference, and not insignificant, between "learning everything for CS degree" vs "learning what you need to get hired as a web dev".
But I'll agree that 6 months is not that much time in the "learn new career skills and find a job" timeline. I spent around 18 months of nights/weekend practice and learning, followed by 3 months of interview prep before I found a job and that was with a big spoonful of luck.
To OP - this is a marathon, not a sprint. Get used to learning things on your own, you will be doing it for the rest of your career if you make the switch.
Cannot second this enough. As a developer, there will always be new tools and technology. More room to grow into adjacent development. And more line of business knowledge to gain. I can't think of any other field, that has more lifetime learning involved in it.
Which isn't to say the non-programming stuff in my degree was irrelevant, but you don't need to spend 4 years full time studying to learn relevant skills for a junior web developer job, and you could easily learn them in less time outside of a degree.
Granted, he's very smart and basically coded all day for 6 months, but I'd say it is possible for a motivated individual.
My 8 months of studying were full-time studying (freeCodeCamp and plenty of small projects). 6-8 hours every weekday.
Not sure what you mean about "solid path", but you have to have focus.
edit: these are my tips for becoming a frontend web developer, which was my path.
First, learn the essentials of CSS - don't aim to be a CSS wizard because that won't help you get your first job on good jobs (the ones that are not on agencies where your sole job is to transform photoshop images in HTML).
The most basic and true advice is to focus on learning Javascript properly and deeply. Read books (EloquentJS for starters is a good one), read documentation, watch videos (Fun Fun Functions youtube channel is a nice one), practice on code-on-the-browser platforms (I am a huge fan of freeCodeCamp) and create some projects of your head using Javascript only.
At least 3 (full-time) months on Javascript only. Then, move on to focus on React, because that's where all the jobs are going. And I say this being hired to work with Ember on my first job (and I enjoy Ember), but pragmatically, React is the way to go (assuming you have learned Javascript properly before).
Also, pay attention to good software development practices (The Pragmatic Programmer is a good one) that are not about language syntax (e.g. coherent indentation of your code, good variable and method naming, how to make code more readable and maintainable). Become what in the United States they call "an engineer" with certain glamour on it. You don't need to buy the hype that software engineers are a special breed of people superior to all others, but do make an effort to learn best practices, design patterns, clean code and all that.
Don't get into any tech discussions in forums, flamewars, don't take sides, etc. This early in your career you should focus and be pragmatic.
Summary: Learn the essentials of HTML+CSS. Focus first on Javascript, then on React. Create your own projects and learn what good development practices you should use on them.
I wrote a few blog posts of my learning and career change to web development, you might find them helpful: https://rodrigohgpontes.github.io/
- Don't just learn Django, learn Python
- Don't focus on React, Vue, etc. learn JavaScript
Those skills will last longer and make it easier to transition into other roles if front-end doesn't feel right for you at any point in the future.
Most developers will never need to solve “hard problems”. They will be working on yet another software as a service CRUD app or a bespoke line of business app that will never see the light of day outside of their organization.
I’ve found studying architecture, soft skills, and my business courses (before I dropped out of graduate school) to be much more helpful in my career.
Here was a typical (not verbatim) exchange when I was a Front-End Architect interviewing candidates for my team back in 2012 or so:
---
Q: Tell me about your experience with JavaScript.
A: I know JavaScript because I've been working in jQuery for a year.
---
Further questions would isolate the fact that they've _only_ used jQuery. It was depressing, really.
I mentor developers to really strive to learn and understand the fundamentals precisely to stop propagating the idea that libraries and frameworks > fundamentals. Problem is, I've already started to witness history repeating itself when interviewing candidates and getting the equivalent answer above--but with "React" in its place.
You don't need to spend a penny (or too much time) to learn web development if you put in the effort. Mozilla Developer Network [0] is what I recommend as a learning resource. I'd advise reading the JavaScript Guide if you have previous experience; if you don't, there's stuff for beginners there to. Learning some HTML & CSS will be most helpful.
I'd advise that after you learn JavaScript, you learn React [1]. Take the tutorial. I'd recommend watching one of the React talks to explain to you what makes React useful.
I'd advise you prefer learning Node.js [2] next, and it's probably a better choice than learning PHP or Ruby for the purpose of server-side web development. Perhaps take a look at TypeScript after.
To become a good programmer, branching out is helpful. A requirement to be a good programmer is that you have some basic level of CS knowledge (there's many free ways to study CS). Learning some C/C++/C#/Java/Rust/Go is also good, but this is not a priority to getting your initial webdev jobs. This isn't necessarily going to be useful in getting a job directly, but improving as a programmer will help indirectly.
HTML & CSS mastery is a lot less important for a web developer (as opposed to a web designer) than JavaScript. You don't need to memorize everything, but you should be able to get by with Mozilla Developer Network open for reference.
Other resources to check out: Eloquent JavaScript /r/JavaScript Free Code Camp javascript.info
[0] https://developer.mozilla.org/en-US/docs/Web/JavaScript [1] https://reactjs.org/ [2] https://nodejs.org/en/
I used to be contacted by headhunters at least once a week. Nowadays, I hear from Indeed and LinkedIn that often. I have been to their offices for interviews and assured they would find me a job quick.
While I have risen through the ranks over the years to project manager and a prolific company and, eventually, ran my own profitable company, I have never, ever been sent on an interview anywhere by any of the operations I mentioned above.
Remember software dev is not about assembling big pieces of codes given in a framework, it's about logic / control flow, data structure, architecture. Once you understand all that, you don't consider yourself a "web dev" or a "mobile app dev" anymore, but just a software developper.
Start with a Website, Not a Mobile App https://news.ycombinator.com/item?id=18824993
I found their web-first arguments mostly unconvincing. And kinda hand-wavy on certain points. Two relevant points, rapid MVP development and instant updating of your app I have to agree with. But the idea that desktop software pricing translates to people being willing to pay more for a website is a crock. People think websites should be free. It’s not just users who think that. I have to educate my clients why their business app that needs a login, data storage and access controls is not “just a website” and why they have to pay me significantly more to make it happen.
Two more interesting questions you should be asking yourself are: 1. Do you love writing sofware, and 2. Are you good at it?
If the answer is yes to both then you're on the right track. If not, you could have a problem down the road.