Connect with us

Программирование

50 вопросов и ответов для собеседования iOS-разработчиков: часть 2

iOS-разработчик Дурул Далканат собрал распространенные вопросы с собеседования iOS-разработчиков и, конечно, дал ответы на них.

Анна Гуляева

Опубликовано

/

     
     

← Предыдущая часть

26. Что такое фасад (шаблон проектирования)?

Шаблон фасад обеспечивает единый интерфейс для сложной подсистемы. Вместо того, чтобы показывать пользователю набор классов и их API, вы открываете только один простой унифицированный API, делегирующий запросы соответствующим объектам системы.

27. Что такое шаблон декоратор?

Шаблон декоратор динамически добавляет поведение и обязанности к объекту без изменения его кода. Это альтернатива подклассу, где вы изменяете поведение класса, обертывая его другим объектом.

В Objective-C есть две очень распространенные реализации этого шаблона: категория и делегирование. В Swift есть также две очень распространенные реализации этого шаблона: расширения и делегирование.

28.Что такое шаблон адаптер?

Адаптер позволяет классам с несовместимыми интерфейсами работать вместе. Он обертывается вокруг объекта и предоставляет стандартный интерфейс для взаимодействия с этим объектом.

29. Что такое шаблон наблюдатель?

В наблюдателе один объект уведомляет другие объекты о любых изменениях состояния.

Cocoa реализует шаблон наблюдателя двумя способами: уведомлениями и наблюдением за ключевыми значениями (Key-Value Observing, KVO).

30. Что такое шаблон хранитель?

Хранитель сохраняет ваши данные в каком-либо месте, затем внешнее состояние может быть восстановлено без нарушения инкапсуляции; то есть частные данные остаются частными. Одним из специальных применений хранителя в Apple — это архивирование, с другой стороны, iOS использует хранитель как часть State Restoration.

31. Объясните MVC?

  • Модель — ответственна за данные домена или уровень доступа к данным. Они управляют данными, классами «Person» или «PersonDataProvider».
  • Представление — ответственно за уровень представления (графический интерфейс), в среде iOS — это все с префиксом ‘UI’.
  • Контроллер / Представитель / Модель представления – посредник между моделью и представлением, в целом отвечающий за изменения модели, реагируя на действия пользователя в представлении и обновляя представление с изменениями из модели.

32. Объясните MVVM?

Независимое отображение вашего представления и его состояния в UIKit. Модель представления вызывает изменения в модели и обновляет себя, и так как мы имеем связь между моделью и моделью представления, первая обновляется соответствующим образом.

Ваша модель представления фактически возьмет вашу модель, и сможет отформатировать информацию, которая будет отображаться в вашем представлении.

Существует более известная структура под названием RxSwift. Она содержит RxCocoa, которая является реактивными расширениями для Cocoa и CocoaTouch.

33. Сколько различных аннотаций доступно в Objective-C?

  • _Null_unspecified – мосты в Swift для неявно-развернутых optional. Это по умолчанию.
  • nonnull: значение не будет равно нулю; мосты к регулярной ссылке.
  • nullable: значение может быть nil; мосты к optional.
  • null_resettable: при чтении значение никогда не будет равным нулю, но вы можете установить его обнулить. Применяется только к свойствам.

34. Какие существуют ограничения JSON/PLIST?

  • Ваши объекты создаются, а затем сериализуются на диск.
  • Ограниченные варианты использования.
  • Мы не можем явно использовать сложные запросы для фильтрации результатов.
  • Очень медленная скорость.
  • Каждый раз, когда нам что-то нужно, нам нужно либо сериализовать, либо десериализировать его.
  • Это не потокобезопасно.

35. Какие существуют ограничения SQLite?

  • Нам нужно определять отношения между таблицами.
  • Мы должны вручную писать запросы для извлечения данных.
  • Нам нужно запросить результаты, а затем сопоставить их с моделями.
  • Запросы очень быстрые.

36. Какие преимущества у Realm?

  • База данных с открытым исходным кодом.
  • Просто внедряется.
  • Хранение объектов без копирования.
  • Это быстро.

37. Сколько существует API для определения местоположения с эффективной работой аккумулятора?

