La Declaración de Responsabilidades de los Programadores [cerrada]

40

Por lo tanto, todos hemos oído hablar de The Programmers Bill of Rights y XP tiene un concepto similar.

Es una queja común en estos días que escuchemos mucho sobre los derechos de las personas, pero no tanto sobre sus responsabilidades, así que lo que debería estar en la lista de responsabilidades de los programadores. Esas son cosas que deberían hacer, que pueden encontrar desagradables, pero que separan a los programadores que actúan de manera profesional y responsable, de aquellos que no lo hacen.

Estoy principalmente interesado en los desagradables y los que tienden a no suceder. Esos son los que los programadores tienden a eludir y evitar, en lugar de los que el 90% de los programadores realmente quieren hacer (como siempre refactorizar y usar el control de fuente).

Entonces, ¿qué debe estar en la Lista de Responsabilidades de los Programadores?

Jon Hopkins
fuente
44
Además, creo que se ajusta a las pautas 1,2,4 y 6.
Stephen Furlani
2
Creo que es una pregunta importante que hacer.
HLGEM
1
Un seguimiento importante podría ser '¿cómo te entrenas para ser un programador responsable?'
Stephen Furlani
2
Parece que esta pregunta solo genera una lista de elementos. Aunque las respuestas son bastante impresionantes (y felicito a los que respondieron que pusieron el tiempo y el esfuerzo en sus publicaciones), se centran en las opiniones y la redacción de la pregunta me parece una encuesta.
Thomas Owens
55
@ThomasOwens está totalmente en desacuerdo con que "esta pregunta no se ajusta bien a nuestro formato de preguntas y respuestas". Esto ya ha generado una respuesta con respecto a las pruebas para desarrolladores, las metodologías de desarrollo, los trabajos independientes y las preocupaciones comerciales, la garantía de calidad y la ingeniería de software, realmente comienza a ser incierto por qué incluso tenemos este sitio si las preguntas como las anteriores siguen cerrándose.
Joshua Drake

Respuestas:

41
  • Un programador tiene la responsabilidad de hacer retroceder los requisitos pobres en lugar de implementarlos ciegamente. Esto incluye decirles a los clientes que lo que quieren es más costoso que otras opciones o tiene un conjunto particular de riesgos. También incluye comunicar malas noticias de manera profesional, sin gritar, llamar estúpidas a las personas, lo que implica que son estúpidas u otro comportamiento infantil. Si retrocede, debería tener una serie de razones (más que "No me gusta SQL Server y no lo usaré") y un plan alternativo para presentar.

  • Sin embargo, el programador también tiene la responsabilidad de aceptar decisiones y usar herramientas o diseños que pueden no gustarles si no se acepta su rechazo. Si se solicitó un informe en SSRS, es inaceptable entregarlo en Crystal Reports (que el cliente puede no tener). Si se requería una solución .net, entregarla en Haskell es inaceptable. Si nadie más en el equipo usa una herramienta o lenguaje que usted quiera usar, no es profesional usarlo si la gerencia no está de acuerdo en que es la mejor herramienta para el trabajo en particular.

  • Un programador tiene la responsabilidad de probar su trabajo. (Esta no debería ser la única prueba, pero ningún programador profesional debería enviar el código que no ha probado). Esto incluye probar incluso las ramas del código que no espera que llegue muy a menudo. Si tiene un conjunto de IF anidados, pruebe todas las rutas posibles.

  • Un programador tiene la responsabilidad de manejar los errores y excepciones con gracia y de escribir mensajes de error que el usuario verá que son profesionales y neutrales, no bromas ni insultos.

  • Un programador tiene la responsabilidad de proteger los datos privados, proteger el código de propiedad que escribe para la empresa y proteger a los usuarios de una catástrofe (incluso una catástrofe autoinfligida) del uso de la aplicación.

  • Un programador tiene la responsabilidad de asegurarse de que su código sea mantenible y esté en control de la fuente.

  • Un programador tiene la responsabilidad de coordinarse con otros para asegurarse de que sus cambios no afecten negativamente lo que están haciendo.

  • Un programador tiene la responsabilidad de recomendar la mejor opción para el cliente de herramientas o idiomas en la fase de diseño, no la herramienta / idioma con el que quiere jugar y aprender.

  • Un programador tiene la responsabilidad de trabajar con todo el personal apropiado para un proyecto, incluidos los que no le gustan. No es tu trabajo que te gusten las personas, es tu trabajo trabajar con ellas y ser cortés.

  • Un programador tiene la responsabilidad de producir un producto que haga lo que se especificó en un plazo razonable. Si no se va a cumplir el plazo, él o ella tiene la responsabilidad de informar a la gerencia al respecto tan pronto como se sepa.

  • Un programador tiene la responsabilidad de informar a la gerencia del proyecto sobre los impedimentos para hacer el trabajo. No pueden arreglar lo que no saben.

  • Un programador tiene la responsabilidad de hacer toda la tarea, no solo las partes divertidas e interesantes. Cada trabajo tiene algunas partes aburridas, aún deben hacerse. Esto incluye cosas como hojas de tiempo y agregar elementos de discusión al software de gestión de proyectos. Incluye cosas como documentación, revisión de código, etc.

  • Un programador tiene la responsabilidad de aprender el dominio comercial que está apoyando, no solo los conceptos de programación.

  • Un programador tiene la responsabilidad de mantener sus habilidades actualizadas.

  • Cuando un programador se equivoca, tiene la responsabilidad de hacer todo lo que esté a su alcance para solucionar los problemas tan pronto como sea humanamente posible. Esto puede incluir llevar las malas noticias a la administración en lugar de tratar de ocultar que acaba de eliminar una tabla crítica en la base de datos de producción.

  • Un programador tiene las mismas responsabilidades que cualquier otro trabajador: presentarse a tiempo, trabajar las horas contratadas, solicitar vacaciones por adelantado, responder mensajes telefónicos y de correo electrónico (diablos para leer sus correos electrónicos), completar los formularios requeridos para RRHH, etc.

