JavaRush /Blog Java /Random-ES /Empecemos desde el principio o '¡Hola, mundo Java!'
articles
Nivel 15

Empecemos desde el principio o '¡Hola, mundo Java!'

Publicado en el grupo Random-ES
Quiero comenzar este artículo con una digresión inusual, a primera vista. Más adelante quedará claro por qué exactamente.
Empecemos desde el principio o ¡Hola, mundo Java!  - 1
Entonces, imaginemos a Alguien. Alguien quiere dominar el esquí alpino. Y para ello da los siguientes pasos:
  • Instructores, libros de texto, manuales, etc. - Todo esto es del maligno. Puedes aprender a esquiar por tu cuenta. Además, en la escuela aprendió bastante bien a esquiar de fondo. En consecuencia, se ignoran todos los consejos de personas con más conocimientos.

  • Se elige el mejor equipo. No por debajo del nivel experto. Botas duras que te lastiman los pies. Esquís duros que requieren un esfuerzo fantástico para doblarse, superando con creces el nivel de condición física de alguien. Bueno, etc

  • La pista de pruebas es... bueno, digamos, la pista que alberga la etapa de slalom gigante de la Copa del Mundo. Esto es perfecto para estudiar.
  • Continúe con el mismo espíritu.
Entonces aquí está la pregunta. ¿Cómo llamarás a este Alguien? Personalmente, como persona que conoce el esquí alpino desde hace unos 20 años, lo llamaré (¡y esto todavía es muy leve!) - desesperado. Es completamente imposible aprender algo con este enfoque. Pero es una manera segura de salir lastimado. Y lo MÁS seguro es abandonar la idea de esquiar para siempre. Creo que estará de acuerdo conmigo en esta valoración. En cualquier caso, estoy casi seguro de que este Alguien no esperará que le dirijan nada desagradable. Ahora imaginemos a otro Alguien. Déjelo, digamos, ser un estudiante de informática. Tiene algunos conocimientos de C++, C#, Pascal. Quiere aprender Java. Sus acciones:
  • Se deja de lado la literatura correspondiente a su nivel de conocimientos (nivel cero, francamente hablando). Basado en una ligera familiaridad con las teorías mencionadas de C++, C# y POO.
  • Se toma el entorno de programación más potente. Digamos Eclipse o NetBeans. El que hace todo por sí solo, solo presiona un botón.
  • Como aplicación de prueba, seleccionamos... bueno, digamos chat. Una aplicación cliente-servidor, la parte del cliente en forma de subprograma, la parte del servidor: un servicio web o, en el peor de los casos, servlets. Justo para estudiar.
Pregunta. ¿Cómo llamarás a este Alguien? ¿Sabes cuál es la paradoja? El hecho es que en este caso habrá muchas menos evaluaciones imparciales. A pesar de que las situaciones son idénticas en todos los aspectos. A menos que las consecuencias para la salud y la vida en el segundo caso sean menos fatales. ¿Quizá este es el problema? Las situaciones son realmente muy similares. Los describí específicamente en el mismo estilo. Y algo extraño: si lo absurdo del primero es obvio, el segundo escenario es seguido por un número alarmante de desarrolladores novatos. Dominar Java comienza escribiendo MIDlets, clientes para bases de datos, chats, creando sitios web basados ​​en servlets... Puedes seguir por mucho tiempo. Pero el punto es, no obstante, obvio. Al mismo tiempo, la literatura básica se deja de lado con desdén. ¿Lee esto? ¿A mi? Sí, ¡he estado escribiendo en C++ durante tres años! (Las opciones están en Pascal e incluso en Visual Basic). ¡Y sé programación orientada a objetos! Bueno, en general. Entonces, ¿qué sigue? Y luego esto:
  • ¿Cómo convertir una matriz de 8 bytes a larga?
  • Por qué pasó esto NoClassDefFoundError?
  • ¿Por qué inicio la aplicación en Eclipse ( NetBeans/IDEA/JBuilder) y todo está bien, pero sin ella escribo java HelloWorld.classy aparece un error?
  • ¿Por qué falla ClassNotFoundException?
  • ¿Por qué no hay una biblioteca? Ya lo puse en clases.zip, ¡pero fue en vano!
  • ¿Por qué creo una matriz de objetos, pero cuando intento usar un elemento de la matriz obtengo NullPointerException?
  • Y por qué ...?
  • Y por qué ...?
  • Y por qué ...?
