Ayuda programación - Buscando la base.

syst3m-

Buenas,

Después de un largo periodo de tiempo cacharreando con lenguajes de programación me topo siempre con el mismo muro. Construyo unos pilares pero no encuentro la base y creo que es lo mas fundamental en el mundillo.

Esta genial aprender la sintaxis, saber buscar en la documentación y moverte en ella, consultar dudas en paginas del sector, detectar y solucionar los errores y hacer tu perrycalculadora... pero lo que busco es la lógica, la estructura de un programa, saber lo que necesito y sobre todo el porque lo necesito para solucionar X necesidad.

Espero se entienda lo que busco, quizás alguno sepa de algún libro que pueda solucionar mis dudas.

Un saludo.

RaDiuM

Mi respuesta no te va a ayudar, pero bueno.

Te gusta la programación? Porque no es algo para todo el mundo. Yo creía que me gustaba y lo intenté varias veces. De hecho todavía a veces me pongo a empezar algún curso de cualquier lenguaje, y me pasa lo que a ti pero a menor nivel.

Entiendo lo que escribo. Veo lógica. Hago tests simples y sale todo a la primera, pero en cuanto tengo que analizar cómo crear algo... kaput. No funciono y no valgo, no soy capaz de imaginar que lo que quiero hacer necesita, digamos, 5 módulos. Siempre hay algo que me dejo o no le veo sentido, aunque sea obvio.

Seguro que alguien te puede dar algún consejo mejor, pero decir que te entiendo y es muy frustrante xD. Al final decidí que programar me llama, pero no puedo decir que realmente me guste. Y desde luego no era lo que yo esperaba.

Suerte y a ver si alguien te da la luz que a mi no me ha venido nunca xD

2 2 respuestas
Kike_Knoxvil

Espero que te sirva como lo planteo yo

Básicamente cojo el problema a resolver y lo desgrano en otros más pequeños, y estos a su vez los vuelvo a desgranar en otros más pequeños y así hasta que quedan un montón de problemas muy simples y ordenados. Luego es ir mirando uno por uno como se puede solucionar utilizando la mínima cantidad de letras posible con los conocimientos que se tienen y la ayuda de internet y libros mientras revisas que el programa para cada pequeño problema funcione

No soy un programador profesional ni llevo mucha práctica encima pero cuando me introdujeron al mundo de la programación en la carrera fue la forma que empecé a plantearlo y hasta ahora me ha ido bastante bien

1 1 respuesta
syst3m-

#2 Yo lo veo como hacer un pastel, conozco los ingredientes y las cantidades pero desconozco donde cocinarlo y a que temperatura con lo cual me sale un churro y no puedo hacer pasteles de mas sabores.

Creo que el método de seguir un curso es un truño, es el que sigo pero una vez acabados no eres autosuficiente, para seguir aprendiendo solo te queda copiar copiar y copiar las ideas de otros para avanzar en el camino y te pierdes todos los errores que surgen en el mismo.

#3 Esa es la idea, el "libro" que busco, pero mas extenso claro :) Gracias.

HeXaN
  1. https://htdp.org/2018-01-06/Book/
  2. https://mitpress.mit.edu/sicp/
  3. https://mitpress.mit.edu/books/introduction-algorithms
  4. https://www.amazon.es/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
  5. https://www.amazon.es/Object-Oriented-Design-Heuristics-paperback-ArthurRiel/dp/0321774965
  6. https://www.amazon.es/Design-patterns-object-oriented-professional-computing/dp/0201633612

De aquí a un año me cuentas.

6 2 respuestas
PiPePiTo

#1 el señor Hexan te ha dejado una lista muy maja en #5 mientras yo escribía mi post, pero aún así te pondré lo que yo creo que necesitas basado en mi experiencia.

#1syst3m-:

pero lo que busco es la lógica, la estructura de un programa, saber lo que necesito y sobre todo el porque lo necesito para solucionar X necesidad.

Hola yo de hace 6 años xD

Te diría que te miraras patrones de diseño y de arquitectura y te buscaras ejemplos de implementación.

Más o menos te lo exponen aquí con diferentes patrones, luego ya tendrás que buscar el ejemplo o la implementación específica para el lenguaje que estés aprendiendo, tampoco te frustres mucho con esto, cada lenguaje aplica más o menos y ahí ya entra el problema también de identificar si el lenguaje que estás usando es el correcto para resolver el problema.