HLGEM
fuente
77
Me encantan los mensajes de error de broma. La situación ya es bastante mala, no es necesario que sea más grave que eso, ¡al menos trata de hacerme reír mientras me abofeteas con un error!
Dr. Hannibal Lecter
2
Cuestiono la responsabilidad de que un desarrollador pruebe personalmente su código en todas las situaciones ... Lo reformularía para garantizar que su código sea probado ... Si la organización tiene probadores profesionales (tanto automatizados como humanos) y un proceso sólido en su lugar para asegurarme de que se prueba el código, no veo por qué el desarrollador tiene que hacerlo personalmente. Si estoy desarrollando una nueva característica o arreglando un error, seguro que lo probaré yo mismo, de lo contrario no sabré si he terminado con mi trabajo. Sin embargo, si estoy haciendo una refactorización grande, no tiene sentido que realice una prueba de regresión exhaustiva de todo el producto.
JoelFan
No dije prueba de regresión, pero deberías hacer una prueba unitaria de tus cambios para asegurarte de que hagan lo que pretendías.
HLGEM
2
¿Qué pasa con ningún signo de exclamación en los mensajes de error ... es decir, "La fecha no es válida!"
JoelFan
1
Estos deben ser neutrales al género. Hacerlos imperativos facilitaría esto, por ejemplo, en lugar de "Un programador tiene la responsabilidad de probar su trabajo", debería ser "Pruebe su trabajo".
sigil
42

Cada programador debe hacer que su código sea legible por otros.

dan_waterworth
fuente
@ Kevin D: Esa es una responsabilidad. Usted tiene la responsabilidad de producir código legible por humanos.
doppelgreener
1
@Axidos, es porque cambié mi respuesta una vez que me di cuenta de lo que había hecho.
dan_waterworth
Eliminaré mi comentario original porque ya no es relevante.
Kevin D
1
¿"Legible" por quién? ¿Mis "compañeros" (es decir, alguien con educación y experiencia similar a la mía)? ¿Alguien que está realmente bien educado en el arte y la ciencia? ¿O un Flying Code Monkey que NO tiene negocios con algo más avanzado que Dartmouth BASIC?
John R. Strohm
77
@John, otros en este contexto implican otros programadores. En la oración: "La jirafa era más grande que las demás", no entendemos que otros significan monos voladores. 'Otros' significa "más del mismo tipo que no han sido mencionados".
dan_waterworth
22

El programador es responsable de la privacidad y seguridad de todos los datos proporcionados por el usuario. Especialmente contraseñas, números de tarjetas de crédito, direcciones de correo electrónico y ubicación física.

Malfist
fuente
Esto realmente caería bajo el dominio del arquitecto del sistema. En muchos, muchos escenarios empresariales, los programadores no tienen voz ni control sobre los almacenes de datos. ¿Cómo puedo ser responsable de una dirección de correo electrónico en una base de datos, cuando todo lo que estoy haciendo es acceder, no crear, esa base de datos?
Neal Tibrewala
2
Supongo que las personas de Facebook no necesitan postularse en lo que respecta a la mayoría de las responsabilidades anteriores. :)
MetalMikester
44
-1 eso es demasiada responsabilidad.
Peter Turner
66
Quizás para sistemas a gran escala podría ser demasiado para que un programador decida. Pero para la gran mayoría de los sitios donde trabajan uno o pocos programadores, es absolutamente necesario almacenar datos correctamente. Sin cifrado cuando se necesita hashing, sin algoritmos personalizados o seguridad por oscuridad. Seguridad real y probada.
Malfist
@Neal: El arquitecto del sistema es solo otro programador. Claro, para grandes proyectos probablemente no podrá programar nada, pero eso no significa que no sea un programador. Y eso solo se aplica a grandes proyectos; En proyectos de 2 o 3 personas, un programador suele ser responsable de alguna parte de la base de datos o de su totalidad; Es su responsabilidad asegurarse de que los datos se guarden de forma segura.
configurador
20

No hagas que el usuario pierda su trabajo.

Esto es más difícil de lo que parece ... el trabajo es más que simplemente "datos en un archivo" ... es cualquier momento que el usuario haya pasado con su software.

Por ejemplo, si el usuario completó su formulario de 30 campos con 29 elementos válidos y 1 no válido, no borre todos sus datos válidos para quejarse del 1 no válido (diablos, ni siquiera borre el no válido .. tal vez sea largo y solo requiera una corrección menor, o el usuario no recordará lo que era antes si lo borra)

Un ejemplo no obvio pero importante es lo que Windows y prácticamente cualquier otro software de "administrador de archivos" se equivoca ... si paso media hora con cuidado, presiono Ctrl-clic para seleccionar un conjunto de archivos y accidentalmente hago clic en lugar de Ctrl-Click, no debería borrar todos mis archivos previamente seleccionados, haciéndome comenzar de nuevo.

Otro que se equivocaron ... si accidentalmente presiono Ctrl-A (en lugar de Ctrl-S justo al lado), no debería perder mi lugar en el archivo y colocar el cursor al principio ... Llamo encontrar el lugar correcto en el archivo "trabajo" que el programa ha "perdido".

Otro más: el diálogo "commit" de TortoiseSVN tiene una larga lista de archivos. Antes de presionar "Confirmar", puede bajar la lista de archivos, haciendo doble clic en cada uno para ver sus cambios en un segundo diálogo. Para hacer esto rápidamente, a veces uso solo el teclado, presionando <Esc>para cerrar el segundo diálogo y volver al primero. Si accidentalmente presiono <Esc> dos veces, también cierra el primer cuadro de diálogo, lo que hace que me olvide de qué archivo estaba haciendo.

revs JoelFan
fuente
55
Trate de no hacer atajos de teclado que hagan cosas opuestas asignadas a las teclas una al lado de la otra (CTRL-C y CTRL-V, por ejemplo, no puedo decirle cuántas veces si se copió cuando tenía la intención de pegar y viceversa)
HLGEM
55
@HLGEM, paradójicamente, quien haya diseñado esto probablemente pensó que nos estaba haciendo un favor al ponerlos uno al lado del otro
JoelFan
44
¿Y él no? Quiero decir, no tienes todo el poder de Emacs ni nada, pero puedes copiar y pegar sin mover mucho la mano.
compman
1
Usa Total Commander. Haga clic derecho para seleccionar y haga clic derecho para anular la selección. A menos que navegue a otro lugar o pierda el foco durante mucho tiempo mientras se cambia la carpeta actual que está viendo, no perderá su selección.
configurador
1
Para el último ejemplo (Ctrl-A pierde mi lugar en el archivo), recientemente encontré una solución parcial que funciona en muchos programas ... Ctrl-Z, Ctrl-Y ... que deshacerá mi última edición en el contenido del archivo, luego "rehacerlo", con el resultado de que el contenido es el mismo que antes, y estoy ubicado en el lugar de la edición. Esto no es necesariamente lo mismo que el lugar donde estaba mi cursor justo antes de mi Ctrl-A equivocado, pero a menudo es lo suficientemente cerca ... esto, por supuesto, no excusa el mal comportamiento del programa en Ctrl-A ... es solo una solución parcial y me tomó un tiempo para golpear
JoelFan
15

