Cómo convertirte en un mejor desarrollador

Postmortem

Hace poco se publicó esta foto en FEDA DEV

y me pareció bastante interesante, y me gustaría que la comunidad de developers de MV diera su opinión respecto a esto

¿Qué hábitos creéis que son buenos para formar un buen desarrollador? ¿Se entrena para ello? ¿Os parece cierta/ciertas algunas de las afirmaciones de la imagen? ¿Por qué?

Spacelord
  • No tener miedo a admitir que no sabes algo.
  • Saber googlear la solución para ese algo que no sabes.
1 3 respuestas
eXtreM3

La 3 cómo se hace? xd

Hago todo menos la 3 (no sé qué es) y la 10 (cuando me empecino en terminar algo no me saca del ordenador nadie!)

#2 stackoverflowear a piñón :si:

1 1 respuesta
Spacelord

#3 La tres significa arreglar un bug antes de seguir con el proyecto en vez de dejarlo ahí para cuando acabes.

1 respuesta
HeXaN

Leer el código de otras personas.

Esto es casi más difícil que encontrar vida en el Sol.

Yo añadiría: usar Doxygen o derivados. Ayudarás a la gente que lee tu código.

1 respuesta
eXtreM3

#4 ah vale, había leído mal. Lo había entendido como "arreglar un bug antes de escribir el código" (su propio código para fixearlo xD)

seridb

#5 Es jodidamente dificil leer codigo de otros sin comentarios (bueno no siempre), hay cada bodrio por ahí...

No me malinterpreteis si leeis lo mismo direis PERO TIO QUE PUTA MIERDA ES ESTA.

2 respuestas
Meleagant

Iba a preguntar qué es el code coverage.

Luego he leído a #2.

Ahora ya lo sé.

MegalomaniaC

Si tienes que currarte una aplicacion con mas gente, lo MINIMO que se puede hacer es comentar y programar de forma ordenada, que a veces te encuentras parrafos o ficheros que no hay dios quien los lea.

Tengo la costumbre de comentar un monton de cosas y eso ayuda que no veas.

Wasd

Hay que saber bien qué comentar y que no. A veces la documentación es más dificil de entender que el propio código (si el código está bien hecho, claro).

Yo añadiría importancia a que el código se entienda por si mismo. Que sepas que contiene una variable al leer su nombre, lo mismo con las funciones, y que estas se encarguen de un solo pequeño objetivo.

Además es importante establecer un convenio dentro del equipo.
Evitar el sindrome de diógenes y llevar a cabo la regla del boyscout (deja el código mejor de lo que te lo encontraste).

Yo intento seguir las 10 reglas de la imagen (y más, excepto la 6 y la 7, que tengo pendiente retomarlas) aún cuando voy justo de tiempo. Prefiero entregar algo más tarde pero que no reviente a los pocos meses, que entregarlo en su momento o antes y tenerlo que arreglar poco después.

1
Drhaegar

Organización. Soy de esos que tiene siempre su habitación patas arriba (limpia, pero con muchos trastos por medio), pero a la hora de trabajar necesito que todo esté bien organizado y sea fácil de leer.

Tener ficheros de texto bien organizados con lineas de código que usas cada dos por tres pero no eres capaz de recordar. Si lo tienes bien organizado tardas menos que buscando en Google o en el código de otro script.

No debugear mañana lo que puedes debugear hoy.

"A veces vale la pena quedarse en la cama el lunes, en lugar de pasar el resto de la semana depurando el código del lunes."

  • Christopher Thompson
Dostoievski

#7 La culpa no es de que tenga comentarios o no, es de que el código está mal escrito.

Los comentarios en la mayoría de los casos son una bazofia. Debería explicar como mucho por qué se usa un método de una forma y no otra o por qué, por poner un ejemplo tonto, se ha usado un mergesort en vez de un quicksort. Por lo demás, la propia signatura de la función debería explicar qué hace, ser obvia y que sólo se pueda usar de una manera.

A mi algo como esto me parece absurdo:

/**
 * returns the device
 */
public Device getDevice() {
	return device;
}

Oh no me digas, no me había dado cuenta de que getDevice devuelve un Device. La mayoría de comentarios son como ese ejemplo: inútiles. Vamos que es mejor hace un buen código que un mal código lleno de comentarios que al final estarán obsoletos, mal escritos y no te dirán nada útil.

Todo esto suponiendo que no estés desarrollando librerías. Ahí ya la cosa cambia algo más porque se supone que el que va a utilizarlo no tiene ni papa ni de por donde le sopla el aire

Un tip: TDD ya. Si no lo haces, empieza a hacerlo desde hoy, no esrcibir nada de código sin haber escrito el test primer. Yo era un poco reticente a hacer TDD y es un camino de ida, después de obligarme durante un par de meses (algo duros), ya no hay marcha atrás.

3 respuestas
zoeshadow

#7 Self Documented Code


publc int sum(int number1, int number2){
	return number1 + number2;
}

vs

/**
*	Suma los caracteres b y c
*/
public int aMethod(int b, int c){
	return b+c;
}
There are only two hard things in Computer Science: cache invalidation and naming things.
-- Phil Karlton
2 respuestas
seridb

#13 Me olvide del self documented code...

En realidad una de las cosas que mas me gustan de objective-c es que es jodidamente facil leer codigo ya escrito en el.

#12 Si que es verdad que muchos comentarios son absurdos, pero otros son totalmente necesarios y mas cuando, igual ese codigo no lo tocas hasta dentro de 6 meses que entonces ya me diran quien se acuerda porque usabas esa funcion y no otra :/

Kaiserlau
def impresionP(): #Pero a palo, palo

_

B

#12 la única excepción ahí la tienes si quieres generar un javadoc y que otros puedan leerlo sin meterse al código. Pero sí, completamente de acuerdo, y un coñazo de mantener.

1 respuesta
H4z4rD

#12 Ese es un comentario javadoc autogenerado. Para que después el desarollador lo complete con mas información pero manteniendo la sintaxis de comentarios necesaria para genera el javadoc. El problema es que mucha gente por pereza ponen el comentario autogenerado y no lo completan.

En eclipse por ejemplo este bloque de comentarios se genera situandote en la cabecera del metodo con el atajo Alt+Shift+J

1 respuesta
Spacelord

El javadoc enguarra tanto el código que a veces es mejor no generarlo y documentar aparte que meter siete mil líneas de comentario en el proyecto.

Dostoievski

#16 Por eso indico que si estás creando librerías o frameworks que vas a publicar la cosa cambia xD. Por ejemplo, la documentación de java me parece perfecta precisamente por eso, explica cómo se usan las clases y cuándo deberían usarse. Vamos lo que uno espera de una documentación cuando va a usar una librería.

#17 Ese javadoc lo he escrito yo para poner el ejemplo. Como eso miles que te encuentras en códigos.

El otro ejemplo de lo que me refiero es lo que ha escrito #13

1
JuAn4k4

A mi la documentación de librerias open source como Spring / Hibernate, me parecen muy perfectas.

Vas a un metodo, y te explica perfectamente lo que hace, para que sirve cada parametro y que excepciones lanza y porqué.

Hacer pair programming ayuda.
Y luego, las interrupciones, cada hora, no cada 5 minutos.

DarkSoldier

en #2 se ha dicho algo muy importante... no creerte que lo sabes todo... siempre hay alguien que sabe mas que tu (en este foro se llama blzkz pero en otros adquieren otros nombres, les llaman semidioses)

B

· TDD
· 0 spaghetti
· Usar pull request o similares en caso de trabajar con más personas
. Pensar que no vale solo con que funcione, tu o cualquier otro puede tener que entrar ahí en un tiempo y verse en una jungla.
· Comentar siempre y cuando el código no hable por si solo
· No tener miedo a aprender cosas nuevas, quedarse en la zona de comodidad hace que te oxides y te envicies.
· TDD
· y TDD

1 respuesta
DarkSoldier

tengo k aprender k es TDD, spaghetti, pull request y todas las demas palabras hipsters que has soltado #22 xDDD

1 respuesta
B

#23

TDD es Test Driven Development: http://en.wikipedia.org/wiki/Test-driven_development
Las pull request lo utilizas para mergear en la rama principal del repositorio git tu rama o tu fork con los cambios: https://help.github.com/articles/using-pull-requests

Y el spaghetti es basicamente esto:

1 1 respuesta
Spacelord

#24 Ya que estamos, ¿algún buen libro técnico sobre TDD? Los que he encontrado son más de intentar venderme la metodología a base de contarme las ventajas y de explicar poco como se hace.

1 respuesta
B

#25 lo mejor es que encuentres uno especifico para la tecnología con la que trabajas porque si no te vas a morir del asco.

Este video es muy bueno, aunque sea con Ruby es bastante general:"

http://www.confreaks.com/videos/2741-wickedgoodruby-killing-fibonacci

A mi para rails por ejemplo me encanta este:

https://leanpub.com/everydayrailsrspec

1 1 respuesta
Spacelord

#26 Gracias. Buscaré documentación específica, entonces.

TaMy
  • TDD (1% de code coverage es mucho mejor que un 0%)
  • Pull Request
  • Guias de estilo de código
  • Usa siempre una herramienta de control de cambios. Y si puedes elegir GIT (yo uso Stash de Atlassian basado en git).
  • En caso de duda, si... son dos commits... no lo pongas en el mismo.
  • Cuando empiezas con un nuevo lenguaje tu primera opción SIEMPRE necesita un refactor y seguramente la segunda también, asúmelo.
  • Una pizarra grande es mejor que papel y boli, y papel y boli es mejor que nada. No te canses nunca de dibujar organigramas con el flujo de tu código.
  • El Happy Path es tu enemigo, evitalo. Haz siempre que otras personas revisen tu código mediante Pull Rquest y no les guies a la hora de revisarlo.
  • Shit happens, catch them all!!
  • Logs prepara todo lo que hagas para poder mostrar un log detallado. Un buen log te ayuda a no tener que hacer debug más de la cuenta.
  • Ya que haces logs, hazlos standard y centralizalos.
  • Y ya que te pones, ponle niveles (Warning, Error, Info, Verbose... )
  • No reinventes la rueda, pon tus energias en inventar lo que no existe, reaprovecha lo que pueda.
  • Create un perfil en Stack Overflow.
  • De paso haz lo mismo con github y bitbucket.
  • ...
2
B

Hablando de comentarios...

http://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered

Hay algunos muy buenos!

1 respuesta
Scottie

#29 se puso hace un tiempo en el FEDA /dev/

Aun asi, el mejor:

//When I wrote this, only God and I understood what I was doing
//Now, God only knows
3

Usuarios habituales