• Prezados usuários,

    Por questões de segurança, a partir de 22/04/2024 os usuários só conseguirão logar no fórum se estiverem com a "Verificação em duas etapas" habilitada em seu perfil.

    Para habilitar a "Verificação em duas etapas" entre em sua conta e "Click" em seu nick name na parte superior da página, aparecerá opções de gestão de sua conta, entre em "Senha e segurança", a primeira opção será para habilitar a "Verificação em duas etapas".

    Clicando alí vai pedir a sua senha de acesso ao fórum, e depois vai para as opções de verificação, que serão as seguintes:

    ***Código de verificação via aplicativo*** >>>Isso permite que você gere um código de verificação usando um aplicativo em seu telefone.

    ***Email de confirmação*** >>>Isso enviará um código por e-mail para verificar seu login.

    ***Códigos alternativos*** >>>Esses códigos podem ser usados para fazer login se você não tiver acesso a outros métodos de verificação.

    Existe as 3 opções acima, e para continuar acessando o fórum a partir de 22/04/2024 você deverá habilitar uma das 03 opções.

    Tópico para tirar dúvidas>>>>https://forum.adrenaline.com.br/threads/obrigatoriedade-da-verificacao-em-duas-etapas-a-partir-de-24-04-2024-duvidas.712290/

    Atencionamente,

    Administração do Fórum Adrenaline

[TÓPICO DEDICADO] O papo é Programação/Desenvolvimento e áreas de TI afins

The_Ancient_Machine

know-it-all Member
Registrado



Esse tópico tem a intenção de ser algo mais focado, com compartilhamento de informações, artigos da área de TI, cursos, tutoriais, etc, em resumo, mais educacional. Sei que já tem várias discussões em tópicos com o de Salários ou o de Cursos gratuitos, mas acho interessante um lugar para divulgar informações das mais variadas. Eu pelo menos, tentarei manter o tópico atualizado.

Carreira em TI, áreas de atuação:

  • Serviços e Infraestrutura;
  • Redes;
  • Estratégia e Negócios de TI;
  • Gestão de TI;
  • Segurança da Informação;
  • DevOps e Nuvem;
  • Armazenamento e Dados;
  • Desenvolvimento;

iHcJHP.png


Linguagens de Programação

Resumo rápido das linguagens de programação.

Devo aprender...

Existem muitas linguagens por aí, e a maioria delas tem muitas sobreposições sobre domínios de problemas comuns. Em princípio, todas as linguagens sendo Turing completas, não há nada que impeça você de realizar qualquer tarefa em qualquer linguagem. Mas, na prática, pode haver uma diferença de ordens de magnitude (estamos falando de 100-1000x aqui) em quanto tempo leva para fazer um projeto em uma linguagem adequada versus uma não adequada. Entre as alegrias que você pode experimentar ao escolher a linguagem errada estão:
  • Luta contra a sintaxe passivo-agressiva que o incomoda com detalhes irrelevantes de baixo nível
    • Você não deve subestimar a importância das decisões sintáticas simples e do açúcar sintático. Aprender uma linguagem e desenvolver softwares exige muito empenho e trabalho árduo. Se você não gostar da sua linguagem, isso destruirá sua motivação e será muito difícil chegar a qualquer lugar.
  • Ter reinventado a roda porque ninguém se incomodou em portar a biblioteca crítica X
  • Ter que descobrir por conta própria porque todos os guias para o tópico X são escritos para outras linguagens (traduzir código de exemplo que você não entende é muito divertido!)
  • Comprometendo centenas ou milhares de horas de trabalho em um projeto, apenas para perceber que você não pode mais melhorar o desempenho ou um conjunto de recursos por causa das decisões de design que sua linguagem fez, e se você quiser progredir, sua única esperança é reescrever tudo em outra linguagem primeiro
  • Gastar tempo e esforço aprendendo uma linguagem apenas para perceber o mercado de trabalho, pois é uma merda (se você tem um objetivo de carreira em vez de ser um amador)
Para um novato, um resumo dos recursos da linguagem não ajudará muito. Mesmo algo tão básico como funcional vs. procedural é irrelevante se você nunca programou e não entende bem o que essas coisas significam. Se você está apenas começando, deve ter cuidado com que ouve. Existem muitas linguagens por aí, e muitas delas são muito boas para resolver certos conjuntos de problemas. Mas poucos são adequados para um novato (como um novato, você aprenderá não apenas a linguagem, mas também computação geral). A última coisa que você não vai fazer é ser enganado por algum fanboy envolvido em guerras linguísticas.

Se você for experiente (regra geral: você criou um software útil e foi pago por ele em mais de uma linguagem?), A escolha se torna muito mais fácil. Com base nas linguagens que você conhece, provavelmente já terá um gostinho de determinados recursos. Considere as linguagens com os quais você já está familiarizado - o que eles fazem bem? O que você mudaria? A linguagem que você está pensando em aprender invariavelmente será melhor em alguns aspectos e pior em outros do que aqueles que você já conhece. A questão é se os profissionais fornecem o suficiente para justificar os contras e o esforço extra de aprender uma nova linguagem.

Em última análise, você deve aspirar a aprender a programar, não a aprender uma determinada linguagem. A saber, toda a programação gira em torno de fazer o computador fazer coisas: o computador conhece um pequeno conjunto de "coisas" fundamentais atômicas que já pode fazer. É sua tarefa, como programador, definir como essas tarefas fundamentais devem ser combinadas entre si para executar novas tarefas. Dependendo de como as tarefas fundamentais de uma linguagem são escolhidas, e quais regras governam sua combinação, algumas tarefas serão tornadas fáceis ou difíceis, intuitivas ou não intuitivas.

