Etiqueta de código abierto


14

Comencé a trabajar en mi primer proyecto de código abierto en Codeplex y encontré un código terrible. (Aprendí que C # todavía tiene la declaración "goto") Comencé a agregar características que el "propietario" quería y después de explorar la base del código y ver qué lío era (por ejemplo, usar "goto") quise limpiarlo un poco. Pero estoy un poco preocupado y es por eso que estoy recurriendo a todos ustedes: ¿es una etiqueta adecuada para mí "arreglar" el "código incorrecto" o debería dejarlo y trabajar en nuevas características? Como dije antes, soy nuevo en toda la escena OSS y estoy trabajando en un equipo en general, así que me gustaría no estropearlo.


13
gotoNo es necesariamente un desastre. Hay muchos casos en que su uso está perfectamente justificado.
SK-logic

1
@ SK-Logic: si bien no tengo la fuente frente a mí, parecía una situación en la que tendría más sentido (y sería mucho más claro) usar un método en lugar de ir a Goto. Sin embargo, mi experiencia de desarrollo es limitada, así que podría estar equivocado :)
Jetti

2
¿Se ha puesto en contacto con el autor inicial y le ha preguntado qué piensa?
k3b

@ k3b: aún no lo he hecho. Definitivamente lo haré esta noche y veré qué piensa.
Jetti

Respuestas:


18

Está bien hacer esto, si eres modesto al respecto y no rompe nada . No puede evitar formatear el código e introducir errores. ¿Tiene buenas pruebas unitarias? Si no, comenzaría a contribuir agregando pruebas unitarias y luego arreglaría la estructura más tarde.


2
Estoy de acuerdo. La buena documentación y las pruebas son más valiosas que el código feo que ya funciona.
Filip Dupanović

No hay pruebas unitarias. No hay clases para probar realmente. Todo el código está actualmente en el código de la interfaz de usuario. (por ejemplo, button1_click () {// all code})
Jetti

55
@Jetti: agregar pruebas unitarias y luego migrar el código fuera del código GUI subyacente sería una valiosa contribución. Después de eso, puede refactorizar al contenido de su corazón.
Scott Whitlock

13

El propósito del código abierto es tener más ojos en un proyecto y mejorarlo. Eso incluye mejorar el código. Dicho esto, es una buena forma de anunciar en la lista lo que pretende hacer. Puede obtener algo de retroceso, o puede obtener un montón de +1. Esas gotodeclaraciones podrían estar allí porque el autor original no podía pensar en una mejor manera de hacer el trabajo. Si lo rechazan, es bueno ingresar a un cuadro de diálogo para averiguar de dónde proviene la presión. Trate de no dejar que se vuelva personal e intente abordar las inquietudes.

En pocas palabras, las pruebas unitarias hablan más que el dogma. Si puede probar que el código funcionará mal en ciertos casos como está ahora, obtendrá el visto bueno o el autor original entrará y arreglará las cosas.

Recuerde, en código abierto, la comunidad es más importante que el código. Si no hay comunidad (tanto de usuarios como de desarrolladores), entonces no hay proyecto.


1
+1 para la comunidad es más importante que el código. Mucha gente entiende esto.
Wyatt Barnett

6

Las personas que están celosamente a la defensiva sobre su código generalmente no lo publican para que el mundo lo analice, y si lo hacen, la comunidad a su alrededor no dura mucho. Sé discreto, pero no te preocupes por herir los sentimientos.

Solo diles lo que quieres hacer antes de invertir demasiado tiempo en ello. A veces hay razones históricas para cosas que no son obvias. La razón por la que se evitan los problemas es que pueden producir rutas inesperadas a través del código. En consecuencia, el peligro de eliminar los gotos es que no se da cuenta de uno de los caminos beneficiosos y se omite accidentalmente del refactorizador.

Por otro lado, tal vez el autor original simplemente no podía pensar en una forma más limpia de escribirlo en ese momento. Aquí es donde el código habla más fuerte que las palabras, porque es posible que no crean que se puede hacer más limpio hasta que las muestre. Una de mis primeras contribuciones de código abierto fue una corrección de la pila de deshacer que mejoró significativamente el rendimiento, pero que algunos de los desarrolladores principales dijeron que sonaba demasiado complejo cuando lo describí por primera vez. Una breve muestra de código los trajo a bordo.

Si resulta que realmente hay buenas razones para dejarlo, presionaría al menos para obtener un comentario que explique esas razones.


6

Hablando por experiencia ...

El primer proyecto de código abierto al que contribuí, estaba lleno de orina y vinagre cuando comencé también.

Lo que hice inmediatamente fue revisar un montón de archivos fuente y comenzar a estilizar las cosas según mis preferencias personales, creé un parche masivo y lo envié.

Si está trabajando con alguien que es 'bueno' (como yo), rechazará inmediatamente el parche. Principalmente porque, cuando contribuyes a un proyecto de código abierto, se espera que desgloses tus arreglos en fragmentos de tamaño de bocado que aborden un solo problema. 'Eliminado todos los gotos' no es un buen ejemplo de un compromiso atómico. Incluso si primero lo desglosa en confirmaciones más pequeñas y bien documentadas, aún podría ser rechazado.

La razón es que, debido a que el código es trabajado por varias personas (con diferentes estilos) a lo largo del tiempo, no es realmente posible aceptar cambios en toda la biblioteca para adaptarse al estilo de un desarrollador. Si cambiar el estilo por el estilo fuera factible, todos los proyectos de código abierto nunca avanzarían porque el código se editaría constantemente para adaptarse a diferentes estilos de desarrollo.

Refactorizar el código y agregar funcionalidades (o eliminar el desmenuzado obsoleto) generalmente tiene prioridad sobre el código de "limpieza".

La parte más difícil y gratificante de trabajar en un proyecto de código abierto es que se le preguntará por qué propone realizar los cambios que está enviando. Si puede dar una buena razón, hay una mayor probabilidad de que se envíe su parche.

Mi consejo es hacer algunos de estos cambios en un archivo fuente para dar una idea de lo que está tratando de hacer primero. Si los cambios están bien justificados y aceptados, pregunte si más cambios mejorarían la calidad del proyecto. De esa manera no desperdiciará mucho esfuerzo por nada si sus parches se rechazan en el futuro.

Desarrollar código abierto es más que escribir código. Estás trabajando para construir una relación de confianza porque los guardianes (desarrolladores que controlan el acceso push) harán lo que tengan que hacer para proteger la integridad del proyecto. A medida que envíe más parches, el guardián tendrá una mejor idea de su estilo y no tendrá que justificar tanto sus cambios.

Es un proceso que lleva tiempo pero es muy gratificante. No solo aprenderá mucho de poder mirar y criticar el código de otra persona, sino que también será criticado por su propio estilo.

Antes de perder mucho tiempo tratando de "corregir la injusticia de los errores del estilo de codificación de otros", pregúntese esto:

¿Los cambios que está proponiendo se basan en agregar valor al proyecto o se basan en su propia religión estilística interna?

Hay mucha religión en Stack Overflow (y sitios relacionados de Stack Exchange). Me refiero a un montón . La gente piensa y habla sobre el estilo sin cesar, como si cuanto más hablaras sobre él, más te acercas al estilo de codificación 'perfecto, ideal, indestructible e infalible'. También hablo mucho sobre todo porque es divertido.

En el mundo de código abierto, el estilo no es tan importante. Función es .

Nota: Todos estos consejos asumen que su portero es un programador razonable y talentoso. Si es así, considérese afortunado de no haberse quedado atascado con uno de los quejones b @ & # & es cuya única preocupación es proteger a su 'bebé'. Ellos no existen en la naturaleza, así que no se sorprenda si se encuentra con uno.


1

Calidad> Etiqueta

En mi opinión, no debe preocuparse por editar el código de otras personas tan pronto como descubra que es de baja calidad. Para lograr una buena calidad de software, simplemente debe cuidar el código limpio. No veo ningún problema al comprometer mejoras al código de otras personas que otras personas deberían saber y agradecer que haya codificadores que trabajen en su código.


0

Si puede encontrar una mejor manera de resolver el problema sin usar "goto", le sugiero que lo haga. Un poco de esfuerzo para mejorar el código hoy puede ahorrarle mucho más esfuerzo en el futuro.

La comunicación con el autor original también es una buena idea.


0

No hay nada implícitamente incorrecto goto. Mire el código de ensamblaje: muchos gotos (saltos y ramas) por todo el lugar.

La razón por la que gototiene un mal nombre en estos días se debe a que la declaración Go To de papel de Dijkstra se considera dañina y señala la declaración goto como algo muy malo.

Tenga en cuenta que eso fue hace 50 años cuando la ingeniería de software ni siquiera se nombraba todavía, y la mayoría de los lenguajes de programación eran esencialmente abstracciones de la máquina subyacente, así como el lenguaje de la máquina contenía goto, también lo hicieron. Puede intentar programar algunos en Microsoft Basic (el original, en Apple) [o Commodore 64) para tener una idea de cómo era esa mentalidad.

Lo que Dijkstra estaba argumentando era que para mantener las cosas simples no salte por todos lados, sino que mantenga una ruta de programa más simple con un final común. Por ejemplo, un retorno de un método. En otras palabras, solo saltos locales, no globales.

Este fue un paso para incorporar cosas como llamadas a métodos con argumentos, modularización de código, paquetes, etc., que se han introducido para domar la complejidad del desarrollo de software. La declaración goto fue solo el primer espectador en esa guerra.


Esto no responde a la pregunta: "¿es apropiado para mí" arreglar "el" código incorrecto "o debería dejarlo y trabajar en nuevas funciones?"

@Snowman si el código no es intrínseca y automáticamente malo por tener problemas, entonces la pregunta es "¿Debería arreglar el código que no está roto o no?"
Thorbjørn Ravn Andersen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.