MindView Inc.

Pensando em Java, 3ª ed. Revisão 4.0


[ Viewing Hints ] [ Book Home Page ] [ Free Newsletter ]
[ Seminars ] [ Seminars on CD ROM ] [ Consulting ]

Anterior Próximo Página Inicial Índice Conteúdo

Prefácio



Eu sugeri ao meu irmão Todd, que está trabalhando o transporte de hardware em programação, que a próxima grande revolução será na engenharia genética.



Nós teremos micróbios projetados para gerar comida, combustível e plástico; eles vão limpar a poluição e, em geral, permitir que dominemos a manipulação do mundo físico por uma fração do que isso custa hoje. Eu afirmei que ela faria a revolução do computador parecer pequena em comparação.Comentários (em inglês)



Então eu percebi que estava cometendo um erro comum aos escritores de ficção científica: perdendo-me na tecnologia (o que é obviamente fácil de fazer em ficção científica). Um escritor experiente sabe que a história nunca é sobre as coisas; é sobre as pessoas. A genética terá um impacto muito grande em nossas vidas, mas eu não estou tão certo de que ela diminuirá a revolução do computador (a qual possibilita a revolução genética) - ou ao menos a revolução da informação. Informação refere-se a conversar um com o outro: sim, carros e sapatos e especialmente curas genéticas são importantes, mas no final eles são apenas adornos. O que importa verdadeiramente é como nós nos relacionamos com o mundo. E boa parte disso refere-se à comunicação.Comentários (em inglês)



Este livro é um exemplo claro. A maioria das pessoas pensaram que eu era muito ousado ou um pouco louco por colocar o livro inteiro na Web. "Por que alguém o compraria?" eles perguntaram. Se eu tivesse tido uma postura mais conservadora eu não o teria feito, mas eu realmente não queria escrever outro livro de computação ao mesmo velho estilo. Eu não sabia o que aconteceria, mas esta se tornou a coisa mais inteligente que eu já fiz com um livro.Comentários (em inglês)



Em primeiro lugar, as pessoas começaram a enviar correções. Esse tem sido um processo espetacular, porque eles vasculharam cada canto e cada greta e pegaram tanto erros técnicos como gramaticais, e tenho sido capaz de eliminar bugs de todos os tipos que eu sei que de outra forma escapariam. As pessoas tem sido simplesmente fantásticas nesse ponto, frequentemente dizendo "Agora, eu não quero dizer isso de maneira crítica..." e então dando-me uma coleção de erros que eu tenho certeza de que nunca encontraria. Sinto que isso tem sido um tipo de processo grupal e transformou o livro em algo especial. Devido ao valor deste feedback, eu criei diversas encarnações de um sistema chamado "BackTalk" para coletar e categorizar comentários.Comentários (em inglês)



Mas então eu comecei a ouvir "Ok, certo, legal você ter disponibilizado uma versão eletrônica, mas eu quero uma cópia impressa e encadernada de uma editora real". Eu me esforcei bastante em torná-lo fácil para todos imprimirem em um formato bom de se ver, mas isso não conteve a demanda por um livro publicado. A maioria das pessoas não querem ler o livro inteiro na tela, e revolver um maço de papéis, não importa quão bem impressos, também não os apeteceu. (Além do mais, acho que não é tão barato em termos do toner de impressora a laser.) Parece que a revolução do computador não irá colocar as editoras fora do mercado, afinal. No entanto, um estudante sugeriu que este pode se tornar um modelo para publicações futuras: os livros serão publicados primeiro na Web, e somente se interesse suficiente justificar ele será colocado no papel. Atualmente, a grande maioria de todos os livros são fracassos financeiros, e talvez esta nova abordagem poderia tornar a indústria livreira mais rentável.Comentários (em inglês)



Este livro tornou-se uma experiência esclarecedora para mim por outro lado. Eu originalmente abordei Java como "apenas outra linguagem de programação", o que em muitos sentidos ela é. Mas à medida que o tempo passou e eu a estudei mais profundamente, comecei a ver que a intenção fundamental desta linguagem era diferente de outras linguagens que eu havia visto até aquele momento.Comentários (em inglês)



