Muy buenos días,
Tras una serie de circunstancias que me han llevado a estar donde estoy ahora, me encuentro en una situación profesional un tanto peculiar.
Terminé la carrera de Ingeniería Informática hace un par de años. Durante la carrera estudié mil cosas diferentes, programación, matemáticas, física, ingeniería del software...
Salí de la carrera un tanto en pañales (como suele ocurrir), y estuve durante 6 meses de prácticas. En estos meses estuve más que nada terminando el proyecto de fin de carrera, trabajando con SQL, Linux y cosas así un poco más generales...
La "chicha" me vino los 6 meses siguientes. Me metieron de lleno en un departamento para desarrollar proyectos en Spring. No tenía ni idea de Java (yo había estudiado C/C++), ni Spring, ni siquiera Eclipse. Allí me enseñaron a depurar, lo que es un control de versiones, y básicamente el día a día real en proyectos informáticos.
La verdad es que lo pillé bastante pronto y acabé enamorado de toda esta tecnología.
Mi problema viene al cambiar de empresa, donde actualmente trabajo. Es un departamento pequeño, donde hay apenas 6 personas, de las cuales en desarrollo solo estamos 3. Hay bastantes movidas con estas dos personas, y aunque yo intento no meterme en peleas ni problemas, sí que me afecta lo que ellos hacen a nivel de trabajo.
Al llegar yo nuevo no puedo imponer mis ideas, pero sí que encuentro cosas que me parecen auténticas barbaridades a la hora de desarrollar:
- Se programa en Java EE y las conexiones con BBDD se hacen con JDBC, es decir, con SQL a pelo en el código. Cuando nos cambian las BBDD hay que cambiarlo TODO a mano, desde los campos de los Where en cada llamada del código, hasta cualquier cosa donde se haga referencia a este elemento. La gestión de las conexiones se hace con un properties y se abre una conexión por cada query, por lo que la potencia de JDBC que es la velocidad no se aprovecha (las llamadas tienen 10 veces más latencia que haciéndolo con Hibernate).
- No hay servidor de pruebas, ni BBDD de pruebas. Todo se hace en producción. Los datos con los que se hacen pruebas son datos reales, y al yo comentar que esto no estaba bien, me dijeron que pusiera una marquita a los datos que no valieran para borrarlos luego.
- No hay ni integración continua ni nada. Se compila un war y se sube a un servidor Tomcat.
- No hay NADA de documentación, y cuando digo nada es nada.
Para mí lo más cómodo sería callarme y seguir como hasta ahora. El trabajo es bastante tranquilo, los tiempos son amplios (muy amplios). No tengo que echar horas, ni hacer prácticamente nada, tan solo tirar con el desarrollo de forma tranquila.
A mi esto la verdad es que no me gusta nada. Me gusta hacer las cosas bien, y mi jefe ya es consciente de que lo que está saliendo del departamento es una mierda. El problema es que él no es desarrollador, además de que no tiene ni idea de cómo se tienen que llevar proyectos (ni necesita tenerla, no es su función).
Tras tener una reunión con él, hemos decidido que yo me voy a implicar mucho más. Tengo más o menos "el poder" de llevar todas las decisiones a partir de ahora, pero estoy verde, MUY verde. Sé todo el tema de la documentación, sé picar el código, sé muchas de las cosas que se deben hacer, pero me falta mucho, muchísimo para saber cómo llevar todo el tema de un proyecto informático.
Aquí no tengo a nadie a quien preguntarle, por lo que he decidido abrir este hilo para preguntara gente que tenga experiencia en el tema del desarrollo de proyectos informáticos. Como dato: No trabajo en una consultora, sino en un cliente final. Lo que se está desarrollando ahora es sobre todo APIs tipo REST, la parte front la lleva otra empresa.
Tal y como lo veo ahora, lo que tengo es:
- Eclipse + Spring (con todo lo que ello conlleva). La creación de entidades la automatizo con Telosys, utilizo Spring Boot, Spring Security, e Hibernate para conexión a BBDD. Utilizo el depurador de Eclipse (parece una tontería, pero antes aquí se depuraba con System.out).
- Control de versiones: Utilizo Tortoise porque es lo que utilizaba en la otra empresa. Antes de llegar yo, se pasaba el proyecto en un pen.
- Desarrollo del documento del proyecto: Esto lo vi en la carrera, tendría que desempolvar apuntes para ver cómo se debería desarrollar un documento formal de un proyecto. Aun así es echarle rato, creo que podría tenerlo (mejor o peor).
- La base de datos es DB2, y eso es inamovible. No me supone mucho problema porque ya me he pegado con ella y la controlo.
- Para las pruebas de conexiones a BBDD, ver los datos y eso, utilizo DBeaver.
- Para las pruebas a las llamadas REST utilizo Postman.
Esto es lo que más o menos tengo controlado, y que obviamente me podéis criticar. Sé que Git es mucho más profesional que Tortoise, pero al dominarlo menos todavía no me he decidido a integrarlo. Como este, mil cosas que me podéis decir si creéis que estoy equivocado.
Sé que no me corresponde ninguna de estas funciones, puesto que soy un Junior, pero la otra alternativa es dejar que la empresa se vaya a la mierda. Me gustaría echar horas en aprender, e intentar hacerlo todo lo mejor posible.
Las cosas donde me pierdo son:
- BBDD y servidor de preproducción: Por lo que entiendo, a lo primero habría que crear una copia idéntica de la BBDD de producción, y para el servidor pues tener el proyecto apuntando a una u otra depende de cual se suba. ¿Me equivoco?
- Integración continua: No entiendo muy bien a qué se refiere con esto. Sé que es la forma de subir los cambios, para no tener que estar apagando y encendiendo la máquina. ¿Hay alguna forma profesional de cómo se hace hoy día?
- Pruebas: Sé que se usa JUnit, pero al no haber estudiado Java en la carrera tengo algunas carencias (esta es una de ellas). ¿Se realizan con esto, o se hacen de otra forma?
- Control de calidad: Si no recuerdo mal, en la otra empresa usábamos Sonal, pero no sé si es obligatorio pasar este software para controlar la calidad de lo que generamos.
- Buenas prácticas: Antes de entrar aquí me dijeron mil buenas prácticas, como utilizar tipos primitivos, no escribir comentarios, etc... ¿Qué cosas consideráis de obligatorio cumplimento a la hora de programar?
Sé que son preguntar bastante genéricas, y que estoy dando la impresión de ser un incompetente, pero la situación en la empresa es (desde mi punto de vista) muy grave.
Es una pena porque a nivel de condiciones es genial, estoy muy contento con prácticamente todos mis compañeros, y mis expectativas aquí son geniales. Sin embargo no va conmigo lo de cruzarse de brazos y que las cosas salgan como salgan, me gustaría poder hacer las cosas bien y llevarlas de forma profesional, por lo que cualquier persona que me pueda arrojar algo de luz sobre cómo se desarrolla en otras empresas le estaría enormemente agradecido.
Entiendo que esto es un ladrillo, y que es un coñazo responder, por lo que entiendo al que le de pereza directamente.
Muchas gracias a todos