JavaRush /Blogue Java /Random-PT /Vamos começar do início ou 'Olá, Java World!'
articles
Nível 15

Vamos começar do início ou 'Olá, Java World!'

Publicado no grupo Random-PT
Quero começar este artigo com uma digressão incomum, à primeira vista. Mais tarde ficará claro o porquê exatamente.
Vamos começar do início ou Olá, Java World!  - 1
Então, vamos imaginar Alguém. Esse Alguém quer dominar o esqui alpino. E para isso ele segue os seguintes passos:
  • Instrutores, livros didáticos, manuais, etc. - tudo isso vem do maligno. Você pode aprender a esquiar sozinho. Além disso, na escola ele aprendeu a praticar esqui cross-country razoavelmente bem. Conseqüentemente, todos os conselhos de pessoas mais experientes são ignorados.

  • O equipamento mais legal é escolhido. Não abaixo do nível de especialista. Botas duras que machucam os pés. Esquis rígidos que exigem um esforço fantástico para dobrar, excedendo em muito o nível de aptidão física de Alguém. Bem, etc.

  • A pista de testes é... bem, digamos, a pista que recebe a etapa de slalom gigante da Copa do Mundo. Isso é ideal para estudar.
  • Continue com o mesmo espírito.
Então aqui está a questão. Como você chamará esse Alguém? Pessoalmente, como pessoa que conhece o esqui alpino há cerca de 20 anos, vou chamá-lo (e isso ainda é muito leve!) - sem esperança. É completamente impossível aprender alguma coisa com esta abordagem. Mas uma maneira segura de se machucar. E o MAIS certo é abandonar para sempre a ideia de esquiar. Acho que você concordará comigo nesta avaliação. Em todo caso, tenho quase certeza de que esse Alguém não esperará que algo desagradável lhe seja dirigido. Agora vamos imaginar outro Alguém. Deixe-o, digamos, ser um estudante de ciência da computação. Ele tem algum conhecimento de C++, C#, Pascal. Ele quer aprender Java. Suas ações:
  • A literatura correspondente ao seu nível de conhecimento (nível zero, falando francamente) é deixada de lado. Baseado em uma ligeira familiaridade com a teoria C++, C# e OOP mencionada.
  • O ambiente de programação mais poderoso é utilizado. Digamos Eclipse ou NetBeans. Aquele que faz tudo sozinho, basta apertar um botão.
  • Como aplicativo de teste, selecionamos... bem, digamos chat. Um aplicativo cliente-servidor, a parte do cliente na forma de um miniaplicativo, a parte do servidor - um serviço da web ou, na pior das hipóteses, servlets. Ideal para estudar.
Pergunta. Como você chamará esse Alguém? Você sabe qual é o paradoxo? O facto é que neste caso haverá significativamente menos avaliações imparciais. Apesar de as situações serem idênticas em todos os aspectos. A menos que as consequências para a saúde e a vida no segundo caso sejam menos fatais. Talvez este seja o problema? As situações são realmente muito semelhantes. Eu os descrevi especificamente no mesmo estilo. E uma coisa estranha: se o absurdo do primeiro é óbvio, então o segundo cenário é seguido por um número alarmante de desenvolvedores novatos. Dominar Java começa com a escrita de MIDlets, clientes para bancos de dados, chats, criação de sites baseados em servlets... Você pode continuar por muito tempo. Mas a questão não deixa de ser óbvia. Ao mesmo tempo, a literatura básica é posta de lado com desdém. Leia isso? Para mim? Sim, escrevo em C++ há três anos! (As opções estão em Pascal e até em Visual Basic.) E eu conheço OOP! Bem, em geral. Então, o que vem a seguir? E então isto:
  • Como converter um array de 8 bytes em longo?
  • Por que isso acontece NoClassDefFoundError?
  • Por que lanço o aplicativo no Eclipse ( NetBeans/IDEA/JBuilder) e está tudo bem, mas sem ele digito java HelloWorld.classe ocorre um erro?
  • Por que ele trava ClassNotFoundException?
  • Por que não há uma biblioteca? Já coloquei em classes.zip, mas não adianta!
  • Por que crio um array de objetos, mas quando tento usar um elemento do array recebo NullPointerException?
  • E porque ...?
  • E porque ...?
  • E porque ...?
