El siguiente paso en Java

Perurena

Hola!

He empezado a programar en Java este año y la verdad es que no me disgusta para nada, pero ahora que he terminado clases no lo quiero dejar apartado, por lo que mi duda es por donde debería seguir. Sé que lo que pido es un poco complejo o raro o no sé, pero agradecería cualquier ayuda o recomendación.

Lo que he dado hasta ahora ha sido, LinkedList y creacion de una lista dinámica, Array, Objetos, Recursivdad, Herencia, poliformismo, BST y ficheros (FileInputStream y ObjectInputStream).

Muchas gracias a todos y agradecería cualquier ayuda!

Khanser

Genial, eres lvl 1, sigue entrenando :)

Empápate bien de la api Collections (Sets, maps, stacks, vectors, queues y lists).
Empáte bien de la api JDBC para poder entender la millonada de frameworks que van encima.
Aseguráte que por saber Herencia y polimorfismo no te creas que eres el MASTAH de la programación orientada a objetos (en este punto es la práctica lo que más te ayudará, y asegurarte que no te has dejado ninguna laguna por aprender de POO)
Mira que los streams no sólo sirven para leer ficheros ;)
Investiga los readers, que no solo existen los streams.
Sobre todo, usa recursividad lo más minimo, si puedes convertir un algoritmo recursivo en uno iterativo muchísimo mejor.
Y... no se me ocurre nada más así básico XD

PD: Supongo que cuando sepas todo esto ya te puedes meter con Sockets y con Java Enterprise Edition

2 3 respuestas
Perurena

#2 Voy a mirar lo que me has dicho que no entiendo más de la mitad xDD

Y tranquilo que siempre tiro pal iterativo xD

Muchísimas gracias!

Tu_Dios

Según te estas tomando la forma de aprender Java, te recomiendo esta web: http://www.blackbeltfactory.com/

En ella te irán examinando por niveles (lo que te vendrá bien para empezar por lo más básico y luego ir complicándolo) y mejoraras el nivel de tu cinturón, como en las artes marciales. La jodía web engancha y lo mejor de todo es que vas a aprender.

Un saludo y suerte :P

1
B

Te recomiendo mas o menos lo que te han dicho mas arriba; tema de JDBC y conexiones a bases de datos en general porque es algo que se usa bastante.
Personalmente, y enfocado más a un tema laboral, podías mírate cosas de J2EE y aplicaciones web en Java.
Lo bueno de este lenguaje es que tienes muchísima documentación y ejemplos por internet.
¡¡ ánimo !! =)

eisenfaust

Empìeza tocando otros lenguajes o te convertirás en un mono.

1
paulvandyk

#2 "Sobre todo, usa recursividad lo más minimo, si puedes convertir un algoritmo recursivo en uno iterativo muchísimo mejor."

Por curiosidad, ¿Por qué?

2 respuestas
VipeR_CS

#7 Imagino que será porque la recursividad es un nido de crashes y bucles infinitos xD

0buS

Pero muchas veces es más eficaz que el iterativo..

1 1 respuesta
Khanser

#9 #7 La efectividad es la misma, lo que cambia es que por cada llamada nueva hay un overhead de memoria por la creación en la pila de los parámetros locales, y retorno de variables. Si en tu función recursiva tienes 10 atributos locales, se crean en memoria 10 variables por cada llamada recursiva, y eso es muy costoso en cuanto a memoria. Si lo conviertes a iterativo, esos 10 atributos locales son los mismos :)

El rendimiento también mejora un poco, porque no es lo mismo llamar a un método que comprobar una condición para terminar el bucle o volver al principio.

2 respuestas
paulvandyk

#10 No se me ocurre ponerte un ejemplo ahora, pero recuerdo algoritmos que pasarlos a iterativo, aparte de ser un coñazo, exigía llevar una pila (entre otras cosas) con la información, así que al final te quedas igual. Desde luego que si la recursión es sencilla y puedes pasarlo a iterativo sin hacer cosas raras, si que entiendo lo que dices.

Pregunto porque me parece interesante el tema y tengo poca experiencia práctica, tampoco quiero desviarlo.

eisenfaust

Al margen de que no todo tiene que ser optimización de máquina... Hay algoritmos que son muy difíciles de representar iterativamente, y terminan siendo un spaguetti de código infumable e inmantenible.

El problema se multiplica, además, cuando ya partimos de un lenguaje tan verborreico y limitado como es el caso, que ni está diseñado para ser recursivo, ni ofrece buen soporte para tail recursion.

1 respuesta
Josekron

Lo principal, como te ha dicho #2, es que no te quedes solo con los LinkedList y metele mano a toda la interfaz Collection, sobre todo los mapas que son muy útiles. Además, no te resignes a usar solo sus métodos y prueba a implementar alguna interfaz para saber como funciona internamente, pues a veces es necesario implementarlas.

También puedes mirarte la GUI para que tus programas no sean tan sosos, y eso te animará a seguir más.

Sobre la recursividad, yo soy de los que piensan que cuanto menos se utilice mejor (lo que no quiero decir que no se deba aprender) pues salvo determinados algoritmos donde se ve a simple vista que la recursividad es más efectiva, en todo lo demás solo consigues que tu código sea más "elegante" pero haces que el programa consuma más recursos.

0buS

#10 Backtracking. Consigue eso con iteraciones y con la misma efectividad, y después me comentas.

1 respuesta
Khanser

#14 Que parte de "si se puede" no entendiste? Acaso he escrito en algún sitio "hay que pasarlo a iterativo siempre"? No he dicho que siempre se pueda, simplemente comentaba que si puedes pasarlo a iterativo por los problemas de memoria que supone para recursividad muy profunda, pues mucho mejor. Nadie ha hablado de panaceas.

#14 BTW, en inteligencia artificial el backtracking es algo básico y adivina, los algoritmos usan bucles mayormente! Implementa un A* con recursividad. Sí, se verá mas bonico.. luego el overhead de memoria para problemas que empiezan a tener más de 2000 casos empieza a ser problemático.

LOc0

Sobre el off-topic, básicamente #12 (tail recursion = iterativo). Por otro lado, para los chorra-programas que se escriben al principio (y bastantes de los que se hacen luego) lo mismo da...

Y como reto a #1 o a quien se aburra, le propongo implementar una versión de:

sin usar recursividad (ni Google ;) )

Salu2 ;)

1 respuesta
GamA

Con reglas de inferencia, fuck yeah ! xD

1 respuesta
LOc0

#17 Puto CLIPS de los cojones xD (aunque cuando le pillas el truco puedes hacer cosas muy chulas).

Salu2 ;)

BLZKZ

#16 con sacar un algoritmo con recursión final (tail recursion como dices) lo pasas a iterativo easy. Tipico ejercicio de torres de hanoi de 1º xD

bLero

Yo me meteria con hilos (Threads), sockets, servlets y JDBC pero antes de profundizar demasiado tocaria antes lo básico en otros lenguajes.

Usuarios habituales

  • LOc0
  • Khanser
  • 0buS
  • eisenfaust
  • paulvandyk
  • Tu_Dios
  • Perurena