В преддверии майских праздников вышла еще одна интересная статья Дмитрия Волошина о преимуществах проектного метода обучения перед классической схемой подачи материала. "Истинно то, что полезно" - внимание к процессам решения задач и проблем, которые максимально приближены к реальности: http://mel.fm/obrazovaniye/4520138-obucheniye-ot-dostizheny-i-proyektny-podkhod-v-obrazovanii
Мел
Почему лекции — самая бесполезная форма обучения. … и как проекты могут это исправить
Прогуливать лекции и скучные уроки с монотонными рассказами – обычная практика школьников и студентов. Иногда даже лента фейсбука бывает полезнее вялой лекции с таким же вялым преподавателем. О том, как нужно изменить подход к обучению, чтобы можно было действительно…
Для чего программисту нужны паттерны проектирования? Ответ, на первый взгляд, очевиден. Для того чтобы проектировать. И это правда.
Но, я сейчас предложу, менее очевидный ответ. Который, на мой взгляд, даже важнее, чем разработка хорошей архитектуры. Знание паттернов нужны программистам для общения.
Вот сравните например диалоги:
- Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате.
- Хорошо, мы добавим в класс для каждого типа купюр, сделаем так чтобы они по цепочке обрабатывали запрос на снятие денег, передавая остаток, который не могу обработать дальше по цепочке. А чтобы посчитать остаток в автомате -- добавим специальный класс, который позволит перемещаться по цепочке и складывать остатки в каждой ячейке.
- Не понял, объясните пожалуйста.
и
- Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате.
- Хорошо, мы используем Chain-of-responsibility для снятия и Iterator для остатков.
- Понятно, делайте.
А вам какой диалог понятнее?
Но, я сейчас предложу, менее очевидный ответ. Который, на мой взгляд, даже важнее, чем разработка хорошей архитектуры. Знание паттернов нужны программистам для общения.
Вот сравните например диалоги:
- Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате.
- Хорошо, мы добавим в класс для каждого типа купюр, сделаем так чтобы они по цепочке обрабатывали запрос на снятие денег, передавая остаток, который не могу обработать дальше по цепочке. А чтобы посчитать остаток в автомате -- добавим специальный класс, который позволит перемещаться по цепочке и складывать остатки в каждой ячейке.
- Не понял, объясните пожалуйста.
и
- Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате.
- Хорошо, мы используем Chain-of-responsibility для снятия и Iterator для остатков.
- Понятно, делайте.
А вам какой диалог понятнее?
Сегодня о нас тепло и по-братски написали в #стартапдня ✌️Коротко о нас, нашей ЦА, конкуренции с GeekBrains и трудоустройстве читайте в канале Стартап дня https://telegram.me/startupoftheday
Telegram
Стартап дня. Александр Горный.
Авторский канал о стартапах и интернет-бизнесе.
Реклама на этом канале: https://docs.google.com/presentation/d/1BFSEj7FEQZpB4K83iBXo1yqIoPnwJaVGpsyKDHKSX0s/edit
РКН: https://clck.ru/3FPm3j
Личный аккаунт: @gornal
Реклама: @Vzuhcha
ВП нет
Реклама на этом канале: https://docs.google.com/presentation/d/1BFSEj7FEQZpB4K83iBXo1yqIoPnwJaVGpsyKDHKSX0s/edit
РКН: https://clck.ru/3FPm3j
Личный аккаунт: @gornal
Реклама: @Vzuhcha
ВП нет
Как узнать что память, которую занимал объект освобождена? В некоторых языках это просто - вызвал delete и можешь быть уверен - памяти стало больше. У нас в Java все сложнее.
С одной стороны -- отлично, что нам не нужно писать delete “руками”. GC все сделает за тебя. Потерял ссылку на объект, и ничего страшного. Память будет освобождена и без ссылки. Утечки не будет.
С другой стороны, очень хочется иногда написать delete, но нет такой возможности.
И, в самом деле, как узнать, что объект удален? Можно подписаться на события GC, мы о них уже писали, но они не про конкретный объект, а про событие для всех объектов. Можно переопределить finalize() (у всех классов он есть) и обработать событие в нем. Но, если таких объектов будет много, это может сильно снизить скорость работы GC, а медленный GC это большие паузы в работе всего приложения.
К счастью есть в Java способ узнать о том что объект удален без finalize в своем потоке, а не потоке GC, удобным способом. Это phantom reference. Это тоже ссылка на объект, как и нормальная ссылка, но у нее все по-своему. Получить объект по ней нельзя. Но можно найти ее в специальном пуле ссылок для удаленных объектов.
Создали ссылку, подождали GC, проверили в пуле. Если она там есть, значит объект был удален.
А какие еще типы ссылок есть в Java? И зачем они нужны? Приходите к нам - расскажем!
С одной стороны -- отлично, что нам не нужно писать delete “руками”. GC все сделает за тебя. Потерял ссылку на объект, и ничего страшного. Память будет освобождена и без ссылки. Утечки не будет.
С другой стороны, очень хочется иногда написать delete, но нет такой возможности.
И, в самом деле, как узнать, что объект удален? Можно подписаться на события GC, мы о них уже писали, но они не про конкретный объект, а про событие для всех объектов. Можно переопределить finalize() (у всех классов он есть) и обработать событие в нем. Но, если таких объектов будет много, это может сильно снизить скорость работы GC, а медленный GC это большие паузы в работе всего приложения.
К счастью есть в Java способ узнать о том что объект удален без finalize в своем потоке, а не потоке GC, удобным способом. Это phantom reference. Это тоже ссылка на объект, как и нормальная ссылка, но у нее все по-своему. Получить объект по ней нельзя. Но можно найти ее в специальном пуле ссылок для удаленных объектов.
Создали ссылку, подождали GC, проверили в пуле. Если она там есть, значит объект был удален.
А какие еще типы ссылок есть в Java? И зачем они нужны? Приходите к нам - расскажем!
Пришло время подвести первые итоги проделанной работы! Обзорная статья по первому месяцу работы, что нового и какие планы на будущее: https://habrahabr.ru/company/otus/blog/328856/
Habr
Вторая группа обучения Java и наши новости
В апреле на образовательной платформе Otus.ru стартовал первый образовательный курс для Java-программистов, обучение на котором продлится пять месяцев. Занятия идут своим чередом в онлайн формате,...
Найм, фриланс или свой бизнес? Почему чтобы найти свой путь, стоит попробовать все? Своим опытом и взглядом на походы к трудоустройству в новой статье делится Дмитрий Волошин (основатель OTUS):
http://www.chaskor.ru/article/tri_tipa_trudoustrojstva_41945
http://www.chaskor.ru/article/tri_tipa_trudoustrojstva_41945
С радостью приглашаем всех 27 мая и 1 июня на Дни открытых дверей!
Из любой удобной точки мира - приходите к нам - формат проведения онлайн.
Проводить ДОД будет Виталий Чибриков - преподаватель на курсе Java разработки, один из основателей проекта и отличный специалист области с 12 - летним стажем разработки.
О чем будем говорить:
Расскажем почему OTUS больше чем просто образовательный проект и какие возможности получат наши студенты после прохождения обучения.
Расскажем о программе курса, практических занятиях и профессиональном сообществе разработчиков.
Расскажем о карьерных перспективах студентов и возможностях, предложенных компаниями - партнерами.
Ответим на все интересующие вопросы, поделимся новостями, просто приятно и с пользой проведем время.
Конечно, это еще не всё! Успешно прошедших вступительный тест на Дне открытых дверей ждет уникальная возможность. Спешите проверить свои знания Java и регистрируйтесь на День открытых дверей!
http://otus.ru/dod
Из любой удобной точки мира - приходите к нам - формат проведения онлайн.
Проводить ДОД будет Виталий Чибриков - преподаватель на курсе Java разработки, один из основателей проекта и отличный специалист области с 12 - летним стажем разработки.
О чем будем говорить:
Расскажем почему OTUS больше чем просто образовательный проект и какие возможности получат наши студенты после прохождения обучения.
Расскажем о программе курса, практических занятиях и профессиональном сообществе разработчиков.
Расскажем о карьерных перспективах студентов и возможностях, предложенных компаниями - партнерами.
Ответим на все интересующие вопросы, поделимся новостями, просто приятно и с пользой проведем время.
Конечно, это еще не всё! Успешно прошедших вступительный тест на Дне открытых дверей ждет уникальная возможность. Спешите проверить свои знания Java и регистрируйтесь на День открытых дверей!
http://otus.ru/dod
Согласно тесту Тьюринга, если что-то плавает как утка, крякает как утка и летает как утка, то это что-то -- утка. Но что делать, если при этом она не работает без батареек?
Если в вашем приложении объект пришел к вам по референсу на базовый класс, но ведет себя не так как вы ждете от базового класса, то у вас в приложении нарушен один из принципов SOLID -- Liskov Substitution. Ошибка частая и не сразу заметная. Ошибка порядка наследования.
Например, у вас в приложении есть квадрат и прямоугольник. Что из них базовый класс? Школьная математика нам подсказывает, что квадрат это частный случай прямоугольника. Но в проектировании это не так.
Если прямоугольнику два метода: setHeight() и setWidth() вполне подходят, то что они должны делать с квадратом? Например первый может задавать размер квадрата, а второй… ничего не делать. Или наоборот. Это не так важно. Важно что архитектура у вас при наследовании квадратом методов прямоугольника сломана. И если кто-то получит на квадрат референс базового типа, он не сможет с ним работать.
Или другой пример: есть подвижный объект и неподвижный. Кто из них базовый? Ждем ваш ответ в коментариях.
Кстати, Liskov Substitution это только одна буква в SOLID (L).
Приходите к нам, расскажем про остальные четыре.
Если в вашем приложении объект пришел к вам по референсу на базовый класс, но ведет себя не так как вы ждете от базового класса, то у вас в приложении нарушен один из принципов SOLID -- Liskov Substitution. Ошибка частая и не сразу заметная. Ошибка порядка наследования.
Например, у вас в приложении есть квадрат и прямоугольник. Что из них базовый класс? Школьная математика нам подсказывает, что квадрат это частный случай прямоугольника. Но в проектировании это не так.
Если прямоугольнику два метода: setHeight() и setWidth() вполне подходят, то что они должны делать с квадратом? Например первый может задавать размер квадрата, а второй… ничего не делать. Или наоборот. Это не так важно. Важно что архитектура у вас при наследовании квадратом методов прямоугольника сломана. И если кто-то получит на квадрат референс базового типа, он не сможет с ним работать.
Или другой пример: есть подвижный объект и неподвижный. Кто из них базовый? Ждем ваш ответ в коментариях.
Кстати, Liskov Substitution это только одна буква в SOLID (L).
Приходите к нам, расскажем про остальные четыре.
Наш главный преподаватель Java Виталий Чибриков (Vitaly Chibrikov) самоиронизирует :)
5 лет назад (когда была сделана фотография) у Виталия уже был солидный опыт преподавания и отличное чувство юмора :)
5 лет назад (когда была сделана фотография) у Виталия уже был солидный опыт преподавания и отличное чувство юмора :)
Наших компаний-партнеров стало еще больше!
Теперь и Лаборатория Касперского ждет на собеседования наших лучших студентов. Компания заинтересована в выпускниках курсов Python, C++, мобильной разработки и информационной безопасности. Запись на эти курсы откроется совсем скоро!
Теперь и Лаборатория Касперского ждет на собеседования наших лучших студентов. Компания заинтересована в выпускниках курсов Python, C++, мобильной разработки и информационной безопасности. Запись на эти курсы откроется совсем скоро!
3 июня у нас стартует второй курс по программе “Java разработчик”, в преддверии этого события мы приготовили обзор программы обучения - чем мы руководствовались и почему считаем ее актуальной?
Все что вы хотели знать, но боялись спросить о Java! :) 👇 https://habrahabr.ru/company/otus/blog/329458/
Все что вы хотели знать, но боялись спросить о Java! :) 👇 https://habrahabr.ru/company/otus/blog/329458/
Habr
Стать востребованным на рынке труда: какие темы нужно знать Java разработчику?
Нам часто задают вопросы про программу обучения: почему мы предлагаем именно такую программу и почему считаем, что именно специалисты, изучившие темы, которые мы рассматриваем на курсе, будут...
Напоминаем, что первый День открытых дверей пройдет уже завтра! Мы не только поговорим о проекте OTUS, программе обучения и перспективах для выпускников, но и по традиции разыграем среди успешно прошедших вступительное тестирование несколько бесплатных мест в новой Java группе.
Если вы еще не зарегистрировались и не прошли вступительное тестирование - самое время сделать это!
http://otus.ru/dod
Если вы еще не зарегистрировались и не прошли вступительное тестирование - самое время сделать это!
http://otus.ru/dod
Мы начинаем День открытых дверей! Присоединяйтесь!
https://www.bigmarker.com/otus-ru/11
https://www.bigmarker.com/otus-ru/11
BigMarker.com
День открытых дверей в ОТУС
Расскажем о проекте OTUS, поговорим о курсе обучения Java, перспективах для выпускников и учебном процессе. Ответим на все вопросы и разыграем бесплатные места на курсе среди успешно прошедших вступительный тест.
На первом Дне открытых дверей состоялся розыгрыш бесплатных мест в новую Java группу!
Победителями стали: Егор Кузьмин и Сергей Жерновой.
Поздравляем ребят, ждем на занятиях, желаем успехов в обучении и новых карьерных высот!
Победителями стали: Егор Кузьмин и Сергей Жерновой.
Поздравляем ребят, ждем на занятиях, желаем успехов в обучении и новых карьерных высот!
Начинаем понедельник с отличных новостей! Наших лучших выпускников по курсам Java, C++, JavaScript на собеседование ждет еще одна компания - 1С.
Еще больше карьерных возможностей!
Еще больше карьерных возможностей!
Что такое “углубленные основы”? В нашей программе есть такая тема. Что такое основы Java думаем, понятно. Например, цикл for или ветвление if-else или создание объекта через оператор new. Как основы могут быть “углубленными”?
Рассмотрим следующий базовый вопрос: как создать объект в Java? Первый и самый правильный ответ: через оператор new. Что может быть более базовым в объектно ориентированном языке, чем Object object = new Object();
Теперь усложним вопрос: Как создать объект в Java без использования new? И на этот вопрос есть два ответа: Reflection и клонирование.
Можно создать объект, если у вас есть объект класса Class<Т> этого класса:
Object instance = Class.forName("java.lang.Object").newInstance(); То есть вы можете получить новый объект класса зная только название этого класса (конечно если объект типа Class<T> для этого класса может быть загружен класс-лоадером).
Можно сделать класс Clonable и вызвать protected native Object clone() класса Object. В результате вы получите копию объекта, которую для вас сделает нативный метод.
Хорошо. Еще немного усложним задачу: как создать объект в Java не вызывая его конструктор? Кто сказал, что нельзя так сделать? Так работает ObjectOutputStream, когда десериализует объект. Вызывает sun.reflect.ReflectionFactory.newConstructorForSerialization()
Фактически создавая объект произвольного класса через вызов конструктора java.lang.Object
Что еще можно углубленно-базового рассмотреть? Вот, например, области видимости переменных: public, protected, private. Интересно что о них можно углубленного рассказать? Посмотрите sun.reflect.MagicAccessorImpl. Да-да magic accessor.
Рассмотрим следующий базовый вопрос: как создать объект в Java? Первый и самый правильный ответ: через оператор new. Что может быть более базовым в объектно ориентированном языке, чем Object object = new Object();
Теперь усложним вопрос: Как создать объект в Java без использования new? И на этот вопрос есть два ответа: Reflection и клонирование.
Можно создать объект, если у вас есть объект класса Class<Т> этого класса:
Object instance = Class.forName("java.lang.Object").newInstance(); То есть вы можете получить новый объект класса зная только название этого класса (конечно если объект типа Class<T> для этого класса может быть загружен класс-лоадером).
Можно сделать класс Clonable и вызвать protected native Object clone() класса Object. В результате вы получите копию объекта, которую для вас сделает нативный метод.
Хорошо. Еще немного усложним задачу: как создать объект в Java не вызывая его конструктор? Кто сказал, что нельзя так сделать? Так работает ObjectOutputStream, когда десериализует объект. Вызывает sun.reflect.ReflectionFactory.newConstructorForSerialization()
Фактически создавая объект произвольного класса через вызов конструктора java.lang.Object
Что еще можно углубленно-базового рассмотреть? Вот, например, области видимости переменных: public, protected, private. Интересно что о них можно углубленного рассказать? Посмотрите sun.reflect.MagicAccessorImpl. Да-да magic accessor.
И еще один весомый аргумент в пользу изучения Java! https://habrahabr.ru/company/otus/blog/329816/
Habr
Перспективы трудоустройства для Java-программистов
Наш образовательный проект стартовал с программы « Разработчик Java » не случайно. Во-многом появление этого курса связано с темпами роста IT-сферы и постоянного спроса на квалифицированных...
Завтра мы проведем еще один День открытых дверей по Java (последний перед началом обучения новой группы). Регистрируйтесь на http://otus.ru/dod?utm_source=telegram&utm_medium=internal&utm_campaign=dod2 и готовьте свои вопросы.
А поскольку мы по традиции разыграем бесплатное обучение - торопитесь скорее пройти вступительное тестирование, чтобы принять участие в розыгрыше!
А поскольку мы по традиции разыграем бесплатное обучение - торопитесь скорее пройти вступительное тестирование, чтобы принять участие в розыгрыше!
Через считанные минуты начинаем трансляцию второго (и последнего) Дня открытых дверей!
Присоединяйтесь, задавайте вопросы, следите за розыгрышем бесплатного обучения среди тех, кто успешно прошел вступительное тестирование!
https://www.youtube.com/chann…/UCetgtvy93o3i3CvyGXKFU3g/live
Присоединяйтесь, задавайте вопросы, следите за розыгрышем бесплатного обучения среди тех, кто успешно прошел вступительное тестирование!
https://www.youtube.com/chann…/UCetgtvy93o3i3CvyGXKFU3g/live
Кажется, ссылка была не очень... вот точно верная! https://www.youtube.com/channel/UCetgtvy93o3i3CvyGXKFU3g/live
YouTube
OTUS IT Онлайн - образование
OTUS – масштабный образовательный IT-портал. 4955473489
Наш канал предлагает более 5000+ вебинаров по программированию, разработке, аналитике, машинному обучению и менеджменту — бесплатно получайте актуальные знания, которые точно понадобятся в 2025 году.…
Наш канал предлагает более 5000+ вебинаров по программированию, разработке, аналитике, машинному обучению и менеджменту — бесплатно получайте актуальные знания, которые точно понадобятся в 2025 году.…