Система самоосвіти IronBrain (beta)

Хотілося б поділиться з вами системою для самоосвіти, яку я розробляю вже протягом декількох років і яка вже принесла мені більшу величезну користь. Система представлена у вигляді веб-сайту.

У цій статті ви дізнаєтеся, звідки зародилися ідеї, що лежать в основі IronBrain, як вона еволюціонувала, як правильно її використовувати, а також конкретні практичні випадки — в чому IB може допомогти конкретно вам і наскільки сильно. Також докладно розповім, з якими проблемами зіткнувся при розробці і як їх вирішував, про деякі деталі технічної реалізації IB.

Відразу попереджаю — система націлена на дуже високий і якісний рівень навчання і підійде далеко не кожному.

P. S.: Проект повністю відкритий і вільний, не має ніякої комерційної спрямованості, зроблений від душі і викладений на ваш розгляд — раптом кому стане в нагоді…



Вступ
Відразу обмовлюся — цілком можливо, що сайт ironbrain.org впаде через хабра-ефекту чи буде сильно гальмувати в дні публікації статті, тому я передбачив запасний варіант — ви можете просто завантажити і запустити сервер у вас на ПК (Windows). Все-таки, головна мета цієї статті — донести ідею, а не реалізацію.

І ще — у статті використовуються терміни «Квиток», «Екзамен» і т. д. — але вони мають мало спільного з іспитами і квитками в університеті, з якими у багатьох людей пов'язані негативні емоції. Не забувайте, що IB — це система самоосвіти, ніяк не пов'язана з освітніми установами.

Як зародилася ідея
Щоб донести найбільш точно ідеологію програми і область її застосування, потрібно розуміти, навіщо вона створювалася, які завдання вирішувала і як розвивалася. Коротко про себе — мене звуть Ярослав і на момент публікації статті я навчаюся на 4 курсі СПБ ДУАП. Ідеї, які лежать в основі IB, зародилися багато років тому. Але про все по порядку.

Я почав захоплюватися програмуванням ще в далекому 2007 році. Тоді більшість вивчало мови самостійно і, як правило, за книгами або посібникам. Для початку я просто читав книги і перевіряв на практиці те, що в них написано. Але з часом прийшло усвідомлення неефективності даної методики. Я почав шукати більш продуктивні шляхи самонавчання — і згодом знайшов їх.

Знайомі порадили завести зошит 48 аркушів і записувати в неї короткий виклад того, що є в книзі. З початку ідея «конспектувати книжку» здавалася мені дивною і марною. Навіщо переписувати те, що вже є? Адже я завжди можу відкрити книгу і знайти потрібну мені інформацію. Книг багато і не завжди є можливість брати їх з собою? Електронні копії можна отримати без праці для більшості книг, а з появою електронних чорнил практично стирається межа — можна мати 1000 книжок у одному пристрої. І взагалі, сама ідея конспектів здавалася мені пережитком минулого — тоді книги було не дістати, доводилося їх конспектувати або зовсім переписувати.

Але я помилявся. Головна користь від конспектування книг була далеко не в цьому. Коли ви пишете конспект, ваш мозок переробляє інформацію і робить висновки. Він пропускає її через себе і записує в тому вигляді, в якому вона краще конкретно для вас. І ця перероблена інформація запам'ятовується значно краще. Особливо якщо ви в конспекті додаєте щось своє — виникли думки, неочевидні висновки або зауваження. Написання конспекту змушує вас думати і робити теоретичні висновки, що в кінцевому підсумку добре позначиться на практиці. В цьому і є головна користь. Користь номер два — якщо ви довго не використовували отримані знання, наприклад, з бібліотеки або мови програмування, вам істотно простіше згадати прочитаний матеріал.

Насправді, можна досягти приблизно того ж ефекту, роблячи конспект усно — читаючи і вдумуючись в прочитане. Так в 2010 я готувався до ЄДІ з фізики — без складання конспекту. Про що, до речі кажучи, пошкодував на початку першого курсу, так як перечитувати книжечку бажання не виникало, але освіжити в пам'яті основи — хотілося.

Багато років я, вивчаючи ті чи інші технології, вів з ним конспекти в паперовій формі — збереглися зошити з Assemler, Pascal, AcrionScript 2,3. Конспектування книг для мене було тоді крутим проривом у самоосвіті. Але потім я став відчувати, що чогось не вистачає. Перша проблема, над якою я почав думати — чому б не замінити паперові конспекти на електронні? Я спробував, але ніякого прориву там не було — doc або odt — документ це по суті та ж сама зошит, тільки нескінченно міцна і нескінченно легка — бери куди хочеш. Але ці властивості були не дуже то й потрібні. А от недоліки були — зошит все-таки було куди приємніше вести, та й очі відпочивали. Таким чином, електронні конспекти в традиційній формі у мене ніяк не прижилися.