Programando é sobre gerenciando complexidade: a complexidade de um problema que você queira resolver, sobre a complexidade da máquina em que este é resolvido. Por causa desta complexidade, a maioria de nossos projetos de programação falham. E ainda, de todas as linguagens de programação em que eu esteja ciente, nenhuma delas tem ido além e decidido que seu principal objetivo de desenho seja conquistar a complexidade do desenvolvimento e manutenção de programas.[1] Naturalmente, várias linguagens desenham decisões com a complexidade em mente, mas em algum ponto sempre havia algumas outras edições a serem consideradas como excenciais para ser adicionado a mistura. Inevitavelmente, estas outras edições são o que causa a programadores a eventualmente “se chocarem” com aquela línguagem. Por exemplo, C++ teve que ser compatível com C (para permitir a fácil migração para programadores C), assim como eficiênte. Estes são ambos muito úteis objetivos e contam para muito do sucesso do C++, mas ele também expôs uma complexidade extra que impede que alguns projetos sejam terminados (certamente, você pode responsabilizar programadores e gerência, mas se uma línguagem pode ajudar por capturando seus erros, por quê não faze-lo?). Como outro exemplo, Visual BASIC (VB) foi preso ao BASIC, o qual não foi realmente desenhado para ser uma línguagem extensiva, assim todas as extensões empilhadas ao VB tem produzido algumas sintaxes verdadeiramente horríveis e não passíveis de manutenção. Perl é compatível com Awk, Sed, Grep e outras ferramentas do Unix este foi pensado para substituir e como resultado é frequentemente acusado de produzir “código apenas de escrita” (isto é, apos alguns poucos meses você não consegue ler este). Por outro lado, C++, VB, Perl e outras linguagens como Smalltalk tem alguns de seus esforços de desenho focados sobre a edição de complexidades e como resultado são de considerável sucesso na solução de certos tipos de problemas. Comentários (em inglês)



O que mais me impressionou quando eu vim a entender Java é que em algum lugar na mistura dos objetivos de projeto da Sun, parece que houve o propósito de reduzir a complexidade para o programador. Como se dissessem "nós nos importamos com a redução do tempo e da dificuldade de se produzir código robusto." Nos primeiros dias, este propósito resultou em código que não executava muito rápido (embora tenha havido muitas promessas feitas sobre quão rapidamente Java será executado algum dia) mas ele de fato produziu reduções impressionantes no tempo de desenvolvimento; metade ou menos do tempo que se leva para criar um programa em C++ equivalente. Este resultado sozinho pode economizar incríveis quantidades de tempo e dinheiro, mas Java não para por aí. Ele continua e reune várias das complexas tarefas que se tornaram importantes, tais como multithreading e programação de rede, em funcionalidades da linguagem ou bibliotecas que podem às vezes tornar fáceis tais tarefas. E finalmente, ele cuida de alguns problemas de complexidade realmente grandes: programas de plataforma cruzada, mudanças de código dinâmicas, e mesmo segurança, cada qual podendo se adequar em seu espectro de complexidade em qualquer lugar entre o "impedimento" e a "ineficácia". Portanto a despeito dos problemas de performance que vimos, a promessa do Java é enorme: ele pode fazer de nós programadores significativamente mais produtivos.Comentários (em inglês)



Um dos lugares onde eu vejo o maior impacto disso é na Web. Programação de rede sempre foi difícil, e Java a torna fácil (e os projetistas da linguagem Java estão trabalhando em torná-la ainda mais fácil). Programação de rede é como nós conversamos um com o outro de modo mais eficaz e mais barato do que jamas conversamos usando telefones (o email sozinho revolucionou vários setores empresariais). A medida que conversamos mais um com o outro, coisas incríveis começam a acontecer, possivelmente mais incríveis mesmo que a promessa da engenharia genética.Comentários (em inglês)



Em todos os sentidos - criar os programas, trabalhar em equipes para criar os programas, construir interfaces de usuário de modo que os programas possam comunicar-se com os usuários, executar os programas em diferentes tipos de máquinas, e facilmente escrever programas que se comunicam através da Internet - Java aumenta a largura de banda da comunicação entre as pessoas. Eu penso que os resultados da revolução da comunicação podem não ser vistos a partir dos efeitos de se mobilizar grandes quantidades de bits; nós devemos ver a verdadeira revolução porque todos seremos capazes de conversar um com o outro mais facilmente: um a um, mas também em grupos e, como um planeta. Tenho ouvido a sugestão de que a próxima revolução é a formação de um tipo de mente global que resulta de pessoas e interconectividade suficientes. Java pode ou não ser a ferramenta que fomenta essa revolução, mas ao menos a possibilidade me fez sentir que estou fazendo algo significativo ao tentar ensinar a linguagem.Comentários (em inglês)

Prefácio à 3a edição



Muito da motivação e esforço para esta edição é para trazer atualização para o livro com o lançamento do JDK 1.4 da línguagem Java. Porém, isto tem também sido claro para a maioria dos leitores que usam o livro para adiquirir sólida compreenção dos fundamentos de maneira que podem se mover para mais complexos tópicos. Porque a línguagem continua a crescer, isto se torna necessário—em parte para que o livro não se estique em demasia—para reavaliar o significado de “fundamentos”. Este significa, por exemplo, rescrever completamente o capítulo “Concorrência” (formalmente chamado de “Multithreading”) portanto isto lhe dá o fundamento básico nucleo de ideias de threads. Sem aquele núcleo, é difícil enterner mais complexos assuntos de threading. Comentários (em inglês)



Eu também vim entender a importância do teste de código. sem uma estrutura de um framework de testes para que possa rodar a cada vez que construir o seu sistema, você não tem maneras de saber se seu código esta confiável ou não. Para completar isto neste livro, uma framework especial de teste foi criada para mostrar e validar as saídas de cada programa. Isto foi colocado no capítulo 15, um novo capítulo, adiante com explicações do ant (o sistema padrão de fato para construção em Java, similar ao make), JUnit (o framework padrão de fato para testes de unidades em Java) e a cobertura de logs e assertions (novo em JDK 1.4) junto com uma introdução a depuração e profiling. Para cercar todos estes conceitos, um novo capítulo chamado “Descobrindo Problemas”, e este introduz o que acredito agora seja características fundamentais para que todos os programadores Java deve ter em suas caixa de ferramentas básicas. Comentários (em inglês)



Em adição, eu tenho feito a cada simples exemplo neste livro uma pergunta para mim mesmo, “por quê fiz desta maneira?” Na maioria dos casos eu tenho feito alguma modificação e aperfeiçoamento, ambos para fazer os exemplos mais consistentes com eles mesmos e também para demosntrar o que eu considero a melhor prática na codificação do Java (no mínimo, dentro da limitação de um texto introdutório). Exemplos que não fazem mais sentido para mim foram removidos e novos exemplos foram adicionados. Um numero de exemplos existentes tem sido significantemente redesenhados e reimplantados. Comentários (em inglês)



Os 16 capítulos deste livro produzem o que eu penso uma fundamental introdução para linguagem Java. O livro pode se usado de forma viável como num curso introdutório. Mas e sobre o material avançado? Comentários (em inglês)



O plano original deste livro foi adicionar uma nova seção cobrindo os fundamentos de “Java 2 Enterprise Edition” (J2EE). Muitos destes capítulos seriam criados por meus amigos e associados que trabalham comigo em cursos e outros projetos, como Andrea Provaglio, Bill Venners, Chuck Allison, Dave Bartlett e Jeremy Meyer. Quando eu olhei para o progresso destes novos capítulos e o tempo final para entrega do livro eu comecei a ficar um pouco nervoso. Então eu reparei que o tamanho dos primeiros 16 capitulos era efetivamente o mesmo tamanho da segunda edição do livro. E as pessoas as vezes reclamam que este livro já é muito grande. Comentários (em inglês)



Leitores tem feito muitos, e muitos comentários maravilhosos sobre as primeiras duas edições deste livro, que naturalmente tem sido muito pazerosos para mim. Porém, de agora em diante, alguns terão queixas e com uma razão que períodicamente vem é que “o livro é muito grande”. Na minha mente isto é realmente uma danação da fraqueza se “muitas páginas” é sua única queixa. (Lembre-se da reclamação do imperador da austria sobre o trabalho de Mozart: “Tem muitas notas”! Não que eu de qualquer maneira tente comparar a mim mesmo com Mozart). Em adição, Eu posso somente asumir que como uma reclamação de alguém que esta ainda conhecendo a vastidão da própria línguagem Java e não tem visto o resto dos livros sobre o assunto. A despeito disto, uma coisa eu tenho tentado fazer nesta edição é retirar as porções que se tornaram obsoletas ou no mínimo sem sentido. No geral, eu tentei passar sobre tudo, removendo da terceira edição o que não é mais necessário, incluindo mudanças e melhorias em tudo que eu pude. Eu sinto confortável em remover porções de material porque o material original continua no site na Web (www.BruceEckel.com) e o CD ROM que acompanha este livro, o primeiro na forma livre para baixar e o segundo na edição impressa deste livro. Se voce quizer uma coisa antiga, este ainda esta disponível e este é um maravilhoso alívio para o autor. Por exemplo, o capítulo “Desenho de Padrões” se tornou muito grande e tem sido movido para seu proprio livro: Pensando em Padrões (com Java) (também baixavel pelo site na Web). Comentários (em inglês)