Intrínseco vs. Extrínseco

Ao comparar os méritos comparativos das linguagens, podemos dividi-los em dois grupos principais: propriedades extrínsecas e propriedades intrínsecas. As propriedades intrínsecas são propriedades da própria linguagem, como a sintaxe. Propriedades extrínsecas são tudo o que não faz parte da própria linguagem: a comunidade, os tutoriais disponíveis, as bibliotecas que foram escritas, como a linguagem e seus usuários são percebidos, e assim por diante. Basicamente, as propriedades intrínsecas são o que você obtém se estiver usando a linguagem em um ambiente vago, com nada além de uma descrição da sintaxe e um compilador básico.

Linguagens não existem em uma vaga, mas considera- las em uma vaga pode informar a decisão maior de qual linguagem vale o seu tempo. Portanto, fazemos a distinção entre aspectos intrínsecos e extrínsecos pelas seguintes razões:
  • As propriedades intrínsecas são constantes no tempo (pelo menos até que uma nova versão da linguagem seja lançada). As propriedades extrínsecas são muito inconstantes (quem sabe qual linguagem será popular em cinco anos?).
  • As propriedades intrínsecas influenciam as propriedades extrínsecas, mas não vice-versa (a exceção é quando os designers de linguagem ouvem o que a comunidade deseja para a versão subsequente da linguagem).
Geralmente, sua decisão deve estar enraizada nos intrínsecos, já que, como você pode ver, eles são o fator-chave e são aqueles aos quais você ficará preso enquanto usar a linguagem. Mas isso não quer dizer que os fatores extrínsecos não sejam importantes ou devam ser ignorados (na verdade, esse é um grande erro).

Propriedades intrínsecas

Para a maioria das linguagens projetadas sem um propósito específico em mente, os intrínsecos serão bastante semelhantes. Eles não serão falhas gritantes ou melhorias radicais. Quando as linguagens são projetadas com um propósito específico em mente, elas tendem a ter mudanças mais drásticas. Normalmente, se uma linguagem especializada é projetada a partir de um domínio de problema, é muito difícil lidar com esse domínio de problema usando linguagens mais generalistas.

Sintaxe

A sintaxe determina a aparência da instrução que você escreve em um idioma. Você deve se perguntar:

  • É fácil lembrar os comandos neste idioma?
  • É fácil compreender a sintaxe?
  • Posso codificar apenas com um editor de texto básico ou é impraticável sem um programa utilitário sofisticado que o ajude destacando o código ou gerando segmentos de código repetitivos?
  • Existem muitas palavras-chave?
  • É legível?
Açúcar sintático

Açúcar sintático são as diferentes abreviações que uma linguagem pode ter, como ser capaz de dizer em x++ em vez de x = x + 1.

Se você costuma fazer as coisas que o açúcar do seu idioma tenta facilitar, isso pode tornar sua vida muito mais fácil.

Se o açúcar não ajudar, é claro que você não pode usá-lo, mas lembre-se de que ignorar o açúcar ruim não fará com que ele desapareça. Se sua linguagem tem algum açúcar retardado que todo mundo adora usar por algum motivo, isso pode tornar a leitura do código de outras pessoas um inferno (este também é um exemplo de intrínsecos influenciando extrínsecos).

Paradigma (imperativo vs. declarativo)

A humanidade descobriu até agora duas maneiras de especificar instruções para um computador.
  • A abordagem imperativa fornece ao computador uma lista de instruções. O computador executa os comandos na ordem fornecida (embora alguns dos comandos em si possam envolver a alteração da ordem inicial). Por exemplo, para calcular a circunferência de um círculo, você diria ao computador para primeiro tirar o raio, depois multiplicá-lo por dois para obter o diâmetro, depois multiplicá-lo por um valor aproximado pré-calculado de pi e, em seguida, imprimi-lo na tela. Existem dezenas, senão centenas de linguagens imperativas como C, C ++, Java e muitas outras.
  • A abordagem declarativa simplesmente define o que cada coisa significa e permite que o computador junte as definições. Pode ser difícil fazer os cálculos acontecerem em uma determinada ordem, mas como nenhuma ordem é especificada, fazer paralelização de tarefas para melhorar o desempenho pode ser muito fácil. Para a circunferência, você daria ao computador a fórmula da circunferência, a fórmula para aproximar pi (por exemplo 22/7), e pediria a circunferência dado um raio. Observe como eu não digo "imprimir na tela" - a comunicação com o usuário também pode ser um problema com linguagens declarativas. Na prática, os principais representantes dessa classe são linguagens funcionais como Haskell ou Lisp.
Em teoria, esses dois estilos são exatamente equivalentes em termos de quais programas é possível escrever neles. Mas, na prática, eles são muito diferentes e podem ter um grande impacto na facilidade de uma determinada tarefa.

Historicamente, as linguagens imperativas têm dominado e são consideradas mais fáceis de entender. Talvez a ideia de dar a alguém instruções passo a passo explícitas seja mais intuitiva para a mente humana do que sistemas de funções, mas, independentemente, a maioria das pessoas acham as linguagens imperativas mais fáceis, e o interesse por linguagens funcionais frequentemente está relacionado à aptidão matemática. Se você não sabe o que está fazendo, provavelmente deve começar com uma linguagem imperativa.

Em um nível mais profundo, há uma observação interessante sobre ter dois paradigmas juntos: Existem maneiras de essencialmente chamar módulos escritos em um estilo funcional a partir de um programa imperativo e vice-versa. Provavelmente, é melhor aninhar a lógica declarativa dentro da lógica imperativa: as duas vantagens da lógica imperativa são a capacidade de impor uma sequência e a fácil interação com o usuário. Ambos são mais poderosos quando feitos no nível superior do programa. As vantagens da lógica funcional envolvem flexibilidade na solução de um problema bem definido - portanto, são adequadas para atuar como um módulo especializado.