Коли я готувався до першої сесії на першому курсі (це був далекий 2011 рік), переді мною постало завдання за короткий термін — всього за тиждень — вивчити алгебру на Вузівському рівні. Іспит обіцяв бути суворим, списати там вкрай важко. Частина матеріалу була в моєму конспекті лекцій, частина — довелося брати з книги. Коли я перечитував конспекти, звернув увагу, що лектор давав істотно більше, ніж було в списку питань до іспиту. Що, якщо б я збирався працювати інженером і поглиблене знання алгебри мені б знадобилося? Загалом, я глибоко задумався над цією різницею в обсязі пропонованого матеріалу. А також я помітив, що сам по собі підхід складання квитків дуже навіть хороший для навчання, причому може стане в нагоді для особистих цілей, наприклад у вивченні нових мов програмування або бібліотек до них. Квиток змушує думати. Підготувався я класичним чином, написавши велику частину квитків по заданому списку питань — і здав цей іспит на відмінно.

У другому семестрі першого курсу, коли у нас почався курс фізики, я задумався про те, щоб глибше вивчити її, а за одне і заздалегідь підготуватися до екзамену. Чому б не складати квитки по всім топикам, які зачитує лектор? І створювати більше запитань, які «витягують» весь матеріал, змушуючи його згадувати і обмірковувати? Я спробував складати їх у другій половинці зошити, але на папері це було вкрай незручно, було незрозуміло, який запитання до чого відноситься, а окремо переписувати весь матеріал не хотілося. Потрібна була програма, яка, крім усього іншого, вміє нарізати квитки випадковим чином, а також зберігає, пам'ятаю я цей квиток чи ні, щоб повторно його не видавати. Але я тоді не здогадався її зробити.

Коли влітку 2011 року я відпочивав на Кіпрі, до мене прийшла ідея створити універсальну програмку для зберігання документів особистого характеру і добавляющую потрібні мені функції, яких немає в Word/Writer. Крім усього іншого, я згадав про ідею конспектування на квитки, і вирішив, що її можна буде реалізувати на основі цієї програми. Вирішив назвати програму IronBrain. По початкової ідеї, програма повинна була синхронізувати знання вашого мозку з комп'ютером, нехай дуже наближено і не безпосередньо — через миша і монітор. Але ця загальна ідея не була реалізована тоді в тій мірі, яку я хотів. По суті, коли ви пишіть деякий документ, а потім перечитуєте його — ви синхронізуєте свої знання з ПК, але це дуже не ефективно. Якщо у вас багато документів, вам буде не цікаво просто їх всіх перечитувати з опеределенным періодом.

Еволюція IronBrain
На другому курсі я відразу ж приступив до роботи. Тоді я бачив IronBrain у вигляді суворої десктопної програми, яка працює миттєво швидко, сидить в панелі сповіщень і запускається з глобальних гарячих клавіш. Так я і зробив. Довгий пошук в інтернеті і дослідження показали, що найкращим вирішенням завдання буде використання C++/Qt. Під «кращим» я розумів, що програма буде кращою саме для користувачів — не буде вимагати встановлення сторонніх віртуальних машин, запускатися як чистий виконуваний файл і виглядати як більшість десктопних програм. При цьому Qt дає бажану кросплатформеність — я не хотів прив'язуватися до конкретної операційної системи. Я також дивився в бік Java/Swing, але відкинув цю ідею. Мені здавалося, що інтерфейси на Java будуть моторошно гальмувати.

Тоді я зіткнувся з двома великими проблемами — незнання С++ і незнання Qt. Саме відсутність того самого базового курсу З с++ — у мене не було по ньому конспектів і не знайшлося часу його нормально вивчити. За Qt довелося прочитати кілька глав з книги, щоб розуміти самі основи. В кінцевому підсумку, незнання С++ збільшилося на його складність, і я часом годинами сидів і намагався добитися елементарного — компіляції програми. Розробка йшла дуже повільно, і тільки до кінця семестру я представив щось робочий. Треба визнати, знання С++/Qt не сильно зросли в процесі розробки, особливо C++. Це до речі ще один наочний доказ, чому не треба вивчати мови типу С++ на ходу і краще витратити окремий час для навчання «по книзі».

Насправді, розробку уповільнювало те, що я не дуже добре уявляв, як повинна працювати моя програма. Я зробив дуже нерозумно і зробив просто великий масив об'єктів, які зберігали пропозиції, і при цьому була можливість ставити питання від одного речення до іншого. Ідея була така — спочатку користувач пише відповіді — тобто сам фрагмент конспекту. Потім програма змушує його ставити питання до кожної рядку, і, таким чином, більшу частину конспекту можна витягнути за допомогою питань. Але це була вкрай невдала ідея. У добавок до всього, програма часто вилітала з типовою помилкою «програма виконала неприпустиму операцію і буде закрита» — де були помилки з покажчиками. Однак основна ідея була реалізована і працювала, я сидів на QIronBrain пару місяців до початку 2013 року. Він вже тоді почав приносити істотну користь. Як він виглядав, можете подивитися на знімку екрана нижче.

Як виглядав QIronBrain



Потім я зрозумів, що мені потрібно було просто два RichTextEditor для питань і відповідей. Потрібно було кардинально змінювати архітектуру програми, в ідеалі — повністю переробити. Я так і зробив. Використовуючи ті ж невеликі знання З++/Qt, я менше ніж за тиждень з нуля написав працюючий прототип Examiner — выдрав з QIronBrain єдино успішну ідею. Саме цю реінкарнацію IronBrain я використовував потім більше року, створивши в ній близько 600 квитків по різним темам. Причому парадокс в тому, що я її взагалі не допрацьовував — використав у тому вигляді, в якому випустив першу версію. Вона майже ніколи не вилітала, вийшла вельми дубової і надійною. Дані, як і в QIronBrain, зберігалися у вигляді одного файлу XML. В якості основи використовувався клас QTextEdit, який дозволяв отримувати його вміст у вигляді HTML і будувати його на основі HTML.

Як виглядав Examiner



Все, що робив Examiner — створював квитки та ієрархію для них, а також дозволяв лінійно прогнати квитки з певного розділу. Цього було більш ніж достатньо. В середині 2013 року я вирішив вибрати певний еталонний мова програмування і глибоко його вивчити, т. к. мої знання були розкидані поверхнево і з різних мов. Спочатку я думав, що такою мовою стане С++. Проте після довгих роздумів, вдумливого читання холиваров, аналізу вакансій на різних сайтах і рейтингів, я прийшов до висновку, що мені потрібна Java. Сказано — зроблено. За пів року я прочитав і законспектував більше половини книги Шилдта, а також прогнав безліч різних тестів, починаючи від Quizful і закінчуючи Enthuware. До речі кажучи, з тестів я отримав майже стільки ж знань, скільки з книги, і це були розширені знання з тонкощів мови — я детально розбирав незрозумілі мені питання і становив квитки за ним. В сумі я створив приблизно 500 квитків по Java SE 6 і підняв свої знання на абсолютно новий рівень. Це дало мені можливість здати на досить хардкорних тренажері іспит «Java SE 6 Programmer Certified Professional», що дуже круто, а потім здати «Java SE 7 Programmer I» вже в реальному центрі сертифікації, що було зовсім не просто (так як він на основи), але відкривало шлях сертифікації Oracle по Java і можливість подальшої здачі більш крутих іспитів.

На початку 2014 року я захопився андроїдом і створив ще близько 100 квитків по андроїду. Треба визнати, андроїд вивчається по книзі не дуже добре. Або, може бути, я взяв занадто складну книгу. У будь-якому випадку, я б міг цілком успішно створювати квитки на основі отриманого або нагугленного досвіду, але Examiner був суворо иерархичен — я не міг створити квиток на порожньому місці і прив'язати його до кількох областях знань. В середині 2014 року я прийшов до висновку, що не завадить доопрацювати Examiner і пустити його в народ — написати статтю на хабре про все це справа. Я вирішив, що перепишу програму на Java/Swing і додам ряд зручних функцій, таких як пошук по базі квитків та додавання квитка поза ієрархії.

Приблизно за 2 місяці роботи я створив працюючий прототип JIronBrain, в якому були реалізовані нові функції і поліпшено багато всього. Однак я зрозумів, що здійснив фундаментальну помилку. Ті кошти GUI, які я використовував, вважалися далеко не найкращими. Коли я розробляв Examiner на Qt, виявилося, що бібліотеку QtWidgets, в якій знаходився дорогий мені QTextEdit, не збираються розвивати далі. На заміну приходить QtQuickControls, які не давали на той момент багато чого з того, що я хотів. І не відомо, коли їх доопрацюють до цього рівня. Я сподівався, що в Java/Swing не буде такого. Однак виявилося, що Swing також вважається застарілою бібліотекою і давно не допрацьовують, критичні баги не виправляються, а Oracle позиціонує JavaFX як заміну Swing. Я особисто зіткнувся з проблемою в JTextPane, коли користувач вводить кілька пробілів поспіль і вони губляться при setHtml(getHtml()). Звичайно можна все це милицями виправляти, але невже немає засобу краще? Я подумував переписати інтерфейс на JavaFX, але потім зрозумів, що це також буде критичною помилкою.

