Как я тесты по программированию делал, мой маленький TIOBE и немножко долларов

Изучать программирование просто читая статьи и книжки не очень интересно и продуктивно. Нужна практика, причем желательно интересная и полезная. Идея появилась спонтанно, аналогов не нашел. Так я решил сделать мобильной приложение c тестами по программированию. О том где я возьму контент для него я тогда не думал, если бы думал, то наверное его бы не было.



Все готово, осталось самое легкое


С кодом особых проблем не было, начал на Java, потом перешел на Kotlin. Писать код на Java мне нравилось, на Kotlin стало еще интереснее. А вот с пользовательским интерфейсом пришлось помучиться. Времени на все эти графические нюансы, подбор цвета и размеров было потрачено не мало, чего только стоит сделать иконку для приложения если с дизайнерскими способностями не очень. Хотя казалось бы, в приложении всего-то три фрагмента и несколько активити.

Иконка получилась такой:



Когда каркас приложения был готов и оставалось наполнить его контентом наконец-то возник вопрос: где его взять? Да все просто, на фрилансе сделают!

Ай-да хитрый пакистанец


Как потом оказалось я тоже тот ещё жук. Разместил объявление на бирже, говорю: я вам 10 долларов, вы мне 100 вопросов. Много индийцев и пакистанцев рвалось в бой. Выбрал одного. Прошло несколько часов, он мне говорит, что все готово. Я счастлив, деньги ему, вопросы мне. Так у меня появились вопросы по двум языкам программирования.

Разочарование пришло быстро. Все вопросы были скопированы с одного из сайтов. До этого я сам их оттуда хотел позаимствовать, но потом от этой идеи отказался. Пишу пакистанцу, он сознался, говорит, что мало денег, поэтому и скопировал. Я ему начал объяснять, что он не прав, зачем соглашался, если мало? Деньги отдавать не хотел, пока я ему не сказал, что я сообщил администрация этого сайта об инциденте и они интересовались его личностью, и в связи с этим у него могут возникнуть проблемы с фрилансом. Конечно никому я ничего не сообщал, но мой счет пополнился обратно.

И тут началась самая сложная эпопея. Я начал составлять вопросы сам. Ладно с теми языкам, с которыми я имел небольшой опыт работы, а вот с остальными… Открывал документацию и изучая ее, составлял вопросы, если вопросы делал с листингом, то компилировал и смотрел результат. Каждый вопрос проверял. Особо понравилась документация на PHP, там прям с комментариями пользователей, в них очень много готовых вопросов.

В итоге сделал более 1000 вопросов по 11 языкам программирования. Только вопросы уровня Senior были где-то, да простят меня их хозяева, украдены, в основном на stackoverflow, некоторые даже на хабре.

Это было очень муторно. Я понял, что 10 баксов — это действительно сказочно мало для такой рутины. Кроме того, с целью подсветки синтаксиса для удобочитаемости, каждый вопрос и листинг я сопровождал соответствующими html тегами (разные цвета, курсив, отступы и.т.д.), это было еще муторнее и совсем не интересно. Но цель была поставлена и бросать не хотелось.

VPS на python


В качестве сервера был выбран VPS за 2.5 доллара в месяц. Написал небольшой API для получения вопросов. Все мои сочинения доступны по следующим ссылкам:

Список всех тестов

Результат:

{
    "date": "2017-05-16 10:57:41", // дата создания
    "id": 1, // id для идентификации вопросов
    "name": "Android", 
    "questions_number": 61, // количество вопросов
    "theme": "emerland", // цветовая тема, используется в мобильном приложении
    "updated": "2018-01-01 09:17:33" // дата обновления вопросов (например исправлена ошибка в вопросе)
}

Список всех вопросов

Результат:

{
    "answer": [
      2
    ], // ответ
    "code": "", // если вопрос с листингом, формат кода - html для подсветки синтаксиса
    "date": "2017-10-22 09:32:11", 
    "id": 1121, 
    "level": 0, // сложность вопроса (0, 1 или 2)
    "options": [
      "init_block", 
      "block", 
      "init", 
      "constructor", 
      "initial"
    ], // предлагаемые варианты ответа
    "question": "Which keyword is used for initializer blocks?",
    "quiz_id": 10, // id теста
    "type": "single_select", // тип вопроса (один или несколько вариантов ответа)
    "updated": "" // дата обновления вопроса
}