Em muitas linguagens imperativas modernas, é realmente possível escrever uma lógica quase declarativa de estilo funcional (em particular, procure por "expressões lambda"). Como a linguagem não foi projetada com programação puramente funcional em mente, isso pode ser impraticável (difícil de depurar, desajeitado de digitar, lento e não otimizado), mas em alguns subconjuntos de problemas pequenos, mas importantes, você pode realmente misturar os dois paradigmas.

Programação orientada a objetos (OOP)

A lógica básica do OOP é:
  • Tudo é um objeto pertencente a uma classe de objetos
  • As classes têm suas próprias variáveis (campos) e comportamentos (métodos)
  • As classes são taxonomicamente relacionadas umas às outras e podem herdar e estender a funcionalidade umas das outras (herança)
Com um projeto OOP, uma quantidade significativa de trabalho é gasta em hierarquias de classes, definindo qual classe tem quais componentes e de onde herda. A funcionalidade real do programa deve fluir naturalmente a partir deles. É preciso analisar o problema em unidades compartimentadas que interagem umas com as outras.

Essa forma de pensar é adequada para alguns problemas. Por exemplo, ao programar uma GUI, pode ser conveniente representar todas as barras de rolagem, botões, caixas de seleção e campos de texto como classes com comportamentos compartilhados. Em outras ocasiões, adicionar OOP pode dificultar uma coisa trivial.

Rigor

Existe uma grande variação entre as linguagens em termos de quantos detalhes eles exigem. Digamos que você queira definir uma variável para armazenar um número. Algumas linguagens são muito pedantes, você deve especificar que tipo de número, se valores negativos são possíveis, qual deve ser o valor máximo, se é um número inteiro ou decimal, e quantos dígitos armazenar se for decimal. Outras linguagens apenas permitem que você defina seu número e nunca faça perguntas, tentando fazer suposições razoáveis sobre todas as coisas que você deixou de fora.

O alto rigor pode ser útil de duas maneiras. Primeiro, dá a você melhor controle sobre exatamente o que o programa está fazendo. Isso ajuda na otimização: se você sabe que uma variável nunca armazenará um número maior do que 255, não faz sentido usar um formato maior e desperdiçar memória. Em segundo lugar, eles o forçam a pensar constantemente em cada detalhe de seu código e podem ajudar a reduzir bugs (mas não necessariamente). Exemplos: C, C ++, Java, Haskell (funcional).

O baixo rigor é bom quando você tem apenas uma ideia simples e deseja colocá-la em funcionamento rapidamente, sem se prender a detalhes. Infelizmente, alguns dos detalhes que você não especificou acabarão por causar erros sutis que serão difíceis de consertar. Exemplos: Python, JavaScript.

Linguagens estritas tendem a ser boas para software de nível de produção onde a confiabilidade, a aderência às especificações e um alto nível de otimização são necessários. Linguagens não estritas são boas para prototipar e hackear scripts one-shot.

Propriedades extrínsecas

Documentação


Sempre verifique quais livros, tutoriais e fóruns de ajuda (ou quantas perguntas no StackOverflow) existem para um idioma. Pode ser a melhor linguagem já criada, mas não ser capaz de fazer perguntas simples no Google rapidamente pode realmente retardar seu aprendizado.

Bibliotecas

Exercícios de aprendizagem à parte, hoje em dia é estúpido escrever um programa do zero. Muitas funcionalidades comuns, como E/S de arquivo, trabalho com matrizes, classificação, funções matemáticas, gráficos, rede, etc, já foram implementadas e, esperançosamente, empacotadas como bibliotecas. Você não deve reinventar a roda.

Pode ser difícil avaliar o ecossistema de uma linguagem, mas tente pesquisar coisas como "Como fazer X na linguagem Y" no Google - você obtém resultados curtos e fáceis de ler que usam bibliotecas bem mantidas e bem documentadas, ou você pegar um monte de gente escrevendo seus próprios hacks ilegíveis?

Exemplos:
  • Por um tempo, C# foi uma escolha muito boa para fazer jogos graças ao XNA (infelizmente a Microsoft parou de desenvolvê-lo quando o Windows 8 foi lançado). O XNA lida com muitas coisas para você, como entrada de teclado / gamepad, gráficos 2D / 3D, som, ciclos de atualização do jogo, taxa de quadros, ativos e assim por diante, e tem funções bem documentadas e muitos tutoriais bons. C# por si só é uma linguagem decente, mas não tão boa - XNA foi o que permitiu que muitos jogos independentes como Terraria e Bastion fossem feitos com uma equipe pequena.
  • Python tem algumas bibliotecas que são tão boas que fazer webcraping (BeautifulSoup, etc) ou computação científica (SciPy) em outra coisa é simplesmente estúpido neste ponto.
Plataforma

Em princípio, qualquer linguagem pode ser executada em qualquer plataforma, mas é completamente diferente se sua estrutura favorita está disponível em qualquer lugar (por exemplo, embora C++ funcione em qualquer lugar, o DirectX é somente para Windows), qual será o desempenho e quanto suporte está disponível. Algumas plataformas são dominadas por uma linguagem:
  • A base para aplicativos Android é Java. Você pode fazer com que outros executem, mas todos os tutoriais que encontrar estarão em Java. Atualmente está em migração para o Kotlin.
  • Se você quer programar para iOS, você tem que usar Objective-C ou Swift (aliás, uma linguagem inútil para qualquer outra coisa).
  • Webapps geralmente são feitos em Python (Django), Ruby (com Rails) ou JavaScript.
  • Os jogos de navegador usam HTML5.
Desempenho

Vou colocar isso em extrínseco, porque depende muito da implementação. Geralmente, qualquer coisa com uma VM terá um impacto no desempenho. Qualquer coisa interpretada sempre será lenta. Coleta de lixo, digitação dinâmica, tudo torna as coisas mais lentas. Felizmente, os computadores hoje em dia são tão rápidos que o desempenho geralmente não importa. Mas em aplicativos de alto desempenho (jogos 3D, criptografia, computação estatística) você precisa de uma linguagem adequada para programação de sistemas. Linguagens funcionais às vezes podem ser muito mais rápidas do que imperativas, porque você pode otimizar algumas coisas muito bem nelas.

Percepção

Se você quer programar como um hobby, isso é irrelevante, mas se você quer conseguir um emprego, vale a pena pesquisar cuidadosamente o que está em demanda e onde. Por exemplo, Python, C # e Java são os 3 principais se você deseja escrever bots de trader em Wall Street. Java e C# são escolhas de carreira de merda, porque você competirá com milhões de terceiros por cargos de baixa remuneração.

Comunidade

Algumas linguagens parecem atrair mais fanboys do que outras. Por exemplo, Ruby já foi famoso por seus fãs hipsters, e a maioria dos usuários do Rust parece mais preocupada com a justiça social do que com o desenvolvimento de software.

O que mais se usa por aí?

Existem MUITAS linguagens, e há constantes discussões em fóruns sobre a melhor linguagem, sem uma linguagem geral acordada. Abaixo está uma lista de linguagens frequentemente votados a favor/contra e explicações simples de porque eles são amados/odiados.

  • C - Provavelmente a linguagem mais aceita. Embora haja muitos que afirmam que C é datado, a maior parte do UNIX/Linux é escrita (e ainda está sendo escrita) em C. TempleOS foi escrita na própria versão de C de Terry; HolyC.
  • C++ - Para quem gosta de C, mas acha que está desatualizado, C++ existe e é muito popular no mundo real.
  • Haskell/Lisp/Linguagens funcionais - Linguagens funcionais são muito úteis para mudar a maneira como você pensa sobre programação. Escrever em uma linguagem funcional irá forçá-lo a pensar mais sobre seu código e projetar funções/algoritmos muito mais agradáveis. No entanto, com isso dito, as linguagens funcionais não representam com precisão como o computador funciona, e isso tem seus problemas.
  • Python - Uma linguagem muito controversa. Alguns acreditam que é uma boa linguagem para iniciantes. Outros acreditam que é a pior linguagem de programação em todos os aspectos. Ele tem muitas falhas e muitas razões para não ser usada, no entanto, é muito fácil para alguém com pouco conhecimento começar a escrever código (o que pode ou não ser uma coisa boa).
  • JavaScript/Node.js - Recomendado por aqueles que odeiam Python, para aqueles que são novos. Ainda é uma linguagem fácil para iniciantes e tem muitas falhas, mas perto do Python parece ouro.
  • Assembly - Recomendado por masoquistas porque, como o Gentoo, você precisa ser um louco completo para usá-lo (veja como escrever hello world em assembly ). Provavelmente a linguagem com o melhor desempenho possível, pois é 1:1 com instruções de código de máquina, porém muitas pessoas serão rápidas em apontar que se você fizer algo ineficiente, outras linguagens podem ser mais rápidas, pois seu compilador não fará o mesmo erro.
Novamente, cada uma dessas linguagens está sujeita a debates sobre se é ou não boa ou ruim, e na maioria das vezes o problema que você está tentando resolver normalmente ditará qual linguagem você deve usar.

Linguagens individuais

ADA

  • Projetado para detectar o máximo de erros possível, o mais rápido possível
  • Sintaxe semelhante a Pascal
  • Excelente para programação embarcada, de sistemas ou em tempo real, mas adequado para praticamente qualquer coisa
  • Programação por contrato em Ada 2012
  • Muitos recursos avançados, como tarefas, genéricos e exceções foram integrados à linguagem na década de 80
  • Bom suporte para provar a correção do código, especialmente na variante SPARK
  • Código detalhado
  • Falta de tutoriais atualizados e documentação para iniciantes
  • Não é muito usado fora das indústrias de defesa e aeroespacial
Assembly
  • Conciso, mas pedante pra caralho.
    • Programas pequenos são simples de escrever, mas os maiores tornam-se uma bagunça complicada e complexa na maioria dos casos.
  • Baseado no ASM da Motorola, tantas variantes, tanto download de porta serial.
  • O x86 ASM também é muito legal, também conhecido como PC ASM. Complicada demais porque a sintaxe AT&T ASM é o padrão UNIX, e a sintaxe Intel ASM é o padrão DOS e eles são tão próximos, mas são as pequenas coisas que são diferentes. Diferente o suficiente para ser um pé no saco.
  • Não é portátil. Isso é o mais próximo do metal que você consegue sem escrever os códigos operacionais reais da máquina. Cada instrução é um mapeamento 1:1 para um opcode da máquina. Cada arquitetura de CPU possui um conjunto diferente de instruções.
  • Atualmente, Intel x86-64 ASM é o maior conjunto de instruções.
BASIC
  • > Ele pode fazer qualquer coisa que C pode fazer
  • Muitas implementações proprietárias, apenas algumas FOSS decentes.
  • Ainda mais lento que C
  • > muh goto
  • muh programação excel
