Página 7 de 10

Morando no interior, trabalhando na capital: experiências das viagens de fretado

bus_dentro Durante quase dois anos enfrentei a rotina diária de viajar de Sorocaba a São Paulo a trabalho. Gostaria de compartilhar algumas experiências com quem vive nessa situação e também com quem cogita essa possibilidade.

Como muitos que trabalham na capital, nasci e fui criado no interior, mais especificamente em Sorocaba. Também estudei no interior, na Unesp em Bauru. Entretanto, algo que não percebi até chegar ao final da faculdade, foi a diferença de salário e oportunidades entre capital e interior na área de tecnologia. Ninguém havia me alertado da dificuldade, se não da impossibilidade, que seria encontrar uma boa oportunidade de trabalho e carreira para um recém-formado em minha cidade natal.

Acabei indo trabalhar em São Paulo. Na época, já casados, minha esposa e eu entramos na mesma empresa, ambos com cargo de Programador Junior, mas cuja remuneração nos permitiu começar a vida de casal e profissional com qualidade.

A motivação da volta para o interior

Por mais de quatro anos, minha esposa e eu moramos num apartamento em São Paulo. Tínhamos alguma qualidade de vida, pois estávamos localizados ao lado do trabalho. Porém, desde o começo sentíamos alguns dos efeitos do estilo de vida da capital: barulho, poluição, falta de espaço para os animais (levamos dois gatos e tivemos que deixar um papagaio para trás), falta de sol (faz uma diferença para secar e tirar manchas de roupas, além de ser um grande prejuízo para a saúde), barulho, tendência ao sedentarismo, sem falar do barulho. Por outro lado, existem as diversas comodidades que nos eram muito atrativas, como a facilidade de encontrar o que precisávamos, o deslocamento fácil de metrô, a abundância de restaurantes, a agilidade das entregas de lojas online e dos correios (que funciona mais eficientemente na capital), etc.

A balança só começou a pender para o outro lado quando tivemos nosso primeiro filho. Quando ele tinha por volta de um ano, começamos a sentir muita falta de um quintal. Ele também sofria com o barulho constante do tráfego, dos eventuais helicópteros que por vezes traziam gente para o trabalho às 7 da manhã, fogos de artifício e vizinhos gritando palavrões sempre que tinha um jogo de futebol e ainda os constantes eventos ali na região da Paulista.

Quando minha esposa engravidou pela segunda vez, decidimos começar o caminho de volta para o interior em busca de mais qualidade de vida. Não foi uma decisão fácil, mas que ocorreu naturalmente como consequência das prioridades que definimos para nossa família.

É preciso se desapegar

Fazer a migração inversa da capital para o interior não é algo fácil, pois nada vem de graça. É preciso abrir mão de certas coisas.

Ao continuar trabalhando na capital, eu mantive meu salário, mas abri mão de uma boa parte do meu tempo, do meu sono e de um pouco da qualidade de vida que eu poderia ter trabalhando na mesma cidade. Em contrapartida, minha família poderia usufruir dos benefícios da mudança.

Um grande impeditivo para uma mudança completa era a questão financeira. Como já mencionei, a diferença de remuneração entre capital e interior, ainda mais considerando São Paulo, pode ser muito grande.

Eu sabia que, cedo ou tarde, eu teria que abrir mão de uma parte da renda para colher o benefício completo de morar no interior.

Opções de viagem

Além do fretado, há as opções das linhas convencionais que saem da rodoviária e também do carro particular.

Quanto aos ônibus de linha, viajar diariamente é muito complicado. No fretado você consegue descansar mais, tem a possibilidade de descer num local mais apropriado que na Barra Funda (no caso de Sorocaba) e sai mais barato.

E quanto ao carro particular, nem mesmo considerei a possibilidade. Apesar de ser mais rápido, eu não poderia ir descansado, nem aproveitar o tempo da volta para ler, estudar ou trabalhar, além de gastar muito mais com combustível, pedágio, manutenção e estacionamento. Tudo somado à irritação do trânsito.

Considerando tudo isso, os fretados são a opção mais viável para quem faz o translado do interior para a capital três ou mais vezes na semana.

A rotina

A rotina diária de quem anda de fretado varia enormemente, dependendo da cidade e da sua localização dentro dela.

Eu acordava 5:10 para pegar o fretado às 5:35 no ponto mais próximo de casa. O ônibus chegava a São Paulo entre 7:30 e 8:00, de acordo com o trânsito do dia, que melhora bastante nas férias escolares. Descendo na estação Pinheiros do metrô, ainda tinha que pegar dois trens, linhas amarela e verde, até a estação Trianon/Masp na Avenida Paulista. Chegava ao trabalho entre 8:00 e 8:30.

Na volta, saía do trabalho por volta das 17:50 paga pegar o ônibus às 18:35 na marginal Pinheiros. O fretado geralmente entrava em Sorocaba pouco depois das 19:30, mas minha descida era perto das 20:15. Poderiam ainda ocorrer atrasos de até 2 horas nas sextas-feiras, vésperas de feriado ou quando ocorriam acidentes.

Contabilizando, eu passava praticamente 15 horas fora de casa. O trajeto de ida e volta levava em torno de 5 horas no total. Com uma esposa e dois filhos, sobrava pouco tempo para dormir. Após brincar com as crianças, jantar, tomar e ajudar a dar banho na pirralhada e se aprontar para dormir, o relógio já marcava meia noite. Isso se não houvesse mais nada para resolver. Minha média de sono, quando não tínhamos crianças com cólica, dente nascendo ou doentes era de 4 e meia a 5 horas durante a semana.

E, se você está pensando que eu compensava no final de semana, está enganado. Uma das grandes desvantagens de trabalhar dessa forma é só ter o sábado de manhã para resolver as coisas em sua cidade. Embora eu nem sempre conseguisse, iríamos fazer compras e resolver algumas coisas nas lojas do centro de Sorocaba no sábado pela manhã. Também era necessário ir ao supermercado e fazer alguma atividade com as crianças. No domingo tem a igreja pela manhã e a noite. Algumas poucas vezes consegui cochilar uma hora de tarde, conciliando o sono das crianças.

Você pode imaginar que, após algum tempo nessa vida, eu já estava um tanto desesperado por uma mudança efetiva para o interior.

Um ponto positivo dessa rotina é que eu tinha um tempo livre razoável no trajeto da volta para me concentrar. Li alguns livros, trabalhei em projetos pessoais e estudei bastante nesse tempo.

O fretado

Diariamente, centenas de ônibus fretados chegam a São Paulo de diversas cidades. Só de Sorocaba temos mais de uma dúzia de opções, variando o itinerário no trajeto dentro da cidade, no destino e no horário. Cada linha possui suas particularidades, mas no geral cada uma possui um coordenador que faz o controle dos passageiros e também os representa junto à empresa.

O valor dos fretados até agora (final de 2013) é de R$ 450,00 mensais. Provavelmente haverá um reajuste em breve, pois faz muito tempo que os valores estão congelados. Os mensalistas têm direito a um assento reservado, mas também existem algumas pessoas que utilizam apenas alguns dias, pagando o valor avulso, por considerarem os fretados mais confortáveis que os ônibus das linhas convencionais.

No trajeto de ida, as janelas vão com as cortinas fechadas para que todos possam descansar. Geralmente os vidros são escurecidos para evitar a luz em excesso. Os coordenadores pedem para que as pessoas evitem usar celulares ou dispositivos sonoros que possam incomodar os demais. Quanto a dormir nesse trajeto, isso varia de pessoa para pessoa. Conheci algumas que já estavam roncando alguns minutos após se acomodarem. Outras, como eu, muitas vezes não conseguiam nem cochilar devido ao ônibus chacoalhar, frear, ao movimento de quem entra, etc.

Existe ainda a questão de onde colocar o braço. Quando tem alguém do seu lado, não dá pra usar o apoio do meio, então você deve cruzar os braços ou apoiá-los de alguma forma para não ficar batendo na outra pessoa. Como eu tenho ombros largos isso às vezes era um problema e eu chegava com meu braço formigando pela posição.

Para quem gosta, alguns ônibus fazem uma confraternização na última sexta-feira do mês, durante a volta, com direito e jogos de cartas, bebidas e salgadinhos. Obviamente isso varia muito dependendo do ônibus estar cheio ou não e também conforme o coordenador.

No trajeto de retorno você pode aproveitar para usar seu notebook, tablet ou celular.  A maioria dos fretados, mas não todos, possui wi-fi via 3G. O sinal falha em alguns trechos, mas é possível fazer alguma pesquisa ou navegar em redes sociais. Outra opção é assistir ao filme que geralmente o coordenador coloca no sistema de DVD do ônibus.

