Design Patterns: Afinal, o que são?

Design Patterns: Afinal, o que são?

Design Patterns: Afinal, o que são?

Esse é um tema que geralmente é ignorado em nosso dia a dia de desenvolvedor, seja por falta de conhecimento ou pelo simples fato de não sabermos realmente do que se trata.

Todo software possui um ciclo de vida e em determinado momento alguma modificação acontecerá, seja pela implementação de novas funcionalidades ou correção de bugs. Porém, a realização dessas mudanças sem um bom planejamento pode acarretar em problemas como códigos repetidos, classes altamente acopladas, códigos extensos com muitas responsabilidades prejudicando assim a modelagem do sistema.

Para evitar e também solucionar esses problemas é que os Design Patterns surgiram, mas antes de explica-los, vamos saber da sua origem. Os Design Patterns, ou Padrões de Projetos, ficaram conhecidos depois do lançamento do livro “Design Patterns: Elements of Reusable Object-Oriented Software”, publicado por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides e que ficaram conhecidos por Gang of Four, ou simplesmente GoF.

Design Patterns são um conjunto de ideias que auxiliam na modelagem e na solução de problemas durante o desenvolvimento do software. Além do mais, essas ideias já foram testadas e aprimoradas ao longo dos anos, nos dando total segurança em utiliza-las. Os Design Patterns não são códigos prontos onde é possível reaproveitar em diferentes aplicações, e sim um modelo de solução de problemas.

Outro ponto interessante é que sua utilização não é restrita a uma determinada linguagem de programação, podendo ser aplicados em conjunto com diversas linguagens existentes no mercado.

O livro citado lista diversos padrões para serem utilizados onde cada padrão exemplifica um problema e sua respectiva solução.

Os Design Patterns são divididos em 3 grupos:

  1. Creational Pattern (Padrões de criação): Tratam da criação de objetos.
  2. Structural Pattern (Padrões estruturais): Tratam da relação entre classes e objetos.
  3. Behavioral Pattern (Padrões comportamentais): Tratam das interações e da divisão de responsabilidade entre as classes.

O uso dos Design Pattern apresenta vários benefícios para o software. Dentre eles, podemos citar:

  1. Organização do projeto todo, pois a padronização é uma das premissas.
  2. Fácil manutenção, pois os pattern prezam o baixo acoplamento entre as classes e a alta coesão, de forma que novas implementações possam ser feitas sem muitos problemas.

Com esses benefícios, concluímos que o uso dos patterns auxilia na simplificação e qualidade do código, porém, precisamos refletir quanto ao seu uso em toda e qualquer situação, pois não são todos os problemas que necessitam realmente do uso de algum pattern, e para identificar esses casos, é necessário uma análise antecipada.

É bom ressaltar que uso sem necessidade dos Design Patterns pode acarretar em complexidade desnecessária do código.

Outro ponto importante é que para o desenvolvimento de alguns patterns, é necessário um conhecimento profundo em Orientação de Objetos (OOP).

Então fica um conselho, antes de se aprofundar nesse tema, sugiro que reforçe primeiramente seus conhecimentos em OOP para depois prosseguir com segurança seus estudos.

Até mais!!!

Renicius Pagotto

Renicius Pagotto

Software Developer .NET na Tegra

Gerente de Projetos: Desenvolvendo habilidades e entendendo a gestão do tempo para melhor execução

Gerente de Projetos: Desenvolvendo habilidades e entendendo a gestão do tempo para melhor execução

Gerente de Projetos: Desenvolvendo habilidades e entendendo a gestão do tempo para melhor execução

Se você é gerente de projetos ou deseja se tornar um já deve ter consciência de quais habilidades deve ter e do quanto saber gerenciar o tempo é importante no desempenho de tarefas afim de melhores resultados. Neste post explicamos de maneira mais simples como se tornar mais eficiente, desenvolver habilidades básicas e desempenhar sua função de maneira menos complicada.

Mas o que faz um gerente de projetos?

O gerente de projetos é o profissional que vai planejar, executar e fazer todo o acompanhamento de um projeto e, isso exige competências específicas como ser comunicativo, gostar de desafios, ter comprometimento, responsabilidade e saber motivar a si mesmo e a sua equipe. Além de tudo isso, é claro que a qualidade do projeto será cobrada diretamente dele!

Habilidades vitais para um gerente de projetos

1. Ser organizado

Organização é fundamental! Não é possível gerenciar tarefas, datas de entrega, escalar um time de execução, se reunir com cliente, ter ciência de documentos e outras várias tarefas se não  for organizado e dinâmico.

Se esse não é o seu forte, começar a organizar coisas simples do dia a dia como suas roupas e a mesa de trabalho, por exemplo é uma boa ideia. Organização é hábito!

2. Ser líder

Sem liderança os projetos não são entregues. Simples assim! Se quer se tornar um gerente eficiente é preciso ser um líder e apoio para a equipe em todas as etapas do projeto. Um líder não deixa para depois o que pode fazer agora e incentiva outros a fazerem o mesmo.

3. Ser comunicativo

Todo o processo para que um projeto seja entregue da maneira como o cliente solicitou exige comunicação evitando problemas como perder tempo com funcionalidades não exigidas ou deixar para trás detalhes que podem fazer a diferença. O bom gerente entende e se faz entender.

comu

4. Ser negociador

Você vai ter que aprender a negociar com o seu chefe, com o seu cliente e com a sua equipe. Lidar com interesses e transformar o que o cliente está pedindo em algo coerente, por exemplo, exige jogo de cintura e competência que deve ser desenvolvida desde muito cedo.

5. Prever crises

Mapear os riscos de um projeto e tentar prever uma possível crise na equipe ou com o cliente evita problemas desnecessários. Desenvolva um olhar clínico sobre cada etapa do projeto!

6. Não fique em cima do muro

A tomada de decisão é primordial! Ter atitude diante dos riscos e propôr soluções baseadas em fatos aumenta a confiança do time e do cliente com relação ao seu trabalho.

7. Resiliência

O profissional que é valorizado e se diferencia hoje no mercado é o que resiste diante das dificuldades, o que levanta depois do tombo e tenta de novo se aquilo for o que realmente acredita.

A importância da gestão do tempo

Mais do que uma habilidade a ser desenvolvida, a gestão de tempo é o que determina o controle sobre todas as fases do projeto. Quantidade de pessoas envolvidas, datas de entrega e custos são alguns pontos determinados pelo tempo.

Veja como elaborar um cronograma que garanta a conclusão dos projetos no tempo estabelecido e que prevê ao máximo os problemas no meio do caminho.

tempo

 Gerenciamento do cronograma

O cronograma torna o planejamento do projeto visual. Nele estão todas as atividades a serem feitas com  datas de entrega, facilitando a identificação de períodos  de maior esforço da equipe para cumprir prazos e auxiliando o gerente e a equipe a avaliarem seu desempenho, além de melhor estimativa de tempo por atividade, alocação de recursos e aumento contínuo de eficiência.

De forma básica, o cronograma deve conter:

  • Definição de atividades: definição de pacotes de trabalho, detalhamento de ações, sprints.
  • Sequência de ações: ações conectadas com antecessores e sucessores resultando em uma ordem lógica para maior agilidade.
  • Estimativa de recursos por etapa: físico, humano, tecnológico, financeiro…
  • Avaliação da duração das etapas: base para determinar a entrega final em 3 possibilidades.

São elas:

  1. Estimativa analógica: baseadas em projetos parecidos já realizados pela equipe;
  2. Estimativa paramétrica: usa algoritmos para estimativa precisa de tempo para cada atividade a ser realizada.
  3. Estimativa de 3 pontos: análise quantitativa do cenário otimista (tO), do pessimista (tP) e do provável(tM). Fórmula tE = (tO + 4tM + tP) / 6.

Para terminar é preciso determinar indicadores de desempenho e focar no cronograma garantindo que a equipe não se perca no meio do caminho e que as entregas sejam satisfatórias para o cliente. O uso de ferramentas de gestão podem ser muito úteis para otimizar sua relação com o tempo.

Sobre as classificações tipográficas

Sobre as classificações tipográficas

Sobre as classificações tipográficas

Primeiramente vamos falar sobre alguns conceitos. Afinal, o que é a tipografia?

A palavra tipografia tem origem do grego, sendo: typos = forma e graphein = escrita. Podemos dizer que ela é tanto a arte como o processo de criação na composição de um texto e, por sua vez, este pode ser físico ou digital. O seu objetivo é dar estrutura e forma à comunicação escrita.

Classificação das fontes

As fontes podem ser classificadas em 3 grupos principais, os quais se referem ao enquadramento tradicional: com serifa, sem serifa e cursiva. Cada um desses grupos possui suas características, vamos falar sobre cada um deles.

Com serifa

As serifas são semi-estruturas (aqueles tracinhos) que ficam sempre nas extremidades de uma fonte. As fontes com serifa possuem esses pequenos prolongamentos em suas extremidades. Um exemplo que todos conhecem é a clássica Times News Roman. Dentro desse grupo há sub-grupos, os quais se referem ao enquadramento histórico. Vamos discorrer um pouco sobre eles.

  • Humanista

Se originaram nos séculos XV e XVI, os tipos humanistas se assemelhavam à caligrafia clássica. São bem conectadas à caligrafia e ao movimento da mão e da pena no papel, o que justifica o seu nome e o seu eixo oblíquo.

  • Transicional

Possuem serifas menos “desleixadas” que os tipos humanistas, além de um eixo mais vertical. Surgiram durante a fase de transição entre as tipografias humanistas e modernas.

  • Moderna

Os tipos modernos ganharam destaque apenas durante o século XVIII. São caracterizados pela substituição da pena humanista pela pena metálica, que garantia maior precisão ao escritor, o que também possibilitava novas técnicas no desenho dos tipos. Ficou muito evidente na tipografia moderna o contraste entre traços grossos e finos em uma mesma letra, além de serifas mais retas e finas.

  • Egípcias

Foram feitas principalmente para utilização em cartazese e se expandiram ao longo do século XIX. São fontes bem mais pesadas assim como suas serifas que possuem na maioria das vezes a mesma largura de suas hastes. Esta categoria nasceu juntamente com os primeiros cartazes publicitários, neste período fontes decorativas foram criadas para chamar a atenção do público por volta do século XIX.

Sem serifa

As fontes Sans-Serif, do francês “sem serifa”, são aquelas que não possuem esses prolongamentos e pequenos traços nas extremidades das letras. Um exemplo que todos conhecem é a Arial. As sans-serif são divididas nos seguintes sub-grupos:

  • Humanistas

Mesmo que não possuam mais serifas, são tipografias baseadas em características humanistas como o fato da terminação das letras nem sempre terem linhas com ângulos de 90º, costumam ter o eixo vertical. Suas curvas são leves, e em alguns casos o remate da letra “a” lembra o final de um texto escrito em pena.

  • Transicionais

Esses tipos possuem um estilo reto e uniforme, parecido com os das letras transicionais serifadas. É muito usado no mundo todo, pois é básico e serve para muitas situações como um título, ou escrever um texto mantendo uma alta legibilidade.

  • Geométricas

São fontes originadas de formas geométricas como o círculo, quadrado e triângulo. Este tipo de fonte geralmente são “afiadas”. A e M possuem os topos de suas letras em forma de triângulos e os O e Q são formados a partir de círculos exatos. Um exemplo é a fonte Futura criada na época da 1ª Guerra Mundial. Ela tem uma percepção fria, quase sem expressão, são cantos de ângulos perfeitos, interiores com círculos perfeitos e pontas com triângulos bem afiados.