C
  • Projetado para ser uma "linguagem assembly portátil"
  • Linguagem pequena e simples, cujas partes se compõem bem
  • Biblioteca padrão muito pequena
    • Você precisará implementar a maioria das coisas não triviais por si mesmo.
  • Lingua franca para grandes bibliotecas e APIs
    • Se não tem API C, provavelmente é uma merda
  • Compiladores muito maduros que produzem código extremamente rápido e bem otimizado
  • Implementações para praticamente todas as arquiteturas ou plataformas imagináveis
    • Se algum hardware não tiver um compilador C para ele, provavelmente isso não importa em primeiro lugar
  • Muitas coisas são deixadas indefinidas para que as implementações possam fazer a melhor escolha possível em termos de velocidade
  • Fácil de cometer erros perigosos no código
    • Você mesmo gerencia seus próprios recursos
    • Você realiza suas próprias verificações de segurança, se quiser
    • Absolutamente nada de mãos dadas
    • Comportamento indefinido onde tudo pode acontecer
  • O forçará a aprender muito sobre problemas de memória e de nível inferior
  • Também pode ser usado para programação de aplicativos
C++
  • Linguagem muito, muito ampla e cheia de recursos
  • Considerado prolixo às vezes
  • C, mas com OOP no topo e um grande conjunto de bibliotecas enormes
  • Padrão da indústria para software comercial amplamente utilizado
  • Considerado perigoso de escrever porque, como C, não há gerenciamento de memória
    • Existem coletores de lixo para C ++
  • Quase tão rápido quanto C
  • Compilar leva muito tempo por causa do sistema de ligação arcaico, é basicamente o que xkcd Compiling mostra
compiling.png

  • Toneladas de recursos muito poderosos, muitas maneiras de fazer as mesmas coisas
    • O cara cujo código você está lendo sempre escolhe o pior
  • Apesar de ser chamado de C/C++ com frequência, um bom C++ é completamente diferente de um bom C
  • O designer da linguagem tinha o seguinte a dizer sobre isso: "C torna mais fácil atirar no próprio pé; C ++ torna mais difícil, mas quando você o faz, estoura toda a sua perna"
C#/.NET
  • O que Java deveria ter sido
  • Muito semelhante ao Java, mas corrige muitos dos problemas do Java, que o Java está preso devido à compatibilidade com versões anteriores
  • Funciona em .NET, que é apenas Windows e Mono, que é FLOSS e multiplataforma.
  • .NET é uma ótima biblioteca e agora de código aberto
  • LINQ é uma maneira muito poderosa de trabalhar com coleções (listas/conjuntos/matrizes) e bancos de dados (se mapeados para coleções)
  • Visual Studio/ReSharper é um IDE muito bom para C#
  • Terceira linguagem mais popular no StackOverflow, comunidade muito ativa com muitos especialistas
Mono
  • Alternativa aberta ao .NET iniciada quando o .NET era de código fechado (estrutura Mono que permite executá-lo em GNU/Linux)
  • Implementa quase todo o .NET, mas deixa de fora muitos WinForms e WPF (coisas de GUI)
  • Situação legal duvidosa porque partes da linguagem estão sobrecarregadas com a patente da MS
  • Adquirido pela Microsoft, agora com segurança legal.
Erlang
  • Torna a simultaneidade/multithread uma merda muito fácil.
  • Usa uma VM especializada que tem dificuldade em processar números e ainda mais em lidar com strings.
Golang
  • Também conhecido como Go
  • Criado por Rob Pike (um dos caras originais do UNIX) e alguns outros engenheiros do Google
  • Mascote parece suspeitamente semelhante à mascote Plan9
  • É basicamente C com extras mínimos, mas com coleta de lixo e alguns recursos básicos da linguagem para torná-lo realmente bom para programação simultânea (fazer várias coisas ao mesmo tempo). Não tão rápido quanto C, no entanto.
  • A estrutura do diretório deve ser definida de uma determinada maneira para construir projetos
  • Tem um tutorial interativo em seu site e uma ferramenta go que permite que você extraia do GitHub e empacote em Go, etc.
  • Usa Goroutines para simultaneidade, que são como threads leves que se encaixam em threads para obter mais eficiência. O compilador lida com os threads para você.
Haskell
  • Extremamente expressivo, oferece recursos de abstração próximos ao Lisp
  • Concentra-se em programação funcional pura e sistemas de tipo
  • Linguagem muito rígida, se você fizer algo errado, provavelmente nem mesmo compilará
  • Leva muito tempo para aprender completamente
  • Pode ser difícil de manejar para problemas inerentemente com estado
Java
  • Muito portátil; compila para bytecode, que é então executado pela JVM
  • A linguagem que tornou OOP comum
  • Algumas decisões iniciais de design causaram problemas, mas não podem ser corrigidas devido à compatibilidade com versões anteriores
  • Muito grande e empresarial
  • Bibliotecas enormes e muitos softwares são escritos nela, incluindo código de trabalhos acadêmicos
  • APIs muito verbosas
  • Recebe muitas críticas indevidas
    • Costumava ser lento há muitos anos, mas hoje em dia é muito rápido
  • Pode ser complicado para escrever às vezes
  • Tanto a linguagem em si quanto as bibliotecas centrais são muito burocráticas
  • É ridicularizado pelos padrões de design que as pessoas usam com ele e pelos esquemas de nomenclatura detalhados frequentemente usados
    • Exemplo: public abstract class AbstractSingletonProxyFactoryBean
