Bem vindo! Este espaço é dedicado a tecnologia java. Discussões, comentários e críticas sobre a amplitude deste universo..
Como desenvolver software em ambientes adversos
A algum tempo eu observo ambientes de trabalho em empresas de desenvolvimento de software. Em especial empresas que mantém muitos desenvolvedores em um espaços muito pequenos. São diferentes equipes , diferentes tecnologias, diferentes projetos, estimativas curtas e opiniões contrárias. Ou seja, a "palha" para explodir um ambiente. E como colocar fogo nisso? Conversando e muito. Em uma empresa em especial observei um ambiente com 16 pessoas em uma sala de 24 metros quadrados incluindo banheiro e sala de reuniões de 5 lugares.
As pessoas começavam a chegar no trabalho pelas 7h da manhã. Geralmente quem chegava primeiro fazia o primeiro café do dia. Detalhe: Com apenas uma cafeteira de 1.5 litros para todos. Isso por si só gera um custo altíssimo em torno de R$-8.000,00/ano levando-se am conta o custo/hora do profissional que pára de trabalhar para fazer café incluindo o custo de cada colher e outros fatores como a média de cafeteiras feitas por dia. Enquanto que se tivesse uma cafeteira de 6 ou 9 litros faria-se café apenas uma vez por dia e o custo baixaria para R$-1.500,00 por ano. Mas não irei detalhar este tipo de cálculo agora.
Mas vamos a produtividade. É fato que num ambiente de desenvolvimento de software não se trabalha realmente mais do que 80% de todo o horário comercial. Pensando no tempo gasto indo ao banheriro, reuniões e ou discussões necessárias ou não. Se fosse sempre assim até seria uma boa média. Só que no final é pior porque, em média, apenas 50% dos dias em que se espera ter aqueles 80% produtivos são realmente assim. Pois nestes esperados(inesperados) 50% acontecem sempre coisas para diminuir nossas estimativas.
Acontecem coisas como problemas de infra-estrutura, tempo de gerenciamento seja ele auto ou para a equipe, reuniões não programadas junto as estimativas ou que não sejam relacionadas ao trabalho de desenvolvimento, pessoas que chegam ao ambiente trazendo demandas ou cobrando algo para a equipe em voz alta ou achando que estão contribuindo para maior agilidade no cumprimento de tarefas. Sem falar em falhas técnicas ou no que menos se dá importância: Processos. Sim processos. Empresas que tem até uma lindíssima descrição, não seguem o seu próprio processo. Começando por aqueles que deveriam dar o exemplo infelizmente. Esquecem-se de que até uma reunião de RH deveria ter um agendamento e registro de participação dos envolvidos. Ou seja, MONITORAMENTO. Puro e simples.
E, ao levar em conta o que foi mencionado no primeiro parágrafo sobre muitas pessoas em ambientes pequenos chega a diminuir a produtividade de algumas pessoas em mais de 50%(dos 50% já mencionados).
Ou seja, uma pessoa que ganha R$-2.000,00 que renderia normalmente R$-1.600,00 tem seu rendimento baixado para R$-800,00 devido a acontecimentos inesperados e baixado para R$-400,00 devido perda de concentração em ambientes com muitas pessoas. Não esquecendo que a empresa continua com um custo em torno de R$-4.000,00 levando em conta os encargos que a empresa precisa arcar com o contratado.
No final, há melhores maneiras para conseguir trabalhar em ambientes em que não possuem processos é montar seu próprio processo de trabalho individual. Utilizando uma ferramenta pessoal para se organizar. E para o barulho nada melhor do que, após organizar seu trabalho, colocar um bom ou excelente fone de ouvidos, programar suas músicas preferidas ou rádio e esquecer do resto da empresa. Para que assim voce consiga render por volta de 45/50% a mais daqueles primeiros já perdidos pela desorganização dos processos e perda de foco. Se você for um desenvolvedor que normalmente rende mais que o resto da equipe então tudo bem. Você voltou a média que deveria ter mantido. ;)
Como entender ligações SQL (How to learn SQL)
Simples e direto:
Aprenda visualizando esta imagem como funcionam as ligações na hora de criar um SQL.
Indo além do "select * from tabela" com, no máximo um "where id = ?"
Aprenda visualizando esta imagem como funcionam as ligações na hora de criar um SQL.
Indo além do "select * from tabela" com, no máximo um "where id = ?"
Java - The Alphabet (Sopa de Letrinhas)
Apresentação Sobre o Universo Java.
The Beginning:
O Java foi criado em 1992 por uma equipe de engenheiros de tecnologia da sun.Inicialmente batizado de oak(carvalho) e em 1995 foi rebatizado para Java. Existem várias histórias sobre a origem do nome. Ela foi criada para ser uma linguagem limpa(green-sem poluição) e assim ser independente
de plataforma e poder rodar em dispositivos eletronicos como video-cassestes, televisores, etc.
Como foi criado para ser uma linguagem limpa o conceito de maquina virtual foi o principio de tudo. É a JVM(Java Virtual Machine) que faz a mágica acontecer. Que interpreta os arquivos java e assim começa o desenrolar do "Alfabeto Java".
JVM – Java Virtual Machine(Máquina Virtual Java)
É responsável por carregar os programas e fazer a conversão do
bytecodes em Linguagem de Máquina, definida para cada estrutura de (SO)Sistema Operacional.
Trocando em miúdos, o desenvolvedor pode criar um código que será independente de SO.
JRE – Java Runtime Environment(Ambiente de Tempo de Execução)
É o Java que vem instalado nos computadores novos. Serve para que os softwares feitos em
java possam rodar nos pcs.
JSE – Java Standard Edition(Java Edição Básico)
Ambiente com a estrutura básica necessária para criação de programas Java, contém a JVM,
o compilador e as bibliotecas Java necessárias.
JEE – Java Enterprise Edition(Java Edição Empresarial)
Assim como JSE, o JEE é uma edição do ambiente Java para desenvolvimento de programas,
porém, com número de recursos superior, permitindo o desenvolvimento em multicamadas,
componentes distribuídos, ambientes de internet, etc. Hoje se encontra na versão JEE6.
JME – Java Micro Edition(Java Micro Edição)
Edição do Java voltado para dispositivos capacidade de memória compacta como
celulares, PDAs, e outros dispositivos.
JSDK – Java Standard Development Kit(Java Kit Básico de Desenvolvimento)
Contém o JRE, JSE, os fontes das classes Java e o JavaDoc, com isto, fornecendo o
ambiente para desenvolvimento e execução de programas Java.
API - Application Programming Interface(Interface de Programação de Aplicativos)
É o conjunto de padrões de programação que permite a construção de aplicativos e a sua
utilização de maneira não tão evidente para os usuários.
É um conjunto de Classes prontas disponíveis para uso.
JPA - Java Persistence API(API de Persistencia Java)
É uma especificação para a persistencia de dados.
Ela define um padrão de mapeamento objeto-relacional que frameworks devem implementar para
poderem ser considerados frameworks padrão JEE.
Hibernate (Hibernador)
Implementa a especificação JPA e facilita o mapeamento objeto-relacional além de inúmeras
outras utilidades que auxiliam no desenvolvimento Java.
Framework (FrameWork)
É uma estrutura de suporte definida em que um outro projeto de software pode ser
organizado e desenvolvido para servir a outros. Ou seja, voce pode utilizar vários
frameworks para desenvolver seu software. Para desenvolvimento de telas,
de camadas de negócio, de cálculos, de persistência de dados, etc.
Alguns exemplos de Frameworks:
AWT - Abstract Window ToolKit(Kit de Ferramentas para Telas Abstratas)
É um framework que contém uma gama de componentes básicos utilizados no desenvolvimento
de telas desktop. Alguns consideram o AWT uma API.
Exemplo tela com AWT:
SWING
Possui uma diversidade maior de componentes para serem utilizados no desenvolvimento de
Telas Desktop.
SWT - Standard Widget Toolkit(Kit de Ferramentas Básicas para Componentes Gráficos)
É uma implementação feita pela IBM para o desenvolvimento de telas desktop.
Exemplo tela com SWT:
Servlet(Pequeno Servidor)
São classes java que, ao serem configuradas e implantadas em um servidor ou
container Java vão o mesmo vai interpretar o código dessas classes e montar uma
estrutura de retorno seguindo um protocolo web como o html criando assim páginas web.
EJB - Enterprise JavaBeans(Componentes de nìvel Empresarial)
É um componente da plataforma JEE. Consiste em fornecer um desenvolvimento rápido e simplificado de aplicações Java, com base em componentes distribuídos, transacionais, seguros e portáveis.
Foi uma das primeiras tecnologias Java para Web utilizadas para simplificar o processo de
desenvolvimento de páginas dinâmicas.
JSTL - Java Standard Tag Library(Biblioteca Básica para Etiquetas JavaServer)
É um framework utilitário de desenvolvimento que estende a especificação JSP.
Era utilizado como complemento no desenvolvimento das páginas JSP.
JSF - Java Server Faces(Servidor Java de Faces)
É um framework java usado para construção de interfaces de usuário baseadas em
componentes para aplicações web. O JSF é uma evolução do JSP pois além de possibilitar o
desenvolvimento de componentes customizados ele abstraiu a utilização de JSTL.
Ou seja, utilizando JSF o desenvolvimento realmente tornou-se ágil.
Implementções mais conhecidas de JSF:
RichFaces - http://showcase.richfaces.org/
Primefaces - http://primefaces.org/
Ajax - Asynchronous JavaScript And XML(Javascript Assíncrono e XML)
Ajax é um conjunto de tecnologias (JavaScript, DOM, CSS e XML) que permite buscar de forma
assíncrona os dados requisitados no servidor sem ter que retornar todas as informações que
já estavam na tela. Ou seja, não causa o chamado “reload” na tela ou tela branca enquanto
carrega os dados da requisição.
Webservices(Serviços Web)
Web service é uma solução utilizada na integração de sistemas e na comunicação entre
aplicações diferentes. Permitem que sistemas desenvolvidos em plataformas diferentes
sejam compatíveis.
REST - Representational State Transfer(Transferência de Estado Representacional)
É um conjunto de princípios de arquitectura usado para desenvolver
serviços web simplificados utilizando XML, HTTP, JSON, etc.
Com relativa facilidade de integração e Escalabilidade.
SOAP -Simple Object Access Protocol(Protocolo Simples de Acesso a Objetos)
É um protocolo para troca de informações estruturadas em uma plataforma descentralizada e distribuída. É um um conjunto de regras codificadas que pode ser montado utilizando outros protocolos como RPC(Remote Procedure Call), XML e HTTP.
JSON - JavaScript Object Notation(Notação de Objeto Javascript)
É uma estrutura de dados em javascript. Assim como o xml segue um padrão de estrutura de formatação de dados o json tem seu próprio padrão de estrutura. Por ser mais simples de trabalhar o json é muitas vezes mais rápido de trabalhar do que xml.
MAVEN
É uma ferramenta de automação de compilação utilizada primariamente em projetos Java.
Ou seja, é uma ferramenta que serve para montar toda a estrutura de um projeto.
ANT - (Formiga)
Também é uma ferramenta de compilação de projetos. É considerada o "pai" do maven. Mas com muito menos automação.
Versionadores(Controladores de versão)
Ferramentas para salvar e gerenciaar histórico de todas as alterações em arquivos e documentos.
CVS - Concurrent Versions System(Sistema de Versões Concorrentes)
É um dos mais antigos e famosos sistemas de controle de versão.
SVN - Subversion(Subversão)
É um sistema de controle de versão desenhado especificamente para ser um substituto moderno do CVS.
Git - "GIT" é uma gíria inglesa para “idiota, estúpido, ou pessoa que não vale a pena”
É um sistema de controle de versão distribuído e um sistema de gerenciamento de código fonte, com ênfase em velocidade.
Servidores:
Aplicações que rodam aplicativos comuns normalmente em rede. Também chamados de Containers.
Exemplos de Servidores:
GlassFish
É o servidor padrão da especificação do Java. Ou seja, todos os outros servidores para serem considerados de padrão JEE devem ter, no mínimo, as mesmas funcionalidades do glassfish.
TomCat
É um servidor Java, mas não é um servidor padrão JEE pois ele não faz tudo que o glassfish faz. Como rodar EJB.
JBoss - Versão atual é chamada de WildFly(Vôo Selvagem)
É um servidor de aplicações enterprise JEE6. Considerado um dos melhores servidores de aplicações Java do mercado. Implementa a especificação, ou seja, ele segue o padrão mínimo do glassfish. Mas ele possui funcionalidades além do mesmo. Dividido em versões org(free) e eap(é free mas o suporte é pago).
Assinar:
Postagens (Atom)