If you’ve checked Twitter lately, it’s hard to not have a stance on whether or not developers should be learning frameworks first or language fundamentals first (Twitter thread here) if you are a developer. With that said, and considering I’ve spent a lot of time learning fundamentals myself, I’d like to offer my opinion on the topic.
TL;DR: it doesn’t really matter but your life will be easier with the basic fundamentals. However, there’s a lot more to this that can’t be summed up in a single paragraph. So, I’d like to offer my opinion of the topic as a current Computer Science student so that I can decide for myself which is better and how I should learn in the future.
How I Learned (not how everyone else should learn)
Fundamentals are key, right?
In short: only partially. I learned a lot about the fundamentals but I didn’t do much with them. Sure, I made a few console programs and I made programs that I thought were cool as a beginner but beyond sitting on my own computer, occasionally opening them up in free time, they didn’t serve much of a purpose other than to show that I’ve learned the fundamentals. Otherwise, they collected dust. I suppose that almost every beginner’s programs do the same even if they choose to learn frameworks first but when we start building programs, we have to understand what they do and if we encounter an issue, and we will, then how do we approach solving it? You have to know the fundamentals. Fundamentals are key and allow us to build better apps. It allows us to debug easier and have an actual understanding of our application or web page.
I could take this a step further and say that I may be able to use a front-end framework without knowing all of the fundamentals. I could use a library like jQuery or Zepto without needing to know basic DOM interaction (although using them will expose you to the basics). Maybe I could use React and a UI library without knowing much about HTML (not that there’s much to know). I could learn to use Bootstrap framework for styling instead of learning CSS first. We could possibly build better and more useful apps by just learning the basics as we go. The problem with this is when we encounter a problem in code. This is when it pays to knows the basics first because you can more easily find the problem.
While it pays to know the fundamentals, sometimes the fundamentals and certain frameworks go hand-in-hand to make something useful and sometimes a language itself is pointless without certain frameworks.
Everything is a Framework
My point is that we abstract away from the fundamentals and to build anything useful: there’s a framework needed. We don’t use assembly or binary. We don’t build all of the code that we need. We use higher-level languages and code built by others to build something useful. When learning the basics, it’s impossible not to use a framework because some of these lower-level frameworks, as I call them, are often closely related to the basics. We all build off of each other’s work.
Time is Our Most Valuable Asset
The most important takeaway from this topic is that our time is limited and we need to learn what we need to know as fast as we can so that we can make something useful. The question is: how do we get there? Of course, we’ll all take our own different path but I think that the correct choice is to choose balance. It is important to know the fundamentals. I don’t think anyone is arguing against them but learning how to use a library by itself is confusing when you need to do anything more than the basics and there are not many programmers who are paid to make programs that say “hello world” in a console window or a basic HTML page. In order to do anything with a framework, we need to know the basics and sometimes convoluting the basics of a language with a framework make understanding what you’re coding much more difficult and take even more time, especially when debugging.
The problem is that I may not be understanding what’s going on when I use these frameworks. Often times, I don’t need to know. However, I need to know some of these fundamentals first so that I can learn and use these frameworks faster and debug potential problems related to me not knowing the basics.
I think it’s important to have a strong foundation to build on top of but you can also learn a framework first and come across the fundamentals along the way and become an excellent developer that way. However, if you want to learn to develop software as fast as you can without wasting time then the very basic fundamentals should be learned first without frameworks. After the basics, learning frameworks becomes easier because you can relate concepts back to the basics. Using a framework, we don’t have to understand everything that’s going on (that’s sort of the point) but we need to understand it on some level and with the fundamentals, that will be easier.
I’m only a CS student offering another limited opinion but if you’re building a house on rocky foundation, that house won’t be there long but with a strong foundation it can stand for many, many years.