Eu decidi que na próxima liberação da versão de Java (JDK 1.5) da Sun, que irá presumidamente incluir um novo tópico chamado generics (inspirado pelos templates do C++), Eu terei que dividir o livro em dois para poder adicionar este novo capítulo. Uma pequena voz disse “por quê esperar?” portanto, eu decidi fazer isto nesta edição, e subitamente tudo fez sentido. Eu estava tentando comprimir muito num livro introdutório. Comentários (em inglês)



O novo livro não é um segundo volume, mais que isto um tópico avançado. Este irá ser chamado de Pensando em Enterprise Java, e este é correntemente avaliado (de alguma forma) para baixar livremente da www.BruceEckel.com. Por ser um livro separado, este pode explicar preenchendo tópicos necessários. O objetivo, como Pensando em Java, é para produzir uma cobertura de entendimento as bases da tecnologia J2EE assim que aquele leitor estiver preparado para uma cobertura mais avançada destes tópicos. Você pode encontrar mais detalhes no Apéndice C. Comentários (em inglês)



Para aqueles de vocês que não podem aguentar o tamanho do livro, eu peço desculpas. Acredite nelas ou não, eu tenho trabalhado dura para manter este pequeno. A despeito do volume, eu gosto de sentir que existem alternativas suficiêntes para satisfazer a você. Por uma coisa, o livro é disponível eletronicamente, portanto se você carrega seu laptop, você pode colocar o livro nele e não adicionar peso extra a seu trabalho diário. Se você esta realmente em processo de emagrecimento, existem atualmente versões para Palm Pilot deste livro flutuando por ai. (Uma pessoa me disse que ele tem lido o livro em sua cama com a luz do Palm ligada para irritar sua esposa. Eu posso somente esperar que que esto ajude a manda-lo para terra dos sonhos.) Se você necessita deste em papel, Eu sei de pessoas que imprimiram um capítulo por vez e carregavam em suas pastas para ler no trem. Comentários (em inglês)

Java 2, JDK 1.4



Os lançamentos do Java JDK são numerados 1.0, 1.1, 1.2, 1.3, e para este livro, 1.4. Embora estes numeros de versões existam em “alguns”, a maneira padrão a se referenciar a qualquer versão da linguagem que é JDK 1.2 ou maior é chamar este de “Java 2”. Isto indica a significante mudança entre “velho Java”—que tinha várias pretuberancias que eu reclamei na primeira edição deste livro—e este mais moderna versão aperfeiçoada e melhorada da linguagem, que tem de longe algumas pretuberancias e muitas adição e desenhos legais. Comentários (em inglês)



Este livro é escrito para Java 2, em particular JDK 1.4 (muito do código não irá compilar com versões anteriores e o sistema irá reclamar e parar se você tentar). Eu tenho a grande luxuria de liberar todas as velhas coisas e escrevendo somente o novo, melhorando a línguagem, porque a informação antiga ainda existe nas versões anteriores, na Web e no CD ROM. Também, porque qualquer um pode livremente baixar um JDK da java.sun.com, isto significa que escrevendo para JDK 1.4, eu não estou impondo uma dificuldade financeira para qualquer um por forçar a este a atualizar-se. Comentários (em inglês)



Versões previas do Java eram lançadas lentamente para Linux (veja www.Linux.org), mas aquilo parece ter sido resolvido e novas versões são lançadas para Linux no mesmo tempos como para outras plataformas agora mesmo o Macintosh esta iniciando a manter com as mais recentes versões do Java. Linux é um desenvolvimento muito importante em conjunção com Java, porque este está rapidamente se tornando a mais importante plataforma servidora existente—rápido, confiável, robusto, seguro, bem mantido e livre, este é a verdadeira revolução na história da computação (Eu não penso que tenhamos visto todas estas características em qualquer ferramenta antes). E Java tem encontrado um nicho muito importante na programação do lado servidor na forma das tecnologias Servlets e JavaServer Pages (JSPs), estas são de grande avanço sobre a programação tradicional Common Gateway Interface (CGI) (estes e tópicos relacionados são cobertos em Pensando em Enterprise Java). Comentários (em inglês)




[1] Eu retomo isto na segunda edição: Acredito que a linguagem Phyton chega perto de fazer exatamente isto. Veja www.Python.org.


Anterior Próximo Página Inicial Índice Conteúdo