JavaScript / Node.js
  • Linguagem de programação da web, a maioria dos navegadores vem com um console JS nativo
  • Normalmente usado em conjunto com HTML/CSS
  • Bom para aprender como a programação funcional funciona com digitação de código menos explícita (por exemplo, as variáveis são assumidas como strings ou inteiros)
  • Pode ser usado para fazer aplicativos de desktop (embora lentos se não forem otimizados de forma adequada) e código do lado do servidor com Node.js
  • Leia JavaScript: The Good Parts de Douglas Crockford para obter uma melhor compreensão de como essa bagunça de uma linguagem pode ser usada de forma eficiente e consistente
  • JSLint é uma excelente maneira de verificar se o seu JS é uma merda ou não
  • Os recursos ES6/ES7 estão prontos e disponíveis para uso em navegadores modernos com Babel ™
Lisp
  • Família de linguagens de programação que possuem as características mais notáveis de usar notação de prefixo totalmente entre parênteses e serem homoicônicas.
  • Inicialmente apareceu em 1958.
  • Diz-se que o Lisp muda a maneira como se pensa sobre programação, porque expõe a árvore de sintaxe abstrata ao programador para modificação e extensão da própria linguagem para se adequar às necessidades específicas do domínio de uma tarefa particular.
  • Sem limite (visível) para abstração
Scheme
  • Baseado em Lisp com foco no minimalismo e na simplicidade
  • Popular em muitas universidades e apresentado no SICP
  • Ótimo para programas com base em recursão e iteração
  • Carece de portabilidade e tem poucas implementações
Mathematica
  • Linguagem bonita com recursos de nível extremamente alto para matemática
  • Capacidades matemáticas simbólicas incríveis (resolução de equações, prova de teoremas)
  • A documentação oficial tem muitos exemplos interessantes de matemática
  • Comum com físicos, matemáticos
  • Mensagens de erro são terríveis
  • Proprietário
  • O criador é um megalomaníaco insano
Matlab/Octave
  • Projetado originalmente para trabalhar em matrizes e álgebra linear
  • Funções de matriz muito rápidas
  • IDE muito completa com boas opções de visualização e kits de ferramentas
  • Normalmente usado para engenharia, aprendizado de máquina e computação científica
  • Linguagem dinâmica interpretada
  • Toneladas de código de merda por aí, escrito por alunos de pós-graduação sem noção
  • Octave é um compilador FOSS que aceita um superconjunto da sintaxe do Matlab, com pequenas diferenças (menos inchaço e custo muito menores).
Pascal
  • Sistema de tipo muito forte, seguro e com recursos
  • Sintaxe simples que prefere palavras a símbolos e é altamente estruturada
  • Projetado originalmente para o ensino e muito fácil de aprender
  • Compiladores rápidos de passagem única
  • Cobre bem os conceitos de baixo e relativamente alto nível
  • Não é mais muito popular, você não encontrará um emprego usando-o e faltam recursos de aprendizagem mais recentes para isso
  • A sintaxe é considerada muito detalhada por alguns
  • Preconceito herdado de problemas com versões anteriores da linguagem
  • Grande número de dialetos modernos variados e compiladores podem confundir os recém-chegados
Perl
  • Linguagem somente para escrita
  • Sintaxe muito tácita e ilegível
  • Chamada de "motosserra do exército suíço" por sua versatilidade
  • Lento para tarefas não processuais
  • A gramática dinâmica torna divertido escrever um código impossível
  • Odiado por fanboys de Python em todo o mundo
  • Pode ser OO, imperativo e ainda possui elementos funcionais.
  • Evita o uso de palavras-chave reservadas, prefere rabiscos de teclado (&, $, @, ->, etc.)
  • Saindo da moda
  • Excelente para concursos de golfe de código ou ofuscação
PHP
O PHP tem uma péssima reputação entre os desenvolvedores. Existem muito mais linguagens comercializáveis por aí que farão tudo o que você gostaria de fazer em PHP. Apesar da opinião ruim de muitos, a linguagem continua em desenvolvimento ativo. Nos últimos anos, surgiram muitos novos recursos e uma quantidade considerável de tentativas de limpeza de código legado.

  • Uso opcional de argumentos estritos e tipos de retorno (PHP 7.1+)
  • Escolha para implementar padrões de projeto procedurais, funcionais ou OOP
  • PHP 7 ainda é lento em comparação com Java
  • Não foi projetado para durar muito
  • Pode consumir muita memória, especialmente ao usar estruturas comunitárias
  • Boa documentação e uma grande comunidade de desenvolvedores ativos
  • Você será ridicularizado por outros desenvolvedores por usá-lo
Python
  • Muito fácil de ler e simples (e divertido) de escrever
  • Biblioteca padrão enorme e versátil (uma filosofia que eles chamam de "baterias incluídas")
  • Meio lento
  • Usa recuo de espaço em branco para separar blocos lógicos
  • Excelente para scripts
  • Considerada a antítese de Perl
  • OO/imperativo, tem alguns elementos funcionais, mas o designer tem uma estranha obsessão em removê-los
  • É bom começar e programar, mas depois de alguns anos, você começará a querer brincar com algumas das coisas que o Python sacrifica, como ponteiros e velocidade.
R
  • Feito para computação estatística, se destaca nisso, mas não é muito bom para qualquer outra coisa
  • Bibliotecas como ggplot criam gráficos bonitos e de primeira linha
    • Bibliotecas R são a vanguarda da visualização de dados
  • Rstudio é um ambiente muito bom
  • Os frames de dados são tipos de dados nativos fortemente tipados para trabalhar com dados tabulados
  • Muito comumente usado na academia, ciência de dados, análise, etc.
  • Fodidamente impossível pesquisar algo sobre isso no Google
  • O namespace mais poluído e inconsistente conhecido pela humanidade