Их три:

  • Significant location changes — местоположение определяется примерно каждые 500 метров (обычно до 1 км)
  • Region monitoring — отслеживание событий входа/выхода из круглых областей с радиусом 100 м или более. Region monitoring является наиболее точным API после GPS.
  • Visit events — мониторинг посещений, то есть входов или выходов из конкретного места (дома или офиса).

38. Каково главное преимущество Swift?

Несколько главных плюсов Swift:

  • опциональные типы, которые предохраняют приложения от сбоев;
  • встроенное исправление ошибок;
  • замыкающие выражения;
  • Swift более быстрый в сравнении с другими языками;
  • типобезопасный язык;
  • поддержка сопоставления с образцом.

39. Объясните Generic в Swift?

Generic создают код, который не требует особых типов данных. не пропустите статью.

40. Объясните lazy в Swift?

Начальное значение ленивых свойств вычисляется только тогда, когда свойство вызывается в первый раз. Бывают ситуации, когда ленивые свойства оказываются очень удобны разработчикам.

41. Что такое defer?

defer — это ключевое свойство, которое обеспечивает выполнение блока кода, когда остальная текущая область не выполняется.

42. Как передать переменную в качестве ссылки?

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

43. Почему лучше использовать функции высшего порядка?

Функции высшего порядка — это функции, которые берут другую функцию в качестве параметра или возвращают функцию как результат. Swift определяет эти функции как CollectionType.

Самой базовой функцией высшего порядка является filter.

44. Что такое параллелизм?

Параллелизм разделяет пути выполнения вашей программы, чтобы они могли работать одновременно. Основные термины:

  • Процесс — экземпляр исполняемого приложения;
  • Поток — путь выполнения для кода;
  • Многопоточность — несколько потоков или несколько путей выполнения, выполняемых в одно и то же время.
  • Параллелизм — выполнение нескольких задач одновременно масштабируемым образом.
  • Очереди — это легкие структуры данных, которые управляют объектами в порядке First-in, First-out (FIFO).
  • Синхронные и асинхронные задачи.

45. Что такое Grand Central Dispatch (GCD)?

GCD — это библиотека, которая предоставляет низкоуровневый и объектный API для одновременного запуска задач при управлении потоками за кулисами. Терминология:

  • Очереди отправки. Очередь отправки отвечает за выполнение задачи в порядке FIFO.
  • Серийная очередь отправки. Последовательная очередь отправки запускает задачи по одной.
  • Параллельная очередь отправки. В параллельной очереди отправки выполняется столько задач, сколько возможно без ожидания завершения начатых задач.
  • Основная очередь отправки. Глобально доступная последовательная очередь, которая выполняет задачи в основном потоке приложения.

46. Читатели-писатели?

Одновременное чтение нескольких потоков, когда должна происходить запись одного потока. Решением проблемы является блокировка чтения-записи, которая позволяет одновременный доступ только для чтения и отдельный доступ для записи. Терминология:

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

47. NSOperation — NSOperationQueue — NSBlockOperation?

NSOperation добавляет немного дополнительных расходов по сравнению с GCD, но при его использовании мы можем добавить зависимость между различными операциями и повторное использование, отменить или приостановить их.

NSOperationQueue позволяет создавать пул потоков и использовать его для параллельного выполнения NSOperations. Операционные очереди не являются частью GCD.

NSBlockOperation позволяет создавать NSOperation из одного или нескольких замыкающих выражений. NSBlockOperations может иметь несколько блоков, которые выполняются одновременно.

48. KVC — KVO?

KVC означает кодирование ключевых значений. Это механизм, с помощью которого свойства объекта можно получить с помощью строки во время выполнения, вместо того, чтобы статически знать имена свойств во время разработки.

KVO означает наблюдение за ключевыми значениями и позволяет контроллеру или классу наблюдать за изменением значения свойства. В KVO объект может запросить уведомление о любых изменениях конкретного свойства: когда это свойство изменяет значение, наблюдатель автоматически уведомляется.

49. Объясните методы сопоставления с образцом в Swift?

  • Шаблоны кортежей используются для сопоставления значений соответствующих типов кортежей.
  • Типовые шаблоны позволяют вам создавать или сопоставлять типы.
  • Подстановочные шаблоны сопоставляют, игнорируя любой вид и тип значения.
  • Опциональные шаблоны используются для соответствия опциональных значений.
  • Шаблоны перечислений сопоставляют существующие типы перечислений.
  • Шаблоны выражений позволяют сравнивать данное значение с данным выражением.

50. Какие существуют преимущества Guard?

Есть два больших преимущества guard. Во-первых, это избегание большого числа утверждений if let, встроенных друг в друга. Во-вторых, это быстрый выход из функции, используя break или return.

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Программирование

Применение Google Cloud Vision API в приложении для Android

Android-разработчик Леонардо Пирро рассказал об инструменте компьютерного зрения от Google и его применении в приложениях.

Анна Гуляева

Опубликовано

/

Искусственный интеллект и машинное обучение — это одни из самых популярных тем в бизнесе. Google, лидер области, разработала набор инструментов для разработчиков, которые позволят создать новый пользовательский опыт с безграничными возможностями. Сегодня мы исследуем Google Cloud Vision API и его применение в приложениях Android.

Google Cloud Vision API

Это интересный API, который позволяет разработчикам анализировать изображения и контекстуальные данные, используя самонаводящуюся модель машинного обучения в дальнейшей эволюции — все в простом REST API. Благодаря этому API, мы можем получать контекстуальную информацию о данном изображении, классифицировать изображения на категории и подкатегории, достигая глубокого уровня детализации информации.

Для примера возьмем это изображение:

Vision API удивителен, он может распознать основной субъект фото (животное), определить его вид (собака) и породу (бигль). Более того, вы можете получить дополнительные данные о траве и горах на фоне.

Давайте взглянем на все функции Google Cloud Vision API:

  • Обнаружение меток: обнаружение категорий внутри изображения (пример выше).
  • Обнаружение откровенного содержимого: обнаружение неприличного или жестокого содержимого в изображении.
  • Обнаружение популярных логотипов.
  • Обнаружение ориентиров: естественных и искусственных структур в изображении.
  • Оптическое распознавание символов: обнаружение и извлечение текста внутри изображения, API даже распознает язык текста
  • Обнаружение лица: обнаружение нескольких лиц внутри изображения, а также других атрибутов, таких как эмоциональное состояние или головные уборы.
  • Атрибуты изображения. Обнаружение общих атрибутов изображения, таких как доминирующие цвета.

В нашем примере мы используем две функции: обнаружение меток и оптическое распознавание символов. Давайте посмотрим, как интегрировать Vision API в приложение Android. Мы создадим пробный проект, который позволит пользователю выбирать изображение из галереи и получать о нем информацию.

Внедрение Google Cloud API

Чтобы использовать API, мы должны внедрить его в Google Cloud Developer Console. Вот как это сделать:

  1. Создайте проект в Google Cloud Console или используйте существующий.
  2. Включите в проекте Billing. Если это ваше первое использование Google Cloud Console, вы можете начать бесплатный пробный период использования. У вас могут попросить данные карты, но денег не спишут.
  3. Включите Google Cloud Vision API, используя эту ссылку.
  4. Откройте в боковом меню слева секцию Credentials.
  5. Выберите в меню OAuth Client ID: установите тип приложения Android, введите название приложения и отпечаток SHA1 (если у вас его нет или вы не знаете, как его сгенерировать, введите эту команду в терминале keytool -exportcert -keystore path-of-your-keystore -list -v). Затем введите имя пакета вашего приложения: оно должно совпадать с именем, указанным в файле build.gradle вашего приложения, в ключе applicationId. В моем случае —  com.lpirro.cloudvision.

Мы готовы начать, давайте приступим к кодингу.

Cloud Vision API в действии

Создайте новый проект в Android Studio и помните, что имя пакета должно совпадать с названием в проекте в Google Cloud Developer Console. Затем откройте build.gradle и добавьте зависимости Vision API.

Теперь откройте AndroidManifest.xml и добавьте необходимые разрешения для сетевых вызовов и получения информации об учетной записи, необходимой для запроса OAuth.

Сейчас мы можем создать активность, которая позволит нам выбирать изображение из галереи и вызывать сервисы Cloud Vision, чтобы получать информацию об изображении.

Файл макета нашей активности очень прост: у нас есть один ImageView, используемый для отображения выбранного изображения из галереи, два TextView для отображения результатов и одна Button, используемая для выбора изображения из галереи.

Вот файл с макетом нашей активности:

Теперь остановимся на Activity. В этом примере мы используем библиотеку Google API Client для Java, и так как мы используем OAuth request, нам нужно получить от Google токен аутентификации. Давайте определим класс, который позволит нам получить этот токен.

Примечание: для простоты мы будем использовать AsyncTask для сетевых операций, но если вы будете использовать этот API в реальном проекте, используйте библиотеку, например, Retrofit, возможно, вместе с RxJava.

Теперь у нас есть вся необходима информация, чтобы вызвать Cloud Vision API и получить результаты.

При помощи метода setType() мы определим тип функции, которую хотим использовать: в нашем случае это LABEL_DETECTION и TEXT_DETECTION. Формат изображения, переданного API, находится в Base64. Как только результаты будут получены, они передаются методу getDetectedText (), который будет форматировать строку и фильтровать информацию, после чего мы можем окончательно отобразить их в интерфейсе.

И искусственный интеллект, и машинное обучение быстро становятся основой для цифровых преобразований на ближайшие годы. С внедрением Cloud Vision API Google предлагает первоклассный инструмент для интеграции этих технологий в повседневный рабочий процесс как пользователей, так и разработчиков. Прямо сейчас, та же технология, что мы видели выше, уже является частью основных продуктов Google, таких как «Фотографии», используемых в качестве помощи для организации и классификации нашей коллекции воспоминаний. Благодаря общей доступности этих инструментов тысячи продуктов смогут интегрировать эту удивительную технологию.

Комментарии
Продолжить чтение

Новости

В Humble Book Bundle распродажа книг по функциональному программированию

Распродажа книг по мобильной разработке у Humble Book Bundle закончилась, зато началась продажа книг по функциональному программированию от O’Reilly.

Леонид Боголюбов

Опубликовано

/

За один доллар вы можете получить электронные учебники по Scala, Elixir, Erlang, Clojure и функциональному программированию.

Если вы заплатит 8 долларов или больше, то получите еще 5 книг – например, по функциональному JavaScript и Haskell.

Следующая отметка это 15 долларов и еще 5 книг, одна из которых обучает программированию на Rust, а остальные раскрывают подробности разработки на Clojure, Scala, Haskell.

Функциональное программирование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).

Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательное изменение состояний (в значении, подобном таковому в теории автоматов). При необходимости, в функциональном программировании вся совокупность последовательных состояний вычислительного процесса представляется явным образом, например, как список.

Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния (в отличие от императивного, где одной из базовых концепций является переменная, хранящая своё значение и позволяющая менять его по мере выполнения алгоритма).

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

Комментарии
Продолжить чтение

Программирование

Динамическое изменение иконки приложения в iOS

Начиная с iOS 10.3 вы можете менять иконки приложения прямо из кода. В этом статья мы рассмотрим простой пример кода, который реализует эту возможность.

Анна Гуляева

Опубликовано

/

C iOS 10.3 Apple запустила для разработчиков возможность менять иконку приложения не только при заливке нового билда, но и при помощи кода. Хотя эта функция не такая гибкая, как в официальном приложении “Часы” с двигающимися стрелками, на основе неё можно создать отличную динамику. Давайте посмотрим, как это работает.

Теория

В документе Apple API стоит взглянуть на три вещи:

var supportsAlternateIcons: Bool { get }
var alternateIconName: String? { get }
func setAlternateIconName(String?, completionHandler: ((Error?) -> Void)? = nil)
  • supportsAlternateIcons — это свойство только для чтения, оно решает, может ли приложение менять иконку. Чтобы установить его как true, нам нужно добавить альтернативные иконки в файл info.plist.
  • alternateIconName — также свойство только для чтения, это название текущей иконки приложения. Оно обозначено как nil. если приложение отображает первоначальную иконку.
  • setAlternateIconName — функция, которая устанавливает отображаемую иконку. Если мы установим название на nil, приложение покажет первоначальную иконку.

Больше деталей — на официальной странице Apple API. Давайте зайдем в Xcode и начнем.

Подготовка

Сделаем три изображения с иконками: pichu.png, pikachu.png, raichu.png. Изображения бесполезно размещать в папке Assets, нужно поместить их в директорию проекта. Вот мой пример:

Затем нам нужно подготовить info.plist:

  1. Добавьте файлы иконок в Information Property List.
  2. Добавьте CFBundleAlternateIcons как словарь.
  3. Добавьте 3 вложенных словаря в CFBundleAlternateIcons: pichu, pikachu и raichu.
  4. Для каждого массива нужно определить два свойства: UIPrerenderedIcon и CFBundleIconFiles.

Больше деталей можно найти на странице Core Foundation Keys. Вот мой скриншот info.plist:

Пример кода

Предположим, у нас есть три кнопки. Нажмем на любую из них, чтобы приложение показывало соответствующую иконку.

// change app icon to "pichu"
@IBAction func pichuButtonDidTap(_ sender: UIButton) {
       changeIcon(to: "pichu")
}

// change app icon to "pikachu"
@IBAction func pikachuButtonDidTap(_ sender: UIButton) {
        changeIcon(to: "pikachu")
}

// change app icon to "raichu"
@IBAction func raichuButtonDidTap(_ sender: UIButton) {
        changeIcon(to: "raichu")
}

func changeIcon(to iconName: String) {
 // 1
        guard UIApplication.shared.supportsAlternateIcons else {
               return
 }

// 2
 UIApplication.shared.setAlternateIconName(iconName, completionHandler: { (error) in
 // 3
        if let error = error {
               print("App icon failed to change due to \(error.localizedDescription)")
        } else {
               print("App icon changed successfully")
        }
})
}

 


  1. Проверьте, поддерживает ли приложение альтернативные иконки.
  2. Измените иконку на конкретное изображение с соответствующим названием.
  3. После изменения иконки выведите сообщение с ошибкой или успешным завершением.

Запустите приложение и наслаждайтесь шоу.

Комментарии
Продолжить чтение

Обучение

«Где можно получить серфитекат?»: как мы тренировали всех школьников страны

Все школьники кодят — каждый год во всех школах страны проходит акция «Час кода». В этом году тренажер, который прошли 10 миллионов детей, разработали в Кодвардс в сотрудничестве с традиционными партнерами акции в России ZeptoLab, «Лабораторией Касперского» и Microsoft. Ниже — история Redmadrobot о том, как заинтересовать ребенка программированием, сделать интерфейс, понятный детям от 6 до 17 лет, и сервер, который выдержит нагрузки и атаки продвинутых восьмиклассников.

Redmadrobot

Опубликовано

/

Автор:

Одна из задач «Часа кода» — заинтересовать школьников и показать, что программирование и IT — не про ботаников и снеговиков в Excel. Тренажер должен быть одновременно увлекательным и похожим на рабочее пространство разработчиков. Поэтому основой тренажера стала игра, где дети могут быстро освоить базовые команды и увидеть результаты своей работы.

«Час кода» рассказывает, что программирование — это доступный инструмент и он не ограничивается только компьютерами, а используется в промышленности, медицине, энергетике. Самый простой способ показать, как это работает — дать детям возможность самим запрограммировать персонажа, – Галина Денина, руководитель проекта.

Традиционный партнер акции ZeptoLab предоставила персонажей своей игры C.A.T.S., в оригинальном сюжете которой котики собирают и бесконечно улучшают боевых роботов для победы в сражениях. Сражения нам не подходили — сражаться детей могут научить и на других уроках (физкультуре или трудах, например), а Мультиплеер долго и сложно разрабатывать, да и на полноценную работу с ним одного урока явно недостаточно — тут каждый должен программировать, а не размазывать в FIFA Гошана из параллельного.