Cada patrón se aplica para unas cosas u otras, sigues la arquitectura y el proceso y vas p'alante, al menos es lo que yo entiendo que te falta, que es lo que me pasaba a mi cuando empecé a programar a nivel profesional.

Yo sabía picar el código, más o menos seguía la estructura ya establecida en las aplicaciones pero hasta que no empiezas a relacionar lo que ves con lo que es no te das cuenta de la falla y que además se hace como se hace porque es lo más eficiente o es lo más escalable o tienes más maneras de reutilizar y reimplementar, etc...

En mi opinión es el salto que tienes que dar una vez sabes hacer clases sencillas...intenta pensar en un problema que quieres resolver y con los diferentes patrones conforme los vayas conociendo vas aplicando.

1
eondev

La mejor analogía cuando estás empezando es que traslades el problema a una cuestión del mundo real donde juntas engranajes y mecanismos unos con otros, como un coche o una radio. Tu punto de partida es o bien la interfaz o bien la entrada de datos y de ahí qué esperas que haga o te devuelva. Así así vas poco a poco identificando todos los componentes que te van haciendo falta y te vas haciendo un diagrama en papel.

El resto, lo que dice el pato

1
B

#5 Has dejado una lista perfecta para aquellos que harán sobreingenieria al tuntún

1 respuesta
HeXaN

#8 Al menos los conocimientos los tendrá. Hasta dónde aplicarlos, dependiendo de diversos factores, es cosa suya.

Alien_crrpt

Tienes que empezar desde 0 para coger base. Una vez que lleves 6 meses programando tutoriales se te encenderá la bombilla y ya sabrás hacer programas. Ocurre lo mismo con los instrumentos de música. Puedes estar meses sin que sepas hacerlos sonar. Y a partir de 6 meses hacerlos sonar.

1
syst3m-

Gracias a todos por vuestras opiniones.

B

Así es como estoy yo ahora, se hacer un montón de cosas diferentes, pero intento hacer algo en conjunto y dep.

Estoy en 1° de DAW, en 2° aprenderé se supone pero ahora mismo estoy pez en cualquier cosa que intente.

1 respuesta
syst3m-

#12 Ojala que los cursos de cualquier lenguaje no empezaran con un "Hola mundo" sino con lo que hay detrás de ese "Hola mundo". :blush:

2 respuestas
Kike_Knoxvil

#13 Eso en realidad va justo después: como trabaja el compilador y todo eso. El "Hola mundo" es solo para que veas lo sencillo que es hacer que el ordenador haga algo

1 respuesta
syst3m-

#14 Me refería a que hay detrás del hola mundo, osea que se esta ejecutando, de que librerías esta haciendo uso, que funciones, que para hacer un "print "Hola mundo" estas usando una función que ya esta programada que le da sentido al código.

Pero claro, si vas a un curso ramdon de internet y te dicen vas a programar tu primera aplicación, "Abre elipse y escribe: System.out.println("Hola mundo"); Wow! me devuelve Hola mundo, pero... que es System, out? print? Me estas enseñando un idioma, me dices que me aprenda "Dog" pero no me dices que significa perro. Pues luego se me monta un follón de conocimientos mezclados con desinformación que para que. Me dais mucha envidia los que manejáis los lenguajes de programación como si de vuestra 2º lengua se tratara, ojala os alcance algún día! :)

3 respuestas
B

#15 Yo estoy empezando en clase con ese tema. Mi recomendación es parecida a lo que te han dicho antes otros usuarios, se lo que cuesta de primeras, que yo también he empezado hace nada.

Coge el problema, divídelo en trozos lo mas pequeños posible, dibuja como se relacionan esos trozos entre sí y luego creas las clases (doy por hecho Java ya que comentas el Eclipse).

Por ejemplo, el ejercicio que estuve haciendo era leer un fichero con una serie de coordenadas y rellenar un tablero con las posiciones de los barcos (Hundir la Flota), que necesito:

  • Una clase Tablero, que almacena una matriz simulando el tablero real, para rellenar el tablero usa la clase :
  • FileReader, que me permita localizar un fichero y leer lo que contiene, me devuelve un ArrayList con las coordenadas leidas, como x e y de la matriz empieza en 0 a lo que sea y los datos del fichero son A1, B3, etc.. necesito una clase:
  • DataConverter, a la cual el primer carácter (A, B, C...) y me devuelve un entero que es la posición (A=0, B=1, C=2...) y el segundo carácter me lo devuelve restando 1 (porque las matrices y vectores empiezan en 0).

Te lo pongo de memoria, no son todas las clases que he usado, pero espero que te sirva un poco de ejemplo, si alguien cree que estoy equivocado que me corrija por supuesto, que tampoco me sirve a mi ir aconsejando cagadas por el foro xD

1 respuesta
Wei-Yu

Lo de descomponer en trozos pequeños quizás te suene alien ahora, pero es algo que poco a poco vas a ir interiorizando. Prueba a coger algo que ya esté hecho y sea simplón y te propones a escribir algo nuevo.

De todas formas creo que no has comentado en qué punto estás atascado exactamente. ¿Qué experiencia tienes? ¿Qué cosas has hecho? No te preocupes porque te parezca poco o mucho, es lo de menos; te puedes atascar en cualquier punto.

1 respuesta
djamb

#15 eso lo estudias en las carreras de informática desde tiempos inmemoriales. Te ayuda a entender un poco mejor que esta pasando pero no te creas que es brujería.
Una vez que tienes muy claros los conceptos básicos de programación orientada a objetos yo lo primero que haría es aprender a estructurar un proyecto. Según el lenguajes en el que estés programando estará de moda mvp mvvm mvc o lo que sea, y tendrás que aplicar ciertos patrones de diseño en el momento que correspondan. Aquí acaba el trabajo de un buen pica teclas.

syst3m-

#17 Si, esa mentalidad la tengo, no puedo escribir todo el código en la main, subdividir las tareas por lo menos te permite tener el código bien estructurado y los problemas a resolver separados.

#16 Si supiera en que punto estoy atascado, la solución la buscaría en google y no os daría por saco jajaja. Pero te pongo un ejemplo para que puedas ponerte en mi lugar, has realizado un curso y te has leído varios libros en JS, otro en React y ahora estas con React Native cacharreando. Todos maman del mismo lenguaje JS, pero se parecen entre poco o nada, bueno total que me pongo a crear mi "primera" aplicación para android, sencillita cuatro botones y cuatro funcionalidades, nada random todo pensado y estructurado para ver que tal se desenvuelve el lenguaje en este ámbito y yo claro :)

Solo y únicamente uso la documentación oficial para avanzar en el proyecto, después de generar el código para mis botones y sus funciones me viene el primer problema voy a añadirle un fondo de pantalla pero oye que sea una imagen para complicarlo un poco mas, voy a la documentación y encuentro esto:

spoiler

https://facebook.github.io/react-native/docs/imagebackground

Tirado, copiar pegar y cambiar 1 chorrada, queda tal que así.

spoiler

El código esta mal, porque falta un require en el source, ya claro empiezo a preguntarme donde me perdí ese capitulo, por que me tiro mas tiempo buscando soluciones que dándolas yo mismo, por que el 80% de mi código es un frankenstein de copy-paste de la documentación y es que la programación me hace sentir estúpido aunque me encanta jajaja.

Total que son fallos tan tontos que a veces no se si volver al inicio o seguir dándome golpes contra la pared y aprender a base de prueba-error.

Kike_Knoxvil

#15 Te repito, eso es lo que viene después del hola mundo. Justo después

eondev

#13 Aprende C, aprende cómo va el lenguaje, la gestión de recursos y la compilación. Cuando sepas cómo va el I/O y te pases a Java, entenderás un poco mejor como el print del System.out funciona por debajo.
Cuando con java veas lo que es la OO entenderás porqué System.out y no sólo print. Y cuando empieces a usar los bufers y los streams en Java entenderás que es sólo una abstracción, una función que te permite expulsar por la salida estándar utilizando las herramientas que ya has usado para escribir y leer de otras fuentes de datos.

Pero tienes que saber de todo un poco, preocuparte del sistema que utilizas como funciona.
Programar es como el artesano que hace jarrones, si sabe usar todas las herramientas, cómo funcionan y qué mezclas de barro se pueden hacer te hará unos jarrones de la ostia, sino, se dedicará a hacer jarrones de la misma forma una y otra vez y si se le rompen no sabrá nunca porqué.

Por eso a mí eso de empezar a aprender HTML y JS sin ni siquiera haber pasado por lo más básico me parece un error garrafal, porque lo que hagas será magia oscura para tí

1 2 respuestas
syst3m-

#21 Gracias por el consejo y la sugerencia de empezar por C, esta claro que contra mas bajo nivel sea el lenguaje mas entenderás la arquitectura de un programa, pero mi tiempo es limitado, he elegido JS porque es un lenguaje multiusos que aunque no destaque en nada fuera del desarrollo web me sirve para tocar diferentes palos.

Camp1

pues con JS poco vas a entender porque los fundamentos de la programación se los pasa por el forro... Yo coincido con #21 , aprender C te da una base sólida. Si aún así quieres excavar más pues puedes hacerte un compilador en tus ratos libres, o mirar algo de esamblador. Lo que no puedes es intentar absorver las bases de la programación en JS, es como si quieres aprender a cocinar calentando pizzas en el horno.

isvidal

#1 , #2

Aqui os pongo el secreto para ser buenos programadores, mucho mejor que la lista de Hexan y en una sola imagen:

2 respuestas
RaDiuM

#24 Yo no lo niego, sólo dije que uno tiene una "idea" de lo que es programar (interfaces visuales en VB para trackear gente en CSI) y luego otra cosa es picar código, y hay que tener predisposición o entrenar mucho la mente. También hay gente que desglosa todo en su cabeza y le sale solo, mientras que otros tenemos que picar y picar o ver muchos ejemplos para llegar a un nivel mas bajo.

En mi caso lo intenté varias veces pero no lo niego, al no gustarme todo lo que yo pensaba, siempre acababa dejándolo o rindiéndome.

Ahora trabajo en frontend básico (tengo que tocar HTML a menudo) y bueno, si no lo hubiera intentado tampoco habría acabado con este curro xD.

1 respuesta
HeXaN

#24 Sin bases vas a practicar la misma basura una y otra vez. Estudiar previamente > all.

5 2 respuestas
isvidal

#25 Esta claro que hay diferentes niveles de talento, capacidad para ENTENDER antes y mas rápido.

Pero la practica hace al maestro, el 99% no llegara a ingeniero jefe de Google, pero llegar a ser buenos programadores "cualquiera" puede llegar con mas o menos esfuerzo según su talento.

#26 Ñe, estudiar y programar a la vez o programar y luego estudiar el que has echo para entenderlo si. Estudiarte un libro de c como si fuera historia, si eres un genio pues vale, pero si no, te parecera todo chino.

1 respuesta
Ultrajex

#26 Exactamente, practicar esta bien, nadie duda eso. Pero sin haber estudiado una buena base de fundamentos de programación, de estudiar y razonar por qué las cosas se hacen de una manera, etc. no se consigue dar el salto de lo que burdamente diferenciare entre "picar codigo" y "hacer ingenieria".

Y eso mismo lo vi hace años en mi carrera. Personas que venian de hacer un modulo y sin nada que reprochar a ello oye, pero si a la actitud. Se comportaban como si ya supiesen hacer todo, y cuando llegaban los momentos de aprender cosas nuevas, de razonar, de diseñar y tomarte tu tiempo previo a hacer un problema, varios de ellos se quedaron estancados.

Al final la practica te da "agilidad" a la hora de hacer y desarrollar cosas y pequeños truquitos, pero de nuevo referenciando a hexan, la base tiene que estar lo mas asentada posible.

2 respuestas
syst3m-

#28 Queda claro que una persona que estudia una ingeniería tiene mucha mas preparación para programar, por múltiples razones, la base en matemáticas importante para la resolución de algoritmos, el lenguaje de medio nivel con los que suelen empezar (C, Cobol etc) y coño que tienen una estructura de aprendizaje diseñada para ello.

Pero ya me has contestado a la mayoría de mis dudas con este comentario.

Personas que venian de hacer un modulo y sin nada que reprochar a ello oye, pero si a la actitud. Se comportaban como si ya supiesen hacer todo, y cuando llegaban los momentos de aprender cosas nuevas, de razonar, de diseñar y tomarte tu tiempo previo a hacer un problema, varios de ellos se quedaron estancados.

No voy a abandonar JS para empezar con otro lenguaje pero si lo voy a compaginar con algunos libros de

1 respuesta
eondev

#27 Dafuq, solo tu has entendido estudiar con coger un libro de C y leerlo como si fuera literatura, nadie ha dicho eso y los libros de Hexan no se leen tirados en el sofá

#28 Todos los que ocnozco de FP van con esa actitud despreciando lo que se hace en la carrera y diciendo para qué si lo que se usa hoy en dia es Jjjjava, enl a carrera deberían enseñar como lo hacen en el fp :psyduck:

2 respuestas