Eu mal passei no meu exame de programação Java hoje. Eu tive que responder a algumas perguntas gerais sobre threading, o que eu fiz bem, e escrever um pequeno programa encadeado que foi pior. Eu tive que conectar meu laptop à tela do projetor e escrever o programa imediatamente. Minha primeira tentativa foi usar classes anônimas, mas esqueci a sintaxe exata. Talvez por causa de alguma emoção ou talvez porque nas últimas duas semanas eu estava codificando principalmente em php. Então eu perguntei se é permitido usar a documentação da API. A resposta foi "NÃO". Então, decidi dar um outro sentido e implementei o Runnable. O programa estava fazendo o que foi solicitado no final. É claro que os examinadores notaram minha primeira falha e isso afetou muito minha pontuação. Fiquei surpreso por não ter permissão para usar a documentação da API.
Portanto, minha pergunta é: É realmente importante poder codificar perfeitamente sem a documentação da API? Devo desenvolver essa habilidade? É realmente importante no mundo real e no ambiente de trabalho? Enquanto participava de cursos de programação, concentrei-me em padrões de aprendizado, desenvolvendo habilidades para escrever boas aplicações de design, habilidades para usar API e encontrar as informações necessárias rapidamente. Eu não estava tentando aprender a programar sem a documentação da API. É obrigatório durante as entrevistas de trabalho (codificação sem documentação da API)?
fonte
Respostas:
No Real Life ™, eu classificaria essa habilidade como "agradável de ter", mas não é de todo necessária. Em um ambiente universitário, porém, é diferente.
A capacidade de codificar sem documentação pode ser usada como um indicação indireta da familiaridade do aluno com o assunto. De certa forma, ver você codificando algo sem tocar na documentação informa ao professor que você já praticou a API antes - fazendo sua lição de casa e outras tarefas, ou talvez até programando por diversão sozinho. Uma pessoa inteligente com compreensão superficial da API em questão deve poderdescobrir quase qualquer API Java sozinha, olhando a documentação. Isso não é coincidência: geralmente é esperado que os programadores aprendam no trabalho, e a documentação da API para sistemas de programação populares, incluindo Java, está estruturada para ajudar os programadores a aprender rapidamente. A documentação geralmente fornece exemplos curtos e independentes, ilustrando o conceito de maneira breve e concisa.
Isso funciona diretamente contra o objetivo do professor de medir seu conhecimento sobre o assunto (em vez de medir o quão inteligente você é). Portanto, não é razoável pedir seu código sem consultar a documentação.
NOTA: Editei esta resposta em resposta a uma edição da pergunta.
fonte
Havia um cara que teve um pequeno bug em seu código, então ele o levou ao StackOverflow e pediu ajuda. StackOverflow: Java (gerando números sem repetições) . Eu olhei para o código dele e apontei para ele que seu HashSet estava constantemente sendo preenchido com valores, mas nunca foi limpo. Então, ele me perguntou: "como você limpa isso?" Devo admitir que não estou particularmente orgulhoso da resposta que dei.
Você absolutamente precisa conhecer as coisas básicas que você usa todos os dias. Você precisa conhecer todos eles e conhecê-los bem. Mas apenas as coisas básicas.
Para todo o resto, o importante é saber que há algo lá fora que faz o que você deseja. Precisamente qual classe você precisa usar, qual método você precisa chamar e exatamente quais parâmetros você precisa passar para ela é algo que você não precisa para manter os neurônios preciosos do cérebro ocupados. É para isso que serve a documentação e é por isso que os IDEs com preenchimento automático foram inventados. E, se o empurrão é necessário, sempre há StackOverflow e a maior interwebz por aí.
Pedir aos programadores que conheçam as APIs de cor é semelhante a pedir aos advogados que conheçam de cor o código legal e todos os precedentes. É inútil. Um exercício de futilidade.
fonte
Eu não diria que é necessário, mas é
habilidade muito desejável
imNSho.
Passei alguns meses recentes codificando em estreita colaboração com o cara que conhece a API visivelmente melhor que eu. Ele é muito mais produtivo - simplesmente porque ele pode pular as verificações de documentos da API que me distraem .
Aqui, eu estou falando sobre fluência. Sobre não ser apenas capaz de algo, mas fluente.
Você sabe o que é ser fluente? É quando, para alguém que olha para você, parece que você codifica enquanto digita ...
... Isso é conhecimento fluente. É quando você leva um minuto para fazer o que leva um novato em uma hora. Vale a pena o esforço, realmente. Cheira a vitória.
Se você dominar a fluência em alguma API e se memorizar adequadamente como é, essa memória o guiará em como se tornar mais produtivo trabalhando com qualquer outra API.
fonte
Não. Eu estaria morto sem a capacidade de procurar na documentação da API. A única vez que não o tenho é quando estou tentando depurar algo em que não consigo acessar a documentação. Depois, faço a engenharia reversa das peças da API e recortar e colar, conforme necessário.
É importante ter uma boa idéia do que é a API e qual parte é melhor usar, mas conhecer os nomes dos métodos, os nomes das variáveis ... não é realmente necessário.
fonte
No trabalho, nunca tive uma situação em que não tivesse acesso à documentação. Por outro lado, ter compreensão de leitura e compreensão geral para poder interpretar documentação mal escrita é útil o tempo todo.
Você deve conhecer os padrões e a estrutura de suas APIs, mas saber exatamente onde tudo está não é particularmente útil.
Na SFU Computing Science, os exames fechados constituem entre 70% e 100% de nossas notas. A teoria é que os exames testam sua compreensão do material do curso e sua adaptabilidade. Na realidade, tudo o que realmente testa são seus nervos, sua qualidade / duração do sono, sua inteligência e suas técnicas de memorização - nenhuma das quais é necessária academicamente ou para um trabalho típico na indústria de software.
fonte
Para todos, exceto sua última pergunta: O conhecimento enciclopédico de qualquer documentação da API não é importante. Obviamente, você programará mais rapidamente se conhecer todos os detalhes de todos os métodos de todas as classes, mas isso não é uma expectativa razoável.
Para sua última pergunta: é esperado que você conheça as especificidades de algumas classes sem a documentação da API. Se você sabe, antes de entrar na entrevista, que fará o teste ou se o trabalho é muito focado (ou seja, você estará fazendo rosqueamento o dia todo), pode esperar razoavelmente precisar conhecer as classes relacionadas em detalhes.
Adendo: Você deve esclarecer bem antes de qualquer exame com seu professor / instrutor exatamente quais materiais serão fornecidos e quais materiais você poderá trazer. Suponha que tudo o que eles não concordaram explicitamente não seja permitido. Tive cursos em que só podia trazer o básico para a escrita, onde podia trazer os livros que quisesse e onde podia trazer exatamente uma folha de dupla face com o que quisesse. Os exames geralmente são estruturados em torno de quais materiais são permitidos.
fonte
Documentos da API! = Sintaxe do idioma.
Eu posso entender quando alguém não sabe os nomes exatos de várias classes Java e seus métodos. Eu não os conheço e codigo em Java todos os dias. Eu ficaria perdido sem os documentos ou o todo-poderoso preenchimento automático do IDE - especialmente quando se trata da API padrão Java, que é bem conhecida por sua verbosidade nos nomes de variáveis / classes / métodos.
No entanto, como você mesmo disse, não é algo que geralmente é encontrado em documentos dos quais você não se lembrava. É a sintaxe para classes internas - esse é um recurso da própria linguagem não algo a ser memorizado nos documentos.
Por mais que eu ache que os alunos devam (em muitos casos) usar os documentos para APIs padrão, acho que qualquer pessoa que queira passar em um exame de programação deve conhecer a sintaxe da linguagem. E não me refiro a alguns casos extremos esquisitos que apenas os designers de linguagem conhecem, apenas os padrão - como o do seu exemplo.
fonte
No Eclipse, você pode escrever
obj.
e pressionar ctrl + space e ele tentará concluir automaticamente, fornecendo todas as opções de método para o objeto especificado. Se isso falhar, por algum motivo, a API Java tem o restante das respostas. Seria difícil pensar em um dia em que eu não pesquisasse no Google como fazer algo.A escola é uma história completamente diferente.
fonte
IMHO, a academia geralmente fede na produção de bons engenheiros de software. Somente pessoas que se divertem após as aulas têm a chance de conseguir algo em projetos do mundo real.
Por outro lado, a academia não é sobre a produção de desenvolvedores, o mundo inteiro é sobre como resolver problemas abstratos e fazer a pesquisa. Está muito longe da aplicação prática na maioria das vezes. E os pesquisadores não são necessariamente bons codificadores.
E aprender API de cor fede. Existe o preenchimento automático / google / msdn / javadocs para procurar todos os cantos e recantos, por que alguém iria querer manter tudo isso em seu cérebro o tempo todo? As funções mais comuns que você aprenderá em poucas semanas / meses, tudo o mais pode ser pesquisado em questão de segundos, se você souber a sintaxe, a estrutura e as idéias gerais.
Por outro lado, algumas pessoas ainda codificam em editores de texto e lembram os nomes das funções de cor, o que não é necessariamente errado, mas se eles são fanáticos por isso, você tem seu professor.
Além disso, mesmo que você saiba nomes e parâmetros de funções de cor, ainda é uma boa ideia verificá-los no documento da API mais recente. O strtok estava bem no cenário de thread único há 10 anos, não está bom hoje em dia. Se você acabou de aprender os nomes e parâmetros, nunca saberá que a funcionalidade pode ser descontinuada ou que alternativas melhores podem ser inventadas.
Os idiomas mudam, então você precisa mudar com eles, lembrando que uma maneira verdadeira não é boa para isso.
fonte
se você começar a trabalhar em algum projeto por um período não muito curto, usando uma API mais cedo ou mais tarde, aprenderá muito bem essa API. Eu acredito que esta é uma habilidade totalmente desnecessária, pois eu não conheço ninguém que nunca dê uma olhada em qualquer documentação (msdn, páginas de manual, etc ...)
no entanto, as universidades são um universo completamente diferente; portanto, não se surpreenda se você falhar, porque não sabe o nome typedef do 10. ° parâmetro de CreateWindowEx, por exemplo.
fonte
Eu diria que não, não é necessário, é fisicamente impossível para o cérebro humano memorizar tanta informação, mas você ainda precisa saber o básico ou as coisas mais usadas, já que não existem muitas para memorizar . Caso contrário, é impossível memorizar tudo o que existe no java.
Também é injusto que um professor queira que seus alunos saibam tudo, ou use isso para saber se eles programam com um idioma, além dos exercícios ou projetos que ele atribui a você. Para mim, é como querer saber o que você faz quando não está na escola ou fazendo trabalhos relacionados.
EDIT: Obviamente, o que o professor pede a você depende dele, alguns professores valorizam mais a teoria, enquanto outros valorizam a prática e não se importam se você não entende tudo.
fonte