
Ask HN: For beginners: what is the hardest part while learning web dev? - alinalex
Hey there,<p>Self-taught web developer here. I managed to get a job after 11 months of learning of my own. For me, the sheer amount of resources was overwhelming and sometimes got me thinking to give up, but I kept at it and managed to get a job and find out how web dev looks like in real life.<p>Eager to hear your stories.<p>Thanks,
Alin R.
======
codegeek
I think that a majority of "beginnner" tutorials miss the point. They start
with the actual HTML/CSS right away. Heck, some even start with jquery as part
of a beginning course.

I really believe in learning the "why" of something and not just the "what" or
"how".

For example, if you really want to learn web dev, you have to learn to some
extent how the internet works, what are the various protocols for web (http vs
ftp vs ws etc), what the hell is DNS, the whole client/server cycle
(request/response etc) etc. Sure it can help showing actual HTML code to
explain http or request/response but I feel a lot of beginner tutorials just
focus on the result and not the actual path.

Teach about the document/DOM etc and then write a simple helloworld.html. But
then open the web inspector, show them how the request was sent (header,data)
and then show the response received from the server.

There is plenty of tutorial on the usual stuff but not many that get real deep
which is useful for beginners.

~~~
anotheryou
I think going front to back is valid too.

Restyling wordpress yields usable results qiuckly, which is great for
motivation. And motivation might be the most important things if you learn it
by yourself. It's just important to take your time when encountering issues
related to things below.

In general there is a fine line in programming: going as high level as
possible only gets you in to trouble when things go wrong or need
optimization, but you often don't have to know much more than one level down
and a few basics to make better guesses about errors.

~~~
wry_discontent
I don't think this is true. I have worked with people who don't know enough
going down the stack of web programming (and been one of them). They couldn't
fix bugs as easily as I could. I'm sure there are other consequences, probably
design related, but the bug one is apparent to me because I help when I can.

------
jmkni
In my opinion, it's the sheer amount of options available. It's overwhelming.

First of all, the tooling. Should I use NPM, Bower, Gulp, Grunt, Webpack or
something else?

What text editor should I use? Visual Studio code? Sublime? Vim? Emacs?
Something else?

What Javascript framework should I use? React? Angular.js? Angular2? Vue.js?
Do everything with jQuery? Something else?

What CSS framework should I use? Bootstrap? Semantic UI? Material Design?
Something else?

Should I just use ordinary CSS? SASS? LESS? Something else?

Should I use plain Javascript? Typescript? Dart? Something else?

All of the above have a learning curve (which means spending your valuable
time learning the specifics of each choice). And no matter which combination
you choose, somebody will come along and tell you that you have made all of
the wrong decisions and should start again with X, Y and Z instead, which is
incredibly frustrating when you just want to build something.

I've learned that, if you have learned X and are using it to build something,
and somebody comes along and says, _What are you using X for, everybody is
using Y now, X is dead_ , you just need to have enough backbone to say, _X
works for me, I know it inside out and I can use it to build a mean product,
go away_.

It reminds me of the old but still relevant Joel Spolsky blog post, _Fire and
Motion[0]_.

[0] - [https://www.joelonsoftware.com/2002/01/06/fire-and-
motion/](https://www.joelonsoftware.com/2002/01/06/fire-and-motion/)

~~~
isoos
You will get plenty of strong opinions and materials on the tremendous amount
of JS framework and libraries. In the end, choosing what is best for you is a
balancing act, and there is no clear winner.

One benefit of learning Dart + Angular(.dart) is that you get an efficient
programming environment with batteries included. The toolchain includes the
usually required tools (SASS included, it is now implemented in Dart first and
is ported to other platforms afterwards). The learning curve is small(er than
usual), the tools are great.

------
open-source-ux
_" What is the hardest part while learning web dev?"_

The sheer amount of stuff you have to learn _other_ than just the programming
language you picked up. In fact it feels like as much, if not more, time is
spent understanding tooling, distribution, packaging and hosting options for
you web app. Little of which feels satisfying or enriching to learn because so
much of it is simply endless administrative minutiae. No-one seems interested
in simple, easy alternative methods.

This won't be a popular opinion, but I'll say it anyway...I am learning Python
at the moment, and I can completely see why so many people start with PHP for
web dev. Python - _the language_ \- might be easier and friendlier PHP, but
Python's 'eco-system' for deployment and distribution is horrible, fragmented,
clumsy and not easy to learn (or documented well).

~~~
hyperpape
I'm not a fan of PHP as a language, but anyone who denies it hits a sweet spot
for deploying applications is seriously confused.

~~~
aphextron
PHP has such a terrible reputation from all the spaghetti code that's out
there, but modern PHP is a pretty solid language when written properly. So
long as you are writing good OO code and using an IDE like PHPstorm its a
breeze to develop in. Also with Facebook's HHVM performance is on par or
better than Java or C#.

------
devwastaken
The hardest part, for me, is knowing how to 'get a job' as a web dev. It seems
like thats something no one ever talks about, and rarely do I see any
information for. The reality is that you need to have some worth to a company,
and that is in your skills and ability to improve your skills. Thing is, how
do you prove that? Just because you make some app in React doesn't mean you're
now an experienced React developer that can solve complex problems with it.
Just because you make some web apps doesn't mean that you know the proper
technologies to work with in other projects. It takes a lot of time and effort
to learn things, and there are plenty of companies that aren't there to pay
you to learn a whole bunch of new things unless overall you have a lot of
experience.

I look at job postings all the time, and I don't feel I can honestly say:
"Yeah, I can do that". I could learn to do what they need, or maybe the
circumstances of the employment may cause me to be useless in its duration.
There just doesn't seem to be a way to know what you're going to be working
with until you just jump ship into it, and if you fail, well, nobody talks
about that, and thats legitimately scary to me.

Sometimes I feel its not real, like the people who get 'real' jobs with this
stuff can either just fake it and get lucky, or are simply better. It sucks,
because I know I've made some cool things and can make much better things. It
sucks even more because there's a limit to how much time you can spend working
towards a complex career goal like software development before you just end up
working a retail job full time to survive.

So, yeah, that parts difficult.

------
LukeB_UK
Also a self-taught web developer here. My advice would be to make sure you
learn the languages, not the frameworks. Once you know the languages, you can
pick up the frameworks far easier and you can actually dig in and see what's
happening.

~~~
kikups
I'll say it's more of learning the fundamentals / concepts, such as why a
framework will be useful. Languages and frameworks will change over time, but
some core concepts will remain the same.

------
nitin42
The hardest part what I think is that we are surrounded by numerous web
frameworks which makes it difficult to choose one of them. It may be due to
the scope of the framework, community support and learning curve. I am a
JavaScript Developer and I too find it hard sometimes to move ahead due to the
design paradigms (both frontend and backend), database drivers (MongoDB my
fav), community support for the project. It doesn't end here but we also feel
that our project or a small app that we make might be neglected because the
stack which we used while developing it was too much flexible or was easy to
implement.

A solution to this can be making your development stack more and more compact
according to the current needs and choosing a open source project or framework
to work on which offers good community support and has a future scope.

------
hamandcheese
I started not even trying to learn "web". I was self teaching Python and
trying to solve Project Euler problems... it was fun!

But also not very useful. I became pretty clever (imho) but didn't know much
about the web. I had no idea how JavaScript would interact with HTML, for
example.

I found that learning how the internet worked helped a lot. So TCP, HTTP, DNS.
Before I learned these things, I struggled a lot.

From there I learned Rails (and then Ruby, which is common but perhaps not
ideal), and the rest is history.

This was over the course of several years though. One thing I'd really like to
point out is that you're likely able to get a job earlier than you expect.
That's not to say that you should be overconfident, but embrace being a
beginner, ask questions, and know that you can still contribute.

------
justanotherbody
For me it was getting enough experience with the various tools and tooling to
learn the __right __tool for each job.

I started around '08 on a Django-based stack with really only university
courses and prior Python programming experience. I was very active reading
about the tech stacks which helped substantially.

When building mostly static content, I relied heavily on templating. When it
came time to add interactivity, jQuery was right there waiting for me. When
more complex behaviors were needed, I had to figure out how to write _actual_
javascript rather than string callbacks together. Then learning to manage
dependencies and assets became necessary, ... and so on.

A mentor would have been an enormous benefit. I was very lucky in that I got a
wide berth to work in, and much opportunity for greenfield work.

------
ayushgp
These are all the things that made full stack webdev overwhelming for me: 1\.
HTML, CSS, JS and a backend language with a database.

2\. Even if you learn basics of these, you proceed to see online tutorials.
When I started angular was all the rage. Midway through learning angular,
facebook released react. As a beginner you get pretty much carried away by
blog posts which go on praising the new tech.

3\. Es6 comes in the scene. Enough said.

4\. But you have to learn grunt/gulp to be productive.

5\. Code in vanilla JS? Ever heard about typescript? All the angular guys are
using it.

Css frameworks, jQuery, and many other things.

~~~
girishso
4\. gulp/grunt is history already! webpack is the new hotness.

It's crazy how fast the things move in js world.

~~~
camus2
The good thing is that nobody is forced to use all that stuff. You can write
plain ES5 and plain CSS and it will work in most browsers out-there.

------
increment_i
For me the hardest part was slamming into that wall where you've been working
at a very high level of abstraction (HTML, CSS, a web framework of some sort,
an IDE) and you realize you have very little idea how computers work or how
they talk to each other.

This is the point where you need to do some kind of a deep dive into UNIX or
the command line of your OS and figure out what the hell is really going on.
Processes, files, permissions, networking, security, etc. When you pull back
that curtain a bit and realize you know almost nothing...

~~~
alinalex
Yep, I remember learning all those html, css, js stuff but I had no idea how a
site works and all the server side, DNS, etc. SO true...

~~~
Zolomon
Don't mean to humblebrag, but thanks for reminding me that I have actually
learnt stuff that not everyone knows. Imposter syndrome kicks in easily when
caught off guard, especially when surrounded by people who appear more
knowledgeable than you at most times.

------
mbeasley
1\. Code tutorial websites teach mostly syntax but are weaker when it comes to
teaching you how to set up an environment and structure a new environment. As
such, it's useful to look at other people's code on github or similar.
Websites and web applications are only partially about the code your write;
they are also about the system on which they are built. Learn what it means to
"deploy" a website and how that works. Even though some will argue that that's
more of an operations concern, as a web developer you often have to wear
multiple hats, including operations and server management.

2\. With languages like javascript, especially for those with no programming
experience, it's really easy to get your feet wet and believe that you "get
it", that you "know javascript". That's a fallacy. Javascript, perhaps more
than other languages I know, is easy to stitch together to get working (quick
and dirty) but really tricky to write eloquently in a way that follows core
software development principles and in a way that is easy to manage in the
long term (which is part of the reason that there are so many JS frameworks
out there).

3\. Accept that there are things that you just don't know (and things that you
don't know you don't know) and dedicate time to learning from others; not just
as you get started, but forever. We spend time on our team every day sharing
even the smallest things that we've learned that week to promote this idea
(even things like "I discovered the `git add -p` command and here's what it
does!").

~~~
loverofcode
Amen, coding is a never ending study. Always new things. do do do do doooo.
I'm coding it.

------
kewin87
The way I teach it to beginners, is by making them create something the really
would love to create.

Because teaching them HTML/JS/CSS and/or a random framework simply 'always' is
overwhelming.

And because some really like backend, others Frontend. Some really like
Vanilla and others really like frameworks.

If we sit together for 5 minutes to talk about the requirements.. They usually
getting really excited and seem to to do a Minimal Viable Product approach
with a lot of motivating.

For some reason they learn really fast that way and start to make quick
choices from the start because they have a clear goal and start to look more
'what works for them' instead of getting lost in all pretty looking blogs and
to much technicall theory from the start.

Next to that, I'm being really clear that there code will always suck. Same as
there 2nd project and the 3rd project.. Even my code will suck after I did 50
more projects..

Point is, they have to have finish something first, look back and than realise
what they want to improve.. After a few years you know a lot of pitfalls and
you 'could' call your self a good developer

------
dtnewman
There are a lot of tools and frameworks out there, so it's tough to know which
ones to get started with. There are a lot of terms that don't make much sense
until you just go ahead and start using them... HTML, CSS, JavaScript,
CoffeeScript, Ruby on Rails, Django, HTTP, API, SSL, Angular... it's really
frustrating to figure out what's what when you are just beginning, but once
you do figure out, you realize that it's not rocket science. But I'd advise
_anyone_ trying to learn to do web development to find a mentor who can help
you get started by pointing in you in the right direction in terms of tools
you'll need to learn to get started (and in what order to learn them). Once
you have the basics, it'll be easier to know what tools you want to add to
your arsenal later.

A great way to meet people who can give you guidance is through local meetups.
For example, you'll likely find people with web development experience at any
Python meetup. Finding a good mentor will save you a _lot_ of time.

~~~
alinalex
True that! For me, I find my mentor at my job and it feels that I learned an
awful lot more from him than I would have learned on my own, so yeah, it's
very important to find a sort of mentor.

------
webmaven
This isn't as much of a problem today, but when I was beginning ('97-'98) the
hardest part was learning to completely ignore most "vendor" platforms
(especially the big content management systems like Vignette StoryServer).

Other than that, the need to learn five sets of semantics/syntax in parallel
(HTML, CSS, JS, (Python|Perl|PHP), template language) with constant context
switching was quite difficult as well. I lucked out in that the server-side
tech I chose (Python & Zope) at least let me ignore SQL for a while, and I was
able to minimize the amount of JS I used until jQuery came along to make
front-end coding suck a _lot_ less.

------
girishso
As someone working on web development for about 16 years and mentoring tens of
junior developers, most of them get stumped at how HTTP Redirect exactly
works. Not that it's super complicated.

Otherwise I think web development these days has gone nuts, with so many
technologies involved SQL, HTML/css, server side language and framework, not
to mention JavaScript.. even if you decide to stick with React, which is the
most accepted framework these days, within React eco system there are so many
different choices of tools no newbie can get his/her head around that easily.

------
hanniabu
I graduated as a mechanical engineer and tried to make the switch to web dev
but I got caught up in not really knowing what to learn to get an actual job.
For instance, I'm a natural at CSS, came as a no brainer, but all places want
you to know less and then it was sass and then it was one of those along with
gulp and then grunt, and then everybody became crazy about mom and then
webpack. This is why I gave up and moved on. I still love to code in my spare
time, but as far as work wise I never made the transition. I felt like I was
chasing a never ending qualification list.

~~~
sapeien
May I ask why one would want to switch from a well respected engineering
profession to one which literally kids can do? Outside of the HN bubble where
there's lots of VC-funded Internet startup employees, webdev is a joke, and I
think you see why now.

~~~
hanniabu
There's better working conditions in tech, you can get paid more, when you
know how to code monetization options open up since it's a lot easier to make
money and less risky with a website/store/service than it is making your own
physical product, webdev now is also pretty much software development
depending on the type of work you do, my engineering background couples very
well with program design and also helps out a lot when connecting to physical
systems.

------
marktangotango
Cutting through all the bullshit and tribalism around languages and frameworks
one finds online is the hardest part imo. whats important is defining a basis
to choose; employability, cool, theoretical etc, and basing how you spend your
time on that. Not on "x says y is the new hot I better learn that!" That's a
treadmill that never stops.

Edit also understanding the first language and framework you learn is just the
beginning, there will be many. That's something that surprises many.

------
forgottenacc57
Ugh. When I think about how much I know, and how long it took to learn, and
how hard it was to learn, I have to say I would be daunted if I had to start
again from "this is a bold tag", which I did in about 1998.

You just need to maintain a frenzy of non stop learning and write huge amounts
of code for the next X years and you'll be OK.

------
kayman
I echo the sentiment expressed here: Learn the building blocks not frameworks.

It's the long way but the investment will pay off. New frameworks come along,
you'll pick them easier because you'll already know which building blocks are
used.

------
jackgolding
The tooling (do I need grunt, what framework do I use) and organising my code
(best practises/design patterns) has always been what confuses me as a data
scientist who wants to learn more front end.

------
dattasaurabh82
that's a reason never liked web dev .. it's like porn fight between reality
kings and pornhub.. @jmkni introduces very clearly first few probs..

------
du_bing
The whole picture of the Internet, this is hard to get. Technologies are good
to learn, but abstractions of the real world, this comes from one's
experiences.