Cursivas

As fontes cursivas geralmente são usadas nos convites de casamento, elas se aproximam da escrita humana e passam maior sensação de humanização. São mais trabalhadas e com mais ornamentos, seu uso geralmente está associado à sofisticação, algum convite ou certificado. Pelo seu grande detalhamento ela não é aconselhada para textos longos.

Fontes:

Baseado no curso Fundamentals of Design, Level 1: Tipography. Code School.

E nos artigos: http://chiefofdesign.com.br/guia-tipografia-parte-01/ e http://chiefofdesign.com.br/guia-tipografia-parte-02/

 

Este texto foi originalmente publicado em: https://medium.com/@julliasaad/tipografia-91f5957b50f7#.as7e3ng75

JavaScript: O nascimento

JavaScript: O nascimento

JavaScript: O nascimento

Atualmente, é impossível imaginar a Internet sem a existência do JavaScript. Hoje praticamente todas as páginas executam código JavaScript.

Mas afinal como ele surgiu ?

Origem

O JavaScript surgiu na década de 90 por Brendan Eich que prestava serviços a Netscape.

Essa década foi um periodo de grandes mudanças, pois os browsers ainda eram estáticos. O navegador mais famoso na época era o Mosaic da NCSA.

NCSA Mosaic

 

E assim nasce a Netscape em 1994 com o intuito de explorar esse novo universo, a Web. Pouco tempo depois, é criado o Netscape Navigator e BUMMM! domina o mercado. Muitos devs da NCSA acabaram indo para esse novo e promissor projeto.

      Netscape Navigator

 

Logo, a Netscape chega à conclusão que a web deveria ser mais dinâmica, pois o Navigator sempre precisava fazer uma requisição ao servidor para obter qualquer resposta no navegador. E é aí que Brendan Eich entra nessa história, quando a Netscape o contrata para criar uma linguagem que realizasse esse novo desejo de uma web dinâmica.

A proposta inicial era a implementação da linguagem Scheme, baseada em LISP, puramente funcional, no Navigator. Porém a Netscape tinha projetos anteriores em conjunto com a Sun Microsystems para colocar sua mais recente e promissora linguagem de programação, o Java, no Navigator. Houve várias discussões internas sobre em qual linguagem Eich deveria se basear. Então Brendan cria o primeiro protótipo de JavaScript nomeado como Mocha, que vinha com uma sintaxe parecida com o Java, com valores primitivos e objetos. O Mocha logo de cara também sobreu uma influência funcional do Scheme e pouco tempo depois de outras linguagens como Self(protótipos), Perl(expressões regulares) e Python(strings, arrays).

A linguagem é renomeada para LiveScript por questões relacionadas a patentes. E em novembro de 1995, sai uma nova versão do Navigator com o LiveScript(aquela versão feita em dez dias, exato!). E em Dezembro do mesmo ano é renomeada para JavaScript. O nome JavaScript já era patenteado pela Sun Microsystems(Oracle), mas a Sun liberou o uso do nome afim de se unir a Netscape e destruir a temida Microsoft MUAHAHA.

ECMA

Logo após a criação do LiveScript, a Microsoft “CRIOU”, uma linguagem idêntica para o Internet Explorer 3 o JScript. Para conter essa nova “CRIAÇÃO” da Microsoft, a Netscape decide normatizar a linguagem com a companhia ECMA International, especializada em padrões e normativas. Assim começam os trabalhos na normativa ECMA-262.

A Netscape tinha um certo medo do rumo que o mercado estava tomando então toma uma atitude para obter total controle: cria uma nova patente e com a composição de ECMA + JavaScript nasce o ECMAScript. Porém, até hoje a linguagem é conhecida por JavaScript. O ECMAScript é utilizado para referenciar as versões da linguagem.

A ECMA-262 é mantida por um comitê composto por especialistas de grandes empresas como Microsoft, Mozilla e Google. E obviamente entre o comitê está Brendan Eich.

Histórico das versões

ECMAScript 1: A versão de dez dias.

ECMAScript 2: Mudanças editoriais para alinhar a ECMA-262 com o padrão ISO/IEC 16262.

ECMAScript 3: do-while, expressões regulares, métodos para objeto string etc.

ECMAScript 4: Foi criada uma nova versão para JavaScript porém foi rejeitada pois a quantidade de novas funcionalidades tornaria da migração entra as versões incompatível.

ECMAScript 5: getters e setters, ‘use sctrict’, métodos para arrays, suporte a JSON etc.

ECMAScript 6(2015): Sintaxe mais enxuta, arrow function, binary data, arrays tipados, coleções (maps, sets), promises, reflection etc.

ECMAScript 7(2016): adiciona algumas features como operadores exponenciais, Array.prototype.includes etc.

Alguns browsers ainda não dão suporte total às versões 6 e 7. Porém existem ferramentas que possibilitam traspilar as novas versões para a versão 5 através de libs como, por exemplo, Babel.

Referências

UX e UI Design — a confusão dos termos

UX e UI Design — a confusão dos termos

UX e UI Design — a confusão dos termos

Muito se ouve falar sobre UX e UI nos últimos anos, no entanto, é importante ressaltar a diferença entre esses termos, pois eles comumente são confundidos e usados em contextos incorretos.

Para começar, vamos olhar o gráfico abaixo que foi desenhado por Dan Saffer. Nele podemos ver que a User Experience Design engloba diversas outras disciplinas, inclusive a nossa UI, User Interaction Design.

Diagrama UX

Já vimos que UI é uma displina de UX, agora vamos ver o que cada termo significa focando no desenvolvimento de produtos digitais.

E afinal, o que é UX?

User Experience Design trata do lado psicológico da interação do usuário com a nossa interface. O que ele sentiu? Como ele reagiu? Qual foi a experiência que ele teve ao utilizar da interface? Então temos que a UX se preocupa com as emoções do usuário.

E UI?

É o que chamamos de simplesmente “interface”, os botões, formulários que o usuário irá preencher, o conteúdo que minha aplicação oferece. Ou seja, como o usuário irá controlar meu produto.

Vale ressaltar que UX e UI são relacionadas à design e, portanto, elas são aplicáveis no design de qualquer produto, não se limitando a design de aplicações. No livro “Design of Everyday Things”, Don Norman usa muitos exemplos de portas e outros itens bem cotidianos para nós para explicar UX.

O diagrama abaixo ilustra muito bem o que faz parte de cada um dos lados:

Diferença UX e UI

Então não confunda! UX e UI não são sinônimos.

1ª Edição do Rails Girls em Sorocaba 

1ª Edição do Rails Girls em Sorocaba 

1ª Edição do Rails Girls em Sorocaba 

Rails Girls é um evento de dois dias sem fins lucrativos que acontece no mundo inteiro e é destinado à mulheres de todas as idades que tem como objetivo oferecer uma grande primeira experiência em desenvolvimento de software.

A Tegra foi uma das apoiadoras do evento. Nós também apoiamos e contribuimos para outros movimentos como estes na comunidade, pois sabemos o quão importantes são essas ações para comunidade de TI aqui de Sorocaba.

O evento aqui em Sorocaba foi um sucesso! 5 palestras incríveis, 1 hora de lightning talks e um super workshop de Ruby e Ruby on Rails, foram 2 dias de evento, 4 organizadoras, 26 mulheres dispostas a aprender sobre tecnologia e 6 mentoras dispostas a tirar todas as dúvidas e tornar a primeira experiência de desenvolvimento de software das participantes incrível.