Здраво на сите! Сакам да го споделам моето искуство за развој на библиотека со отворен код, да зборувам за процесот што е вклучен и да ве инспирирам да креирате свои проекти.
Во пролетта, додека гледав еден од стримовите на Јегор Бугаенко - бев инспириран од идејата за развој со отворен код. Јегор тврдеше дека ако сакате да го надминете тоа да бидете обичен програмер и да станете побаран и уникатен специјалист, треба да создадете нешто свое. Без разлика дали се работи за книга, блог, библиотека, па дури и рамка, ваквите проекти ви овозможуваат да се истакнете меѓу многу други програмери, особено на денешниот ИТ пазар. Ова не само што ја демонстрира вашата професионалност туку покажува и искрен ангажман во развојот на полето.
Сето ова ме натера да размислувам: како навистина се издвојувам меѓу другите програмери? И покрај годините работа во ИТ и учество во различни проекти, сè уште немав ништо свое - нешто што може да ја покаже мојата уникатност и професионалност.
Ги посетив моите стари проекти за миленичиња на GitHub, но брзо сфатив дека ниту еден од нив не е навистина значаен. Затоа, решив да почнам од нула и да создадам нешто ново. Полн со мотивација и ентузијазам, почнав да размислувам за тоа што би можел да напишам што ќе биде барано, барем кај малата публика, и што ќе одговара на моите вештини.
Два или три дена ги анализирав идеите за мојот проект со отворен код. Колку повеќе размислував, толку повеќе се чинеше дека сè е веќе напишано и дека она што допрва треба да се реализира ќе биде невозможно да се постигне сам. Веднаш да кажам: ова е погрешна перспектива. Не дозволувајте да го уништи вашиот потенцијал. Да, многу е веќе создадено, но тоа не е причина да се откажете и да ја напуштите идејата да создадете нешто свое.
Сега, ќе објаснам зошто:
Најважниот аспект на создавање на нешто ново е да се идентификува вистинскиот проблем и да се понуди решение. Ова може да биде глобален предизвик или мало, но значајно прашање што треба да се подобри. Од клучно значење е да разберете со какви потешкотии се соочуваат другите програмери или редовни корисници и како можете да им помогнете да ги надминат овие предизвици.
По понатамошно размислување, почувствував желба да создадам нешто корисно за заедницата .NET - мала библиотека која може да го олесни развојот на проектот. Бидејќи мојот примарен фокус е .NET, решив да се концентрирам на она што веќе го знам и добро го правам. Една идеја што ми падна на ум беше да се создаде библиотека за следење на влезните настани од тастатурата и глувчето.
Еден месец пред тоа, додека работев на десктоп апликација за Windows, се соочив со задачата да ги следам притискањата на копчињата на тастатурата за да извршам одредени дејства. Главната нијанса беше дека требаше да работи без разлика дали нашата апликација беше активна. Бидејќи во тоа време немаше готови решенија, користев мајчин P/Invoke повици и успешно го постигнав посакуваниот резултат. Во тој момент, не мислев дека и други програмери може да се соочат со овој проблем и дека мала библиотека што го решава овој проблем може да биде доста корисна.
Да, тоа не е библиотека што ќе промени нечиј живот, но тоа е првиот чекор кон создавање на нешто свое. Тоа е можност да стекнете драгоцено искуство и да потрошите време ангажирајќи се во нешто за кое сум навистина страстен, поради што решив да преземам акција.
Првиот чекор беше бура на идеи за функционалноста што би ја имала мојата библиотека. Сакав неговите можности да бидат што е можно пошироки, а притоа да останат достапни и погодни за корисниците. Целта ми беше корисникот да не мора да пишува повеќе од 3-5 линии код во повеќето сценарија.
За време на процесот на бура на идеи, дојдов до идеја дека ќе биде можно не само да се следи влезот туку и да се контролира. На пример, со код, може да се симулира притискање на копчињата или комбинации на копчиња, да се движи курсорот на глувчето, да се оневозможат одредени копчиња за системот да не реагира на нивните притискања, па дури и да ги смени врзувањето на копчињата. Сите овие функции беа имплементирани постепено преку ажурирања.
Веднаш штом го финализирав множеството функции, со ентузијазам почнав да се развивам. Пишувањето на кодот не беше особено предизвик, но се фокусирав на неговата структура и чистота, така што другите програмери можат лесно да разберат што е направено и зошто. За време на процесот на развој, неколку пати спроведов глобално рефакторирање, менувајќи ја организацијата и имињата, како и извлекувајќи делови од кодот во посебни класи. Посветив посебно внимание на одвојувањето на кодот зависен од платформата (како што планирав да создадам решение за меѓуплатформи во иднина) од самиот код на библиотеката. Ова би ја спречило потребата од препишување на целата база на кодови кога се оддалечувате од P/Invoke. Исто така, одвоив време да додадам XML коментари за да можат корисниците на библиотеката да разберат што прави секој метод или класа.
Откако ја завршив првата верзија на библиотеката, ја подигнав на NuGet (системот за управување со пакети за платформата .NET, сличен на npm или pip). Сакав да добијам некои повратни информации за да разберам дали некој е заинтересиран за овој проект и која насока треба да ја преземам понатаму. Пред да ја промовирам мојата библиотека, решив да создадам датотека README во складиштето на GitHub, вклучувајќи информации за целите на библиотеката и краток водич за тоа како да го користам.
Решив да ги барам моите први корисници на Reddit . Откако пронајдов неколку соодветни заедници, напишав краток пост со наслов „ Со отворен код C# библиотека за справување со настани со тастатура/глувче во апликациите за Windows UI “ Беше малку стресно и искрено, не очекував некои значајни резултати. Сепак, изненадувачки, се исплатеше. Еден од објавите доби околу 14.000 прегледи и приближно 30 коментари со позитивни повратни информации. Беше неверојатно чувство кое посакувам секој да го доживее: сознанието дека времето поминато на проектот не беше залудно. Иако не создадов нешто револуционерно, разбрав дека има луѓе на кои им е навистина корисно и кои се подготвени да ги поддржат моите напори.
Откако ги собрав сите повратни информации, решив да продолжам со развојот и да останам во контакт со најзаинтересираните корисници кои оставија коментари. Активно комуницирав со нив и ги слушав нивните барања за функционалност што би сакале да ја видат. Во текот на следниот месец, објавив неколку мали ажурирања, а потоа повторно се фокусирав на привлекување корисници.
На GitHub, постои посебен тип на складиште наречено „прекрасно“ - ова се збирки на врски и ресурси составени на одредени теми, на пример, awesome-dotnet . Мојата цел беше да ја промовирам мојата библиотека во секое од овие складишта. Иако ова не беше лесна задача - библиотека со 10-15 ѕвезди на GitHub не привлекува голем интерес - сепак успеав да влезам во неколку од нив. Ова значително го зголеми корисничкиот сообраќај и го привлече вниманието на мојот проект.
Во текот на понатамошниот развој наидов на многу мали задачи за кои понекогаш ми недостасуваше желба и енергија да ги завршам. Затоа, решив да искористам една од придобивките од развојот на отворен код - привлекување ентузијасти кои беа подготвени да помогнат во овие задачи. За да го направам ова, се свртев кон услугата Up-for-Grabs , која обезбедува листа на складишта со отворен код со активни проблеми за оние кои сакаат да придонесат. Откако го додадов моето складиште и создадов неколку прашања, веднаш добив барања за помош.
Откако мојата библиотека беше симната повеќе од илјада пати, решив активно да работам на документацијата. Од првото ажурирање, функционалноста на библиотеката значително се зголеми, а примерите во датотеката README веќе не беа доволни. Од сите можни опции, ја избрав наједноставната и најпристапната: создадов посебна датотека Markdown и ги детализирав сите класи што ги нуди библиотеката. Решив и да напишам мал водич за напредни корисници кои сакаат целосно да ги искористат можностите на библиотеката. На мое изненадување, еден дечко кој е специјализиран за пишување техничка документација дојде до мене и ја понуди својата помош. Тој ми помогна во правилно структуирање на материјалот и прецизно опишување на сите детали. Со негова помош брзо ја завршивме оваа задача.
Развојот со отворен код е одлична можност да се сретнете и да ја проширите вашата мрежа со други програмери. Досега во библиотеката придонеле девет луѓе од различни земји, меѓу кои САД, Австралија, Аргентина, Канада, Германија, Полска и други. Тие помогнаа во пишувањето на функционалноста, единечните тестови и документацијата. Покрај тоа, тоа беше прекрасна размена на искуства и пријатна комуникација. Можеби со некој од соработниците можеме да започнеме нов проект заедно.
И покрај тоа што имам работа и други обврски, сакам да продолжам со развојот и да издадам целосна верзија со карактеристиките што верувам дека треба да бидат вклучени во библиотеката. Моите идни планови вклучуваат да го направам меѓу-платформа и да го одвојам од специфични рамки за интерфејс.
Како заклучок, би сакал да резимирам сè што кажав. Никогаш не плашете се да пробате нешто ново и не стојте во место. Ако навистина го сакате програмирањето и сакате да растете како развивач, настојувајте да создадете нешто свое - без разлика дали тоа е мала библиотека или услуга. Никогаш не знаеш каде може да води. Во текот на развојот на оваа библиотека, среќавав не само во програмирањето, туку и во запознавањето луѓе и создавањето нови врски. Планирам да продолжам да се занимавам со развој на софтвер со отворен код, не само со унапредување на моите проекти туку и со придонес во библиотеките на заедницата - ова е исто така одлично искуство.
За оние кои сакаат да почнат да се занимаваат со развој на отворен код, го препорачувам овој водич !
Ако ви се допадна оваа објава, би ви бил благодарен доколку ја поддржите библиотеката со ѕвезда на GitHub!