Apenas pasé mi examen de programación Java hoy. Tuve que responder algunas preguntas generales sobre el enhebrado que hice bien y escribir un pequeño programa de subprocesos que era peor. Tuve que conectar mi computadora portátil a la pantalla del proyector y escribir el programa de inmediato. Mi primer intento fue usar clases anónimas pero olvidé la sintaxis exacta. Tal vez debido a un poco de emoción o tal vez porque las últimas dos semanas estuve codificando principalmente en php. Luego pregunté si está permitido usar la documentación de la API. La respuesta fue "NO". Así que decidí dar la vuelta e implementé Runnable. El programa estaba haciendo lo que se solicitó al final. Por supuesto, los examinadores notaron mi primer fracaso y eso afectó mucho mi puntaje. Me sorprendió que no se le permitiera usar la documentación de la API.
Entonces, mi pregunta es: ¿es realmente importante poder codificar sin problemas sin la documentación de la API? ¿Debo desarrollar esta habilidad? ¿Es realmente importante en el mundo real y en el entorno laboral? Mientras estaba en cursos de programación, me concentré en aprender patrones, desarrollar habilidades para escribir buenas aplicaciones de diseño, habilidades para usar API y encontrar la información necesaria rápidamente. No estaba tratando de aprender a programar sin la documentación de la API. ¿Es imprescindible durante las entrevistas de trabajo (codificación sin documentación API)?
fuente
Respuestas:
En Real Life ™, calificaría esta habilidad como "agradable de tener", pero no es obligatorio. Sin embargo, en un entorno universitario es diferente.
La capacidad de codificar sin documentación puede usarse como una indicación indirecta de la familiaridad del alumno con el tema. En cierto sentido, verte codificar algo sin tocar la documentación le dice al profesor que has practicado el uso de la API antes, haciendo tu tarea y otras tareas, o tal vez incluso programando por diversión por tu cuenta. Una persona inteligente con una comprensión superficial de la API en cuestión debería ser capaz dedescubra casi cualquier API de Java por sí sola mirando la documentación. Esto no es una coincidencia: a menudo se espera que los programadores aprendan en el trabajo, y la documentación de API para sistemas de programación populares, incluido Java, está estructurada para ayudar a los programadores a aprender rápidamente. La documentación a menudo proporciona ejemplos cortos e independientes, que ilustran el concepto de manera breve y concisa.
Esto funciona directamente en contra del objetivo del profesor de medir su conocimiento del tema (en lugar de medir qué tan inteligente es usted). Por lo tanto, no es irracional pedirle el código sin consultar la documentación.
NOTA: Edité esta respuesta en respuesta a una edición de la pregunta.
fuente
Hubo una vez un tipo que tenía un pequeño error en su código, por lo que lo llevó a StackOverflow y pidió ayuda. StackOverflow: Java (genera números sin repeticiones) . Miré su código y le señalé que su HashSet se estaba llenando perpetuamente de valores, pero nunca se borró. Entonces, él me preguntó: "¿cómo lo aclaras?" Tengo que admitir que no estoy particularmente orgulloso de la respuesta que di.
Necesitas absolutamente saber las cosas básicas que usas todos los días. Necesitas conocerlos a todos, y debes conocerlos bien. Pero solo lo básico.
Para todo lo demás, lo importante es saber que hay algo por ahí que hace lo que quieres. Precisamente qué clase necesita usar, exactamente a qué método debe llamar y exactamente qué parámetros debe pasar, es algo que no necesita para mantener ocupadas las preciosas neuronas de su cerebro. Para eso está la documentación, y por eso se inventaron IDEs con autocompletar. Y si el empujón llega a su fin, siempre hay StackOverflow y la mayor interacción existente.
Pedirle a los programadores que sepan las API de memoria es como pedirles a los abogados que sepan de memoria el código legal y todos los precedentes. No tiene sentido. Un ejercicio de futilidad.
fuente
No diría que es obligatorio pero es
habilidad muy deseable
imNSho.
Pasé los últimos meses codificando en estrecha colaboración con el tipo que conoce la API notablemente mejor que yo. Es mucho más productivo, simplemente porque puede omitir las verificaciones de documentación de API que me distraen .
Aquí estoy hablando de fluidez. Sobre ser no solo capaz de algo sino fluido.
¿Sabes lo que es ser fluido? Es cuando para alguien que te mira parece que codificas mientras escribes ...
... Eso es conocimiento fluido. Es cuando te toma un minuto hacer lo que le toma a un novato una hora. Vale la pena el esfuerzo, de verdad. Huele a victoria.
Si domina la fluidez en alguna API y memoriza adecuadamente cómo se siente, esta memoria lo guiará aún más en cómo ser más productivo trabajando con cualquier otra API.
fuente
No. Estaría muerto sin la capacidad de buscar en la documentación de la API. La única vez que no lo tengo es cuando intento depurar algo donde no puedo acceder a la documentación. Luego, "realizo ingeniería inversa" de las piezas de api y cut-n-paste según sea necesario.
Es importante tener una buena idea de qué trata la API y qué parte es mejor usar, pero conocer los nombres de los métodos, los nombres de las variables ... no es realmente necesario.
fuente
En el trabajo, nunca tuve una situación en la que no tuviera acceso a la documentación. Por otro lado, tener la comprensión lectora y la comprensión general para poder interpretar documentación mal escrita resulta útil todo el tiempo.
Eventualmente debería conocer los patrones y la estructura de sus API, pero saber exactamente dónde está todo no es particularmente útil.
En SFU Computing Science, los exámenes a libro cerrado constituyen entre el 70% y el 100% de nuestras calificaciones. La teoría es que los exámenes evalúan su comprensión del material del curso y su adaptabilidad. En realidad, todo lo que realmente prueba son sus nervios, su calidad / duración del sueño, su ingenio y sus técnicas de memorización de memoria, ninguna de las cuales es necesaria académicamente ni para un trabajo típico en la industria del software.
fuente
A todos menos a su última pregunta: el conocimiento enciclopédico de cualquier documentación API no es importante. Obviamente programará más rápido si conoce cada detalle de cada método de cada clase, pero esa no es una expectativa razonable.
A su última pregunta: se espera que conozca los detalles de algunas clases sin la documentación de la API. Si sabe antes de entrar a la entrevista que se le realizará una prueba, o si el trabajo está muy enfocado (es decir, estará haciendo hilos todo el día), entonces razonablemente podría esperar conocer las clases relacionadas en detalle.
Anexo: Debe aclarar bien antes de cualquier examen con su profesor / instructor exactamente qué materiales se proporcionarán y qué materiales puede traer usted mismo. Suponga que todo lo que no hayan acordado explícitamente no está permitido. He tenido cursos en los que solo podía aportar lo básico para escribir, donde podía traer los libros que deseaba y donde podía traer exactamente una hoja de doble cara con todo lo que quisiera. Los exámenes generalmente se estructuran en torno a qué materiales están permitidos.
fuente
API docs! = Sintaxis de idioma.
Puedo entender cuando alguien no sabe los nombres exactos de varias clases de Java y sus métodos. No los conozco y codifico en Java todos los días. Me perdería sin los documentos o el autocompletado IDE todopoderoso, especialmente cuando se trata de la API estándar de Java, que es bien conocida por su verbosidad en los nombres de variables / clases / métodos.
Sin embargo, como dijiste tú mismo, no es algo que generalmente se encuentra en documentos que no puedas recordar. Es la sintaxis para las clases internas: esta es una característica del lenguaje en sí misma, no algo para memorizar de los documentos.
Por mucho que piense que a los estudiantes se les debería permitir (en muchos casos) usar los documentos para API estándar, creo que cualquiera que quiera aprobar un examen de programación debe conocer la sintaxis del lenguaje. Y no me refiero a algunos casos extraños que solo los diseñadores de idiomas conocen, solo los estándar, como el de su ejemplo.
fuente
En Eclipse puede escribir
obj.
y presionar ctrl + espacio e intentará completarse automáticamente al darle todas las opciones de método para el objeto dado. Si eso me falla por alguna razón, la API de Java tiene el resto de las respuestas. Sería difícil pensar en un día en que no buscara en Google cómo hacer algo.Sin embargo, la escuela es una historia completamente diferente.
fuente
En mi humilde opinión, la academia generalmente apesta en producir buenos ingenieros de software. Solo las personas que codifican por diversión después de las lecciones tienen la oportunidad de lograr algo en proyectos del mundo real.
Por otra parte, la academia no se trata de producir desarrolladores, todo el mundo se trata de cómo resolver problemas abstractos y hacer la investigación. Está muy lejos de la aplicación práctica la mayor parte del tiempo. Y los investigadores no son necesariamente buenos programadores.
Y aprender API de memoria apesta. Hay autocompletar / google / msdn / javadocs para buscar todos los rincones, ¿por qué alguien querría tener todo eso en su cerebro en todo momento? Las funciones más comunes que aprenderá en pocas semanas / meses, todo lo demás se puede consultar en cuestión de segundos si conoce la sintaxis, la estructura y las ideas generales.
Por otra parte, algunas personas todavía codifican en los editores de texto y recuerdan los nombres de las funciones de memoria, eso no es necesariamente incorrecto, pero si son fanáticos al respecto, tienes a tu profesor.
Además, incluso si conoce los nombres y parámetros de funciones de memoria, es una buena idea verificarlos en el último documento de API. strtok estaba bien en un escenario de subproceso único hace 10 años, no está bien hoy en día. Si solo aprende los nombres y parámetros, nunca sabrá que la funcionalidad podría estar en desuso o inventarse mejores alternativas.
Los idiomas cambian, por lo que debe cambiar con ellos, recordar que una forma verdadera no es buena para eso.
fuente
si comienzas a trabajar en algún proyecto por un tiempo no corto usando una API, tarde o temprano aprenderás muy bien esa API. Creo que esta es una habilidad totalmente innecesaria ya que no conozco a nadie que nunca eche un vistazo a la documentación (msdn, páginas de manual, etc.)
sin embargo, las universidades son un universo completamente diferente, así que no se sorprenda si falla porque no conoce el nombre typedef del décimo parámetro de CreateWindowEx, por ejemplo.
fuente
Yo diría que no, no es necesario, es físicamente imposible para el cerebro humano memorizar tanta información, pero aún necesita saber los conceptos básicos o las cosas más utilizadas, ya que no hay muchos para memorizar. . De lo contrario, es imposible memorizar todo lo que hay en Java.
También es injusto que un maestro quiera que sus alumnos sepan todo, o que lo usen para saber si programan con un idioma, además de los ejercicios o proyectos que él le asigna. Para mí es como querer saber qué haces cuando no estás en la escuela o haces un trabajo relacionado.
EDITAR: Obviamente, lo que el maestro te pide depende de él, algunos maestros valoran más la teoría, mientras que otros valoran la práctica y no les importa si no entiendes todo.
fuente