É realmente uma habilidade necessária programar sem documentação da API? [fechadas]

22

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)?

bancer
fonte
2
Acho que ele está perguntando sobre documentação , especificamente referências à API.
3
@bancer - Você não pode usar classes java nativas não faz sentido. Parece que você não estava preparado para o exame.
Ramhound 12/01
27
No mundo real, você sempre terá acesso à documentação. Tenho uma memória terrível e tento me concentrar na lógica geral do meu aplicativo e evito encher minha mente com memorização inútil de coisas que podem ser facilmente pesquisadas. Infelizmente, o mundo acadêmico (e o mundo das certificações) é um pouco diferente e geralmente há uma ênfase na memorização inútil. Meus estudos de graduação eram principalmente em matemática e física, mas lembro de ter que memorizar muita fórmula, etc. Que perda de tempo.
precisa saber é o seguinte
11
@ Antonio2011a - Conhecer a API do idioma que você está usando NÃO é "memorização inútil". Quanto melhor você conhecer a API, melhor poderá programar, porque escolherá classes e métodos apropriados para sua solução. Você não pode escolhê-los se não souber que eles existem. Obviamente, ninguém conhece toda a API Java; é muito grande. Mas é sempre bom saber o máximo possível.
Dawood diz que restabelece Monica
9
@DavidWallace Talvez eu não estivesse clara. Claro que não estou dizendo que você não precisa estar familiarizado com a API !! Só que você não precisa memorizar os nomes exatos das classes, métodos, ordem dos parâmetros e outros detalhes entorpecentes! Tudo o que você realmente precisa saber é que ele existe e como é útil. Você pode procurar os detalhes durante a codificação. Como eu disse antes, minha memória é terrível e, honestamente, eu poderia ter usado uma aula uma hora atrás, e se você me desse um pedaço de papel em branco, não seria capaz de lembrar os detalhes exatos.
precisa saber é o seguinte

Respostas:

39

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.

dasblinkenlight
fonte
2
Pela minha leitura, os examinadores estavam analisando sua capacidade de memorizar a documentação da API. Ele sabia o que fazer, mas não se lembrava da sintaxe.
Paul
@ Paul, li as edições e mudei minha resposta. Eu pensei que o OP estava perguntando algo completamente diferente. Obrigado!
precisa saber é o seguinte
2
+1 para identificar o problema real aqui. Se fosse uma entrevista de emprego, o entrevistador estaria mais interessado em saber como resolver um problema, e você provavelmente poderá escrever sua melhor aproximação da sintaxe no quadro branco. Quando você passou os últimos três meses aprendendo material específico e está sendo testado nesse material específico, é razoável não ter uma política de "Internet aberta".
StriplingWarrior
@Paul: você está certo
bancer
21

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.

Mike Nakis
fonte
+1: é incrivelmente difícil aprender toda a API de uma grande biblioteca como a Java, simplesmente por causa de seu tamanho. Porém, é mais fácil saber quais recursos gerais são fornecidos pelos pacotes (por exemplo, o javax.imageio fornece manipulação avançada de imagens, não que eu já tenha usado) e algumas instalações principais devem ser aprendidas. Em particular, java.lang e java.util serão usados ​​em praticamente todos os programas Java de todos os tempos.
Donal Fellows
9

É realmente uma habilidade necessária programar sem documentação da API?

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 ...

  • ... Como se o código certo simplesmente fluísse dos seus dedos para a tela. Como se você não conferisse os documentos, tutoriais e manuais da API. Na verdade, você fazer check-los todos, mas isso é invisível porque está tudo na sua cabeça. Você tem todo o conhecimento necessário no seu cérebro - carregado, carregado e pronto para usar.

... 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.

mosquito
fonte
Não acho que a pergunta dele seja se você deve ou não conhecer a documentação, mas se deve ou não memorizar a documentação como se fosse para exames.
Rei Miyasaka 12/01
@ReiMiyasaka bem, se você pular o exame detalhado, poderá perceber o seguinte: "Então, 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? " . Eu me concentrei nessa parte da pergunta porque, como você vê, minha experiência recente me deixou bastante desconfortável com a ideia de que ela pode simplesmente sobrevoar com uma resposta elementar que não é necessária . Justo?
Gnat
2
+1 para cobrir o custo da mudança de contexto para os documentos de referência. Ter que olhar para cima a cada passo atrasa as coisas.
Wyatt Barnett
8

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.

Paulo
fonte
3

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.

Rei Miyasaka
fonte
2

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.

Matt
fonte
2

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.

Goran Jovic
fonte
2
Também não acho que vale a pena memorizar a sintaxe. Recursos, padrões e dicas, sim, mas sintaxe, não. Eu trabalho com muitas linguagens para que isso seja significativo e acho que isso está se tornando verdade para a maioria dos desenvolvedores também.
Rei Miyasaka 12/01
@ReiMiyasaka: Eu não acho que você deva memorizar especificações de idiomas inteiras, mas deve saber a sintaxe básica a qualquer momento. Você procura nos documentos como escrever um loop em qualquer um dos seus idiomas? Ou você apenas codifica?
Goran Jovic 12/01
Na verdade, eu trabalho com várias línguas, e muitas vezes esqueço a sintaxe exata, mesmo para coisas básicas! Por isso, sempre preciso me referir aos documentos.
Antonio2011a
@ Antonio2011a: Admito que faço isso sozinho, principalmente quando uso idiomas menos comuns. Mas para muitos estudantes, a linguagem aprendida é a primeira linguagem de programação de todos os tempos. Se um aluno nem aprendeu a sintaxe, não diz nada de bom sobre como ele / ela se preparou para o exame.
Goran Jovic 12/01
@Goran Na verdade, eu não necessariamente, por duas razões: 1. a compilação em segundo plano informa quando a sintaxe está errada, e 2. os loops são secundários (quase inexistentes) em idiomas como Haskell e ML. Os idiomas são mais diversos do que você imagina. Mesmo que eu passei a maior parte do tempo codificando em F # e apenas me lembro vagamente de Haskell, ainda consigo entender bem o código Haskell, lembrando-me de observar as diferenças semânticas. Por outro lado, concordo que aprender um primeiro idioma de dentro para fora é extremamente importante e, com demasiada frequência, é negligenciado.
Rei Miyasaka 12/01
2

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.

Stephanie
fonte
2

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.

Codificador
fonte
1

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.

Hayri Uğur Koltuk
fonte
Não é consistente com a minha experiência nas universidades. Na verdade, tentaram ficar obcecados com a teoria e careceram de atenção aos detalhes. Ou o nível caiu para o das escolas profissionais?
AProgrammer
não estou falando de uma universidade, e este é apenas um exemplo do que você pode ver em algum lugar do mundo em alguma universidade. como você sabe, eles não são todos iguais
Hayri Uğur Koltuk 13/01
2
As universidades sempre tiveram algum grau de memorização e regurgitação. Eu teria calculado se tivesse um livro CRC disponível em vez de ter que memorizar tabelas integrais.
Blrfl
1

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.

Coiote21
fonte