sábado, 27 de junho de 2020

Estágios de um Desenvolvedor

Todo programador tem a oportunidade de escolher em que estágio sua carreira vai estar, para isso existem alguns comportamentos que podem alavancar ou prejudicar.


BONS HÁBITOS

MAUS HÁBITOS

Aprenda sempre algo novo

Todo conhecimento adquirido pode ajudá-lo num próximo problema e

Nomear métodos e variáveis corretamente

O nome da variável e do método deve descrever perfeitamente o que esse código faz .

Formatar o código

Recuo é mágico! Você pode revelar toda a estrutura do código e editá-lo com uma compreensão clara de como ela funcionará.

Planeje seu código

Portanto, em vez de resolver problemas e programar em paralelo, é muito mais fácil descobrir o procedimento primeiro e depois escrever uma solução.

Faça controle de versão

Haverá momentos em que você cometerá um grande erro de programação e desejará voltar para uma versão anterior de um código.

Concentre-se em uma linguagem por vez

Escolha um e mantenha-o até dominá-lo, depois passe para o próximo.

Ponha lógica por meio de comentários

Escrevendo os comentários com lógicas, além de facilitar a implementação do código também ajudará na manutentabilidade.

Seja proativo

Você precisa se concentrar nas coisas que estão sob sua influência e que você possa oferecer ajuda.

Comece com o fim no inicio

Programadores eficazes geralmente têm objetivos muito convincentes em mente sobre seu futuro.

Ofereça Vantagem ao Próximo

Quer você seja ou não o único desenvolvedor trabalhando em um projeto, você não deve deixar seu ego fazer com que você pense apenas em si mesmo.

Pratique Sinergia

Não há dúvida de que grandes projetos são desenvolvidos por muitas pessoas que trabalham em equipe, logo equipes são mais importante que indivíduos.

Agir como se você tivesse todas as respostas

Ninguém precisa e nem sabe todas as respostas e tudo bem.

Estar na defensiva sempre que alguém critica seu código

Esteja aberto a ter uma conversa aberta e direta sobre o seu código e como ele pode ser aprimorado.

Desistir antes de tentar para valer

Muitos programadores chegam tão perto de uma solução, apenas para desistir logo antes de resolverem o problema.

Culpar os outros

O desenvolvedor mais valioso é aquele que assume a propriedade e a responsabilidade pelo código que escreve.

Ignorar  opiniões de outros desenvolvedores

Uma das melhores maneiras de aprender e crescer como desenvolvedor é parear conhecimento com outros desenvolvedores.

Super engenharia de problemas simples

Não crie soluções confusas para problemas fáceis.

Usar uma ferramenta errada

Pare de tomar decisões com base em "está na moda ", esteja aberto para usar diferentes tecnologias, idiomas e estruturas.

Evitando mensagens de erro.

Erros de código ocorrem com frequência e eles também geralmente incluem informações muito valiosas sobre o que deu errado, por que aconteceu e quais linhas de acionamento dos problemas.

Recusando-se a aprender com os erros

Isso é contraproducente, recusar-se a aprender com seus erros fará com que você os repita.

Resolver algo difícil e não documentá-lo

Depois de passar horas decifrando o código por conta própria, é seu dever documentar para ajudar a próxima pessoa que encontrar o problema.

Não gastar energia em revisões de código

A equipe de desenvolvimento está unida e é responsabilidade de todos os membros da equipe garantir que o código que todos os outros membros estejam contribuindo cumpra os altos padrões da equipe.


Essa são alguns hábitos que podem nós levar a um dos extremos dos dois estágios de programador, o ideal é que tenham sempre em mente que estar no centro dessa escala com certeza irá nos tornar um profissional altamente eficiente e eficaz.

Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil
//marcelogoberto.com.br


domingo, 14 de junho de 2020

Dicas para melhorar o entendimento das SQL Querys

Consultas em SQL são basicamente códigos no final, logo é importantíssimo termos a preocupação de oferecer um código claro e objetivo para aumentar a manutenibilidade dele por outros desenvolvedores. Comandos mal formatados e/ou com escritas confusas podem aumentar mais erros e uma falta geral de motivação para revisar seu trabalho. Para quem simplesmente escreve a consulta pode fazer sentido e até funcionar, porém é fundamental que o código esteja num melhor formato possível para aumentar sua qualidade, vamos a alguma regras que podem ajudar.

