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

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.

2

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.

1

Eu perdi o bonde. Nunca contei isso além de amigos. Eu queria ser cineasta, ou radialista (tv) ou ainda jornalista. Também queria ser piloto de F1, mas isso é coisa de criança :D. Eu não tinha talento pra essas coisas, e fui no que eu tinha e gostava. Mas semrpe ficou a vontade. Eu tentei mudar em certo momento de burnout. Mas me falaram que eu não conseguiria o que eu quero, sem fazer a faculdade e querer sentar na janelinha, eu teria que cobrir factual, policial, etc., eu queria fazer grandes repórtagens, escolher o que eu quero.

A internet abriu essa possibilidade, mas eu não via como monetizar, eu estava bitolado em programar. Eu tive ideias no século passado que milhares de pessoas se dão m uito bem agora porque fizeram.

Eu vi o começo do YT e torci o nariz praquela merda. Criei preconceito e nunca mais voltei. Só na pandsemia ele me reconquistou e foi me tirando da TV, vi que ele pode ser meuito melhor. Continua tendo o pior, mas eu não preciso ir atrás disso.

Mais recentemente eu vi que se eu quiser ajudar as pessoas, mesmo achando que não é o ideal, eu tenho que ir pro YT. Continuo tendo várias críticas a ele, inclusive como tratam o criador. Mas o mundo é como é, não como eu gostaria. Tenho dificuldades de me adaptar, mas tenho que fazer algumas concessões.

Muita gente se dá muito bem com conteúdo ruim. Alguns sem se comunicar bem, mas eu sei que a comunicação é o segredo e isso eu nucna serei bom, posso melhorar um pouco. Carisma é fundamental no YT. E carisma é algo difícil de definir de forma mais concreta, e pode existir até onde parece que não tem. Um bocó completo pode ter carisma. A tela, mais que tudo, e mais ainda no YT, ama o carisma, o resto é secundário. Não vou me extender mais sobre isso.

Eu poderia ter virado o jornalista que eu queria ser há muito tempo, ter monetizado e quem sabe, por ter sido dos primeiros alcançar o que eu queria, mesmo sem carisma, não sei se duraria, mas teria tempo de melhorar. Mas eu olhei para outro lado e perdi essa. Lição aprendida, espero que não cometa mais o mesmo erro. Por isso hoje eu torço o nariz pro TikTok, mas estou de olho nele, mesmo ele não me interessando, esse acho que virarei só creator mesmo :D.

Agora vou entrar no oceano vermelho, então sei que a chance de dar errado é muito grande, ainda mais que não farei todas as concessões que precisaria para me dar bem, farei algumas. Não vou entrar deperessão se os vídeos tiveram 3 dígitos de views :D

E tenho projeto de pelo menos mais um canal de outra coisa, mas isso ainda é segredo e vai mudar minha vida. Eu vou semi aposentar de TI, até porque a gente não abandona o que sempre amou.

Estou estudando o YT, começando fazer testes de vídeo., Não serei nota 10 por incompetência, mas não serei nota 0 por falta de esforço e vontade de fazer algo profissional. Não se preocupe eu sei que tenho que fazer algumas coisas, eu entendo a linguagem, não sei se vou executar como deveria. Sei disso porque eu sei como quero meus textos, mas nunca os produzo assim. è lamentável, mas eu sou assim e faço o que posso para melhorar, isso é uma história mais longa que nem quero publicar agora.

Uma merda é que minha pegada seria muito parecida com a do Akita. Ajuda ele ter parado e eu resolvi mudar uma parte. Mas serei acusado de copiá-lo, não tem jeito. Sopu parecido com ele por várias razões, mas não tive a mesma sorte que ele, e por algumas razões a mesma competência.

Eu não posso fazer o fundo que todos fazem e levaram um bom tempo as pessoas saberem porque, só verão no meu outro canal daqui um tempó maior (que curiosamente vai atrasar se o A Arte do Código vingar). Mas eu entendo isso que você está falando, tem um amigo que entende de forma mais profissional sobre AV que provavelmente vai me dar algumas dicas, já até combinei com ele de me analisar meus testes em fundo verde se dará pra usar. Se der certo o fundo será o que for mais pertinente :)

Só tempo mostrará como tem que ser, os primeiros vídeos serão piores (pelo menos assim espero :D) A falta de tempo pra dedicar a isso e limitação pessoal atrapalhará um pouco.

Gostei dos seus insights, ajudam reforçar, não estou diminuindo a importância, agradeço, tem coisas que eu não pensei dessa forma, adoraria receber mais, mas não se preocupe que estou pensando nessas coisas. Se quiser fazer parte do board of directors do canal :D :D :D tá convidado (não convocado, claro). Entendi pwerfeitamente todas as coisas, nem era tão necessário ter explicando em tanto detalhes.

Por enquanto só tenho o nome e logo. tem hora que pensei em trocar, mas ainda estou nele. https://www.youtube.com/@aartedocodigo.

Eu tenho títulos interessantes para alguns "quadros" do canal e dá pra fazer thumbs boas, se eu estiver em um dia bom (eu tenho isso).

Estou em dúvida se eu deveria fazer vários canais. Porque eu terei assuntos um pouco diversos e essaa mistura por prejudicar o algoritmo, ainda não sei bem o que fazer. História, Back to the Basics, Hypes, C#, lives/colabs, reacts, entre outras coisas com momentos sérios e palhaçadas (ou não, ninguém entende minhas piadas :D).

Aquele vídeo é uma merda :D mas o conteúdo é tão bom que nem deveria ser vídeo e o Paulo tem carisma (mesmo parecendo que não tem). Mas vc vê, nunca foi sugerido pra mim. O algoritmo é uma merda. Ele fica só me mandando vídeo de gente falando cú disfarçadamente, não sei porque :P :D

1

Acho que também tem que levar em consideracão o estilo de vídeo para avaliar se deu certo ou não. Se o objetivo é falar de programação isso já é um nicho restrito. Falar de ciência da computação é um nicho mais restrito. Falar de ciência da computação e programação em profundidade é um nicho mais restrito ainda. Por isso, é beeeem difícil que um canal assim vá chegar a milhões de inscritos, ainda mais no Brasil. Se você analisar a bolha dev do Youtube Brasil (que confesso não acompanho muito), ninguém pega tanta view assim. O Akita mesmo, tem bastante vídeo que não passa dos 100k, que em um mundo onde tem podcast com milhões de views defendendo que IAs vão exterminar a humanidade, não é tanto assim. Acho que se conseguir construir uma comunidade forte, mesmo que pequena, que acompanhe seu conteúdo pela qualidade já é o suficiente para dizer que deu certo. Um exemplo é o canal do Waine que é focado em baixo-nível (coisa rara aqui no Brasil), ele não é um canal grande, mas a comunidade dele é bem ativa e interage bem com ele. Alguns canais grandes já comentaram nos vídeos dele e outros já reagiram. Você é um cara com anos de experiência e é uma lenda dos foruns de programação. Se fizer um conteúdo bom além os aspectos textuais, acho que dá para ir construindo um público bom e até conseguir divulgação de outros maiores.

Sobre ter vários canais, não acho que isso seja uma boa idéia, pelo menos não se o que os distingue forem assuntos e não formatos. No caso, se você quiser fazer um canal de reacts e outros para vídeos ensaios (a maioria dos Youtubers fazem isso), talvez faça sentido, mas fazer vários canais de vídeo ensaio (mesmo formato), um para abordar assuntos de baixo-nível, outros para redes e outro para assuntos teóricos vai deixar mais díficil crescer cada um deles e difícil de relaciona-los. Diria que é melhor você abordar tudo no mesmo canal. O Akita, abordava de tudo, desde redes, baixo-nível, teoria computacional e até alguns mini-tutoriais. Acho que isso funcionava porque ele mantinha o mesmo formato e estilo, e conseguia relacionar os conteúdos quando possível. Por exemplo, ele explica no vídeo de Docker que fez as séries de DevOps e Linux para preparar terreno para o vídeo de containers, isso já divulga os vídeos de outros assuntos, mesmo que não seja uma continuação direta, de forma que eles podem ser consumidos isoladamente.

Sobre fazer parte board of directors, confesso não saber fireito o que é isso kkkkk, mas se for para poder contribuir em alguma coisa com seu canal, sobre aspectos do conteúdo, formato etc. mesmo tendo um conhecimento limitado, eu aceito sim. Seria um ótimo aprendizado até para mim.

1

Tinha esquecido de mandar o link: https://pt.stackoverflow.com/q/53468/101.

Inscrito não me importa embora tem gente da área batendo no 1 milhão. Alguns nos 100 mil, 10k tá bom pra mim, mas views importam mais. E comunidade forte é mais importante que views, mas eu sei que eu terei no máximo centenas de pessoas que vão abraça-la fortemente, o mais provável são dezenas ou menos.

Eu tenho evitado assistir quase todo mundo no Brasil e um pouco fora, para não correr o risco de copiar involuntariamente. Uma hora eu vejo conforme for necessário.

Eu não sei se consigo fazer algo muito novo, o que poderia atrair pelo menos certo grupo de pessoas. Eu posso fazer diferente. Mesmo o que eu falo de diferente já falei, só não foi em vídeo. Coisa inédita é só sobre o que ninguém quer, como por exemplo como fazer software desktop direito e não ter nenhum defeito que dizem que tem e por causa disso resolveram fazer web (por pura ignorânia e preguiça) ou como fazer um dicionário de aplicação que ninguém ouviu falar. Posso ser incisivo em algumas coisas como ser radical no DRY (se não causar mal) e se fizer isso fica mais barato, facilita a manutenção, a comunicação, evita regressões, evita dificuldades que querem resolver com uma ferrramenta absurdamente pior e só necessária porque erraram na decisão inicial, ou pelo menos explicar o que é DRY que as pessoas entendem errado, o que será um dos quadros do canal.

Ainda não sei sobre a segmentação, porque deve ser por audiência e acho que os assuntos pode ter audiências diferentes. Tenho que pensar e testar. Os vídeos que não eram tão a cara da audiência do Akita não iam bem, pode analisar. Ou ia muito bem e só porque era um vídeo de fora da bolha, que até podia ser ruim, porque viralizar é uma faca de dois gumes, pode trazer gente que atrapalha suas estatísticas pro algoritmo recomendar, pode indicar que seu canal não é bom, é só um vídeo bom. É difícil.

Board of directors é uma brincadeira, mas é só um aconselhamento.

Valeu por toda sua ajuda.

1

Isso acaba por ser uma maldição, você vira escravo do algoritmo. Pelo menos se não quer fazer do Youtube sua principal fonte de renda, isso te dá mais liberdade para ser criativo e se reeinventar caso queira.

No mais, estarei acompanhando seu canal, boa sorte com ele. Obrigado pela nossa conversa, foi bastante pordutiva. Espero te encontrar em outros posts.

Abraço.

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!