Pensamento Computacional com IA — aula do módulo Lógica, Sintaxe e Raciocínio com IA, na trilha Fundamentos de Desenvolvimento IA-First da formação Dev…
Leitura de aproximadamente 3 minutos.
Módulo: Lógica, Sintaxe e Raciocínio com IA · Curso: Fundamentos de Desenvolvimento IA-First · Formação: Dev IA-First — Do Zero ao Deploy Seguro
Na era do desenvolvimento assistido por inteligência artificial (IA-First), a habilidade fundamental do engenheiro de software mudou: o gargalo não é mais a digitação de sintaxe ou a memorização de APIs, mas a clareza da decomposição do problema e a capacidade de validar a lógica gerada.
Um modelo de linguagem opera em cima do contexto que recebe. Se o desenvolvedor não consegue decompor o problema em etapas atômicas, o modelo gerará soluções vagas, com código redundante ou alucinações de lógica.
+---------------------------------------------------------------+
| PENSAMENTO COMPUTACIONAL + IA |
+---------------------------------------------------------------+
| 1. Decomposição | Dividir o problema em subproblemas atômicos|
| 2. Padrões | Identificar estruturas conhecidas (ex: CRUD) |
| 3. Abstração | Isolar o que é regra de negócio da infra |
| 4. Algoritmos | Definir a sequência determinística exata |
+---------------------------------------------------------------+
1. Decomposição: Reduzir uma funcionalidade macro (ex: "Processar checkout de e-commerce") em funções com responsabilidade única (validar_carrinho, calcular_frete, aplicar_desconto, emitir_cobranca). 2. Reconhecimento de Padrões: Orientar o LLM a aplicar padrões consagrados (Strategy, Factory, Pipeline, State Pattern) em vez de deixar o modelo inventar soluções ad-hoc. 3. Abstração: Filtrar ruídos desnecessários. O modelo deve receber apenas os contratos e tipos essenciais para implementar a lógica. 4. Algoritmos: Escrever pseudo-códigos e especificações claras de entrada, transformação e saída.
Vamos desenhar uma função que avalia se uma transação financeira é suspeita de fraude com base em histórico e limites.
// Contrato de entrada e saída fortemente tipado
export interface Transaction {
id: string;
userId: string;
amountInCents: number;
timestamp: Date;
ipAddress: string;
}
export interface UserRiskProfile {
dailyLimitInCents: number;
blockedIps: string[];
totalSpentTodayInCents: number;
}
export type FraudDecision =
| { status: 'APPROVED'; reason: 'OK' }
| { status: 'REJECTED'; reason: 'LIMIT_EXCEEDED' | 'BLOCKED_IP' | 'INVALID_AMOUNT' };
/**
* Avalia se uma transação deve ser aprovada ou rejeitada.
* Função pura: sem efeitos colaterais, determinística e fácil de testar.
*/
export function evaluateTransactionRisk(
tx: Transaction,
profile: UserRiskProfile
): FraudDecision {
// Regra 1: Valor deve ser positivo
if (tx.amountInCents <= 0) {
return { status: 'REJECTED', reason: 'INVALID_AMOUNT' };
}
// Regra 2: IP do requisitante não pode estar bloqueado
if (profile.blockedIps.includes(tx.ipAddress)) {
return { status: 'REJECTED', reason: 'BLOCKED_IP' };
}
// Regra 3: Limite diário acumulado não pode ser ultrapassado
const projectedTotal = profile.totalSpentTodayInCents + tx.amountInCents;
if (projectedTotal > profile.dailyLimitInCents) {
return { status: 'REJECTED', reason: 'LIMIT_EXCEEDED' };
}
return { status: 'APPROVED', reason: 'OK' };
}
Ao solicitar que uma IA crie ou refatore um algoritmo:
1. Defina Invariantes Primeiro: Especifique o que NUNCA pode acontecer (ex: saldo negativo, mutação de estado de entrada). 2. Forneça Casos de Borda: Peça que o LLM liste os edge cases (valores nulos, números negativos, timestamps no futuro) antes de escrever a implementação. 3. Solicite a Solução em Camadas: