«Теперь я царь и бог разработки». Белорусский программист-сеньор даёт советы тем, кто пошёл на ИТ-курсы

31 комментарий
«Теперь я царь и бог разработки». Белорусский программист-сеньор даёт советы тем, кто пошёл на ИТ-курсы

В своей колонке для dev.by Senior Android Developer Вячеслав Кацубо приводит пул правил для тех, кто пошёл на курсы по программированию, и тех, кто там преподаёт.  

Читать далее...

«Я прошёл курсы — я бог программирования и царь разработки», — частенько приходится читать сопроводительные письма к резюме с подобным настроением. Чем выше спрос на разработчиков, тем больше людей думают, что порог вхождения в отрасль крайне низкий. Ну, правда ведь — крупные компании набирают людей десятками, а то и сотнями ежегодно. Чем я хуже тысяч программистов в своём городе? И неужели нельзя быстренько окончить курсы и за год стать программистом?

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

За девять лет работы через меня прошли десятки соискателей. Кто-то приходил как раз после курсов. Были даже преподаватели курсов, которые не могли ответить на простейшие вопросы, аргументируя это тем, что нет смысла отвечать на то, что легко можно найти в поисковике. Выборка довольно большая, поэтому у меня сформировался пул определённых правил для тех, кто ходит на курсы, и тех, кто преподаёт там.

Я пошёл на курсы, поэтому мне следует:

1. Ответить на вопрос «Зачем мне эти курсы: чтобы научиться или для бумажки?».

Если утвердительно ответили на первую часть, значит, вы не хотите стать «просто программистом», а стремитесь начать программировать. Тогда продолжаем. В противном случае не тратим время и деньги зря.

2. Постоянно задавать вопрос: «А что это?»

Очень часто начальным этапом обучения является работа со словами и строками. Многие считают, что это просто. Чаще всего потому, что глубоко не копают, не понимают сущность. Вот есть строка. А что это? Отвечают, что просто текст. Никто не рассказывает, что текст — это символы, которые идут один за другим. Кто-то может подумать, что это очевидно, однако для начинающих это обязательно надо проговаривать. Символы представляют собой цифру/набор цифр (не будем углубляться в кодировки). На практике часто возникают задачи по работе со строками или их символами. Добавление одного символа в середину строки может и казаться простой операцией, но ведь мы-то знаем, что это на самом деле далеко не тривиальная задача.

Для тех, кто в танке, пример на с++: выделить память под новую строку, скопировать первую часть старой строки до места добавления, положить добавляемый  символ, скопировать оставшуюся часть строки.

3. Не забывать про вопрос «А что, если?». Так вы получите не сырую информацию, а нужные вам знания.

Вам  сказали, что 1+1 = 2. А что, если 2+2? А 2+3? Сказали, что есть вот такая сортировка. А что, если сортировка будет другая? А как она работает? Вам дали лодку — разберите её на части, сделайте её анализ.

kalifolog.ru

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

4. Всё применять на практике.

Получили знания — сразу же пишите код, каким бы простым он ни казался. Практика нужна всегда. Многие считают что запускать «Hello world» не обязательно всегда  это же понятно и просто. Но это делать необходимо. Скомпилировать и запустить. Все наши знания — это комплекс маленьких знаний и связи между ними. Пропустим что-то маленькое, и большой объём знаний получит ахилесову пяту, которая рано или поздно себя обнаружит.

Был у меня студент, который пропустил по курсу Java пакет Math, в итоге у него был свой MathHelper (sign, max, min, PI, E и т.д.). Любой программист со стажем над этим только посмеяться может.

5. Всегда ставить перед собой большие цели, располагая небольшим объёмом знаний.

Главное — помнить о системности математики, логики, программирования. Так вы приумножите знания за относительно короткий период времени.  Вам рассказали, как рисовать точку, нарисуйте две, четыре, шестнадцать, а потом напишите «Танчики».

Пример из практики. Как-то в рамках одного проекта надо было сделать табличку, которая крутится, а потом останавливается, и в ней меняется текст. Если попытаться решить эту задачу в лоб, крутить таблицу, делать трёхмерную графику, потребуется слишком много усилий и времени. Что делать? Анализировать. Как сделать эффект, что таблица крутится? Сузить по высоте и плавно разжимать обратно. Это одна строчка кода, трёхмерная графика вообще не нужна. Дальше начинается математический анализ. Как плавно раскрутить и так же плавно остановить таблицу? Строим график для нашего «виртуально угла поворота» (напоминаю, что угол транслируется в коэффициент вертикального масштабирования). Получим график косинуса [-PI/2,PI/2] и идеальный вариант — плавно возрастает, набирает обороты, относительно равномерно крутится на пике и плавно угасает. Что дальше? График есть. Как подсчитать угол? Вспоминаем курс вышки: угол в точке X представляет собой интеграл этой функции от начала до X.  Вот так у нас из комплекса знаний по разным направлениям получается элегантное и относительно простое решение (поверьте, считать один раз интеграл в разы проще, чем работать с матрицами в трёхмерном пространстве, там ведь ещё есть перспектива, камера, проекция, трансформация и много другой ереси)

6. Выполнили задание – обязательно сделайте работу над ошибками и детально разберите все провалы.

То, как делать не нужно — это очень ценный опыт.

Я преподаю на курсах, поэтому мне следует:

1. Самому участвовать в реальных проектах и программировать.

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

Бангладеш, Джессор, 10 класс. Джулиан Жермен (Julian Germain), «Портреты классной комнаты»

3. Давать знания систематизировано и раскладывать их на слои. Не надо человеку, который только пришёл учиться программировать под Android, сразу рассказывать, как переключать экраны с анимацией. Сначала надо научить, как открыть экран, как создать текст, показать картинку.

4. Акцентировать внимание на сущности. Если рассказываете о структуре данных, способах хранения, указателях, ссылках, списках, расскажите о различиях между массивом и связным списком. Почему это важно?

Пример.  

Возникла задача написать видеопроигрыватель. Настал момент работы с кадрами. Требуется отображать кадры в том порядке, в каком они поступили в память, иногда (при загрузке процессора) пропускать. Поскольку кадров несколько, значит их надо хранить в списках. А в каких? Массив — и мы получаем проблему с постоянным копированием. Список? А какой? ArrayList? Получим то же, что и с массивом. LinkedList? Уже лучше. Понимание принципов работы таких структур очень важно и любой, кто хоть немного понимает их,  сразу выдаст, что тут уместен «FIFO» список (он же «очередь»). Ради интереса я проверил и получил, что с ArrayList скорость воспроизведения падала почти в 1,5 раза.

5. Предлагать задания «со звёздочкой». Научили открывать экран и показывать на нём текст — дайте задание открыть экран и показать два текста. Научили нажимать на кнопку — попросите нажать на три кнопки в определённой последовательности.

6. Когда есть «если», на конкретных примерах рассказывать и про «то».

Приведу пример плохого обучения: если мы сделаем сортировку вот так, у нас всё будет круто. А что если не так, а по-другому, Почему именно так? Почему не иначе? Чем эта сортировка лучше других?

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

7. Помнить, что лучшее обучение — «агрессивное». Нет, кричать и проявлять агрессию в её привычном понимании не надо. А вот поэтапно, системно, но целенаправленно бросать людей «в реку» — очень даже!

Пример.

Предположим, к вам пришли на курсы программирования под Android? План такой.

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

Вторая неделя — учите создавать кнопки, текст.

Третья неделя — работа с графикой.

Четвёртая — обучение работе с потоками и обработка информации. И вот ребята уже могут создавать простейшие приложения. Например, калькулятор или секундомер.

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

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

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

Хотите сообщить важную новость?

Пишите в наш Телеграм

Читайте также

Школа дизайна бесплатно переучит пострадавших бюджетников
Школа дизайна бесплатно переучит пострадавших бюджетников
Школа дизайна бесплатно переучит пострадавших бюджетников
7 отличных курсов по финансам. Уплыть «с галеры» и основать свой стартап
7 отличных курсов по финансам. Уплыть «с галеры» и основать свой стартап
7 отличных курсов по финансам. Уплыть «с галеры» и основать свой стартап
Если вы посмотрели «Волк с Уолл-стрит» и хотите, как Леонардо ди Каприо прогуливаться по яхте с бокалом вина в руках, но не знаете, с чего начать, подборка курсов Digitaldefynd станет для вас отличным стартом. Здесь представлены как платные, так и бесплатные программы, которые помогут вам освоить финансовое моделирование. Они подойдут не только для начинающих слушателей, но и для экспертов.
От рисования до блокчейна. 25 коротких онлайн-курсов, которые помогут не заскучать в отпуске
От рисования до блокчейна. 25 коротких онлайн-курсов, которые помогут не заскучать в отпуске
От рисования до блокчейна. 25 коротких онлайн-курсов, которые помогут не заскучать в отпуске
Digitaldefynd собрали разнообразные онлайн-курсы сайта Udemy, которые охватывают не только сферы разработки, но и смежные области.
+30% к зарплате. Музыкалка с 200 учениками ушла в онлайн и выросла
+30% к зарплате. Музыкалка с 200 учениками ушла в онлайн и выросла
+30% к зарплате. Музыкалка с 200 учениками ушла в онлайн и выросла
Весной музыкальная школа Fasol столкнулась с теми же проблемами, что и офлайн-бизнес во всем мире — из-за пандемии пришлось отменить занятия. Но компания уже который год разрабатывала LMS-платформу для онлайн-обучения, которая помогала ребятам в ведении бизнеса. Ее срочно улучшили, запустили рекламу — и начали работать онлайн. 
5 комментариев

Обсуждение

4

Я хочу также чуть возразить герою статьи - приставки "Senior" теперь тоже вешают все кому не лень и при этом дают советы ещё как другим жить :)

5

>> не столько то, что ты умеешь делать, сколько то, как ты мыслишь.

Великие красивые слова и тут же мега-синиор автор себе же противоречит

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

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

0

Конкретно тогда стояла задача написать сортировку. Собеседуемый отвечал что это легко гуглися, и не могу "сочинить" ее заново. Я понимаю что все используют qsort, но сортировку максимальным элементоим либо пузырьком нужно уметь восстановить/сочинить в любом случае

2

Ну не знаю, если бы мне предложили на собеседовании написать сортировку, я бы предложил не тратить друг другу время. Для senior+ позиций это несерьёзно.

2

Если есть основания пологать что человек senior+ то тут я соглашусь, но когда мне показывают бумажки "я прошел X курс" - педпочту потратить лишних 5 минут на выяснения потолка знаний кандидата.

ПС
Когда я собеседовался на позицию сеньёра - меня попросили написать интефейс компоратора - вроде просто, но вместо ответа "это гуглится" я просто написал то что попросили и это заняло все те-же 60с на ответ. Мое мнение в том что: будь ты хоть 3 раза синьер - но на простые вопросы должен отвечать всегда. Представьте себ к примеру дантиста с 10летним стажем, который не знает(не путаем "не помнит", "забыл как называется") что такое эмаль - пошли бы вы к такому лечить зубы? Вот и меня смутил человек который "учит" но "не учится", читать с бумажки много ума не надо - вот как это воспринялось на тот момент.

0

В целом согласен. Ну интерфейс компаратора - это не сортировку. Можно, конечно, быстро написать. Но для senior+ обычно такие вопросы не задают.
Лично я примерно так выстраиваю технические вопросы (с++), причём предупреждаю кандидата, что будет от простого к сложному, просто чтобы разрядить напряжение и снять стресс:
Про инкапсуляцию даже не заикаюсь, всё равно на практике её регулярно недоиспользуют. Спрашиваю сначала про виртуальные деструкторы, зачем они нужны и когда не нужны. Потом чем ссылка от указателя отличается (были случаи, когда "миддлы" не отвечали). Потом пару вопросов по структурам данных и алгоритмам (STL, алгоритмическая сложность и т.п.), пару по потокам, пару по шаблонам. Потом основываясь на резюме можно про базы / сеть и т.п. Если кандидат стрессует, то прошу вспомнить самую интересную задачу или баг, с которыми кандидат столкнулся за последние год два работы. Какие-то практические задания могу предложить только если сомневаюсь в кандидате.
По полноте ответа на вопросы про структуры данных и потоки обычно очень хорошо виден уровень. Ну и в качестве шпаргалки для оценки можно смотреть "матрицу компетентности программиста".

0

Алгоритмы сортировок не имеют никакого отношения к реальной работе прикладного программиста, зачем про них спрашивать?

1

1) Это минимальные знания и простейший алгоритм, знающие ответят быстро, забывшие сочинят - идеальная задача на отсеивание 50% собеседуемых
2) На последнем проекте пришлось писать в 2 местах, в одном из них прокатил qsort, во втором нет (сортировка с группировкой по разным полям и нескольким критериям (в том числе исходной позицией) - можно было сделать комбой из разделения на несколько массивов, отдельными сортировками и последующим слиянием - но модифицированная версия пузырька справилась за 1 заход)

0

1. Что значит минимальные знания? Наличие этих знаний говорит только о том какое образование получил человек, а в ИТ сфере много людей с непрофильным образованием, без образования или с таким образованием, которое знаний не даёт.
2. Тут надо углубляться в задачу, не хочется это делать, но уверяю вас - знание сортировок ничего не говорит о качествах прикладного программиста, для него это исключительный случай, можно и погуглить.

0

1. Это ещё говорит о его стремлениях и желаниях разобраться как это работает. Сортировки рассматриваются почти везде на ранних этапах. Не знаешь - стоит работать под присмотром.

2. Так иногда надо знать, что есть альтернативные варианты - некоторые с образованием не знают почему-то этого. Некоторые сеньоры не знают этого и когда студент показывает ему очень плохое решение - он не знает, что можно лучше и код идёт в прод.

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

Если расти хочется в управление - тогда можно попробовать и не учить это.

1

Сортировки используются в прикладном программировании. И надо знать как они реализуются, что применять правильно.
Одно дело - отсортировать массив уникальных чисел. Совсем другое, например, отсортировать яблоки на красные и зеленые. Можно запустить стандартный алгоритм - O(n log n), а можно написать простенький метод и справиться за один проход. И если выходных данных много - то получится большая разница. Особенно учитывая то, что на сортировку слиянием надо доп. память.

0

ответил выше

Anonymous
Anonymous
0

можно написать простенький метод
> Зачем изобретать велосипед ? Неужели напишите алгоритм лучше реализованного в любом современном языке ?

0

Надо знать, что библиотечный метод лучше и ничего не надо изобретать.
Я приводил выше пример про яблоки. Давайте переформулируем его. Есть массив с пользователями. У каждого есть дата рождения и нам надо разделить их на до и после 18. Размер входных данных очень большой и мы не можем создать 2 массива и просто перекладывать данные туда - решаем отсортировать.
Смотрим стандартный алгоритм сортировки Java - dual pivot quicksort. Сложность O(n log n), а в вырожденном случае - O(n^2)
Пишем свой алгоритм (я не встречал такой в стандартных библиотеках, хотя он стар), который находит слева первого пользователя старше 18, справа - младше и меняет их местами. Итого O(n) и приличный выигрыш по времени исполнения.

Anonymous
Anonymous
0

На .NET достаточно без размышлений написать apples.GroupBy(apple => apple.Color);

> разделить их на до и после 18.
var classified = chicks.GroupBy(chick => new { Category = 18 > chick.Age ? "jailbait" : (35 < chick.Age ? "cougar" : "match" )});

Свои алгоритмы в этих случаях: или overengineering, или ни разу не прикладная задача

0

В Java тоже можно без размышлений.
Но у нас большой объем данных и нет места на хранение.

А что такое прикладная задача? Я тут загуглил и первая ссылка говорит
"Основные цели и задачи прикладного программирования

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

Виды прикладного программирования

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

Anonymous
Anonymous
0

Что такое большой объём данных в цифрах? Если на многие гига, то сначала придётся обойти ограничение на объём коллекции (~2GB в CLR) - фрагментированием, объединением или снижением "веса" элементов (до того, чтобы что-то было сортировать).
Под прикладными я понимаю стандартные решения, где не идёт борьба за отдельные байты или микросекунды (как у биржевого робота) и где не требуется свежее знание высшей математики.

0

Массив из 120 миллионов яблок. Для реальности можно взять замеры с метеостанций (а то яблок как-то нереально много).
А памяти может не хватать не из-за того, что много данных (тут можно распределить вычисления по кластерам, хотя тоже хочется оптимальнее, чтоб не занять весь датацентр своей задачей), а просто ограничения среды исполнения.

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

Anonymous
Anonymous
0

В вашей задаче, наверное, своя сортировка оправдана.
Я, скорее, говорил про корпоративные приложения, где подобные улучшения стоят в конце очереди после затыкания дыр в памяти, оптимизации I/O, протоколов итп. И где людям за 30 лет разработки ни разу не было нужды писать сортировку.

-5

>> Был у меня студент, который пропустил по курсу Java пакет Math, в итоге у него был свой MathHelper (sign, max, min, PI, E и т.д.). Любой программист со стажем над этим только посмеяться может.

1) Своя библиотека зато работает понятно, не нужно ждать сюрпризов в продакшене. К тому же часто (в большинстве случаев) написать пару своих функций лучше, чем тянуть всю библиотеку в код. Привет чувакам, которые тянут весь lodash ради какой-нибудь функции omit.

2) Если в дальнейшем вам нужно будет написать либу MySuperMathHelper, то чуваак уже будет знать как это делать, пока ваши "смеющиеся синиоры" будут судорожно копаться в интернете в поисках а как же это делается.

3) Так мы и поняли, что вы мега-крутой "спицЫалист са стажам" который только и умеет что смеяться над жалкими людишками, осмелившимися покуситься на святая-святых - программирование (доступно только богам и Вам)

Уж звиняйте, дальше не читал, хватило с меня всего вышеизложенного, чтобы составить портрет оратора ))

6

1) Пакет Math идет в составе java, а не подключается, и там ф-ции написанны в разы более оптимальней. Про часть "написать свою ф-цию вместо целой библиотеки" соглашусь, но с оговоркой - когда в этом есть смысл. В данном примере я говорю о том что не надо писать свой String и Math (а некоторые пишу, потому как недоучили / пропустили)

2) Если будет нужно - напишем. Но синус, косинус и пи - я буду по прежнему брать из стандартной Math

3) Смеятья? Зачем. Я только за обучение новых специалистов. К сожалению очень часто приходят люди, которые думают что "сертификат о прохождении курсов" это билет на работу, это огорчает. Многие начинающие принебрегают основами.

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

0

В любом случае я бы советовал очень и очень серьёзно отнестись к человеку, которые сам написал либу по нахождению Pi ;) Пусть он и не знает всего что там существует уже "сделанного до него". Это выучить никогда не поздно. Я например тоже не сразу узнал про функцию trim в JS, но это ещё на курсах было правда, и что с того. Это такие мелочи по сравнению с тем что чувак или шарит в программировании или нет, или есть у него способности или нет. В данном случае чувак и шарит, и способности есть.

1

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

0

а что значит "нахождение Пи"? это же нерациональное число, if you know what I mean.

0

> Пакет Math идет в составе java, а не подключается, и там ф-ции написанны в разы более оптимальней

Ну скажите честно, вы же сами никогда не смотрели, что лежит в этом пакете, а приняли его как данность?
Math вызывает нативные методы. Выигрыш в производительности за счёт этого. Только вот, как вы вообще можете говорить про «оптимальней», если везде свои реализации?

1

К счастью смотрел - так как работал с графикой, и даже писал свой вариант синуса (хэш таблица часто используемых значения для оптимизации скорости, в приложении часто(~95%) фигурировали оперделенные значения). Почему оптимальней? - https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

> By default many of the Math methods simply call the equivalent method in StrictMath for their implementation. Code generators are encouraged to use platform-specific native libraries or microprocessor instructions, where available, to provide higher-performance implementations of Math methods. Such higher-performance implementations still must conform to the specification for Math.

>>platform-specific native libraries or microprocessor instructions, where available

Потому что завязанно на платформе, а не написанно с использованием только процесорных мощностей

0

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

3

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

1

Я вот не понимаю как вы готовите ArrayList, что он медленнее LinkedList.
Ибо пропускать гораздо эффективнее в массиве - сдвинуться на 20 элементов вперед против 20 раз перейти по адресу в памяти.
Если при этом в память постоянно подгружается и выгружается просмотренное, то может стоит разделить входной поток на несколько массивов? По сути ArrayDeque
А в LinkedList же еще нужна доп. память, чтоб хранить ссылки на следующий и предыдущий.

В тему вспомнился твит Блоха: https://twitter.com/joshbloch/status/583813919019573248

1

1) много кадров хранить нельзя для оптимизации памяти
2) кадры иногда нужно пропускать (когда идет поверх что-либо - фреймрейт снижается для уменьшения нагрузки)

LinkedList из расчета доступа только к первому и последнему элементу дает прирост

Легко проверить - запустите для сравнения цикл добавления в конец и получения первого с его последующим удалением на LinkedList и ArrayList
Тут правльнее сказать "медленнее для данной задачи" а не по факту

PS: по итогу потом и его не хватило - так что там была использованно неблокирующая очередь
PSS: ArrayDeque не потокобезопасен, как вариант конечно можно было бы покрутить - но решение было найденно,

0

Да я в курсе, что ArrayList при добавлении в хвост может, а при добавлении/удалении в начало будет копировать своё содержимое.
Но я бы все равно на LinkedList не стал бы - попробовал бы как-то жонглировать массивами. Такой массив элементов на 10 массивов с кадрами.
Как вижу - и вы на LinkedList не задержались =)

Спасибо! 

Получать рассылки dev.by про белорусское ИТ

Что-то пошло не так. Попробуйте позже