Русский
Русский
English
Статистика
Реклама

Новичкам

Библиотека Frontend-developer, часть 1 Основы

17.12.2020 16:16:33 | Автор: admin

Предисловие

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

Многие, возможно, зададут вопрос: "А зачем книги? Есть же браузер, не?". Безусловно, разработчик должен уметь пользоваться поисковой строкой, уметь искать, и, наверное, самое главное - уметь правильно задавать вопросы, но книги нужны для более глубокого понимания того, с чем вы работаете. Книги позволяют взглянуть на некоторые вещи с "академической" стороны.
Мы можем провести аналогию с образованием в высших учебных заведениях. В любом ВУЗе мы читаем книги, которые были написаны кандидатами технических наук и профессорами, чтобы потом сдать сессию, получить хорошую стипендию и жить дальше до следующей сессии, повышая сложность материала на каждой контрольной точке. Теперь смотрим на сферу и видим, что мы читаем академический материал, после идем на собеседование, удачно его проходим, получаем желанный оффер, а после повышаем свою квалификацию к следующей контрольной точке (новому рабочему месту или новой должности). В принципе, с алгоритмом мы разобрались. Идем дальше.

Сейчас кто-то скажет, что мы читаем книги только для собеседований, но на самом деле это не так. Конечно, чтобы решать задачи на всплытие или удаление всех дубликатов в массиве книги не нужны - достаточно браузера или опытного разработчика на habr, который в своей статье распишет что да как. Но вот оценка решений, подбор оптимального решения и оптимизированной реализации, которая не требует потом десятки часов рефакторинга - тут могут помочь только книги в связке с опытом разработки. Скажем прямо - книги дают более глобальное понимание всей frontend-разработки, глубокое понимание работы сложных и примитивных механизмов в языке, умение оценивать правильность решения проблемы на основе тех же самых паттернов проектирования, делать код более читаемым, более оптимизированным.

Каждый frontend-разработчик получает высшее самообразование посредством чтения таких материалов, постоянного обучения, постоянной самокритики. Я с уверенностью могу сказать, что человек, который спустя 10 лет недоволен своим кодом, несмотря на все старания и усилия освоить технологию - хороший разработчик.

Дэвид Флэнаган "JavaScript. Подробное руководство"

Не буду прикреплять картинки, так как они слишком сильно удлиняют страницу. Обойдемся просто небольшим описанием.

Дэвид Флэнаган - https://twitter.com/__DavidFlanagan (его твиттер) автор книг по Ruby, Java и JavaScript.

Его книга "JavaScript. Подробное руководство" стоит вашего внимания, только потому, что там есть все. Нет, это не преувеличение. Уделите внимание первым главам про типы - очень хорошо описано, как преобразуются типы в js. Если и найдете в интернете что-то подробнее по типам, то будьте уверены - статья в интернете написана на основе этой книги. Очень хорошо описаны главы про js в браузерах, стоит прочесть, и, как сказал мне мой тимлид с прошлой работы - законспектировать. Стоит обратить на эту книгу внимание как только вы попали в frontend, и постепенно, повышая свои скилы на работе, читать этот манускрипт.

Как видите, здесь не указывается издание, потому что на 2020 год - их 7. Каждое издание рассказывает о своем стандарте JS, но самое ожидаемое на рынке - последнее, седьмое. На Российском рынке его с декабря можно купить, до этого мы все довольствовались шестым изданием, которое вышло в 2012 году.

Про седьмое издание и что там появилось новенького бессмысленно рассказывать, потому что это - не один пост на habr. Если кратко, то главы про итераторы, классы, асинхронность, метапрограммирование на js, и многое-многое другое. Лучше посмотреть самим на его сайте - https://davidflanagan.com/ . Там есть раздел, где можно глянуть что нового появится в седьмом издании. Однозначно, стоит почитать.

Кайл Симпсон: cерия книг "Вы не знаете Javascript"

Флэнаган дал нам большой и подробный справочник, который стоит читать тогда, когда вы только вливаетесь, или когда вы решили перед собеседованием повторить "всё" что связано с js. Но что если вам нужен один раздел, или нужен какой-то срез по разделу в виде основных тезисов. На помощь приходит Кайл Симпсон.

Информации о Кайле очень много даже в рунете. Человек принимает активное участие в open source, выступает на конференциях, пишет книги. Нас же интересует 6 его книг:

  1. Scope & Closures

  2. ES6 & Beyond

  3. Async & Performance

  4. Up & Going

  5. Types & Grammar

  6. this & Object Prototypes

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

Все книги серии написаны в одном стиле, на рынке они в одном оформлении и при покупке вы точно не ошибетесь - вам будет интересно их читать.

Натан Розенталс "Изучаем TypeScript 3"

Мир не стоит на месте, миру нужна строгая типизация, поэтому на сцене появился TypeScript - надстройка над JS, которая открывает нам многие классические возможности строго-типизированных языков и дает нам полноценное Объектно-Ориентированное Программирование (почему полноценное - я когда-нибудь напишу об этом).

В книге об авторе написано немного, лишь то, что он уже 30 лет в сфере программирования. Книга написана скорее для новичков, но при этом она прекрасно дает понимание ts, дает хорошие основы, дает знание инструментов разработки с ним, и общее понимание тестирование ts.

Книга поделена на осмысленные разделы, где есть пояснения - что читать frontend-разработчику со знанием js, и что читать начинающему разработчику.

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

Если верить рейтингу PYPL (он построен на основе анализа Google Trends), то к декабрю 2020 года TypeScript занимал десятое место среди всех языков. Язык стоит изучать, хотя бы на будущее. И если раньше React и Angular в основном дружили с TypeScript, то сейчас и Vue.js начинает смотреть в сторону TypeScript. В интервью с Эваном Ю, Эван заявил, что во второй версии Vue.js был допущен просчет в плане поддержки TypeScript из коробки.

Послесловие

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

  1. Книга #1 - справочник, который поможет подготовиться к собеседованию, поможет изучить какие-то вопросы, которые не часто всплывают в рабочей практике.

  2. Книги #2 - серия, которая поможет разобраться во всех разделах отдельно, поможет углубиться в тему, получить скорее архитектурное понимание, чем общее

  3. Книга #3 - рынок диктует то, что мы читаем. Книга поможет быстро вникнуть в typescript, понять его основы, понять скорее его идеологию.

P.S.

В будущем, если статья понравится пользователям, я бы хотел написать:

  • Книги по фреймворкам и библиотекам

  • Книги для новичков (таких очень много)

  • Книги по CSS и HTML (да, и такое есть)

Спасибо за внимание!

Подробнее..

Как совместить парадигму Объектно-ориентированного программирования и Python в голове новичка?

13.11.2020 20:09:06 | Автор: admin

Я всегда с благодарностью относился к учебным текстам по программированию наподобиеЭТОГО:

На мой взгляд, хороший учебный материал и там всё прекрасно объяснено про Объектно-орииентированное программирование. Даны все понятия, определения, в общем - бери и используй!

Но как часто бывает у новичков, на самом деле у меня была только иллюзия ясности. Когда же сталкиваешься с изучением Python на практике, понимаешь, насколько всё сложно. И сперва такого типа код может внушать даже ужас, ну или там, чувство бессилия, мысли "Я непроходимо тупой", и т.д. - у каждого по-своему:

def createSetsMultiClasses(wordIndexes,xLen, step):  nClasses = len(wordIndexes)  xTest10Classes01 = []  xTest10Classes = []  for wI in wordIndexes:    sample = (getSetFromIndexes(wI, xLen, step))    xTest10Classes.append(np.array(sample))    xTest10Classes01.append(tokenizer.sequences_to_matrix(sample))  xTest10Classes01 = np.array(xTest10Classes01)  return xTest10Classes01, xTest10Classes

И хорошо, если у тебя есть годы на обучение, и ты студент первого курса.

А если нет? И когда тебе нужно изучать сразу нейронные сети на Питон без глубокого опыта Питон? То есть фактически, когда нет базы программирования и времени на раскачку нет тоже, а хороших учителей много, но все они говорят разное.

Хуже того, учителя не всегда понимают, как объяснить базовые вещи. Для них это просто и естесственно. А ученик не всегда может сформулировать, чего он не понимает и как именно он не понимает.

Вот тут-то и требуется напрячь все силы и создать какой-то рабочий образ для осмысления пройденного.

Выставляю на суд сообщества 2 диаграммы, родившиеся в результате такого понимания. Не претендую на уникальность, истину и полноту охвата. Надеюсь, что данная работа пригодится новичкам для осмысления Python и парадигмы объектно-ориентированного программирования, что называется в бою.

Данная диаграмма иллюстрирует понятия ОБЪЕКТ, КЛАСС, МЕТОД, ФУНКЦИЯ в их взаимосвязи. Я так же попытался осмыслить понятие ПЕРЕМЕННАЯ и то, как она используется в разных парадигмах программирования - Объектно-ориентированной и Функциональной (Процедурной).

Здесь изображена "мозгодробительная", на мой взгляд, вещь: как объектно-ориентированная модель работает совместно с функциональным программированием. И как объекты в Питоне могут использоваться как элементы функций.

Всем удачи в учёбе и осмыслении действительности!

Подробнее..

Перевод Формируем тренировочный сэмпл данных при distribution shift

08.11.2020 12:22:14 | Автор: admin
Дисклеймер: статья является переведенным продуктом автора Maxa Halforda. Перевод не чистый, а адаптивный. Такой, чтобы было понимание на любом рубеже знаний.



Мои друзья и я недавно прошли квалификацию в финал Data Science Game 2017. Первой частью соревнований был Kaggle с датасетом от компании Deezer(1). Проблема состояла в решении задачи бинарной классификации: нужно было предсказать, собирается ли пользователь перейти к прослушиванию предложенной ему композиции.
Как и другие команды мы извлекли релевантные признаки и обучили XGBoost(2) классификатор. Однако, мы сделали особенную вещь подвыборку обучающего набора данных, такую, что он (обучающий набор) стал более репрезентативен для тестового набора.


Одним из базовых требований к процессу обучения для успешной работы машинной модели является одинаковая природа распределений в тренировочном и тестовом наборах данных. Как грубый пример: модель обучена на пользователях 20-тилетнего возраста, а в тестовой выборке пользователи 60+ лет.
Здесь интуитивно естественно, что с возрастом, на котором модель не обучалась, она и не справится. Конечно, такой пример сугубо синтетический, но в реальности для весомых различий достаточно обучить модель на 20+ и попробовать заставить работать на 30+. Результат будет аналогичен.

Так происходит, потому что модели изучают распределения(3) данных. Если распределения признака в обучающем и тестовом наборе совпадают, модель скажет вам спасибо.

Вставка переводчика: когда я села за перевод у меня возник вопрос: зачем обучение подгонять под тест, ведь, по сути, тест отражает невидимые данные, которые будут поступать модели на вход в продакшене. Потом я проспалась, перечитала, и всё прошло. Фишка в том, что под влиянием факторов ретроспектива может стать нерелевантной для настоящего времени. Об этом далее (пример чуток переадаптирован).

Смещение в распределениях по одной фиче может происходить по разным причинам. Наиболее интуитивный пример можно позаимствовать у Facebook.

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

Когда произошло разделение общего приложения Facebook на основную социальную сеть (ленту etc) и систему обмена сообщениями, время в основном приложении уменьшилось, то есть входящие наборы данных поменялись и уже не соответствовали прошлой ретроспективе. Математически, учитывая фичу времени модель станет предсказывать более низкий уровень лояльности, хотя в реальности это не так перенос времени просто разделился на два приложения. Печально выходит.

Таким образом, искажение (distribution shift) возникает, когда распределение ретроспективных данных становится неактуальными для предсказания новых.

В датасете компании Deezer несоответствие распределений было в признаке, измеряющем количество прослушанных песен до момента решения задачи предсказания. И в общучающем, и в тестовом наборах данных данная фича имела экспоненциальное(4) распределение. Однако в тестовом наборе данных оно было более выражено, поэтому среднее в тренировочном сете было ниже, чем в тестовом. После ресемплинга тренировочного распределения удалось повысить метрику ROC-AUC(5) и подняться по рейтинга примерно на 20 пунктов.

Ниже приведен пример разницы распределений:

import numpy as npimport plotly.figure_factory as fftrain = np.random.exponential(2, size=100000)test = np.random.exponential(1, size=10000)distplot = ff.create_distplot([train, test], ['Train', 'Test'], bin_size=0.5)distplot.update_layout(title_text='Распределения Test, Train')


""

Идея нивелирования distribution shift состоит в том, чтобы переформировать обучающий сэмпл так, чтобы он отражал тестовое распределение.

Давайте представим, что мы хотим создать подвыборку размером 50 000 наблюдений из нашего обучающего набора, чтобы она соответствовала распределению тестового. Что хочется сделать интуитивно?
Сделать так, чтобы объекты, чаще встречающиеся в тестовом наборе данных также часто встречались и в обучающем! Но как определить, какие объекты нужны более, а какие менее часто?
Весами!

Шаги действий будут примерно такие:

поделить числовую прямую распределения на равные интервалы (или корзины (bins)
посчитать количество объектов в каждой корзине (bin size)
для каждого наблюдения в корзине рассчитать его вес равный 1/(bin size)
создать подвыборку k с распределением, учитывающим веса (объекты с более высоким весом станут появляться в подвыборке чаще)

Перекладывая на код, мы производим следующие действия:
SAMPLE_SIZE = 50000N_BINS = 300# Задаем частоту корзин, иначе говоря получаем перцентили распределения тестового массива.# Каждое значение полученное значение будет границей интервала корзиныstep = 100 / N_BINStest_percentiles = [    np.percentile(test, q, axis=0)    for q in np.arange(start=step, stop=100, step=step)]# Присваиваем каждой коризне набор объектов. # Функция возвращает индекс корзины, в которое входит значениеtrain_bins = np.digitize(train, test_percentiles)# Считаем количество объектов в каждой корзине или сколько индекс i из входного массива,# где 0 будет соответствовать количеству вхождений индекса нуль, 1 количеству вхождений индекса 1 и так до i индексаtrain_bin_counts = np.bincount(train_bins)# Считаем веса каждого объекта, единица делится на количество вхождений объектов в корзинеweights = 1 / np.array([train_bin_counts[x] for x in train_bins])# Нормируем веса так, чтобы их сумма равнялась единицеweights_norm = weights / np.sum(weights)np.random.seed(0)sample = np.random.choice(train, size=SAMPLE_SIZE, p=weights_norm, replace=False)distplot_with_sample = ff.create_distplot([train, test, sample], ['Train', 'Test', 'New train'], bin_size=0.5)distplot_with_sample.update_layout(title_text='Распределения Test, Train, New train')


""

Новое распределение (зеленое) теперь стало лучше соответствовать распределению тестовой выборки (оранжевое). Аналогичные действия были использованы нами на соревновании исходный датасет содержал 3 миллиона строк, размер новой выборки мы сгенерировали из 1.3 миллиона объектов. Данных стало меньше, но репрезентативность распределения улучшила качество обучения.

Несколько примечаний из личного опыта автора:

  • Количество корзин не играет большой роли, но чем меньше корзин, тем быстрее учится алгоритм (попробуйте изменить в примере количество корзин (N_BINS) на 3, 30 и вы увидите, что разница действительно невелика)
  • Что касается размера, то чем меньше разница между обучающим и тестовым распределениями, тем меньших размеров обучающей новой выборки достаточно, чтобы повторить тестовое распределение, по крайней мере если брать объекты без возвращения, избегая формирования дубликатов.
    (В нашем примере мы перераспределили частотность, за счет чего корзины более набитые объектами стали содержать больше значений, относительно менее набитых корзин. Это подняло распределение тк концентрация значений сменилась. На мой взгляд достаточность обучающего набора должна исходить из размера тестового сета, но это только примечание переводчика)


Алгоритм переформирования есть на гитхабе автора статьи (папка xam). В будущем автор планирует разбирать новые темы и делиться ими в блоге.

Надеюсь перевод и примечания были полезны и понятны. Жду вашей обратной связи в конструктивном формате. Спасибо за уделенное статье время.

Сноски:

1. Deezer французский интернет-сервис потоковой передачи музыки. Типа Spotify, Я.Музыки и ну вы поняли

2. XGBoost алгоритм экстремального градиентного бустинга. Мне крайне понравилась его обзывка как градиентный бустинг на стероидах. Идея бустинга заключается в обучении нескольких однородных слабых учеников, каждый из которых формирует оценки на основе ретроспективного опыта обучения предыдущего, обращая внимание на те классы, где прошлый алгоритм больше всего споткнулся. Идея градиента заключается, простым словом, в минимизации ошибки обучения. XGBoost, как алгоритм, является более вычислительно выгодной конфигурацией градиентного бустинга (Gradient Boosting)

3. Под распределением здесь подразумевается именно та штука, которая описывает закон, по которому чиселки раскидываются в переменной.

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

5. ROC-AUC (Area Under receiver operating characteristic Curve) площадь под кривой характеристики обработки приемника дословное название, поскольку метрика притопала из теории обработки сигналов. ROC-кривая очень крута она демонстрирует соотношение True Positive и False Positive ответов модели по мере смены порога вероятности для отнесения к какому-либо классу, образуя дугу. Благодаря тому, что видно соотношение TP и FP можно подбирать оптимальный порог вероятностей в зависимости от ошибок 1го и 2го рода.

В случае рассмотрения именно точности модели, не внимания вероятностный порог ответов, используется метрика ROC-AUC, принимающая значения в диапазоне [0,1]. Для константной модели при балансе классов ROC-AUC будет приблизительно равна 0,5, следовательно модели ниже не проходят sanity check (проверку на вменяемость). Чем ближе площадь под ROC кривой к единице тем лучше, но для индексации полезности результатов в целом, AUC-ROC обученной модели релевантно сравнивать с AUC-ROC константной модели.
Подробнее..

Ленивая инициализация в C

07.10.2020 04:07:15 | Автор: admin
Отложенная инициализация или ленивая инициализация это способ доступа к объекту, скрывающий за собой механизм, позволяющий отложить создание этого объекта до момента первого обращения. Необходимость ленивой инициализации может возникнуть по разным причинам: начиная от желания снизить нагрузку при старте приложения и заканчивая оптимизацией редко используемого функционала. И действительно, не все функции приложения используются всегда и, тем более, сразу, потому создание объектов, реализующих их, вполне рационально отложить до лучших времён. Я хотел бы рассмотреть варианты ленивой инициализации, доступные в языке C#.

Для демонстрации примеров я буду использовать класс Test, у которого есть свойство BlobData, возвращающее объект типа Blob, который по легенде создаётся довольно медленно, и было решено создавать его лениво.

class Test{    public Blob BlobData    {        get        {            return new Blob();        }    }}


Проверка на null


Самый простой вариант, доступный с первых версий языка, это создание неинициализированной переменной и проверка её на null перед возвращением. Если переменная равна null, создаём объект и присваиваем этой переменной, а потом его возвращаем. При повторном обращении объект уже будет создан и мы сразу его вернём.

class Test{    private Blob _blob = null;    public Blob BlobData    {        get        {            if (_blob == null)            {                _blob = new Blob();            }            return _blob;        }    }}


Объект типа Blob тут создаётся при первом обращении к свойству. Либо не создаётся, если он по какой-то причине в этой сессии программе не понадобился.

Тернарный оператор ?:


В C# есть тернарный оператор, позволяющий проверить условие и, если оно истинно вернуть одно значение, а если ложно, другое. Мы можем использовать его для того, чтобы немного сократить и упростить код.

class Test{    private Blob _blob = null;    public Blob BlobData    {        get        {            return _blob == null                ? _blob = new Blob()                : _blob;        }    }}


Суть осталась той же. Если объект не инициализирован, инициализируем и возвращаем. Ежели уже инициализирован, то просто сразу вовзращаем.

is null


Ситуации бывают разные и мы, например, можем столкнуться с такой, в которой у класса Blob перегружен оператор ==. Для этого, вероятно, нам может потребоваться сделать проверку is null вместо == null.

return _blob is null    ? _blob = new Blob()    : _blob;


Но это так, небольшое отступление.

Null-coalescing оператор ??


Ещё больше упростить код нам поможет бинарный оператор ??
Суть его работы такова. Если первый операнд не равен null, то он и возвращается. Если же первый операнд равен null, возвращается второй.

class Test{    private Blob _blob = null;    public Blob BlobData    {        get        {            return _blob ?? (_blob = new Blob());        }    }}


Второй операнд пришлось взять в круглые скобки из-за приоритета операций.

Оператор ??=


В C# 8 появился null-coalescing assignment operator, выглядящий вот так ??=
Принцип его работы заключается в следующем. Если первый операнд не равен null, то он просто возвращается. Если первый операнд равен null, то ему присваивается значение второго и возвращается уже это значение.

class Test{    private Blob _blob = null;    public Blob BlobData    {        get        {            return _blob ??= new Blob();        }    }}


Это позволило ещё немного сократить код.

Потоки


Если есть вероятность, что к данному ресурсу могут обращаться сразу несколько потоков, нам стоит сделать его потокобезопасным. В противном случае может случиться такая ситуация, что, например, оба потока проверят объект на null, результат окажется false, а затем будет создано два объекта типа Blob, нагрузив систему в два раза больше, чем нам хотелось, и кроме того, один из этих объектов сохранится, а второй будет потерян.

class Test{    private readonly object _lock = new object();    private Blob _blob = null;    public Blob BlobData    {        get        {            lock (_lock)            {                return _blob ?? (_blob = new Blob());            }        }    }}


Оператор lock получает взаимоисключающую блокировку заданного объекта перед выполнением определенных операторов, а затем снимает блокировку. Он является эквивалентом использования метода System.Threading.Monitor.Enter(..., ...);

Lazy<T>


В .NET 4.0 появился класс Lazy, позволяющий скрыть всю эту грязную работу от наших глаз. Теперь мы можем оставить только локальную переменную типа Lazy. При обращении к его свойству Value, мы получим объект класса Blob. Если объект был создан ранее, он сразу вернётся, если нет сначала будет создан.

class Test{    private readonly Lazy<Blob> _lazy = new Lazy<Blob>();    public Blob BlobData    {        get        {            return _lazy.Value;        }    }}


Так как у класса Blob есть конструктор без параметров, то Lazy сможет создать его в нужный момент без лишних вопросов. Если же нам нужно выполнить какие-то дополнительные действия во время создания объекта Blob, конструктор класса Lazy может принимать ссылку на Func<T>

private Lazy<Blob> _lazy = new Lazy<Blob>(() => new Blob());


Кроме того, во втором параметре конструктора мы можем указать, нужна ли нам потокобезопасность (тот самый lock).

Свойство


Теперь давайте сократим запись readonly свойства, благо современный C# позволяет это делать красиво. В конечном итоге выглядеть всё это станет так:

class Test{    private readonly Lazy<Blob> _lazy = new Lazy<Blob>();    public Blob BlobData => _lazy.Value;}


LazyInitializer


Ещё есть вариант не оборачивать класс в обёртку Lazy, а вместо этого использовать функционал LazyInitializer. Этот класс имеет один статический метод EnsureInitialized с кучей перегрузок, позволяющих творить всякое, в том числе делать потокобезопасность и писать кастомный код для создания объекта, но основная суть которого заключается в следующем. Проверить, не инициализирован ли объект. Если нет, то инициализировать. Вернуть объект. С использованием данного класса, мы можем переписать наш код так:

class Test{    private Blob _blob;    public Blob BlobData => LazyInitializer.EnsureInitialized(ref _blob);}


На этом всё. Спасибо за внимание.
Подробнее..

Из песочницы Разбор UIUX на примере прототипа в Figma и основные принципы

24.06.2020 16:09:31 | Автор: admin

Кому адресована статья


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

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

Сначала я кратко опишу, что такое прототип и UI/UX дизайн, потом опишу инструменты для их создания, а в конце статьи пошагово разберу небольшой пример создания прототипа в одном из инструментов Figma.

Вместо введения


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

image

Как это сделать? Написать на бумажке можно и нужно, но что поймет пользователь по итогам прочитанного и будет ли потом удобно разработчику реализовывать систему? Решение давно придумано создать сначала макет, а потом рабочий прототип. Пусть макет будет деревянным, а в прототипе будут только открываться двери, но уже на этом шаге заказчик сможет пощупать свой продукт и своевременно внести замечания.

То что написано выше относится к любому виду продукта, как физическому, так и электронному. Далее мы будем говорить о прототипах в сфере ИТ (сайты, приложения, корпоративные информационные системы и т.д.), определим, что такое UI и UX, какием критериям должен отвечать прототип в продуктовой разработке, рассмотрим некоторые особенности среды для создания прототипов Figma.

Что такое прототип ИТ продукта? Каким он должен быть?


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

image

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

Основные принципы прототипирования:

  1. Прототип создается только после того как определена целевая аудитория, маркетинговая стратегия, каналы сбыта.
  2. В прототипе должны быть учтены основные пользовательские сценарии. При тестировании хорошей идеей является озвучить задачу и отойти подальше от пользователя. Если у последнего в ходе использования прототипа возникают множественные вопросы, то это означает, что необходимо пересмотреть и переработать сценарии использования.
  3. Прототип является интерактивной моделью, так как он направлен на проверку возможных действия пользователя, а не на согласование картинки.
  4. В основе любого прототипа должна лежать гипотеза, которую необходимо проверить. Необходимо сформулируйте гипотезу так, чтобы на нее можно было четко ответить да или нет и прописать, как именно прототип даст вам ответ на этот вопрос.
  5. При тестировании прототипа необходимо давать минимум информации потенциальному пользователю. Причина проста чем больше он наломает дров, тем лучше для продукта, так надо тестировать, а не валидировать сценарии.
  6. Проверять все, даже если есть уверенность в том или ином функционале будущего продукта.
  7. Дизайн прототипа должен быть максимально лаконичным без отвлекающих внимание пользователя ярких картинок, цветовых акцентов или перечеркнутых квадратов. Конечно, если они не являются частью проверяемой гипотезы. В этом случае, есть риск того, что пользователь зациклится на наполнении визуального интерфейса.
  8. Если есть возможность сделать прототип похожим на реальность, то именно так и стоит сделать.
  9. При тестировании необходимо просить пользователя проговаривать вслух все мысли и действия и вести видеозапись самого процесса тестирования.

image

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

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

Что такое UI/UX?


UX/UI дизайн существует с незапамятных времен и относится не только к приложениям и сайтам. Просто раньше он назывался по-другому. Например, швейная машинка Зингер. Ведь кто-то еще в 19м веке придумал, как она должна выглядеть и как ей пользоваться. При этом в основе лежала цель, которую должен достигнуть пользователь сшить что-то быстро, красиво и качественно.

image

Так, что же представляют собой UI и UX дизайн?

UI расшифровывается как user interface и переводится пользовательский интерфейс. Под этим термином обычно понимают визуализацию экранных форм и интерфейсов. UI это про графический дизайн. UI-дизайнер работает с цветами, композицией, анимацией, шрифтами. На основе черновых схематичных набросков (вайрфреймов) UI-дизайнер собирает финальный дизайн-макет.

UX или User Experience переводится как пользовательский опыт. То есть это про то, как работать с интерфейсом, удается ли пользователю достичь цели, легко это или сложно. UX дизайнер перекладывает клиентский опыт на интерфейс, строит и проверяет гипотезы взаимодействия пользователя с системой.

Под UX/UI дизайном понимают проектирование любых пользовательских интерфейсов, в которых удобство использования так же важно, как и внешний вид.
UX и UI дизайны часто путают, так как они идут рядом друг с другом, но все же это разные понятия, которые в конце пути должны слиться в единое целое.

image

Связь прототипа и UX/UI дизайна


Является ли прототип информационной системы UX/UI дизайном? На мой взгляд, является.
Является ли UI/UX дизайн прототипом? Да, но только в случае, если бизнес логика наложена на интерфейс пользователя тем или иным способом. Если пользовательский опыт описан где-то на бумажке и его невозможно продемонстрировать клиенту на интерфейсе, то у нас есть отдельно UI и UX дизайны, но прототип отсутствует.

image

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

UI есть это листы бумаги с нарисованными кнопками. UX есть это действия пользователя. Разработка есть это действия экспериментатора. Прототип есть, так как подобным образом можно проверить пользовательский опыт и получить обратную связь от клиента.

Но, что будет, если убрать экспериментатора и оставить пользователя наедине с листами бумаги? Останется UX/UI дизайн, а прототип работать не будет. А значит, будет невозможно протестировать логику работы системы.

Инструменты для создания динамических прототипов


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

Инструмент


Описание


inVision, Marvel, Flinto
Позволяют указать по клику, на какую область одного макета страницы
нужно отобразить другую.
Prott, POP
Самые простые инструменты для быстрой проверки гипотез. Достаточно нарисовать скетчи карандашом, сфотографировать и указать области, при нажатии на которые необходимо перейти на следующую страницу.
Proto.io, Framer, Origami, Form
На основе макетов страниц позволяют анимировать отдельные объекты (слои) и делать более сложные и интересные переходы.
Axure, Wireframe
При создании прототипа используются простые фигуры и ссылки на макеты, если их много.При создании прототипа используются простые фигуры и ссылки на макеты, если их много.
Webflow, Figma
По факту являются конструкторами сайтов. С их помощью можно создать первую версию продукта. Отлично подходят для прототипирования в случаях, когда вам нужно сильно больше, чем переходы между статичными экранами.
Wix, WordPress, Tilda
Конструкторы сайтов. Удобные инструменты для создания рабочих прототипов людьми, непосредственно взаимодействующими с клиентом, без привлечения профессиональных UX и UI дизайнеров.

Далее в качестве иллюстрации создания прототипа рассмотрим пример создания личной страницы в Figma.

Что такое Figma?


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

Плюсы и минусы Figma


К плюсам работы в Figma можно отнести:

  1. Бесплатна в случае, если над проектом работают не более 2х пользователей.
  2. Создание и отрисовка макета в одной программе
  3. Существует огромное количество уже готовых шаблонов сайтов
  4. Для работы с Figma требуется свежая версия браузера, а десктопная версия не требует мощного и современного компьютера.
  5. Сохранение версий проекта до 30 дней на бесплатной версии

Минусы Figma:

  1. Отсутствие русификации. Работать в Figma приходится на английском языке.
  2. Figma не работает оффлайн, так как требуется синхронизация с облаком.

Пример создания простейшего прототипа в Figma


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

Шаг 1. Регистрация


Не обязательно регистрировать отдельный аккаунт в Figma. Если у Вас есть Google-почта, то можно зайти в сервис с ее помощью. При первичном открытии Figma сразу предложит пройти краткое обучение работы с программой.

Шаг 2. Создание проекта


Для создания нового проекта достаточно нажать + в правом верхнем углу экран. Там же можно открыть один из ранее загруженных шаблонов.

Шаг 3. Создание рабочей области страницы


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

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

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

image

Шаг 4. Добавление картинки


В Figma очень легко добавлять и обрезать картинки под любые формы. Для этого достаточно добавить на рабочую область нужные фигуру и изображение, выделить оба объекта с помощью сочетания клавиш ctrl и нажать сочетание ctrl+alt+M. При этом важно, чтобы картинка была выше фигуры. Выделять фигуры можно как на рабочей области, так и на панели слева, щелкая на их названия.

image

Шаг 5. Добавление текстового поля


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

image

Шаг 6. Создание меню


В данной статье я не преследую научить читателя всем аспектам работы с Figma, поэтому меню у нас будет самое простое двухкнопочное. Кнопки представляют собой прямоугольники, объединенные с текстовым полем. Можно объединить объекты в группу, нажав CTRL+G, а потом отцентрировать текстовое поле по центру будущих кнопок.

Шаг 7. Дублирование основы страницы


В основание страницы входит: рабочая область, меню и текстовое поле. Чтобы создать копию ее копию можно вынести маску изображения вне группы объектов первой страницы. Для этого достаточно левой кнопкой мыши нажать на название маски и перетащить иконку вверх. Затем в перечне объектов выбрать группу объектов, входящих в основание первой страницы, и нажать CTRL+D.

image

Шаг 8. Добавление внешних ссылок


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

image

Шаг 9. Добавление ссылок между страницами


Добавление ссылок на объекты внутри Figma аналогично добавлению ссылок на внешние источники за исключением того, что надо где-то взять ссылку на внутренний объект. Для этого надо кликнуть правой кнопкой мыши по объекту и выбрать в выпадающем меню Copy/Paste и Copy Link.

image

Шаг 10. Демонстрация прототипа


Последний шаг демонстрация прототипа заказчику. Самое простое нажать кнопку Share в правом верхнем углу экрана и во всплывающем окне выбрать Сopy Link.

image

Результат


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

Видеоуроки по реализации прототипов в FIGMA


В качестве заключения хочу приложить ссылку на видеоуроки, созданные телеграмм-каналом Наука и дизайн. Всего 2,5 часа в 15ти уроках по использованию FIGMA, в которых рассмотрены все основные функции и кнопки.

Еще хороший ресурс с видеоуроками по созданию прототипов в Figma.
Подробнее..

GIT для новичков (часть 1)

07.02.2021 18:17:06 | Автор: admin

Что такое Git и зачем он нужен?

Git - это консольная утилита, для отслеживания и ведения истории изменения файлов, в вашем проекте. Чаще всего его используют для кода, но можно и для других файлов. Например, для картинок - полезно для дизайнеров.

С помощью Git-a вы можете откатить свой проект до более старой версии, сравнивать, анализировать или сливать свои изменения в репозиторий.

Репозиторием называют хранилище вашего кода и историю его изменений. Git работает локально и все ваши репозитории хранятся в определенных папках на жестком диске.

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

Каждая точка сохранения вашего проекта название коммит (commit). У каждого commit-a есть hash (уникальный id) и комментарий. Из таких commit-ов собирается ветка. Ветка - это история изменений. У каждой ветки есть свое название. Репозиторий может содержать в себе несколько веток, которые создаются из других веток или вливаются в них.

Как работает

Если посмотреть на картинку, то становиться чуть проще с пониманием. Каждый кружок, это commit. Стрелочки показывают направление, из какого commit сделан следующий. Например C3 сделан из С2 и т. д. Все эти commit находятся в ветке под названием main. Это основная ветка, чаще всего ее называют master . Прямоугольник main* показывает в каком commit мы сейчас находимся, проще говоря указатель.

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

Об этом мы поговорим в следующих статьях. Для начала разберем работу с одной веткой.

Установка

Основой интерфейс для работы с Git-ом является консоль/терминал. Это не совсем удобно, тем более для новичков, поэтому предлагаю поставить дополнительную программу с графическим интерфейсом (кнопками, графиками и т.д.). О них я расскажу чуть позже.

Но для начала, все же установим сам Git.

  • Windows. Проходим по этой ссылке, выбираем под вашу ОС (32 или 64 битную), скачиваем и устанавливаем.

  • Для Mac OS. Открываем терминал и пишем:

  • Windows. Проходим по этой ссылке, выбираем под вашу ОС (32 или 64 битную), скачиваем и устанавливаем.

  • Mac OS

#Если установлен Homebrewbrew install git#Если нет, то вводим эту команду. #После этого появится окно, где предложит установить Command Line Tools (CLT).#Соглашаемся и ждем установки. Вместе с CLT установиться и gitgit --version
  • Linux. Открываем терминал и вводим следующую команду.

# Debian или Ubuntusudo apt install git# CentOSsudo yum install git

Настройка

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

Открываем терминал (Linux и MacOS) или консоль (Windows) и вводим следующие команды.

#Установим имя для вашего пользователя#Вместо <ваше_имя> можно ввести, например, Grisha_Popov#Кавычки оставляемgit config  global user.name "<ваше_имя>"#Теперь установим email. Принцип тот же.git config  global user.email "<адрес_почты@email.com>"

Создание репозитория

Теперь вы готовы к работе с Git локально на компьютере.

Создадим наш первый репозиторий. Для этого пройдите в папку вашего проекта.

#Для Linux и MacOS путь может выглядеть так /Users/UserName/Desktop/MyProject#Для Windows например С://MyProjectcd <путь_к_вашему_проекту>#Инициализация/создание репозиторияgit init

Теперь Git отслеживает изменения файлов вашего проекта. Но, так как вы только создали репозиторий в нем нет вашего кода. Для этого необходимо создать commit.

#Добавим все файлы проекта в нам будующий commitgit add .#Или такgit add - all#Если хотим добавить конкретный файл то можно такgit add <имя_файла> #Теперь создаем commit. Обязательно указываем комментарий.#И не забываем про кавычкиgit commit -m "<комментарий>"

Отлично. Вы создали свой первый репозиторий и заполнили его первым commit.

Процесс работы с Git

Не стоит после каждого изменения файла делать commit. Чаще всего их создают, когда:

  • Создан новый функционал

  • Добавлен новый блок на верстке

  • Исправлены ошибки по коду

  • Вы завершили рабочий день и хотите сохранить код

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

Визуальный интерфейс

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

Но существуют и отдельные программы по работе с Git. Могу посоветовать эти:

Я не буду рассказывать как они работают. Предлагаю разобраться с этим самостоятельно.

Создаем свой первый проект и выкладываем на GitHub

Давайте разберемся как это сделать, с помощью среды разработки Visual Studio Code (VS Code).

Перед началом предлагаю зарегистрироваться на GitHub.

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

После открываем VS Code .

  1. Установите себе дополнительно анализаторы кода для JavaScript и PHP

  2. Откройте вашу папку, которую создали ранее

После этого у вас появиться вот такой интерфейс

  1. Здесь будут располагаться все файлы вашего проекта

  2. Здесь можно работать с Git-ом

  3. Кнопка для создания нового файла

  4. Кнопка для создания новой папки

Если ваш проект пустой, как у меня, то создайте новый файл и назовите его index.html . После этого откроется окно редактирование этого файла. Напишите в нем ! и нажмите кнопку Tab . Автоматически должен сгенерироваться скелет пустой HTML страницы. Не забудьте нажать ctrl+s чтобы файл сохранился.

Давайте теперь перейдем во вкладу для работы с Git-ом.

Откроется вот такое окно:

  1. Кнопка для публикации нашего проекта на GitHub

  2. После нажатия на кнопку 1 , появится всплывающее окно. Нужно выбрать второй вариант или там где присутствует фраза ...public repository

Если вы хотите создать локальный репозиторий и опубликовать код в другой сервис, то необходимо нажать на кнопку Initialize Repository . После этого, вручную выбрать сервис куда публиковать.

После того, как выбрали "Опубликовать на GitHub публичный репозиторий" (пункт 2), программа предложит вам выбрать файлы, которые будут входить в первый commit. Проставляем галочки у всех файлов, если не проставлены и жмем ОК . Вас перекинет на сайт GitHub, где нужно будет подтвердить вход в аккаунт.

Вы создали и опубликовали репозиторий на GitHub.

Теперь сделаем изменения в коде и попробуем их снова опубликовать. Перейдите во вкладку с файлами, отредактируйте какой-нибудь файл, не забудьте нажать crtl+s (Windows) или cmd+s (MacOS), чтобы сохранить файл. Вернитесь обратно во вкладу управления Git.

Если посмотреть на значок вкладки Git, то можно увидеть цифру 1 в синем кружке. Она означает, сколько файлов у нас изменено и незакоммичено. Давайте его закоммитим и опубликуем:

  1. Кнопка для просмотра изменений в файле. Необязательно нажимать, указал для справки

  2. Добавляем наш файл для будущего commit

  3. Пишем комментарий

  4. Создаем commit

  5. Отправляем наш commit в GitHub

Поздравляю, вы научились создавать commit и отправлять его в GitHub!

Итог

Это первая вводная статья по утилите Git. Здесь мы рассмотрели:

  • Как его устанавливать

  • Как его настраивать

  • Как инициализировать репозиторий и создать commit через консоль

  • Как на примере VS Code, опубликовать свой код на GitHub

Забегая вперед, советую вам погуглить, как работают следующие команды:

git help # справка по всем командамgit clonegit statusgit branchgit checkoutgit mergegit remotegit fetchgit pushgit pull

P.S. Для облегчения обучения, оставлю вам ссылку на бесплатный тренажер по Git.

https://learngitbranching.js.org/

В телеграмм канале Step by Step , я публикую еще больше материала и провожу обучающие стримы, для всех желающих.

Подробнее..
Категории: Git , Github , Новичкам , Vscode

Data Analyst или Data Scientist кем бы вам хотелось быть?

10.07.2020 16:05:35 | Автор: admin
Каково находиться в каждой из этих ролей, рассказывает Matt Przybyla, автор статьи, опубликованной в блоге towardsdatascience.com. Предлагаем вам ее перевод.


Фото с сайта Unsplash. Автор: Christina @ wocintechchat.com

Мне довелось поработать и профессиональным аналитиком данных (Data Analyst), и исследователем данных (Data Scientist). Думаю, было бы полезно поделиться опытом по каждой должности, указывая ключевые различия в повседневных задачах. Я надеюсь, что моя статья поможет определиться, что подходит именно вам. А тем, кто уже работает, возможно, после прочтения захочется изменить свою должность. Некоторые начинают аналитиками данных, а затем переходят в исследователи. Не так популярен, но не менее интересен путь от исследователя на невысоких позициях до аналитика на позиции сеньора. Обе должности имеют свои особенности и требуют определенных умений, о которых необходимо знать, прежде чем сделать следующий большой шаг в профессиональном развитии.

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

Data Analyst


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

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

Ниже вы найдете ответы на самые частые вопросы о том, с чем сталкиваются аналитики данных.

  • С кем придется работать?

В основном со стейкхолдерами компании, которые запрашивают обобщение данных, визуализацию выводов и отчеты по результатам. Общение, как правило, устное или через цифровые каналы: электронную почту, Slack и Jira. По моему опыту, вам предстоит тесно взаимодействовать с человеческой и аналитической составляющими бизнеса, а не инженерной и производственной.

  • Кому предоставляются результаты?

Вероятнее всего, вышеупомянутым стейкхолдерам. Однако если у вас есть менеджер, вы отчитываетесь перед ним, а он уже передает данные стейкхолдерам. Не исключен и вариант, когда вы собираете пул запросов, составляете по ним отчет и презентуете стейкхолдерам. Для составления отчетов у вас могут быть такие инструменты, как Tableau, Google Data Studio, Power BI и Salesforce, которые обеспечивают легкий доступ к данным, например к файлам CSV. Другие инструменты требуют больше технических усилий составления расширенных запросов к базам данных с помощью SQL.

  • Какими будут темпы работы над проектом?

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

Data Scientist


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

  • С кем придется работать?

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

  • Кому предоставляются результаты?

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

  • Какими будут темпы работы над проектом?

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

Заключение



Фото с сайта Unsplash. Автор: Markus Winkler

Аналитики и исследователи данных пользуются одинаковыми инструментами, такими как Tableau, SQL и даже Python, но профессиональные задачи у них могут быть очень разными. Повседневная деятельность аналитика данных включает больше собраний и личного взаимодействия, требует прокачанных софт-скиллов и быстрого выполнения проектов. Работа исследователя предполагает более долгие процессы, общение с инженерами и менеджерами по продуктам, а также построение прогностических моделей, осмысляющих новые данные или явления в их развитии, тогда как аналитики фокусируются на прошлом и текущем состоянии.

Надеюсь, статья была интересной и полезной. Спасибо за внимание!
Подробнее..

Переводим синтаксис 1С на английский язык

08.09.2020 12:21:09 | Автор: admin

Когда программисты первый раз видят прикладной язык 1С, многие впадают в ступор. Несмотря на то, что родной русский язык в любом случае ближе и понятнее, читать код на русском языке и понимать, что происходит в нем (когда это в новинку) не так-то просто.

Опытный программист сразу увидит определенные знакомые конструкции (условия, циклы, вызовы функций), но многие моменты в коде все равно будут непонятными и непривычными. А уж если код был написан программистом с даром красивого именования переменных и функций, то процесс первого знакомства с 1С обещает быть еще более ярким. Впрочем, последнее справедливо не только для 1С.

Пример кода от любителя красивого синтаксиса Пример кода от любителя красивого синтаксиса

Сейчас процесс перевода 1С на английский язык идет полным ходом. К существующим ранее решениям (таким как 1C:Drive) недавно добавился 1С:ERP World Edition, а разработка на английском языке (более привычном и понятном для многих начинающих или не связанных с 1С программистов) стала еще более актуальной.

Как же человеку, уже прикипевшему к русскому языку в коде и / или со знаниями английского на уровне London is the capital of Great Britain MicrosoftCoca-ColaOk быстро перестроиться на кодирование на английском языке?

Есть несколько способов:

1. Первое и самое банальное подтянуть знания английского языка. Даже если удастся запомнить, как писать все нужные конструкции, названия объектов и переменных все равно желательно давать понятными англоговорящему кодеру. И чтобы не сидеть все время в обнимку с гугл-переводчиком, лучше потратить некоторое время на освоение нового языка, благо ресурсов сейчас для этого предостаточно.

Вот пример кода, как не нужно делать:

2. Второй способ открыть любую типовую конфигурацию и искать название на английском нужной конструкции с помощью синтаксис-помощника. Как правило, там это название будет приведено подобным образом:

Пример типовой конфигурацииПример типовой конфигурации

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

Поехали!

Условный оператор:

Если Тогда

ИначеЕсли Тогда

Иначе

КонецЕсли;

If Then

ElsIf Then

Else

EndIf;

Циклы:

Для Счетчик = 1 По 10 Цикл

КонецЦикла;

For Counter = 1 To 10 Do

EndDo;

Для Каждого Из Цикл

КонецЦикла;

For Each In Do

EndDo;

Пока Цикл

КонецЦикла;

While Do

EndDo;

Инструкции препроцессора и директивы компиляции:

#Область
#КонецОбласти

#Region
#EndRegion

Клиент

Client

Сервер

Server

МобильноеПриложениеКлиент

MobileAppClient

МобильноеПриложениеСервер

MobileAppServer

ТолстыйКлиентОбычноеПриложение

ThickClientOrdinaryApplication

ТолстыйКлиентУправляемоеПриложение

ThickClientManagedApplication

ВнешнееСоединение

ExternalConnection

ТонкийКлиент

ThinClient

ВебКлиент

WebClient

&НаКлиенте

&НаСервере

&НаСервереБезКонтекста

&НаКлиентеНаСервереБезКонтекста

&AtClient

&AtServer

&AtServerNoContext

&AtClientAtServerNoContext

Логические и вспомогательные операторы:

И

Или

Не

And

Or

Not

Продолжить

Continue

Прервать

Break

Возврат

Return

Экспорт

Export

Знач

Val

Новый

New

Перем

Var

ВызватьИсключение

Raise

Попытка / исключение:

Попытка

Исключение

КонецПопытки;

Try

Except

EndTry;

Работа с транзакциями:

НачатьТранзакцию

BeginTransaction

ОтменитьТранзакцию

RollbackTransaction

ЗафиксироватьТранзакцию

CommitTransaction

ТранзакцияАктивна

TransactionActive

Функции / процедуры:

Функция

КонецФункции

Function

EndFunction

Процедура

КонецПроцедуры

Procedure

EndProcedure

Популярные конструкторы:

Массив

Array

Структура

Structure

Соответствие

Map

СписокЗначений

ValueList

ТаблицаЗначений

ValueTable

ДеревоЗначений (Строки, Колонки)

ValueTree (Rows, Columns)

Запрос

Query

МенеджерВременныхТаблиц

TempTablesManager

ТабличныйДокумент

SpreadsheetDocument

ТекстовыйДокумент

TextDocument

FTPСоединение

HTTPСоединение

FTPConnection

HTTPConnection

COMОбъект

COMObject

WSПрокси

WSProxy

БлокировкаДанных

DataLock

Граница

Boundary

ДвоичныеДанные

BinaryData

Диаграмма

Chart

ДиаграммаГанта

GanttChart

ДиалогВыбораФайла

FileDialog

ДокументDOM

ДокументHTML

DOMDocument

HTMLDocument

ЗаписьDOM, ЗаписьJSON,

DOMWriter, JSONWriter,

ЧтениеHTML, ЧтениеJSON,

HTMLReader, JSONReader,

ИнтернетПочтовоеСообщение

InternetMailMessage

Картинка

Picture

КвалификаторыДаты, КвалификаторыЧисла,

DateQualifiers, NumberQualifiers,

КоллекцияДвижений

RegisterRecordsCollection

КомпоновщикМакетаКомпоновкиДанных

DataCompositionTemplateComposer

КомпоновщикНастроекКомпоновкиДанных

DataCompositionSettingsComposer

МакетКомпоновкиДанных

DataCompositionTemplate

МоментВремени

PointInTime

ОписаниеОповещения

NotifyDescription

ОписаниеТипов

TypeDescription

ОтборКомпоновкиДанных

DataCompositionFilter

ПараметрКомпоновкиДанных

DataCompositionParameter

ПолеКомпоновкиДанных

DataCompositionField

ПараметрыЗаписиJSON

JSONWriterSettings

ПараметрыЗаписиXML

ПараметрыЧтенияXML

XMLWriterSettings

XMLReaderSettings

ПочтовоеСообщение

MailMessage

ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений

DataCompositionResultValueCollectionOutputProcessor

ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент

DataCompositionResultSpreadsheetDocumentOutputProcessor

ПроцессорКомпоновкиДанных

DataCompositionProcessor

РеквизитФормы

FormAttribute

СериализаторXDTO

XDTOSerializer

ФабрикаXDTO

XDTOFactory

СообщениеПользователю

UserMessage

СхемаКомпоновкиДанных

DataCompositionSchema

Файл

File

ХранилищеЗначения

ValueStorage

Цвет

Color

Шрифт

Font

УникальныйИдентификатор

UUID

Популярные методы объектов:

Выполнить

Execute

ВыполнитьПакет

ExecuteBatch

УстановитьПараметр

SetParameter

Выбрать

Select

СоздатьНаборЗаписей

CreateRecordSet

Прочитать

Read

Вставить

Insert

Выгрузить

Unload

Загрузить

Load

Добавить

Add

Записать

Write

Заполнить

Fill

Итог

Total

Количество

Count

Метаданные

MetaData

Очистить

Clear

Получить

Get

ПроверитьЗаполнение

CheckFilling

Удалить

Delete

Переместить

Move

Найти

Find

НайтиСтроки

FindRows

Сортировать

Sort

Скопировать

Copy

ПолучитьМакет

GetTemplate

ПолучитьОбласть

GetArea

СрезПервых, СрезПоследних

SliceFirst, SliceLast

НайтиПоНаименованию

FindByDescription

НайтиПоКоду

FindByCode

НайтиПоРеквизиту

FindByAttribute

Популярные функции и процедуры глобального контекста:

НачалоДня, НачалоМесяца,

BegOfDay, BegOfMonth,

КонецДня, КонецМесяца,

EndOfDay, EndOfMonth,

ОписаниеОшибки

ErrorDescription

ФоновыеЗадания

BackgroundJobs

ПолучитьИзВременногоХранилища

GetFromTempStorage

ТекущаяДата

CurrentDate

ТекущаяДатаСеанса

CurrentSessionDate

Дата

Date

ПоказатьВводДаты, ПоказатьВводСтроки,

ShowInputDate, ShowInputString,

ПоказатьВопрос

ShowQueryBox

ПоказатьЗначение

ShowValue

ТипЗнч

TypeOf

Тип

Type

Вычислить

Eval

Формат

Format

ЗаполнитьЗначенияСвойств

FillPropertyValues

ПолучитьОбщуюФорму

GetCommonForm

ПолучитьОбщийМакет

GetCommonTemplate

ПолучитьФорму

GetForm

ОткрытьФорму

OpenForm

РольДоступна

IsInRole

ПустаяСтрока

IsBlankString

Лев, Прав, Сред

Left, Right, Mid

Мин, Макс

Min, Max

Оповестить, ОповеститьОВыборе

Notify, NotifyChanged

ПредопределенноеЗначение

PredefinedValue

УстановитьПривилегированныйРежим

SetPrivilegedMode

ПрочитатьJSON, ПрочитатьXML

ReadJSON, ReadXML

Окр

Round

СтрДлина, СтрЗаменить, СтрНайти,

StrLen, StrReplace, StrFind,

ВРег, НРег

Upper, Lower

ЗначениеЗаполнено

ValueIsFilled

Популярные системные перечисления:

ВариантЗаписиДатыJSON

JSONDateWritingVariant

ВариантСтандартногоПериода

StandardPeriodVariant

ВидГраницы

BoundaryType

ВидГруппыФормы

FormGroupType

ВидДвиженияБухгалтерии

AccountingRecordType

ВидДвиженияНакопления

AccumulationRecordType

ВидКнопкиФормы

FormButtonType

ВидПоляФормы

FormFieldType

ВидСравнения

ComparisonType

ВидСравненияКомпоновкиДанных

DataCompositionComparisonType

ДопустимаяДлина

AllowedLength

ДопустимыйЗнак

AllowedSign

ДоступКФайлу

FileAccess

КодВозвратаДиалога

DialogReturnCode

КодировкаИменФайловВZipФайле

FileNamesEncodingInZipFile

КодировкаТекста

TextEncoding

МетодСжатияZIP

ZIPCompressionMethod

МетодШифрованияZIP

ZIPEncryptionMethod

ОбходРезультатаЗапроса

QueryResultIteration

ПротоколИнтернетПочты

InternetMailProtocol

РежимБлокировкиДанных

DataLockMode

РежимДиалогаВопрос

QuestionDialogMode

РежимДиалогаВыбораФайла

FileDialogMode

РежимЗаписиДокумента

DocumentWriteMode

РежимПроведенияДокумента

DocumentPostingMode

РежимОкругления

RoundMode

РежимСохраненияПутейZIP

ZIPStorePathMode

РежимУправленияБлокировкойДанных

DataLockControlMode

Символы

Chars

СостояниеФоновогоЗадания

BackgroundJobState

СпособSMTPАутентификации

SMTPAuthenticationMode

СпособPOP3Аутентификации

POP3AuthenticationMode

ТипВнешнейКомпоненты

AddInType

ТипГруппыЭлементовОтбораКомпоновкиДанных

DataCompositionFilterItemsGroupType

ТипЗначенияJSON

JSONValueType

ТипТекстаПочтовогоСообщения

InternetMailTextType

ТипУзлаDOM

DOMNodeType

ТипУзлаXML

XMLNodeType

ТипФайлаТабличногоДокумента

SpreadsheetDocumentFileType

ТипФайлаФорматированногоДокумента

FormattedDocumentFileType

УровеньЖурналаРегистрации

EventLogLevel

ЧастиДаты

DateFractions

Популярные объекты метаданных, упоминаемые в коде:

Справочники

Catalogs

Документы

Documents

РегистрыСведений

InformationRegisters

РегистрыНакопления

AccumulationRegisters

РегистрыБухралтерии

AccountingRegisters

РегистрыРасчета

CalculationRegisters

ПланыВидовХарактеристик

ChartsOfCharacteristicTypes

ПланыСчетов

ChartsOfAccounts

ПланыВидовРасчета

ChartsOfCalculationTypes

Перечисления

Enums

Константы

Constants

(Внешние) Обработки

(External) DataProcessors

(Внешние) Отчеты

(External) Reports

РегламентныеЗадания

ScheduledJobs

ПланыОбмена

ExchangePlans

ПараметрыСеанса

SessionParameters

ВнешниеИсточникиДанных

ExternalDataSources

Популярные функции в языке запросов:

ДОБАВИТЬКДАТЕ

DATEADD

РАЗНОСТЬДАТ

DATEDIFF

НАЧАЛОПЕРИОДА, КОНЕЦПЕРИОДА

BEGINOFPERIOD, ENDOFPERIOD

КОЛИЧЕСТВО(РАЗЛИЧНЕ)

COUNT(DISTINC)

ЗНАЧЕНИЕ

VALUE

ТИП

TYPE

ЕСТЬNULL

ISNULL

ПРЕДСТАВЛЕНИЕ

PRESENTATION

ПРЕДСТАВЛЕНИЕССЛКИ

REFPRESENTATION

ТИПЗНАЧЕНИЯ

VALUETYPE

В (ИЕРАРХИИ)

IN (HIERARCHY)

ДАТАВРЕМЯ

DATETIME

ПОДОБНО

LIKE

МЕЖДУ И

BETWEEN AND

ВРАЗИТЬ

CAST

ВБОР

КОГДА

ТОГДА

ИНАЧЕ

КОНЕЦ

CASE

WHEN

THEN

ELSE

END

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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru