Amateur en código abierto - lecciones aprendidas en 3 años

Hace mucho tiempo, en 2014, hice una pequeña utilidad para overclockear las vistas de C # en el código TypeScript. Ella me ahorró mucho tiempo y nervios. Y así, en septiembre de 2015, decidí poner mis "experimentos en la rodilla" en algún tipo de forma digestible y verterlos en GitHub. Así comenzó mi participación aficionada en el desarrollo de software de código abierto. El tiempo paso Y así, ayer en el repositorio con este proyecto, finalmente, un aniversario, apareció la confirmación número trescientos. En relación con este importante evento, me gustaría compartir mi experiencia de aficionado sobre lo que tiene que enfrentar si de repente piensa en desarrollar algo "en beneficio del desarrollo de la industria". Esbozaré algunas figuras, contaré algunas historias interesantes y también compartiré mis impresiones sobre cómo es escribir y apoyar un proyecto de código abierto sin mamás, papás y préstamos soporte de empresa, pago y ... y tiempo libre. Ven debajo del gato, toma asiento, comenzamos.


"Haz lo que es bueno"


Para empezar, hay más de 90 millones de repositorios en GitHub. Algunos de ellos son conocidos, algunos no son muy, algunos son generalmente privados. En vista de la popularidad masiva, Github comenzó a ser utilizado por estudiantes para tareas, maestros para conferencias, autores de libros para tutoriales e incluso entusiastas de la legislación . ¡Imagínense qué maldito abismo de código y proyectos es este! Sin embargo, le puse una botella de coñac que si un periodista se apega a usted en este momento y le pide que nombre los repositorios famosos, entonces llamará ... bueno, en algún lugar alrededor de 15-30. ¿Qué significa esto? Esto significa que GitHub es un gran universo de productos de software, la mayoría de los cuales, estoy seguro, son conocidos solo por sus autores. Y tal vez 5-10 a sus amigos.


Ser más o menos notable en esta multitud es bastante difícil, te digo.

Incluso si robas los datos de las tarjetas bancarias de todos los usuarios del mundo y las publicas en GitHub, entonces estoy seguro de que serás prohibido y procesado nadie lo notará . ¿Por qué digo cosas tan obvias, preguntas? Y aquí ... ¡maldición, no son obvios! Especialmente para el autor de estas líneas :) Especialmente hace 3 años. Entonces, ingenuamente, pensé que era suficiente hacer algo realmente útil, indicar las etiquetas, escribir README y las personas encontrarán todo por sí mismas, descargarán todo por sí mismas. Bueno, en serio, dado que algún tipo de teclado izquierdo , que consiste esencialmente en 47 líneas de código, obtuvo mil estrellas, entonces mi artilugio es algo que simplifica objetivamente el desarrollo: bueno, se escribirán 300, ¿verdad?


Mmm ... no. Lamentablemente, esto no funciona. El panel izquierdo se creó en 2014 y fue definitivamente desconocido para todos hasta los famosos eventos de 2016 . Si nos fijamos en el gráfico de la distribución de estrellas, entonces podemos ver el aumento a casi 90 grados justo en ese momento muy desafortunado. Obviamente, hay varias conclusiones tristes de esta maravillosa historia:


Sin un marketing adecuado, su mejor idea en el mundo pasará desapercibida.
Black PR también es PR.
No siempre un número loco de estrellas sugiere que el proyecto es bueno.

Pero no todo es tan malo. Si ya está preparado para deprimirse por esto, entonces mi consejo es que deje de lado sus pañuelos y una almohada sollozante.


Mejor hacer algo útil. En primer lugar, útil para usted.

Estime sin qué producto de software su vida no es una alegría. Aquí estás personalmente leyendo esta publicación. Qué aplicación, marco, servicio el infierno te estas perdiendo En tu trabajo o en tu vida diaria. ¿Lo has resuelto? Genial Martillo en google y si de emitir a petición suya sopla con melancolía y arrastrado, ¡adelante! Inicie un repositorio, abra un IDE y escriba. Escribe lo que soñaste, colecciona y diseña. La respuesta es simple: si su proyecto lo beneficia específicamente, entonces, en todo el mundo, lo más probable es que haya mil o dos personas que también lo ayudarán y que se lo agradecerán. Estoy seguro de que por primera vez tendrás una audiencia más que suficiente. Entonces depende de lo pequeño: transmitir sus logros a todas estas personas maravillosas y no salpicar en el camino.


PR sin pantalones


Escuché que algunas compañías tienen esta práctica. Si en la entrevista, el candidato menciona su proyecto de código abierto, entonces en el siguiente párrafo comienzan a crucificarlo sobre el tema “¿cuántas estrellas?”, “¿Cuántas descargas?”, “¿Cuántos proyectos en vivo se usan?”. Por lo tanto, les declaro responsablemente: deben enviar a esos interlocutores con un movimiento rápido y decisivo de su lengua, levantarse y abandonar la entrevista, olvidando para siempre el nombre de esta empresa y contándoles a sus amigos al respecto. Si el gerente (o quien lo entrevista allí) se le ocurre esa pregunta, entonces, con una probabilidad casi absoluta, nunca tuvo un problema con el desarrollo de software libre, nunca ha oído hablar de marketing y, en general, le da poca importancia a los sonidos que hace. . Trabajar con esto no funcionará.


