<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: André Blos Aliatti</title>
    <description>The latest articles on Forem by André Blos Aliatti (@andre_blos_aliatti).</description>
    <link>https://forem.com/andre_blos_aliatti</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3737459%2F4439b6c1-7272-4c8f-b6c6-fb8a5438c558.png</url>
      <title>Forem: André Blos Aliatti</title>
      <link>https://forem.com/andre_blos_aliatti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/andre_blos_aliatti"/>
    <language>en</language>
    <item>
      <title>Começar em programação do zero depois dos 40: roteiro realista de André Blos Aliatti</title>
      <dc:creator>André Blos Aliatti</dc:creator>
      <pubDate>Wed, 01 Apr 2026 01:30:11 +0000</pubDate>
      <link>https://forem.com/andre_blos_aliatti/comecar-em-programacao-do-zero-depois-dos-40-roteiro-realista-de-andre-blos-aliatti-4pal</link>
      <guid>https://forem.com/andre_blos_aliatti/comecar-em-programacao-do-zero-depois-dos-40-roteiro-realista-de-andre-blos-aliatti-4pal</guid>
      <description>&lt;p&gt;O problema não é a idade, é a expectativa&lt;/p&gt;

&lt;p&gt;Começar em programação depois dos 40 não é difícil do jeito que parece. Mas também não é simples do jeito que vendem. O problema não está na idade, está na forma como a entrada na área é apresentada. Existe uma narrativa muito forte de que basta escolher uma linguagem, fazer alguns cursos e, em poucos meses, tudo começa a acontecer. E quando isso não acontece — porque na maioria das vezes não acontece — a primeira coisa que vem não é clareza. É dúvida.&lt;/p&gt;

&lt;h2&gt;
  
  
  O início é confuso, não técnico
&lt;/h2&gt;

&lt;p&gt;Eu sou André Blos Aliatti, desenvolvedor backend em transição de carreira, e o início da minha jornada não foi técnico. Foi confuso. Eu comecei como muita gente começa: consumindo conteúdo, tentando entender qual área fazia mais sentido, pulando entre possibilidades que pareciam promissoras. Dados, Python, automação, inteligência artificial. Tudo parecia relevante. Nada parecia definitivo. E esse é um dos primeiros pontos que ninguém deixa claro: no começo, você não sabe se está perdido porque a área é complexa ou porque você está fazendo errado. E essa dúvida cansa mais do que a dificuldade técnica.&lt;/p&gt;

&lt;h2&gt;
  
  
  O começo não é empolgante
&lt;/h2&gt;

&lt;p&gt;O início da programação não é empolgante. Essa é outra parte que pouca gente fala. Você não começa construindo sistemas, não começa criando coisas impressionantes. Você começa tentando entender como um computador interpreta instruções simples. Variáveis, condições, repetição. Conceitos que parecem pequenos demais para quem já tem uma vida inteira de experiência em outras áreas. Existe até uma sensação incômoda de regressão, como se você estivesse voltando para um estágio muito básico. E é exatamente isso que está acontecendo. Só que esse básico não é opcional. Ele é estrutural.&lt;/p&gt;

&lt;h2&gt;
  
  
  A frustração vem da falta de sentido
&lt;/h2&gt;

&lt;p&gt;A frustração não vem de não entender. Ela vem de não enxergar sentido. Você estuda, faz exercícios, acompanha aulas, mas não consegue ligar aquilo com algo real. E, sem essa conexão, o aprendizado parece solto. Foi só quando eu comecei a entender que programação não é sobre linguagem, mas sobre construção de sistemas, que as coisas começaram a se reorganizar. Antes disso, era como aprender palavras soltas de um idioma sem nunca formar uma frase.&lt;/p&gt;

&lt;h2&gt;
  
  
  O erro silencioso: estudar sem direção
&lt;/h2&gt;

&lt;p&gt;Existe um erro silencioso que acontece nesse momento: estudar sem direção. Você aprende um pouco de cada coisa, acumula conhecimento fragmentado e passa a ter a impressão de que está evoluindo. Mas evolução de verdade só aparece quando existe continuidade. Quando você começa a aprofundar em um caminho específico. No meu caso, essa virada veio quando eu decidi parar de explorar tudo e comecei a focar em backend. Não porque era mais fácil, mas porque começou a fazer sentido estruturalmente. Principalmente quando entrei em orientação a objetos. Pela primeira vez, eu não estava só escrevendo código. Eu estava modelando algo que existia fora da tela.&lt;/p&gt;

