diff --git a/apps/blog/_posts/difference-languages.md b/apps/blog/_posts/difference-languages.md deleted file mode 100644 index 6c2db144..00000000 --- a/apps/blog/_posts/difference-languages.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "São todas as linguagens de programação iguais?" -date: "2022-11-27" -author: - name: "Mário Rodrigues" - photo: "mario.jpg" - username: "mariorodrigues" -draft: false -topic: "Linguagens" -featured: "true" ---- - -Quando falamos sobre programação, temos a ideia que vamos aprender diferentes linguagens de programação mas, na realidade, o que estamos a aprender são diferentes paradigmas. Um paradigma é uma forma que existe de classificar uma linguagem baseada nas suas funcionalidades e a sua escolha vai influenciar toda a estrutura e execução do programa. - -## Paradigma Funcional - -O Paradigma Funcional consiste em escrever funções puras, isto é, funções que não alteram o estado do programa, ou seja, não há alteração do valor de variáveis e, em vez disso, são criadas novas variáveis como forma de output. Por outras palavras, o output de uma função pura apenas depende do input recebido. -Este paradigma é o mais similar à matemática. Sendo assim, a única barreira de entrada para quem está a começar é aprender a sua sintaxe, que envolve apenas lógica e matemática estudada até ao 12º ano de escolaridade. - -O Paradigma Funcional é usado em várias linguagens, como por exemplo [Haskell](https://www.youtube.com/watch?v=Qa8IfEeBJqk) e [Elixir](https://www.youtube.com/watch?v=R7t7zca8SyM). Estas linguagens são populares porque permitem aos programadores criar e manter software com funções pequenas e limpas, o que é vital para organização de código. - -## Paradigma Imperativo - -O Paradigma Imperativo é o mais antigo da computação. A sua característica central é a definição sequencial de instruções que representam uma modificação no estado do programa. O Paradigma Imperativo centra-se muito na [arquitetura de Von Neumann’s](https://www.youtube.com/watch?v=tZ5W2LpdcEw), ou seja, a memória armazena informações e instruções do programa que podem ser alteradas a partir de operações aritméticas ou atribuídas a variáveis. -As linguagens mais conhecidas neste paradigma são, por exemplo, [C](https://www.youtube.com/watch?v=U3aXWizDbQ4) e [Rust](https://www.youtube.com/watch?v=5C_HPTJg5ek) - -## Paradigma Orientado a Objetos - -O Paradigma Orientado a Objetos é baseado em, como o próprio nome indica, objetos (que contêm dados e métodos), que têm como objetivo modularizar e permitir reutilização de código. Objetos são, geralmente, instâncias de classes usadas para interagir entre si para criar aplicações e programas. -Mas agora uma questão premente: afinal, o que são classes e instâncias de classes? -Um exemplo: - -``` - Temos uma pessoa: a Maria, que tem um nome, idade e altura. Podemos construir a classe "Pessoa", que iria armazenar dados como o nome, a idade e a altura, e a Maria seria uma instância dessa classe ou um objeto. - - Classe - Pessoa - Armazena - Nome, Idade, Altura - - Exemplos de instâncias dessa classe - Maria, João, Pedro, etc. -``` - -As linguagens mais usadas quando nos referimos a este paradigma são [Java](https://www.youtube.com/watch?v=l9AzO1FMgM8) e [C#](https://www.youtube.com/watch?v=ravLFzIguCM). Apesar das suas vantagens, este tipo de paradigma têm os seus contras, nomeadamente, performances lentas e um grande espaço de memória necessário quando criamos aplicações. - -## Paradigma Orientado a Eventos - -O Paradigma Orientado a Eventos é um paradigma onde as entidades (objetivos, serviços, etc) comunicam indiretamente através de mensagens enviadas por um intermediário. Por norma, estas mensagens são guardadas numa [fila de espera](https://www.youtube.com/watch?v=QCb6k2nik5k) antes de serem usadas e a execução do programa é determinada por novos "eventos" do usuário. -Mas o que são esses eventos? São, por exemplo, cliques no botão do rato ou em teclas ou mover o rato para umas coordenadas num mapa. -A linguagem mais conhecida e mais usada neste paradigma é o [Scratch](https://www.youtube.com/watch?v=B1JoK3Vgd_w) e costuma ser usada para introduzir crianças e jovens à programação de uma forma lúdica e divertida. - -## Multiparadigmas - -Multiparadigmas acontecem quando uma linguagem não fica restrita apenas a um paradigma e consegue ser usada de diferentes formas, ou seja, consegue ser funcional (trabalhar apenas com [recursividade](https://www.youtube.com/watch?v=NKymAD4pJZI)) e, ao mesmo tempo, imperativa, tendo variáveis e instruções na memória. -Dois bons exemplos de linguagem multiparadigma são [Python](https://www.youtube.com/watch?v=x7X9w_GIm1s) e [Javascript](https://www.youtube.com/watch?v=DHjqpvDnNGE). - -## Mas, afinal, qual é o melhor paradigma? - -Pessoalmente, eu prefiro desenvolver com uma [stack](https://blog.betrybe.com/tecnologia/stack-tecnologico/) que use um paradigma ou uma linguagem funcionais, uma vez que se torna possível desenvolver bons projetos com relativamente poucas linhas face à sua dimensão (é claro que, com um projeto de tamanho astronómico, torna-se impossível de desenvolver com meia dúzia de linhas, mas acabamos sempre por escrever menos, comparando a outras linguagens de programação). -Todavia, a realidade é que não existe um paradigma melhor. Cada paradigma têm estruturas diferentes para desenvolver projetos, assim como vantagens e desvantagens. Procurem a melhor [stack](https://blog.betrybe.com/tecnologia/stack-tecnologico/) possível e mais favorável à construção do vosso projeto desejado e estudem projetos semelhantes, de forma a perceber porque é que uma certa [stack](https://blog.betrybe.com/tecnologia/stack-tecnologico/) foi usada pelo programador ou equipa. -Entretanto, explora os vários paradigmas e vê com o qual é que te sentes mais confortável. O que importa é programar e aprender! diff --git a/apps/blog/_posts/tech-post-1.md b/apps/blog/_posts/tech-post-1.md deleted file mode 100644 index 2fb18e2b..00000000 --- a/apps/blog/_posts/tech-post-1.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "[Tech Post #1] Como nasceu a plataforma do Coderdojo Braga?" -date: "2022-09-17" -author: - name: "Rui Oliveira" - photo: "ruioliveira02.jpg" - username: "ruioliveira02" -draft: false -topic: "Desenvolvimento" -featured: false ---- - ---- - -Este é o primeiro post de uma série em que vamos discutir as plataformas do CoderDojo Braga. Como foram feitas, dificuldades técnicas, histórias engraçadas e o seu futuro são alguns dos temas que podem esperar daqui. Espero sinceramente que, antes de um blog técnico, isto seja um blog educativo, e que demonstre o trabalho necessário para fazer uma aplicação que vai ser usada por várias pessoas, trazendo assim uma maior sensibilidade para a engenharia de software. - -## O nascimento - -Pode só ter sido lançada recentemente, mas esta plataforma já se encontra em desenvolvimento há mais de um ano e meio. Se formos a ver o histórico no [Github](https://github.com/coderdojobraga/bokken/commit/5729ea8239adcbafa1e9b2a9e6df6fe779e7908a), descobrimos que o desenvolvimento começou em março de 2021. - -Falando em Github, vamos começar pela premissa básica do desenvolvimento de software no CoderDojo Braga: todo o código produzido é open source. Código open source significa que é público e acessível por qualquer pessoa. Assim, se quiserem, podem consultar o código [neste link](https://github.com/coderdojobraga/bokken) e [neste](https://github.com/coderdojobraga/shuriken). Além de ser público, toda a gente pode contribuir e programar para o CoderDojo Braga. - -Há vários exemplos de software open source que são fundamentais para o funcionamento do mundo e da internet. O mais óbvio é o sistema operativo Linux, que opera em grande maioria dos servidores na internet (incluindo aquele que hospeda este site), mas existem outros, como o Mozilla Firefox, LibreOffice, etc. - -Se estão a prestar atenção ao que estão a ler, devem ter reparado que eu pus dois links diferentes para o código da plataforma. Porquê? Porque a plataforma está dividida em dois grandes componentes: o site, que estão a visitar agora - nome de código [shuriken](https://github.com/coderdojobraga/shuriken) - e o serviço responsável por toda a lógica envolvente a sessões, contas, etc - nome de código [bokken](https://github.com/coderdojobraga/bokken). - -Estes serviços comunicam entre si pela internet, de tal forma que, quando fazem login na plataforma, por exemplo, o site pergunta ao servidor se as credenciais estão corretas e, se estiverem, redireciona-vos para a dashboard inicial. Todas as comunicações são encriptadas, o que garante a segurança da informação transmitida. - -## Desenvolvimento - -O frontend (site) está a ser desenvolvido em [NextJS](https://nextjs.org/) e o backend (o serviço responsável pela lógica da plataforma) em [Phoenix](https://www.phoenixframework.org/). Esta decisão acrescentou alguma complexidade ao projeto, porque obrigou a tratar explicitamente da conexão entre os dois componentes da plataforma. A vantagem é que a maior separação entre o site, aquilo que vocês veem, e a lógica por trás dá uma maior liberdade a ambas as partes de seguirem o seu caminho. - -Ao longo deste ano e meio, muito código foi desenvolvido. Pessoalmente, duas partes deste caminho foram as mais difíceis, mas também das mais gratificantes. Uma delas, que foi a minha primeira contribuição para o CoderDojo Braga, foi exatamente este blog. Mais concretamente, a parte de converter o texto para uma página web. - -Este post está a ser escrito em [Markdown](https://markdownguide.org) e precisa de ser transformado numa página HTML. Felizmente, isso já estava feito, e, por isso essa parte não foi muito difícil. O mais chato foi o estilo da página, porque o componente que usamos não forçava nenhum estilo, o que desformatava o conteúdo. - -A outra funcionalidade que se destacou, e esta não foi implementada por mim (créditos ao [Daniel Pereira](https://github.com/danielsp45)), foi o algoritmo de emparelhamento entre ninjas e mentores antes de uma sessão. Foi uma tarefa bastante complexa do ponto de vista algorítmico, e foi resolvida implementando o [algoritmo húngaro](https://en.wikipedia.org/wiki/Hungarian_algorithm) - -## Publicação - -Com a plataforma desenvolvida, chega o momento de a publicar. Como há dois projetos desenvolvidos, é preciso publicar a plataforma em duas frentes. O site em si foi publicado no [Netlify](https://www.netlify.com/). O processo é bastante simples, basta ligar o Netlify ao repositório no Github que o site é publicado praticamente instantaneamente. Exceto que é preciso fazer isso 3 vezes. Porquê 3 vezes? Porque o site está, na verdade, dividido em 3 subsites: a página web, o blog e a aplicação, cada um a ter de ser publicado em separado. Isto causou algumas frustrações com reencaminhamentos entre os 3 subsites, mas isso é história para outro dia. - -O backend, por seu lado, foi publicado num servidor do Departamento de Informática, através de containers [Docker](https://www.docker.com/). Isto traz-nos responsabilidade acrescida, pois somos nós os responsáveis por fazer os backups dos dados. - -Finalmente, o último passo é configurar o [DNS](https://pt.wikipedia.org/wiki/Sistema_de_Nomes_de_Dom%C3%ADnio), que, no nosso caso, faz-se no [Namecheap](https://www.namecheap.com/). - -## E agora? - -E agora, pouco ou nada muda. O desenvolvimento da plataforma vai continuar, procurando sempre melhorá-la o mais possível. O facto de já estar publicada traz alguma responsabilidade - afinal de contas, a última coisa que queremos é partir algo que já está feito e que funciona -, mas isso faz parte do jogo. - -Espero que o trabalho que tivemos e estamos a ter sirva, de facto, para melhorar a qualidade do serviço que o CoderDojo Braga presta, e que permita educar sobre o mundo da informática. Sendo uma organização que ensina crianças a programar, temos de dar o exemplo e garantir que a nossa plataforma é a melhor possível.