Ruby
  • Foco na felicidade do programador
    • A ideia de felicidade do criador pode ser muito diferente da sua
  • Totalmente orientado a objetos
  • Código elegante e legível
  • Tão lento quanto qualquer linguagem dinâmica será
  • Excelente para programação de uso geral, scripts, processamento de texto e desenvolvimento web
  • Base de usuários cheia de descolados e fanboys insuportáveis
  • Ser substituído por linguagens menos desagradáveis que têm as mesmas vantagens (Python e JS)
Rust
  • Desenvolvido por Mozilla
  • Também conhecido como rust-lang
  • Como Golang, também é projetado para programação simultânea
  • Primeira versão estável no final de 2014
Vala
  • A resposta da fundação GNOME ao C++
  • Compila para código C, que pode então ser compilado com um compilador C normal
  • Usa as bibliotecas GTK e GObject (GNOME)
  • Tem elementos de C++ e C#, mas é mais lógico

l5qmY90.png
 
Última edição:
Saiam do Brasil
 
Não li o tópico inteiro, só dei uma passada por cima mas estava na hora de um tópico oficial pra isso pois é algo que sempre aparecem em outros tópicos como o de salários ou de emigração.

+1 pra opinião de sair do Brasil se quiser ser valorizado
 
Universidade Livre Brasileira.

É um projeto baseado na versão americana OSSU (Open Source Society University) onde estruturaram um currículo de estudos com todas as matérias de um Curso de Ciência da Computação em cursos livres gratuitos e abertos.

--- Post duplo é unido automaticamente: ---

Agile está morto, McKinsey acaba de o matar​


O movimento ágil revolucionou a forma como as empresas de tecnologia operavam e foi uma força motriz por trás de sucessos como Google, Facebook e Airbnb. Mas, duas décadas depois de ter começado, o movimento agora está morto com o golpe final desferido pela McKinsey recentemente promovendo um “escritório ágil de transformação”.

O Agile foi originalmente proposto como uma forma de gerenciar o trabalho e organizar as equipes de desenvolvimento de software. Ele enfatiza a colaboração do cliente sobre a negociação do contrato, os indivíduos sobre os processos, a capacidade de resposta à mudança seguindo um plano e os resultados sobre os documentos.

Para as organizações que o aplicaram, tornou-se uma vantagem competitiva. Para os profissionais que o praticavam, fornecia um quadro de referência comum para ajudá-los a trabalhar juntos de forma mais produtiva.

O sucesso das pessoas e empresas que adotaram o Agile impulsionou sua aceitação e popularidade em organizações de todos os tamanhos e formatos. Grandes empresas listadas, pequenas startups, departamentos governamentais, bancos, mineradoras, incorporadores imobiliários e sem fins lucrativos, todos adotaram o Agile ou pelo menos quiseram.

McKinsey-just-killed-agile-2-1024x640.png


Mas, o sucesso e a popularidade do ágil também foram sua ruína.

O massacre do ágil nos últimos anos o levou a uma espiral descendente. Agile mudou de um conjunto de valores e princípios compartilhados para uma palavra vazia e excessivamente usada que foi mal aplicada a quase tudo que uma organização faz.

Considere a promoção da McKinsey de um “escritório ágil de transformação”. Uma reformulação desnecessária de um conceito existente, o escritório de gerenciamento de programas, que vai contra os princípios fundamentais por trás do Agile. Cada ponto listado pela McKinsey como uma diferença para um PMO é uma descrição quase exata de um PMO . Além disso, um escritório que "define a estratégia geral", "rastreia o progresso" e "cria padrões mínimos" contradiz diretamente o princípio do manifesto ágil de "equipes auto-organizadas" e quase certamente "pessoas sobre o processo".

A “empresa ágil” da PwC é um conceito igualmente enfadonho quando você descarta o jargão, oferecendo pouco além das declarações de senso comum, como empresas bem-sucedidas são capazes de atender às necessidades dos clientes e uma tecnologia melhor oferece mais eficiência.

McKinsey e PwC não merecem toda a culpa, a promoção desses conceitos são apenas sintomas da fase final do movimento ágil. A fase final começou por volta de 2015, quando um dos fundadores do Agile, Dave Thomas fez sua apresentação intitulada 'Agile is Dead'.

Agora, quase todos os candidatos a empregos não medem esforços para explicar como são ágeis.

A maioria das organizações sai de seu caminho para explicar como são ágeis para o mercado, a equipe e as novas contratações em potencial. Por exemplo, a maioria dos grandes bancos adotou ou está adotando o Agile (por exemplo, JP Morgan , Westpac , Bank of America e Commonwealth Bank ).

Na prática, isso significa que é difícil extrair qualquer significado da palavra “ágil”. Você precisa encontrar outras maneiras de entender se os candidatos a emprego entendem os princípios básicos por trás do Agile. Você tem que olhar mais de perto os processos e comportamentos reais dentro das organizações para entender se eles estão realmente aplicando os princípios que tornaram a Atlassian bem-sucedida.

Esses princípios e valores, conhecidos como Manifesto Ágil , foram escritos por um grupo de autodenominados "anarquistas organizacionais" da indústria de software em um resort de esqui em Utah em fevereiro de 2001. O Manifesto Ágil deu origem ao movimento ágil, um movimento para promover o uso de princípios ágeis para construir software melhor.

Screen-Shot-2021-07-21-at-2.55.06-pm.png


Duas décadas depois, o movimento teve sucesso. Os princípios e valores básicos do Agile são agora uma aposta fixa para qualquer organização. O grau em que uma organização está aplicando o Agile agora é uma questão de pequenos incrementos de produtividade, e não uma virada de jogo revolucionária.