Seja consistente e corente com a formatação

SELECT primeiroNome, count(*) from
Usuários WHERE ultimo_nome = 'silva' Group by primeiroNome

Vamos analisar alguns pontos:

  • Veja que algumas partes estão em maiúsculas e outras não, procure manter um padrão único, por exemplo todas as palavras reservadas.
  • É confuso identificar o que é coluna ou o que é comando
  • A coluna do SELECT está em "camelCase", a usada no WHERE está "snake_case" e o nome da tabela em "PascalCase", crie um padrão geral, se começou errado, conserte.
  • A utilização de caracter especial em definição de nomes, como na tabela Usuários

Veja um exemplo como deveria ser:

SELECT primeiro_nome, COUNT(*) from
usuarios WHERE ultimo_nome = 'silva' GROUP BY by primeiro_nome 

Use e Abuse da Identação 

SELECT g.id, COUNT(u.id) FROM usuarios u JOIN gruopos g on u.grupo_chave
= g.chave WHERE u.nome = 'Marcelo' AND  u.sobrenome
= 'Silva'  GROUP BY g.chave ORDER BY COUNT(u.chave) desc 

Para uma consulta pequena pode não fazer diferença para leitura quando tudo está sem um padrão de separação, agora imagine aquelas longas procedures com todos os comandos encavalados, não é mesmo?

Veja se o resultado fica melhor para o entendimento: 

SELECT 
	  g.id
	, COUNT(u.id) 
FROM usuarios u 
	JOIN gruopos g on u.grupo_chave = g.chave 
WHERE 
	    u.nome = 'Marcelo' 
	AND u.sobrenome = 'Silva'
GROUP BY 
	g.chave 
ORDER BY 
	COUNT(u.chave) desc

Dica: A utilização da virgula (,)antes de cada campo no SELECT, ou das conjunções AND / OR no WHERE, GROUP BY, ORDER BY facilita a identificação visual onde se inicia ou termina o grupo de campo, além de fornecer uma forma agíl de comentar um campo 

Se você utilizar 2 ou 4 espaços não surti efeito considerável, o importante é só manter o padrão em toda a codificação, a simplesmente utilização dessa formatação farão seu colegas adorarem ver suas consultas quase como obras de arte. 😃

Utilize sempre "Aliases" 

SELECT
    u.chave
    , u.nome
    , t.chave
    , t.nome
    , (SELECT COUNT(*) FROM titulos where nome = t.nome)
FROM usuarios u
    JOIN titulos t on u.titulo_chave = t.chave 

O resultado dessa consulta será: 

chave

nome

chave

nome

count

1

Marcelo Goberto

4

Arquiteto

6

Novamente num cenário minimalista é possível identificar o que é cada conteúdo, agora imagine isso num longo resultado com várias colunas, por isso é fundamental que você nomeie cada coluna para que possa facilitar o entendimento.

Veja como fica o resultado da mesma consulta acima com ajustes 

SELECT
   u.chave AS usuario_chave
   , u.nome AS usuario_nome
   , t.chave AS titulo_chave
   , t.nome AS titulo_nome
   , (SELECT COUNT(*) FROM titulos where nome = t.nome) AS qtde_titulos
FROM usuarios u
JOIN titulos t on u.titulo_chave = t.chave

O resultado dessa consulta será 

usuario_chave

usuario_nome

titulo_chave

titulo_nome

qtde_titulos

1

Marcelo Goberto

4

Arquiteto

6


Utilize números nas clausulas GROUP BY e ORDER BY 

Neste caso essa é uma preferência pessoal que acredito que auxilia muito no organização de uma consulta, veja um exemplo com essa aplicação 

SELECT
   nome
    , sobrenome
    , COUNT(*) AS total
FROM usuarios
GROUP BY 1, 2
ORDER BY 3 desc 

Algumas vantagens na adoção desse formato são:

  • Economia de linhas: a utilização de muitas colunas em GROUP ou ORDER não aumentará sua consulta, pois todos estarão enfileiradas
  • Manutenção: Se desejar trocar o agrupamento ou a ordenação, basta trocar as colunas de lugar dentro da clausula SELECT