Як виглядав JIronBrain



Найбільш правильним рішенням було робити IronBrain у вебі. Як виявилося, вже досить давно існує аттрибут contenteditable, який дає мені той самий ідеальний RichTextEditor, який так хотілося. І HTML5 вже точно нікуди не подінеться. Причому цей RichTextEditor відмінно працює як під різними десктопними браузерами, так і під андроїдом. А Swing під Android запустити практично не реально. Цей факт мене дуже сильно зачепив, і я зрозумів, що мають на увазі, коли кажуть, що майбутнє за вебом. Веб-додаток це своєрідний трансформер — він може працювати в режимі клієнт-сервер, а можна запустити його як десктопну програму, не маючи виходу в інтернет.

Я дістав листок формату А4 і написав аналіз мого Java/Swing програми і які переваги я отримаю при переході на веб-архітектуру. Вони були досить істотними, починаючи від дуже перспективної технології до побудови GUI (HTML5), закінчуючи зручністю для кінцевого користувача — не потрібно нічого завантажувати, встановлювати і так далі. Я зрозумів, що має сенс переписати IronBrain ще раз. Четвертий раз. За помилку неправильного вибору технології довелося дорого заплатити часом і силами. Але перехід того варто.

І дійсно, HTML5 дав мені все і навіть більше. Це, по всій видимості, найдосконаліша в світі технологія для побудови GUI малої та середньої складності, хоча, враховуючи сучасні процесори і швидкі браузери, я думаю на HTML можна побудувати інтерфейс практично будь-якої складності. Я навіть і уявити собі не міг, що в ньому є дуже потужний вбудований RichTextEditor. Практично на всіх форумах, на яких я працював, потрібно спочатку ввести код, і тільки потім він візуалізується у режимі попереднього перегляду». До того ж, багато сайтів моторошно гальмують, і я думав, що моя система також буде гальмувати. Але розміщений на VPS WIronBrain працював теж практично моментально! До того ж, на крайній випадок я міг запускати його локально, тоді вже по швидкості роботи він буде таким же, як і десктопні програми.

Приблизно за пару місяців я з нуля розробив WIronBrain, з серверною частиною на Java/Spring, а клієнтської — на HTML5/CSS/JS. Стару базу перегнав у MySQL, ніж до речі, дуже задоволений.

Як виглядає WIronBrain



Ідея
Самоосвіта має величезне значення в нашому житті, особливо для IT фахівця. Якщо ви постійно вивчати щось нове, то напевно стикаєтеся з проблемою втрати цінної інформації — людині властиво забувати. Кожен намагається вирішити цю проблему по-своєму — наприклад за допомогою конспекту чи блокнота.

Я пропоную вам особливий формат зберігання знань — у вигляді квитків. Всі ваші знання і навички, практично весь ваш життєвий досвід можна розкласти у формі білетів. Що таке квиток? Це якийсь набір запитань і відповідей на них. Це можуть бути як теоретичні питання, так і завдання з розгорнутою відповіддю. Вам потрібно всього лише навчитися їх складати — і щоб це увійшло в звичку.

Якщо ви будете забувати що з певної області, ви можете нарізати квитки по цій області, складені вами ж і проганяти їх у вигляді тесту. Величезна перевага квитків над повторним прочитыванием книги або конспекту — вони змушують вас думати. Багато думати, згадувати і аналізувати. Ви перевіряєте самі себе — чи відповідає ваша відповідь задуманим і вибираєте, чи з'явиться цей квиток ще раз в поточному тесті. І після довгого роздуми над питаннями забутого квитка — ви легко його згадайте, подивившись відповіді.

Система IronBrain дозволяє автоматизувати створення квитків, організувати їх нарізку і пошук по них, а також безліч інших корисних функцій. Якщо ви що-то регулярно вивчаєте, ви можете перед кожним новим заняттям завдяки питань повністю згадати основні моменти минулого заняття. Можете дивитися на IronBrain як на вчителя, який перед кожним новим уроком накидає вам питання за минулий і роз'яснює, якщо ви десь помилилися. А також змушує вас заучувати основні моменти. Саме в цьому і є основна користь IronBrain. Навчання стане істотно цікавіше і приємніше, так як ви будете бачити свій прогрес і багато думати. Одне з найголовніших переваг IB — підвищення задоволення від навчання і як наслідок — крутий зростання продуктивності. Насправді, щоб відчути головні переваги IronBrain і побачити різницю з класичним підходом до навчання, потрібно всього 3-4 дні, кожен по 1-1,5 години. Просто спробуйте.

Тонкощі використання системи немає сенсу описувати в межах даної статті, можете почитати про них в розділі «Документація -> Керівництво користувача» всередині IB.

Конкретні випадки застосування
Вивчення мови програмування загального призначення
HTML/CSS/JS можна вивчити на ходу, без читання книг або керівництв (так роблять більшість фрілансерів), на рівні, достатньому для створення невеликих сайтів на замовлення. З більш складними мовами програмування, такими, як C++ або Java такий підхід не ефективний. Якщо ви будете вивчати їх по ходу розробки проектів, то ризикуєте наробити архітектурних помилок, за які потім дорого заплатите. Звичайно, все можна вивчити через практику і на своїх помилках — але на це потрібні роки, в той час як можна перейняти чужий досвід з книг істотно швидше.

Алгоритм наступний — берете книгу по C++/C#/Objective-C/Java або іншому промисловому мови. Відкриваєте IB, заходьте в розділ [Квитки]→[Групи] і там створюєте розділ для вашого мови і в ньому — розділ для книги. У ньому будуєте ієрархію — як вам зручніше — від розділу до розділу і підрозділів. У них вже безпосередньо самі квитки. Читаєте книгу, конспектуєте теорію, потім практикуєтеся — вводите код і граєтеся з ним, міняйте його і дивіться на результат. Обов'язково перевіряйте ВЕСЬ матеріал подається на практиці, так розкриваються помилки, цікаві моменти і корисні особливості. По всіх добутих знань і тонкощів, які ви виявили — складаєте квитки, типу «як написати таку програму, які там тонкощі». Причому області для квитків НЕ проставляєте. Краще для кожної глави вкажіть область за назвою мови. Це дозволить вам потім, при необхідності, витягнути цей набір квитків і з'єднати його з квитками, отриманими дослідним шляхом по цій же темі і з іншими книгами.

Обов'язково кожен раз перед новим заняттям проганяйте квитки, які ви створили в минулому занятті — тоді знання будуть істотно краще вкладатися, буде відбуватися переосмислення багатьох речей. Саме це повторення квитків — і є головна користь від IB в даному конкретному випадку. Ваше навчання програмуванню буде істотно більш ефективним і приємним. Користь номер 2 — через пошук ви можете просто легко знайти ваші квитки і використовувати базу як особистий FAQ.

Досить часто трапляється так, починаєш читати нову складну голову, причому складну саме концептуально — нові поняття, підходи та принципи. Часом читаєш і просто не розумієш, що і навіщо. IB допомагає поступово «взяти» такі глави без особливої праці. Потрібно лише скласти 3-4 квитка з теорією, хоча б з найпростішими визначеннями. А на наступний день — прогнати і вивчити ці квитки. Потім, продовживши навчання, ви помітите, що дуже багато чого прояснилося і навчання піде в гору. Виникає це тому, що ваш конспект — витримка теорії — дає якийсь «каркас» для вашого мислення, «основу», від якої ви можете відштовхуватися і розставити все на свої місця.

Використовуючи IB, я вивчив Java SE на досить пристойному рівні і досі використовую ці знання по кількох напрямках. Було складено близько 300 квитків по книзі «Шилдт Java 7 повне керівництво». Це було зовсім не важко, як вам може здатися на перший погляд. І дуже продуктивно. В день потрібно займатися приблизно по 1,5-2 години, складаючи близько 4-6 квитків.

Вивчення пакета по роботі з графікою
У 2013 році мене цікавила тема створення ігор, хотілося створити свою маленьку інді-гру, нехай і не складну, але виконану від початку до кінця. Але незнання програм для 3D моделювання тягнуло назад. Зазвичай в таких випадках беруть окремої людини-дизайнера, але для початку хотілося самому спробувати цю область.

Ліцензійний 3D max коштував величезних грошей, а використовувати зламану версію і до того ж не кроссплатформенную мені не хотілося. Я побачив, що є гідна заміна — Blender — і вирішив вивчити його. Скачав дуже хорошу серію відеокурсів російською мовою за нього, став переглядати і експериментувати. А також — паралельно створювати квитки по отриманим знанням. Тоді QIronBrain не дозволяв вставляти знімки екрану, але мені вони були не потрібні. Досить було в тексті сформулювати запитання, наприклад «Як зробити екструзію полігону?» або «Як сколлапсировать три крапки?» — і відповіді у вигляді гарячих клавіш, або ж опис де знаходяться необхідні кнопки. Крім запитань-відповідей за елементарним тем я також ставив чисто технологічні питання-відповіді, наприклад «Як зробити чашку через 2D малювання і обертання на 360 градусів» — а потім опис алгоритму по пунктах. На навчання пішло приблизно 2 тижні, майже кожен день я займався в середньому 1,5-2 години.

Основи блендера я вивчив, але проект по створенню гри відклав на майбутнє, так як було багато інших завдань. І через півроку в новому семестрі у мене була курсова робота з комп'ютерної графіки. Ось тут то і позначилися величезні переваги IronBrain. Я відкрив Blender і зрозумів, що 60% вивченого не пам'ятаю в принципі, а ще 30% пам'ятаю дуже смутно. Півроку я не практикував 3D моделювання, та й я взагалі ні разу не практикував отримані знання — вивчив і забув. Що робити? Часу на навчання було витрачено пристойно. Переглядати ті ж самі відеокурси по другому разу було утомливо і непродуктивно. Звичайно, повторне вивчення матеріалу йде значно швидше — я б зміг переглянути і пригадати все це за тиждень — по 1,5-2 години щодня. Але був більш ефективний шлях.

Прогін квитків за Blender зайняв у мене приблизно 3 дні по 2 години щодня. Це в два рази менше, ніж якщо б я повторно дивився відеокурс. І в три рази приємніше, так як, знову ж, питання змушують думати. Я створив відмінні 3D моделі (для курсової) і без проблем здав її. З тих пір пройшов рік і я знову все забув, але якщо мені знову знадобиться Blender — зможу також легко його згадати.
У добавок до всього, пошук за вашим квитками в даному випадку дає великі переваги. Якщо у випадку книг ви ще могли завантажити електронну версію і шукати по ній, то для більшості відеокурсів текстовий пошук не можливий, а промотувати туди-сюди в пошуках потрібного фрагмента — досить стомлююче заняття.

Алгоритм такий — берете відеокурси (саме вони найбільш ефективні для вивчення графічних пакетів), створюєте в розділі [Квитки] новий розділ «Комп'ютерна графіка». В ній — розділ з назвою вашого пакету, наприклад, Photoshop, Gimp, 3D max і т. д. Там — розділ за назвою відеокурсу — і в ньому вже за розділами — розділи з квитками. Все аналогічно конспектування книги.

Підготовка до тестування
Коли я вивчав Java, після прочитання книги я вирішив заглибитися в тести. На сайті Quizful просто величезна колекція тестів з Java SE і в них укладено дуже багато знань і досвіду. Багато прикладів можна назвати надмірно складними, але тим не менше в них часом укладено практичний досвід, про який пишуть у книгах і який реально може стати в нагоді. В чужому коді і не таке можна зустріти. До того ж, Java добре стандартизована і 95% цих самих мовних «подколи» строго визначаються специфікацією мови. Якщо вони там визначено, значить комусь вони потрібні, чи не так?

Припустимо, ви вирішили тест на певному сайті і проводите роботу над помилками. Ви зустрічаєтеся з якимись новими фічами мови або його бібліотек, про яких не знали раніше. Відкриваєте IDE, експериментуєте. Тепер вам потрібно кудись записати цю фічу, щоб не забути. Вона може стане в нагоді вам на реальному тесті, або ж на співбесіді — там часто люблять питати всякі хитрощі. І нарешті, зустрічаються в тестах практично корисні моменти.

Але куди вам записати отримані знання, так щоб потім їх було легко згадати? На допомогу приходить IronBrain. Так, ви будете створювати квитки на основі квитків. Вам може здатися дивним на перший погляд, але це цілком нормально. У ваш квиток ви вкладаєте своє бачення і розуміння проблеми. Повторюся — не можна просто копіювати питання і відповідь з тіста. Потрібно самому досліджувати його, перевірити, продумати, переробити і зробити свій квиток. Кожен користувач IronBrain нехай створює свою колекцію квитків. Це записна книжка — ви не зможете користуватися чужою.

Алгоритм суттєво відрізняється. Тест-це не книга і не відеокурс. Він не має структури. Там все випадковим чином перемішано і немає сенсу намагатися звести це до ієрархії. Просто створюйте незалежний квиток, натиснувши в меню "+Квиток". Але не забудьте прив'язати його хоча б до однієї галузі.

У теорії цей підхід можна використовувати для підготовки практично до будь-якого тесту з будь-якої теми. Або для вилучення з тестів корисної практичної інформації, якщо вона там є.

Зберігання фрагментів вихідного коду
Коли-то давно я опублікував на хабре статтю про CodePaster. Я сам довго користувався цією програмою, але з часом забив на неї, коли зробив нормальний пошук в IB. Так, фрагменти коду можна зберігати у вигляді квитків. І накидати до фрагменту список запитань який-небудь, за загальною логікою роботи або конкретних методів. І це, до речі, реально допомагає, коли використовуєш пошук — список питань пояснює, що робить цей код. Тобто фрагменти коду можна просто додавати квитки, потім НЕ проганяти їх у вигляді тесту, тільки знаходити через пошук.

Супер підготовка до співбесіди [Припущення]
Припустимо, ви — програміст мобільних додатків. Ви вивчили Java SE за деякою книзі і склали багато квитків по ньому. Ви вивчали андроїд за видеокурсу і також складали квитки. Потім ви піднімали свій VPS сервер і отримали дуже багато корисних практичних знань з Linux — вирішивши через пошукову систему і сторонні сайти більшу частину проблем адміністрування. І всі ці знання ви також звернули квитки. Потім ви робили проект «для себе» під андроїд, і в процесі розробки натрапили на безліч речей, про які не написано в книжках та на курсах — як по Java, так і по андроїду. Всі ці практичні навички ви також перегнали в квитки. Кожен квиток, який ви створювали, так чи інакше входив в яку-небудь область, прямо або побічно. Потім ви пішли на курси Linux і вам там розповіли безліч цікавих речей, які ви потім вдома перевірили і перегнали в квитки. Потім ви прочитали кілька цікавих статей на хабре про Git і дещо відзначили для себе кілька нових квитків.

Підсумок — у вас є такі IB-області — Java SE, Android, Linux, Git — і в кожній цій області знаходяться квитки. Області іноді можуть перетинатися — коли квиток зачіпає унікальні знання з обох областей. Ви дивитеся вакансії і знаходите серед них ті, які приблизно відповідають вашим знанням, наприклад, вакансія в певну компанію MobileMegaSoft.

Ви створюєте IB-напрямок, який включає всі ці області і називаєте його «MobileMegaSoft direction». Відтепер воно включає ВСІ квитки, які ви до цього складали і включали в ці області. І найголовніше — обчислює відсоток квитків, які ви пам'ятаєте на даний момент, а також дозволяє проводити нарізку тих квитків, які ви, швидше за все, забули. Ви можете, припустимо, за пару тижнів, кожен день по пару годинок, нарізати і проганяти ваші квитки, згадуючи ваш досвід, а також прочитане в книгах і почуте на курсах. Всі ці знання будуть об'єднані у вашій голові докупи, і крім того під час повторення у вас з'явиться інший погляд на багато речей і нові ідеї, розуміння того, що раніше здавалося каламутним. Цілком можливо, ви навіть зробите нові висновки і отримаєте нові знання за рахунок повторення старих. Не дарма кажуть, що повторення — мати навчання. IronBrain дозволяє «підняти в повітря» усі ваші знання, які ви накопичували роками по тим чи іншим темам.

Таким чином, ви отримуєте практично ідеальну підготовку до співбесіди. Принаймні, вона повинна бути такою в теорії. Я поки що студент і не влаштовувався у великі компанії, а на дрібні підробітки отже брали. Тому я не можу сказати, що мене взяли в таку круту компанію бо я готувався через IB. Може бути, через кілька років, коли я закінчу університет, я спробую це зробити.

Будь-яка робота, яка вимагає великих знань [Припущення]
Уявіть, що ваші знання — це літаки на аеродромі. Якщо ви ними не користуєтеся довгий час, вони простоюють без діла і з часом приходять в непридатність. Раптом вам потрібно підтримувати весь ваш флот в повітрі? При традиційному підході це вимагає дуже великих трудовитрат і зусиль…

Всі теоретичні і практичні знання можна розкласти у вигляді квитків. Не важливо, який джерело у цих знань — вас хтось навчив, ви навчилися по книжці, дійшли до цього самі чи вичитали це на якомусь форумі. Наведу простий приклад. IT-фахівця потрібно завжди знати дуже багато. І тут IB може суттєво вам допомогти. Якщо ви працюєте програмістом, як правило ви маєте справу з великим стеком технологій. І для кожної технології ви можете створити IB-область, і створити IB-напрямок, який збирає всі сфери, необхідні для вашої роботи. Таким чином ви окресліть безліч квитків, що містить необхідні вам знання для вашої роботи. Так, ці знання можуть бути надмірними, ви можете використовувати тільки 10% з усіх повторюваних знань. Але ця надмірність неминуча і природна. Щоб зробити правильний вибір серед трьох бібліотек, програміст повинен знати хоча б на рівні основ всі три бібліотеки. А помилка вибору, як відомо, може дорого обійтися.

IronBrain дозволяє підтримувати певний набір знань постійно «в повітрі». Функція нарізки дозволяє з певної множини квитків вибрати випадкові, але вибрати з тих, які ви не пам'ятаєте. І коли ви відповідаєте кожен квиток — ви самі вибираєте, коли його згадувати, через день, місяць, рік і т. д. Треба визнати, я сам створив напрям «IB Developer» і включив до нього області Java SE, Tomcat, HTML, JS, CSS і Linux. Коли я дізнаюся щось нове — я додаю квитки у відповідні області. Проте я поки що не зміг круто застосувати цю технологію нарізки, і не беруся стверджувати, вона допоможе вам чи ні. Якщо ви зможете — обов'язково напишіть про це. У IronBrain є бета-функції, і це одна з них.

Я чув, що робота юриста передбачає знання теорії в дуже великому обсязі і від цього обсягу безпосередньо залежить успіх роботи. Хочу зробити припущення, що IronBrain можна дуже ефективно використовувати для вивчення юридичних наук при роботі в цій галузі. Але це, знову ж таки, припущення, і я можу помилятися. На даний момент у мене немає знайомих, які використовували IB ефективно в цьому напрямку. Аналогічне припущення зроблю для медичних наук…

Технічна реалізація
Я дуже довго думав над вибором Java VS PHP для серверної частини IB. Цей фундаментальний холівар, який, як і Офіс VS Фріланс, не зважився всередині мене і, можливо, не вирішиться ніколи. Ну, хіба що, якщо я закінчу навчання в університеті і спробую себе повноцінно в обох напрямках. Я спробував вибрати сторону Java і збираюся будувати на ній свою майбутню кар'єру, однак я не знаю, чи правильне рішення я зробив. PHP відкриває, як мені здається, фантастичні можливості для фріланса, яких немає у Java. Може бути, варто було вибрати PHP. Але я на пристойному рівні знав Java і вибрав саме цю платформу для серверної частини.

IB заснований на Java/Spring/Hibernate. Це класичний стек, який використовується досить часто. Я приблизно за 2 тижні вивчив самі ази Spring і Hibernate. Це дуже складні промислові технології, і у мене не було часу і можливості, щоб нормально їх попрактикувати де-небудь, тому, швидше за все, там повно косяків, архітектурних і не тільки. Щоб вивчити їх, потрібні роки, як теорії, так і практичної роботи в компаніях. Так що не судіть строго.

Колись у мене була традиція відкривати вихідний код сайтів від друзів веб-програмістів і говорити, як там все криво і косо. Зараз, коли я по-суті випустив свій перший сайт, я розумію, що мій фронтенд побудований, можливо, навіть гірше, ніж це було у друзів веб-програмістів. HTML/CSS/JS вимагають окремого вивчення і копіткої роботи, а я спеціалізуюся, швидше, на серверній частині, ніж на клієнтській. Може бути, варто використовувати бібліотеки типу GWT, або хоча б AngularJS підключити. Але я робив тонкий клієнт на традиційному HTML/CSS/JS + JQuery. В архітектурному плані код просто жахливий, але я не знав, як зробити по-іншому, коли починав розробку.

Я б міг випустити JIronBrain як десктопное додаток з інтерфейсом на Java/Swing. Там було б значно важче докопатися до коду, але програма не отримала величезних переваг веб-додатки. Тому я заклав її основи саме в вебі.

Як би там не було, поточна реалізація WIronBrain, не маючи найкращу архітектуру клієнт, працює КРАЩЕ і КРУТІШЕ, ніж всі попередні реалізації. HTML5 дав мені просто фантастичні можливості — починаючи від властивості contenteditable і закінчуючи підтримкою веб-сокетів. Ще раз повторюся — поточна версія IronBrain, хоч і бета, але вона відмінно працює, якщо її правильно використовувати та її вже можна застосовувати для самоосвіти.

В якості використана СУБД MySQL, і всі дані зберігаються в ній. Вельми цікавий факт — у вихідному коді немає жодного рядка, написаної на SQL. Вся робота з БД йде через прошарок ORM Hibernate і це, треба визнати, дуже зручно. Таким чином, проект не прив'язаний до конкретної СУБД і в теорії його можна використовувати з будь-якої реляційної СУБД. А сам сервер піднято на бюджетному VPS під управлінням ОС Debian.

Висновок
Прошу вибачення, якщо стаття вийшло великий, я просто хотів викласти на максимум все, що пов'язано з IB. Давно хотів, до речі, написати цю статтю…

Якщо вам вийти застосувати IronBrain в якій-небудь з сфер вашого життя, обов'язково напишіть мені вашу історію у всіх подробицях kciray8@gmail.com. Можете зробити це анонімно або ж вказати, щоб я не викладав її в публічний доступ. Але, в будь-якому випадку, буду радий будь-яким відгукам.

Крім того, мені було б дуже цікаво почути про вашу особисту систему самоосвіти, як ви навчаєтеся, за якими методиками і так далі. Пишіть…

З найкращими побажаннями, Ярослав aka KciRay.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.