<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dário Prazeres</title>
    <description>The latest articles on DEV Community by Dário Prazeres (@darioprazeres).</description>
    <link>https://dev.to/darioprazeres</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1035949%2F4ddcc0c1-44c2-4ced-b1a6-134690379a82.png</url>
      <title>DEV Community: Dário Prazeres</title>
      <link>https://dev.to/darioprazeres</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darioprazeres"/>
    <language>en</language>
    <item>
      <title>Linguagens de Programação não são importantes</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Fri, 03 Oct 2025 20:27:29 +0000</pubDate>
      <link>https://dev.to/darioprazeres/linguagens-de-programacao-nao-sao-importantes-4m5o</link>
      <guid>https://dev.to/darioprazeres/linguagens-de-programacao-nao-sao-importantes-4m5o</guid>
      <description>&lt;p&gt;Muitos acreditam que dominar várias linguagens de programação é essencial para ser um bom programador ou até mesmo ter o repertório vasto de linguagem é uma grande coisa, mas lembra que o Pato anda, nada e voa mais não faz nada direito. Então será que ser um pato traz mesmo benefício?&lt;/p&gt;

&lt;p&gt;Outros até criam comunidade para defender a sua linguagem favorita, assim fica uma grande confusão sempre. Não é muito incomum veres pessoas comparando React Native vs Flutter, C# vs Java assim como brigam para saber entre Windows e Linux qual é melhor, Mas Será que linguagens em sim são realmente importantes ou são apenas ferramentas passageiras?&lt;/p&gt;

&lt;p&gt;Desenvolver comunidades é algo realmente incrível e é satisfatório estar em uma comunidade que te abrace e te dá-te certas dicas sobre as tecnologias que estás a aprender. Mas nesse processo esquecemos o que é mais importante além de contribuir para aquela comunidade nos tornamos defensores dela e esquecemos de ensinar/compreender os fundamentos da computação, a logica, a capacidade de resolver problemas e o raciocínio algorítmico. &lt;/p&gt;

&lt;h2&gt;
  
  
  Linguagens são apenas ferramentas
&lt;/h2&gt;

&lt;p&gt;Desculpa estragar o teu clubismo ou até mesmo fanatismo, mas linguagens são como martelos, chave de fenda ou até mesmo um cerrote. Dependendo de qual é o teu o problema vais estudar uma que te dá a solução que desejas alcançar. Apenas são ferramentas para materializar as tuas ideias e resolver o teu problema.&lt;/p&gt;

&lt;p&gt;Invés de brigares qual é a “melhor linguagem de programação” deverias se focar em conceitos, solidificar as bases como estrutura de dados, algoritmos, complexidades, arquitetura de software. Esses conteúdos vão te tornar um profissional melhor, ainda mais no mundo das IA’s em que elas estão a entregar soluções melhores a cada dia, então seria ótimo ter um profissional saber que decisões tomar e porquê.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paradigmas importam mais que sintaxe
&lt;/h2&gt;

&lt;p&gt;Invés de discutir se uma linguagem tem tipagem forte ou não, deverias procurar entender programação funcional, orientada a objetos, lógica, imperativa do que decorar sintaxe de Python, Java, C# ou C++.&lt;/p&gt;

&lt;p&gt;Quem busca dominar os paradigmas consegue migrar facilmente de uma linguagem para outra. Exemplo eu aprendi Orientação objeto com Java foi um paradigma que até aquele momento não estava habituado, mas com estudo e dedicação entendi, anos depois tive que aprender C#, apenas tive que olhar a sintaxe como é feita em C#, em suma entender os paradigmas diminui imenso a curva de aprendizado.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que o mercado valoriza
&lt;/h2&gt;

&lt;p&gt;Ao olhar para o mercado notas que a habilidade crucial não é o teu nível em Python mas sim a capacidade de solucionar os problemas que elas querem que você resolva. Porque no final do dia elas não se importam muito com a linguagem que usaste, desde que solucionaste os problemas é o mais importante para eles.&lt;/p&gt;

&lt;p&gt;O mercado também olha para a tua velocidade em aprender uma determinada linguagem nova, isto mostra que és alguém que entendes de computação e não de Programação apenas, e volto a dizer paradigmas e conceitos são mais importantes do que ter muitas linguagens em teu repertório.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas o que fazer…
&lt;/h2&gt;

&lt;p&gt;Apesar dos paradigmas, conceitos, logicas e a tua capacidade de resolver um problema serem importantes, é preciso dominar uma linguagem, por que ela é o meio de expressão do pensamento computacional, esta mesmo linguagem é a forma que você vai usar para materializar as tuas soluções aplicando os paradigmas que sabes sobre computação.&lt;/p&gt;

&lt;p&gt;A linguagem não é importante em si, mas é veículo que torna possível a aplicação da logica. E quando sentires que já tens uma boa base solida em conceitos de programação só aí acho que deves aprender uma outra o que facilita o processo&lt;/p&gt;

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

&lt;p&gt;Ao longo da tua carreira notarás que certos projetos rodam melhor em Python outros devem ser feitos em PHP. Chegarás a conclusão de que linguagens são transitórias, o que permanece é a habilidade de pensar computacionalmente. Uma outra interessante que deverias ir atras das respostas é porque a existência de muitas linguagens e porque elas são multiparadigmas e multiplataforma hoje em dia.&lt;/p&gt;

&lt;p&gt;A linguagem é a caneta, mas o que importa é a capacidade de escrever. &lt;/p&gt;

&lt;p&gt;Deixo aqui um video do Fabio Akita explicando um pouco sobre as &lt;a href="https://www.youtube.com/watch?v=p9-WuJbVHHc" rel="noopener noreferrer"&gt;Linguagens&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Loops vs Recursividade</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Thu, 02 Jan 2025 21:36:26 +0000</pubDate>
      <link>https://dev.to/darioprazeres/loops-vs-recursividade-53k9</link>
      <guid>https://dev.to/darioprazeres/loops-vs-recursividade-53k9</guid>
      <description>&lt;p&gt;Muita das vezes já nos perguntamos quando é a melhor opção entre recursividade e um ciclo de repetição ou loops.&lt;br&gt;
Isso é muito comum, visto que na faculdade aprendemos sobre recursividade mas muita vezes resolvemos com loops invés de colocar uma função recursiva. Ou podemos pensar ao contrário e colocar funções recursivas invés de loop. &lt;/p&gt;

&lt;p&gt;E caímos na questão onde devemos usar um ou outro e qual é a complexidade de tempo de um e outro.&lt;/p&gt;
&lt;h2&gt;
  
  
  Loops ou Estrutura de Repetições
&lt;/h2&gt;

&lt;p&gt;Estrutura de repetição é uma lógica que permite que determinadas instruções dentro dessa estrutura repitam-se até uma determinada condição. &lt;br&gt;
Essas estruturas assim como estruturas de condições são muito importantes para termos um código mais performático e organizado visto que muitas coisas as vezes são repetitivas. &lt;/p&gt;

&lt;p&gt;Existem algumas variações da estrutura de repetição em algumas linguagens tais como: for, do...while, while e o foeach.&lt;/p&gt;

&lt;p&gt;A complexidade de tempo ou Big O para uma estrutura de repetição depende do número de iterações que realiza esse número é denominado &lt;strong&gt;N&lt;/strong&gt; em que coloca a complexidade de tempo em O(N), se tiveres uma estrutura de repetição dentro de outra torna ela em O(N^2) sendo o quadrado de iterações. &lt;/p&gt;

&lt;p&gt;Dependendo muito dessa características podemos ter uma ideia se o nosso esta a ser performático&lt;/p&gt;
&lt;h2&gt;
  
  
  Recursividade
&lt;/h2&gt;

&lt;p&gt;Recursividade é um termo que pode ser usado para descrever a repetição de um objecto de forma similar à que já foi mostrada. Em outras palavras é chamar a mesma função dentro dela mesma. Esta função é constituída por casos bases e chamadas da própria função que com uma logica especifica que se quer resolver um problema afim de chegar no caso base. Poderemos ver um exemplo mais abaixo.&lt;/p&gt;
&lt;h2&gt;
  
  
  Loops Vs Recursividade
&lt;/h2&gt;

&lt;p&gt;Para mostrar a diferenças entre loops e recursividade iremos implementar soluções para encontrar números de Fibonacci:&lt;/p&gt;

&lt;p&gt;Números de Fibonacci ou também chamado de Sequência de Fibonacci, é uma sequência de números inteiros infinitos, começando normalmente em 0 e 1, na qual o número sucessor corresponde à soma dos dois anteriores, exemplo: 0, 1, 1, 2, 3, 5, 8, 13, 21.. &lt;/p&gt;

&lt;p&gt;Os códigos foram implementados em c-sharp, console application&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementação usando um &lt;strong&gt;For&lt;/strong&gt; loop
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.WriteLine("Digite um numero:");
var numCont = Convert.ToInt16(Console.ReadLine());

int prev1 = 1;
int prev2 = 0;

Console.Write(prev2 + " ");
Console.Write(prev1 + " ");

for (int i = 0; i &amp;lt; numCont; i++)
{
    int newNumber = prev1 + prev2;
    Console.Write(newNumber + " ");
    prev2 = prev1;
    prev1 = newNumber;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Criamos duas variáveis para conter os dois números de Fibonacci anteriores e dentro de um loop executamos &lt;code&gt;numCont&lt;/code&gt; vezes. Isso faz com que a quanto maior for o número que a sequência irá mostrar mais interações ele vai precisar. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Implementação usando recursividade
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static partial class Program
{
    static int numCont;
    static int count = 2;
    public static void Main(String[] args)
    {
        Console.WriteLine("Digite um numero:");
        numCont = Convert.ToInt16(Console.ReadLine());


        Console.Write(0 + " ");
        Console.Write(1 + " ");
        Fibonacci(1, 0);
    }

    static void Fibonacci(int prev1, int prev2)
    {
        if (count &amp;lt;= numCont)
        {
            int newNum = prev1 + prev2;
            Console.Write(newNum + " ");
            prev2 = prev1;
            prev1 = newNum;
            count += 1;
            Fibonacci(prev1, prev2);
        }
        else
        {
            return;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Como vimos no código acima a nossa função primeiro calcula o newNum, que é a soma entre os dois sucessores, depois disso ele faz novas atribuições aos antecessores, prev1 passa a ser o actual newNum e chama a função novamente com os novos dados e esta processo só termina quano a condição &lt;code&gt;count &amp;lt;= numCont&lt;/code&gt; for falsa.&lt;/p&gt;

&lt;p&gt;Mas se desejamos encontrar um numero em questão, com recursividade iremos aplicar a mesma fórmula que diz que o &lt;code&gt;F(n) = F(n-1) + F(n - 2)&lt;/code&gt;. Isso se queremos obter o 50º termo temos que calcular a soma entre o 48º e o 49º.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static partial class Program
{
    static int numCont;
    public static void Main(String[] args)
    {
        Console.WriteLine("Digite o termo que desejas saber:");
        numCont = Convert.ToInt16(Console.ReadLine());

        Console.WriteLine("o numero é " +  Fibonacci(numCont));
    }

    static int Fibonacci(int num)
    {
        if (num &amp;lt;= 1) return num;
        else return Fibonacci(num - 1) + Fibonacci(num - 2);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nota que a função Fibonacci é chamada duas vezes, e sempre que ele entrará nela mesma ela será chamada mais duas vezes possível. Para cálculos com valores inferiores não se verá tanta diferença, mas isso será um grande problema para cálculos com valores grandes fazendo com que cada instrução tenha o dobro do tempo que ela será processado. &lt;/p&gt;

&lt;p&gt;O custo será a  dobrar porque as funções recursivas terão que chegar no caso base e isso leva uma quantidade de instruções depois disso as funções acima terão que esperar resultados dessas funções e elas irão tratamento novamente.   &lt;/p&gt;

&lt;p&gt;Em partes o código esta organizado e simples mais isso leva muito tempo para executar o que é uma desvantagem visto que queremos performar e beleza no código. &lt;/p&gt;

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

&lt;p&gt;Podemos resolver um problema com diferentes algoritmos e com vários conceitos seja ele loops ou Recursividade, mas devemos saber o que esperar deste código no nosso projecto visto que pode ter um impacto significativo, tanto de performance quanto de estética.&lt;/p&gt;

&lt;p&gt;A recursividade e loops são duas técnicas diferentes que podem ser usadas em algoritmos diferentes. Mas agora já sabemos quem é mais performático.   &lt;/p&gt;

&lt;p&gt;Referências:&lt;br&gt;
&lt;a href="https://www.w3schools.com/dsa/dsa_algo_simple.php" rel="noopener noreferrer"&gt;W3Schools&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dsa</category>
      <category>performance</category>
      <category>coding</category>
    </item>
    <item>
      <title>Por onde anda o WPF?</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Tue, 03 Dec 2024 23:12:52 +0000</pubDate>
      <link>https://dev.to/darioprazeres/por-onde-anda-o-wpf-3he</link>
      <guid>https://dev.to/darioprazeres/por-onde-anda-o-wpf-3he</guid>
      <description>&lt;p&gt;Para quem não sabe o &lt;strong&gt;WPF&lt;/strong&gt;, &lt;strong&gt;Windows Presentation Foundation&lt;/strong&gt;, é uma estrutura de de interface de usuário gratuita e de &lt;a href="https://dev.to/darioprazeres/o-que-e-open-source-4c92"&gt;código aberto&lt;/a&gt; para Desktop baseados no Windows. Os aplicativos em WPF são baseados em .Net e são desenvolvidos principalmente usando o C# e XAML.&lt;/p&gt;

&lt;p&gt;O XAML ou Extensible Application Markup Language é uma linguagem declarativa XML da Microsoft para inicializar valores e objectos estruturados.&lt;/p&gt;

&lt;p&gt;Mas de um tempo para cá a Microsoft tem deixado de mandar as actualizações para o WPF com maior frequência do que antes, &lt;strong&gt;qual é a razão dessa situação&lt;/strong&gt;?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Primeiro devemos saber que o WPF é usando para estruturar UI mais modernas em relação ao WinForms, visto que o Winforms é mais usado para Sistema Windows um pouco mais antigo, mas ainda tem suporte até hoje mas se desejares teres uma interface mais recente e com mais animações o Winforms já não entrega.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Segundo a ideia do WPF foi para ajudar ao desenvolvedor até mais domínio ao controle que ele esta a inserir em seu formulário, a conseguir moldar muitos aspectos que seja do componente na base do próprio código sem muito esforço.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Outro aspecto interessante no WPF é a modernidade em relação as funcionalidades, Suporte em Windows mais recentes como uma renderização elegante e moderna.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mas algo que é tão bom assim como não esta popular?
&lt;/h2&gt;

&lt;p&gt;Por causa de uma nova tecnologia chamada &lt;strong&gt;.NET MAUI&lt;/strong&gt;. O .NET MAUI agora é a carta coringa da Microsoft como UI para aplicativos Nativos. &lt;br&gt;
Imagine que és um desenvolvedor Desktop e estas a criar uma aplicação Desktop e logo desenvolves, mas a ideia se torna popular que chega até usuários de Mac OS, Linux e até Android (Sendo otimista).  Terias que criar códigos para diferentes Sistema operacional e talvez com outras linguagens. &lt;/p&gt;

&lt;p&gt;Este é o problema que muitos desenvolvedores .NET vêm se perguntando faz tempo e o .NET MAUI venho responder isso. Podemos dizer que terá uma curva maior de aprendizagem, outro problema do .NET MAUI é a por ser uma tecnologia nova, ainda não tem maturidade para estar como primeira opção.&lt;/p&gt;

&lt;p&gt;O cenário mudou um pouco por conta na desaceleração ou mesmo na estagnação de tecnologias como o WPF e Winforms. Isto esta matando o WPF aos poucos. &lt;/p&gt;

&lt;h2&gt;
  
  
  Mas será que vale a pena estudar WPF ou aplicar em novos projectos?
&lt;/h2&gt;

&lt;p&gt;Essa pergunta é relativa e depende da complexidade do projecto. Imaginamos que o projecto é multiplataformas, não seria sensato desenvolver este projecto em WPF. &lt;/p&gt;

&lt;p&gt;Mas se este projecto requisitar coisas específicas (como versões mais antigas do Windows) e nativas apenas do Windows e com uma interface agradável pode usar  muito bem WPF.&lt;/p&gt;

&lt;p&gt;Uma outra razão que vale a pena continuar ou a começar á estudar WPF é que ele hoje é &lt;a href="https://dev.to/darioprazeres/o-que-e-open-source-4c92"&gt;código aberto&lt;/a&gt;, isto ajuda com que a comunidade ajude a melhorar a concertar bugs e desenvolver novas features da tecnologia que amamos e usamos. Para se ter noção a Página do &lt;a href="https://github.com/dotnet/wpf" rel="noopener noreferrer"&gt;GitHub do WPF&lt;/a&gt; contém mais de 1200 issues e mais de 206 Pull Request. Isto é sinônimo de que esta tecnologia esta a ser bem aproveitada para quem ama.&lt;/p&gt;

&lt;p&gt;Também por ser um tecnologia madura, existe vários produtos e serviços desenvolvido com ela o que leva a precisar a ter conhecimento dessa tecnologia e também ajudará na resolução de issues.&lt;/p&gt;

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

&lt;p&gt;Apesar do WPF ser moderno e maduro aos olhos de muitos, mas torna-se uma tecnologia antiga para que hoje é o limiar das pessoas e para que hoje é o rumo da Microsoft. Mesmo com esses problemas iremos torcer que a Microsoft possa administrar bem o repositório do WPF afim de termos tais correções em versões mais recente. &lt;/p&gt;

</description>
      <category>wpf</category>
      <category>microsoft</category>
      <category>xamarinforms</category>
      <category>csharp</category>
    </item>
    <item>
      <title>What are Embedded Systems?</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Sun, 13 Oct 2024 21:13:32 +0000</pubDate>
      <link>https://dev.to/darioprazeres/what-are-embedded-systems-1e27</link>
      <guid>https://dev.to/darioprazeres/what-are-embedded-systems-1e27</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/darioprazeres/o-que-sao-sistemas-embarcados-1oed"&gt;Versão PT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Embedded systems (or integrated systems) are specialized computing systems designed to perform specific functions within a larger device. They consist of hardware and software dedicated to a predefined task or set of tasks, often with real-time requirements and limited resources.&lt;/p&gt;

&lt;p&gt;These systems are commonly used in &lt;strong&gt;IoT (Internet of Things)&lt;/strong&gt;, which aims to integrate these systems or devices with the internet.&lt;/p&gt;

&lt;p&gt;Today, we have a variety of embedded systems, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smart appliances (like microwaves and refrigerators)&lt;/li&gt;
&lt;li&gt;Automobiles (like engine control systems and ABS brakes)&lt;/li&gt;
&lt;li&gt;Medical devices (like heart monitors and insulin pumps)&lt;/li&gt;
&lt;li&gt;Industrial equipment (like manufacturing robots)&lt;/li&gt;
&lt;li&gt;Communication devices (like routers and modems)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As we can see, there are many embedded systems in our daily lives. These systems also include software, as the definition of &lt;strong&gt;Embedded Systems&lt;/strong&gt; indicated; this software is developed using a variety of programming languages.&lt;/p&gt;

&lt;p&gt;Here is a list of the most commonly used languages in these systems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. C:&lt;/strong&gt; The most widely used language in embedded systems due to its efficiency, direct hardware control, and support for low-level programming.&lt;br&gt;
Advantages: Precise memory control, high performance, accessibility to hardware-specific libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Python:&lt;/strong&gt; Although not a low-level language, it is used in prototyping embedded systems and in high-level applications on more capable devices like the Raspberry Pi.&lt;br&gt;
Advantages: Ease of use, readability of code, and a wide range of libraries.&lt;br&gt;
Disadvantages: Less control over hardware and less efficient in terms of performance and resource usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. C++:&lt;/strong&gt; An extension of C with support for object-oriented programming, used in more complex projects that require modularity and abstraction.&lt;br&gt;
Advantages: Allows for more organized and scalable systems without sacrificing much efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Assembly:&lt;/strong&gt; A low-level language used to program directly to hardware, allowing absolute control over resources.&lt;br&gt;
Advantages: Ideal for extreme performance and memory usage optimizations, but difficult to maintain and develop.&lt;br&gt;
Disadvantages: Highly hardware-dependent, which makes portability between different platforms challenging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Ada:&lt;/strong&gt; A language oriented towards critical systems, especially used in embedded systems that require high reliability and security (e.g., in aviation and military systems).&lt;br&gt;
Advantages: Strong type checking and robust error detection mechanisms.&lt;br&gt;
There are other languages aimed at system development, such as Java, Rust, and JavaScript. As we saw, the languages used in embedded systems are those that facilitate manipulation of hardware and peripherals.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the Practical Applications of These Systems?
&lt;/h2&gt;

&lt;p&gt;These systems are present in our lives; we can say they are like the air we breathe today, from automobiles to data processing. Some areas and examples of use include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Automotive&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Engine Control Unit (ECU): Controls engine operation to improve efficiency, reduce emissions, and ensure safety.&lt;/li&gt;
&lt;li&gt;Airbags: Embedded systems are responsible for detecting collisions and deploying airbags in fractions of a second.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Consumer Electronics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smartphones: Embedded systems control sensors, cameras, network connections, and basic device functions.&lt;/li&gt;
&lt;li&gt;Smart TVs: Process images, run applications, connect to the internet, and play media.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. IoT Devices (Internet of Things)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Home Automation: Temperature sensors, smart lighting, locks, and thermostats controlled remotely.&lt;/li&gt;
&lt;li&gt;Wearables: Smartwatches, fitness bands, and other devices that monitor health and physical activity.&lt;/li&gt;
&lt;li&gt;Smart Cities: Traffic sensors, smart street lighting, and air quality monitoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are other areas where these systems are used; this is just a summary of what we can find in the market.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is It Worth Learning About Embedded Systems?
&lt;/h3&gt;

&lt;p&gt;It is definitely worthwhile to gain knowledge and get involved in this field, but it is more suited for those who are familiar with hardware and want to understand more deeply what really happens beyond the devices. Knowledge in Digital Systems, Registers, Microprocessors, Microcontrollers, and good Electronics will be fundamental for this process.&lt;/p&gt;

&lt;p&gt;A good suggestion for starting would be to learn C, but if you already come from a language like Python, learning about embedded systems with Raspberry Pi would greatly facilitate creating various elegant and precise things in the modern world.&lt;/p&gt;

</description>
      <category>c</category>
      <category>cpp</category>
      <category>python</category>
      <category>systems</category>
    </item>
    <item>
      <title>What are Embedded Systems?</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Sun, 13 Oct 2024 21:13:31 +0000</pubDate>
      <link>https://dev.to/darioprazeres/what-are-embedded-systems-5606</link>
      <guid>https://dev.to/darioprazeres/what-are-embedded-systems-5606</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/darioprazeres/o-que-sao-sistemas-embarcados-1oed"&gt;Versão PT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Embedded systems (or integrated systems) are specialized computing systems designed to perform specific functions within a larger device. They consist of hardware and software dedicated to a predefined task or set of tasks, often with real-time requirements and limited resources.&lt;/p&gt;

&lt;p&gt;These systems are commonly used in &lt;strong&gt;IoT (Internet of Things)&lt;/strong&gt;, which aims to integrate these systems or devices with the internet.&lt;/p&gt;

&lt;p&gt;Today, we have a variety of embedded systems, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smart appliances (like microwaves and refrigerators)&lt;/li&gt;
&lt;li&gt;Automobiles (like engine control systems and ABS brakes)&lt;/li&gt;
&lt;li&gt;Medical devices (like heart monitors and insulin pumps)&lt;/li&gt;
&lt;li&gt;Industrial equipment (like manufacturing robots)&lt;/li&gt;
&lt;li&gt;Communication devices (like routers and modems)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As we can see, there are many embedded systems in our daily lives. These systems also include software, as the definition of &lt;strong&gt;Embedded Systems&lt;/strong&gt; indicated; this software is developed using a variety of programming languages.&lt;/p&gt;

&lt;p&gt;Here is a list of the most commonly used languages in these systems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. C:&lt;/strong&gt; The most widely used language in embedded systems due to its efficiency, direct hardware control, and support for low-level programming.&lt;br&gt;
Advantages: Precise memory control, high performance, accessibility to hardware-specific libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Python:&lt;/strong&gt; Although not a low-level language, it is used in prototyping embedded systems and in high-level applications on more capable devices like the Raspberry Pi.&lt;br&gt;
Advantages: Ease of use, readability of code, and a wide range of libraries.&lt;br&gt;
Disadvantages: Less control over hardware and less efficient in terms of performance and resource usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. C++:&lt;/strong&gt; An extension of C with support for object-oriented programming, used in more complex projects that require modularity and abstraction.&lt;br&gt;
Advantages: Allows for more organized and scalable systems without sacrificing much efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Assembly:&lt;/strong&gt; A low-level language used to program directly to hardware, allowing absolute control over resources.&lt;br&gt;
Advantages: Ideal for extreme performance and memory usage optimizations, but difficult to maintain and develop.&lt;br&gt;
Disadvantages: Highly hardware-dependent, which makes portability between different platforms challenging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Ada:&lt;/strong&gt; A language oriented towards critical systems, especially used in embedded systems that require high reliability and security (e.g., in aviation and military systems).&lt;br&gt;
Advantages: Strong type checking and robust error detection mechanisms.&lt;br&gt;
There are other languages aimed at system development, such as Java, Rust, and JavaScript. As we saw, the languages used in embedded systems are those that facilitate manipulation of hardware and peripherals.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the Practical Applications of These Systems?
&lt;/h2&gt;

&lt;p&gt;These systems are present in our lives; we can say they are like the air we breathe today, from automobiles to data processing. Some areas and examples of use include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Automotive&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Engine Control Unit (ECU): Controls engine operation to improve efficiency, reduce emissions, and ensure safety.&lt;/li&gt;
&lt;li&gt;Airbags: Embedded systems are responsible for detecting collisions and deploying airbags in fractions of a second.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Consumer Electronics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smartphones: Embedded systems control sensors, cameras, network connections, and basic device functions.&lt;/li&gt;
&lt;li&gt;Smart TVs: Process images, run applications, connect to the internet, and play media.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. IoT Devices (Internet of Things)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Home Automation: Temperature sensors, smart lighting, locks, and thermostats controlled remotely.&lt;/li&gt;
&lt;li&gt;Wearables: Smartwatches, fitness bands, and other devices that monitor health and physical activity.&lt;/li&gt;
&lt;li&gt;Smart Cities: Traffic sensors, smart street lighting, and air quality monitoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are other areas where these systems are used; this is just a summary of what we can find in the market.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is It Worth Learning About Embedded Systems?
&lt;/h3&gt;

&lt;p&gt;It is definitely worthwhile to gain knowledge and get involved in this field, but it is more suited for those who are familiar with hardware and want to understand more deeply what really happens beyond the devices. Knowledge in Digital Systems, Registers, Microprocessors, Microcontrollers, and good Electronics will be fundamental for this process.&lt;/p&gt;

&lt;p&gt;A good suggestion for starting would be to learn C, but if you already come from a language like Python, learning about embedded systems with Raspberry Pi would greatly facilitate creating various elegant and precise things in the modern world.&lt;/p&gt;

</description>
      <category>c</category>
      <category>cpp</category>
      <category>python</category>
      <category>systems</category>
    </item>
    <item>
      <title>O que são Sistemas Embarcados?</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Sun, 13 Oct 2024 21:03:15 +0000</pubDate>
      <link>https://dev.to/darioprazeres/o-que-sao-sistemas-embarcados-1oed</link>
      <guid>https://dev.to/darioprazeres/o-que-sao-sistemas-embarcados-1oed</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/darioprazeres/what-are-embedded-systems-1e27"&gt;English Version&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sistemas embarcados (ou sistemas integrados) são sistemas de computação especializados projetados para realizar funções específicas dentro de um dispositivo maior. Eles são compostos por hardware e software dedicados a uma tarefa ou conjunto de tarefas pré-definidas, geralmente com requisitos de tempo real e de recursos limitados.&lt;/p&gt;

&lt;p&gt;Esses sistemas estão a ser comumente usados em &lt;strong&gt;IoT (Internet Of Things)&lt;/strong&gt;, ou simplesmente internet das coisas. Onde visa integrar esses sistemas ou dispositivos com a internet.&lt;/p&gt;

&lt;p&gt;Hoje em dia temos uma variedade de sistemas embarcados que incluem: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eletrodomésticos inteligentes (como fornos micro-ondas, geladeiras)&lt;/li&gt;
&lt;li&gt;Automóveis (como o controle eletrônico do motor, freios ABS)&lt;/li&gt;
&lt;li&gt;Dispositivos médicos (monitores cardíacos, bombas de insulina)&lt;/li&gt;
&lt;li&gt;Equipamentos industriais (robôs de manufatura)&lt;/li&gt;
&lt;li&gt;Dispositivos de comunicação (roteadores, modems)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como vimos temos vários sistemas embarcados no nosso dia-a-dia, nesses sistemas esta constando também Software como a definição de &lt;strong&gt;Sistemas Embarcados&lt;/strong&gt; mostrou, tais software são realizados com uma variedade de linguagens de programação.&lt;/p&gt;

&lt;p&gt;Faremos uma listagem das Linguagens mais usadas nesses sistemas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. C&lt;/strong&gt;: A linguagem mais amplamente utilizada em sistemas embarcados devido à sua eficiência, controle direto de hardware e suporte para programação de baixo nível.&lt;br&gt;
Vantagens: Controle preciso de memória, alta performance, acessibilidade de bibliotecas específicas de hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Python&lt;/strong&gt;: Embora não seja uma linguagem de baixo nível, é usada em protótipos de sistemas embarcados e em aplicações de alto nível em dispositivos com mais capacidade, como &lt;strong&gt;Raspberry Pi&lt;/strong&gt;.&lt;br&gt;
Vantagens: Facilidade de uso, leitura de código e uma vasta gama de bibliotecas.&lt;br&gt;
Desvantagens: Menor controle sobre hardware e menos eficiente em termos de desempenho e uso de recursos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. C++&lt;/strong&gt; : Extensão do C com suporte para programação orientada a objetos, usada em projetos mais complexos que exigem modularidade e abstração.&lt;br&gt;
Vantagens: Permite a criação de sistemas mais organizados e escaláveis, sem sacrificar muito a eficiência.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Assembly&lt;/strong&gt; : Linguagem de baixo nível usada para programar diretamente o hardware, permitindo controle absoluto sobre os recursos.&lt;br&gt;
Vantagens: Ideal para otimizações extremas de desempenho e uso de memória, mas difícil de manter e desenvolver.&lt;br&gt;
Desvantagens: Muito dependente do hardware, o que dificulta a portabilidade entre diferentes plataformas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Ada&lt;/strong&gt;: Uma linguagem orientada a sistemas críticos, especialmente usada em sistemas embarcados que exigem alta confiabilidade e segurança (por exemplo, em aviação e sistemas militares).&lt;br&gt;
Vantagens: Forte verificação de tipo e mecanismos robustos de detecção de erros&lt;/p&gt;

&lt;p&gt;Existem outras linguagens para que visam o desenvolvimento de sistemas, tais como: Java, Rust e Java Script. Como vimos as linguagens que são usadas nos sistemas embarcados são linguagens que facilitam a manipulação do hardware e dos periféricos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quais são aplicações praticas desses sistemas?
&lt;/h2&gt;

&lt;p&gt;Tais sistemas estão em nossas vidas, podemos dizer que é como ar que respiramos hoje em dia desde automóveis á processamento de dados. &lt;br&gt;
Algumas áreas e exemplos de uso:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Automotivo&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unidade de Controle do Motor (ECU): Controla o funcionamento do motor para melhorar eficiência, reduzir emissões e garantir segurança.&lt;/li&gt;
&lt;li&gt;Airbags: Sistemas embarcados são responsáveis por detectar colisões e acionar os airbags em frações de segundo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Dispositivos Eletrônicos de Consumo&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smartphones: Sistemas embarcados controlam sensores, câmeras, conexões de rede e funções básicas do dispositivo.&lt;/li&gt;
&lt;li&gt;Smart TVs: Processam imagens, executam aplicativos, conectam-se à internet e reproduzem mídia. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Dispositivos IoT (Internet das Coisas)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automação Residencial: Sensores de temperatura, iluminação inteligente, fechaduras e termostatos controlados remotamente.&lt;/li&gt;
&lt;li&gt;Wearables (dispositivos vestíveis): Relógios inteligentes, pulseiras fitness e outros dispositivos que monitoram saúde e atividade física.&lt;/li&gt;
&lt;li&gt;Cidades Inteligentes: Sensores de tráfego, iluminação pública inteligente e monitoramento de qualidade do ar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existem outras áreas em que esses sistemas são usados e utilizados este é apenas um resumo do que podemos encontrar no mercado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vale a pena aprender sobre sistemas embarcados?
&lt;/h2&gt;

&lt;p&gt;Vale muito a pena muito ter conhecimento e se envolver com essa área, mas esta área é para quem esta mais acostumados com hardware aquele que quer ir mas a fundo sobre o que realmente se passa além dos dispositivos. Conhecimentos como Sistemas Digitais, Registros, Microprocessadores, Microcontroladores e a boa Eletrônica serão fundamentais para este processo.&lt;/p&gt;

&lt;p&gt;Uma boa sugestão para começar seria C, mas se já vens de uma linguagem como Python e aprender sobre os sistemas embarcados com &lt;strong&gt;Raspberry Pi&lt;/strong&gt; facilitaria muito na criação de varias coisa elegantes e precisas no mundo moderno.&lt;/p&gt;

</description>
      <category>python</category>
      <category>cpp</category>
      <category>c</category>
      <category>systems</category>
    </item>
    <item>
      <title>PHP, O elefante que não cai!</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Mon, 07 Oct 2024 22:05:17 +0000</pubDate>
      <link>https://dev.to/darioprazeres/php-o-elefante-que-nao-cai-3nd5</link>
      <guid>https://dev.to/darioprazeres/php-o-elefante-que-nao-cai-3nd5</guid>
      <description>&lt;p&gt;Foto de &lt;a href="https://unsplash.com/pt-br/@benofthenorth?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Ben Griffiths&lt;/a&gt; na &lt;a href="https://unsplash.com/pt-br/fotografias/estatueta-de-elefante-azul-no-macbook-pro-Bj6ENZDMSDY?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PHP é uma linguagem amplamente aplaudida e ao mesmo tempo criticando por outros, alguns dizem que ela esta morrendo mas será mesmo, vale a pena tirar tempo e estudar PHP?&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP
&lt;/h2&gt;

&lt;p&gt;PHP é uma linguagem de programação desenvolvida por Rasmus Lerdorf, nos anos 90, originalmente ela foi desenvolvida para ser uma linguagem server side auxiliando com as tecnologias HTML, CSS e JavaScript para termos websites dinâmicos e interativos. Mas o PHP foi muito abraçado devido ao inicio da expansão da Web e pela compreensão fácil com o Banco de dados MySQL.&lt;/p&gt;

&lt;p&gt;O PHP hoje esta na versão 8.3.6, e é uma linguagem que apesar de ter crescido em varias outras formas de sua aplicabilidade. Além de ser amplamente usada em Web também tem ferramentas de criação de aplicações Desktop  como, PHP-GTK, é possível desenvolver interfaces gráficas (GUIs) para aplicações desktop, embora essa abordagem seja menos comum.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP e a Web
&lt;/h2&gt;

&lt;p&gt;Falar do PHP e não vincular o seu patrimônio na web, é considerado crime. O PHP é uma linguagem que esta presente em 80% das paginas da web, é isso mesmo que leste, 80% isso falando se a web tem pelo menos  &lt;a href="https://www.digitalsilk.com/digital-trends/how-many-websites-are-there/" rel="noopener noreferrer"&gt;1.1 billion&lt;/a&gt;, então temos cerca 880 milhões de websites envolvidos o PHP.&lt;/p&gt;

&lt;p&gt;Mas  por que o Php é tão usado usado?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WordPress e os CRM's:&lt;/strong&gt; o grande crescimento do Php vem  por causa dos CRM que existem feitos com Php o que facilita a vida de muita gente e faz com que ela seja muito usado, virando um em 5 sites consegues encontrar fácil um Site ou blog feito em um CRM PHP.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comunidade Forte:&lt;/strong&gt; PHP é uma linguagem com cerca de 30 anos e que nesse processo ela fascinou milhares de pessoas e deu dinheiro para várias pessoas que marcaram as suas vidas. E este vinculo proporcionou muitos apoiantes para esta comunidade do Elefante Azul, visto que o PHP é &lt;a href="https://dev.to/darioprazeres/o-que-e-open-source-4c92"&gt;Open Source&lt;/a&gt;, isso muda muita coisa na questão da manutenção, resolução de muitos bugs, gerando vasto suporte em fóruns, tutoriais e repositórios de código.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frameworks e Ferramentas Maduras:&lt;/strong&gt; Frameworks populares como Laravel, Symfony e CodeIgniter permitem o desenvolvimento de aplicações web robustas, seguras e escaláveis. Essas ferramentas aumentam a produtividade dos desenvolvedores, fornecendo soluções para muitos problemas comuns, como autenticação, roteamento e manipulação de banco de dados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desempenho e Escalabilidade Melhorados:&lt;/strong&gt; O PHP 7 trouxe um aumento de performance notável em comparação com versões anteriores, tornando-o competitivo em termos de velocidade e eficiência. Combinado com ferramentas de cache, como &lt;strong&gt;OPcache&lt;/strong&gt;, e servidores como &lt;strong&gt;Nginx&lt;/strong&gt; ou &lt;strong&gt;Apache&lt;/strong&gt;, o PHP pode ser otimizado para lidar com grandes volumes de tráfego. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Facilidade de Aprendizado e Uso:&lt;/strong&gt; O PHP é fácil de aprender para iniciantes, com uma curva de aprendizado relativamente baixa. A simplicidade na sintaxe e a capacidade de ser integrado diretamente em arquivos HTML tornam a criação de páginas dinâmicas muito acessível, e é facilmente integrada com as ferramentas do lado do Cliente.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Algum dia este Elefante vai cair?
&lt;/h2&gt;

&lt;p&gt;Listar os motivos do qual o PHP esta no topo desta árvore é uma tarefa impossível visto que existe muitos fenômenos por traz dela, mas a verdade é absoluta o PHP vai ficar ai durante muito tempo visto que apesar de ser funcional ela também tem entregado algumas coisas que te se pedido. &lt;br&gt;
Hoje a web tem indo por um caminho menos monolítico e mais para micro-serviços, o que pode ser uma desvantagem para o PHP, mas isso é ambíguo e não é absoluta e com certeza o PHP tem se adaptando bem para isso também. Então este elefante não vai cair tão fácil.&lt;/p&gt;

&lt;p&gt;Sim, podemos tirar tempo e estudar PHP e  valerá muito a pena, visto que tem mercado, mas devemos levar em contas outros fatores para decidirmos investir tempo em alguma coisa, no teu caso investirias tempo?&lt;/p&gt;

</description>
      <category>php</category>
      <category>laravel</category>
      <category>webdev</category>
      <category>community</category>
    </item>
    <item>
      <title>Como Refatorar Seu Código Com Muitos If-Else? Part 2</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Thu, 19 Sep 2024 21:05:11 +0000</pubDate>
      <link>https://dev.to/darioprazeres/como-refatorar-seu-codigo-com-muitos-if-else-part-2-2hln</link>
      <guid>https://dev.to/darioprazeres/como-refatorar-seu-codigo-com-muitos-if-else-part-2-2hln</guid>
      <description>&lt;p&gt;Como vimos no post &lt;a href="https://dev.to/darioprazeres/o-que-fazer-se-o-teu-codigo-tiver-varios-ifs-24g2"&gt;anterior&lt;/a&gt; existem várias estrategias de refatorar o codigo quando ele tem muitos If-Else, só para relembrar:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Early return&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2. Tabelas de decisão&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3. Polimorfismo&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;4. Delegação de funções&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Early Return
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Early Return&lt;/strong&gt;: é a abordagem que elimina as outras ramificações e concluído as decisões com retornos imediatos, mesmo se tais condições forem falsas. Como podemos ver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class CalculadoraDesconto
{
    public decimal CalculoDesconto(Cliente cliente, Pedido pedido)
    {
        if (cliente.IsPremium)
        {
            return pedido.QuantiaTotal &amp;gt; 100 ? pedido.QuantiaTotal * 0.1m : pedido.QuantiaTotal * 0.05m;
        }
        else
        {
            return pedido.QuantiaTotal &amp;gt; 200 ? pedido.QuantiaTotal * 0.15m : pedido.QuantiaTotal * 0.1m;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acima temos uma função com a capacidade de fazer um retorno rápido usando operador ternário, agora veremos o cálculo da Complexidade Ciclomática:&lt;/p&gt;

&lt;p&gt;Analise: temos 3 pontos de decisão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;if (cliente.IsPremium)&lt;/code&gt; (1 decisão),&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pedido.QuantiaTotal &amp;gt; 100&lt;/code&gt; (dentro do primeiro if),&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pedido.QuantiaTotal &amp;gt; 200&lt;/code&gt; (dentro do else).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cálculo:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;N = 3&lt;/code&gt;&lt;br&gt;
&lt;code&gt;E = 6&lt;/code&gt;&lt;br&gt;
&lt;code&gt;P = 1&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = E - N + 2P&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = 6 - (3) + 2(1) = 5&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Tabelas de Decisão
&lt;/h2&gt;

&lt;p&gt;Tabelas de decisão é uma técnica usada para simplificar a lógica condicional em código, especialmente quando se tem muitos if-else. Elas ajudam a mapear entradas para saídas, eliminando a necessidade de escrever várias condições aninhadas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class CalculadoraDesconto
{
    public decimal CalculoDesconto(Cliente cliente, Pedido pedido)
    {
        decimal descontoPercentual = ObterDescontoPercentual(cliente.IsPremium, pedido.QuantiaTotal);
        return pedido.QuantiaTotal * descontoPercentual;
    }

    private decimal ObterDescontoPercentual(bool isPremium, decimal quantiaTotal)
    {
        if (isPremium)
        {
            return quantiaTotal &amp;gt; 100 ? 0.1m : 0.05m;
        }
        else
        {
            return quantiaTotal &amp;gt; 200 ? 0.15m : 0.1m;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como vimos no código acima, repartiu-se as funções isso para que só depois se fizesse o calculo e não sou acabou por usar a abordagem Early Return na segunda função, o que esteticamente melhorou mas a sua complexidade ciclomática continua a mesma como podemos ver:  &lt;/p&gt;

&lt;p&gt;Analise: temos 3 pontos de decisão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;if (cliente.IsPremium)&lt;/code&gt; (1 decisão),&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pedido.QuantiaTotal &amp;gt; 100&lt;/code&gt; (dentro do primeiro if),&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pedido.QuantiaTotal &amp;gt; 200&lt;/code&gt; (dentro do else).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cálculo:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;N = 3&lt;/code&gt;&lt;br&gt;
&lt;code&gt;E = 6&lt;/code&gt;&lt;br&gt;
&lt;code&gt;P = 1&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = E - N + 2P&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = 6 - (3) + 2(1) = 5&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Polimorfismo
&lt;/h2&gt;

&lt;p&gt;O polimorfismo  é um dos pilares da programação orientada a objetos que permite que diferentes classes respondam de maneiras distintas a uma mesma mensagem (método). Ele possibilita que métodos de mesmo nome, em diferentes classes, tenham comportamentos variados, sem que o código cliente precise saber das diferenças.&lt;/p&gt;

&lt;p&gt;Para termos mais detalhes de como funciona veja o exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public abstract class Cliente
{
    public abstract decimal CalcularDesconto(Pedido pedido);
}

public class ClientePremium : Cliente
{
    public override decimal CalcularDesconto(Pedido pedido)
    {
        return pedido.QuantiaTotal &amp;gt; 100 ? pedido.QuantiaTotal * 0.1m : pedido.QuantiaTotal * 0.05m;
    }
}

public class ClienteNormal : Cliente
{
    public override decimal CalcularDesconto(Pedido pedido)
    {
        return pedido.QuantiaTotal &amp;gt; 200 ? pedido.QuantiaTotal * 0.15m : pedido.QuantiaTotal * 0.1m;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como vimos criou-se uma classe abstrata chamada &lt;code&gt;Cliente&lt;/code&gt; que tem um método chamado &lt;code&gt;CalcularDesconto&lt;/code&gt; este método é subscrito nas outras duas funções &lt;code&gt;ClientePremium&lt;/code&gt; e &lt;code&gt;ClienteNormal&lt;/code&gt;. Esta abordagem permitem fazer cálculos de forma independente e sem condições aninhadas.&lt;/p&gt;

&lt;p&gt;Analise: temos 3 pontos de decisão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Na classe &lt;code&gt;ClientePremium: pedido.QuantiaTotal &amp;gt; 100&lt;/code&gt; (1 decisão),&lt;/li&gt;
&lt;li&gt;Na classe&lt;code&gt;ClienteNormal: pedido.QuantiaTotal &amp;gt; 200&lt;/code&gt; (1 decisão).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cálculo:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;N = 1&lt;/code&gt;&lt;br&gt;
&lt;code&gt;E = 2&lt;/code&gt;&lt;br&gt;
&lt;code&gt;P = 1&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = E - N + 2P&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = 2 - (1) + 2(1) = 3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Esta abordagem requer mais organização por outro lado esta abordagem é mais propensa a escalabilidade. Sem falar que a Complexidade ciclomática é muito inferior que as duas anteriores.&lt;/p&gt;
&lt;h2&gt;
  
  
  Funções Delegadas
&lt;/h2&gt;

&lt;p&gt;Funções Delegadas (ou simplesmente Delegates) é um conceito de programação que permite tratar métodos como objetos. Em linguagens como C#, um delegate é uma referência a um método e pode ser passado como argumento para outras funções, armazenado em variáveis ou retornado de funções, tornando o código mais flexível e modular.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class CalculadoraDesconto
{
    private Func&amp;lt;Pedido, decimal&amp;gt; ObterCalculoDesconto(Cliente cliente)
    {
        if (cliente.IsPremium)
        {
            return pedido =&amp;gt; pedido.QuantiaTotal &amp;gt; 100 ? pedido.QuantiaTotal * 0.1m : pedido.QuantiaTotal * 0.05m;
        }
        else
        {
            return pedido =&amp;gt; pedido.QuantiaTotal &amp;gt; 200 ? pedido.QuantiaTotal * 0.15m : pedido.QuantiaTotal * 0.1m;
        }
    }

    public decimal CalculoDesconto(Cliente cliente, Pedido pedido)
    {
        var calcularDesconto = ObterCalculoDesconto(cliente);
        return calcularDesconto(pedido);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Analise: temos 3 pontos de decisão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;if (cliente.IsPremium)&lt;/code&gt; (1 decisão),&lt;/li&gt;
&lt;li&gt;Dentro do retorno da função delegada, há outra decisão para &lt;code&gt;pedido.QuantiaTotal&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cálculo:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;N = 2&lt;/code&gt;&lt;br&gt;
&lt;code&gt;E = 4&lt;/code&gt;&lt;br&gt;
&lt;code&gt;P = 1&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = E - N + 2P&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = 4 - (2) + 2(1) = 4&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;Algumas das complexidades ciclomáticas tiveram valores diferentes, umas iguais ao if-else aninhado e outras muito inferiores, não é regra mais isso dependerá muito do exercício que estas criar e levarás em conta a melhor abordagem. &lt;/p&gt;

&lt;p&gt;Podemos ver que a complexidade ciclomatíca ajuda muito analisar as abordagens e hoje já existem softwares que verificam esta complexidade. Como programador será difícil as vezes de verificar se este é a melhor forma de fazer, mas convenhamos de que códigos com muitos If-elses não são agradáveis de se ver por mais que esta a funcionar e que quando iremos refatorar será como pisar em ovos. Treine até o ponto de teres olho clinico de analisar a melhor via para ti e para os que poderão mexer nesse código.&lt;/p&gt;

</description>
      <category>refactoring</category>
      <category>oop</category>
      <category>csharp</category>
      <category>code</category>
    </item>
    <item>
      <title>Como Refatorar Seu Código Com Muitos If-Else? Part 1</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Wed, 18 Sep 2024 21:54:14 +0000</pubDate>
      <link>https://dev.to/darioprazeres/o-que-fazer-se-o-teu-codigo-tiver-varios-ifs-24g2</link>
      <guid>https://dev.to/darioprazeres/o-que-fazer-se-o-teu-codigo-tiver-varios-ifs-24g2</guid>
      <description>&lt;p&gt;Já olhou para o seu código e notou muitos if...else if...else, e se perguntaste como posso resolver isso de forma mais elegante?&lt;/p&gt;

&lt;p&gt;Todos sabemos que a estrutura de condição é algo que esta presente em 99,99% de todos os códigos, mas as vezes nos perguntamos se realmente tais estruturas deveriam ser implementada deste jeito, as vezes de forma imediata acabamos por não pensar em outras formas que seriam mais elegante para o nosso código (confesso que já fiz e as vezes faço).&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas o que é Ifs e Else?
&lt;/h2&gt;

&lt;p&gt;If's e Elses como digo, são na verdade estruturas de condições. Tais estruturas permitem a escolha de um grupo de ações e estruturas que serão executados, quando certa condição é verdadeira.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if(BomHumor == true)
{
   Console.WriteLine("Bom dia!");
}else
{
   Console.WriteLine("Quero Café!");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complexidade ciclomática
&lt;/h2&gt;

&lt;p&gt;A solução está em entender sobre a complexidade ciclomática do seu código, o que lhe permitirá saber quais estruturas e padrões deverás usar. Mas o que é a Complexidade Ciclomática?&lt;/p&gt;

&lt;p&gt;A complexidade ciclomática é uma métrica de software que indica a complexidade de um programa de computador com base na estrutura do seu código-fonte. Foi desenvolvida por Thomas J. McCabe em 1976 e é frequentemente usada para avaliar a facilidade de manutenção e sustentabilidade de um programa. A complexidade ciclomática ajuda a identificar partes do código que podem ser difíceis de entender e manter.&lt;/p&gt;

&lt;p&gt;A complexidade ciclomática é calculada contando o número de caminhos independentes no código, o que está relacionado ao grau de aninhamento e às estruturas de controle de fluxo, como condicionais (if, else), loops (for, while), e switches (switch-case). A fórmula para calcular a complexidade ciclomática é a seguinte:&lt;br&gt;
 &lt;code&gt;M = E - N + 2P&lt;/code&gt;&lt;br&gt;
onde: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;M é a complexidade ciclomática.&lt;/li&gt;
&lt;li&gt;E é o número de arestas no grafo de controle de fluxo.&lt;/li&gt;
&lt;li&gt;N é o número de nós no grafo de controle de fluxo.&lt;/li&gt;
&lt;li&gt;P é o número de componentes conectados (como número de partes independentes do código).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depois de falarmos tanto vamos para um exemplo em C# que usaremos o Padrão de Estratégia(falaremos em outra ocasião com mais detalhes):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class CalculadoraDesconto
{
    public decimal CalculoDesconto(Cliente cliente, Pedido pedido)
    {
        decimal desconto = 0;

        if (cliente.IsPremium)
        {
            if (pedido.QuantiaTotal &amp;gt; 100)
            {
                desconto = pedido.QuantiaTotal * 0.1m;
            }
            else
            {
                desconto = pedido.QuantiaTotal * 0.05m;
            }
        }
        else
        {
            if (pedido.QuantiaTotal &amp;gt; 200)
            {
                desconto = pedido.QuantiaTotal * 0.15m;
            }
            else
            {
                desconto = pedido.QuantiaTotal * 0.1m;
            }
        }

        return desconto;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse exemplo temos uma classe que calcula o desconto de um cliente normal e um premium e isso em função do seu pagamento "&lt;strong&gt;QuantiaTotal&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;Vamos aplicar a mesma fórmula para calcular a complexidade ciclomática:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Número de nós (N)&lt;/strong&gt;: Neste código, temos os seguintes pontos de decisão:&lt;/p&gt;

&lt;p&gt;A primeira decisão, que verifica se o cliente é premium.&lt;br&gt;
A segunda decisão, que verifica se o valor total da ordem é maior que 100.&lt;br&gt;
A terceira decisão, que verifica se o valor total da ordem é maior que 200.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Número de arestas (E)&lt;/strong&gt;: O número de arestas no grafo de controle de fluxo é igual ao número de transições entre os pontos de decisão. Cada ponto de decisão cria dois caminhos (um verdadeiro e outro falso), exceto o primeiro ponto de decisão que cria apenas um caminho. Portanto:&lt;/p&gt;

&lt;p&gt;A primeira decisão cria 2 caminhos.&lt;br&gt;
A segunda decisão cria 2 caminhos.&lt;br&gt;
A terceira decisão cria 2 caminhos.&lt;/p&gt;

&lt;p&gt;Número de componentes (P): Este código tem um único componente, pois não há partes desconectadas no fluxo de controle.&lt;br&gt;
&lt;code&gt;M = E - N + 2P&lt;/code&gt;&lt;br&gt;
&lt;code&gt;M = (2 + 2 + 2) - (3) + 2(1) = 6 - 3 + 2 = 5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A complexidade ciclomática do código é 5. Isso significa que o código tem 5 caminhos independentes possíveis, o que indica um nível moderado de complexidade. Manter a complexidade ciclomática baixa é importante para facilitar a manutenção e os testes do código.&lt;/p&gt;

&lt;p&gt;Como vimos no exemplo acima temos uma complexidade de 5, o que não é um caso de insatisfação. Mas ainda não respondemos a pergunta "Como Diminuir os Ifs e elses?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como Diminuir os ifs e elses?&lt;/strong&gt;&lt;br&gt;
Existem várias formas de fazer isso, levando em conta a tua disposição e o tempo de entrega do projecto. Falaremos de 4 estratégias, mas tais estratégias são muito abrangentes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Early return&lt;/strong&gt;: Elimina ramificações desnecessárias.&lt;br&gt;
&lt;strong&gt;2. Tabelas de decisão&lt;/strong&gt;: Substitui condições por dicionários ou regras.&lt;br&gt;
&lt;strong&gt;3. Polimorfismo&lt;/strong&gt;: Divide a lógica por tipo de cliente.&lt;br&gt;
&lt;strong&gt;4. Delegação de funções&lt;/strong&gt;: Encapsula a lógica de desconto, tornando o código mais modular.&lt;/p&gt;

&lt;p&gt;Descreveremos cada estratégia no próximo post, e será apresentados código moldados do exemplo acima.&lt;br&gt;
&lt;a href="https://dev.to/darioprazeres/como-refatorar-seu-codigo-com-muitos-if-else-part-2-2hln"&gt;Parte 2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Algumas linguagens estão a morrer!?</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Mon, 16 Sep 2024 21:18:01 +0000</pubDate>
      <link>https://dev.to/darioprazeres/algumas-linguagens-estao-a-morrer-49pb</link>
      <guid>https://dev.to/darioprazeres/algumas-linguagens-estao-a-morrer-49pb</guid>
      <description>&lt;p&gt;Se colocares no Google 'Linguagens de Programação' a quantidade de resultado serão sempre as linguagens mais populares como: C#, Java Script, Python e Java. (E mesmo não sendo da área muitos acabam por conhecer).&lt;/p&gt;

&lt;p&gt;Pela popularidade vale muito a pena aprender sobre tais linguagens, visto que são linguagens com uma grande quantidade de oferta no mercado. &lt;/p&gt;

&lt;p&gt;Mas como tudo para chegar onde estamos e nas novas linguagens tudo passou por um processo, e com a popularização das IA's fica ainda mais difícil pensar em estudar linguagens mais antigas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Algumas linguagens estão mesmo a morrer?
&lt;/h2&gt;

&lt;p&gt;Logo em primeira instância a resposta é sim. O que faz uma linguagem morrer é a quantidade de oferta por ela e de quantas pessoas usam ela para fazer seus projetos. &lt;/p&gt;

&lt;p&gt;Mas isso até um certo ponto chega a ser uma vantagem para aquela pessoa que deposita tempo para estudar tais linguagens, mas apesar disso ainda existe a barreira de encontrar projetos que realmente precisam de alguém para tal linguagem. &lt;/p&gt;

&lt;h2&gt;
  
  
  Faz sentido um iniciante estudar tais linguagens
&lt;/h2&gt;

&lt;p&gt;Meio complicado começar com tais linguagens, visto que quem estudam uma linguagem a tendência é estar á ganhar com essa ferramenta, mas estudando tais linguagens chega a ser uma barreira para entrar de forma rápida no mercado. Ao longo prazo se fores um programador mais experiente, traria mais credibilidade embora que existe muitas coisas que o levariam a estudar.&lt;/p&gt;

&lt;p&gt;Para classificar tais linguagens iremos analisar o tempo de criação e a quantidade de usuários. Como base para esta analise foi usado o &lt;a href="https://survey.stackoverflow.co/2023/" rel="noopener noreferrer"&gt;Stack Overflow Survey 2023&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Linguagens como: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assembly (1950s)&lt;/li&gt;
&lt;li&gt;VBA (1993)&lt;/li&gt;
&lt;li&gt;Pascal (1970)&lt;/li&gt;
&lt;li&gt;F# (2005) &lt;/li&gt;
&lt;li&gt;Delphi (1995)&lt;/li&gt;
&lt;li&gt;Objective-C (1984)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estes são alguns exemplos de linguagens que são antigas e que têm poucos usuários hoje em dia. Mas não quer dizer que elas não resolvem problemas e muito menos que deixaram de ser úteis. Por exemplo o F# e o VBA apesar de terem poucos usuários elas dão soluções para muitos programadores hoje em dia.&lt;/p&gt;

&lt;p&gt;Por outro lado, muitas linguagens não são populares devido à falta de visibilidade, e, além disso, a curva de aprendizado pode ser muito acentuada. No entanto, isso não acontece com Java, pelo que parece. Então, vale a pena aprender?&lt;/p&gt;

&lt;h2&gt;
  
  
  Vale a pena gastar tempo em linguagens com pouco mercado e muito antigas?
&lt;/h2&gt;

&lt;p&gt;Primeiramente esta é uma decisão pessoal, eu mesmo tive que estudar Assembly para fazer um trabalho escolar. o que deves levar em conta é o que desejas fazer com a tal linguagem, que projetos queres estar associado? Tens um projeto legado que precisas dar continuidade? &lt;br&gt;
Apesar da tecnologia e os usuários serem poucos muitas linguagens recebem manutenção da comunidade e seus amados usuários que não deixam ela morrer. Então enquanto a ver pessoa a programar naquela linguagem ela não morrerá.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>development</category>
      <category>dotnet</category>
      <category>coding</category>
    </item>
    <item>
      <title>O que é Open Source?</title>
      <dc:creator>Dário Prazeres</dc:creator>
      <pubDate>Sun, 15 Sep 2024 19:00:33 +0000</pubDate>
      <link>https://dev.to/darioprazeres/o-que-e-open-source-4c92</link>
      <guid>https://dev.to/darioprazeres/o-que-e-open-source-4c92</guid>
      <description>&lt;p&gt;Open Source (Código Aberto) é um modelo de desenvolvimento de software em que o código-fonte é disponibilizado publicamente para que qualquer pessoa possa visualizar, modificar e distribuir. Ao contrário do &lt;strong&gt;software proprietário&lt;/strong&gt;, onde o código é fechado e controlado por uma única entidade, o software open source promove a colaboração e a transparência, permitindo que desenvolvedores contribuam para melhorar o código ou adaptem-no para suas próprias necessidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qual a diferença entre Open Source e Free Code?
&lt;/h2&gt;

&lt;p&gt;A principal diferença entre &lt;em&gt;open source&lt;/em&gt; (código aberto) e &lt;em&gt;free code&lt;/em&gt; (código livre) está em como cada termo aborda o uso e a distribuição do software, embora muitas vezes eles sejam usados de forma intercambiável. Veja as distinções:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open Source (Código Aberto):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Focado na &lt;strong&gt;disponibilização do código-fonte&lt;/strong&gt; para qualquer pessoa, permitindo que ele seja estudado, modificado e redistribuído.&lt;/li&gt;
&lt;li&gt;O conceito de &lt;em&gt;open source&lt;/em&gt; está mais ligado ao lado prático e colaborativo do desenvolvimento, destacando os benefícios técnicos de compartilhar e aprimorar software de forma colaborativa.&lt;/li&gt;
&lt;li&gt;Há uma ênfase maior em licenças que promovem a colaboração e o desenvolvimento sustentável (ex.: Licença MIT, Apache, GPL).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Free Code (Código Livre):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Baseia-se na ideia de &lt;strong&gt;liberdade&lt;/strong&gt;, promovida pelo movimento de software livre (Free Software Foundation). O termo "livre" refere-se à liberdade de usar, estudar, modificar e compartilhar o software, &lt;strong&gt;não ao preço&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;O software livre segue as "quatro liberdades" definidas pela Free Software Foundation: (1) liberdade de usar o software para qualquer propósito, (2) liberdade de estudar como o programa funciona, (3) liberdade de distribuir cópias e (4) liberdade de modificar e distribuir suas melhorias.&lt;/li&gt;
&lt;li&gt;Embora seja "livre", o software pode ou não ser gratuito, mas a questão central é garantir a liberdade do usuário em controlar o software.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Em resumo, &lt;em&gt;open source&lt;/em&gt; enfatiza a colaboração e o aprimoramento técnico, enquanto &lt;em&gt;free code&lt;/em&gt; coloca um foco maior nas liberdades e direitos dos usuários em relação ao software.&lt;/p&gt;

&lt;p&gt;Exemplos de Open Source:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Linux - Um dos sistemas operacionais mais populares, utilizado em servidores e dispositivos móveis (como o Android). O código-fonte do Linux é aberto e está disponível para qualquer pessoa contribuir.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apache HTTP Server - Um dos servidores web mais utilizados no mundo, também desenvolvido e mantido pela comunidade open source.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MySQL - Um sistema de gerenciamento de banco de dados amplamente utilizado, especialmente em aplicações web.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Blender - Software de modelagem e animação 3D utilizado em várias indústrias, de filmes a videogames.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Exemplos de Free Software:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;GNU Compiler Collection (GCC) - Um compilador para várias linguagens de programação, desenvolvido como parte do projeto GNU, que adere aos princípios do software livre.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LibreOffice - Um conjunto de aplicativos de escritório que inclui editores de texto, planilhas, apresentações, e muito mais. É totalmente livre e permite modificação e redistribuição.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;VLC media player(VideoLAN Client) - é um software reprodutor de mídia portátil , multiplataforma, gratuito e de código aberto e servidor de streaming de mídia desenvolvido pelo projeto VideoLAN.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Firefox - Embora seja um projeto de código aberto, também segue os princípios do software livre, oferecendo um navegador web com liberdade para modificação e distribuição.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Como as Empresas que distribuem e desenvolvem ganham com esses softwares?
&lt;/h2&gt;

&lt;p&gt;Parece ser uma pergunta que não seja relevante, mas manter programadores á desenvolver certos projectos requer custos e a empresa para se manter no mercado precisa de valores e investimentos. &lt;/p&gt;

&lt;p&gt;Quando a empresa abre o código para um determinado software algumas pessoas que têm conhecimento na área ajudam a desenvolver tais softwares em troca de nada algumas vezes ou por que este software ajuda muito eles, mas vamos no que interessa e ver como algumas empresas ganham dinheiro com esses softwares.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Serviços e Suporte Técnico
Exemplo: Empresas como Red Hat (Linux) e Canonical (Ubuntu) oferecem suporte técnico, serviços de consultoria e manutenção para organizações que utilizam seus sistemas.
Como funciona: Embora o software seja gratuito, muitas empresas preferem pagar por suporte especializado, que inclui ajuda na instalação, configuração, solução de problemas e manutenção do software.&lt;/li&gt;
&lt;li&gt;Modelos de Negócio Freemium
Exemplo: GitLab e Elastic oferecem uma versão open source gratuita do software, mas cobram por funcionalidades adicionais em versões empresariais (como segurança aprimorada ou maior capacidade de escala).
Como funciona: A versão básica do software é gratuita, mas as funcionalidades premium, serviços de hospedagem ou integração com outras ferramentas podem ter um custo.&lt;/li&gt;
&lt;li&gt;Hospedagem e Infraestrutura
Exemplo: Empresas como GitHub e Automattic (que desenvolve o WordPress) oferecem serviços de hospedagem e infraestrutura para projetos open source.
Como funciona: Embora o software seja gratuito para baixar e utilizar, as empresas podem cobrar por serviços de hospedagem, backup e manutenção de servidores, oferecendo mais conveniência e escalabilidade.&lt;/li&gt;
&lt;li&gt;Consultoria e Customização
Exemplo: Muitas empresas especializadas em software livre, como a SUSE (distribuição Linux), ganham dinheiro oferecendo consultoria e customizações específicas para as necessidades de seus clientes.
Como funciona: Grandes empresas muitas vezes precisam de soluções personalizadas ou integrações específicas, e estão dispostas a pagar por desenvolvedores experientes que possam fazer essas modificações no software open source.&lt;/li&gt;
&lt;li&gt;Licenciamento Dual
Exemplo: MySQL usa um modelo de licenciamento dual, onde o software é oferecido sob uma licença GPL (livre), mas as empresas que desejam incorporar MySQL em software proprietário precisam pagar por uma licença comercial.
Como funciona: Empresas oferecem o software sob uma licença open source para a comunidade, mas cobram por uma licença comercial se o cliente quiser utilizar o software de forma fechada ou em produtos que não sejam open source.&lt;/li&gt;
&lt;li&gt;Marketplaces e Parcerias
Exemplo: Empresas como Red Hat e Canonical mantêm parcerias com provedores de nuvem como Amazon AWS, Microsoft Azure e Google Cloud para oferecer pacotes otimizados de software open source.
Como funciona: Elas recebem uma parte da receita gerada pelos serviços na nuvem ou pelos pacotes especializados que ajudam a otimizar o uso desses serviços.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Treinamento e Certificação&lt;br&gt;
Exemplo: Red Hat oferece treinamentos e certificações oficiais, como o Red Hat Certified Engineer (RHCE), que tem grande valor no mercado de TI.&lt;br&gt;
Como funciona: As empresas pagam por programas de treinamento e certificação para seus funcionários, o que ajuda a garantir que eles sejam proficientes no uso de software open source.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Publicidade e Patrocínios&lt;br&gt;
Exemplo: Alguns projetos open source são sustentados por doações, patrocínios de empresas e publicidade. O Firefox, por exemplo, é patrocinado pela Mozilla Foundation, que recebe doações e receita publicitária.&lt;br&gt;
Como funciona: Organizações sem fins lucrativos ou projetos pequenos podem ganhar dinheiro através de doações da comunidade ou grandes patrocinadores, além de parcerias com empresas. A titulo de exemplo a Microsoft se tornou um Patrocinador Platina da comunidade Open Source e da Linux Foundation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Conclusão:&lt;br&gt;
Empresas ganham dinheiro com software open source e free software oferecendo serviços, suporte, customizações, treinamentos e funcionalidades premium, ou cobrando por infraestrutura e integrações. Isso permite que elas mantenham o desenvolvimento contínuo do software, enquanto proporcionam valor adicional para seus clientes.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>linux</category>
      <category>microsoft</category>
      <category>development</category>
    </item>
  </channel>
</rss>
