Executando verificação de segurança...
4

A Lógica na Programação e Por Que Devemos Dominá-la

Sabemos que, em qualquer área, a base é fundamental para consolidar nosso conhecimento, e na programação não é diferente. Entender a lógica na programação é um passo essencial para se tornar um bom programador; é "a chave que vira" e possibilita o domínio de qualquer ferramenta ou linguagem.

Muitos subestimam a importância da lógica e partem diretamente para o aprendizado de uma linguagem. Com esforço, acabam aprendendo a sintaxe e as funcionalidades dessa linguagem, mas enfrentam grandes dificuldades ao tentar migrar para outra. Frustrados, podem pensar que o problema está na nova linguagem, julgando-a "difícil demais".

Essa dificuldade, porém, geralmente surge porque não compreenderam a lógica por trás dos blocos de código e veem apenas a estrutura superficial, como um loop em Python, por exemplo. Agora, imagine programar em Haskell, onde não há loops da forma tradicional. Como você implementaria algo semelhante sem entender a lógica que fundamenta o funcionamento de um loop? A resposta está na lógica, que é a verdadeira base da programação.

Por isso, antes de se perder em sintaxes e frameworks, invista em compreender a lógica. Afinal, linguagens mudam, mas a lógica é atemporal e será sempre a sua maior aliada na programação.

Carregando publicação patrocinada...
4

Está correto. Mas tem um ponto que todo mundo cai na armadilha. Inclusive pessoas que estudam o assunto dizem que é muito difícil aprender duas coisas ao mesmo tempo (não é o mesmo que aprender várias coisas em momentos e situações diferentes). Ou você aprende a programar, ou aprende a linguagem. Se você não for um privilegiado no aprendizado, fará uma das duas mal, ou ambas. Esse é um dos motivos pelos quais as pessoas não conseguem se tornar boas programadoras. Um outro motivo será mencionado abaixo, indiretamente.

Gostei de ver a expressão "a lógica na programação".

Lógica de programação não existe. Esse é um dos termos inventados no Brasil (já vi indianos usando também), extremamente disseminado. Quando afirmo isso, 99% das pessoas me acham maluco, até porque hoje em dia, para quase todo mundo, o que vale é a primeira informação superficial que aparece para elas, e não o aprofundamento. Por exemplo, poucos tentam verificar se eu realmente sou maluco antes de me classificarem assim.

E também acontece muito, com todos nós, em maior ou menor grau — incluindo eu, que tento cada vez mais estar entre os que erram menos —, aprender algo de forma equivocada, seja por fontes que não deveriam errar, seja por fontes ruins. Esse erro é treinado, fixado e, mesmo quando se aprende o certo, pode ser difícil de abandonar.

O que mais gostaria de mudar no mundo, e sei que só conseguirei ajudar "meia dúzia" de pessoas, é incentivar as pessoas a questionarem tudo o que aparece para elas. De forma saudável, sem exageros ou paranoia, mas refletindo e entendendo o que está diante delas, em vez de apenas consumirem. Isso é especialmente importante entre programadores, embora menos do que entre cientistas (hoje em dia, até estes não questionam tanto quanto deveriam — estou generalizando, claro).

Existe lógica e existe programação. O que as pessoas chamam de "lógica de programação" é, na verdade, algoritmo, ou algo próximo disso. Elas fazem isso porque vários livros usam o termo, até na capa, mas não explicam o que significa. Quando explicam, acabam dando a definição de algoritmo ou até mesmo de programação.

Já pedi várias vezes — e peço de novo: que alguém me apresente uma definição única e consistente para "lógica de programação". Adoraria não ter mais que escrever esses textos e reconhecer que o conceito existe. O método científico é assim. Fui taxativo no início, mas admito que posso estar errado. Pena que, até agora, ninguém conseguiu demonstrar isso para mim.

Algumas pessoas acham que algoritmos são fórmulas prontas. Existem alguns prontos, mas a maioria é criada por quem está resolvendo o problema. O mesmo acontece com design patterns: as pessoas entendem algo diferente do que eles realmente são.

Lógica é muito importante para a programação, mas não é ensinado diretamente nas escolas (e, quando é, costuma ser mal ensinado no dia a dia). Para dominá-la, é necessário entender os fundamentos da matemática — e não decorar fórmulas complexas, mas sim dominar o "arroz com feijão" muito bem.

O que se deve aprender são os mecanismos básicos existentes em qualquer linguagem de programação, sejam elas sofisticadas como Haskell e C++, ou mais simples, como PHP e Lua. Isso inclui até Portugol, fluxogramas, Excel (sim, todas são linguagens de programação) ou a construção de algoritmos em bom português. Poderia incluir até mesmo Brainfuck, mas não "foda sua cabeça" com isso, a menos que seja por curiosidade rápida.

Os mecanismos básicos incluem:

  • Armazenamento e recuperação de dados em algum tipo de memória.
  • Manipulação de estados (dados) de formas matemáticas, começando pela aritmética, passando por relações e operações lógicas específicas.
  • Controle de fluxo de execução, que vai da execução linear simples até desvios condicionais ou incondicionais.

Depois, há mecanismos um pouco mais sofisticados derivados desses fundamentos. Ah, você sabe que o computador só entende 0 e 1, certo? Mas sabia que ele só faz três operações: adição, multiplicação e inversão? E nem é do jeito que você pensa, mas de forma muito mais simples. Todo o resto é derivado disso. (Tecnicamente, ainda há bufferização, mas isso não entra em algoritmos.)

Após entender os mecanismos básicos, é necessário aprender como combiná-los para atingir objetivos específicos, geralmente envolvendo entrada, manipulação e saída de dados. O controle de execução é o aspecto mais novo para quem nunca programou. Muitas vezes, quando se fala em "lógica de programação", refere-se quase exclusivamente a isso. O restante pode ou não ser "lógica", mas, em geral, já foi aprendido de alguma forma na escola.

Aprender a fazer isso é difícil, e, se for feito de forma errada, o erro será perpetuado. É necessário enxergar padrões e manipular o problema para torná-lo mais adequado à escrita de algoritmos.

Não sei se a dificuldade de migrar para outra linguagem é tão relevante. É verdade que existe, mas muitas pessoas já têm dificuldades na linguagem que usam, apenas estão mais acostumadas. Há quem aprenda 10 linguagens (casos raros, claro) e ainda não saiba programar, embora consigam produzir software tecnicamente funcional.

Um exemplo comum: vejo muitas pessoas usando reduce() achando que estão "abafando", justamente por não entenderem programação. Quem entende, também usa, mas só quando é vantajoso, e não porque alguém mostrou ou disse para usar (provavelmente sem saber o que estava fazendo). Isso perpetua o aprendizado errado, e o ciclo não tem fim. Muitas atrocidades são feitas com reduce(), ou mesmo com lambda e closure.

Da mesma forma, criticam o goto e endeusam exceções. Sim, estou falando de pessoas experientes que estudaram "lógica de programação", como diziam nossos pais ou avós, "que nem o nariz deles", só isso não basta, achar que aprendeu só faz seu https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect ser maior.

S2


Farei algo que muitos pedem: ajudar as pessoas a aprenderem a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria). (Links aqui; também disponível no perfil).

2

Incrível como escrevi algo, que esclarece uma visão, de acordo com o que conheço na ponta do iceberg e você veio me abrindo os olhos pra algo bem mais profundo! Não tenho o que discordar de sequer uma vírgula do que escreveu. A troca de ideias é exatamente o que torna a jornada na programação tão rica.

Acredite ou não, suas palavras me trouxeram motivação a querer explorar mais profundamente o tema que abordei (e outros também), a querer buscar entender melhor o que ainda não conheço. Obrigado por compartilhar sua visão e enriquecer minha perspectiva!

4

Eu tenho uma visão bem particular, e gosto de conversar com as pessoas sobre isso. Abordo melhor minha visão aqui.

Tem uma palestra interessante no Youtube que defende que lógica de programação não existe. Mesmo discordando do ponto geral e achar que há utilidade prática em dizer que há uma lógica de programação, é interessante notar que de fato, não há uma definição formal do termo. Se quisermos defini-la como tal, devemos resolver certos tópicos: o que seria lógica de programação? No que ela se diferencia da lógica matemática, lógica aristotélica e outras lógicas formais? Frequentemente se diz que a lógica de programação é independente de linguagem, mas como argumentei no texto que linkei acima, o ser humano precisa de linguagem para pensamentos complexos. Você pode tentar evitar usar linguagens formais de programação e usar linguagens mais complexas como a linguagem natural para este objetivo, mas isso não te faz independente de linguagem, te faz dependente de linguagem natural, o que na prática é pior, pois não programamos em linguagem natural. Por isso vejo que um estudo da tal lógica de programação deve vir acompanhado do estudo de uma, e se possível, várias linguagens de programação. Entender como cada uma delas apresentam recursos para expressar conceitos abstratos. Saber diferencia-las mas também compara-las para entender o que elas tem em comum, pode ser a chave para separar o conceito da linguagem.

No geral, como você mesmo disse, há diferenças entre a programação funcional, como em Haskell, e programação imperativa no geral, isso é uma distinção bem perspicaz. Compara-las talvez seja a chave para chegarmos ao tal fundamento que definiria lógica de programação como lógica formal. Acontece, que há argumentavelmente mais diferenças do que semelhanças, ao menos de forma superficial. No geral, a subtância comum dos dois casos, parece nos levar ao conceito matemático de função (mesmo a programação imperativa), a computação trabalha com o que é chamado de funções computáveis. Portanto, a lógica de programação seria o estudo do raciocínio correto que compreende, modela e resolve funções computáveis? Se for o caso, o que distingue a lógica de programação de lógica matemática? No fim, a primeira parece ser um subconjunto da segunda. Não me parece coincidência que grande parte dos nomes da computação e programação eram matemáticos, como John von Neumann, Alan Turing, Alonso Church, Donald Knuth, John Backus e a que é considerada por muitos como a primeira programadora da história (há quem discorde), Ada Lovelace. Inclusive, se for analisar o tal primeiro programa feito por Lovelace, ela não usa nada que se assemelhe a uma linguagem de programação moderna, mas sim, um diagrama com linguagem algébrica.

Um aviso é que não tenho estudo formal na área de matemática, filosofia ou lógica. Apenas expresso pensamentos que tenho usando o conhecimento limitado que tenho sobre estes. Eu gosto de compartilhar minha visão com os outros para que elas compartilhem as suas e eu possa enriquecer meu próprio pensamento. No geral, se o dono do post ou outros quiserem comentar sobre ficaria muito feliz :)

3

Excelente. Você mandou o ChatGPT fazer o texto como se fosse eu falando? :P :D

Eu não sei exatamente o que diz com "Por isso vejo que um estudo da tal lógica de programação deve vir acompanhado do estudo de uma, e se possível, várias linguagens de programação.", isso parece ser uma discordância do que eu falei, e tá tudo bem, eu estou pedindo para falar mais para eu entener se posso melhorar meu pensamento sobre isso ou entender melhor a frase. Ou confirmar a forte discordância.

Note que depois de aprender a programar você tem que mergulhar em linguagens reais que vai trabalhar e fazer comparaçaões e assim ir consolidando o conhecimento, mas é outro passo. Só para te dar uma base, não deve ter lido outras cosias que eu escrevi, eu recomendo aprender a programar com C (pelo menos quem quer ser programador sério). Eu não estou falando para aprender C, é diferente. Depois vai aprender outra linguagem, já que agora sabe programar. Usa C porque não precisa saber os detalhes dela mas não é uma linguagem artificial (pode usar o repl.it ou similar). Depois precisará saber bem Java, C#, Go, Rust, ou até Python, JS e PHP, embora em grande parte dos casos quem vai trabalhar com isso.. ah deixa pra lá :D eu já falei sobre também, mas não cabe aqui :) Quando for aprender uma delas agora de forma séria na linguagem, muito mais que a maioria faz, já estará comparando um pouco com C.

Tem outras formas válidas também.

Na ajuda que darei para as pessoas aprenderem melhor a programar, no meu blog/canal eu detalharei muito isso (não é curso).

E eu prego que depois de um tempo deve aprender paradigmas diferentes, mesmo que nunca use diretamente. Eu mesmo nunca aprendi de verdade o paradigma lógico, sei que está cada vez mais difícil abraçar "tudo", mas é uma falha minha, como da maioria.

E você pega um ponto interessante no parágrafo sobre imperativo/funcional, porque o que se fala que é lógica de programação é o imperativo :D E isso já é outra falha no ensino disso.

Eu também não tenho estudo formal sobre essas coisas, mas gosto de estudá-las aqui e ali, isso melhorou muito a forma que penso, e fiquei bem mais chato por isso, pelo menos aos olhos da maioria :D Meu formalismo está parcialmente na computação.

Depois verei os links, olhando por alguns segundos, o canal parece ser uma fionte interessante de conhecimento e reflexão, pena que esse tipo de canal não dura muito tempo porque as pessoas querem outra coisa. Se for importante eu vemho falar mais depois.

2

Que legal você ter respondido. E sim, já li variás coisas que você escreveu, se você usa bastante foruns de programação é bem difícil não te encontrar por aí. Seus textos sobre orientação a objetos me ajudaram muito a enriquecer minha visão sobre o paradigma. Eu achava que sabia programar orientado a objetos mas na verdade eu sabia programar em Java (vou usar isso no meu argumento). Talvez a semelhança que você notou em nossos textos seja por essa influência.

Outra coisa é que eu aprendi a programar com C. É a linguagem que se aprende na minha faculdade e até agora meus únicos projetos no github usam ela. Estou estudando Java pois pretendo ir para back-end. Também desejo aprender Rust pois gosto da área de desenvolvimento de sistemas e baixo-nível. Meu projeto de TCC será um kernel de sistema operacional (vou abordar esse projeto em um momento no texto), que estou escrevendo em C por afinidade mas pretendo reescreve-lo em Rust para estudar a linguagem.

Vi que viu meu texto, você não sabe o quanto fico feliz por ter gostado. Como já teve contato com minha tese de que lógica de programação deveria ser vista como o estudo de paradigmas. Vou poupar argumentos quanto a isso e focar em usar esta minha perspectiva para argumentar do porque acho que o estudo de lógica de programação (neste caso, paradigmas) devem ser acompanhados do estudo de uma linguagem.

Falando do meu kernel, já criei um programa de terminal que permite escrever texto na tela. A forma como este programa é feito é a seguinte: eu tenho um arquivo header (.h) que define a interface do terminal com protótipos de função. E tenho um arquivo de implementação (.c) que implementa essas funções, bem como outras com o modificador static (que restringe o acesso apenas ao arquivo) que auxiliam as principais em seu trabalho. Também tem variáveis globais static que definem o estado do terminal, como a posição do cursor. Reparou uma coisa? Isso é EXATAMENTE a estrutura de um programa tipicamente orientado a objetos, não muito diferente do que eu faria em Java, C# e principalmente C++. Eu tenho um objeto (Terminal), que possue uma interface que permite outros pontos do programa interagir com ele (funções do arquivo .h), e variáveis que descrevem seu estado (variaveis globais no arquivo .c) que não são acessiveis fora do objeto. Então, podemos dizer que meu programa é orientado a objetos? Eu não vejo o porque não. O mesmo programa em C++, o que teria de substancialmente diferente? Nada. As diferenças seriam apenas sintáticas, pois C++ foi projetada para ter sintaxes que auxiliam na elaboração de programas orientado a objetos, como classe, modificadores de acesso etc. Mas a linguagem não importa. O código das duas seriam diferentes, mas qualquer linguagem (inclusive as naturais) é apenas um meio de de expressar uma idea, mas o meu raciocínio, a forma como identifiquei o problema, modelei a solução, é o mesmo que usaria para escrever em C++ usando classes e objetos.

Estabelecido isso, tendo em mente que paradigmas estão além de linguagens então podemos concluir que é possível estudar programação sem depender de nenhuma linguagem correto? É aí que vem meu ponto: o ser humano pensa em linguagem. Repetindo os exemplos do meu outro texto: tente pensar em política sem pensar na palavra política. Tente pensar em somar dois números sem pensar na linguagem aritmética ou algébrica. E por fim, tente pensar em um quicksort sem pensar no código de uma linguagem de programação. Parece impossível correto? Mesmo que eu tenha dito que pensei no programa de terminal independentemente de linguagem, isso não é bem verdadade. Eu pensei em linguagem, provavelmente em várias delas de forma inconciente.

A questão é que, se você pensa em um programa, inevitavelmente você estará pensando em alguma linguagem. Ela pode ser a linguagem natural (português, inglês e até pseudo-código), uma linguagem de diagrama como fluxogramas, ou algum tipo de linguagem simbólica informal (a gente desenha grafos para explicar o funcionamente de algoritmos de árvores). Tudo isso é linguagem, mas o mais provável por motivos óbvios, é pensar em uma linguagem formal projetada para escrever programas, como C, Java, Python etc.

Mas se limitar a entender uma linguagem, faz com que conclusões erradas sobre a modelagem de programas apareçam. Por exemplo, quando comecei a aprender Java. Eu achava que sabia orientação a objetos. Afinal, nada mais é do que um paradigma que usa objetos que são instâncias de classes, e classes que são moldes para objetos. Mas lendo alguns textos na internet, inclusive os seus, mudei meu pensamento. Eu não sabia POO, eu sabia Java. Agora sei que objetos não podem ser definidos como instâncias de classes, pois eles podem ser instânciados a partir de protótipos. Mas porque cheguei a cometer esse erro? Porque estava limitado a entender os recursos que Java apresenta para facilitar a escrita de programas orientado a objetos. Após esse mudança de pensamento, dei uma olhada superficial em JavaScript, SmallTalk, Simula e na biblioteca GObject da linguagem C. Tudo isso para tentar entender diversas formas de expressar o mesmo paradigma. Mesmo possuindo diferenças sintáticas entre todas elas, elas tem um ponto em comum que só pude perceber por ter observado essas diferentes formas de expressar o mesmo conceito. Mesmo que inevitavelmente pensemos em linguagem, podemos buscar uma certa autonomia delas se estudarmos distintas formas de comunicar nossas ideias, e as linguagens de programação parecem ser a fonte ideal de estudo para isso.

Por isso falo que para estudar lógica de programação, ou seja, formas de se modelar a solução de um problema computável, deverá inevitavelmente passar pelo estudo de linguagens de programação, e quanto mais diversas elas forem, melhor será a compreensão dos conceitos que elas representam. Pois mesmo com suas diferenças sintáticas, elas vão compartilhar alguma base, por tanto algo em comum.

Fique a vontade para discordar, você diz algo: "O que mais gostaria de mudar no mundo, e sei que só conseguirei ajudar 'meia dúzia' de pessoas, é incentivar as pessoas a questionarem tudo o que aparece para elas", não poderia me identificar mais com isso. Talvez minha perspectiva esteja errada, e é bem provável estar já que só estou a dois anos na área. Mas fico feliz de ter me desenvolvido até aqui de forma a questionar e perguntar o porquê das coisas. Mesmo que isso me leve a ter opiniões impopulares e até por vezes incorretas, pelo menos eu pensei, e fiz outros pensarem. Acho isso uma boa coisa.

3

"mas pretendo reescreve-lo em Rust" :D :D :D

Espero que um dia coloque no gh.

E "exatamente" talvez seja um pouco de exagero, mas lembra um pouco em alguns casos. Dá pra fazer bem OOP (depois vi que vc já deve ter visto algo assim, eu vou respodnendo conforme vou lendo :) ).

Java realmente não é o melhor exemplo de OOP, para o bem ou para o mal.

Você sabe que o autor do termo "orientado a objeto" considera que a linguagem mais OO é Lisp e não a criação dele? Dá para discutir isso e já o fiz em alguns textos meus.

Concordo que para o aprendizado geral do desenvolvimento de software da melhor forma exige saber linguagens/paradigmas diferentes. Para o aprendizado inicial eu acho que não, é muita informação. Também admito que hoje em dia dá pra ser mais limitado e conseguir algum resultado na carreira, desde que não tenha falahas em todo o resto.

"Meia dúzia" de pessoas é o que tem que quer aprender com profundidade. Se até cientista, doutor hoje não liga mais, imagina o resto...

Eu discordo de pelo menos 1% do que as pessoas pensam em 100% delas. Se alguém concordar 100% comigo, pode internar. Mas especialmente gosto quando me corrigem, com fundamento, com respeito. Odeio espalhar fake news, o que só ocorre involutariamente.

Você parece bem encaminhado, coisa rara em hoje em dia. Eu acho que está fazendo certinho, se eu tivesse metade disso com 2 anos na área, hoje eu seria um programador maravilhoso :D Até atitude conta, você pensa direito, então tudo é questão de tempo. Se o resultado será bom, não sabemos, mas as chances são grandes. Raríssimo eu fazer um texto assim, não porque odeio as pessoas, mas porque não tenho oportunidades e não sou falso ou coach :D.

É possível que temos mais em comum do que só estilo de texto (até porque tem coisas que não se pega só lendo alguém) e pegada nos estudos, mas isso é outro assunto.

Moramos perto, já trabalhei aí e na vizinha, até morei em Americana (namoradas também :D). Mantenha contato.

1

"Espero que um dia coloque no gh.".

Se tudo der certo, até o final do ano que vem (que tenho que apresentar o TCC) ele estará lá, por enquanto ele só está em um respositório privado. Pretendo fazer um post aqui no tabnews quando terminar para apresentar meu projeto para as pessoas. Estou o fazendo como uma forma de aprendizado pessoal, e creio que se conseguir escrever um bom código, legível e simples, pode ser uma boa forma de aprendizado para outras pessoas. Principalmente com relação a baixo-nível e Rust. Kernels didáticos existem aos montes, kernels em Rust nem tanto. Agora, kernels em Rust com documentação em português... não é tão comum. Bem por isso pretendo escreve-lo em Rust, pode ser uma boa adição para a comunidade de Rust e baixo-nível no Brasil.

"Você sabe que o autor do termo 'orientado a objeto' considera que a linguagem mais OO é Lisp e não a criação dele? Dá para discutir isso e já o fiz em alguns textos meus."

Já li sobre isso. O interessante é que Alan Kay parece descrever o conceito como algo mais abstrato, o que me lembra um pouco minha visão. Eu estudei um pouco sobre a história da POO, e Simula, considerada a primeira linguagem orientada a objetos da história, foi pensada para fazer simulação. Que é uma forma de representar sistemas do mundo real em sistemas computacionais. Com este objetivo em mente, Simula apresenta classes, heranças, procedimentos virtuais etc. Depois, Alan Kay parece ter pegado como base os trabalhos de Nygaard e Dahl e desenvolvido o seu próprio a partir disso. No meio do processo, cunhou o termo orientação a objetos, mas não como um sinônimo de simulação, mas como um conceito distinto, onde os programas seriam modelados a partir de entidades chamadas de objetos que se comunicariam uns com os outros. Os recursos apresentados em Simula para fazer simulação, pareciam vir a calhar para este fim. Portanto, temos dois conceitos diferentes e não necessarimente relacionados. Por serem distintos, é possível um programa de simulação não orientado a objetos e um programa orientado a objetos sem simulação. A grosso modo, a simulação falaria mais sobre modelagem de dados e a orientação a objetos mais sobre a comunicação desses dados. O que parece ter acontecido (não tenho como comprovar, é só uma suposição) é que alguém pegou o conceito de simulação, misturou com a palavra orientação a objetos (juntamente com alguns conceitos elaborados por Kay, como polimorfismo) e transformou em uma coisa só. E tentamos desde então, encontrar coerência em um conceito que já nasce de uma confusão. Neste caso, orientação a objetos seria sinônimo de simulação? Eu não sei. Mas a maioria das pessoas parece achar que sim. Típicos exercícios de POO que se vê por aí, parecem muito mais exercícios de simulação. Por exemplo elaborar um sistema bancário em Java. Se me perguntasse hoje o que é orientação a objetos, eu responderia claramente que não sei. Você tem culpa nisso inclusive kkkkkk.

"Concordo que para o aprendizado geral do desenvolvimento de software da melhor forma exige saber linguagens/paradigmas diferentes. Para o aprendizado inicial eu acho que não, é muita informação. Também admito que hoje em dia dá pra ser mais limitado e conseguir algum resultado na carreira, desde que não tenha falahas em todo o resto."

Realmente, talvez para um aprendizado inicial seja meio pesado. Eu mesmo acho que não teria conseguido assimilar muita coisa se o que me fosse apresentado sobre programação no início fosse essa abordagem mais "completa". Mas talvez tornar mainstream esse ponto de que programação não se resume a loops e variáveis, pelo menos façam as pessoas aprenderem o de sempre com a conciência de que há outras visões. Quando conheci a programação funcional, foi justamente com o comentário de algúem mostrando que não é porque se sabe C, por exemplo, que se sabe qualquer linguagem. Ele falou que se tentasse Haskell a pessoa iria travar. Então, dei uma olhada em um program simples em Haskell e travei kkkkkkkk. Não precisei saber Haskell para entender a mensagem, na verdade, o fato de não saber Haskell e não ser capaz de ter uma idéia mínima do que estava acontecendo foi o que abriu minha mente. No geral, acho que é mais uma questão de comunicação, falar nas tais aulas de lógica de programação que se estudará o paradigma imperativo e apenas mencionar a existência de outros de forma supercificial, já melhoraria muita coisa.

"Você parece bem encaminhado, coisa rara em hoje em dia. Eu acho que está fazendo certinho, se eu tivesse metade disso com 2 anos na área, hoje eu seria um programador maravilhoso..."

Fico muito honrado que diga isso, tenho ideias de seguir carreita acadêmica, muito porque gosto de pesquisar, pensar e debates conceitos (acho que deu para perceber kkkk), mas de qualquer maneira vou querer ter experiência no mercado. Há como aprender programação sozinho, mas trabalhar em equipe, trabalhar com prazo e trabalhar para uma base de usuários real, são coisas que aprenderei mais facilmente no mercado. E principalmente, quero melhorar minha comunicação, e trabalhar em equipe me parece uma ótima forma de fazer isso. Como você disse, se dará certo, não sabemos, mas esperamos o melhor :D

No mais, pretendo fazer mais posts aqui no tabnews, quero melhorar minha habilidade de escrita e comunicação. A maioria seria sobre alguma coisa teórica, seria ótimo ver suas respostas.

To começando a usar redes sociais mais por agora. Meu Linkedin tá uma bosta (não tem nem foto kkk), preciso dá uma melhorada nele. Mas sobre manter contato, deixei meu e-mail, Instagram e Linkedin na bio do tabnews. Era para ter colocado antes mas sempre acabava esquecendo.

2

Logo o kernel do Windows será reescrito em Rust :D Eu não posso perder a piada :D

O Alan Kay era biólogo. Explica muita coisa? :) Já tem o conhecimento para pensar sobre isto? A perspicácia sei que tem ;)

Ele já reconheceu que criou o termo mas não o (sub)paradigama e que ele criou a orientação a mensagens. Tem hora que ele diz que não fez isso, mas o texto é público :)

Já leu meus textos sobre escolas de OOP? o usuário kht também costuma falar sobre isso (ele me copia :P :D)

Seu pensamento parece consistente, mesmo sem provas, nem tudo conseguimos provar. Não estou me lembrando se o Alan Kay que criou o polimorfismo, aqui eu quero provas :D

Hoje o pessoal quer até que limpe a bundinha delas, então o aprendizado hoje eu nem sei como deve ser, eu sei como deve ser pra adultos de todas as idades, não para crianças com 20, 30 ou mais anos.

tornar mainstream esse ponto de que programação não se resume a loops e variáveis'

Sim, eu vou tentar fazer isso no meu blog/canal, mas não tenho tempo pra fazer de forma tão estruturada quanto deveria, nem fazer de forma mais bem trabalhada quanto merecia, mas quem sabe se eu acertar na loteria (alguém vai ter que jogar o cartão aqui em casa) eu possa fazer com mais afinco :)

Eu gosto de C com pitada de Assembly, depois aprende algo pra trabalhar e depois algumas outras para complementar a formação, quem sabe Haskell, embora não seja minha preferida.

Eu pensei na academia, mas a burocracia me fez desistir, ainda mais que está cada vez menos sério por aqui.

Eu tenho bastante dificuldade com a comunicação e não consigo fazer muita coisa a respeito, mas isso é outro assunto.

Odeio redes sociais, mas vou começar usar de forma profissional.

2

"Já leu meus textos sobre escolas de OOP? o usuário kht também costuma falar sobre isso (ele me copia :P :D)"

Sim, ja vi essa abordagem, ela parece resolver o problema de tentar conciliar visões tão distintas, lembro de ter visto você comentando que tinha interesse em reunir essas pesquisas e escrever um livro ou artigo a respeito, para tentar divulgar mais a idéia. Tecninicamente essa visão não é tão difundida por aí, seria interessante essa abordagem.

"Não estou me lembrando se o Alan Kay que criou o polimorfismo, aqui eu quero provas :D"

Acho que aqui cometi um engano, pesquisei aqui e de fato, não parece ter muita prova de que foi ele que invetou o conceito, acho que confundi pelo fato de ele descrever a orientação a objetos como organismos biológicos (como você mencionou, ele é biólogo), e o polimorfismo ser um conceito da biologia. Daí acabei por misturar as coisas. Pesquisando de forma superficial (Ctrl + F) no texto dele "The Early History of SmallTalk" o termo "polymorphism" aparece duas vezes. Nenhuma de forma tão elaborada, o que é estranho se ele fosse o cunhador do termo. Apesar de que ainda tenho a impressão de ter lido em algum lugar ele dissertar melhor sobre o tema, ou ler que ele teria criado o conceito. Mas de fato, não há base para afirmar que ele criou o polimorfismo.

Acho estranho você ainda não ter canal, o único canal em português que conheço que é mais técnico é o do Fabio Akita, mas ele se aposentou do Youtube. Já tive a ideia de criar um também, mais para servir de "anotação" para meus estudos, e também compartilhar visões por vezes "estranhas" que tenho para serem debatidas.

1

Por muito tempo eu usava Smalltalk como o suprassumo de OO, mas fui descobrindo que nem é um bom exemplo :D Não é estranho porque OO dele não é OO, é só o termo, ele inventou a orientação a mensagens que nem prega o polimorfismo como algo essencial. Mas muita gente usa a definição dele para aprender OO, e é onde a porca torce o rabo. É muito confuso.

Tem coisas piores em TI :D Na academia se você fizer certo vai descobrir muita coisa. Hoje até pesquisadores da área já não sabem direito, porque o mercado é muito forte em ampor o que "inventa".

A Barbara Liskov é mais inventora do polimorfismo do que ele (ela não criou o mecanismo, mas estabeleceu regras fundamentais para o que ele é hoje). Um dia farei um conteúdo sobre isso.

Preciso arrumar tempo pra fazer o canal. De qualquer forma não farei sucesso porque eu não tenho a capacidade de comunicação do Akita e serei mais chato que ele :D Fora que não sou milionário e não posso gastar todo meu tempo nisso :D Não acho que um canal é local ideal pra aprender, mas eu não tenho mais como brigar contra isso. Ele pode ser útil para algumas coisas, especialmente lives de conversas e debates.

Vou gostar do seu canal e te chamo pra colab um dia, gosto de alguns que ninguém conhece :D Quem tem conteúdo não sabe brigar com o "algoritmo" então não vinga, o Akita é fora da curva. Alguns dos mais famosos YTbers sabem lidar com isso e como disfarçar bem com conteúdo mais raso e populista, para alguns o que importa é audiência.

1

Não conhecia a Barbara Liskov, vou pesquisar a respeito depois.

Sobre o canal, olha, nunca fui Youtuber (tive um canal com 12 anos mas isso não importa kkkk), mas consumo essa plataforma desde os 8 anos de idade. É de longe o site de internet que mais usei. Vi vários Youtubers nascerem, crescerem e morrerem (figurativamente é claro). Muitos Youtubers hoje gigantes, conheci quando eram bem pequenos, conheci o Alanzoka que hoje tem um canal com 8 milhões quando ele tinha menos de 50k em 2012. De fato, conteúdos mais elaborados não costumam ter o mesmo espaço dos grandes. Como você disse, o Akita é fora da curva neste aspecto. Mas se tem uma dica que posso te dar como consumidor dessa plataforma é: um vídeo no Youtube é um produto audio-visual. Portanto, ele deve ser pensado como tal. Isso significa que mesmo que o seu foco seja no conteúdo/texto (o que é admirável), outros aspectos devem ser pensados.

Dando um exemplo: é comum alguns criadores que focam em um conteúdo mais sério, ter um fundo com uma estante cheia de livros. O que pode funcionar (geralmente funciona com um público mais acadêmico), porque isso, semioticamente, comunica que você é alguém culto e inteligente. Mas ao mesmo tempo, comunica algúem academicista e arrogante. Para o público geral isso soa bem desinteressante. Eu sei que pode parecer besta (até porque é). Por que se importar com isso e não apenas com o conteúdo da mensagem? Idealmente isso deveria acontecer, mas na prática não acontece. E talvez elas nem estejam erradas. Como falei, um vídeo no Youtube é um produto audio-visual, e semiótica é um aspecto muito importante nessa área. Então, aspectos como estética devem ser pensados se você deseja atingir um público maior.

O Fabio Akita é um exemplo ilustre porque ele resolve essa questão do fundo de maneira bem inteligente. Repare na estante do fundo dos vídeos dele. Você encontra livros técnicos de computação por lá, mas também livros de histórias de fantasia, mangás, além de bonequinhos de animes e outros personagens de cultura pop. Com os livros técnicos, ele ainda consegue manter a imagem passada pela pessoa do exemplo anterior de ser alguém inteligente e culto, mas sem o aspecto academicista e arrogante, pois ele também possue "coisas do povo", como mangás, animes e super-heŕois, que não se espera que pessoas metidas a intelectual gostem (não estou dizendo que há algo de errado em não gostar, apenas que é a imagem que o senso comum tem de pessoas intelectualmente arrogantes). Isso, para o público, especialmente na nossa área, que tem tendência a gostar de cultural pop, especialmente os mais jovens, faz o Akita parecer alguém comum e amigável, mas muito inteligente e capacitado. O aspecto "quente" trazidos pelos leds coloridos aumentam de certa forma o conforto de se assistir ao vídeo.

Alguns outros aspectos fora dos vídeos, mas pensando no canal em geral, é ter um banner e ícone legais e modernos, que ao mesmo tempo comuniquem a essência do canal. Usando o Akita como exemplo novamente, o ícone no canal dele é ele segurando um microfone e com uma camiseta de anime. O microfone passa a imagem de alguém inteligente e comunicativo por evocar a imagem de um palestrante, e a camiseta de anime mantém ele como alguém "do povão". Também é bom manter um estilo coerente entre as thumbnails. Alguns canais tem thumbnails tão marcantes que você reconhece só pelo estilo.

Não estou dizendo com isso que você deve se alguem que não é. Não precisa colocar bonequinhos de anime no seu cenário se você não gosta. Só usei isto como exemplo de que vídeos no Youtube, gostemos ou não, tem bem mais do que texto. Mesmo que o seu foco seja na mensagem, é sempre bom pensar no invólucro. Infelizmente a nossa sociedade (e talvez a raça humana como um todo) se importa com aparências, e nem digo só a de pessoas. Se atentar a estes detalhes pode fazer a diferença se você vai atingir mais público ou não, especialmente aqueles que nunca assistiram um vídeo seu.

No mais, acho que ser chato pode ser uma vantagem. Você tem teses bem incomuns, e usando titúlos chamativos da para no mínimo fazer as pessoas clicarem no seu vídeo. O vídeo da palestra que citei no início da nossa conversa tem 28k de views e é o vídeo mais visto do canal. O segundo tem 3k de views. A diferença é brutal, e mesmo o vídeo falhando em todos os aspectos audio-visuais que falei (a imagem da camera é bem ruim e nem da para ver os slides, fora a thumbnail que é um meme do pica pau) ele consiguiu se destacar no canal por ter uma tese bem única, chamativa e provocadora.

Sobre a collab, ficaria feliz em participar, se eventualmente criar um canal dou um jeito de mandar o link.