Porque porque porque? Mas porque Java não é C++ ou Pascal. E não Perl. O conhecimento dessas línguas não só muitas vezes não ajuda, mas também atrapalha. Até porque essas línguas têm ideologias completamente diferentes. Mas a semelhança externa é enganosa. É claro que todos esses “porquês” e “comos” têm respostas nos livros. Na literatura do nível mais básico. Mas ler é preguiçoso (opções: vergonha, sem tempo, etc.). Conheço muitos estereótipos que foram transferidos para Java por bons especialistas em C++. Um exemplo recente: você nunca deve lançar uma exceção em um construtor. Por que? Sim, porque em C++ o estado de tal objeto não está definido. Conseqüentemente, ocorre um vazamento de memória. Em Java, esse problema não existe em princípio, devido à presença de um coletor de lixo. Porém, há pessoas que tentam evitar tais situações. Apenas de acordo com um estereótipo arraigado. E o pior é que com esses esforços o código fica muito mais complicado. A sintaxe é fácil de aprender. E completamente insuficiente. A ideologia da linguagem é muito mais importante. E para dominá-lo de forma mais eficaz, você deve começar desde o início. Por que exatamente e como? E esta é outra questão. Então. Onde e como começar. Depende do que você deseja alcançar. Se você deseja se tornar um macaco habilidoso em codificação, pode começar com quase tudo. Se você quer se tornar um profissional, as coisas são um pouco mais complicadas. Minha experiência me dá motivos para dizer o seguinte. A diferença entre um desenvolvedor profissional e um “codificador” é que ele entende o que está acontecendo. Ele faz um pouco mais do que apertar botões. Um ambiente poderoso é uma ajuda muito boa. Para quem pode passar sem ele. Mas muitas vezes é a única ferramenta de quem começou com ela. E na sua ausência, o valor do macaco codificador é zero. Porque não há botões para pressionar. Em geral, pressionar botões pode assumir formas verdadeiramente monstruosas. Um dos meus colegas viu um produto escrito em Java. As instruções para instalação começavam com as palavras: “Instale o JBuilder a partir do disco...” Agora ISTO já é fatal. Se os desenvolvedores não conseguiram fazer o produto funcionar sem um ambiente de desenvolvimento, estremeço ao pensar como ele foi escrito. No mínimo, foi escrito por amadores. O que quero dizer com "entende o que está acontecendo?" Isso significa que uma pessoa deve compreender o seguinte:
  • O que é uma máquina virtual e por que ela é necessária?
  • O que é uma classe do ponto de vista de uma máquina virtual.
  • O que é um pacote?
  • O que é uma biblioteca?
  • Como a máquina virtual procura e carrega classes; o que é um carregador de classes e como funciona; quantos existem por padrão; o que é caminho de classe.
Etc. e assim por diante. A lista continua. Observe que não incluí conhecimento específico do próprio desenvolvedor. O que é um thread, o que é uma classe do ponto de vista OOP e como ela difere de um objeto, como funcionam os gerenciadores de layout - QUALQUER desenvolvedor deve saber de tudo isso. Tudo o que listei é mais um detalhe técnico. Mas muitas vezes acontece que conhecê-los é vital para compreender o que está funcionando errado. Um exemplo de vida. Existe uma biblioteca para trabalhar com XML chamada xalan. Ele contém vários pacotes javax.xml... - analisadores, transformadores, etc. Esta biblioteca é muito popular. O problema é que esses mesmos pacotes estão presentes no J2SDK desde a versão 1.4. Pergunta. Qual classe será carregada ao acessar a classe javax.xml.transform.stream.StreamSource da biblioteca, se xalan também estiver presente no classpath - biblioteca ou do J2SDK? Para responder a esta pergunta, você precisa saber como funciona o carregador de classes. Certa vez, vi uma discussão de quatro dias em um dos fóruns que finalmente chegou a esse assunto. O código não funcionou corretamente justamente porque o carregador não pegou a classe que era esperada dele. O que estou querendo dizer? O problema é o seguinte: quanto mais poderoso o ambiente de desenvolvimento, mais ele faz pelo desenvolvedor - menos ele precisa pensar. E isso já é, ah, que ruim. Tão perto do macaco. Isto leva à primeira conclusão, por mais paradoxal que pareça:

Conclusão 1. É aconselhável começar a aprender Java SEM um ambiente poderoso.

Não defendo escrever em editores no nível do bloco de notas. Mas não faço isso pela única razão - eles, via de regra, não possuem destaque de sintaxe. Isso é algo incrivelmente conveniente que não tem um efeito negativo. Você pode usar algo como Notepad++ , ele entende a sintaxe Java e, aliás, é gratuito. Por exemplo, tenho o tipo de arquivo .java registrado no sistema especificamente para isso. Portanto, um editor de texto com destaque de sintaxe e linha de comando. Dois ou três dias de tormento - e entender o que é um classpath, como o intérprete é iniciado e um monte de outras pequenas coisas - entender isso permanecerá para sempre. Avançar. Minha experiência me dá motivos para dizer que é impossível adquirir conhecimento para uso futuro. No sentido de que só vale a pena ler literatura quando há perguntas às quais ela responderá. Se você ler um livro sem ter dúvidas sobre ele, a informação desaparecerá em uma semana. Eu sei disso muito bem, inclusive por experiência própria. Certa vez, comecei a ler um livro sobre servlets cinco vezes. Até começar a lidar com eles no meu trabalho, a informação não era absorvida. E isso está longe de ser um caso isolado. Era uma vez, há muito tempo, cerca de 8 a 10 anos, li o seguinte, infelizmente, não me lembro do autor: Como ensinar uma nova linguagem de programação a uma pessoa? Muito simples. Você precisa dar uma linguagem, várias tarefas e um mínimo de documentação. Então, depois de alguns meses, quando ele começar a escrever pelo menos nesse idioma, forneça uma documentação abrangente. Será lido em duas semanas como um romance policial, após o qual a pessoa estará pronta para trabalhar. Concordo 100% com esta afirmação. Em dois meses, por um lado, todos os problemas menores irão desaparecer. As respostas serão obtidas de forma independente, o que aumentará muito o seu valor. Por outro lado, já se formarão perguntas claras, cujas respostas serão fornecidas pela documentação. Isto leva à segunda conclusão, que não parece menos paradoxal que a primeira:

Conclusão 2. É aconselhável começar a aprender Java SEM livros didáticos. Documentação da API Java + tutorial Java - isso é mais que suficiente.

