Learn your fundamentals, and never worry again.

New Tools Worry Me

When JavaScript's shiny tool of the day comes out, I sometimes overreact.

learn-or-lose-job-1

And after 15 minutes of my imagination running wild, the urge to explore it becomes unbearable.

Doesn't matter what tool, it's all the same story.

  • I must learn this technology!
  • I need every advantage in this competitive job market!
  • I have to stay relevant, right?!

i-must-learn-it

Well yes, but no.

My Seniors Never Worry

Sometimes I'll share this sentiment with senior developers in the office, and get a standard reaction from them.

another-tool-so-what-lol

After enough encounters like this, I began thinking...

Why the Difference?

Why do I anxiously pounce on today's top tool, seemingly doomed to repeat this forever...

maybe-i-can-learn-it-before-the-next-one

While my seniors calmly let the JavaScript storms pass, picking tools up as needed?

seniors-are-quick-learners

It's because they see common threads among these tools. To them, even after all these years, the landscape isn't so different.

Where do these common threads come from? The fundamentals.

It's All in the Fundamentals

The best developers I've met aren't phased by JavaScript's light-speed evolution. They aren't exhausted from JavaScript fatigue because they dropped out of that race.

cant-get-fatigued-if

Instead of learning frameworks to boost their careers, they focused on the fundamentals and skyrocketed their careers.

Your favorite framework can plummet one day, and you'll eventually have to pick up another one.

But the fundamentals are evergreen. They date back to computer science resources from decades ago. No matter the age, these principles still make up the foundation of computing.

This tweet I stumbled across sums it up perfectly.

We're all just building on the groundwork established a long, long time ago.

What Are the Fundamentals?

yoda-fundamentals

This isn't a comprehensive list, but whoever tackles it will become an amazing programmer. It'll keep you busy for years to come.

  • Learning multiple programming languages
  • Algorithms and data structures
  • Design patterns
  • Anti-patterns
  • Application architecture

Learning multiple programming languages

Languages solve problems in different ways. None of them are perfect, that's why we have so many.

If you're doing JavaScript, get uncomfortable by learning C#. If you really want to push yourself, try Haskell.

Compare the solutions each language offers. The more you tackle, the faster you'll learn new things because they all draw from each other.

Algorithms and data structures

lets-skip-algorithms

People love hating on this topic.

  • "When will I need this?"
  • "This is useless."
  • "CS degrees are a waste of money."

You may never need them, but that doesn't make learning algorithms and data structures a bad investment.

As an IT major, part of me wishes I could go back and take some CS courses, especially algorithms and data structures. The power I felt after learning them was amazing. It's like putting on glasses you never knew you had!

i-know-binary-trees

The biggest benefit, in my opinion, is improved problem-solving skills.

The ability to calm down, walk to a notebook/whiteboard, and work towards a solution is an asset that'll save you countless hours of frustrated hacking.

Before that I'd gallop into the editor like a classic coding cowboy, code myself into a corner, and then try to figure out a good solution.

Design patterns

From Addy Osmani's brilliant book- Learning JavaScript Design Patterns

A pattern is a reusable solution that can be applied to commonly occurring problems in software design...

These battle-tested solutions have stood the test of time. Learning them helps you write code that is more familiar and maintainable to other developers.

You may not have realized it, but modern JavaScript stacks leverage popular design patterns.

  • Bundlers like Webpack and Parcel let you use the Module pattern to separate JavaScript into organized files.
  • Libraries like RxJS and Redux use the Observer pattern to send and receive "notifications".
  • Libraries like React-Redux and Recompose let you enhance your components, otherwise known as the Decorator pattern.

Anti-patterns

If design patterns are so good that we should share them, anti-patterns are so bad that we should warn against them.

anti-vs-design-patterns

Pulling from Addy Osmani's book again, here are some common JavaScript anti-patterns.

  • Defining many global variables
  • Modifying the Object class prototype
  • Using document.write
  • Using inline JavaScript. For example...
<!-- Inline JavaScript anti-pattern -->
<a href="#" onclick="alert('Hi')">Click Me</a>

Application architecture

Here's where the acronyms go crazy

  • MVC (Model-View-Controller)
  • MVP (Model-View-Presenter)
  • MVVM (Model-View-ViewModel)
  • MVU (Model-View-Update)
  • MVI (Model-View-Intent)

Here's an example of MVC.

mvc-diagram

Their common core is separate your concerns. Most applications have a model (data) and view (UI), and it's important they not speak to each other. That's where the controller sits and it mediates their back and forth communication.

Summary - Tools Are Amazing ❤️

A true marvel of software engineering. Increase your productivity by learning and enjoying them!

But don't forget your fundamentals.

  • Learning multiple programming languages
  • Algorithms and data structures
  • Design patterns
  • Anti-patterns
  • Application architecture

I leave you with one last tweet.

Thanks for reading

For more content like this, check out https://yazeedb.com. And please let me know what else you'd like to see! My DMs are open on Twitter.

Until next time!