Palestrante: Anderson Augustinho - CELEPAR
Com a vinda da Internet, cada vez mais os sistemas são desenvolvidos para trabalhar em ambientes distribuídos, por exemplo: aplicativo web em um servidor, banco de dados em outro e assim pordiante. Para que se obtenha o melhor potencial destes, é obvio que o desempenho dos ativos que o cercam têm que serem bom (servidores, ativos de redes, outros sistemas, entre outros), mas o foco principal deste artigo é o desenvolvimento do sistema em si. Desenvolver utilizando as melhores práticas de programação, aproveitar todos os recursos que as linguagens dispõem e produzir um código limpo são primordiais para que se miniminizem as falhas e se construa um sistema de qualidade, assim será possível racionar os recursos envolvidos e minimizar os custos.
Palestrante: Emerson Castelano – Eccox
Tradicionalmente, as empresas utilizam múltiplas ferramentas de automação de workload enquanto os cenários de TI e os requisitos de negócios mudam rapidamente. Para atendimento à TI Bimodal a automação do workload fica dividida para atendimento à TI tradicional (Modo 1) e a ágil (Modo 2) com o desafio de executar e automatizar o workload para atendimento aos dois modos: confiável e ágil. A implementação de uma automação end-to-end e o planejamento contínuo de liberação de jobs no ambiente de produção tem um papel importante para atingir-se esse objetivo.
Palestrante: Álvaro Guimarães Salla - MAFFEI
Fascina-me a frase: “As mentiras do ontem, um dia se cansam de o ser, e se transformam nas verdades de hoje”. Veja, por exemplo, na política brasileira... Lembro-me, ainda jovem (sim, eu o fui), mostrando às pessoas do Banco do Brasil (mais jovens ainda), recém-chegadas das agências, que computador não era um cérebro eletrônico. O ano que estávamos (ou ele que estava?) era 1.969. Depois de alguma falsa erudição, eu concluía sem brilhantismo, a meio do pasmo geral, que uma CPU não pode executar dois programas ao mesmo tempo. Após algum sofrimento causadopelosconceitosnovos,aideiaeraentendidaesetransformavaemverdadeeternaesólida. Anosmais tarde, o primeiro MP65 com as suas duas corpulentas CPUs. Os mesmos alunos e toca a explicar como garantir a integridade dos dados compartilhados por elas na memória. Eu dizia enfático: “Isso é uma responsabilidade do sistema operacional, implementado via locks e latches”. Mais uma verdade eterna e sólida se construía e era enfiada goela abaixo da anoréxica plateia. But, time went by... Então, no dia 18 de Maio próximo, esta pessoa que vos escreve (agora bem velha), irá subir ao púlpito do CMG para humildemente repetir a frase inicial deste texto e depois dizer: “Sim senhores (as), a função Simultaneous Multithreading do z13 nega a primeira eterna e sólida verdade e a função Transactional Execution Facility (zEC12 e z13) nega a segunda eterna e sólida verdade”. No passado, terminei chamadas para o CMG como esta, com o lugar comum: “Não Perca”... Agora, não sei... Talvez eu diga “Perca...”, mas ao menos você sabe o que estará deixando de ganhar, isto é, mais duas eternas e sólidas verdades...
O documento discute a utilização da computação em nuvem para garantir a continuidade dos negócios através da tolerância a desastres. Ele apresenta métodos de pesquisa sobre replicação de dados em nuvens públicas e privadas usando point-in-time para recuperação de dados após incidentes. Também analisa cenários de falhas e a definição de parâmetros como Recovery Point Objective (RPO) para alinhar a tecnologia às necessidades do negócio.
Palestrante: Etéocles da Silva Cavalcanti
Não é um assunto novo e nem uma novidade, mas ... modelos de filas são ferramentas importantes para os profissionais que atuam na área de Capacity Planning e estão cada vez mais inseridos em muitos produtos e ferramentas, mas ... quando modelos analíticos estão disponíveis para serem utilizados, tornam-se um problema sério pelo fato de há uma barreira quanto do seu uso e seus resultados, normalmente por falta de conhecimento, conceitos, premissas, métricas estatísticas e sobre os modelos. Esse assunto realmente tem uma complexidade teórica estatística muito alta e se entramos nos detalhes teóricos passamos a temer sobre seu uso e resultados. O objetivo é apresentar de uma forma simples e direta que modelagem analítica é ainda uma ferramenta importante e que devemos e podemos utilizá-la melhor se tivermos conhecimento melhor do seu uso e seus resultados. A simples construção de ferramentas que calcule todas as métricas estatísticas dos componentes de um sistema de fila, gera a oportunidade de realizarmos simulações com pequenas mudanças de parâmetros. Nos estudos de capacidade a utilização de teoria das filas passam a ter mais consistência e sua flexibilidade nas análises e/ou questionamentos complexos trazem respostas rápidas e consistentes aos nossos gestores na tomada de decisão.
O documento compara treinamento supervisionado e não supervisionado em sistemas de detecção de intrusão baseados em anomalias. O estudo mostra que o treinamento supervisionado teve melhores resultados em taxas de detecção e falsos positivos, demonstrando que os limites dos grupos são mais consistentes com treinamento supervisionado.
O documento apresenta um estudo de caso sobre o uso da Internet das Coisas (IoT) para economia de energia em residências. O projeto monitora o consumo de energia de eletrodomésticos por meio de sensores e permite o desligamento remoto desses aparelhos via página web, reduzindo o desperdício de energia. Os resultados indicaram uma queda significativa no consumo após a implementação do sistema proposto.
O documento discute boas práticas de programação para melhorar a qualidade e performance de códigos. Ele aborda tópicos como comentários, nomes de variáveis, identação, testes, uso de loops, arrays e funções de forma otimizada. O documento argumenta que seguindo essas práticas recomendadas é possível desenvolver software mais eficiente e de fácil manutenção.
Apresentação Conceitos TOC (Theory Of Constraints)RZachi
O documento apresenta os conceitos e ferramentas da Theory of Constraints (TOC), uma filosofia de negócios introduzida por Eliyahu M. Goldratt em 1984. A TOC foca na restrição que limita o desempenho do sistema e propõe os 5 passos de focalização para identificar, explorar, subordinar, elevar e prevenir novas restrições. É aplicada em diversas áreas como manufatura, logística, marketing e projetos.
Palestrante: Emerson Castelano – Eccox
Tradicionalmente, as empresas utilizam múltiplas ferramentas de automação de workload enquanto os cenários de TI e os requisitos de negócios mudam rapidamente. Para atendimento à TI Bimodal a automação do workload fica dividida para atendimento à TI tradicional (Modo 1) e a ágil (Modo 2) com o desafio de executar e automatizar o workload para atendimento aos dois modos: confiável e ágil. A implementação de uma automação end-to-end e o planejamento contínuo de liberação de jobs no ambiente de produção tem um papel importante para atingir-se esse objetivo.
Palestrante: Álvaro Guimarães Salla - MAFFEI
Fascina-me a frase: “As mentiras do ontem, um dia se cansam de o ser, e se transformam nas verdades de hoje”. Veja, por exemplo, na política brasileira... Lembro-me, ainda jovem (sim, eu o fui), mostrando às pessoas do Banco do Brasil (mais jovens ainda), recém-chegadas das agências, que computador não era um cérebro eletrônico. O ano que estávamos (ou ele que estava?) era 1.969. Depois de alguma falsa erudição, eu concluía sem brilhantismo, a meio do pasmo geral, que uma CPU não pode executar dois programas ao mesmo tempo. Após algum sofrimento causadopelosconceitosnovos,aideiaeraentendidaesetransformavaemverdadeeternaesólida. Anosmais tarde, o primeiro MP65 com as suas duas corpulentas CPUs. Os mesmos alunos e toca a explicar como garantir a integridade dos dados compartilhados por elas na memória. Eu dizia enfático: “Isso é uma responsabilidade do sistema operacional, implementado via locks e latches”. Mais uma verdade eterna e sólida se construía e era enfiada goela abaixo da anoréxica plateia. But, time went by... Então, no dia 18 de Maio próximo, esta pessoa que vos escreve (agora bem velha), irá subir ao púlpito do CMG para humildemente repetir a frase inicial deste texto e depois dizer: “Sim senhores (as), a função Simultaneous Multithreading do z13 nega a primeira eterna e sólida verdade e a função Transactional Execution Facility (zEC12 e z13) nega a segunda eterna e sólida verdade”. No passado, terminei chamadas para o CMG como esta, com o lugar comum: “Não Perca”... Agora, não sei... Talvez eu diga “Perca...”, mas ao menos você sabe o que estará deixando de ganhar, isto é, mais duas eternas e sólidas verdades...
O documento discute a utilização da computação em nuvem para garantir a continuidade dos negócios através da tolerância a desastres. Ele apresenta métodos de pesquisa sobre replicação de dados em nuvens públicas e privadas usando point-in-time para recuperação de dados após incidentes. Também analisa cenários de falhas e a definição de parâmetros como Recovery Point Objective (RPO) para alinhar a tecnologia às necessidades do negócio.
Palestrante: Etéocles da Silva Cavalcanti
Não é um assunto novo e nem uma novidade, mas ... modelos de filas são ferramentas importantes para os profissionais que atuam na área de Capacity Planning e estão cada vez mais inseridos em muitos produtos e ferramentas, mas ... quando modelos analíticos estão disponíveis para serem utilizados, tornam-se um problema sério pelo fato de há uma barreira quanto do seu uso e seus resultados, normalmente por falta de conhecimento, conceitos, premissas, métricas estatísticas e sobre os modelos. Esse assunto realmente tem uma complexidade teórica estatística muito alta e se entramos nos detalhes teóricos passamos a temer sobre seu uso e resultados. O objetivo é apresentar de uma forma simples e direta que modelagem analítica é ainda uma ferramenta importante e que devemos e podemos utilizá-la melhor se tivermos conhecimento melhor do seu uso e seus resultados. A simples construção de ferramentas que calcule todas as métricas estatísticas dos componentes de um sistema de fila, gera a oportunidade de realizarmos simulações com pequenas mudanças de parâmetros. Nos estudos de capacidade a utilização de teoria das filas passam a ter mais consistência e sua flexibilidade nas análises e/ou questionamentos complexos trazem respostas rápidas e consistentes aos nossos gestores na tomada de decisão.
O documento compara treinamento supervisionado e não supervisionado em sistemas de detecção de intrusão baseados em anomalias. O estudo mostra que o treinamento supervisionado teve melhores resultados em taxas de detecção e falsos positivos, demonstrando que os limites dos grupos são mais consistentes com treinamento supervisionado.
O documento apresenta um estudo de caso sobre o uso da Internet das Coisas (IoT) para economia de energia em residências. O projeto monitora o consumo de energia de eletrodomésticos por meio de sensores e permite o desligamento remoto desses aparelhos via página web, reduzindo o desperdício de energia. Os resultados indicaram uma queda significativa no consumo após a implementação do sistema proposto.
O documento discute boas práticas de programação para melhorar a qualidade e performance de códigos. Ele aborda tópicos como comentários, nomes de variáveis, identação, testes, uso de loops, arrays e funções de forma otimizada. O documento argumenta que seguindo essas práticas recomendadas é possível desenvolver software mais eficiente e de fácil manutenção.
Apresentação Conceitos TOC (Theory Of Constraints)RZachi
O documento apresenta os conceitos e ferramentas da Theory of Constraints (TOC), uma filosofia de negócios introduzida por Eliyahu M. Goldratt em 1984. A TOC foca na restrição que limita o desempenho do sistema e propõe os 5 passos de focalização para identificar, explorar, subordinar, elevar e prevenir novas restrições. É aplicada em diversas áreas como manufatura, logística, marketing e projetos.
Palestrante: Luiz Carlos Orsoni - MAFFEI
A partir das z990 (T-Rex, em 2.003), os Mainframes da Série z passaram a ser Super Escalares, ou seja, capazes de executar mais de uma Instrução por Ciclo. Embora sejam indiscutivelmente capazes, isto não significa que sempre executarão mais do que uma Instrução por Ciclo, podendo não executar nenhuma! Como já enfatizamos em vezes anteriores, isto é extremamente dependente da qualidade do Software e de outras atividades que ocorram simultaneamente nos CECs. Esta palestra procurará aclarar os conceitos envolvidos, tendo como exemplos os detalhes internos das z13, capazes de executar até dez Instruções por Ciclo.
1) O documento apresenta dicas para se tornar um programador pragmático, focando em princípios como simplicidade, reutilização de código, manutenibilidade e adaptabilidade.
2) É destacada a importância de ter um portfólio de conhecimento atualizado com novas linguagens, livros e cursos para se manter relevante no mercado.
3) Ferramentas básicas como controle de versão, editores de texto e debuggers são apresentadas como essenciais para o trabalho do programador pragmático.
O documento discute o uso do GitLab para gerenciar o ciclo de vida de desenvolvimento de software, desde o código até a produção. Ele explica as etapas do processo, como gerenciar código fonte, apresenta o GitLab e mostra como usá-lo para automatizar tarefas como testes, revisão de código e implantação contínua.
Este documento fornece várias estratégias para implementar soluções improvisadas de forma permanente, conhecidas como "Programação Orientada a Gambiarras" (POG). Algumas dessas estratégias incluem: comentar código para "resolver problemas", usar exceções para controle de fluxo, e ignorar boas práticas de programação como testes e versionamento. O objetivo é fazer com que sistemas "funcionem" da maneira mais rápida possível, mesmo que isso gere problemas a longo prazo.
Este documento fornece técnicas e dicas para desenvolvimento em PHP sem o uso de "Programação Orientada a Gambiarras" (POG). Ele discute o que é POG, exemplos comuns, causas e ferramentas para evitá-la, incluindo técnicas de programação inspiradas por Chuck Norris.
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
O documento discute a arquitetura em camadas em Python, explicando o que é este estilo arquitetural, como aplicá-lo em projetos Python e quais são suas vantagens e desvantagens. O documento também aborda como padrões de projeto podem ajudar a implementar camadas e fornece um exemplo real de como este estilo foi aplicado em uma solução corporativa.
Este documento resume os principais conceitos de Scrum e eXtreme Programming (XP). Scrum é um framework ágil para gestão e entrega de produtos complexos, utilizando eventos como Sprints, Planning Poker e Scrum Daily. XP é uma metodologia ágil focada em práticas como programação em pares, integração contínua e desenvolvimento guiado por testes. O documento explica como essas abordagens ágeis promovem entregas frequentes com foco na satisfação do cliente.
Ir para cloud com arquitetura de microservices resolverá o meu problema?Better Developer
Uma análise crítica sobre o por que devemos ter soluções na Cloud e o que Microservices pode de fato resolver de problemas em uma solução.
Custo, confiabilidade, escalabilidade, manutenibilidade, velocidade no desenvolvimento, dentre outros pontos precisam ser analisados com clareza para que a decisão seja acertada.
Trabalhar como desenvolvedor de software pode ser um pouco frustrante, as vezes por estar preso a um projeto, as vezes por causa da linguagem que é usada, mas principalmente quando você está em um lugar que não tem nada a ver com você.
Nessa palestra eu vou falar sobre a minha experiência saindo de uma grande empresa tradicional para uma empresa ágil e como essa mudança me mostrou que algumas coisas que muitas empresas negligênciam são na verdade, extremamente importantes. Coisas como testes, continuous integration, pair programming, code review, open-source, como adaptar metodologias ágeis a sua realidade, python (é claro) e django, um framework que faz o desenvolvimento de uma aplicação web parecer simples
Vivemos em um mundo de siglas (BI, ERP, WF, BAM, BPM, OI, ...). A cada vez que nos deparamos com elas temos que lembrar de seu conceito e como ela é aplicada na prática. Algumas delas se confundem tanto no conceito quanto em alguma aplicação específica. Não é diferente quando falamos de Inteligência Operacional (OI do inglês “Operational Intelligence”). O objetivo deste trabalho é desmistificar o que é Inteligência Operacional e mostrar como é aplicada no cotidiano, principalmente mostrar quais são os desafios a serem vencidos.
Pequena apresentação sobre Coding Dojo, para o primeiro Coding Dojo Sankhya.
Essa apresentação é um resumo de muitas outras, dentre as quais:
http://pt.slideshare.net/serge_rehem/coding-dojo-em-5-minutos
http://pt.slideshare.net/alextercete/coding-dojo-e-tdd
http://pt.slideshare.net/marloncarvalho/coding-dojo-5328510
http://pt.slideshare.net/williansdepaula/coding-dojo-10208494
Ela foi usada para uma apresentação de 10 min.
Test Driven Development - Em busca de feedback util e concretoHélio Medeiros
O documento discute as vantagens do desenvolvimento guiado por testes (TDD), no qual os testes são escritos antes do código. O TDD ajuda a evitar bugs, fornecer feedback rápido e guiar o design da solução. Ele promove práticas como escrever testes funcionais para cada critério de aceitação da história do usuário.
Nesta palestra, vemos como é a carreira de um desenvolvedor Java, falamos um pouco sobre o mercado, sobre o desenvolvimento de um profissional e damos algumas dicas de como se tornar um ninja.
O documento discute os problemas associados com a abordagem "Big Design Up Front" (BDUF) para projetos de desenvolvimento de software, onde todos os requisitos e design são planejados no início do projeto. A abordagem BDUF tem alta taxa de falha de projetos devido a mudanças frequentes de requisitos, expectativas irrealistas e falta de envolvimento do usuário. Uma abordagem evolutiva e incremental é defendida, começando pequeno e permitindo que o design evolua conforme o projeto progride.
Apresentação feita para a equipe da RBS sobre automatização de testes. Em quatro passos, verificamos qual a parte do nosso código que precisa mais atenção, e auxiliado por ferramentas ampliamos a confiabilidade dos códigos.
CI: Integração Contínua ou Isolamento Contínuo?Camilla Crispim
Integração Contínua tem se mostrado fundamental para o desenvolvimento de software ágil, tendo em vista que “software funcionando deve ser mais valorizado que documentação abrangente”, defendido pelo Manifesto, é o principal benefício dessa prática. Além de ser a base para a prática de Entrega Contínua, juntamente com práticas como migração de banco de dados e uso de feature toggle.
O fato de ter um servidor de Integração Contínua (CI) configurado não significa que o time esteja integrando o código continuamente, o que pode acarretar em dores de cabeça e risco para a entrega do projeto.
Nesta palestra, exemplos com falhas de CI — situações vividas frequentemente por times de desenvolvimento — serão apresentados, bem como formas de resolvê-los e evitá-los; além de técnicas que podem ajudar a educar a si mesmo e ao time em relação à prática, visando o alcance do maior benefício de CI: Software funcionando* a qualquer momento.
* A definição de software funcionando abrange mais que código compilando. Além de compilar, o software deve fazer corretamente o que se propõe. Por isso, testes automatizados — em diferentes níveis na pirâmide de testes — são tão importantes.
O Programador Pragmático se concentra no processo fundamental do desenvolvimento de software:
a partir de um requisito, produzir código funcional e de fácil manutenção que agrade aos usuários.
Sem se ater a uma tecnologia específica, esta obra aborda tópicos que vão do desenvolvimento da carreira a técnicas de projeto para manter seu código flexível e fácil de adaptar
O documento resume as principais dicas e conceitos apresentados no livro "O Programador Pragmático" de Andrew Hunt e David Thomas. Apresenta 70 dicas para programação pragmática, como evitar duplicação de código, estimar corretamente tarefas, testar continuamente e projetar para flexibilidade e reuso.
Uma introdução ao SCRUM, palestra nível iniciante que apresenta o framework, seus atores, artefatos e cerimônias.
Sinta-se a vontade para baixar, copiar e distribuir. Apenas cite a fonte.
Palestra apresentada em faculdades por volta de 2012.
PS: Sobre a diferença entre entre Scrum Master e Gerente de Projetos, amadureci muito minha visão sobre isso, se quiser bater um papo, entre em contato.
O documento apresenta dicas para se tornar um especialista em PostgreSQL, incluindo: (1) aprender inglês para ler documentação e livros sobre bancos de dados, (2) procurar desafios reais para resolver problemas concretos, e (3) participar ativamente da comunidade PostgreSQL.
O documento discute os princípios de código limpo, incluindo os custos de ter um código confuso, definições de código limpo de acordo com especialistas, e princípios como nomes significativos, métodos pequenos, tratamento de erros, testes unitários, classes coesas e design emergente.
O documento discute boas práticas de programação orientada a objetos em Java, incluindo encapsulamento, herança, interfaces, injeção de dependência e padrões de projeto como Strategy e Template Method. Ele também aborda princípios como responsabilidade única, substituição de Liskov e inversão de dependência.
Palestrante: Luiz Carlos Orsoni - MAFFEI
A partir das z990 (T-Rex, em 2.003), os Mainframes da Série z passaram a ser Super Escalares, ou seja, capazes de executar mais de uma Instrução por Ciclo. Embora sejam indiscutivelmente capazes, isto não significa que sempre executarão mais do que uma Instrução por Ciclo, podendo não executar nenhuma! Como já enfatizamos em vezes anteriores, isto é extremamente dependente da qualidade do Software e de outras atividades que ocorram simultaneamente nos CECs. Esta palestra procurará aclarar os conceitos envolvidos, tendo como exemplos os detalhes internos das z13, capazes de executar até dez Instruções por Ciclo.
1) O documento apresenta dicas para se tornar um programador pragmático, focando em princípios como simplicidade, reutilização de código, manutenibilidade e adaptabilidade.
2) É destacada a importância de ter um portfólio de conhecimento atualizado com novas linguagens, livros e cursos para se manter relevante no mercado.
3) Ferramentas básicas como controle de versão, editores de texto e debuggers são apresentadas como essenciais para o trabalho do programador pragmático.
O documento discute o uso do GitLab para gerenciar o ciclo de vida de desenvolvimento de software, desde o código até a produção. Ele explica as etapas do processo, como gerenciar código fonte, apresenta o GitLab e mostra como usá-lo para automatizar tarefas como testes, revisão de código e implantação contínua.
Este documento fornece várias estratégias para implementar soluções improvisadas de forma permanente, conhecidas como "Programação Orientada a Gambiarras" (POG). Algumas dessas estratégias incluem: comentar código para "resolver problemas", usar exceções para controle de fluxo, e ignorar boas práticas de programação como testes e versionamento. O objetivo é fazer com que sistemas "funcionem" da maneira mais rápida possível, mesmo que isso gere problemas a longo prazo.
Este documento fornece técnicas e dicas para desenvolvimento em PHP sem o uso de "Programação Orientada a Gambiarras" (POG). Ele discute o que é POG, exemplos comuns, causas e ferramentas para evitá-la, incluindo técnicas de programação inspiradas por Chuck Norris.
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
O documento discute a arquitetura em camadas em Python, explicando o que é este estilo arquitetural, como aplicá-lo em projetos Python e quais são suas vantagens e desvantagens. O documento também aborda como padrões de projeto podem ajudar a implementar camadas e fornece um exemplo real de como este estilo foi aplicado em uma solução corporativa.
Este documento resume os principais conceitos de Scrum e eXtreme Programming (XP). Scrum é um framework ágil para gestão e entrega de produtos complexos, utilizando eventos como Sprints, Planning Poker e Scrum Daily. XP é uma metodologia ágil focada em práticas como programação em pares, integração contínua e desenvolvimento guiado por testes. O documento explica como essas abordagens ágeis promovem entregas frequentes com foco na satisfação do cliente.
Ir para cloud com arquitetura de microservices resolverá o meu problema?Better Developer
Uma análise crítica sobre o por que devemos ter soluções na Cloud e o que Microservices pode de fato resolver de problemas em uma solução.
Custo, confiabilidade, escalabilidade, manutenibilidade, velocidade no desenvolvimento, dentre outros pontos precisam ser analisados com clareza para que a decisão seja acertada.
Trabalhar como desenvolvedor de software pode ser um pouco frustrante, as vezes por estar preso a um projeto, as vezes por causa da linguagem que é usada, mas principalmente quando você está em um lugar que não tem nada a ver com você.
Nessa palestra eu vou falar sobre a minha experiência saindo de uma grande empresa tradicional para uma empresa ágil e como essa mudança me mostrou que algumas coisas que muitas empresas negligênciam são na verdade, extremamente importantes. Coisas como testes, continuous integration, pair programming, code review, open-source, como adaptar metodologias ágeis a sua realidade, python (é claro) e django, um framework que faz o desenvolvimento de uma aplicação web parecer simples
Vivemos em um mundo de siglas (BI, ERP, WF, BAM, BPM, OI, ...). A cada vez que nos deparamos com elas temos que lembrar de seu conceito e como ela é aplicada na prática. Algumas delas se confundem tanto no conceito quanto em alguma aplicação específica. Não é diferente quando falamos de Inteligência Operacional (OI do inglês “Operational Intelligence”). O objetivo deste trabalho é desmistificar o que é Inteligência Operacional e mostrar como é aplicada no cotidiano, principalmente mostrar quais são os desafios a serem vencidos.
Pequena apresentação sobre Coding Dojo, para o primeiro Coding Dojo Sankhya.
Essa apresentação é um resumo de muitas outras, dentre as quais:
http://pt.slideshare.net/serge_rehem/coding-dojo-em-5-minutos
http://pt.slideshare.net/alextercete/coding-dojo-e-tdd
http://pt.slideshare.net/marloncarvalho/coding-dojo-5328510
http://pt.slideshare.net/williansdepaula/coding-dojo-10208494
Ela foi usada para uma apresentação de 10 min.
Test Driven Development - Em busca de feedback util e concretoHélio Medeiros
O documento discute as vantagens do desenvolvimento guiado por testes (TDD), no qual os testes são escritos antes do código. O TDD ajuda a evitar bugs, fornecer feedback rápido e guiar o design da solução. Ele promove práticas como escrever testes funcionais para cada critério de aceitação da história do usuário.
Nesta palestra, vemos como é a carreira de um desenvolvedor Java, falamos um pouco sobre o mercado, sobre o desenvolvimento de um profissional e damos algumas dicas de como se tornar um ninja.
O documento discute os problemas associados com a abordagem "Big Design Up Front" (BDUF) para projetos de desenvolvimento de software, onde todos os requisitos e design são planejados no início do projeto. A abordagem BDUF tem alta taxa de falha de projetos devido a mudanças frequentes de requisitos, expectativas irrealistas e falta de envolvimento do usuário. Uma abordagem evolutiva e incremental é defendida, começando pequeno e permitindo que o design evolua conforme o projeto progride.
Apresentação feita para a equipe da RBS sobre automatização de testes. Em quatro passos, verificamos qual a parte do nosso código que precisa mais atenção, e auxiliado por ferramentas ampliamos a confiabilidade dos códigos.
CI: Integração Contínua ou Isolamento Contínuo?Camilla Crispim
Integração Contínua tem se mostrado fundamental para o desenvolvimento de software ágil, tendo em vista que “software funcionando deve ser mais valorizado que documentação abrangente”, defendido pelo Manifesto, é o principal benefício dessa prática. Além de ser a base para a prática de Entrega Contínua, juntamente com práticas como migração de banco de dados e uso de feature toggle.
O fato de ter um servidor de Integração Contínua (CI) configurado não significa que o time esteja integrando o código continuamente, o que pode acarretar em dores de cabeça e risco para a entrega do projeto.
Nesta palestra, exemplos com falhas de CI — situações vividas frequentemente por times de desenvolvimento — serão apresentados, bem como formas de resolvê-los e evitá-los; além de técnicas que podem ajudar a educar a si mesmo e ao time em relação à prática, visando o alcance do maior benefício de CI: Software funcionando* a qualquer momento.
* A definição de software funcionando abrange mais que código compilando. Além de compilar, o software deve fazer corretamente o que se propõe. Por isso, testes automatizados — em diferentes níveis na pirâmide de testes — são tão importantes.
O Programador Pragmático se concentra no processo fundamental do desenvolvimento de software:
a partir de um requisito, produzir código funcional e de fácil manutenção que agrade aos usuários.
Sem se ater a uma tecnologia específica, esta obra aborda tópicos que vão do desenvolvimento da carreira a técnicas de projeto para manter seu código flexível e fácil de adaptar
O documento resume as principais dicas e conceitos apresentados no livro "O Programador Pragmático" de Andrew Hunt e David Thomas. Apresenta 70 dicas para programação pragmática, como evitar duplicação de código, estimar corretamente tarefas, testar continuamente e projetar para flexibilidade e reuso.
Uma introdução ao SCRUM, palestra nível iniciante que apresenta o framework, seus atores, artefatos e cerimônias.
Sinta-se a vontade para baixar, copiar e distribuir. Apenas cite a fonte.
Palestra apresentada em faculdades por volta de 2012.
PS: Sobre a diferença entre entre Scrum Master e Gerente de Projetos, amadureci muito minha visão sobre isso, se quiser bater um papo, entre em contato.
O documento apresenta dicas para se tornar um especialista em PostgreSQL, incluindo: (1) aprender inglês para ler documentação e livros sobre bancos de dados, (2) procurar desafios reais para resolver problemas concretos, e (3) participar ativamente da comunidade PostgreSQL.
O documento discute os princípios de código limpo, incluindo os custos de ter um código confuso, definições de código limpo de acordo com especialistas, e princípios como nomes significativos, métodos pequenos, tratamento de erros, testes unitários, classes coesas e design emergente.
O documento discute boas práticas de programação orientada a objetos em Java, incluindo encapsulamento, herança, interfaces, injeção de dependência e padrões de projeto como Strategy e Template Method. Ele também aborda princípios como responsabilidade única, substituição de Liskov e inversão de dependência.
O documento discute as "gambiarras" ou soluções improvisadas que administradores de sistemas e redes costumam usar para resolver problemas técnicos. Ele define o termo "Programação Orientada a Gambiarras" e lista alguns de seus princípios, como "se funciona, então tá certo". Também descreve metodologias como a "Espírita", a do "Bope" e a de "MacGyver". Por fim, dá exemplos de gambiarras comumente usadas em departamentos de infraestrutura e suporte té
Princípios de Programação Orientada a Objetos Solid, dry e kiss DanielChristofolli
O documento discute os princípios SOLID, DRY e KISS para programação orientada a objetos. SOLID é um acrônimo para cinco princípios: responsabilidade única, aberto-fechado, substituição de Liskov, segregação de interface e inversão de dependência. DRY significa "não se repita" e KISS significa "mantenha simples, estúpido". Os exemplos demonstram códigos bons e ruins baseados nestes princípios.
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
Este documento fornece várias customizações e otimizações que podem ser feitas em grandes portais Joomla para melhorar o desempenho, segurança e requisitos diários, incluindo:
1) Melhorias de desempenho como cache, escolha de motores de banco de dados e balanceamento de carga.
2) Aprimoramentos de segurança como ocultação de detalhes do Joomla, captchas e renomeação de pastas.
3) Dicas para atualizações, testes e adaptação às necessidades dos usuários.
Este documento discute programação orientada a objetos em C# e fornece exemplos de código. Também aborda a diferença entre programação estruturada e orientada a objetos, características-chave da POO como encapsulamento, herança e polimorfismo.
A apresentação discute a importância dos testes de unidade e TDD, incluindo como eles melhoram o design de classes, qualidade do código e acoplamento. Também aborda níveis de teste, mock objects e quando não usar TDD.
O documento discute padrões de projeto, ferramentas e métodos ágeis. Apresenta padrões de projeto inspirados por Christopher Alexander e o livro "Padrões de Projeto" de Gamma et al. Discutem categorias de padrões como criação, estrutural e comportamental e princípios como programar para interfaces. Exemplos incluem um jogo RPG e o padrão Singleton.
O documento discute princípios de código limpo em PHP, incluindo o que é um código "sujo", como refatorar código para limpá-lo através de boas práticas como a aplicação de padrões de nomenclatura e princípios SOLID. Também aborda as consequências de um código ruim e a importância de os desenvolvedores serem responsáveis pelo código que produzem.
1. O documento fornece 300 ideias de programas para iniciantes em programação, organizadas por tópicos como saída, matemática e entrada de dados.
2. As ideias vão desde programas simples que exibem mensagens até desafios mais complexos envolvendo arquivos, registros e vetores.
3. O objetivo é fornecer exercícios práticos para que programadores iniciantes possam desenvolver suas habilidades programação e se tornar cada vez melhores.
Este documento resume 7 dicas para construir um software de alta qualidade, incluindo: 1) Não repetir código desnecessariamente, 2) Usar nomes descritivos, 3) Tratar erros adequadamente, e 4) Dividir o código em módulos com responsabilidade única. Além disso, discute a importância de padronização, documentação, melhoria contínua e padrões de projeto como SOLID.
Este documento resume os principais conceitos e dicas de programação pragmática. Ele descreve o perfil do programador pragmático, enfatizando a adoção rápida de novas tecnologias e o pensamento crítico. Também discute abordagens como evitar duplicação de código, manter sistemas ortogonais e a importância de estimativas realistas e testes.
O documento descreve um estudo de caso sobre o desenvolvimento de um serviço web chamado SmartSampa para facilitar o acesso aos dados do sistema de ônibus de São Paulo utilizando princípios de código limpo. O projeto usa técnicas como inversão de dependência, responsabilidade única e padrões como injeção de dependência e adapter para obter um software de qualidade com código limpo e fácil de manter.
O documento discute o padrão GRASP Information Expert, que atribui responsabilidades às classes com mais informações relacionadas. Aplicar esse padrão promove o encapsulamento, reduz acoplamento e torna o código mais modular e fácil de manter.
O documento resume as apresentações de um evento sobre design de software no século 21. As três principais apresentações discutiram os desafios do desenvolvimento mobile, bancos de dados NoSQL e projeto de software. Outros tópicos incluíram performance na Netflix, métodos ágeis, programação em par, documentação, arquitetura do Facebook e frameworks Java.
A apresentação discute a importância da depuração para desenvolvedores, fornecendo um guia rápido em 8 etapas para depuração eficiente e como utilizar as ferramentas de depuração no Visual Studio Code.
O documento discute a jornada de um desenvolvedor para aplicar os princípios SOLID em projetos de software ágil. Apresenta os cinco princípios SOLID (SRP, OCP, LSP, ISP e DIP) e discute como aplicá-los de forma iterativa para melhorar a estrutura e legibilidade do código, focando em simplicidade, limpeza e expressividade. Também aborda como detectar problemas de projeto e como o software pode "apodrecer" devido a mudanças não planejadas.
O documento discute princípios de programação orientada a objetos como SRP, OCP, LSP, ISP e DIP. Também aborda padrões como Singleton, Builder e melhores práticas para desenvolvimento de APIs como uso de URIs significativas e documentação clara.
Design patterns e tecnologias para modularização em java tdc2014Filipe Portes
O documento discute sobre modularização em Java, abordando conceitos como módulos, design patterns para modularização, e a plataforma OSGi. É apresentada uma demonstração de um projeto web modular usando OSGi e Java EE com empacotamento via Maven, EJBs como serviços OSGi e integração com JPA, JTA e CDI.
Semelhante a Qualidade no desenvolvimento de sistemas (20)
Apresentação realizada na reunião de 26 de junho de 2019 do Atlassian User Group de São Paulo. Demonstração de como a interface REST dos produtos da plataforma Atlassian podem ser considerados como alternativas aos APPS e a tarefas manuais pela interface Web. Ao final há um exemplo onde a opção de utilizar a interface REST economizou tempo e dinheiro e entregou o trabalho feito
O documento discute as tecnologias de computação empresarial moderna para cargas de trabalho de negócios. Ele descreve como infraestrutura flexível, escalabilidade não disruptiva, continuidade de negócios e eficiência operacional permitem aplicações corporativas modernas e liberdade através de padrões abertos. A segurança de dados confidenciais é essencial nesse ambiente.
This document discusses novelties in z/OS 2.4 and z14 GA2, including enhancements to application development and cloud computing. It introduces buzzwords from the past like OO and ERP that are now outdated, and new buzzwords like cloud, analytics, and microservices. Specific z/OS and hardware enhancements described include 25GbE for OSA and RoCE, crypto enhancements, dynamic I/O configuration for standalone CFs, asynchronous cache cross-invalidation, and HMC enhancements. The document ends with a debate between the presenters on whether new application development approaches will deliver continuous availability, data integrity and performance in production environments.
Na era do Devops, a operacionalização de serviços na nuvem, cada vez mais, vem sendo automatizada para atender demandas emergentes de negócios a qual exige resposta rápida à mudancas e capacidade em se escalar. Automatizações como CI/CD (Continuous Integration e Continuous Development) permitem em grande parte atender cenários diversos onde é necessário reduzir ou simplesmente liquidar operações manuais de Deployment por meio de passos automatizados intermediados por um agente robô. Em contrapartida, existe a necessidade em se ter o mínimo necessário de infraestrutura como pré-requisito, o que obriga equipes a investirem tempo e esforço na criação desses ambientes, nos quais, em alguns casos, a complexidade é multiplicada pelo uso de serviços distintos de computação na nuvem, a Multi-cloud. O tempo " Infrastructure as a Code" é um assunto emergente o qual trata infraestrutura como código versionado, um asset do projeto onde o seu objetivo não é apenas reduzir o esforço operacional mas também poder compatilhar conhecimento e engajar membros de equipes. Esta apresentação tem como objetivo introduzir "Infrastructure as a Code" assim como o seu potencial para cenários Multi-Cloud.
Marcus Vinicius Bittencourt é um especialista em Data Platform e SQL Server com 4 prêmios MVP. O documento discute cybercrime, brechas de segurança e demonstra como um atacante pode acessar uma rede corporativa e explorar falhas de segurança no SQL Server para escalar privilégios.
O documento descreve a jornada de definição da estratégia de nuvem de um banco brasileiro. O processo envolveu análises técnicas e estratégicas das aplicações, provedores de nuvem e cenários de migração, com o objetivo de identificar as aplicações ideais para a nuvem e os melhores caminhos de migração. A estratégia definida prioriza o uso de nuvem para novos projetos e estima potencial de até 40% das aplicações existentes migrarem para a nuvem.
O documento fornece uma visão geral da área de Ciência de Dados, discutindo como a tecnologia está transformando as profissões e a necessidade de atualização contínua. Também explica conceitos-chave da Ciência de Dados como descritivo, diagnóstico, preditivo e prescritivo e como esses conceitos são aplicados usando algoritmos e machine learning.
The document discusses several new capabilities and enhancements being introduced in z/OS V2.4, including z/OS Container Extensions to enable running Linux containers alongside z/OS applications, 25GbE support for OSA and RoCE, asynchronous cache cross-invalidation to improve performance, and policies to simplify customizing JES2 without assembler exits. It also mentions continued efforts to drive pervasive encryption and support for additional data analytics capabilities.
Geralmente escolhemos uma medida base como, por exemplo, o pico da média horária, ou o pico de um determinado período definido, para mostrar a evolução mensal do consumo de processador passado e fazer projeções de consumo futuro até uma determinada data. Esta medida, porém, pode não justificar, por si só, o crescimento de determinados meses. A proposta aqui é usar a evolução do perfil médio diário de consumo, analisando as mudanças de um mês para outro, e ao longo de anos, que pode ser aplicada à partição, equipamento ou Sysplex. Com essa visão é possível mais rapidamente identificar tendências de crescimento por horários e fazer ajustes no consumo de modo a minimizar os picos recorrentes.
O documento discute a tokenização de ativos e novas linhas de negócios. Ele aborda como empresas como a Microsoft estão apostando na tokenização de ativos usando blockchain e como seguradoras veem grandes oportunidades no armazenamento e cobertura de criptomoedas. Também menciona como a tokenização pode ajudar a combater a pobreza global e a poluição dos oceanos.
O Santo Graal da IoT é a capacidade de distribuir facilmente a inteligência entre a nuvem e os dispositivos (edge). Descubra como inovações edge vão ajudar você a encontrar e certificar hardwares seguros, lucrar com estes módulos e construir soluções da IoT compatíveis com o edge. Veja também com desenvolver, criar e implementar soluções escaláveis e repetíveis alavancando inovações em serviços de Visão, Voz, IoT Edge e Serviços Congnitivos para melhorar soluções da IoT.
O documento discute a solução Eccox Application for Parallel Testing (APT) da Eccox Technology. Em três frases: A APT fornece ambientes de teste isolados no mainframe para permitir testes paralelos, clonando recursos como bancos de dados e arquivos. Isso permite que vários usuários executem testes simultaneamente sem conflitos, reduzindo custos com infraestrutura e horas-homem. A solução também gera dados de teste sintéticos para apoiar cenários de teste isolados.
O documento descreve como o Banco de Brasília implementou uma solução de balanceamento dinâmico para melhorar a gestão da capacidade e desempenho de seu ambiente mainframe IBM ZOS. A solução otimizou o uso dos recursos, reduziu custos com software e adiamento de hardware, com retorno de investimento em 5 meses.
Esta palestra mostrará o “Basicão” [por isso o 1.01 no Título!] da Eletricidade e da Eletrônica, enfocando: Condutores e Isolantes, Relês, Válvulas Termoiônicas [a Retificação e Amplificação começaram assim...], Flip-Flops, Dopagem de Cristais Semi Condutores, Diodos, Transístores, CMOS, SRAM e DRAM. A utilização destes componentes básicos, em Circuitos Sequenciais e Combinatórios, será tema para futuro estudo.
O documento discute a pervasive encryption no IBM Z, que permite a criptografia transparente e em massa de dados em repouso para simplificar a proteção de dados e o cumprimento de normas regulatórias. A pervasive encryption criptografa automaticamente todos os dados em repouso usando chaves gerenciadas pelo sistema, de forma transparente para as aplicações. Isso protege dados em vários níveis, incluindo VSAM, DB2, IMS e logs, entre outros, sem impactar o desempenho.
Nos novos mainframes IBM z, a tecnologia do chip de CPU ficou mais complexa, especialmente incorporando camadas de memória cache. Uma nova terminologia foi introduzida -Relative Nest Intensity (RNI), indicando o nível de atividade para a hierarquia de memória. A área mais sensível ao desempenho da hierarquia de memória é a distribuição de atividade dos caches compartilhados e a memória: quanto maior o RNI, mais profunda será a hierarquia de memória que o processador deve percorrer para recuperar as instruções e os dados de um workload. Discutiremos como podemos diminuir a influência do RNI no CICS fazendo ajustes de desempenho.
O documento discute Infraestrutura como Código (IaC) e como ele pode ser usado para automatizar infraestrutura em nuvem de forma segura e consistente. Ele explica os benefícios do IaC, como aumentar a produtividade das equipes, permitir mudanças contínuas e melhorias incrementais. Também aborda desafios como deriva de configuração e ferramentas IaC populares como Terraform.
A cada nova geração de mainframes, a IBM aumenta a capacidade de suas máquinas. Mas você sabe realmente como a arquitetura do sistema de todos esses processadores afeta a performance e impacta o seu Planejamento da Capacidade? Essa apresentação propõe essa discussão e mostra um caso real sobre como os componentes internos da arquitetura do sistema afetam as diretrizes das disciplinas de Planejamento da Capacidade, Disponibilidade e Desempenho dos ambientes mainframe.
Inspirada na lei europeia GDPR (General Data Protection Regulation) que já foi colocada em prática pela comunidade no final de maio de 2018, a LGPD já em vigor no Brasil com prazo de implantação até agosto 2020, tem como objetivo de reforçar a segurança jurídica dos dados pessoais dos indivíduos e mitigar abusos em relação a estes ativos tão poderosos e valiosos. Nesta apresentação iremos abordar um método de implantação da LGPD nas empresas do Brasil e os principais pontos de adequação a seus requisitos.
Este documento descreve os componentes internos do processador z14. Ele discute os estágios de fetch, parsing, decode e issue de instruções, bem como as unidades de execução fixa, load/store, vetor e flutuante. O documento também fornece diagramas ilustrando o fluxo de dados e instruções entre esses componentes.
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
Este certificado confirma que Gabriel de Mattos Faustino concluiu com sucesso um curso de 42 horas de Gestão Estratégica de TI - ITIL na Escola Virtual entre 19 de fevereiro de 2014 a 20 de fevereiro de 2014.
2. Agenda
Abstract
1 Filosofias de Programação
2 Boas Práticas Gerais de Programação
3 Boas Práticas de Programação - Código
4 POG – Programação Orientada à Gambiarra
5 Conclusões
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 2
3. Abstract
- Com a vinda da Internet, cada vez mais os sistemas são
desenvolvidos para trabalhar em ambientes distribuídos,
por exemplo: aplicativo web em um servidor, banco de
dados em outro e assim por diante. Para que se obtenha o
melhor potencial destes, é obvio que o desempenho dos
ativos que o cercam têm que serem bom (servidores,
ativos de redes, outros sistemas, entre outros), mas o foco
principal deste artigo é o desenvolvimento do sistema em
si.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 3
4. Abstract
- Desenvolver utilizando as melhores praticas de
programação, aproveitar todos os recursos que as
linguagens dispõem e produzir um código limpo são
primordiais para que se miniminizem as falhas e se
construa um sistema de qualidade, assim será possível
racionar os recursos envolvidos e minimizar os custos.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 4
5. 1 Filosofias de Programação
1.1 SOC - Separation Of Concerns
- Separação de interesses. Dividir rotinas em trechos
pequenos quanto possível, e tanto quanto fizer sentido.
Quando se tem um grande problema para resolver, deve-
se começar separando esse “problemão”, em “problemas
menores”, e resolver cada problema de uma vez. Isolando
em pequenas partes focadas será privilegiado o
reaproveitamento do código.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 5
6. 1 Filosofias de Programação
1.2 DRY – Don't Repeat Yourself
- Não repita a si mesmo. Se já existe um trecho de código
que resolve uma dada situação e, logo mais adiante, se
depara com a mesma situação, não deve-se desenvolver a
mesma rotina ou muito menos replicá-la e sim usar o
mesmo trecho. Sem Ctrl+C / Ctrl+V.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 6
7. 1 Filosofias de Programação
1.3 DIE - Duplication is Evil
- Duplicação é ruim. Ruim para o desenvolvedor, para o
desenvolvimento, para futuras correções. Não duplique
códigos. Exemplo: Se já existe uma rotina de conexão ao
banco de dados, não duplicar essa rotina.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 7
8. 1 Filosofias de Programação
1.4 KISS = Keep It Simple, Stupid
- Manter simples. Descartar toda a complexidade que não
for realmente necessária. Lógico que nem tudo é simples.
Existem coisas que realmente não são. Porém a idéia do
KISS, não é deixar fácil, mas sim evitar complicar. Evitar
aumentar o custo e entregar exatamente o que foi
requisitado. E apenas isso. A aplicação só ganhará com
isso. KISS é fazer menos, e não fazer da forma mais fácil.
Manter o foco.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 8
9. 1 Filosofias de Programação
1.5 YAGNI = You Aren’t Going Need It
- Parecido com o conceito anterior. “Você não vai precisar
disso”. Resumindo: não complicar ou inventando o que
não será usado. É uma tentação comum querermos
desenvolver o sistema mais incrível do mundo, com as
melhores funcionalidades. Seja racional. Preveja a
expansão e escalabilidade, porém não fique dando voltas
sem sair do lugar ou entregar o que não foi pedido, por
estar implementando algo que nem era requisito e nem
necessário naquele momento.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 9
10. 1 Filosofias de Programação
1.6 Teoria da Janela Quebrada
- Livro de George L. Kelling e Catherine Coles
- Imagine um edifício com algumas janelas quebradas. Se
as janelas não são reparadas, a tendência é que vândalos
quebrem mais janelas.
- Uma estratégia de sucesso para prevenir o vandalismo,
dizem os autores do estudo, é resolver os problemas
quando eles são pequenos, assim a probabilidade dos
vândalos estragarem mais é menor.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 10
11. 2 Boas Práticas Gerais de Programação
2.1 Comentários
- No início de cada arquivo deve ter seu nome, uma
descrição do que o arquivo contém, quem o criou e em
qual data.
- Antes de cada função, deve ser explicado o que ela faz,
o que ela retorna e qual o comportamento das variáveis.
Use como premissa que alguém consegue definir se irá ou
não usar a rotina e poderá usá-la apenas lendo o
comentário, sem precisar conhecer o código.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 11
12. 2 Boas Práticas Gerais de Programação
2.1 Comentários
- Se a função ficar grande, é importante explicar na
criação das variáveis o que elas fazem. Comente cada
grande parte do código. Por exemplo: quando o programa
entra em um if e quando entra em um else.
- Não precisa comentar coisas óbvias como explicar que
contador++ está incrementando o contador.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 12
13. 2 Boas Práticas Gerais de Programação
2.2 Nomes Claros às Variáveis
- Uma variável não precisa ter nome e sobrenome, mas
não deve ser chamada apenas por uma letra.
- Seu nome deve ter um significado lógico, de forma que
alguém apenas lendo o nome consiga imaginar o que deve
ser armazenado na variável.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 13
14. 2 Boas Práticas Gerais de Programação
2.3 Evite mapeamento mental
- Às vezes vemos variáveis nomeadas com uma letra só.
Sem dúvida são perfeitamente aceitáveis em um loop (i é
a mais comum), mas desde que o loop seja pequeno e não
haja conflitos. Em outros contextos, as variáveis de uma
só letra certamente serão problemáticas, pois o leitor terá
que fazer mapeamento mental daquela letra para o seu
real significado. Com o passar do tempo, nem o próprio
autor do código lembrará qual o verdadeiro conceito
daquela variável de uma letra só.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 14
15. 2 Boas Práticas Gerais de Programação
2.4 Declaração de variáveis separadas da lógica
- Ter como prática declarar todas as variáveis que um
programa irá utilizar logo após o título da função. Desta
forma fica muito mais simples para quem irá fazer a
manutenção do código entendê-lo.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 15
16. 2 Boas Práticas Gerais de Programação
2.5 Use Tipagem Forte Logicamente
- Algumas linguagens são fracamente tipada. Ou seja, ele
não checa se você está usando corretamente os tipos da
linguagem. Você pode inserir um texto em uma variável
numérica, por exemplo. Pode, mas não deveria.
- Tome o cuidado de usar variáveis do tipo correspondente
ao seu uso.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 16
17. 2 Boas Práticas Gerais de Programação
2.6 Nomes de Classes
- Classes e Objetos devem ter nomes com substantivos
como por exemplo Pessoa, Cliente, Conta.
- Evite usar verbos porque estes devem ser usados para
métodos ou funções.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 17
18. 2 Boas Práticas Gerais de Programação
2.7 Princípio da Responsabilidade Única
- O princípio da responsabilidade única estabelece que
uma classe ou módulo deve ter uma, e apenas uma,
responsabilidade.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 18
19. 2 Boas Práticas Gerais de Programação
2.8 Nomes de Métodos
- Métodos (ou funções) devem ser nomeadas com verbos,
como por exemplo realizarPagamento, apagarPagina ou
salvar.
- Métodos que acessam, mudam ou predicam devem ser
nomeados de acordo com o valor deles e prefixados com
os verbos get, set ou is, como por exemplo getNome,
isRealizadoPagamento ou setCor.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 19
20. 2 Boas Práticas Gerais de Programação
2.9 Use Comandos Claros e Usualmente Conhecidos
- A maioria das linguagens possuem mais de uma forma
para resolver uma situação. Tente sempre usar a mais
comum. Pode ser que a manutenção do programa seja
feita por uma pessoa que não tenha muito conhecimento
da linguagem e não conheça o comando utilizado.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 20
21. 2 Boas Práticas Gerais de Programação
2.10 Identação
- É algo simples e que facilita incrivelmente tanto a
construção de um programa como sua manutenção.
- Usar, se possível, o próprio tab ao invés de espaços, para
que seja fácil manter todas as linhas iniciando-se na
mesma coluna.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 21
22. 2 Boas Práticas Gerais de Programação
2.11 Funções
- A primeira e mais importe regra é que funções devem ser
pequenas. A segunda regra é que devem ser menores
ainda.
- Funções pequenas são fáceis de entender e facilitam o
cumprimento do princípio: "faça apenas uma coisa".
- A regra de ouro é: "Funções devem fazer uma coisa.
Devem fazê-la bem. Devem fazer somente essa coisa."
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 22
23. 2 Boas Práticas Gerais de Programação
2.11 Funções
- O melhor jeito de saber se a função está fazendo "mais
do que uma coisa" é verificar se é possível extrair outra
função de dentro dela.
- Funções devem fazer algo ou responder algo, nunca os
dois. Ou a função deve alterar o estado de um objeto ou
deve retornar alguma informação sobre o objeto. Fazer as
duas coisas em geral leva a confusões.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 23
24. 2 Boas Práticas Gerais de Programação
2.12 Testes
- Construir um software não é somente escrever código e
vê-lo funcionar, é saber que aquele código será
manutenível e que outras pessoas vão alterá-lo. Por isto
teste é fundamental.
- Quem desenvolve tem que ser responsável por aquilo
que escreve e saber que seu sistema tem que continuar
funcionando, por isto toda linha escrita deve estar
testada.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 24
25. 2 Boas Práticas Gerais de Programação
2.12 Testes
- Muitas empresas veem testes como gastos maiores no
projeto, o que de fato acontece, porém a qualidade do
software produzido é algo significante. Quando não se
produz teste automatizado, a quantidade de testes
manuais são maiores e muitas vezes o custo desses testes
também é maior.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 25
26. 2 Boas Práticas Gerais de Programação
2.13 Programe para os Outros e não para Você
- Lembre-se que na vida real poder ser que não seja você
que irá corrigir o seu programa. Assim, deve-se sempre
programar de forma simples e clara, de forma que
qualquer pessoa que precise alterá-lo o faça facilmente.
- Se pensar que um programa confuso pode garantir seu
emprego, provavelmente vai o perder rapidamente e
muito dificilmente conseguirá recomendação para outro,
dada a pouca qualidade do trabalho.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 26
27. 2 Boas Práticas Gerais de Programação
2.13 Programe para os Outros e não para Você
- Lembre-se: que você também precisará corrigir
programas dos outros. Garanto que se os outros não
seguirem as regras, você vai entender claramente porque
elas são tão importantes.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 27
28. 3 Boas Práticas de Programação - Código
- Para se ter um código bem enxuto e com boa qualidade
não basta apenas termos convenção de nomes, classes,
variáveis, entre outros. Precisamos ter um padrão para
algumas situações para melhorarmos não somente a
performance do código que está sendo escrito, mas
também a qualidade de ordenação para que, futuros
desenvolvedores, ao olharem o nosso código em uma
manutenção, consigam facilmente identificar e assim
trabalhar em cima do problema e não reaprender tudo o
que foi feito, assim desperdiçando tempo e dinheiro.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 28
29. 3 Boas Práticas de Programação - Código
- Na sequência serão apresentadas algumas técnicas que
não são muito utilizadas no dia-a-dia dos programadores
pois são pequenos detalhes que influenciam na
performance e na escrita de um bom código. Essas boas
práticas vão desde a ter um código elegante até como
melhorá-lo.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 29
30. 3 Boas Práticas de Programação - Código
3.1 Operadores de Curto Circuito
- Operadores que operam em curto-circuito fazem parte
de algumas linguagens de programação. Esses operadores
ajudam a poupar verificações desnecessárias em nosso
código.
if(condicao1 && condicao2) { //… }
if(condicao1 || condicao2) { //… }
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 30
31. 3 Boas Práticas de Programação - Código
3.1 Operadores de Curto Circuito
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 31
32. 3 Boas Práticas de Programação - Código
3.2 Teste de Ordenação Lógica
- Um detalhe bastante importante que muitas vezes não
se presta atenção é quando utilizamos o bloco switch.
Neste caso, o ideal é sempre ordenar a lista de
possibilidades da mais frequente para a menos frequente.
Isso evitará que a avaliação seja feita em vários itens,
tendo assim uma perda de performance, pois se o item
frequente está na último posição a ser avaliada, ela
deverá passar por todas as outras antes.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 32
33. 3 Boas Práticas de Programação - Código
3.2 Teste de Ordenação Lógica
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 33
34. 3 Boas Práticas de Programação - Código
3.3 Fusão de Loops
- A fusão de loops é quando usam-se dois loops distintos
para operar o mesmo conjunto de elementos e, em cada
um deles, efetuar uma ação diferente. Na maioria das
vezes utilizamos isso em coleções para alterar algum
valor, ou algo do tipo.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 34
35. 3 Boas Práticas de Programação - Código
3.3 Fusão de Loops
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 35
36. 3 Boas Práticas de Programação - Código
3.3 Fusão de Loops
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 36
37. 3 Boas Práticas de Programação - Código
3.4 Minimizar Trabalho dentro de Loops
- Este é um dos pontos essenciais para ganharmos em
performance na aplicação. Muitas vezes colocamos
operações custosas dentro de loops, o que acarretará na
execução desta operação o mesmo número de vezes que o
loop for executado. Na maioria dos casos, esse código
custoso faz sempre a mesma coisa, ou seja, é um cálculo
que independe de qualquer valor proveniente do loop.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 37
38. 3 Boas Práticas de Programação - Código
3.4 Minimizar Trabalho dentro de Loops
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 38
39. 3 Boas Práticas de Programação - Código
3.4 Minimizar Trabalho dentro de Loops
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 39
40. 3 Boas Práticas de Programação - Código
3.5 Busca de um Elemento em um Array
- Este é outro dos pontos essenciais para ganharmos em
performance na aplicação. Muitas vezes colocamos
procuramos um elemento dentro de um array. Ao
localizarmos o elemento o correto é pararmos a busca,
assim economiza-se um processamento precioso.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 40
41. 3 Boas Práticas de Programação - Código
3.5 Busca de um Elemento em um Array
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 41
42. 3 Boas Práticas de Programação - Código
3.6 Code Caching
- Code caching significa salvar um determinado valor que
é proveniente de algum cálculo mais complexo em um
membro interno que, por sua vez, será exposto pela
classe. Geralmente utilizamos essa técnica quando o valor
é frequentemente utilizado e, se for sempre calculado,
teremos uma perda de performance, já que o cálculo seria
efetuado o mesmo número de vezes que a propriedade é
invocada.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 42
43. 3 Boas Práticas de Programação - Código
3.6 Code Caching
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 43
44. 3 Boas Práticas de Programação - Código
3.7 Números Mágicos
- Os números mágicos são aqueles números que temos no
código que referenciam índices de arrays, campos de
colunas do banco de dados, contadores, etc.. Em alguns
casos, como por exemplo, para referenciar as colunas do
ResultSet (consulta ao banco de dados) é sempre mais
performático do que passar o nome do campo, mas isso
dificulta a legibilidade do código, principalmente se
precisar dar manutenção neste código mais tarde.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 44
45. 3 Boas Práticas de Programação - Código
3.7 Números Mágicos
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 45
46. 3 Boas Práticas de Programação - Código
3.7 Números Mágicos
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 46
47. 3 Boas Práticas de Programação - Código
3.8 Atribuição de Valor com Somente Duas
Possibilidades
- Para variáveis que somente poderão receber duas
possibilidades de valores, baseadas em uma estrutura de
condição SE, iniciar a mesma com o valor mais provável e
somente alterar se a condição for verdadeira, assim
elimina-se o processamento do SENÃO.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 47
48. 3 Boas Práticas de Programação - Código
3.8 Atribuição de Valor com Somente Duas
Possibilidades
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 48
49. 3 Boas Práticas de Programação - Código
3.8 Atribuição de Valor com Somente Duas
Possibilidades
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 49
50. 3 Boas Práticas de Programação - Código
3.9 Execução de Funções Desnecessárias
- Mais um item para melhor a performance do sistema. Se
a função não é necessária no momento, não a execute.
Outras duas questões:
1) Se ela for necessária, será que está utilizando da forma
correta?
2) Não existe uma função mais performática do que a que
está utilizando?
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 50
51. 3 Boas Práticas de Programação - Código
3.9 Execução de Funções Desnecessárias
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 51
52. 3 Boas Práticas de Programação - Código
3.10 Abre e Fecha Chaves (Blocos de Comandos)
- Para a maioria das linguagens é opcional o uso do abre e
fecha chaves ({ }) quando há somente uma linha de
comando no bloco. O questão é que quando se insere mais
uma linha elas devem ser colocadas, pois a execução do
código não será a esperada. Dado isto, a sugestão é usar
sempre.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 52
53. 3 Boas Práticas de Programação - Código
3.10 Abre e Fecha Chaves (Blocos de Comandos)
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 53
54. 3 Boas Práticas de Programação - Código
3.10 Abre e Fecha Chaves (Blocos de Comandos)
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 54
55. 3 Boas Práticas de Programação - Código
3.10 Abre e Fecha Chaves (Blocos de Comandos)
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 55
56. 3 Boas Práticas de Programação - Código
3.11 CTRL+C/CTRL+V
- Nunca utilizar o CTRL+C/CTRL+V. Se precisar repetir um
trecho de código, o melhor a ser feito, é criar uma função
com o trecho e fazer os dois pontos chamarem a função.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 56
57. 4 POG – Programação Orientada à Gambiarra
- Esta solução é ótima, mas não temos tempo para isto.
Faça a boa.
- A culpa é do Hardware.
- É só reiniciar que funciona.
- É fácil! Não vejo dificuldade em fazer isto. É só um if.
- Tive que arrumar no banco de dados. Se o problema
voltar me avisa.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 57
58. 4 POG – Programação Orientada à Gambiarra
- O código está certo, deve ser problema com a massa de
dados.
- Deixa estourar a bomba. Aí se vierem atrás de mim eu
vejo o que faço.
- Eu fiz somente o que foi especificado.
- Quando eu cheguei já estava assim.
- É só um botão. O que pode dar errado?
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 58
59. 5 Conclusões
- Economia de hardware;
- Facilidade na manutenção e inclusão de novas
funcionalidades;
- Respostas mais rápidas (para o cliente);
- Principal: é de extrema importância colocar o que foi
apresentado em prática, pois sem isto os benefícios
citados não acontecem.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 59
61. Referências
AÉCE, I. Boas Práticas de Programação. Disponível em:
http://www.linhadecodigo.com.br/artigo/1310/boas-praticas-de-programacao.aspx.
Acesso em 15 mar 2016.
BRUNO, W. Boas Práticas de Programação - Filosofias de Desenvolvimento. Disponível
em: http://wbruno.com.br/php/boas-praticas-de-programacao-filosofias-de-
desenvolvimento. Acesso em 01 mar 2016.
FILHO, J. O. M. Programação Orientada à Gambiarra. Disponível em:
http://pt.slideshare.net/josenaldomatos/programao-orientada-a-gambiarra-30097904.
Acesso em 28 mar 2016.
MARZAGÃO, L. F. Boas Práticas em Programação. Disponível em:
http://dulimind.blogspot.com.br/2014/05/boas-praticas-em-programacao-parte-
01.html. Acesso em 16 mar 2016.
TAVARES, L. Boas Práticas de Programação. Disponível em:
http://www.devmedia.com.br/boas-praticas-de-programacao/31163. Acesso em 09 mar
2016.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 61
62. Referências
UNIVERSIDADE ESTADUAL DE CAMPINAS. Linguagem e Técnicas de Programação - Boas
Práticas. Disponível em:
http://www.ft.unicamp.br/liag/wp/robocode_files/qualidade.pdf. Acesso em 08 mar
2016.
WIKIPEDIA. Teoria das Janelas Partidas. Disponível em:
https://pt.wikipedia.org/wiki/Teoria_das_Janelas_Partidas. Acesso em 02 mar 2016.
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 62
63. Contato
Anderson Augustinho
Analista de Sistemas
Professor e Instrutor Java
andersonaug@celepar.pr.gov.br
Proibida cópia ou divulgação sem permissão escrita do CMG Brasil. 63