Vale a pena trabalhar na capital viajando todos os dias?

Depende. Para quem possui moraria no interior e não tem filhos pode ser uma opção válida, principalmente porque os trabalhos na capital remuneram bem e agregam bastante no currículo.

Alguns já me sugeriram procurar uma casa mais afastada em São Paulo. O problema é que dentro de São Paulo o deslocamento pode chegar a 2 horas sem dificuldades. Uma dica: não reclame do tempo que você leva de viagem para quem mora em São Paulo, principalmente se a pessoa mora na Zona Leste ou outras regiões mais afastadas do centro. Para elas isso é completamente normal, já que estão acostumadas com longas viagens em uma combinação de ônibus, trem e metrô. Em certa ocasião, ao falar sobre isso, já olharam para mim com uma cara do tipo “você está reclamando do que?”.

Por outro lado, se você tem a necessidade de passar mais tempo no interior com a família e deseja melhorar em qualidade de vida, esqueça essas possibilidades. Como já afirmei, não podemos ter tudo, mas precisamos fazer uma escolha.

Se você trabalha na capital, morando lá ou viajando diariamente, talvez você se identifique comigo. Mas não se desespere. Meu conselho é que você comece a traçar um plano de migrar para o interior.

Migrando para o interior

Primeiro, faça um mapeamento das empresas da sua área para as quais você teria interesse em trabalhar. Procure por vagas nessas empresas e verifique se o seu currículo atende aos requisitos. Estude, faça cursos e o que mais for necessário para que você seja o mais desejável possível para essas empresas. Faça contatos e networking com pessoas da cidade, participe de eventos, adicione-as no LinkedIn. Esteja conectado com pessoas chave que trabalham nessas empresas, pois elas podem anunciar vagas em suas redes sociais, assim como os canais oficiais das empresas (página do Facebook, LinkedIn, sistema online de vagas).

Fique antenado para quando surgirem vagas boas que se encaixem no seu perfil profissional e esteja preparado para a entrevista, pois as oportunidades surgem logo.

Com essas dicas, o impacto na remuneração e no ambiente de trabalho pode ser minimizado, permitindo uma mudança mais suave e planejada, sem correria ou desespero.

O futuro do mercado de trabalho de TI

Existe uma esperança para quem é de TI (o que não exclui outras áreas também). Embora até agora todas as principais empresas estejam sediadas em capitais, estas estão saturadas e as empresas estão começando a ver com bons olhos algumas cidades do interior que possem universidades e faculdades suficientes para prover mão-de-obra qualificada.

Conheço algumas empresas que estão dando preferência para o interior, enquanto mantém um escritório de negócios na capital onde mantêm a carteira de clientes. Particularmente, eu acredito que esta seja uma solução muito mais adequada do que construir mais prédios e inventar mais soluções paliativas para o caos do transporte e moradia.

Meu apelo para os empresários que estão expandindo seus negócios é que comecem a pensar mais efetivamente nesse aspecto. Embora pareça haver mais dificuldades de administração e gastos com telefonia e teleconferências, certamente estes serão muito menores que o ganho obtido. Além disso, oferecer bons empregos no interior é um diferencial que pode atrair de forma eficiente mão-de-obra bem qualificada, pois, como eu, muitas pessoas capacitadas escolhem o interior por questões pessoais.

Conclusões

Trabalhar na capital e morar no interior é uma espécie de meio-termo entre qualidade de vida e oportunidades profissionais.

Entretanto, cedo ou tarde, nossa balança pessoal vai pender para um lado ou por outro. Se a prioridade é a carreira e as facilidades da vida, a capital é a melhor opção. Se, por outro lado, o são a família e a qualidade de vida, faz bem começar um “plano de fuga” para o interior.

Enfim, é possível equacionar tudo isso, mas infelizmente depende de cada um, pois como regra geral não somos ensinados desde cedo a considerar todas essas variáveis.

Installing, Configuring and Using Eclipse Kepler

Eclipse is a IDE (Integrated Development Environment) extremely powerful and flexible, being the most used for various purposes: Java development, Android, C++, processes modeling, report design and so on.

Utilizing a good IDE is essential for productivity because its countless tools and features will make the difference in our daily searching for defects, refactoring, integrating with SCM (Source Control Management) like SVN, CVS, GIT, Mercurial or Bazaar, and other stuff.

Downloading Eclipse

Go to http://www.eclipse.org/downloads/ in order to download Eclipse IDE for Java EE Developers. Choose the corresponding version for your system, in my case, Windows x64. Look at the image below:

10_baixar_eclipse

When you click on the link, you’ll be redirected to another page where you will choose a “mirror”, that is, a copy of the file in a server next to you. Click on the green arrow to begin the download, according to the image:

11_baixar_eclipse_2

The download will start and the browser will show you this page:

15_baixar_eclipse_6

In the future, consider donating to make Eclipse even better.  😉

Installing Eclipse

In this and next tutorials, the directory c:\starcode will be adopted as the base directory for installing applications and storing files. If you want, replace “starcode” with the name of your company, organization or whatever you want, just avoiding whitespaces or special characters. Find the downloaded file, unpack it in the directory c:\starcode\eclipse, according to the following image:

12_baixar_eclipse_3

In this example, I’m using 7-Zip. Open the file and press F5 or go to menu File > Copy to.... In the dialog, type c:\starcode.

13_baixar_eclipse_4

Confirm and check if the content in the directory c:\starcode\eclipse is like the image:

14_baixar_eclipse_5

Configuring Eclipse

Before opening Eclipse, let’s tune a few parameters that affect the memory usage in order to get the a better general performance of our IDE. Edit eclipse.ini in your favorite text editor (I suggest Notepad++). The original file should be something like this:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms40m
-Xmx512m

It’s important to understand exactly what we’re doing here, because the changes we’re going to do depend on the environment Eclipse is running. The following parameters will be modified or added:

  • X:MaxPermSize / launcher.XXMaxPermSize: this parameter defines the maximum amount of permanent memory Java will use to store information about class structure (bytecode). The “permanent” memory will limit the total of classes we can load in memory. This parameter should be increased if you have many projects with many jars each. The parameter launcher.XXMaxPermSize is used in older versions, so we’ll keep it for compatibility.
  • XX:PermSize: we’ll add this parameter to define the initial amount of permanent memory Java will allocate. If the value is too small, the performance will suffer because Java will in interrupt the execution of the program frequently in order to allocate more memory.
  • Xmx: defines the maximum amount of dynamic memory Java will allocate to store object instances and variables that can be allocated and deallocated at any moment.
  • Xms: defines the initial amount of dynamic memory.

The default value of XXMaxPermSize parameter is reasonable, but we’ll add XX:PermSize in order to obtain better initialization speed. That way Eclipse won’t need increase the memory many times.

The values of Xmx and Xms can be modified depending on your computer power. As I work in various projects and I have 8 Gigabytes of RAM, I’ll put a maximum of 2 Gigabytes in Xmx and an initial 512 Megabytes in Xms.

The final version of the configuration file goes like this:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx2G
-XX:PermSize=128m
-XX:MaxPermSize=256m

Running Eclipse

Execute the file eclipse.exe. You’ll see the splash screen for a while:

16_eclipse_splash

After that, you’ll be welcomed with the Workspace selection screen (Workspace Launcher). A Workspace is a place (a directory, actually) where your Eclipse’s configurations are stored, containing as many projects as you like (even though they don’t need to be in the same place). It means that, with only one Eclipse install, you’re able to create many Workspaces in different directories and each one will have its specific and independent configuration and projects. Eclipse can be executed in multiples instances so you can work in multiples Workspaces simultaneously, with the exception that you cannot open the same Workspace in different instances at the same time.

Let’s continue. Type c:\starcode\workspace and click OK, as the image below, in order to create a brand new Workspace in this directory.

17_workspace_selection

Wait a few moments and finally your IDE will appear, showing the Welcome screen:

18_workspace_welcome

Close the Welcome screen clicking on Workbench link, at the top-right corner. Now, the main work screen will be presented:

19_eclipse_ide

Configuring the Workspace

Let’s do some basic and visual configuration. The first is to change the perspective. Eclipse is a multifunctional IDE and that means it allows you do different activities, for instance: write Java code, create database queries, debug the program, commit and update files from a remote repository, etc. Certain activities are associated to perspectives, which contain the components (named Views) more suitable for the task you are doing.

Go to Window > Open perspective > Java. Notice that the window changed a bit, according to the image below.

20_eclipse_java_perspective

Let’s quickly look at some components of that screen:

  • Main Menu (at the top): it gives you access to all available features. Some items and menus change according to the perspective currently selected or according to the file currently being edited.
  • Toolbar (below main menu): the buttons contain the most used actions and also change according to perspective or file.
  • Package Explorer (at the left): view that lists projects and their files.
  • Problems (at the bottom): view that shows errors and warnings found by compilers and validators in the build process.
  • Center screen (blank): editor where files will be opened and edited.

Notice the Quick Access box near the top-right corner. You can type anything there (configuration name, file name, etc.) and Eclipse instantaneously will show you the results. At the right of this box, the recently used perspectives are listed, so you can swap to another one quickly at any time.

I’ll close the views TaskList and Outline, because we won’t use them in this example.

Let’s do also some configuration in order to speed our work up. Firstly, if your first language is not English, turn off spell checking. Go to Window > Preferences..., search for “Spelling” and uncheck the main option, according to the image:

21_disable_spelling

In case you’re under a proxy server, go to Network Connection configurations. Know that some plugins won’t work even with this configuration. Unfortunately, proxies with NTLM authentication cannot be configured through this method. Check your proxy type, maybe the solution is out of scope for this tutorial.

22_network

If you have JDK correctly installed, Eclipse should found it and add it automatically to its configuration. However, check if it’s ok in  Installed JREs.

23_installed_jre

After accomplish your desired configurations, press OK button.

Creating a test project

Let’s create a simple project with goal of verify the installation and make you comfortable with Eclipse environment. Go to menu File > New  > Java Project. Give it a name and press Finish.

24_create_project

Package Explorer view will display the new project. Click on the arrow at left to show its content.

25_project_created

Let’s create a Java class. Go to File > New > Class or just click on the red-circled button highlighted in the image.

In the next screen, fill Package field out with the value br.com.starcode.teste. The default convention for naming packages is to use always lower case characters and avoid numerals, unless in special cases. Subpackages are separated using the dot character (.). Type also the class name in the Name field. Class names should follow the CamelCase convention, that is, an initial upper-case character for each word, for instance: “MyFirstClass”. Avoid special characters and numbers. For now, check the option “public static void main(String[] args)” and press Finish.

26_create_class

Now we should have this view:

27_new_class

Let’s edit the main method of our class. This method is “special” to Java in the sense the program will start its execution by this method. So, remove the line with TODO comment and then type the following in its place:

System.out.println("Testando o Programa!");

We should have this:

28_code

Don’t forget to save the file. Press Ctrl+S or click File > Save.

Finally, let’s run our first Java program. Click with the right button on the class and go to menu Run As > Java Application.

29_run_java_application

The Console view will appear, showing the output of our program and proving the success of the execution.

30_run_result

Debugging the program

With the previous example, let’s suppose for any reason you need to find a bug. In order to do that you need to stop the program execution at some point and run it line by line, inspecting variables values and following the behavior of the program.

Before we start debugging, let’s create a breakpoint, that is, let’s mark the line we want interrupt the execution of the program. There are many ways to accomplish that, for instance:

  • Go to the line with the cursor and press Ctrl+Shift+B.
  • Double-click the blue bar at left of the editor, in the same direction of the target line.

30_breakpoint

  • Right-click the blue bar at left of the editor and choose Toggle Breakpoint option.

30_breakpoint 2

As a result, we have a small blue circle at the left of the line, as the image below.

30_breakpoint done

In order to remove the breakpoint, do again one of the procedures above (shortcut, double-click or menu).

Now, let’s run the programming in debug mode. Right-click the class and go to Debug As > Java Application.

30_debug as menu

After starting the execution, when the program reach a breakpoint, Eclipse will ask if you want to change for debug perspective.

30_change perspective

Choose Yes and Eclipse screen will change, showing other views and then, in the editor, the current line to be executed in light green.

30_breakpoint stopped

Check out some details of the screen above:

  • Debug: view showing program threads and the stack of method calls. As we have only one simple program, there’s only one thread. And as we’re in the main class, the only item in the stack is our class, its method and the number of the line being executed.
  • Variables: view showing variables in the current scope. You can look at and also change the values here.
  • Breakpoints: view showing all breakpoints set in the Workspace.

Until this moment, the execution is interrupted at line 7. You can inspect the values of variables in the current scope and also run a snippet of code in order to see the value returned by it through Inspect.

We haven’t any variables, so let’s inspect the text contained in println function. Select the text, right-click the selection and go to Inspect.

30_inspect menu

Java will execute the selected snippet and show the result in a yellow box, according to this image:

30_inspect result

Even though in this example we have only a simple String to inspect, we could have done it with any snipped that return a value like a method call or an arithmetic expression. Just take care with Inspect because the code is actually executed, so it can change the state of your program, affecting instances, variables and its values.

Tips for project maintenance and organization

Soon your Workspace may become bloated with projects and, consequently, Eclipse performance and your user experience will get worse. Of course, you can separate your projects in different Workspaces, but there are other alternatives.

Let’s create an additional project for this example. Follow the previous steps, but this time, use another name.

31_second_project

Now our Workspace is like this:

32_two_projects

Let’s suppose now, we won’t work in the first project for a while. We can close it so it’ll exists, but won’t use any of our precious resources. When we close a project, Eclipse won’t list its files nor will cache its classes. In order to close a project, right-click the project and choose Close Project.

33_close_project

The project icon will change and you will be unable to access its content until you open it gain.

34_closed_project

In order to open the project, double-click it or right-click it and choose Open Project. You don’t need to do it right now.

Going to another example, let’s suppose you have many projects in your Workspace. Is there a way to group and organize them properly? For that reason there are Working Sets.

Let’s create two Working Sets. Open the menu of Package Explorer view (as indicated in red in the image below) and then go to Top Level Elements > Working Sets.

35_view_menu

The Working Sets configuration screen will be displayed:

36_configure_working_sets

In the first place, let’s create a Working Set called “Main Projects” containing our first project. Press New... button, type the Working set name, add the project in the right list (Working set content) and press Finish.

37_new_working_set1

Then press New... again and repeat the procedure to create another Working Set called “Secondary Projects”, this time including the other project we created.

38_new_working_set2

Now you can sort the Working Sets. Select an item in the list and press Up in order to move the item up or Down in order to move the item down. The final order goes like this:

39_organizing_workingsets

Press OK and check out the result:

40_organized_projects

Finally, if you want delete a project from your Workspace, select it and press Delete. A confirmation dialog will be shown.

41_delete_project

Notice the option “Delete project contents on disk (cannot be undone)”. If this option is not checked the project will be removed from Workspace, but the files will remain in the Hark Disk. It’s important if you don’t want lost data or when the project is used in another Workspace. In case the option is checked, the project and all its files will not only be removed from Eclipse, but erased from the Hard Drive, so you won’t be able to recover them later.

Summary

In this tutorial you learned how to download, install and configure Eclipse. You also had some examples of how to create, organize, run and debug a simple Java program.

Despite of being a basic introduction, this tutorial will give you the foundation to more advanced topics, which I’ll soon make available.

Instalando, Configurando e Usando o Eclipse Kepler

O Eclipse é um IDE (Integrated Development Environment, ou Ambiente de Desenvolvimento Integrado) extremamente poderoso e flexível, sendo o mais utilizado no mercado e para diversas finalidades: desenvolvimento Java, Android, C++, modelagem de processos, desenho de relatórios e assim por diante.

Utilizar um bom IDE é essencial para a produtividade, pois suas inúmeras ferramentas e funcionalidades farão a diferença no dia-a-dia na procura por defeitos, formatação e melhoraria do código, integração com sistemas SCM (Source Control Management ou Gerência de Configuração), como SVN, CVS, GIT, Mercurial ou Bazaar e muitas coisas.

Baixando o Eclipse

Acesse http://www.eclipse.org/downloads/ para baixar o Eclipse IDE for Java EE Developers. Escolha a versão correspondente ao seu sistema, que no meu caso é um Windows 64 bits. Veja a imagem abaixo:

10_baixar_eclipse

Ao clicar no link, você será redirecionado para outra página onde poderá escolher um “espelho” (mirror), isto é, uma cópia do arquivo que esteja num servidor próximo de onde você mora. Clique na seta verde para efetivamente iniciar o download, conforme a imagem:

11_baixar_eclipse_2

O download será iniciado e o navegador exibirá a seguinte página:

15_baixar_eclipse_6

No futuro, considere contribuir para tornar o Eclipse ainda melhor.  😉

Instalando o Eclipse

Neste e nos próximos tutoriais, o diretório c:\starcode será adotado como base para a instalação de programas e para armazenamento de arquivos. Caso queira, substitua “starcode” pelo nome da sua empresa, organização ou o que desejar, somente evite espaços em branco e acentos. Procure o arquivo baixado com o Eclipse e descompacte no diretório c:\starcode\eclipse, conforme as imagens abaixo:

12_baixar_eclipse_3

Neste exemplo, estou usando o 7-Zip. Abrindo o arquivo baixado, pressione F5 ou clique no menu Arquivo > Copiar Para.... Na caixa de diálogo, digite c:\starcode.

13_baixar_eclipse_4

Confirme e verifique se o conteúdo do diretório c:\starcode\eclipse está conforme a imagem:

14_baixar_eclipse_5

Configurando o Eclipse

Antes de executar o Eclipse, vamos ajustar alguns parâmetros de uso de memória para melhorar o desempenho geral de nosso IDE. Edite o arquivo eclipse.ini no seu editor de textos favorito (sugiro usar o Notepad++). O arquivo original deve conter algo assim:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms40m
-Xmx512m

É importante entender o que estamos fazendo, pois este ajuste depende da configuração do computador onde o Eclipse será executado. Os seguintes parâmetros serão ajustados ou adicionados:

  • X:MaxPermSize / launcher.XXMaxPermSize: este parâmetro define a quantidade máxima de memória permanente que o Java irá usar para armazenar informações sobre estrutura de classes (bytecode). A memória “permanente” irá limitar a quantidade de classes que podemos usar. Este parâmetro deve ser aumentado se você tiver muitos projetos com muitos jars diferentes. O parâmetro launcher.XXMaxPermSize serve para algumas versões do Eclipse, então vamos mantê-lo por questões de compatibilidade.
  • XX:PermSize: iremos acrescentar este parâmetro para definir a quantidade inicial de memória permanente que o Java irá alocar. Se o valor deste parâmetro for muito pequeno, o desempenho do aplicativo será prejudicado em alguns momentos, pois o Java terá que interromper a execução para alocar mais memória frequentemente.
  • Xmx: define a quantidade máxima de memória dinâmica que o java irá alocar para instâncias de objetos e variáveis que são alocados e desalocados a qualquer momento.
  • Xms: define a quantidade inicial de memória dinâmica.

O valor padrão do parâmetro XXMaxPermSize está razoável, mas acrescentaremos o XX:PermSize para melhorar o tempo de inicialização do Eclipse, de modo que ele não tenha que ficar alocando memória muitas vezes.

Já os valores de Xmx e Xms podem ser ajustados dependendo da configuração do seu computador. Como eu trabalho com vários projetos e tenho 8 Gibabytes de memória RAM, irei colocar um valor máximo de 2 Gigabytes de memória no Xmx e um valor inicial de 512 Megabytes no Xms.

O arquivo de configuração final ficou assim:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx2G
-XX:PermSize=128m
-XX:MaxPermSize=256m

Executando o Eclipse

Execute o arquivo eclipse.exe. Você verá por algum tempo o splash a seguir:

16_eclipse_splash

Depois você será saudado com a tela de seleção de Workspace (Workspace Launcher). Um Workspace consiste num local (diretório) onde ficarão as suas configurações do Eclipse e pode também conter vários projetos (embora não seja necessário que os projetos estejam no mesmo local). Isso significa que, com uma única instalação do Eclipse, você pode criar vários Workspaces em diferentes diretórios e cada um terá suas configurações e projetos específicos e independentes. O Eclipse pode ser executado mais de uma vez e assim você pode trabalhar em múltiplos Workspaces simultaneamente, porém não é possível abrir o mesmo Workspace em duas instâncias do Eclipse.

Digite o valor c:\starcode\workspace, conforme a imagem abaixo, para criar um novo Workspace no diretório informado e clique em OK.

17_workspace_selection

Aguarde alguns instantes e finalmente o IDE irá aparecer, exibindo a tela de boas-vindas (Welcome):

18_workspace_welcome

Feche a tela de boas-vindas clicando no link Workbench, no canto superior direito. Neste momento a tela de trabalho do Eclipse será apresentada:

19_eclipse_ide

Configurando o Workspace

Vamos realizar algumas configurações básicas e visuais. A primeira é trocar a perspectiva de trabalho. O Eclipse é um IDE multifuncional e isso significa que ele lhe permite executar diversas atividades, por exemplo: codificar em Java, criar consultas a bancos de dados, depurar a execução do programa (debug), sincronizar os arquivos locais com um repositório remoto, etc. Certas atividades estão associadas a perspectivas, as quais contém os componentes (chamados de Views) adequados para a tarefa que você está realizando.

Clique no menu Window > Open perspective > Java. Note que que a janela mudou ligeiramente, conforme a imagem abaixo.

20_eclipse_java_perspective

Vamos analisar rapidamente alguns componentes da tela:

  • Menu principal (no topo da tela): acesso às funcionalidades atualmente disponíveis. Alguns menus podem mudar dependendo da perspectiva atualmente selecionada ou do arquivo atualmente sendo editado.
  • Barra de ferramentas (abaixo do menu principal): os botões contém ações mais comuns e também podem mudar dependendo da perspectiva e do arquivo.
  • Package Explorer (esquerda): view que lista os projetos e arquivos dos projetos.
  • Problems (parte de baixo): view que exibe erros e alertas encontrados nos projetos.
  • Tela central (em branco): editor onde serão abertos os arquivos.

Note ainda no canto superior direito a caixa Quick Access, onde você pode digitar qualquer coisa (configuração, nome de arquivo, etc.) e o Eclipse irá retornar os resultados rapidamente. À direita desta caixa estão listadas as perspectivas recentemente utilizadas, então você pode trocar facilmente a qualquer momento.

Irei fechar as views TaskList e Outline, pois não iremos utilizá-las neste momento.

Vamos realizar também algumas configurações para otimizar nosso trabalho. A primeira é desligar o corretor ortográfico em Inglês, caso contrário tudo o que escrevermos em Português ficará sublinhado de vermelho. Acesse o menu Window > Preferences..., pesquise pela configuração Spelling e desmarque a opção principal, conforme a tela abaixo:

21_disable_spelling

Caso esteja acessando a Internet sob um servidor Proxy, configure-o em Network Connection. Note que alguns plugins do Eclipse não funcionarão adequadamente mesmo com essas configurações de Proxy. Além disso, Proxies com NTLM não podem ser configurados através deste método. Verifique o tipo de Proxy que você possui e, se tiver dificuldades, serão necessárias soluções mais específicas que estão fora do escopo deste tutorial.

22_network

Se você tem um JDK devidamente instalado, o Eclipse deve tê-lo encontrado e adicionado automaticamente à sua configuração. Entretanto, verifique se está correto na configuração Installed JREs.

23_installed_jre

Após realizar as configurações acima, clique em OK.

Criando um projeto para teste

Vamos criar um projeto simples com o objetivo de verificar a instalação e permitir que você se acostume com o ambiente do Eclipse. Acesse o menu File > New  > Java Project. Dê um nome ao projeto e clique em Finish.

24_create_project

A view Package Explorer irá exibir o novo projeto. Clique na seta à esquerda do nome para mostrar seu conteúdo.

25_project_created

Vamos criar uma classe Java. Acesse File > New > Class ou simplesmente clique no botão indicado em vermelho na figura acima.

Na próxima tela, preencha o campo Package com o valor br.com.starcode.teste. O padrão para nomes de pacotes é usar sempre letras minúsculas, não usar caracteres especiais, números somente em situações especiais. Subpacotes são definidos usando o caractere de ponto final (.). Preencha também o campo Name com o nome da classe. Nomes de classes devem manter o padrão CamelCase, isto é, usa-se maiúsculas nas inicias das palavras, por exemplo “MinhaPrimeiraClasse”. Evite caracteres especiais e números. Marque a opção “public static void main(String[] args)” e clique em Finish para confirmar a criação da classe.

26_create_class

Veja como está a visualização:

27_new_class

Vamos editar o método main da nossa classe. Este método é especial para o Java, pois a execução do programa incia-se nele. Primeiro remova a linha com o comentário TODO, depois digite o conteúdo abaixo no lugar:

System.out.println("Testando o Programa!");

Teremos o conteúdo da imagem abaixo.

28_code

Não se esqueça de salvar o arquivo. Pressione Ctrl+S ou clique em File > Save.

E finalmente vamos executar nosso primeiro programa em Java. Clique com o botão direito do mouse sobre a classe e acesse o menu Run As > Java Application.

29_run_java_application

A view Console será aberta, exibindo a saída que nosso programa imprimiu e provando o sucesso da execução.

30_run_result

Depurando o programa

Aproveitando o exemplo da execução, vamos supor que você precisa fazer a depuração (debug) do programa por algum motivo. A depuração permite interromper temporariamente a execução do programa em um determinado ponto, inspecionar e alterar valores de variáveis e continuar a execução linha a linha para analisar o comportamento do programa.

Antes de iniciar a depuração, vamos criar um breakpoint, isto é, vamos marcar a linha onde queremos que a execução do programa seja interrompida. Existem várias formas de fazer isso, por exemplo:

  • Clique na linha desejada e pressione Ctrl+Shift+B.
  • Dê um duplo clique na barra azul à esquerda do editor, na altura da linha desejada.

30_breakpoint

  • Clique com o botão direito na barra azul à esquerda do editor e selecione a opção Toggle Breakpoint.

30_breakpoint 2

O resultado é uma bolinha azul à esquerda da linha, conforme a imagem abaixo.

30_breakpoint done

Para remover o breakpoint, execute novamente um dos procedimentos citados (tecla de talho, duplo clique ou menu de texto).

Agora vamos executar o programa em modo de depuração (debug mode). Clique com o botão direito sobre a classe e acesso o menu Debug As > Java Application.

30_debug as menu

Após o início da execução, quando um breakpoint for encontrado, o Eclipse irá perguntar se você deseja mudar a visualização para a perspectiva Debug.

30_change perspective

Clique em Yes e a tela do Eclipse mudara, exibindo outras views e a linha atual sendo executada em verde claro no editor.

30_breakpoint stopped

Confira alguns detalhes da tela acima:

  • Debug: view que exibe as threads do programa atual e a pilha de chamadas. Como temos apenas um programa simples, há apenas uma thread. E como estamos na classe principal, o único item da pilha consiste do nome da classe, do nome do método e do número da linha sendo executada.
  • Variables: view que exibe as variáveis do escopo atual, de forma que você pode ver e até modificar os valores.
  • Breakpoints: view que exibe todos os breakpoints do workspace.

Neste momento, estamos com a execução do programa interrompida na linha 7. Além de conferir as variáveis do escopo atual, você pode executar um trecho do código e conferir o valor retornado através do Inspect.

Como não temos nenhuma variável, vamos inspecionar o texto contido na função println. Selecione o texto, clique com o botão direito e selecione o menu Inspect.

30_inspect menu

O Java irá executar o trecho selecionado e retornar o resultado numa caixa amarela, conforme a imagem abaixo:

30_inspect result

Embora em nosso exemplo tenhamos usado uma String simples, poderíamos ter feito com qualquer trecho, por exemplo, uma conta matemática ou uma chamada de método. Apenas tome um certo cuidado com a função Inspect, pois o código selecionado é realmente executado, afetando variáveis e valores do seu programa.

Dicas para organização e manutenção de projetos

Logo seu Workspace pode ficar abarrotado de projetos e, consequentemente, o desempenho do Eclipse e sua experiência como desenvolvedor cairão drasticamente. Além de separar seus projetos em vários Workspaces, existem técnicas que ajudam no dia-a-dia, tanto no que se refere à organização quanto ao desempenho.

Vamos criar um projeto adicional para efeito de exemplo. Siga os passos anteriores, mas crie um projeto com outro nome.

31_second_project

Veja como ficou o Workspace:

32_two_projects

Seguindo nosso exemplo, vamos supor que não queremos mais usar o primeiro projeto por algum tempo. Nós podemos fechá-lo, de modo que ele ainda existirá, mas não ocupará recursos. Ao fechar um projeto, o Eclipse não listará os arquivos nem fará cache das classes contidas nele. Para fechar um projeto, clique com o botão direito sobre ele e selecione a opção Close Project.

33_close_project

O ícone do projeto vai mudar e você não poderá mais acessar o seu conteúdo até abri-lo novamente.

34_closed_project

Se desejar abrir o projeto para acessar os arquivos, dê um duplo clique no mesmo ou clique com o botão direito e selecione o menu Open Project. Não precisa fazer isso agora.

Partindo para outro exemplo, vamos supor que você está com muitos projetos no Workspace. Há alguma forma de agrupá-los e organizá-los adequadamente? Para isso existem os Working Sets.

Vamos criar dois Working Sets. Clique no menu da view Package Explorer (conforme indicado em vermelho na imagem abaixo) e então selecione a opção Top Level Elements > Working Sets.

35_view_menu

A tela de configuração dos Working Sets é exibida:

36_configure_working_sets

Primeiramente vamos criar um Working Set chamado “Projetos Principais” com o nosso primeiro projeto. Clique no botão New..., digite o Working set name, adicione o projeto na lista da direita (Working set content) e clique em Finish.

37_new_working_set1

Depois, clique novamente em New... e repita a operação para criar outro Working Set chamado “Projetos Secundários”, incluindo desta vez o segundo projeto que criamos.

38_new_working_set2

Após confirmar a inclusão você pode ordenar os Working Sets. Selecione um item da lista e clique em Up para mover o item para cima ou em Down para mover o item para baixo. A ordenação final ficou da seguinte forma:

39_organizing_workingsets

Clique em OK e confira o resultado:

40_organized_projects

Por fim, se quiser excluir um projeto do seu Workspace, selecione o item e pressione a tecla Delete. Uma tela de confirmação será exibida.

41_delete_project

Note que existe uma opção chamada “Delete project contents on disk (cannot be undone)”. Caso a opção não esteja marcada o projeto será excluído do Workspace, mas não do seu disco rígido. Isso é importante caso não queira perder os dados ou esteja usando o projeto em outro Workspace. Caso a opção esteja marcada, o projeto e todos os arquivos contidos nele serão removidos não apenas do Eclipse, mas também apagados do seu disco, não sendo possível recuperá-los.

Resumo

Neste tutorial você aprendeu a baixar, instalar, configurar o Eclipse. Também viu como criar e organizar projetos, além de executar e depurar um programa simples em Java.

Apesar de tratar-se de uma introdução básica, este tutorial lhe dá uma base para avançar para usos mais avançados da plataforma Java, os quais disponibilizarei em breve.

Instalando e Configurando o Java Development Kit 7 para Desenvolvimento


Nota: Este artigo faz parte de uma série de tutoriais que estou preparando. O primeiro passo, obviamente, é configurar um ambiente de desenvolvimento completo. Meu objetivo é permitir que você tenha um ambiente funcional para então acompanhar sem dificuldades tutoriais sobre tecnologias específicas como JAX-RS, JSF, JPA, etc., evitando assim confusões sobre aspectos secundários.


Antes de pensar em desenvolver algo em Java, precisamos instalar a versão Java para desenvolvimento, isto é o JDK. Diferente do JRE (Java Runtime Environment),que geralmente instalamos para usar aplicativos, bancos, e outros, o JDK vem com várias ferramentas e o compilador javac.

Baixando o Instalador

Acesse http://www.oracle.com/technetwork/java/javase/downloads/index.html e clique no link indicado na imagem:

Baixar JDK

Na próxima tela, primeiro aceite os termos da licença para liberar os downloads e então escolha a versão do Java compatível com seu ambiente. No meu caso, tenho um Windows 64 bits, então escolhi a versão indicada na figura:

00_baixar_jdk_2

Aguarde o download terminar.

Instalando o Java Development Kit (JDK) e o JRE (Java Runtime Environment)

Execute o instalador que você escolheu. No programa que será aberto, que deve ser algo como a imagem abaixo, simplesmente clique em “Next” na tela inicial e novamente em “Next” na tela seguinte para iniciar a instalação.

02_instalar_jdk

No meio da instalação do JDK, será iniciada a instalação do JRE, que é a versão de execução do Java. Clique em “Next” para iniciar a instalação e ser informado de que “mais de 3 bilhões de dispositivos executam Java”.

04_instalar_jre

Ao final, clique em “Close” para finalizar instalação.

Configurando o ambiente

No caso do Windows, precisamos configurar as variáveis de ambiente para que o Java que instalamos fique sempre disponível quando precisarmos.

Acesse as “Configurações Avançadas do Sistema” (Pressione Ctrl+Pause para facilitar) e, na aba Avançado, clique no botão Variáveis de Ambiente.

05_configurar_var_amb

Verifique, nas Variáveis do sistema, se existe uma variável chamada JAVA_HOME. Certifique-se de que o Valor dessa variável contém o caminho para a pasta do JDK que acabamos de instalar, conforme a imagem:

06_configurar_java_home

Note que, no exemplo acima, já havia uma variável da versão anterior, então ela foi atualizada.

Depois disso, edite também a variável Path que está em “Variáveis do sistema” e acrescente o caminho %JAVA_HOME%\bin, se já não houver. Veja o exemplo na imagem abaixo:

07_configurar_path

Agora teste sua instalação abrindo o Prompt de Comando e digitando java -version. Veja como ficou o resultado:

08_versao_java

Pronto!  😀

Agora você já possui a versão mais atualizada de desenvolvimento da plataforma Java.

Não perca as próximas publicações com as demais configurações de um ambiente de desenvolvimento completo!

Você tem “o jeito”?

Assista aos primeiros dois minutos deste episódio do Dilbert (ative as legendas em português através do botão “Captions”):

É verdade que algumas pessoas nascem com um “jeito” especial para lidar com aspectos técnicos. Posso dizer que, desde o ano de 1997 quando encontrei uma instalação do Visual Basic 4 num CD emprestado, me deparei com algo em que tenho “o jeito”.

Porém, na área de desenvolvimento de software, temos a tendência de supervalorizar o conhecimento técnico em detrimento de áreas humanas e sociais, assim como ocorre por vezes na área de ensino onde um bom aluno em Matemática é mais reconhecido que um bom aluno em Português ou Geografia.

Mas cada indivíduo possui variadas habilidades em diferentes níveis. Por um lado, devemos exercitar nossos talentos para colhermos resultados satisfatórios. Talento sem treino e disciplina é um grande desperdício. Um excelente programador que não procura se aperfeiçoar vai acabar ultrapassado em poucos anos. Além disso, com diligência, um bom vendedor pode ganhar mais que o pessoal técnico. Por outro lado, é importante trabalharmos nossos pontos fracos. Programadores que escarnecem de usuários, mas não sabem se relacionar, dificilmente alcançarão algum sucesso na carreira.

Algo que tenho aprendido em meus poucos anos de experiência é que o empenho consciente em crescer na carreira vale muito mais do que meu talento em criar código. Este blog, assim como tudo o que tenho produzido, não existe apenas devido ao que eu sei, sendo um resultado de um constante investimento de tempo e intelecto.

Existe um conceito que aprendi estudando economia, chamado trade-off. Basicamente isso diz que nossas escolhas tem um custo. Sempre que você escolhe fazer algo, deixa de fazer inúmeras outras coisas. Quando você gasta seu dinheiro em uma coisa, deixa de gastar em inúmeras outras. Aplique isso na sua rotina diária e coloque na balança o custo do tempo que tem investido em atividades supérfluas. Quantas vezes poderíamos estudar, investir na saúde, aprender um idioma, empreender e se preparar para os vários desafios da vida, mas acabamos em frente a uma TV ou vídeo-game?

Em suma, tendo ou não “o jeito”, trabalhe para aperfeiçoar seus talentos e superar suas dificuldades. Não há ganho sem dor.

Você reclama do seu chefe e do seu ambiente trabalho?

Te peguei, não é? Mas não se preocupe, todos nós reclamamos e criticamos de alguma forma e isso não é necessariamente ruim.

carreira-escritorio-trabalho-profissao-chefe-empregado-demissao-atrito-relacoes-profissionais-1362150805350_956x500

Críticas construtivas ou reclamações fúteis?

Em várias situações, neste blog e mundo afora, costumo criticar como desenvolvemos e gerenciamos projetos de software. Por outro lado, em sombrios cantos de cozinhas e corredores de empresas ouvem-se constantes reclamações despreocupadas que vão desde a cor da cortina do escritório até o aroma do sabão da pia do banheiro. Qual a diferença?

Quando estamos inconformados com uma situação e queremos melhorar, nossa crítica terá o objetivo de gerar mudança e o resultado é positivo. Uma crítica construtiva é aquela que possui um fator motivador e gera ação nas pessoas. Por exemplo, meu objetivo com artigos de auto crítica é levar o leitor a uma reflexão sobre si mesmo e o ambiente ao seu redor, fazendo-o sair da inércia. Meus erros são uma escola para mim e quanto antes os identifico e os supero, mais benefícios colherei mais cedo.

Mas, infelizmente, quantas vezes dizemos coisas que não acrescentam em nada e geram insatisfação em nós e em nossos colegas? Estamos sendo um empecilho para nossas carreiras e para quem nos ouve. Considero vazia e sem sentido a crítica que fica apenas nela mesma. Seria melhor não a termos declarado.

A boa notícia é que, com um pouco de esforço, podemos transformar nossas reclamações vazias em críticas construtivas. Ao invés de dizer “o processo que usamos é um lixo”, não seria melhor pensar um pouco e mudar para “se ajustássemos a atividade X dessa forma Y, nossa produtividade aumentaria”? Ao invés de reclamar para todos os colegas que “o chefe não reconhece o meu trabalho”, seria melhor eu me esforçar para que o resultado do meu trabalho seja mais tangível de forma que possa frequentemente reportar visivelmente o progresso obtido.

Pense como seu chefe

Isso pode ser ofensivo para alguns, mas tenha paciência e acompanhe meu raciocínio um pouco mais.

Ao fazer uma crítica desdenhosa a um superior, você não ganha nada. Apenas reforça a barreira imaginária entre patrão e empregado. Se você quer crescer profissionalmente, coloque-se no lugar dessa pessoa e tente pensar como ela. Isso não significa se tornar igual a ela. Mesmo não concordando com algumas de suas atitudes, você deve compreender suas motivações. Não há problemas em discordar, mas será que você é capaz de propor uma solução comprovadamente melhor para as dificuldades que surgem sem simplesmente criticar a decisão do chefe ou gerente? Qual seria a reação dele se você propusesse uma boa solução?

A verdade é que na maioria das vezes nossas críticas são ignorantes, pois não temos “conhecimento de causa”. Nós reclamamos do nosso trabalho, não o fazemos direito e ainda assim achamos que podemos ser melhores do que os outros. Seja sincero: você acha que seu chefe vê algum potencial de crescimento em você se nem seu próprio trabalho atual é feito com empenho?

rba1_21

Algumas pessoas vêem o chefe como um tirano (não que alguns não sejam), mas na verdade elas não conseguem enxergar as situações do ponto de vista dele.

Por outro lado, poderíamos alcançar muito mais sucesso profissional se fôssemos capazes de produzir algo de valor para nossa área de negócio do que simplesmente sendo funcionários exemplares que chegam no horário e fazem muitas horas extras. Você é um excelente programador? E daí? Isso não tem a mínima importância se os clientes não estão mais satisfeitos do que com a concorrência. Você sempre fica até mais tarde? Mas se não entregar um produto de qualidade, está apenas desperdiçando energia elétrica. Por que temos essa mentalidade de que somos remunerados pelas oito horas diárias de trabalho? Se o valor do seu trabalho está em passar o tempo dentro da empresa, uma pedra prestaria um melhor serviço.

Diga-me com quem andas…

Um dos conselhos que seguramente daria para qualquer pessoa com relação ao ambiente de trabalho é: sempre ande em boa companhia. Quando passamos muito tempo com as pessoas pegamos o jeito delas. Minha esposa viajou há muito tempo para o nordeste e, em uma semana, ela simplesmente não conseguia mais falar sem o sotaque local.

Fique junto de pessoas descontentes, amarguradas, que sempre arranjam desculpas para não estudar coisas novas, que não se esforçam no trabalho e as chances são de que você, no mínimo, vai ter um rendimento menor do que poderia. Ande com pessoas mais experientes, que gostam de aprender e almejam mais da vida e constantemente você será contagiado pelo desejo de progredir.

Conclusão

Eu poderia escrever uma enciclopédia com exemplos de como nossa mentalidade é deturpada por anos de uma cultura dualista entre burguesia e proletariado, que gera tensão constante entre esses dois “lados”. Ou ainda poderia discorrer sobre uma longa lista de conselhos específicos sobre ética comportamental. Porém, vou concluir desafiando o caro leitor com uma paráfrase de uma expressão que minha esposa usa comigo algumas vezes:

Você acha que tem potencial? Pare de reclamar e mostre o seu valor!

Então o usuário não sabe o que quer? Conte-me mais sobre o esforço da equipe na elicitação de requisitos e o seu entendimento sobre o domínio da aplicação

wonka-requisitos

Volta e meia um desenvolvedor desabafa: “Usuário não sabe o que quer”. Ou ainda: “Usuário é burro”. Não questionarei a validade dessas afirmações, por vezes elas podem ser verdadeiras.

Por outro lado, devolvo a pergunta: como desenvolvedor, quanto empenho você coloca em entender o que o usuário está realmente precisando?

Usuários, em geral, não sabem nem o que um sistema de software é capaz de fazer, então não espere que lhe digam em detalhes o que você deve implementar. Casos de uso, histórias de usuário, diagramas, desenho das interfaces e outros recursos, por mais simples que sejam, não são suficientes para comunicar tudo o que é necessário.

Os usuários estão preocupados em resolver problemas de negócio e não em verificar uma lista de inputs da especificação de uma tela. Provavelmente eles sentirão falta daquela coluna do relatório somente quando este já estiver concluído. É preciso entender como um usuário utiliza esse relatório para um determinado fim, assim como o seu objeto ao executar uma determinada ação do sistema.