Es triste, pero aparentemente un hecho: según mis observaciones, detrás de proyectos populares y a gran escala, las empresas de alguna manera se mantienen.

Por ejemplo, en forma de financiamiento directo para el desarrollo: si el proyecto se realiza durante las horas de trabajo, entonces se paga de facto. Sí, sí, incluso si tiene un "Viernes para sus proyectos". ¿Qué cree que no está en el presupuesto? O en forma de soporte de información (artículos, conferencias, videos). Bueno, o en forma de apoyo del "personal", a la "Vasya, ve a ayudar a Oleg a hacer una función en su proyecto". Y esto sin mencionar los casos muy francos de financiamiento del desarrollo de código abierto, como EntityFramework o .NET Core, cuando hay departamentos enteros involucrados en tales proyectos. O todo de una vez (aquí los teóricos de la conspiración pueden hacer la pregunta "quién se beneficia de esto", pero llegaremos a eso).


La compañía me proporcionó recursos, excepto para realizar pruebas gratuitas de mis desarrollos en personas vivas. Y no, no me quejo, yo mismo insistí en esto, para que todos los derechos y el control sobre el desarrollo permanecieran conmigo. Y para la compañía con la que la relación del contratista me ha estado conectando durante los últimos 4 años, TI no es tanto un negocio central. Es inconveniente distraer a las personas de alguna manera. En general, el resultado final fue el siguiente: la compañía es comprensiva, apoya moralmente y proporciona su sistema para verificar y ejecutar el proyecto en usuarios en vivo. A cambio, recibe un derecho prioritario de soporte y corrección de errores, así como consultas, implementación y capacitación del personal. Bozhechki, digo las palabras de un integrador importante, aunque en mi proyecto solo hay alrededor de 5 mil líneas (sin pruebas).


Digresión lírica sobre la ayuda de las empresas

Oh, hubo un caso tan interesante. Compré el estudio 2015, 2017 Community Edition, pero además uso ReSharper de JetBrains. Y también lo compré. Entre otras cosas, también tengo una cuenta en Azure, donde por un dinero nominal hay un sitio web simple con información sobre mí, enlaces a proyectos y documentación. Entonces ahí está. JetBrains tiene un programa de licencia gratuito para desarrolladores de código abierto. Bueno, estoy pensando: dalo, lo arreglaré. Un centavo bonito, pero ahorraré. Tendré un regalo ReSharper. Por que no Escribí, entonces, una carta a la dirección requerida. Como, tal y tal. Estoy haciendo tal o cual proyecto, algo así como un código abierto. Dar, dicen, una licencia. La respuesta viene esto:


Hemos verificado su proyecto de código abierto para ver si cumple con todos los requisitos del programa de licencia de código abierto de JetBrains.
Tenemos que informarle que, de acuerdo con las reglas de nuestro programa, si el proyecto proporciona servicios pagos (capacitación, consultoría, etc.), no podemos emitir licencias gratuitas en términos generales.
Como puedo ver en el sitio web de su proyecto, proporciona algunos servicios comerciales ( http://www.reinforced-sc.com/Info/Contact ), por lo tanto, desafortunadamente, no podré proporcionar licencias gratuitas de código abierto para su proyecto

En resumen, omitiendo los detalles. Esencialmente, no les gustó eso en mi sitio (que es visitado por 3.5 anonymus), escribí que estaba listo para proporcionar asesoramiento comercial y soporte comercial individual para cualquiera de mis proyectos (de dos, jeje). Ni el costo de los servicios, ni ninguna condición específica, simplemente, dicen, "si de repente lo necesita, usted escribe, estaremos de acuerdo". Como saben, por supuesto, no se han recibido propuestas. Soy empleado de JetBrains y traté de explicarlo en una breve correspondencia. Finalmente obtuve esta respuesta:


Si su proyecto no proporciona servicios comerciales, elimine la sección comercial del sitio web y avíseme una vez que lo haga; luego emitiré una licencia de código abierto para usted.

"Bueno, no importa", pensé, "significa que tengo que eliminar información sobre la apertura a las ofertas comerciales del sitio a cambio de $ 200 (el costo de una licencia para ReSharper) por año?! No chicos, esta es una oferta regular. Gracias no es necesario ". Y no continuó el diálogo.


Hay, por supuesto, muchas preguntas: en primer lugar, ¿Cuánto maná celestial se recomienda usar durante el desarrollo para no engordar? Si mi proyecto se utiliza en la empresa en la que trabajo, pero lo desarrollo en mi tiempo libre, ¿se considera que esto es la prestación de servicios comerciales? En segundo lugar: si mi proyecto no se usa en negocios, ¿es inútil? ¿JetBrains está listo para financiar proyectos sin valor? y si indico mi proyecto de código abierto en el currículum y esto aumenta mis posibilidades de ser contratado, ¿esto también es un uso comercial? Entonces, ¿tampoco puede indicarse en el currículum? Pero también sucede que las empresas apoyan al contribuyente de manera informativa: ¿esto también es dinero de una forma diferente? Necesito aclarar! No entiendo nada en absoluto.


En general, como saben, me enfrenté a la tarea de promoción y relaciones públicas solo. La primera idea que se me ocurrió fue escribir cómo usarlo todo. Aquí decidí hacer trampa y combinar útil con útil: escribí el primer artículo sobre RT en una revista geek (para la que se invitó a OVNI). La idea no era tanto en el PR "lo hice", sino en cómo colocar al menos algo de documentación en ruso en el centro. Mis colegas son todos iguales de Rusia, por lo que necesitaban al menos un pequeño manual, pero no querían explicarlo a todos por correspondencia o por voz. Así nacieron los primeros tres artículos, que el público recibió con bastante frialdad. Esto es comprensible: es poco probable que sean útiles para alguien de la comunidad habr, por lo que no me preocupo por esto.


Acerca de la documentación


La idea de que sería bueno darle a la gente cualquier conocimiento sobre cómo usar mi marco no me dio descanso hasta que finalmente lo formulé de esta forma:


Aquí está la cosa con la documentación: es inútil sin un código de proyecto, y el código del proyecto es inútil sin él.

Maravillosa idea, pero sabía catastróficamente poco sobre escribir documentación. Además de mechikov y bromas sobre el código no documentado, el pensamiento retrospectivo era que era necesario usar verbos para describir métodos, y los constructores no necesitan ser documentados. Sobre esto, mi conocimiento, tal vez, estaba agotado. Creé la primera versión de README , completé la descripción del proyecto y comencé a pensar.


¿Cómo se acerca un aficionado a escribir documentación? Por supuesto, a través del doxygen, ¿en qué más puede pensar un programador? Apenas dicho que hecho. Mi objetivo era amordazar XMLDOC (es como javadoc, solo en C #) para que la asamblea en Release no diera "sobre comentarios faltantes para miembros visibles públicamente".


- C# , , "", . , internal private C#. : 150 ( — 250), 700 260 . - . , .


20 , - , . , , ? , . . , : — . : MSDN! .


"Gets or sets whether..." — - !

, .


30 , - " ". , , , . , , internal ( package Java). , ! . , .


, , .


, ! doxygen .

, reference-, doxygen-, 150 , enum-, . — ! XMLDOC- , "" . , .


XMLDOC-, , . Autofac, ReadTheDocs.ord. reStructuredText. , . ? . ? ? , ? ? .


chebureque, . , . , , . , . , … , , ! , , , . . , .


, — . .

: , github wiki markdown- , . , , , , GitHub. . .


image


. -, , . , - . .




. 9 NuGet, , . , 2016 -. ( ?) !


?

"european it conferences 2016" . C# TypeScript. web, , , , IoT. , . , ! , , , , , " ". " ", " ", " ". , ! ", -, !". .


, , DeveloperDays 2016 . — ? , . , , — , 10 . — , . , , . , . . , , , .


— — — .
— , ! ! —… . , — , . .

. NuGet , 10 . , . , , issues! : . , . , faq, , , , .


StackOverflow! , !

C#- TypeScript, . — ! README , Support policy. StackOverflow , . FAQ. RSS .



, RT StackOverflow — , . ! stargazers Barclays Microsoft. — , , , , , … ! , Insights , JIRA - .


StackOverflow , , . . issues , - . . - . , - . , , ( , — ) , .


TDD — , .

— - , - . ,


image


, -. ( ), — 10, 99% - .


-, , C# TypeScript . , !


RT, dnx, .NET Standard, 3 .NET Core, 20 TypeScript , .

, - .NET Core :)



, , . , ( !). , , … - ? , : , , , . ( .NET Core, ). ? , .


3 . ? ? ! . , . . zip- — GitHub ! , , , OSS- - .


opensource- ? .

?
OSS : (opensource ) ( ). Microsoft OSS — .NET Core "Microsoft loves Linux" MS-, — Azure . — ! , .


opensource. -, Percona mysql, , " ". , , mysql , . mysql .


, OSS- , , . — : OSS- , . , .


OSS, , — , , , Apache Harmony, Sun Microsystems JRE ( , -).


OSS , . - — , , " " — . . — , , " — , " .. .


OSS — , . — - . , user group, community, , . — , . - . "member of something user group, contributor".


- OSS- , , , . .


, — . , , , . , — .

, , community. — , , , , — , , .


, , , — , , linux. "" Linux. , — . . - , " ", , opensource . . , . , .


. - , - " opensource", — .


, .

opensource, " " opensource- — , .


: OSS- OSS- — . , . .

, , , , " " " opensource". , OSS, . . , , . . , . , — . ? ...


, . :


  • 5000 , 225 , 1428 , 380 ;
  • 43 ;
  • 84 issues ;
  • 10 ;
  • 107 ;
  • 28 ;
  • 1100 ;
  • ~50 000 - NuGet ( 40 );

GitHub, NuGet.


!

Source: https://habr.com/ru/post/es435878/


All Articles