¿Por qué por qué por qué? Pero porque Java no es C++ o Pascal. Y no Perl. El conocimiento de estos idiomas no solo a menudo no ayuda, sino que también dificulta. Aunque sólo sea porque estos idiomas tienen ideologías completamente diferentes. Pero el parecido exterior es engañoso. Por supuesto, todos estos “por qué” y “cómo” tienen respuestas en los libros. En literatura del nivel más básico. Pero leerlo da pereza (opciones: vergüenza, falta de tiempo, etc.). Conozco muchos estereotipos que fueron transferidos a Java por buenos especialistas en C++. Un ejemplo reciente: nunca debes lanzar una excepción en un constructor. ¿Por qué? Sí, porque en C++ el estado de dicho objeto no está definido. En consecuencia, se produce una pérdida de memoria. En Java, en principio, no existe tal problema, debido a la presencia de un recolector de basura. Sin embargo, hay personas que intentan evitar este tipo de situaciones. Simplemente según un estereotipo arraigado. Y lo peor es que como resultado de estos esfuerzos, el código se vuelve mucho más complicado. La sintaxis es fácil de aprender. Y completamente insuficiente. La ideología del lenguaje es mucho más importante. Y para dominarlo de la forma más eficaz, debes empezar desde el principio. ¿Por qué exactamente y cómo? Y esta es otra pregunta. Entonces. Dónde y cómo empezar. Depende de lo que quieras lograr. Si quieres convertirte en un experto en codificación, puedes empezar con casi cualquier cosa. Si quieres convertirte en un profesional, las cosas son un poco más complicadas. Mi experiencia me da motivos para decir lo siguiente. La diferencia entre un desarrollador profesional y un "codificador" es que él entiende lo que está pasando. Hace poco más que presionar botones. Un entorno potente es de muy buena ayuda. Para aquellos que pueden prescindir de él. Pero a menudo es la única herramienta de quienes comenzaron con ella. Y en su ausencia, el valor del mono codificador es cero. Porque no hay botones que presionar. En general, presionar un botón puede adoptar formas verdaderamente monstruosas. Uno de mis colegas vio un producto escrito en Java. Las instrucciones para instalarlo comenzaban con las palabras: "Instalar JBuilder desde el disco..." Ahora ESTO ya es fatal. Si los desarrolladores no pudieron hacer que el producto funcionara sin un entorno de desarrollo, me estremezco al pensar cómo fue escrito. Como mínimo, fue escrito por aficionados. ¿Qué quiero decir con "entiende lo que está pasando"? Esto significa que una persona debe comprender lo siguiente:
  • ¿Qué es una máquina virtual y por qué es necesaria?
  • Qué es una clase desde el punto de vista de una máquina virtual.
  • ¿Qué es un paquete?
  • ¿Qué es una biblioteca?
  • Cómo la máquina virtual busca y carga clases; ¿Qué es un cargador de clases y cómo funciona? cuántos hay por defecto; ¿Qué es el camino de clases?
Etc. etcétera. La lista continua. Tenga en cuenta que no incluí conocimientos específicos del propio desarrollador. Qué es un hilo, qué es una clase desde el punto de vista de la programación orientada a objetos y en qué se diferencia de un objeto, cómo funcionan los administradores de diseño: CUALQUIER desarrollador debería saber todo esto. Todo lo que he enumerado es más un tecnicismo. Pero muy a menudo resulta que conocerlos es vital para comprender qué está funcionando mal. Un ejemplo de la vida. Existe una biblioteca para trabajar con XML llamada xalan. Contiene varios paquetes javax.xml...: analizadores, transformadores, etc. Esta biblioteca es muy popular. El problema es que estos mismos paquetes han estado presentes en J2SDK desde la versión 1.4. Pregunta. ¿Qué clase se cargará al acceder a la clase javax.xml.transform.stream.StreamSource desde la biblioteca, si xalan también está presente en el classpath - biblioteca o desde J2SDK? Para responder a esta pregunta, necesita saber cómo funciona el cargador de clases. Una vez vi una discusión de cuatro días en uno de los foros que finalmente se centró en este tema. El código no funcionó correctamente precisamente porque el cargador no tomó la clase que se esperaba de él. ¿A qué me refiero? Aquí está la cuestión: cuanto más potente es el entorno de desarrollo, más aporta al desarrollador y menos tiene que pensar. Y esto ya es ay, que mal. Tan cerca del mono. Esto lleva a la primera conclusión, por paradójico que parezca:

Conclusión 1. Es recomendable empezar a aprender Java SIN un entorno potente.

No recomiendo escribir en editores de nivel de bloc de notas. Pero no hago esto por la única razón: por regla general, no tienen resaltado de sintaxis. Esto es algo increíblemente conveniente que no tiene ningún efecto negativo. Puedes usar algo como Notepad++ , entiende la sintaxis de Java y, por cierto, es gratuito. Por ejemplo, tengo el tipo de archivo .java registrado en el sistema específicamente para ello. Entonces, un editor de texto con resaltado de sintaxis y una línea de comando. Dos o tres días de tormento, y comprender qué es un classpath, cómo se inicia el intérprete y muchas otras pequeñas cosas, comprender esto permanecerá para siempre. Más. Mi experiencia me da motivos para decir que es imposible adquirir conocimientos para utilizarlos en el futuro. En el sentido de que vale la pena leer literatura sólo cuando hay preguntas a las que responderá. Si lees un libro sin tener preguntas al respecto, la información desaparecerá en una semana. Lo sé muy bien, incluso por experiencia propia. Una vez comencé a leer un libro sobre servlets cinco veces. Hasta que comencé a tratar con ellos en mi trabajo, la información no fue absorbida. Y éste no es ni mucho menos un caso aislado. Érase una vez, hace mucho tiempo, hace unos 8-10 años, leí lo siguiente, lamentablemente no recuerdo al autor: ¿Cómo enseñarle a una persona un nuevo lenguaje de programación? Muy simple. Necesitas darle un idioma, varias tareas y un mínimo de documentación. Luego, después de un par de meses, cuando empiece a escribir al menos en este idioma, proporcione documentación completa. Se leerá en dos semanas como una novela policíaca, después de lo cual la persona estará lista para trabajar. Estoy de acuerdo con esta afirmación al 100%. En dos meses, por un lado, todos los problemas menores desaparecerán. Las respuestas a ellas las obtendrá usted mismo, lo que aumentará considerablemente su valor. Por otro lado, ya se formarán preguntas claras, cuyas respuestas proporcionará la documentación. Esto lleva a la segunda conclusión, que no parece menos paradójica que la primera:

Conclusión 2. Es recomendable empezar a aprender Java SIN libros de texto. Documentación de la API de Java + tutorial de Java: esto es más que suficiente.

La documentación de la API de Java es imprescindible. Recomiendo encarecidamente guardarlo localmente, en disco. Tendrás que contactarla más de una vez, ni dos, ni siquiera diez. Personalmente no pasa un día sin que vaya allí. También recomiendo mantener el tutorial de Java localmente. Esta es información básica que reemplaza por completo a un libro de texto. Sin embargo, hay una buena cantidad allí. Debo decir que en áreas que no me ocupo en el trabajo, todavía encuentro algo nuevo para mí. Leer mucho es malo. Mientras no haya petición, no hay respuesta. Leer un poco también es malo. ¿Dónde está la media dorada? Sigo esta regla: leo hasta que me parece que he recibido la respuesta a la pregunta. En el 90% de los casos esto no es así. Pero es en este momento cuando lo mejor es parar y continuar por tu cuenta. Se ha recibido el impulso inicial y resolver el problema por nuestra cuenta dará mucho más. Por supuesto, después de un tiempo vale la pena dedicarse a la literatura. Pero nuevamente, para la literatura básica. Aunque parezca que todo esto es una tontería, vale la pena leer los capítulos iniciales. Casi puedo garantizar que aprenderás al menos algo nuevo. Y este algo puede resultar más tarde extremadamente importante. DE ACUERDO. Parece que hemos descubierto sobre qué escribir. Cómo escribir, también. ¿Pero qué debo escribir? Recuerde dónde comenzó este artículo. ¿Debería empezar por escribir un sistema de mensajería instantánea? La elección es, por supuesto, tuya. Me parece que no merece la pena. Cuanto más compleja sea la tarea, más preguntas surgirán. En ausencia de experiencia, tal cantidad de preguntas darán un sentimiento de imposibilidad de resolverlas, seguido de un sentimiento de propia inferioridad, estupidez, etc. En última instancia, esto puede llevar a la decisión de “al diablo con esto…” y a dejar de aprender el idioma. Aquellos. exactamente el efecto contrario al que se necesitaba. Esto es característico no tanto de Java como del proceso de aprendizaje en sí. Pero por alguna razón se olvidan de esto cuando se trata de enseñar programación. Mientras tanto, una pequeña tarea completada hasta el final puede brindar una satisfacción mucho mayor y un conocimiento mucho mayor que un sistema grandioso abandonado al comienzo del viaje. De ahí la tercera conclusión: Conclusión 3. Es recomendable empezar a aprender Java con tareas que sean adecuadas a tu nivel actual de conocimientos de Java. No deberías empezar a aprender a conducir un coche de Fórmula 1. No deberías empezar a aprender esquí alpino en la pista de la Copa del Mundo. Y de la misma manera, no deberías empezar a dominar Java escribiendo algo enorme. Entiendo que la ambición es exigente. Pero en este caso son infundadas. Y cuantas más ambiciones irrazonables tengas, menos posibilidades tendrás de convertirte en un profesional. Un fenómeno notable en términos de aprendizaje son, curiosamente, los diversos foros. Si los usas sabiamente. Sabiamente, esto significa que debe hacer lo contrario, no como de costumbre. Es decir, no hacer preguntas, sino responderlas. Cualquiera que tengas la fuerza para alcanzar. Si crees que yo mismo lo sé todo, estás muy equivocado. Sí, sé mucho. Pero hay áreas que nunca he encontrado. O tengo, pero muy poco. Un ejemplo clásico de mi práctica es el trabajo con certificados: firma de código, conexiones seguras, etc. En 1998, mientras escribía mi tesis, hice esto, pero desde entonces todo ha cambiado mucho. A lo largo de los años, se me han ido acumulando preguntas. Incluso comencé a leer algo de literatura. Pero, como dije anteriormente, no se pueden obtener conocimientos para usarlos en el futuro. Es como una palanca: entra por un oído y sale por el otro. No hay ningún resultado excepto un agujero en la cabeza. Y esto continuó hasta hace poco, cuando en el foro se hizo una pregunta sobre una conexión SSL con Tomcat. Hubo algunos problemas. Y sólo esta pregunta me empujó a profundizar. Y si hay una petición, también hay una respuesta. No sólo descubrí cuál era el problema de la persona, sino que también encontré mucha otra información útil. Finalmente entendí cómo funcionan los certificados. El artículo correspondiente está en los planos. Y esto sucede todo el tiempo. Trabajé bastante, por ejemplo, con la GUI. Fue sólo como resultado de la pregunta de alguien en el foro que entendí algunas de las capacidades de TextLayout. Antes de esta pregunta no tenía idea de ellos. De la misma manera, recientemente descubrí que resulta que JButton también interpreta html como su propio encabezado. Antes de esto, pensaba que sólo JLabel podía hacer esto. Y esto es nuevamente gracias al foro. Resulta que cuanto más respondemos preguntas, más aprendemos nosotros mismos. Por eso no estoy de acuerdo con la opinión popular de que si una persona se sienta en un foro, no hace nada. Esto no está nada claro y depende principalmente de por qué exactamente la persona está en el foro. ¿Y qué hace principalmente? Preguntar o responder. De hecho, incluso puedes preguntar. Pero también con sabiduría. No pidas una solución (y especialmente con la posdata "¡Por favor, los que saben, respondan y no hagan preguntas!", ¡que encontré el otro día!), sino nuevamente, por el contrario, pida que se establezca la solución. dirección de movimiento. Es completamente comprensible que a un principiante le resulte difícil entender dónde cavar, porque simplemente le falta experiencia. Esto no es culpa de la persona y ni siquiera es un problema. Esto esta bien. Todo el mundo ha pasado por esto. Yo incluido. Para mí, personalmente, es mucho más importante que una persona quiera aprender algo. Y no solo obtener una respuesta, sólo para olvidarlo cinco minutos después de realizar un laboratorio de programación. Siempre te diré la dirección del movimiento. Si lo conozco yo mismo. Y si no lo sé, al menos puedo adivinarlo. Y ciertamente también buscaré la respuesta. Pero probablemente nunca doy respuestas directas, al menos no lo recuerdo. Por cierto, fue por esto que dejé uno de los foros. Cuando comencé a hacer preguntas capciosas, me explicaron al unísono que es costumbre que respondan simplemente. Y con mis preguntas puedo ir más allá. Teniendo en cuenta que el nivel del foro dejaba mucho que desear, ¡sobre todo gracias a este enfoque! – Decidí no perder más tiempo. Así que elige un foro de tu agrado y listo. Por cierto, este sitio apareció precisamente gracias a uno de los foros. Después de hablar allí durante algún tiempo, acumulé una lista de los temas más frecuentes y me di cuenta de que un sitio así tendría mucha demanda. Y así sucedió. Casi todos los artículos se escriben a raíz de algunas discusiones en el foro. O siguiendo la correspondencia que también mantengo habitualmente. Cual es el resultado? Trabaja, trabaja y vuelve a trabajar. Cuanto más te permitas hacer por ti mismo en la etapa inicial, menos conocimientos obtendrás. Y cuanto más largo sea el camino hacia la profesionalidad. Pero sólo tú puedes elegir quién quieres ser: un mono que aprieta botones sin pensar o un profesional. Y solo tú mismo eliges el camino por el que podrás lograr esto o aquello. La primera forma es clara. Intenté mostrar el segundo. ¡Su movimiento, caballeros! Enlace a la fuente original: Empecemos desde el principio o '¡Hola, mundo Java!'
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION