Hello, experienced coders and newbies alike! You've likely witnessed the dilemma faced by newbies or are facing this yourselves: When getting started, should you prioritize mastering the fundamentals or plunge into the world of latest frameworks and technologies? How can you strike the right balance between mastering the fundamentals and staying updated with the latest frameworks?
Follow the CodeNewbie Org and #codenewbie for more discussions and online camaraderie!
Top comments (32)
Learning a framework without understanding its underlying language and concepts makes it harder and slower. E.g. start by learning JavaScript, Node.js, and TypeScript before diving into Nest.js. This foundation will not only make learning Nest.js easier and faster but also enable you to learn other related concepts more quickly, as many things are built upon these fundamentals.
Maybe Nest.js is not the the best framework for beginers, because that is use decorators which is not part of pure JS. So without babel that code is not able to run.
I think best practice is learn fundamentals is learn pure JS first, best without HTML. I recommended to use devtool console only. If someone is familiar the string, array, object, JSON. Learn JS / TS on codewars
@pengeszikra, a couple thoughts.
First, let me address your 2nd paragaph:
I do agree with your idea of learning JS (or TS first), to get the language down before dealing with manipulating the DOM (rendering HTML) - just learn the language! Just learn how to program - don't worry about the UI yet. Hower, I might suggest installing node.js (and maybe even ts-node) and do it from the terminal, and so that you can run files as scripts. If the goal is to learn TypeScript, you can't do that directly in the browser console.
This brings met o my next point, addressing your first paragraph:
I would push back on that paragraph a bit - the article was intentionally vague, so IF the goal of the anonymous "newbie" is to learn TypeScript, then Nest.js (for backend) or Angular (for frontend) would be fine frameworks to learn.
Unlike most things in this discussion (where learning the underlying tech is very important), it's probably fine to get going with TypeScript without starting with pure JavaScript. (in the backend, there are already TS-fist runtimes, and that may come to the browser sooner or later)
And to your point, yes, babel may be involved, but I don't see how that is at all relevant or concerning - the frameworks take care of that all for you - you can use those frameworks without even knowing that babel is grinding away in the background.
For that matter, Angular also used webpack (and now uses esbuild), but I'm quite unaware of that as I work on my projects. My point is, this concern isn't really a roadblock.
Cheers!
I think it is really really important to get the basics right first, then you can move to the framefork. If your starting as a developer, you need to understand the mechanisms that moves the language you're using. Without that, past the basic features you'll get stuck, without knowing how to debug and if the errors is from the language or from the framework.
You don't necessarely need to get deep into your language of choice at first, but the basics should be solid before moving to any framework.
You can surley learn the advanced stuffs with time and practice, and that allow you to keep pace with everything, but all that only constructing solid basis
Why not both but not at the same time?
I am not a front-end developer but if wanted to become one, this is I would do.
But more importantly,I will do that one step at a time, making one experiment at a time instead of feeling overwhelmed.
Because Life is a Picture, But You Live in a Pixel — Wait But Why
SAME TIME THOUGH, a thought:
CSS: Flexbox, Grid, go home - then Bootstrap and Tailwind. Knowing how it connects makes it easier to program.
React: how can you build a React component and know what it does if you don't understand at least enough JS to get to the conversation about the DOM in the first place (which opens the shadow-dom and then introductory React conversation)?
It's important to do some of the work simultaneously if you want to build a good base, but you've got to have a rudimentary understanding first or it all looks foreign from jump... React tutorials today largely start with a JavaScript refresher.
A common trend tends to be developers listing Frameworks on their CV rather than core languages, however the more senior/experienced developers tend to go the opposite way - Frameworks while popular are ever changing in popularity and being able to work Framework agnostic i.e. have a really strong foundation in the base language and work around that will stand to you more in the long-term. That said depends on your job, if you're going for a React position always helps to mention your React experience!
Now I struggle to explain myself a bit, so just hear me out... Why not learn the fundamentals, while also trying to create your own version of a framework?
For example take JavaScript, I have learnt DOM manipulation and OOP, I would research a bit about React, see how it runs under the hood, and try to create my own version. It doesn't have to be anywhere near as good as React or with all the features. This way you learn by yourself how to best optimize your code, make important decisions about how it's designed, etc.
Do you have to create your version of a framework everytime? I'm not sure, it's up to you. But learning-wise this method has helped me tons!
I personally think you have to go with whatever direction better lets you understand the other direction.
Some people need to have that practical application, some people do better with fundamentals first. Take a main direction but don't neglect the other side.
This is a good point - a chicken-and-the-egg question.
However, I wonder how many people who think they need to start with something very practical are mistaken, and end up impairing their growth-rate and learning curve.
I have worked with people who skipped these steps, and while they're very good at getting things done, they often aren't done well, and end up very unmaintainable.
They usually also don't know what they don't know - and it becomes normal to go on not knowing that they're a bad programmer, not recognizing the mess they leave. I don't mean to sound harsh - I was this bad programmer at one point, but certain conditions led me to realize it. I looked around, and wasn't sure that the people around me had ever had this eureka moment.
It depends 100% on what your goals are.
Learning the fundamentals (what even are those? Vanilal JS? C? Assembly? CPU Architecture? Mining Copper?) will always give you a more solid foundation for a "smoother" learning experience later on.
Starting with the frameworks will get you from 0 to productive a whole lot quicker, meaning you invest less time to start seeing returns in the form of paid work.
I'd say in an ideal world, learning the fundamentals first is always favourable, but for many people that just doesn't fit neatly into their financial reality, so for those cases, there's nothing wrong with prioritising productivity first and catching up on the basics later on. Just don't forget on eventually catching up until it bites you in the butt that you skipped it, because on any career path that's actually going somewhere, this will happen at some point.
I don't think that you will go a long way before realising that you need the fundamentals, no matter which path you choose. Yes, you can focus on learning a specific framework, but there will come a time, sooner or later, when you will realise that you are missing some important concepts.
Just think about starting learning React. Yes, you will manage to make some cute web apps just following the tutorials... But when you will end up with some useEffect dependences that trigger one another, or state managing and entering the callback hell, that is the moment when you will want to step back and take another look at how things go under the hood.
Yes, there are lots of people that make apps just by following guidelines... But do you want to end up with just another Bootstrap/Wordpress app? (No hate towards Bootstrap or Wordpress)
I would go for something in between. Get some basic knowledge. There are plenty of resources out there. Go for freecodecamp, do the basic stuff... Learn some algorithmics basics... Iterating an array, backtrack a matrix to solve a tic tac toe game, do some basic api fetching using postman just to understand the way everything connects, learn to build a C project from scratch, get some hands in bash (just to list and iterate through some documents)... Maybe they will look boring at the beginning, but they will come a long way. In parallel, in order to get some visual feedback, yes, you can go through with a framework... But never, I repeat, NEVER, underestimate the power that low stuff gives you.
I I personally see code as language, so before reading poetry I need to understand the language and learn how to put words together. Learn JS , than TS and then specific framework as React. I'm currently learning dotnets EntityFramework, something I haven't really used professionally, but I have a good C# / OOP / dotnet base so makes the process much simpler 🙂
For me there's no point in looking at react if don't understand what "components.map(c => )" is actually doing.
HOWEVER this is my approach, do what feels right to you. There are people who learn by video, I learn by reading. Find your path 😉
For new coders, striking the right balance between mastering the fundamentals and staying updated with the latest frameworks can be a challenge. Here's some advice to help you navigate this dilemma:
Start with the fundamentals: Building a strong foundation in the fundamentals of programming is essential. Understand core concepts like variables, data types, control structures, and algorithms. Learn a programming language thoroughly, as it will provide you with the fundamental principles that apply across various languages and frameworks.
Emphasize problem-solving skills: Focus on developing problem-solving skills rather than just learning specific frameworks. Mastering the fundamentals will equip you with the ability to approach and solve problems effectively. Frameworks may change over time, but problem-solving skills are transferrable and essential in any coding scenario.
Gain hands-on experience: Put your knowledge into practice by working on small projects or coding exercises. Practical experience helps solidify your understanding of programming concepts and enhances your learning. Start with simple projects and gradually take on more complex ones as your skills grow.
Stay informed about industry trends: While mastering the fundamentals is crucial, it's also important to stay informed about industry trends and new frameworks. Keep an eye on emerging technologies and popular frameworks within your area of interest. Understand the purpose and use cases of different frameworks, but don't rush to learn them all at once. Instead, focus on learning frameworks that align with your career goals and complement your existing skills.
Follow a structured learning path: To strike a balance between fundamentals and frameworks, follow a structured learning path. Begin with fundamentals, progress to more advanced topics, and then start exploring frameworks. This approach ensures that you have a solid understanding of the underlying concepts before diving into specific frameworks.
Continuously learn and adapt: The tech industry evolves rapidly, and staying updated is essential. Dedicate time to learning new frameworks and technologies, but avoid getting overwhelmed by the constant influx of information. Choose one or two frameworks that are relevant to your goals and invest time in understanding them deeply. Maintain a curious and adaptable mindset, ready to embrace new technologies when they align with your career objectives.
Seek guidance and collaborate: Engage with experienced coders, mentors, or online communities to seek guidance and collaborate on projects. Learning from others' experiences can help you make informed decisions about which frameworks to explore and how to prioritize your learning journey.
Remember, while frameworks can enhance productivity and efficiency, they are built upon fundamental programming principles. By prioritizing the fundamentals and gradually incorporating frameworks into your skillset, you'll be better equipped to adapt to new technologies and make informed choices throughout your coding journey.
Thanks for your comprehensive clarification.