Categoria Design Patterns

Dicas de como trabalhar em casa – Parte 2

No post anterior falamos sobre a motivação de trabalhar em casa, Trabalho solitário, Disciplina etc. Neste post iremos abordar mais algumas dicas sobre alguns obstáculos que podemos encontrar ao adotar essa forma de trabalho.

Ambiente de trabalho

Todo profissional da área de TI tem seu cantinho, sua mesa, não importa, tem seu PC ligado e pronto para trabalhar.

Normalmente quando trabalhamos fora, em um escritório de uma empresa e chegamos em casa e vamos estudar ou fazer algum projeto pessoal[vulgo bico], achamos que está perfeito para se trabalhar, que tudo está em ordem. Mas acredite não está.


Triadworks Office

Uma coisa é passar no máximo 4 ou 5 horas[é o tempo em média que passamos, isso se não tivermos faculdade a noite claro] outra é passar mais de 8hs, isso pode ficar desconfortável. Afinal, antes você tinha o ambiente da empresa, ambiente esse que você passava a maior parte do dia, logo, quando se chega em casa, você acha tudo uma maravilha.


Triadworks Office

Quando se toma a decisão de trabalhar em casa você deve dar prioridade, claro, ao seu ambiente de trabalho.

Crie um ambiente confortável para você passar o dia.
O ideal seria ter um espaço específico na sua casa, uma sala, um quarto, algo que fique isolado dos demais cômodos da casa. Isso irá permitir que você tenha mais tranqüilidade, concentração e conseqüentemente produtividade. E se possível que tenha chave, para que ninguém no seu horário de trabalho fique transitando no seu escritório, isso tira o foco.


Triadworks Office

Esse espaço deve ser preferencialmente longe da sua cama ;) . Quando se trabalha perto da cama por exemplo, as chances de você perder seu foco e deitar sobre ela é bem maior. Só o fato de deixar baixando algo que você tem que esperar terminar para começar o seu trabalho, vai lhe fazer ir para a cama para dar um cochilo, sem falar naqueles dias cansativos, onde olhar para a cama será um convite muito bem vindo. Então evite.

Caso não seja possível, tente se controlar, lembre-se das contas para pagar ;) que garanto você não irá deitar.

Certifique-se que seu equipamento está atualizado.
Veja se você tem tudo que você precisa: internet com boa velocidade, um excelente PC, mobiliário suficientemente confortável. Sei que pode sair um pouco caro ter isso, mas lembre-se que você agora tem sua casa como empresa, então para fazer um trabalho profissional você deve ter ferramentas adequadas.

O primeiro item ao meu ver para se começar a investir, claro é o seu PC. Logo você terá que investir nos móveis do seu escritório e depois se tiver dinheiro sobrando, invista em algo que te deixe mais a vontade, um puff, uma máquina de capuccino etc.

O importante é que você entenda que tudo que você comprar para o seu escritório[claro, tudo que você realmente precisar] você estará investindo EM VOCÊ MESMO, ou NA SUA EMPRESA.

Uma linha telefônica somente para seu escritório também seria o ideal, se for possível invista em uma linha extra para a sua casa, essa linha será usada exclusivamente para seu trabalho.

Estou pensando seriamente em voltar a ter um escritório, apesar de morar apenas com a minha mulher[meus filhos virão somente no final de semana e as vezes na semana], mas isso seria um gasto por enquanto desnecessário, mas em breve, vou voltar a ter um escritório fora da minha casa.

Lembre-se do seu horário e do seu trabalho

Algo que cometo muito, é o simples fato de não chegar tarde em casa eu acabo perdendo o horário e exagerando.
Quando se trabalha fora de casa, normalmente ficamos atentos ao relógio, e na hora certa vamos embora.

Já trabalhando em casa não temos o “chegar tarde”, pois já estamos em casa, então você acaba trabalhando mais do que deveria, e isso com o tempo pode ficar desgastante tanto ou mais do que se você trabalha-se em uma empresa externa à sua casa.

Uma das grandes vantagens de se trabalhar em casa é exatamente a flexibilidade[COM RESPONSABILIDADE E DISCIPLINA NÃO ESQUEÇA] de poder em um determinado dia cansativo você simplesmente, no meio do seu expediente dar uma volta no shopping, brincar com seu filho, ficar com sua esposa/namorada, assistir um filme etc e depois voltar ao trabalho.

Se você ficar somente trabalhando e não souber ministrar seus horários, então nada vai adiantar a flexibilidade e vantagem de trabalhar em casa.

Você está trabalhando em casa e a sua casa agora é o local do seu trabalho/empresa, mas além de tudo, ela continua sendo a sua casa. Lugar que você também irá utilizar para se distrair e relaxar, por isso a importância de se ter um local isolado/fechado para seu escritório, para que não misture seu horário de laser com trabalho.

Outro problema é exatamente o inverso de trabalhar mais do que deveria, seria o “mais tarde”.

Mais uma vez a flexibilidade e liberdade sem disciplina pode lhe prejudicar, quando você não tem que “cumprir horários”, você pode achar que mais tarde você faz, isso normalmente é causado pelo falso sentimento de segurança, pensando que você pode terminar mais tarde, afinal você está trabalhando em casa.

Você resolveu dar uma volta com seu filho no parque para desopilar um pouco, então você acaba ficando mais do que deveria porque você pensou:  “Estou trabalhando em casa, então mais tarde eu faço isso.”.

Cuidado para não cair no “mais tarde” e prejudicar o prazo do seu projeto.

Torne tudo mais “real”

Quando trabalhamos em casa, normalmente ficamos mais a vontade, de bermuda, sem blusa, alguns até ficam somente com roupas de baixo[vi um depoimento um dia desses sobre isso O-o] e isso pode dificultar você mesmo de entender que você está trabalhando e não de férias.

Eu mesmo quando iniciei o trabalho em casa à alguns anos[a primeira vez] eu ficava todo vestido[calça, blusa, sapato] normalmente.

Isso além de mostrar para familiares e amigos que você está levando a sério, vai te ajudar a se comportar como se estivesse em uma empresa normalmente, com isso, vai te dar uma sensação[principalmente para quem é marinheiro de primeira viajem] de estar no trabalho, e ajudá-lo a manter-se concentrado.

Admito que não estou mais cumprindo essa “pequena dica”, mas vou voltar a cumpri-la, pois realmente quando fazia isso, me ajudava bastante a não perder a concentração e me manter acordado para o meu real objetivo: Estou trabalhando.

Seja profissional

Seguindo ainda as dicas passadas no post anterior e nos tópicos acima, devemos ainda tomar mais um cuidado.

Nunca deixe seu cliente saber que você trabalha em casa.

Porque ?

Pelo simples fato de que para ele, isso não irá soar como um trabalho profissional. Infelizmente ainda temos empresas/clientes que tem essa mentalidade, que por achar que você não está em um escritório separado e longe da sua casa, você não irá fazer um trabalho profissional. Claro que ele está completamente errado.

Então para aqueles clientes novos ou para aqueles mais resguardados, evite demonstrar que você está em casa. Nunca deixe seus clientes saberem que você está trabalhando de casa, mantenha um mínimo de ruído[mãe, filhos, cachorro etc...] quando falar ao telefone.

Caso você não tenha uma linha exclusiva para seu escritório, você terá que tomar alguns cuidados, pois algum cliente pode ligar para você.

Então nunca deixe seus filhos atenderem o telefone, eu disse NUNCA.

Se você mora com sua família[mãe, pai, irmão, irmã etc] o mais ideal é que você tenha uma linha extra só para você. Caso você não tenha condições de colocar uma, então evite dar o número do fixo, dê seu celular, não é uma saída muito legal [afinal tem cliente que evita gastar ligações para celular, normalmente você passa horas no telefone com ele] mas é melhor do que seu filho atender o cliente e ficar brincando com ele ;) .

O cliente quer fazer uma visita e agora ?

Bem, se seu cliente faz questão de fazer uma visita a sua empresa, isso pode complicar um pouco, ainda mais se ele não sabe qual a real situação da sua empresa.

Não seria o ideal um cliente visitar a sua casa, mesmo você tendo um escritório separado, lembre-se que você está em casa, apesar de sua empresa também estar lá.

Evite que o cliente tenha interesse em visitar você, e se caso isso aconteça, você terá que estar preparado para um retorno negativo do seu cliente, ainda mais se o seu escritório não for um cômodo separado da sua casa, onde ele terá que adentrar por toda a sua casa para chegar ao seu escritório.

Infelizmente como eu disse anteriormente, alguns clientes/empresas não entendem que mesmo você trabalhando em casa você é um profissional.

Normalmente o que faço é falar a verdade parcialmente, digo que tenho uma empresa[legalmente falando, contadora etc] e a mesma é por enquanto virtual, até encontrar um novo escritório.

Considerações finais

Bem, espero não ter esquecido nada neste post e que sirva de ajuda para quem está e tem interesse em entrar nesse modelo de trabalho.

Se tiver mais coisas que não citei aqui e que vocês achariam importante falar, comentem e deixem seu recado. E se eu tiver novas dificuldades e novas experiências vou delatar aqui para vocês.

Abraços e bom trabalho.

Ubiquitous Language

Já faz algum tempo que alguns alunos me perguntaram o que era Ubiquitous Language, com isso me motivou a fazer este post. Espero realmente que seja útil.

Ubiquitous Language é um conceito muito comum em DDD(Domain-driven Design).

Basicamente é um dos conceitos que o DDD utiliza, que tem como finalidade: “falar” a língua do usuário/cliente . Manter uma única linguagem de domínio que seja entendível tanto para os desenvolvedores quanto para o cliente.

Vamos falar de outra forma.
No DDD você tem o Domain/Domínio que é o primeiro D, que é a parte mais “importante” desta abordagem. Pois esse domínio é exatamente o problema que queremos resolver, o problema do cliente.

Problemas
Normalmente não conhecemos a área do cliente, por isso se faz necessário o entendimento por completo ou parcial do domínio(problema do cliente).

O cliente usando a sua linguagem pede algo que pode ser entendido[isso acontece sempre] de outra forma pelo desenvolvedor ou analista.

Outro problema também seria a falta de cuidado para definição de nomes de classes, métodos, variáveis etc, causando problemas de entendimento na equipe e favorecendo ao aumento na dificuldade de manutenção dessas classes e entendimento no código.

Possível solução
Para esses “problemas” anteriores se os desenvolvedores tivessem o conceito de Ubiquitous Language bem definidos na equipe, esses problemas poderiam ser evitados. Quando se tem por exemplo uma classe chamada StrUtil.java onde muitos de nós adotamos como classes utilitárias[inclusive eu confesso, mas não da forma como passada aqui claro ;) ] é no mínimo perigoso, pois o nome dessas classes não refletem bem a sua real função.

Mas então você defende: “- Ah mas é uma classe utilitária de strings, onde você pode fazer certas manipulações com Strings”.

Ok ! Mas muitas vezes por não tem um bom senso o desenvolvedor acaba criando uma classe UtilUtil, ou seja, essa sua classe StrUtil não está manipulando somente String ela pode está fazendo determinadas funções que são completamente diferentes, métodos que não tem nada em comum, como manipulação de datas etc, e esse é o problema.

O que o DDD com o Ubiquitous Language fala é bem simples:

Todo comportamento do seu sistema deveria estar implementado em classes cujos nomes devem fazer parte do domínio do problema, do domínio do cliente.

Isso é válido não somente para nomes de classes,mas para métodos, variáveis e tudo dentro do domínio, assim como também para o problema em si.
Esses nomes devem ter o mesmo[se não bem próximo] significado tanto para a equipe quanto para o cliente, facilitando assim a comunicação entre os mesmo, sem falar que irá melhorar muito a manutenção e entendimento do código.

Essa “linguagem” é um meio termo entre a linguagem técnica e a linguagem do cliente. O seu cliente não irá entender seu dialeto técnico e você provavelmente não irá entender[pelo menos no início] a linguagem do cliente. Assim utilizando esse conceito você irá facilitar a comunicação entre todos[desenvolvedores, analistas e cliente].

O cliente[conhecedor do domínio/problema em detalhes] deve conversar com os desenvolvedores[que possuem o conhecimento para a solução] que conhecem a programação em detalhes, para juntos, chegarem a uma língua comum, onde que todos consigam se entender e que será usada não somente nas conversas mas também no desenvolvimento do software.

Com essas conversas constantes e com a utilização desse conceito de linguagem comum, todos juntos chegarão a um consenso sobre o domínio, definindo assim o modelo do domínio[Domain Model].

Domain Model em resumo é a abstração do problema real, criada em parceria com os especialistas no domínio[normalmente o cliente e/ou analista] com os desenvolvedores.

É utilizando esse modelo que os desenvolvedores vão implementar em código[seu código irá refletir a solução para o problema do cliente], exatamente como foi acordado e as chances de cair naquele velho problema de telefone sem fio[cliente diz X, analista entende –X+2, desenvolvedor implementa Y] serão mais escassas.

Conclusão
Podemos observar que o conceito de Ubiquitous Language é bem simples, e parece que não tem muita importância, pois no resumo é apenas a padronização de nomes de métodos, classes etc, claro que tudo dentro do domínio.

Mas vimos também que não é somente isso, a idéia de Ubiquitous Language no DDD é criar um canal de comunicação entre o cliente e a principal peça: o desenvolvedor.
Pois é ele que irá criar o produto que o cliente deseja.

E através da Ubiquitous Language podemos juntamente com o cliente definir um modelo para o sistema, fazendo com o que as chances de problemas de má interpretação sejam anuladas[ou parcialmente anuladas], assim deixando o sistema mais limpo, fácil manutenção, simples alteração e de quebra, sendo entregue no prazo.

Bem espero ter conseguido explicar um pouco sobre Ubiquitous Language.

Abraços

Domain Driven Design

Pegando o embalo de um amigo vi hoje um assunto bem interessante: Domain-Driven Design.

Bem, ainda não estudei mais a fundo, mas pelo que já vi por cima é bem interessante e pretendo investir um pouco mais em TDD, DDD e o que o mercado tem de melhor, com o intuito de aumentar a qualidade dos softwares desenvolvidos por mim e pela minha empresa(TriadWorks).

É sempre bom estarmos ligados nesses padrões, sem falar que o conceito de DDD não é tão novo assim(me corrijam se estou errado), mas que no Brasil não temos muito essa abordagem. Vale ressaltar que DDD, TDD e outros mais não são a “bala de prata” dos projetos, mas que em muitos casos definem tanto o sucesso do projeto como também pode ser o fracasso do mesmo.

Acho que cada um tem um uso específico, não devemos também generalizar para qualquer projeto o uso desses Design Pattern, assim como tudo devemos ser safos o bastante para aplicar essas “tecnologias” no momento certo.

Veja uma entrevista com Eric Evans na InfoQ sobre DDD.

http://www.infoq.com/presentations/model-to-work-evans

Mais informações: http://www.domaindrivendesign.org/

Abraços