A documentação da API Java é obrigatória. Eu recomendo fortemente mantê-lo localmente, no disco. Você terá que contatá-la mais de uma vez, não duas, nem mesmo dez. Pessoalmente, não passa um dia sem que eu não vá lá. Também recomendo manter o tutorial Java localmente. Esta é uma informação básica que substitui completamente um livro didático. No entanto, há uma boa quantidade disso aí. Devo dizer que em áreas que não trato no trabalho, ainda encontro algo novo para mim. Ler muito é ruim. Enquanto não houver solicitação, não haverá resposta. Ler um pouco também faz mal. Onde está o meio-termo? Eu sigo esta regra: leio até começar a parecer que recebi a resposta à pergunta. Em 90% dos casos não é esse o caso. Mas é neste momento que o melhor é parar e continuar por conta própria. O impulso inicial foi recebido e resolver o problema de forma independente dará muito mais. Claro, depois de algum tempo vale a pena dedicar-se à literatura. Mas, novamente, para literatura básica. Mesmo que pareça que tudo isso não faz sentido, vale a pena ler os capítulos iniciais. Quase posso garantir que você aprenderá pelo menos algo novo. E este algo pode mais tarde revelar-se extremamente importante. OK. Parece que descobrimos sobre o que escrever. Como escrever - também. Mas o que devo escrever? Lembre-se de onde este artigo começou. Devo começar escrevendo um sistema de mensagens instantâneas? A escolha é, obviamente, sua. Parece-me que não vale a pena. Quanto mais complexa for a tarefa, mais questões surgirão. Na ausência de experiência, tal número de questões dará uma sensação de impossibilidade de resolvê-las, seguida de um sentimento de inferioridade, estupidez, etc. Em última análise, isso pode levar à decisão de “vai para o inferno...” e parar de aprender o idioma. Aqueles. exatamente o efeito oposto ao que era necessário. Isso é característico não tanto de Java, mas do próprio processo de aprendizagem. Mas por alguma razão eles se esquecem disso quando se trata de ensinar programação. Enquanto isso, uma pequena tarefa concluída até o fim pode proporcionar muito mais satisfação e muito mais conhecimento do que um sistema grandioso abandonado logo no início da jornada. Daí a terceira conclusão: Conclusão 3. É aconselhável começar a aprender Java com tarefas adequadas ao seu nível atual de conhecimento de Java. Você não deve começar a aprender a dirigir um carro de Fórmula 1. Você não deve começar a aprender esqui alpino na pista da Copa do Mundo. E da mesma forma, você não deve começar a dominar Java escrevendo algo enorme. Entendo que a ambição é exigente. Mas neste caso eles são infundados. E quanto mais ambições irracionais você tiver, menos chances terá de se tornar um profissional. Um fenômeno notável em termos de aprendizagem são, curiosamente, vários fóruns. Se você usá-los com sabedoria. Sabiamente - isso significa que você precisa fazer o oposto, não como de costume. Ou seja, não para fazer perguntas, mas para respondê-las. Qualquer um que você tenha força para alcançar. Se você pensa que eu mesmo sei tudo, está muito enganado. Sim, eu sei muito. Mas há áreas que nunca encontrei. Ou tenho, mas muito pouco. Um exemplo clássico da minha prática é trabalhar com certificados: assinatura de código, conexões seguras, etc. Em 1998, quando escrevia minha tese, fiz isso, mas desde então tudo mudou muito. Ao longo dos anos, tive dúvidas acumuladas. Até comecei a ler alguma literatura. Mas, como disse acima, não é possível obter conhecimento para uso futuro. É como um pé de cabra: entra por um ouvido e sai pelo outro. Não há resultado exceto um buraco na cabeça. E isso continuou até recentemente, quando uma pergunta foi feita no fórum sobre uma conexão SSL com o Tomcat. Houve alguns problemas. E só esta questão me levou a cavar fundo. E se há um pedido, também há uma resposta. Não apenas descobri qual era o problema da pessoa, mas também encontrei um monte de outras informações úteis. Finalmente entendi como funcionam os certificados. O artigo correspondente está nos planos. E isso acontece o tempo todo. Trabalhei bastante, por exemplo, com a GUI. Foi somente como resultado da pergunta de alguém no fórum que entendi alguns dos recursos do TextLayout. Antes desta pergunta eu não tinha ideia sobre eles. Da mesma forma, descobri recentemente que o JButton também interpreta html como seu próprio cabeçalho. Antes disso, eu pensava que apenas o JLabel poderia fazer isso. E isso novamente graças ao fórum. Acontece que quanto mais respondemos às perguntas, mais aprendemos. É por isso que não concordo com a opinião popular de que se uma pessoa participa de um fórum, ela não faz nada. Isso está longe de ser claro e depende principalmente do motivo exato pelo qual a pessoa está no fórum. E o que ele faz predominantemente – perguntar ou responder. Na verdade, você pode até perguntar. Mas também com sabedoria. Não peça uma solução (e principalmente com o pós-escrito “Por favor, quem sabe, responda e não faça perguntas!”, que encontrei outro dia!), mas novamente, pelo contrário, peça para definir o direção do movimento. É perfeitamente compreensível que seja difícil para um iniciante entender onde cavar, porque simplesmente não tem experiência. Isso não é culpa da pessoa e nem é um problema. Isto é bom. Todo mundo já passou por isso. Eu incluído. Para mim, pessoalmente, é muito mais importante que uma pessoa queira aprender alguma coisa. E não apenas obter uma resposta, apenas para esquecer cinco minutos depois de fazer um laboratório de programação. Eu sempre lhe direi a direção do movimento. Se eu mesmo o conheço. E se não sei, pelo menos posso adivinhar. E certamente também procurarei a resposta. Mas provavelmente nunca dou respostas diretas – pelo menos não me lembro. Aliás, foi por isso que saí de um dos fóruns. Quando comecei a fazer perguntas importantes, eles me explicaram em uníssono que é costume que respondam simplesmente. E com minhas perguntas posso ir mais longe. Considerando que o nível do fórum deixou muito a desejar, até graças a esta abordagem! – Decidi não perder mais tempo. Então escolha um fórum de sua preferência e pronto. Aliás, este site apareceu justamente graças a um dos fóruns. Depois de conversar por lá por algum tempo, acumulei uma lista dos tópicos levantados com mais frequência e percebi que tal site seria muito procurado. E assim aconteceu. Quase todos os artigos são escritos após algumas discussões no fórum. Ou acompanhando a correspondência que também conduzo regularmente. Qual é o resultado? Trabalhe, trabalhe e trabalhe novamente. Quanto mais você se permite fazer por si mesmo no estágio inicial, menos conhecimento você ganha. E quanto mais longo será o caminho para o profissionalismo. Mas só você pode escolher quem quer ser: um macaco que aperta botões sem pensar ou um profissional. E só você mesmo escolhe o caminho pelo qual pode conseguir isso ou aquilo. A primeira maneira é clara. Tentei mostrar o segundo. Sua vez, senhores! Link para a fonte original: Vamos começar do início ou 'Hello, Java World!'
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION