Teach the present first, history later

#teaching #learning

Written by Anders Marzi Tornblad

Published on dev.to

Programming languages, frameworks and best practices evolve over time. New features are added, new versions are released, and what we thought were the "right way" of doing things in the past, is considered obsolete and even harmful today.

The approach to teaching technical subjects is an important factor in preparing students for real-world application of their skills. One disturbing trend that I see, particularly when browsing through LinkedIn in the era of ChatGPT, is that programming tutors and grinding tech content creators often teach features in the order of their historical development, rather than their current state. While understanding the historical evolution of technology is important, this approach might not be the most effective in equipping learners with the skills they need today.

The issue with historical-first

Consider JavaScript, a language that has undergone significant evolution over the years. Traditional teaching methods often introduce concepts like var for variable declaration before let and const, concatenation using the + plus sign for building strings before template literals, and function-based constructors before class definitions. This historical sequencing can be seen in other languages like Java and C# as well.

There are mainly two problems with this:

  1. Relevance and efficiency: Students first learn outdated or less efficient methods, only to later relearn the modern practices that are more relevant in today's tech landscape. This not only confuses learners but also makes the learning process less efficient.
  2. Perception of modern features: Newer features are often viewed as more difficult, and are considered mere "add-ons" or "syntactic sugar", undervaluing their importance in contemporary programming practices.

Teaching the present

  1. Immediate relevance: Teaching the current state of technology first ensures that learners are immediately equipped with the most relevant and efficient tools and practices. This approach aligns better with industry standards and prepares students for real-world scenarios more effectively.
  2. Building a strong foundation: By starting with the latest features and best practices, students build a strong, up-to-date foundation, making it easier for them to adapt to future advancements.
  3. Simplifying learning: Modern features in programming languages are often designed to make life easier for developers, and software more robust. For instance, JavaScript's let and const provide a clearer scope management than var, and template literals offer a more intuitive and efficient way of handling strings. Teaching these features first can make learning more accessible and enjoyable.

Integrating historical context

While the focus should be on current technologies, historical context is still valuable:

  1. Appreciating evolution: Understanding the history of technology helps in appreciating its evolution and the reasons behind certain changes and improvements.
  2. Dealing with legacy systems: In many industries, older technologies are still in use. A historical perspective equips students with the knowledge to work on or transition from these legacy systems.
  3. Curriculum structure: Introducing the history of technology as an extra curriculum or a supplementary module can provide depth without compromising the immediacy of current knowledge.

Updating teaching practices

For educators, staying updated with the latest developments in technology is imperative. Continuous professional development and adapting teaching materials to reflect the current state of technology are key.

  1. Professional development: Educators should engage in ongoing learning to stay up-to-date with new developments.
  2. Curriculum overhaul: Academic institutions should regularly review and update their curricula to ensure that they're teaching the most relevant and current technologies.
  3. Industry collaboration: Collaboration with industry professionals can help in aligning academic teachings with real-world requirements.

Computer engineering studies

I my experience, the academic realm of computer engineering studies, is where this problem is the most clear. The most common teaching method often starts with foundational elements like transistors and logic gates, then progresses through machine code, assembly, lower-level languages like C, C++, before finally approaching modern languages like Java and Python. While academically rigorous, this bottom-up approach may inadvertently hinder learning, particularly for those aspiring to a career in software development. Such a method can be intimidating for beginners, potentially scaring away some students due to its complexity and distance from practical, real-world applications.

To foster more engagement and accessibility, there's a need to reevaluate this approach. Introducing students first to more contemporary and widely-used programming languages, followed by a gradual exploration of underlying principles, could strike a better balance between foundational understanding and practical skills, making the field more approachable and less daunting for newcomers.


Education should prioritize the present state of knowledge while treating its history as a valuable context. By focusing on what's most relevant and efficient today, we prepare learners not just to understand technology, but to excel in using it. As educators and institutions, it’s our responsibility to ensure that our teaching methodologies evolve alongside the technologies we teach.