O desafio e a oportunidade para a indústria é superar o uso indevido do Agile e focar nos princípios subjacentes. A oportunidade é buscar vantagens competitivas em novas formas de trabalhar, como as disciplinas de gerenciamento de produtos, que possam trazer as vantagens que o ágil possui.

PS: Estou ciente da distinção entre o grande 'A' Agile e o pequeno 'a' ágil, no entanto, não o usei no artigo porque acho que tentar incorporá-lo apropriadamente me desviaria do ponto que estou defendendo. Não acho que isso desvie do ponto, mas está aberto a ser desafiado.

 
Última edição:
Galera, quero aprender a programar, qual a melhor linguagem para aprender no momento (Visando mercado de trabalho futuramente) e quais cursos recomendam.
 
Na esquina tem emprego remoto que paga em dólar onde o inicial é 300k dólares por ano.
A oportunidade está aí, só não aproveita quem não quer.
 
Na esquina tem emprego remoto que paga em dólar onde o inicial é 300k dólares por ano.
A oportunidade está aí, só não aproveita quem não quer.
Meu cunhado de 26 anos trabalha remotamente pra Builderall ganha de 12 a 15K mensal como suporte e está tentando entrar na Wordpress........Nessa se ele conseguir entrar, vai ser de 60k a 80k o salário....
 
Meu cunhado de 26 anos trabalha remotamente pra Builderall ganha de 12 a 15K mensal como suporte e está tentando entrar na Wordpress........Nessa se ele conseguir entrar, vai ser de 60k a 80k o salário....
Sim! TI pode ser a solução da pobreza mundial.
Os países deveriam investir mais.
Deveriam começar a colocar programação na grade curricular desde a pré-escola.
 
Sim! TI pode ser a solução da pobreza mundial.
Os países deveriam investir mais.
Deveriam começar a colocar programação na grade curricular desde a pré-escola.
Isso eu não sei, mas que é a profissão do "momento" com certeza é, e vai demorar pra saturar
 
Será que existe algum teste vocacional voltado para TI?
 
Na esquina tem emprego remoto que paga em dólar onde o inicial é 300k dólares por ano.
A oportunidade está aí, só não aproveita quem não quer.
Nao e nem de longe tao facil assim de ganhar 300k mensais. Nao tem em toda esquina.

Voce consegue isso so sendo muito, mas muito bucetudo e so nas FAANG.
 
estou estudando data science, mas ta muito dificil conseguir o primeiro emprego... a maioria das vagas são apenas para plenos e seniors
 
Só sei que no Brasil só restou duas profissoes: TI e medicina, qualquer outra vai ter que procurar muito pra conseguir emprego

TI tem o plus de ganhar em dólar

Medicina tem o plus de demanda infinita
 
ótimo tópico, vejo que aqui no adrena tem muita gente que já trabalha na área e muita gente interessada tbm...

Falando mais: alguém aplicou pro PAN Academy do banco pan? Apliquei lá e recebi um login e senha pra baixar o app aqui, quero ver como vai ser essa brincadeira
 
Olá pessoal, tudo blz?

Atualmente trabalho como desenvolvedor Front-end, mas gostaria de migrar para outra área dentro de T.I.

No momento eu estou em dúvida entre esses dois caminhos:
  • Administração de sistemas
  • Redes

Me parece que existem semelhanças entres os 2, em empresas menores acredito que o profissional deva assumir papeis das duas áreas. Eu também pensei em Devops, mas não tenho certeza se existem vagas para junior.

Minha principal preocupação é com o mercado de trabalho, existe demanda por esses profissionais aqui no Brasil? Em termos de longo prazo, qual dos dois segmentos vocês recomendariam se especializar?
 
Minha principal preocupação é com o mercado de trabalho, existe demanda por esses profissionais aqui no Brasil? Em termos de longo prazo, qual dos dois segmentos vocês recomendariam se especializar?
pelo meu pequeno conhecimento fora da bolha de dev eu entendi que vc tá buscando ser um profissional na área de infraestrutura de TI. Existe demanda? com certeza, mas obviamente não tanto quanto de devs... Como vc já trabalha seria uma boa falar com a galera que já trabalha nessa área da empresa e talz, se pá dá até pra migrar de cargo dentro da empresa mesmo
 
Alguém participando do Bootcamp do Itaú?
Fiz a prova hoje...

Eu tô, achei a prova bem básica mas vai pegar bastante gente que não conhece nada de programação e se inscreveram no bootcamp. Só não curti muito no processo a fase que tem que fazer o video de apresentação e a dinâmica em grupo, acho uma puta amolação isso mas pelo fato do processo de contratação ser antes do bootcamp é até plausível ter mas se eles fizessem como no bootcamp do Banco Pan eu acho que seria bem melhor.
 
Eu tô, achei a prova bem básica mas vai pegar bastante gente que não conhece nada de programação e se inscreveram no bootcamp. Só não curti muito no processo a fase que tem que fazer o video de apresentação e a dinâmica em grupo, acho uma puta amolação isso mas pelo fato do processo de contratação ser antes do bootcamp é até plausível ter mas se eles fizessem como no bootcamp do Banco Pan eu acho que seria bem melhor.

Fiz a prova do banco Pan e acho que me dei um pouco mal nessa parte da lógica de programação, essas perguntas ficaram para o final e o tempo estava se esgotando, quase não consegui ler a última pergunta, mas esse foi meu primeiro processo dessa natureza, então vou estudar um pouco mais para estar melhor preparado para esses testes no futuro.
 

Users who are viewing this thread

Voltar
Topo