Category: литература

Category was added automatically. Read all entries about "литература".

Что должен знать каждый программист: Алгоритмы

Несколько лет назад я опубликовал небольшую заметку под названием "Список книг которые должен прочитать каждый Java программист", в которой поделился книги, которые должен прочитать каждый профессиональный Java программист не зависимо от конкретной прикладной области, в которой он работает. Но технологий и языков программирования много. А есть ли какие-нибудь базовые навыки, которыми должен владеть каждый программист? Безусловно есть. Одним из таких навыков является построение и анализ алгоритмов.

Collapse )

Инкапсуляция многопоточных структур данных

Множество книг по программированию, освещая алгоритмы, API библиотек, подходы или шаблоны, приводят куски кода, которые нельзя использовать в реальном большом проекте из-за различных недостатков. В реальном коде большого проекта есть множество аспектов, которые приходится учитывать: обработка ошибок, протоколирование, стиль кода, дизайн и т.п. Редкий книжный пример можно скопировать в свой проект без соответствующих изменений. Блоги, в том числе и мой блог, не исключение. Попытка донести до читателя определенную мысль компактно, в наименьшее число строчек кода, в первую очередь приводит к недостаткам в дизайне кода. Collapse )

Список книг которые должен прочитать каждый Java программист

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

0. Java Language Specification 3rd Edition by James Gosling et al это самая главная книга, книга номер "ноль" этого списка, известная также как JLS. Она доступна в HTML виде здесь. В третьей редакции описывается 5-ая версия языка. Я считаю, что каждый Java программист должен прочитать JLS хотя бы раз. Необходимо знать все возможности предоставленные языком для того чтобы использовать их самому и для того чтобы понимать код написанный другими. JLS это аналог JavaDoc или другой документации для используемых вами библиотек. Однако, в отличие от библиотечных классов, для которых документация обычно доступна из вашей среды программирования, по языку контекстная документация в средах программирования не предоставляется, поэтому JLS нужно читать практически "от корки до корки" хотябы на уровне оглавления и общего содержания каждого пункта. JLS является обязательной литературой при подготовке к сдаче экзамена на Oracle Certified Professional Java Programmer (PJP)

1. Effective Java 2nd Edition by Joshua Bloch рассказывает как именно надо использовать язык Java, чтобы писать хорошие и понятные другим программы. Это сборник практических советов и шаблонов которые должны быть в репертуаре каждого Java программиста. Во второй редакции своего бестселлера Блох рассказывает об эффективном использовании всех возможностей 5-ой версии Java. Даже программист с многолетним опытом откроет в ней что-то новое и уж точно получит удовольствие от систематизации всех основных знаний про программирование на Java.

2. Java Concurrency in Practice by Brian Goetz et al необходима всем, кто пишет многопоточные приложения на Java. Её не нужно читать если вы пишете простые приложения а для бизнес-логики используете J2EE или другие каркасы приложений которые изолируют программиста от многопоточности. Однако, как только вам необходимо оптимизировать производительность или скорость реакции вашего приложения, то в современном мире от многопоточности вам не уйти. В этом случае книга Гоэтза будет вашим лучшим помощником.

3. Java Puzzlers: Traps, Pitfalls, and Corner Cases by Joshua Bloch, Neal Gafter это интересная книга которая состоит из интеллектуальных загадок исключительно на языке Java. Она раскроет перед вами все граничные случаи языка Java, научит как не надо программировать, чтобы ваш код был понятен. Книжка не обязательна для прочтения, но очень рекомендуется для подготовки к экзамену PJP и для собственного удовольствия.

UPDATE: Написал новую заметку про книжку, которая безусловно полезна для всех программистов, независимо от технологии: "Что должен знать каждый программист: Алгоритмы". А здесь обновил название экзамена (было Sun Certified Java Programmer, теперь Oracle Certified Professional Java Programmer).

Второй день JavaOne

Слушал много сессий :) Neal Gafter рассказывал про Closures, Alex Buckley про модульность, Cliff Click cделал очень веселый рассказ про data races.

К сожалению, Cliff Click подтвердил что "state of the art and state of the practiсe" в отладке data races это визуальные инспекции кода, аккуратное документирования и т.п. В общем, читайте замечательную книгу "Concurrency in Practice" by Brian Goetz. Процесс абсолютно не масштабируемый, но ничего лучше сейчас просто нет. Единственный инструмент каторый как-то может помочь на практите это FindBugs. Его автор "Mr. Skip-List" Bill Pugh, как всегда, сделал шикарный доклад с примерам про то как казалось бы абсолютно идиотские ошибки (типа метода equals который всегда возвращает false), после добавления их описания в FindBugs, были обнаружены в десятке мест в JDK, Glassfish, TomCat и других больших проектах.

Слушал доклад про Transactional Memory. В то время как существуем масса реализаций STM (software transactional memory), они все создают существенные накладные рассходы. Однако есть и перспективное направление развития -- Hardware Transactional Memory. Именно здесь нас скорей всего ждет прорыв в направлении масштабируемого многопоточного программирования. Но сначала должны появиться массовые процессоры поддерживающие транзакции с памятью на аппаратном уровне.

[topcoder SRM 249] Урок по тактике поведения

Очередной topcoder SRM 249 оказался мне не по зубам. По общему результату я занял 89-е место (из ~220 человек участвовавших в Division I). Я обломался не столько из-за сложности задач (несмотря на то, что на второй задаче я сильно затупил), а из-за неумения правильно организовать свою работу в соревновании типа topcoder. В итоге мой рейтинг упал с 2041 до 2014. В общем есть еще чему поучиться.

Первую задачку я написал с нормальной для себя скоростью. А потом долго-долго искал в ней несуществующую багу. Только получив административный broadcast о том, что в условии задачки содержится ошибка (один из тестов неверный) я смог расслабится и послал свое [правильное] решение на сервер.

Оставалось уже не так много времени (минут 40-50) и тут я затупил на второй задаче. Затупил и всё тут (бывает). Не увидел как она сводится к задаче о топологической сортировке и не придумал ничего лучшего как написать перебор. Глупо было тратить на это время, ибо должно было быть очевидно, что вероятность прохождения перебора на такой задаче чрезвычайно мала. Надо было найти в себе решимость оставить эту задачу в покое (раз уж затупил) и приступать к следующей.

А следующая задача оказалась элементарной и стандартной (!) геометрией, вывести площадь выпуклой оболочки точек. При моей сегодняшней скорости написания задач мне потребовалось бы для её решения 15-20 минут. А у меня оставалось меньше 10-и. Кстати, многие из победителей этого соревнования не писали алгоритм поиска выпуклой оболочки, а взяли его из своих личных библиотек программ (это разрешено правилами). Вот оно - реальное преимущество большого опыта участия в этих соревнованиях. Будем набираться ;)

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

Образование - США, Россия, Китай

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

Однако, надо заметить что наша (Российская) система образования тоже не выглядит на коне. Я сегодня был в книжном магазине в Пекине и был потрясен количеством книг по точным наукам. Целый этаж книг с отдельными стеллажами по алгебре, математическому анализу, геометрии и так далее. Там же огромное количество книг по всем современным IT технологиям. Всё в переводе на Китайский, включая достаточно новые книги. Такого разнообразия книг я не видел ни в США (буквально недавно ползал по Border's в Чикаго) ни у нас, в России. В Питере вообще нет ни одного приличного по размерам книжного магазина. Неужели у нас так мало выпускают книг или просто не найдется инвестора, который бы вложился в открытие современного книжного магазина, в котором было бы представлено всё разнообразие издаваемых в России книг?