&lt;h2&gt;
  
  
  A fase em que nada valida
&lt;/h2&gt;

&lt;p&gt;Mas até chegar nesse ponto, tem um trecho que é mais pesado do que parece. É o trecho em que nada valida o que você está fazendo. Você estuda, se dedica, envia currículo, tenta vagas, e não recebe resposta. Nenhuma. E aí começam as perguntas que não são técnicas. São pessoais. Será que é a idade? Será que eu estou atrasado? Será que isso realmente é pra mim? Essa fase não aparece nos vídeos, não aparece nos posts, não aparece nos relatos rápidos de sucesso. Mas ela existe. E ela pesa.&lt;/p&gt;

&lt;h2&gt;
  
  
  O ponto de virada: construir
&lt;/h2&gt;

&lt;p&gt;O que mudou para mim não foi encontrar o curso certo, nem a linguagem certa. Foi entender que aprendizado sem construção não sustenta. O momento em que você começa um projeto, mesmo sem saber direito o que está fazendo, muda completamente a dinâmica. Porque ali você para de consumir e começa a enfrentar problema. E problema obriga você a aprender de outro jeito. Não mais por curiosidade, mas por necessidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que eu faria diferente hoje
&lt;/h2&gt;

&lt;p&gt;Se eu tivesse que começar de novo hoje, não tentaria acelerar. Não tentaria escolher a stack perfeita. Eu começaria aceitando que o início é lento, que a base leva tempo e que a clareza não vem antes da prática. Vem durante. Começaria pequeno, construiria algo simples, erraria mais cedo e tentaria entender o porquê de cada erro. Porque no fim, o que faz diferença não é o quanto você estuda. É o quanto você consegue transformar estudo em construção.&lt;/p&gt;

&lt;h2&gt;
  
  
  A diferença de começar depois dos 40
&lt;/h2&gt;

&lt;p&gt;Começar depois dos 40 muda algumas coisas, sim. Você não tem o mesmo tempo disponível, não tem a mesma margem para testar caminhos aleatórios, não tem o mesmo espaço para errar sem consequência. Mas, ao mesmo tempo, você tem uma vantagem que pouca gente valoriza: você leva o processo a sério. Você não está ali por curiosidade. Está porque precisa funcionar. E isso muda a forma como você aprende.&lt;/p&gt;

&lt;h2&gt;
  
  
  O problema nunca foi a idade
&lt;/h2&gt;

&lt;p&gt;Hoje, olhando para trás, fica claro que o problema nunca foi começar mais tarde. Foi começar esperando um caminho mais linear do que ele realmente é. Programação não é uma linha reta. É um processo de construção que só faz sentido quando você atravessa as partes confusas, as partes lentas e as partes em que parece que nada está acontecendo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Se você está nesse ponto agora, não tenta simplificar demais. Mas também não complica. Fica no processo. Aprende o básico de verdade. Escolhe uma direção. E constrói alguma coisa, mesmo sem estar pronto. Porque é aí que tudo começa a se encaixar.&lt;/p&gt;

&lt;p&gt;Se quiser entender melhor minha trajetória, vale conhecer quem é André Blos Aliatti, acompanhar os projetos que venho desenvolvendo e ver como essa jornada está evoluindo na prática. Porque, no final, aprender programação não é sobre entender tudo rápido. É sobre continuar, mesmo quando ainda não faz sentido completo.&lt;/p&gt;

</description>
      <category>andreblosaliatti</category>
      <category>programming</category>
      <category>beginners</category>
      <category>java</category>
    </item>
    <item>
      <title>Object-Oriented Programming Is Not About Classes — It’s About Modeling Systems By André Blos Aliatti</title>
      <dc:creator>André Blos Aliatti</dc:creator>
      <pubDate>Mon, 16 Mar 2026 17:50:20 +0000</pubDate>
      <link>https://forem.com/andre_blos_aliatti/object-oriented-programming-is-not-about-classes-its-about-modeling-systems-by-andre-blos-4fli</link>
      <guid>https://forem.com/andre_blos_aliatti/object-oriented-programming-is-not-about-classes-its-about-modeling-systems-by-andre-blos-4fli</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;Many developers learn Object-Oriented Programming by focusing on syntax:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;class&lt;/li&gt;