Поэтому мы придумали новый сюжет и назначили главной героиней кошечку Элси, которая решила победить в Олимпиаде роботов. Главным преимуществом Элси в борьбе стало как раз участие ребенка — по легенде живой пилот, управляющий роботом, помогает быстрее обучить искусственный интеллект. Команде предстояло собрать необходимое оборудование, установить его на заводе и протестировать на полигоне. Для тренажера мы продумали 3 локации и 14 челленджей разного уровня сложности.

Четко в натуре ваще пацаны, – Антон, 9 лет (Дагестан).

Главной сложностью при проектировании интерфейса было то, что пользоваться им должно быть легко и интересно и первоклашкам и ученикам старших классов, при том что уровень подготовки даже в одном классе может отличаться. К тому же, в каких-то школах детям мог подсказывать учитель информатики, а где-то весь процесс они осваивали сами. Изначально дизайн для акции делался на основе решений, разработанных для актуальной на тот момент версии платформы Кодвардса, но в процессе решили опробовать новую, которую только готовили к внедрению в основной продукт. Вот так смело бета-тест апдейта мы возложили на школьников со всей страны. Ключевым отличием был переезд главных “управляющих” кнопок на игровое поле. Нам важно было удержать внимание детей и вовремя переключать их фокус с панели, где пишется код, на игровое поле. И не забыть, что мониторы в классах информатики могут быть очень разными. Сам код, написанный детьми, напоминает тот, который они, возможно, будут писать в будущем. Мы посмотрели, как выглядит интерфейс для написания кода у наших разработчиков iOS и Android, какие цвета используются в среде разработки, и перенесли в тренажер, сделав их чуть более детскими. Черный фон для кода также выбран неслучайно — так меньше нагрузка на глаза.

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

Важно, что мы не ведем пользователя через уровень, показывая, что ему делать. Мы объясняем значение каждого действия, чтобы он освоился и в дальнейшем осознанно его использовал. Так, первое, что ребенок видит на уровне, это подсказка: «Выбери, кто будет выполнять действие». Он нажимает на соответствующую кнопку, следом появляется новая подсказка: «А теперь выбери, что робот будет делать», «теперь запусти программу». По мере появления новых команд для управления объектами появляются и новые подсказки, – Александр Седнави, руководитель разработки.

Язык, на котором программируют дети в «Часе кода», содержит только объекты, методы и ключевые слова. Команды в редакторе кода набираются построчно по формуле «объект (кто/что должен делать?) — метод (что именно делать?) — аргумент (как делать?)».

Для каждого из слагаемых кода в интерфейсе есть соответствующая кнопка, связанная с другими составляющими формулы. То есть написать команду неправильно, например, указав 2 объекта или применить сразу 2 метода, нельзя. Такая модель помогает сразу заложить правильную модель поведения и избежать ошибок в будущем.

Сами мы писали бэкенд тренажера на Go и верстали фронт на JS, хотя изначально все работало на Python. Увидев, что серверу с трудом дается запланированное количество обращений в секунду, ребята за ночь переписали всё с Python на Go, и по итогам тестирования сервер держал в три раза больше запросов, чем было запланировано.

Вместе с партнерами из Microsoft и «Лаборатории Касперского» мы запустили систему, в которой входящая нагрузка распределялась между серверами равномерно, а в случае необходимости предусмотрели возможность подключения дополнительных мощностей.

Мы также предусмотрели защиту, чтобы даже самый продвинутый старшеклассник не смог взломать тренажер и сайт, а также защитили систему от DDoS-атак — подозрительные источники автоматически отключались.

За время акции через тренажер прошли 10 миллионов ребят со всей страны — и система отработала без сбоев.

Благодаря этому у человека возникает побольше ума, – Дарина (Тыва), 8 лет.

Перед запуском мы протестировали каждый из 14 уровней: сначала пользователи Кодвардса, а потом в ходе закрытого бета-тестирования тренажер до старта акции увидели несколько десятков детей в заданных возрастных категориях. После прохождения тренажера старшие школьники и родители младших заполнили анкету — и это также помогло нам устранить последние баги перед боем.

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

Комментарии
Продолжить чтение

Постеры для разработчиков

Наша рассылка

Каждому подписавшемуся - "1 час на UI аудит": бесплатный ускоренный курс для разработчиков!

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.