A única forma de entregar software com adequação e acurácia é compreender a necessidade do usuário do ponto de vista dele e do negócio e, independente da forma como uma solicitação chega até nós, traduzir esta necessidade em uma solução concreta. E isso sem esquecer das qualidades técnicas.

Os 10 erros clássicos do desenvolvimento de software

mistakesCom certeza você já se deparou com alguns erros clássicos do desenvolvimento de software. Infelizmente, por diversos motivos, as empresas e os engenheiros de software tem repetidamente falhado em seus projetos por não aprenderem com seus próprios erros. Que tal refletirmos sobre nossos maiores erros para, de alguma forma, evitar repeti-los?

Steve McConnell, um profissional experiente e autor de diversos livros e artigos sobre Engenharia Software, identifica em seu artigo Classic Mistakes os erros mais que ocorrem mais frequentemente. Abaixo, vamos analisar os 10 erros clássicos em projetos de software apontados pelo autor, acrescidos de alguns comentários:

10. Motivação

A motivação tem enorme impacto na produtividade e na qualidade, mas são poucos que adotam práticas efetivas para motivar as pessoas.

Salário não é o único nem o principal fator motivador, pois as pessoas tendem a se acostumar com o que ganham não importa o quanto seja. Programadores gostam de trabalhar com novidades tecnológicas, mas a excitação não dura tanto quanto gostaríamos, principalmente em projetos longos. Não existe uma fórmula mágica, o segredo é investir constantemente nas pessoas, financeiramente ou não.

Colegas mais experientes já me disseram que a motivação correta é um fator chave para o sucesso de um negócio.

9. Pessoas problemáticas

Não lidar com pessoas problemáticas, seja qual for o motivo, afeta a motivação de todos os envolvidos.

Soube de um gerente que teve problemas com o melhor desenvolvedor da equipe. Ninguém sabia se era inveja ou simplesmente o comportamento “normal” dele. Esse desenvolvedor constantemente gritava para toda a empresa ouvir a cada pequeno erro que seus colegas cometiam (como um erro de Português num e-mail), agredia verbalmente os outros desenvolvedores quando considerava suas dúvidas simples demais e interrompia deseducadamente seu gerente em reuniões com clientes e com a administração da empresa. O mal-estar foi generalizado e, embora ele fosse um desenvolvedor tecnicamente excelente, toda a equipe foi afetada negativamente.

8. Barulho

Lugares tumultuados e cheios de gente atrapalham muito a produtividade.

No livro Peopleware, o autor nos apresenta um exemplo de uma fábrica onde avisos eram feitos através de um sistema de auto-falantes, similar ao que ocorre em terminais, aeroportos e grandes lojas. Primeiro toca-se uma espécie de campainha e em seguida alguém fala. Todos os funcionários param o que estão fazendo para prestar atenção ao aviso, perdendo a concentração e levando algum tempo até retomar a produtividade anterior. Na maioria das vezes os avisos eram do tipo “fulano, favor comparecer ao…” e direcionados a apenas uma pessoa.

7. Abandonar o planejamento sob pressão

O cronograma ficou para trás e pressões surgem de todos os lados. A primeira reação é “sair correndo atrás do prejuízo”. Jogamos fora todo o planejamento (processo, testes, etc.) e tentamos entregar as funcionalidades como for possível, resultado num caos infinito de “codifica e arruma” (tentativa e erro).

6. Ignorar as atividades básicas de planejamento

“Pular” direto para a codificação aumenta de 10 a 100 vezes o custo de corrigir o código mal feito.

Não queira ser mais ágil que os métodos ágeis, pois até no agile em geral existe um plano detalhado da iteração (uma ou duas semanas, por exemplo) e um planejamento em alto nível até um certo horizonte do projeto.

Evite fazer em sua mente uma associação do ato de planejar com preencher documentos sem sentido. Planejar é pensar antecipadamente. Refletir sobre um problema antes de colocar a mão na massa irá evitar diversos tropeços.

5. Falta de controle de mudanças

Em média, os requisitos mudam 25% desde a fase de “requisitos definidos” até a primeira versão do sistema. Isso causa um aumento superior a 25% no cronograma. Portanto é necessário controlar as mudanças nos requisitos para limitar mudanças desnecessárias.

Controlar mudanças não consiste em limitar a adequação dos requisitos nem deixar de responder às mudanças em regras de negócio, como alguém pode pensar. O problema é que, se não houver controle, a tendência será um loop de alterações, muitas das quais serão feitas diversas vezes (por exemplo: aumenta fonte, diminui fonte, altera descrição, volta descrição anterior).

4. Síndrome da “bala de prata”

Quando as pessoas focam numa única ferramenta, tecnologia ou metodologia esperando que esta seja a solução para tudo, geralmente ocorre o contrário, a produtividade cai com o tempo.

Trabalhei na migração de um sistema feito na ferramenta chamada Genexus. É uma linguagem de quarta geração, tipo um Access um pouco mais evoluído, que se propõe a gerar telas e cadastros. Não vou entrar no mérito se é possível criar uma arquitetura adequada nessa ferramenta, mas no caso que conheço, apesar de ser muito mais fácil criar cadastros e telas do que em Java, com o tempo o código procedural do Genexus ficou tão complexo que alguns bugs simplesmente não podem ser corrigidos.

3. Informações insuficientes dos usuários

Uma pesquisa realizada em 1994 demonstrou que esta é a causa número um de fracassos em projetos de software.

Não adianta construir perfeitamente a coisa errada. Como engenheiros de software, e não como digitadores de código, nós temos a responsabilidade de compreender o suficiente sobre o domínio da aplicação para traduzir corretamente as necessidades de negócio em um sistema de software.

2. Cronogramas muito apertados

A mesma pesquisa também mostrou que a média de atraso dos projetos é de 220%, causados por cronogramas “agressivos”.

Ao permitirmos que a correria tome conta, as atividades que pensamos poder ignorar no princípio acabam sendo feitas com custo até 100 vezes maior em fases posteriores no projeto.

Além disso, a produtividade das pessoas cai devido à pressão. Alguns gerentes podem discordar, principalmente se estão acostumados a lidar com pessoas preguiçosas. Entretanto, os bons desenvolvedores não irão simplesmente produzir mais de uma hora para outra. Ao contrário, eles já dão o melhor e com a pressão passarão a cometer mais erros.

1. Adicionar mais desenvolvedores

Segundo o autor, este é o engano mais comum. A verdade é que, salvo raras exceções, adicionar pessoas à equipe vai gerar mais trabalho para as que já estavam no projeto, pois elas terão que parar a todo momento para explicar detalhes para os novos desenvolvedores. Dificilmente os novatos alcançarão um nível de produtividade recompensador no tempo esperado.

Eclipse: acabando com alguns erros de validação desnecessários

Erros de sintaxe em bibliotecas Javascript como jQuery e jQuery UI quando estão minimizadas (compactadas)

É uma dor de cabeça ver seu projeto sempre com erro por colocar uma versão minified do jQuery ou jQuery UI. A solução para isso, que aplica-se a qualquer script avaliado incorretamente como tendo um erro, é excluir o arquivo javascript específico da validação do Eclipse.

Em resumo, você precisa excluir os arquivos javascript da sua lista de fontes, conforme as telas abaixo:

Abaixo, o passo-a-passo com detalhes:

  1. Clique com o botão direito no projeto e, no menu, escolha a opção Properties.
  2. Navegue até o item JavaScript > Include Path e selecione a aba Source.
  3. Selecione o item Excluded na lista e clique em Edit….
  4. Clique em Add Multiple… e selecione os arquivos com problemas
  5. Clique em Finish e em Ok para confirmar

Observação: restrinja essa configuração para bibliotecas conhecidas e confiáveis, evitando a todo custo fazer isso para seus próprios scripts de modo a ocultar erros no seu código.

Erros de validação e sintaxe em XML

Existem muitos problemas diferentes de validação em XML. Tentarei cobrir os mais comuns:

Eclipse não consegue acessar o arquivo de validação (XSD ou DTD)

Por alguma razão, o Eclipse não consegue acessar o arquivo de definição (XSD ou DTD). Logo no início do XML, provavelmente você vai notar que há uma URL para um arquivo com extensão .dtd ou .xsd. Se o estiver offline, sob um proxy ou por qualquer outro motivo o Eclipse não puder baixar esse arquivo, ocorrerá erro de validação e uma possível lentidão até ocorrer um timeout.

Para resolver isso, baixe manualmente o arquivo de definição a partir da URL, acesse a configuração Windows > Preferences… > XML > XML Catalog no Eclipse, clique em Add… e adicione manualmente o arquivo baixado.

URL de arquivo de validação incorreta

Falhas de validação referentes à sintaxe também ocorrem com frequência. Após certificar-se de que está tudo certo no corpo do XML, verifique se as declarações dos arquivos de validação estão corretos na raiz do arquivo (xmlns e xsi:schemaLocation).

Recentemente tive problemas com um arquivo web.xml que estava com uma URL depreciada:

http://java.sun.com/xml/ns/j2ee

Ao invés da atualizada:

http://java.sun.com/xml/ns/javaee

A mensagem de erro era longa, iniciando com “s4s-elt-character: Non-whitespace characters…“. Bastou trocar j2ee para javaee e o erro de validação desapareceu. Na versão 2.5 da API do Servlet, o conteúdo correto da declaração é:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
		http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
	version="2.5">
(...)

Versão de arquivo de validação incorreta

Outro problema que já tive algumas vezes foi com o XML de configuração do Spring Framework. Atualizei a versão do framework e o XML de configuração começou apresentar erros somente quando eu estava offline.

Isso ocorre porque, no caso do Spring, o DTD de validação vem empacotado dentro do jar. Com a URL certa, mesmo offline o Eclipse encontra o arquivo de validação. Mas se mudarmos a versão do jar sem refletir a mudança no XML, o Eclipse vai tentar localizar o arquivo na internet.

Foi preciso apenas trocar a versão do caminho do DTD correspondendo à versão do Spring Framework. Exemplo:

<?xml version="1.0" encoding="UTF-8"?> 
<beans
    xmlns="http://www.springframework.org/schema/beans" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
(...)

Nesse exemplo, a versão 3.0 deveria ser atualizada para 3.1, conforme o upgrade do framework:

<?xml version="1.0" encoding="UTF-8"?> 
<beans
    xmlns="http://www.springframework.org/schema/beans" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
(...)

Erros em projetos Maven com o plugin m2e (Maven to Eclipse)

Antes de mais nada, é importante salientar que o m2e é um plugin do Eclipse que o integra ao Maven. Entretanto, o Maven possui seus próprios plugins. Portanto, não confundamos plugins do Eclipse com plugins do Maven.

Project configuration is not up-to-date with pom.xml

O erro mais comum em projetos com a Maven Nature (Natureza Maven, aqueles que ficam com um pequeno “M” no ícone do projeto) é quando o projeto não está atualizado conforme o arquivo de configuração do Maven (pom.xml). A mensagem é  “Project configuration is not up-to-date with pom.xml” e ocorre porque, dependendo das alterações no pom, as configurações de projeto (.project) e do classpath (.classpath), além de outros possíveis plugins do Eclipse, precisam ser atualizadas para refletir o novo pom.

Este é o problema mais simples de resolver, pois basta clicar com o botão direito sobre o projeto, acessar o menu Maven > Update Project… e confirmar.

Plugin execution not covered by lifecycle configuration

Outro erro comum ocorre ao usar um plugin no build do Maven que não seja reconhecido pelo m2e. Aparece a temida mensagem “Plugin execution not covered by lifecycle configuration…“. Isso ocorre porque o m2e não sabe como executar um determinado plugin do Maven dentro do Eclipse.

Anteriormente era necessário acrescentar uma tag um tanto volumosa em nosso pom para informar ao m2e o que ele deve fazer. Já nas versões mais novas do m2e, basta selecionar o erro new view Problems e aplicar um Quick Fix, solicitando ao m2e acrescentar o código necessário automaticamente.

É importante atentar para o fato de que há duas opções de solução: a primeira é acrescentar o código no próprio pom.xml, enquanto a segunda é acrescentar a solução de forma global para os projetos do workspace, o que é bem conveniente no caso de usar um certo plugin em vários projetos.

Para acessar a configuração global de mapeamento de plugins, acesse Window > Preferences… > Maven > Lifecycle Mappings. Nesta tela você pode abrir o arquivo clicando no botão Open workspace lifecycle mappings metadata.

Outros problemas com Maven

Se, ao tentar atualizar o projeto com o Update Project ocorrer algum tipo de exceção, tome as seguintes providências:

  • Verifique se você está sob um proxy. Se estiver, configure seus dados de acesso no arquivo settings.xml seguindo o modelo existente, recarregue as configurações do Maven através do botão de refresh na view Maven Repositories do Eclipse e faça um novo Update Project.
  • Verifique também as versões de dependências entre seus projetos. Uma versão errada pode gerar diferentes erros.
  • Remova do seu arquivo .classpath qualquer entrada que use uma variável, do tipo kind=”var”.
  • Verifique se existe algum outro erro no classpath, pois, por exemplo, uma entrada apontando para um arquivo jar inexistente impede o Eclipse de compilar o projeto. Faça um novo Update Project.
  • Quando a compilação do projeto falha mesmo quando o Maven Dependecies está funcionando (isto é, o classpath está sendo gerenciado corretamente pelo Maven), pode ser que algum jar baixado pelo Maven esteja corrompido. Verifique na sua pasta de repositório (geralmente uma pasta chamada “.m2” dentro da sua pasta de usuário) se os jars usados no seu projeto estão íntegros, abrindo-os com alguma ferramenta como o 7-zip.
  • Verifique na view Problems se existe algum erro no projeto que seja relacionado ao Maven. Procure então na view Error Log por mais detalhes, para tentar encontrar alguma pista sobre a causa. Por fim, se não encontrar a causa, olhe o arquivo de log do m2e no diretório “.metadata\.plugins\org.eclipse.m2e.logback.configuration” do seu workspace.

E você? Tem algum erro/problema misterioso em seus projetos do Eclipse? Comente!

What is a Legacy System?

Legacy-Software If you work with IT, certainly you already heard about “legacy systems”. However, unless you have searched about it by yourself, I doubt someone took the time to explain what it really means. As in many lingoes, people often just use it without really knowing its meaning and are ashamed of telling they don’t know what it is. So legends emerge. After all, we all born knowing such an obvious thing, isn’t?

Defining a legacy system

What is a legacy system? One says it’s an old system, another a system “received” from others or even a system that cannot be modified. Indeed, there isn’t a unified definition of legacy systems, but there is a set of indicators we could loot at. Let’s see some of them:

Lifetime

An “old” system, built relatively a long time ago, isn’t necessary a legacy. The lifetime is certainly an indicator, but not a definition.

Usefulness

A system that isn’t used anymore is not a legacy system. A good indicator is a system that’s essential for the business and cannot be abandoned, even though sometimes people would want to.

Obsolete Technologies and Hardware

A third indicator of a legacy system is its obsolescence. Some systems work on ancient hardware, such as mainframes, which components are costly and rare. Deprecated programming languages, development tools, protocols, database systems and data formats are also important to be considered.

Maintenance

Another tip about a legacy can be detected when all the original developers are retired or left the company, being difficult to replace the workforce. Actually, if people prefer to die instead of working on a software, probably there is a legacy system involved.

Documentation

A few authors claim that a characteristic of a legacy system is lack of documentation. I completely disagree. In this way, the majority of modern systems would born as legacies. 😉

However, if no one knows the business rules behind it and it’s impossible extract them from the implementation, that certainly indicates a legacy system.

Creating a legacy system

Specific decisions and actions, or the lack of them, collaborate in making legacies.

Don’t design properly

The main act that produces legacy systems occur just in its conception. A critical system, from business point of view, without a good design inevitably will become a legacy quickly, as soon as it’s deployed and people realize new features are hard to be added.

Don’t refactor

The system’s complexity grows when it’s modified to meet new requirements. We can call it “entropy”. When code is changed or added without any control, it becomes more and more unorganized and difficult to understand. Without refactoring and internal improvements of the architecture, it would reach a point where will be almost impossible to make any modification without break something.

A friend of mine used to say: “this system is like a short blanket, you cover your feet and it uncovers your chest, you cover your chest and it uncovers your feet”. Did your hear of cases when for each bug fix, two new bugs arose? I heard about a company that chose don’t fix a system because they feared it would not work anymore, since the consequences of changes were unpredictable.

Conclusion

We looked at various indicators of a legacy system, then a few items about how we, as developers, contribute to their appearing.

A more generic and broad definition of legacy system, which I learned from an advisor and professor, goes like this: from a point in the lifetime of a system, its architecture becomes complex enough to make the cost of maintenance higher than the cost of building a new one. There are some issues in this definition, but I won’t go into details. The main idea is: if the cost to add new features is a great constraint to the business, we have a legacy.

There is not absolute rule to define what a legacy system is, but such knowledge about this type of system surely help in management decisions and also in the development of new systems, since we’re able to take actions against the growing complexity in order to make system’s lifetime longer.

Página 7 de 10

Creative Commons O blog State of the Art de Luiz Ricardo é licenciado sob uma Licença Creative Commons. Copie, compartihe e modifique, apenas cite a fonte.