Esses foram alguns pontos que sempre considero na hora de escrever uma consulta, não existe um melhor padrão ou formato único para SQL, mas com certeza existe o desafio que procurar fazer um ótimo trabalho que possa ter sua manutenção facilitada para os próximos e quem sabe para nós mesmo, porque se todos tivermos um consenso que garantir sempre um excelente padrão de código, todos se sairão ganhando.

Marcelo Goberto de Azevedo

Arquiteto na GFT Brasil

//marcelogoberto.com.br


domingo, 7 de junho de 2020

Basic Cloud Architecture

 **Matéria Publicada no The TechnologyJournal da GFT na edição de jun-2020**

Some concepts that every developer should know before starting in the cloud.

Marcelo Goberto Azevedo –  marcelo.azevedo@gft.com 

The diagram below is a representation of a well-structured basic web application, if you are not a cloud developer, you will probably find it complicated.

 

Next, we will get to know each one of this component and give an introduction so that you can have the necessary knowledge when including it in the project architecture.

(1) DNS

The acronym DNS (Domain Name System) is the technology that allows the internet. This component allows all IP and domains to be referenced and found. Imagine a giant phone book on the internet, it is through it that you can find where a particular address is. When we enter a domain in our browser, for example, http://www.pudim.com.br, that address will be searched in this phone book to find where it should be directed to, it is always behind an IP, in the case of that address it is 54.207.20.104.

(2) LOAD BALANCE

Load Balance is an essential component for cloud architecture, one of the main characteristics of cloud applications is its horizontal scalability, that is, we can create numerous instances (replicas) of applications to meet a large demand of requests, thus ensuring availability It is in this scenario that Load Balance enters because it will be responsible for distributing this demand among all existing instances, ensuring that the rules defined therein are met to avoid overload in a given instance and provide high performance of requests.

(3) WEB APP SERVER

These are the web application servers, basically, it is where the application is installed and will respond to the user by receiving the request and providing an HTML response. As the brain of the application, it will be responsible for communicating with a variety of other components, such as databases, queues, caches, microservices and, much more. Server implementations require a choice a language (C # .NET, Node.js, Ruby, Scala, Java, etc.).

(4) DATABASE

Basically, every application uses a database to store information. It is through them that we can store and update the data captured or generated by the application. In the cloud model, mainly with microservices, it is quite common to use several databases. Also, there are currently two database versions, the most used being the relational database (SQL Server, Oracle, MySql, etc.) and the non-relational database (CosmoDB, MongoDB, DynamoDB, etc.), basically, the difference is that the relational offers greater consistency and reliability and non-relational has the advantage of greater scalability, with the information grouped and stored in the same record.

(5) CACHE SERVER

The cache service basically provides query and persistence of data in virtually real-time. Applications generally use database queries that are executed several times and return the same value, to avoid processing this information, the cache stores this result in memory and keep it available for the time configured for the application, thus making a big gain performance.

(6) JOBS

Most applications need to work asynchronously, that is, that is not associated with responding to a user's request. For that, the "work queues" are used, it is through them that routines are scheduled to be executed from time to time to perform jobs that do not need to happen directly associated with users. The language options and underlying structures are as numerous as for web servers and most of them can be created in the "serverless" concept, which are algorithms that run without a server and are event-oriented.

(7) STORAGE

These repositories are a simple and scalable way to store and access data in the cloud. They are perfect for any type of information you would store on a local file system, with the benefit of being accessible via http from anywhere. And you can also count on the redundancy configuration to guarantee its high availability.

(8) CDN

CDN (Content Delivery Network) is a technology that offers a way to allow access to static files (html, css, javascript, images, etc.) faster than allowing the user to reach the web application to receive their content. Basically, it works by distributing a copy of the most current content among many servers worldwide, so when a user accesses the web application, this content will be delivered by the CDN closest to the user and thus avoiding consumption of server traffic, this will guarantee much lower latency for the user and a better experience.

Working with the cloud is simple and complex at the same time. These elements presented are a small part of the countless possibilities that exist to build an architecture, however, I hope that it will be useful to give the initial kick in its use. Believe that the future of applications will inevitably be in the cloud.

________________________________________________________________________

Marcelo Goberto Azevedo, is a Software Architect at GFT. More than 30 years coding, analyzing and enjoying every moment. - marcelo.azevedo@gft.com