I've been writing code since around 1987 and one thing that has stuck with me all this time is my passion for learning. I remember when I was around 10 years old, I was learning C on the Amiga 500 and had recently purchased a copy of "North C Compiler" from my local public domain library.
Public domain libraries were how we used to get software before the internet was a mainstream thing, These places were literally just middle aged guys distributing free software at a small fee to cover the cost of the floppy disks they were distributed on, this and DOS based bulletin board systems were the bread and butter of swapping and buying software in the 80s and 90s.
As developers we are often tasked with learning a new stack or framework, I remember the first time I saw CodeIgniter after years of using generic PHP3, back then this was my first real exposure to a PHP framework and I was blown away by how much easier it made things.
Obviously, looking back it's easy to see just how simple and lacking these tools were, but at the time they were ahead of the pack and were the first exposure for many people in the PHP community to concepts such as MVC (model-view-controller).
This kind of approach for me is a more passive way of learning, yes you have a need to learn but you're only really learning it since your job or situation requires it, there is nothing wrong with this approach, I have done this hundreds of times, but personally I think about learning in a somewhat different way and therefore change my approach slightly.
The single most important part of being a web developer is your ability to learn new skills, I don't just mean frameworks and languages, but also general problem solving and communication skills, these are just as important and often overlooked.
The web development world moves ridiculously fast, and trying to keep up constantly will eventually lead to burn out, but since the ecosystem around us moves at such a fast pace it's important to learn new skills to stay relevant in today's job market, this includes full-time employment, freelance as well as contract work.
As a full time freelancer, one of the scariest situations to be in is to wake up knowing that your skills are outdated and not desired in the current market, this tends to happen when developers get stuck in jobs for years and take the comfort and security instead of stretching and forcing themselves to learn.
Many roles that I have worked in have promoted self development as part of the process, even providing budgets for conferences and learning materials, this is a fantastic start and if you have this available then you should 100% take advantage of it, however it's only the beginning, and this is where you need to build a company culture of learning.
This is a tricky beast, picture this situation, you work for a fantastic company, they provide you with a budget for learning and conferences, but nobody has the time. Everyone feels like they can't take two days off to go to that conference as it would put them behind in delivering that new feature, or worse still, their pull-request would go unmerged for another two days!
This situation in my experience is common, companies are so much better these days and want to do the right thing, but so often there is a culture within the company of "work hard, push to deliver" and very little time for learning and self development.
In a situation like this I think you have to lead by example and gently convince others to join you, I remember once working in a team of around twenty developers for a large mobile phone retailer, I managed to convince my manager to generate the budget to send us all to PHP North West, and out of those twenty or so developers there were literally two of us who took advantage.
This was crazy to me, the company were willing to pay for education of their employees, but nobody was interested, this was caused by the lack of learning and self development as part of the company culture, it was very much a case of push code, sling
divs and work hard, in the minds of my peers there simply wasn't any time for learning even if it was free!
Different people learn in different ways, but I think my approach is the best of both worlds for my situation. Primarily I am a visual learner, I subscribe to a tonne of online learning resources both free and paid where I can watch a variety of different types of screencasts to learn a new topic.
I also like to read, I tend to read when I want to go into a topic in more depth, so as an example, if I were wanting to learn Vue then I would generally start with the documentation (which is excellent by the way) but quickly move onto picking up a course so I can see Vue in action.
Once I have gone through the very basics of something via the documentation and played around a little, I then add a little structure by taking an online course, this is not 100% necessary, but I feel it helps me arrive at the point quicker as the content is generally much more structured.
I also consume as much information as possible via other peoples blogs posts on the subject matter, as well as podcasts, books and even twitter.
One important aspect is to actually code, it's perfectly fine to watch an 8 hour course on something, but if you don't apply it then you simply won't retain any of the concepts.
Learning syntax is something I see as secondary, it's something that just happens the more you use a language, using my memory to actively remember these different variations in syntax seems a little redundant to me, mostly because I can look them up easily on Google and within documentation.
Instead, I try to learn the concepts behind what I am learning, so as an example learning about scoped slots in Vue or dependency injection in PHP is a lot more about the concept of what the problem is and how we are solving it, and less about the task of remembering syntax.
A good point to remember is that I have been developing and programming for a very long time now, and every single day I use Google, Stack Overflow and look around for answers or more elegant solutions, instead focus on remembering the concepts of why something is built that way, and look the syntax up on Google or via a cheatsheet until its part of your muscle memory.
This will literally drive you to despair, trying to learn everything in the web development world is literally impossible by definition, you absolutely cannot learn everything, and I think this is why I have a problem with the term "full stack developer" or most recently "10x developer", it's just bullshit and it doesn't exist.
Instead of trying to learn everything, pick a stack that you're interested in and run with that as much as possible in your learning schedule, of course it's fine to learn other things less relevant along the way, but I would 100% recommend sticking to a particular stack.
For me that stack was PHP, Laravel, and Vue - I find the community a friendly one and it's where most of my day to day work currently resides, however that doesn't stop me dabbling with React and Gatsby from time to time.
My point here is this, just don't set yourself unrealistic expectations, and trying to learn everything is just setting yourself up for failure, instead focus or niche down a little more, learn something new every day and that can be as big or as small as you like.
It's a marathon not a sprint and consistency is king.
Looking around on the internet particularly on Twitter, it's easy to sit back and watch and assume everyone else has this all figured out, this is where impostor syndrome kicks in and all of a sudden you find yourself doubting your own abilities in comparison to others.
I have 100% done this, and we really shouldn't compare to others, what you see on the internet in most cases is the good parts, what you don't see is the pain that other developer went through to get his knowledge to where it is now.
The way I like to think of knowledge is as a journey rather than an amount, if someone knows more than you about a particular subject, it's not that they are smarter than you, they are just further down the road on this journey, you can easily be in the same spot by learning a little everyday to move forwards.
This also applies to people you might be ahead of, if I know something about a topic that you don't it just means I am further down the road at the moment, you could put in more learning time and easily surpass my knowledge.
So, don't compare yourself to others in the moment, instead focus on your own learning path and know that you can learn anything, it just takes time and practice.
I know a lot of developers who are totally against paying for courses, whilst I know some of them can be very expensive it's possible to buy a course for as little as \$15 these days, however even for some developers they just have a hard time parting with cash this way.
As a freelancer and even before I was freelancing I would look at this concept in the same way that I would look at my business, I am essentially selling my expertise in return for some form of remuneration, so the more I know, the more I can offer my client, so if I spend \$15 on a 30 hour course to learn Vue, then I see that as a massive return on investment in the long term.
Of course not everyone is in a position to pay for education, and I understand that, but there are tonnes of free resources you can start with, online docs and blogs.
Paying for education is a bit like fast tracking knowledge in my experience, sure there are some excellent free resources out there to learn tonnes of things, but generally I find paid courses a little more structured in most cases and have a set of learning outcomes.
As the father of a 3 year old toddler I can 100% state that a lack of sleep will impact your ability to learn effectively in a huge way, if you've been up all night feeding the baby then honestly, just sleep, don't try to learn when you're exhausted, you won't be learning anything and you'll find yourself rewinding or rereading pages over and over again as you dose.
I tend to go to bed around 10 pm, any later and I just feel like death the next morning, I tend to read in the evenings or watch some screencasts in the very early evenings once my son is in bed.
There have been so many studies around the effects of sleep and performance in learning and in many other aspects of life, poor sleep will just hinder your progress, so try and get as much of it as you can.
I am often asked what I use to learn PHP, Vue and Laravel, so asides from the obvious websites for various frameworks and their own documentation, here are a list of things I use to help me learn more effectively.
At the end of the day, you have to want to learn a subject matter to learn it effectively and efficiently, studying different forms of learning from videos, books, blogs and podcasts I find are the most valuable methods.
But also remember that it's perfectly OK to go at your own pace, don't compare yourself to others, get plenty of sleep and make learning a fun task that you enjoy and not dread.