Como aprender java de forma eficiente

Maaarc

Buenas mediavideros, este verano me he propuesto aprender java por mi cuenta y como no se por donde empezar y como mucha gente buscara en google "Como aprender java" (Hola google), pues creo el hilo para que me guiéis un poco.

Os pongo en situación, yo ya se programar en C y en ASM, como podéis ver no he tocado nada de POO y por tanto sera la primera vez que lo hago así que buscando en internet me he descargado esto:

  • Thinking in java.

Solo me faltaría algun entorno para compilar en java y saber si algun camino es mejor, consejos, manuales que tengáis y sean útiles, etc..

El objetivo por ahora es aprender el lenguaje y más adelante pasar a mirar algo de android para poder hacer comunicación con el teléfono y un ordenador o PCB/maqueta.

sasher

El Thinking in Java leí un poco y la verdad es que está bastante bien; se hace un poco lento, pero porque el autor intenta explicarlo todo con detalle. Si ves que no te gusta el estilo, prueba con Head First Java, otro muy bueno y que se recomienda mucho. Cuando acabes (si es que te queda paciencia) y si quieres profundizar mas en buenas prácticas y demás, échale un vistazo a Effective Java.

Entornos para programar en Java hay muchos. Está la típica guerra de Eclipse vs. Netbeans de toda la vida y el IntelliJ IDEA (que sinceramente nunca he probado), entre otros. Yo siempre he usado Eclipse pero va por gustos; reconozco que para un principiante quizá Netbeans sea mas amigable sin embargo. Y si quieres échale un ojo al tercero que nombro, que también parece muy sencillito.

2 respuestas
Spacelord

#1 Si sabes C asumo que de programación estructurada no necesitas aprender nada y que lo único que te hace falta es saber las diferencias de sintaxis entre C y Java (declarar variables, estructuras de control, colecciones, etc). Para eso el Thinking in Java va bien, pero en general es un libro demasiado minucioso y muchas veces te explica más de lo que quieres saber.

Para aprender POO lo que te recomiendo es que primero te aprendas la teoría: qué es una clase, para qué sirve, qué es una instancia de esa clase, constructores, métodos, herencia, polimorfismo, interfaces, etc. Una vez tengas clara la teoría lo único que te queda es aplicarla a un lenguaje en concreto, en este caso Java. Pero podrás aplicarla también a cualquier lenguaje que implemente POO (cada uno lo hace a su manera), de ahí que te recomiende aprender primero y luego aplicar. Y una vez que tengas claro el tema de la POO ya te puedes lanzar a conectividad con BBDD mediante JDBC, interfaces gráficas, listeners, eventos y cosas más avanzadas.

Lo de aprender la teoría te lo recomiendo porque, si después te quieres pasar a Android, tendrás medio trabajo hecho, sólo necesitarás saber como se hacen las cosas en ese lenguaje en concreto.

En cuanto a IDEs, yo uso Netbeans porque es con el que aprendí y el que mejor conozco. Tiene sus limitaciones y sus problemas, pero en realidad todos los tienen. Prueba varios, como los que te comenta #2, y elige el que te resulte más cómodo.

elkaoD

Programando.

Tan simple como eso.

2
rNeX-

lol #1 , bastante parecido a lo que tengo en mente xd
ahora mismo desarollo en PhP+JQuery pero piden alguna aplicación en Android :ninjaedit:

lxn_

#2 NetBeans > y lo sabes

#7 WAT

1 respuesta
Nucklear

#6 IntelliJ >>>>> Eclipse > NetBeans

1 respuesta
Grise

IDE hay mil muy buenos, yo uso Netbeans pero está Eclipse o luego de pago el IntelliJ de JetBrains. La POO la pillas fácil y el olvidarte de los cursores te va a dar un descanso brutal.

#9 Sí, pero me acabo de levantar y estoy atontolinao.

1 respuesta
bLero

#8 cursores? la primera vez que veo que llaman así a los punteros, XDDD (si es que te refieres a eso).

#1

Si vienes de C, meterte un cambio de C a Java del tirón puede ser bastante grande. Si necesitas aprender Java rápido pues vale, pero si quieres aprenderlo bien, yo antes miraría un poco por encima C++, donde ya vas a tocar todos los conceptos de POO sin desviarte mucho de C, y después ya puedes meterte en Java más facilmente, sabiendo que tiene ciertas limitaciones (no hay punteros, no hay herencia múltiple, todas las instancias de un objeto reservan memoria dinámica, los objetos se pasan siempre por referencia, etc), pero que también facilita mucho la programación y tiene otras ventajas como ser multiplataforma.

La evolución histórica fué: ASM -> C -> C++ -> Java/C# y pienso que se deberían aprender estos lenguajes siguiendo con la evolución. Muchas veces no se puede hacer esto por falta de tiempo, y se suele acabar programando en Java sin saber realmente lo que pasa por debajo, o cómo se traduciría ese código a C o ASM. Pienso que para ser buen programador, sobretodo para la eficiencia de los programas, debería controlarse lo que pasa por debajo.

Yo te recomendaría leer:

1º - C++ Primer: bastante por encima, y centrarte básicamente en la parte de OOP.

2º - Thinking in Java: Como te dicen por ahí puede ser un poco denso en alguna parte, pero en líneas generales está muy bien el libro.

1 respuesta
Fastestwat

Tanto abusar de >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> y ni una explicación del porque.

BlueJ >>>>>>>>>>>>>>>>>>>>>>> all, ya que estamos...

1 1 respuesta
DaLmAu

Cierto yo no conocia IntelliJ alguna explicacion de porq tanto >> XD :yawn:

Maaarc

Gracias por los consejos, pero podríais aclarar lo que dice #10 de los motivos por los que preferís uno u otro.

En cuanto a meterme con C++, en teoría lo daré el año que viene en la universidad por lo que prefiero no pillar mis vicios.

1 respuesta
Spacelord

#12 Mi punto de vista sobre los IDEs (me baso en mi experiencia, las impresiones de otra gente pueden diferir):

Netbeans

Puntos a favor

  • Editor gráfico incorporado.
  • No dependes de plugins ni de terceros, viene el pack completo.
  • Puedes usarlo para Java, PHP, C++, Maven, Spark, FreeMarker, etc.

Puntos en contra

  • El editor gráfico tiene un problema MUY serio: los elementos se anclan unos a otros y mover un simple botón puede descuadrarte todo el lienzo. Se puede vivir con ello, pero sigue siendo una mierda.

Eclipse

Puntos a Favor

  • Tiene plugins para casi todo.
  • Mucho más personalizable que Eclipse.

Puntos en contra

  • Dependes del trabajo de terceros.
  • Cualquier plugin que uses está soportado por una persona/empresa distinta en lugar de estar todo el IDE soportado por la misma empresa.
2 respuestas
NandDarkness

#13 Estoy totalmente de acuerdo con lo que dices, he probado esos ide's, y otros de pago que ya ni recuerdo el nombre. Y eso va a gustos...
Yo personalmente prefiero en NetBeans que el Eclipse, me parece mas rapido y potente que este último, ya que el Eclipse solo es bueno cuando has configurado los plugins bien, y sabes como funcionan y que son estables con tus versiones.

HispanicO

Lo han mencionado por arriba.

Si no tienes ni idea de programar, el Head First (en general toda esa serie) es muy bueno. Yo empecé por éste, entendiendo bien cada punto. Me parece el libro perfecto para iniciarse.

Thinking in Java me pareció bueno pero muy denso y minucioso.

Y como siempre, no se aprende a programar en 2 días ni en 20. Es todo cuestión de tiempo, pelearse y dedicarle horas. Motivate con ejercicios que te gusten y pasa de los que te aburran, no quieras hacerlo como en las universidades. Plantéate problemas reales y desquíciate hasta resolverlo. Este consejo es para cualquier lenguaje.

El IDE para mí es lo de menos, yo para Java uso Eclipse, pero también usé hace tres años Netbeans. Escoge uno que te sientas cómodo. Ahora estoy tratando de usar íntegramente Emacs... pero no te lo recomiendo si empiezas. También te diría que es vital tratar de compilar a pelo, solo para aprender, sin la ayuda de un IDE. Que luego salen programadores que se piensan que no se puede generar bytecode sin un IDE.. :palm:

EDIT: #13 para mi es un sacrilegio tratar de hacer GUIs sin ser a pelo. No solo porque entiendo cómo funciona todo sino porque nada se me descuadra y controlo absolutamente todo. Eso sí, lleva mucho más tiempo. Además, creo recordar que el de NetBeans metía mucha morralla.

1 respuesta
Spacelord

#15 Sí, programar GUIs a código limpio es siempre mucho mejor. Y sí, Netbeans te autogenera código cuando añades elementos al panel, pero al menos tiene el buen sentido de blindarlo por defecto y no dejarte modificarlo. Para un proyecto pequeñito la diferencia es mínima y la mejora en comodidad se nota. Ahora, si lo que tienes que hacer es algo más gordo (y con reescalado, varias resoluciones, etc), sí, es mucho mejor a mano.

Y no estoy demasiado seguro de que tenga que aprender a compilar a pelo. Yo sé hacerlo, pero para meterte con el manifest, la línea de comandos, el javac y toda esa locura tienes que tener muy claras otras cosas (qué es un compilador, qué es un manifest, el árbol de dependencias, etc). No creo que tenga interés en aprenderlo ni que le vaya a hacer falta.

HispanicO

A mí me parece una cosa más del lenguaje, y por lo tanto, esencial. Pero, como dices, todo depende de lo profundo que quiera meterse en Java. Yo decidí aprenderlo justo antes de saltar a Swing/AWT y Threads.

Usuarios habituales

  • HispanicO
  • Spacelord
  • NandDarkness
  • Maaarc
  • Nucklear
  • lxn_
  • sasher