&lt;li&gt;extends&lt;/li&gt;
&lt;li&gt;implements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But this approach completely misses the real purpose of OOP.&lt;/p&gt;

&lt;p&gt;Object-Oriented Programming exists to solve a fundamental software engineering problem:&lt;/p&gt;

&lt;p&gt;How do we organize complex systems so they remain understandable and maintainable as they grow?&lt;/p&gt;

&lt;p&gt;OOP is not about writing classes.&lt;br&gt;
It is about modeling real-world concepts and responsibilities in software.&lt;/p&gt;

&lt;p&gt;When developers skip this conceptual layer, systems quickly become hard to maintain, even if the code compiles and runs.&lt;/p&gt;

&lt;p&gt;The Real Goal of OOP: Modeling the Domain&lt;/p&gt;

&lt;p&gt;A software system represents a domain.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a medical clinic system&lt;/li&gt;
&lt;li&gt;an e-commerce platform&lt;/li&gt;
&lt;li&gt;a financial management tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each domain has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;entities&lt;/li&gt;
&lt;li&gt;behaviors&lt;/li&gt;
&lt;li&gt;rules&lt;/li&gt;
&lt;li&gt;constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OOP provides a way to represent those concepts and behaviors together.&lt;/p&gt;

&lt;p&gt;For example, a medical system might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patient&lt;/li&gt;
&lt;li&gt;Doctor&lt;/li&gt;
&lt;li&gt;Appointment&lt;/li&gt;
&lt;li&gt;Prescription
But these are not just data containers.
They represent objects with responsibilities and behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bad design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patient&lt;/li&gt;
&lt;li&gt;name&lt;/li&gt;
&lt;li&gt;age&lt;/li&gt;
&lt;li&gt;cpf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good design:&lt;/p&gt;

&lt;p&gt;Patient&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;registerAppointment()&lt;/li&gt;
&lt;li&gt;updateAddress()&lt;/li&gt;
&lt;li&gt;addMedicalRecord()&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference is subtle but critical:&lt;/p&gt;

&lt;p&gt;Objects should own behavior, not just store data.&lt;/p&gt;

&lt;p&gt;Encapsulation Protects System Integrity&lt;/p&gt;

&lt;p&gt;Encapsulation is often explained as “making fields private”.&lt;/p&gt;

&lt;p&gt;That explanation is incomplete.&lt;/p&gt;

&lt;p&gt;The real purpose of encapsulation is to protect invariants.&lt;/p&gt;

&lt;p&gt;An invariant is a rule that must always remain true.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an appointment cannot exist without a patient&lt;/li&gt;
&lt;li&gt;a payment cannot be negative&lt;/li&gt;
&lt;li&gt;a prescription must belong to a consultation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without encapsulation, any part of the system can break those rules.&lt;/p&gt;

&lt;p&gt;Example of fragile design:&lt;/p&gt;

&lt;p&gt;appointment.date = null&lt;br&gt;
appointment.patient = null&lt;/p&gt;

&lt;p&gt;When invariants are protected through methods, the system becomes safer:&lt;/p&gt;

&lt;p&gt;appointment.schedule(patient, date)&lt;/p&gt;

&lt;p&gt;Now the object guarantees its own consistency.&lt;/p&gt;

&lt;p&gt;Encapsulation forces developers to respect the model.&lt;/p&gt;

&lt;p&gt;Responsibility Defines Good Design&lt;/p&gt;

&lt;p&gt;One of the most important design questions in OOP is:&lt;/p&gt;

&lt;p&gt;Who is responsible for this behavior?&lt;/p&gt;

&lt;p&gt;When responsibility is unclear, developers tend to place logic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in controllers&lt;/li&gt;
&lt;li&gt;in utility classes&lt;/li&gt;
&lt;li&gt;in services with hundreds of lines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This leads to a well-known problem:&lt;/p&gt;

&lt;p&gt;anemic domain models&lt;/p&gt;

&lt;p&gt;Example of poor design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UserService&lt;/li&gt;
&lt;li&gt;UserValidator&lt;/li&gt;
&lt;li&gt;UserManager&lt;/li&gt;
&lt;li&gt;UserUtils&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While the actual User object contains nothing but fields.&lt;/p&gt;

&lt;p&gt;In well-designed OOP systems, objects own their logic.&lt;/p&gt;

&lt;p&gt;Cohesion and Coupling&lt;/p&gt;

&lt;p&gt;Two fundamental concepts define how maintainable a system will be.&lt;/p&gt;

&lt;p&gt;Cohesion&lt;/p&gt;

&lt;p&gt;Cohesion measures how related the responsibilities of a class are.&lt;/p&gt;

&lt;p&gt;High cohesion means:&lt;/p&gt;

&lt;p&gt;A class does one thing and does it well.&lt;/p&gt;

&lt;p&gt;Low cohesion results in “god classes”.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;UserService&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;registerUser&lt;/li&gt;
&lt;li&gt;generateInvoice&lt;/li&gt;
&lt;li&gt;sendEmail&lt;/li&gt;
&lt;li&gt;calculateTaxes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These responsibilities clearly belong to different parts of the system.&lt;/p&gt;

&lt;p&gt;Coupling&lt;/p&gt;

&lt;p&gt;Coupling measures how dependent components are on each other.&lt;/p&gt;

&lt;p&gt;High coupling means:&lt;/p&gt;

&lt;p&gt;small changes ripple across the system&lt;/p&gt;

&lt;p&gt;refactoring becomes dangerous&lt;/p&gt;

&lt;p&gt;testing becomes difficult&lt;/p&gt;

&lt;p&gt;Good OOP design aims for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;high cohesion&lt;/li&gt;
&lt;li&gt;low coupling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Behavior Is More Important Than Data&lt;/p&gt;

&lt;p&gt;One of the biggest misconceptions in OOP is treating objects as data structures.&lt;/p&gt;

&lt;p&gt;This happens frequently in modern frameworks where objects are used as DTOs.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;class Order {&lt;br&gt;
  public int quantity;&lt;br&gt;
  public double price;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Then logic is implemented elsewhere:&lt;/p&gt;

&lt;p&gt;OrderService.calculateTotal(order)&lt;/p&gt;

&lt;p&gt;But the behavior clearly belongs to the object itself.&lt;/p&gt;

&lt;p&gt;Better design:&lt;/p&gt;

&lt;p&gt;order.calculateTotal()&lt;/p&gt;

&lt;p&gt;The object becomes responsible for its own behavior.&lt;/p&gt;

&lt;p&gt;OOP Is the Foundation of Modern Architecture&lt;/p&gt;

&lt;p&gt;Many modern architectures rely on solid OOP concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Domain-Driven Design (DDD)&lt;/li&gt;
&lt;li&gt;Clean Architecture&lt;/li&gt;
&lt;li&gt;Hexagonal Architecture&lt;/li&gt;
&lt;li&gt;Layered Architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of them assume developers understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;responsibility&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;abstraction&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;separation of concerns&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;domain modeling&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without this foundation, architectural patterns become ceremony rather than design.&lt;/p&gt;

&lt;p&gt;The Cost of Skipping OOP Fundamentals&lt;/p&gt;

&lt;p&gt;Developers who rush through OOP often create systems that show the same symptoms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bloated service classes&lt;/li&gt;
&lt;li&gt;business rules scattered across layers&lt;/li&gt;
&lt;li&gt;fragile refactoring&lt;/li&gt;
&lt;li&gt;duplicated logic&lt;/li&gt;
&lt;li&gt;growing technical debt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system works — until it grows.&lt;/p&gt;

&lt;p&gt;Then every change becomes expensive.&lt;/p&gt;

&lt;p&gt;How to Actually Learn OOP&lt;/p&gt;

&lt;p&gt;Instead of memorizing syntax, focus on:&lt;/p&gt;

&lt;p&gt;1️⃣ Modeling real domains&lt;br&gt;
2️⃣ Defining clear responsibilities&lt;br&gt;
3️⃣ Protecting invariants&lt;br&gt;
4️⃣ Reducing coupling&lt;br&gt;
5️⃣ Writing objects with behavior&lt;/p&gt;

&lt;p&gt;Small projects are the best way to practice this.&lt;/p&gt;

&lt;p&gt;Build systems where objects represent real concepts.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Object-Oriented Programming is not a language feature.&lt;/p&gt;

&lt;p&gt;It is a way of thinking about software.&lt;/p&gt;

&lt;p&gt;When properly understood, it allows developers to build systems that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remain understandable&lt;/li&gt;
&lt;li&gt;evolve safely&lt;/li&gt;
&lt;li&gt;scale in complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skipping these fundamentals might feel faster in the short term.&lt;/p&gt;

&lt;p&gt;But in software engineering, structure always wins over speed.&lt;/p&gt;

&lt;p&gt;André Blos Aliatti&lt;/p&gt;

&lt;p&gt;Developer documenting the process of learning software engineering fundamentals and building real systems.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>design</category>
      <category>programming</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Relearning Tech After 40: Why Strong Fundamentals Matter More Than Speed</title>
      <dc:creator>André Blos Aliatti</dc:creator>
      <pubDate>Sun, 08 Feb 2026 00:36:38 +0000</pubDate>
      <link>https://forem.com/andre_blos_aliatti/relearning-tech-after-40-why-strong-fundamentals-matter-more-than-speed-30jn</link>
      <guid>https://forem.com/andre_blos_aliatti/relearning-tech-after-40-why-strong-fundamentals-matter-more-than-speed-30jn</guid>
      <description>&lt;p&gt;by André Blos Aliatti&lt;/p&gt;

&lt;p&gt;This article is part of a series about restarting in tech after 40, with a focus on fundamentals, clarity and real-world learning.&lt;/p&gt;

&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;My name is André Blos Aliatti and when I restarted my path into software development after 40, one technical mistake became very clear early on:&lt;/p&gt;

&lt;p&gt;Skipping fundamentals causes more problems than choosing the “wrong” stack.&lt;/p&gt;

&lt;p&gt;There is constant pressure to move fast: frameworks, tools, jobs, specializations.&lt;br&gt;
But software is not built on tools — it’s built on concepts.&lt;/p&gt;

&lt;p&gt;This article is not about career advice.&lt;br&gt;
It’s about why technical foundations matter and how rushing through them creates real problems in code.&lt;/p&gt;

&lt;p&gt;Software is structure before technology&lt;/p&gt;

&lt;p&gt;No matter the language or framework, most systems deal with the same core problems:&lt;/p&gt;

&lt;p&gt;data input and validation&lt;/p&gt;

&lt;p&gt;business rules&lt;/p&gt;

&lt;p&gt;persistence&lt;/p&gt;

&lt;p&gt;communication between components&lt;/p&gt;

&lt;p&gt;long-term maintenance&lt;/p&gt;

&lt;p&gt;These problems do not change when you switch from Java to JavaScript or from one framework to another.&lt;/p&gt;

&lt;p&gt;What changes is how the solution is expressed.&lt;/p&gt;

&lt;p&gt;Learning how to use a framework without understanding what it abstracts creates dependency on tools instead of reasoning.&lt;/p&gt;

&lt;p&gt;Logic and algorithms are not “beginner topics”&lt;/p&gt;

&lt;p&gt;Logic is often treated as something you “get over with” quickly.&lt;/p&gt;

&lt;p&gt;In practice, it never goes away.&lt;/p&gt;

&lt;p&gt;It shows up when:&lt;/p&gt;

&lt;p&gt;conditional logic becomes complex&lt;/p&gt;

&lt;p&gt;loops affect performance&lt;/p&gt;

&lt;p&gt;data structures don’t match the problem&lt;/p&gt;

&lt;p&gt;Concepts like:&lt;/p&gt;

&lt;p&gt;control flow&lt;/p&gt;

&lt;p&gt;state&lt;/p&gt;

&lt;p&gt;data dependency&lt;/p&gt;

&lt;p&gt;are present in every real system.&lt;/p&gt;

&lt;p&gt;Ignoring them leads to trial-and-error coding, which doesn’t scale.&lt;/p&gt;

&lt;p&gt;Object-Oriented Programming is modeling, not syntax&lt;/p&gt;

&lt;p&gt;OOP is not about keywords like class or extends.&lt;/p&gt;

&lt;p&gt;It’s about modeling the domain.&lt;/p&gt;

&lt;p&gt;Concepts such as:&lt;/p&gt;

&lt;p&gt;single responsibility&lt;/p&gt;

&lt;p&gt;encapsulation&lt;/p&gt;

&lt;p&gt;cohesion&lt;/p&gt;

&lt;p&gt;coupling&lt;/p&gt;

&lt;p&gt;define whether a system is understandable and evolvable or fragile and hard to maintain.&lt;/p&gt;

&lt;p&gt;Modern frameworks assume you already understand this.&lt;br&gt;
If you don’t, they just delay the problem.&lt;/p&gt;

&lt;p&gt;APIs are contracts, not endpoints&lt;/p&gt;

&lt;p&gt;Creating an API is not just exposing routes.&lt;/p&gt;

&lt;p&gt;Without a solid understanding of:&lt;/p&gt;

&lt;p&gt;HTTP verbs&lt;/p&gt;

&lt;p&gt;status codes&lt;/p&gt;

&lt;p&gt;request/response semantics&lt;/p&gt;

&lt;p&gt;idempotency&lt;/p&gt;

&lt;p&gt;error handling&lt;/p&gt;

&lt;p&gt;APIs become hard to consume and fragile.&lt;/p&gt;

&lt;p&gt;REST is not about memorizing patterns — it’s about system communication, independent of language or framework.&lt;/p&gt;

&lt;p&gt;Databases are not implementation details&lt;/p&gt;

&lt;p&gt;Databases are often treated as secondary concerns.&lt;/p&gt;

&lt;p&gt;Bad decisions here accumulate technical debt fast.&lt;/p&gt;

&lt;p&gt;Understanding:&lt;/p&gt;

&lt;p&gt;relational modeling&lt;/p&gt;

&lt;p&gt;primary and foreign keys&lt;/p&gt;

&lt;p&gt;normalization&lt;/p&gt;

&lt;p&gt;indexes&lt;/p&gt;

&lt;p&gt;transactions&lt;/p&gt;

&lt;p&gt;directly impacts performance and reliability.&lt;/p&gt;

&lt;p&gt;ORMs help, but they don’t replace SQL knowledge.&lt;br&gt;
Many “tool problems” are actually modeling problems.&lt;/p&gt;

&lt;p&gt;Rushing creates silent technical debt&lt;/p&gt;

&lt;p&gt;Rushing rarely breaks things immediately.&lt;/p&gt;

&lt;p&gt;It shows up later as:&lt;/p&gt;

&lt;p&gt;code that’s hard to change&lt;/p&gt;

&lt;p&gt;fear of refactoring&lt;/p&gt;

&lt;p&gt;scattered business logic&lt;/p&gt;

&lt;p&gt;lack of tests&lt;/p&gt;

&lt;p&gt;In most cases, it’s not incompetence — it’s skipped fundamentals.&lt;/p&gt;

&lt;p&gt;Studying the base feels slow, but it saves time long-term.&lt;/p&gt;

&lt;p&gt;What to prioritize when starting (or restarting)&lt;/p&gt;

&lt;p&gt;Regardless of age or stack:&lt;/p&gt;

&lt;p&gt;logic and control structures&lt;/p&gt;

&lt;p&gt;solid OOP concepts&lt;/p&gt;

&lt;p&gt;HTTP and APIs&lt;/p&gt;

&lt;p&gt;SQL and data modeling&lt;/p&gt;

&lt;p&gt;reading existing code&lt;/p&gt;

&lt;p&gt;small but well-structured projects&lt;/p&gt;

&lt;p&gt;Frameworks come later.&lt;br&gt;
Specialization comes later.&lt;/p&gt;

&lt;p&gt;Foundations are not a phase.&lt;br&gt;
They are ongoing support.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Technologies change fast.&lt;br&gt;
Concepts don’t.&lt;/p&gt;

&lt;p&gt;Developers who build on solid foundations can:&lt;/p&gt;

&lt;p&gt;learn new stacks faster&lt;/p&gt;

&lt;p&gt;understand abstractions more easily&lt;/p&gt;

&lt;p&gt;solve problems outside the “happy path”&lt;/p&gt;

&lt;p&gt;grow consistently&lt;/p&gt;

&lt;p&gt;Not rushing doesn’t mean moving slowly.&lt;br&gt;
It means moving in the right direction.&lt;/p&gt;

&lt;p&gt;André Blos Aliatti&lt;br&gt;
Developer in progress, sharing a real journey in software development with a focus on fundamentals, backend, frontend and practical projects.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>computerscience</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