Un programador tiene la responsabilidad de respetar el sistema en el que se ejecutará su programa. Una vez finalizado el desarrollo y las pruebas, el programa se implementará para ser utilizado para el propósito previsto, y eso generalmente involucra a otras personas que lo ejecutan en sus computadoras. El programador debe tener esto en cuenta: su programa se ejecuta en la propiedad de otra persona , no en la suya, y debe comportarse como un huésped en su hogar en lugar de irrumpir como si fuera el dueño del lugar.

Por ejemplo, su programa no debería:

Mason Wheeler
fuente
1
Realmente me gustan tanto como usuario como programador. Los iconos que rebotan en mi muelle son mi principal causa de ira hacia personas que nunca conocí.
Agos
77
Me gustan todos excepto "actualizarse sin el consentimiento del usuario". La forma en que Chrome se actualiza es refrescante: me encanta encontrar nuevas funciones. Sin embargo, la forma en que lo hacen otros programas es abominable. Te estoy mirando a ti, Java, y a ti, Acrobat Anything. No me preguntes si quiero actualizarte todos los días. Dije que no una vez, ¡dale una pista!
configurador
2
Si un programa se va a actualizar automáticamente, al menos debe solicitar el consentimiento del usuario la primera vez.
gablin
Otra violación por TortoiseSVN ... hacer cualquier cosa con ella hace que el sistema se detienen
JoelFan
@SpashHit: ¿Hmm? Uso TortoiseSVN a diario y nunca me he dado cuenta de que ...
Mason Wheeler
8

Del Manifiesto para Software Craftsman :

Como aspirantes a artesanos del software, estamos elevando el listón del desarrollo profesional de software al practicarlo y ayudar a otros a aprender el oficio. A través de este trabajo hemos llegado a valorar:

  • No solo software de trabajo, sino también software bien diseñado

  • No solo responde al cambio, sino que también agrega valor de manera constante

  • No solo individuos e interacciones, sino también una comunidad de profesionales.

  • No solo colaboración con el cliente, sino también asociaciones productivas

Es decir, en la búsqueda de los elementos de la izquierda, hemos encontrado que los elementos de la derecha son indispensables.

esponja
fuente
8

Mírese en el espejo y posiblemente reconozca las peores cualidades de un programador en sí mismo. Luego trabaje para eliminarlos cada día.

  1. No estoy aprendiendo nada nuevo
  2. No buscas extender tus habilidades
  3. No estar abierto a nuevos hábitos, apegarse a los viejos hábitos.
  4. Sin preocuparse por la calidad de su trabajo.
  5. No buscas mejorar la calidad de tu trabajo
  6. Ser un trabajador de 9 a 5 sin pasión
  7. No tener opinión propia de las cosas.
  8. Aceptar la opinión de otros sin cuestionar
  9. Creyendo que lo has aprendido todo
  10. No tolerar ninguna crítica.
  11. No escuchar entrada externa
  12. Estar centrado en el ego, sabelotodo individual
  13. Tener una personalidad negativa y criticar a otras personas.
usuario8685
fuente
+1, pero redactarlo de esta manera lo hace bastante negativo.
dan_waterworth
1
Encuentro el # 13 altamente irónico, ya que eso es esencialmente lo que estás haciendo aquí, aunque en un sentido general.
Dustin Rasener
6
  • La responsabilidad de un programador es crear software que satisfaga las necesidades de los requisitos, análisis, diseño y especificaciones establecidos en los contratos entre el programador y el cliente.
  • La responsabilidad de un programador es crear software que sea económico, confiable y que funcione eficientemente en máquinas reales.
  • La responsabilidad de un programador es trabajar de la manera más eficiente, ética y con la mayor integridad posible y comportarse con la máxima profesionalidad.

Algo de eso se aplica a las responsabilidades de "Una empresa de programación ".

Stephen Furlani
fuente
4
  • El programador debe conocer y usar las bibliotecas centrales y la plataforma utilizada.

Especialmente cuando el programador proviene de otra plataforma / lenguaje. Es terrible encontrar al programador luchando por algo que proporciona la biblioteca central o hacer un mal uso de la ventaja de la plataforma debido a la ignorancia.

  • El programador debe crear un código autodocumentado.

Es muy importante tener el código documentado para que otros lo usen, pero cuando se trata de mantenimiento, el código de auto documentación puede literalmente ahorrar horas y horas de frustración.

Por ejemplo, compare:

// validates if is leap year
if(  year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ) { 
     doSomethingWithFebruary();
}

a

if( isLeapYear( year ) ) { 
    doSomethingWithFebruary();
}
revs OscarRyz
fuente
4

La programación es una profesión, no una habilidad. Esto significa que un programador tiene la responsabilidad de mantenerse actualizado en su campo sobre las últimas herramientas, técnicas y tecnología.

Esto puede significar presionar a los gerentes para que den tiempo para permitir un aprendizaje y capacitación continuos, o hacerlo en su propio tiempo.

Neal Tibrewala
fuente
2

1) Explique claramente que una solución a cualquier problema tendrá compensaciones entre rendimiento, costo, tiempo y calidad.

2) Complete la documentación relevante, ya sean notas o planes de prueba. (la documentación variará con el tipo y tamaño de la compañía)

3) Solicite las herramientas correctas para su trabajo (muchos simplemente se quejan pero nunca se acercan a su jefe con un caso razonable para obtener lo que necesitan)

... Otros sin duda a seguir.

Kevin D
fuente
2

Cuestionar cualquier cosa: un programador debe tener la responsabilidad de preguntar sobre cualquier cosa que un sistema deba hacer o manejar. Esto puede incluir preguntar qué pueden ver los usuarios como preguntas tontas, ya que hay varios sitios dedicados a mostrar exactamente lo que los usuarios pueden hacer. Daily WTF y SharkTank son un par de ejemplos, aunque estoy seguro de que hay otros.

JB King
fuente
1

Un programador es responsable de convertir las historias de usuarios en la cartera de productos en incrementos de software que se pueden enviar y que se pueden enviar.

Es por eso que los gerentes deben asegurarse de que tienen todo para su objetivo.

usuario2567
fuente
1

Aquí está mi propuesta.

  1. Un programador debe requerir las condiciones de trabajo expuestas en la Carta de derecho del programador, para no reducir los estándares para el puesto.

(Para "programador" quiero decir "programador", no "hacker de fin de semana", por lo que todo lo que un programador debería hacer está implícito).

cbrandolino
fuente
-1. No creo que una responsabilidad pueda ser una que "requiera [s]" un derecho.
Craige
1

5 preceptos del gremio de programadores

1.) verifique su código semanalmente y en días festivos.

2.) satisfacer las necesidades de la comunidad de programación.

3.) lea al menos un libro de programación por año.

4.) ir a al menos una conferencia de programación por año.

5.) Reconoce tus errores.

Peter Turner
fuente
¿"verifica su código semanalmente y en días festivos"? Te refieres a cada hora, ¿verdad?
configurador
@configurator Me refiero a estos como mínimo para llamarte programador. Pero cuantos más registros, mejor
Peter Turner
1

Agregaré "siempre documentar cualquier suposición hecha" a la lista. :-)

John Parker
fuente
O ... ¿nunca haces suposiciones?
Stephen Furlani
2
@Stephen Furlani: Desafortunadamente, eso es casi imposible en un proyecto de cualquier tamaño.
John Parker
0

Un programador no debe hacer ni implementar nada que no sea ético o ilegal, como escribir virus o piratear los sistemas de otros (a menos que sea para descubrir agujeros de seguridad y luego informar a la víctima al respecto y lo que puede hacer para evitar que esto suceda explotado por cualquier hacker malicioso).

gablin
fuente