Немного статистики


На всё про всё ушел 2017 год. Конечно не целый год я писал код, если в среднем посчитать, то может тратил 1-2 часа в день. Да и то, разрабатывал дома, по вечерам, в кругу семейства. Бывали месяцы, вообще не садился за компьютер (командировка или еще что), бывали недели по 5 часов, а то и весь день только и сидел за клавиатурой.

На момент написания статьи приложение имеет 7000 установок, активных — 3000. В среднем за сутки — 50 установок. На старте потратил 2000 рублей на рекламу в AdWord. Отзывы и установки не покупал. Из 59 оценок около 10 — это я и мои знакомые.

Мой маленький TIOBE


С помощью аналитики Firebase я собираю небольшую статистику по популярности тестов на различных языках. На 7000 установок она представлена ниже. Тройка лидеров практически такая же как и на TIOBE (май 2018).



Монетизация


Изначально планировал сделать 10 бесплатных вопросов в каждой категории, остальное за деньги. Но от этой идеи отказался. Сначала не было даже рекламы, потом решил добавить. Реклама появляется в начале и в конце теста. На момен написания статьи доход от рекламы составил 35 долларов (всего 23 000 показов) + 10 долларов за 10 покупок отключения рекламы. За первый месяц доход от рекламы был около 2 долларов, сейчас около 10, прирост примерно 2-3 доллара в месяц. VPS у меня за 2.5 доллара, поэтому вышел на самоокупаемость:)

Хаброопыт


На хабре была статья, в которой рассказывалось о том как реализовать временное отключение рекламных баннеров за просмотры рекламных видеороликов. Изначально я хотел реализовать такой же функционал, но пошел немножко по другому пути: так как у меня есть еще одно приложение в магазине, то я предлагаю вариант бесплатного отключения рекламы на одни сутки взамен на скачивание моего приложения. Такую возможность добавил недавно, поэтому статистики по переходам и установкам пока нет.

P.S. Если вы не жадный и у вас есть интересные вопросы по какому-либо из языков программирования или вы найдете ошибки в моих вопросах, пишите, обязательно добавлю ваши и исправлю свои.
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 12
    +1
    Кроме того, с целью подсветки синтаксиса для удобочитаемости, каждый вопрос и листинг я сопровождал соответствующими html тегами (разные цвета, курсив, отступы и.т.д.), это было еще муторнее и совсем не интересно.


    Можно же взять что-то типа highlight.js
      0
      Спасибо за наводку, интересная штука, но немного не то. Здесь они подсвечивают с помощью классов и CSS стилей. Мне это не подходит, нужны именно встроенные теги со свойствами.
      0
      А ссылку на приложение или его название размещать запрещено? Или не модно? Или это квест такой — «найди мое приложение, но название я тебе не скажу»?
        0
        Я ссылку увидел на сайте http://173.199.124.49/
          0
          Не сразу нашел правильную ссылку
            +1
            Т. е. это все-таки квест… И Вы его не прошли — ссылка ведет на приложение «PassBase Менеджер паролей»
              0
              Виноват, исправил
            +1
            Это правила модерации, для новичков. Хотя они на мой взгляд странные. Я сначала думал, что размещать название нельзя, потом посмотрел пост школьников, которые сделали прибыльную игру, там название игры было, а пост также прибыл из песочницы. Я подумал, что так можно делать, вставил название, но модерация не пропустила. В комментариях можно: Coding Quiz
            0
            Тест на html?
              0
              Не понял вопроса. Но вопросы по html в приложении тоже есть.
                0
                С помощью аналитики Firebase я собираю небольшую статистику по популярности тестов на различных языках.

                Вот это меня и удивило вкупе с HTML, понятно когда тесты пишутся на Java или Python…
              0
              Человек стартует тест и у меня это регистрируется в статистике, я ничего не выдумывал. При чем у меня предусмотрена форма обратной связи если в вопросах обнаружена ошибка, так вот в вопросах по html их тоже обнаруживают и шлют письма.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое