Category: it

Category was added automatically. Read all entries about "it".

fvs

Облако Mail.ru – медленная смерть?

Что-то Мэйл-ру облако сдает позиции. При регистрации аккаунта сегодня, 26 октября 2017, дали жалких 8 (восемь) гигабайт. Вот такая виртуальная халява, детишки. А как пафосно всё начиналось! 1000 ГБ по акции (терабайт), затем скукоживалось: 100 ГБ, 25 ГБ, 16 ГБ и теперь 8 ГБ свободного пространства. Очевидная деградация, признак того, что кто-то нам неведомый закрутил финансовый краник. Медленная смерть? Важные файлы на Облако@Mail.ru советую не хранить. Обзор лучших облачных хранилищ 2017 года можно найти в моем ЖЖ: ♥ Топ-10

mail-cloud.jpg
fvs

Топ-10+ | Лучшие облачные хранилища | 2018

ГЛАВНЫЙ ВЫБОР | Обзор – Где хранить файлы в сети?

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

Free Cloud Storage Services (2018)
====================================================


Microsoft OneDrive

https://onedrive.live.com/
The deal: 5GB of free cloud storage

onedrive-1.gif

Ранее известный как SkyDrive, OneDrive является онлайн-хранилищем от Microsoft. После бесплатной регистрации получаешь 5 ГБ свободного места на сервере.

onedrive-2.gif

Скачав для Windows приложение OneDriveSetup.exe (19 МБ), можно воспользоваться услугами синхронизации и расшаривания папок для нескольких человек.

onedrive-3.gif

OneDrive — интернет-хранилище, к которому у вас будет доступ откуда угодно. Вы можете легко сохранять документы Office и другие файлы в облаке и открывать их на любом устройстве.
С помощью OneDrive вы можете делиться документами, фотографиями и другими файлами, не отправляя громоздкие вложения по электронной почте. Кроме того, с файлами OneDrive легко работать в Windows и на компьютере Маc.

onedrive-windows.jpg

Используйте OneDrive на телефоне или планшете, чтобы работать с файлами в пути. Доступно для iOS, Android и Windows Phone.



Box

https://box.com/
The deal: 10GB of free cloud storage

box-1.gif

Ветеран среди файловых хостингов, на рынке уже более 10 лет. Достойное предложение в десять бесплатных гигабайт не обходится без отвратительной ложки дегтя: нельзя залить файл весом более 250 МБ.

box-2.gif

Чем интересен Box.com? Удачное с точки зрения маркетинга название и драконовские условия заливки файлов дают уверенность в твердом будущем этого проекта. Загнуться ему не дадут. Файлы можно здесь хранить смело, не опасаясь безвременной кончины сервиса.


MediaFire

https://www.mediafire.com/
The deal: 10GB of free cloud storage

mediafire-1.gif

Средняя скорость заливки и скачивания, словом – рабочая лошадка. Основное блюдо – 10 бесплатных гигабайт – отрабатывает честно. Расшаривание нужного файла происходит одним кликом мыши. Есть приложение для iOS и Android.
Бесплатная версия MediaFire позволяет грузить файлы весом лишь до 4 ГБ.

mediafire-2.gif

Со стороны того, кто качает, не всё так радужно. На одном из форумов выложили подшивку журнала в виде ссылки на папку MediaFire. Я не смог найти способ выкачать папку целиком: сайт требует Upgrade (намек на деньги – переход на премиум-аккаунт). Качаешь по одному файлу и проклинаешь всё на свете, борясь с бешеными окошками рекламы (немного облегчает жизнь плагин Adblock в браузере).


Gavitex

https://gavitex.com/
The deal: 25GB of free cloud storage

gavitex-2.gif

Бесплатный облачный сервис производит неоднозначное впечатление. Казалось бы, залогинившись на сайте, я успешно залил в виртуальное хранилище 15 ГБ своих файлов, однако во-первых процесс оказался весьма медленным, во-вторых – не отображался текущий статус заливки. Пользователь вынужден "ждать у моря погоды" в раздумьях, а не зависло ли? Gavitex предлагает скачать приложение – для Windows, Mac, iOs, Android. Может, здесь всё иначе? Увы, проверить это сложно – скачанный инсталлер отказался соединяться с сервером: "ошибка".

gavitex-1.jpg

Тем не менее, 25 бесплатных гигабайт – штука довольно приятная. Серьезный аргумент Гавитекса! Порадовала удобная функция генерации публичных ссылок: нажав на стилизованный "уголок" возле нужного файла, вызывается меню Download links. Всё понятно и просто.
Если исправить детские ошибки, главная проблема малоизвестного Gavitex останется в самом бренде. Вы уверены, что Gavitex будет существовать через 2–3 года? Я вот совсем не уверен. Для хранения ценных файлов – личного фото- и видеоархива, документов – сервис не годится, только в качестве "запасного аэродрома".


pCloud

https://www.pcloud.com/ru/
The deal: 10GB of free cloud storage

pcloud-logo.gif

Работает данный облачный сервис хранения данных так: качаем десктопное приложение pCloud_Windows_3.5.6.exe (8 МБ), устанавливаем, запускаем. pCloud Drive создает виртуальный раздел, который Windows относит к Устройствам со съемными носителями, т.е. распознает как обычную флэшку.

pcloud-1.gif

Настолько удобно использование этого незаметного приложения, что невозможно удержаться от восхищения. В Windows 7 64-bit оно съедает от 18 до 135 МБ оперативной памяти. Возможна установка также на Mac и Linux, плюс мобильное приложение для iOS / Android устройств.

pcloud-2.gif

Работа с файлами такая же, как при повседневном использовании компьютера. При высокой скорости интернета можно вообще забыть, что флэшка-то не простая, а виртуальная. Раздел "P" теперь всё время в Windows и, разумеется, никуда не исчезает и не требует подключения при следующем запуске компьютера. Работать с ним можно хоть в Total Commander, но надо признать, более информативными оказываются обычные окошки Windows.

pcloud-3.jpg

В десктопном приложении (запускаемом ярлыком на рабочем столе) есть также вкладки Sync и Shares, отвечающие за т.н. синхронизацию папок и публичные ссылки на ваши файлы соответственно.
Зайдя с логином на сайт pCloud, обнаружим типичный веб-интерфейс: в разделе Browse ваши папки (т.е. заливать файлы можно и здесь), раздел Корзина, в котором удаленные файлы бесплатного аккаунта хранятся 24 часа. Если места в облаке пользователю мало, можно перейти на премиум-аккаунт.

pcloud-4.gif

Правила pCloud гласят, что если аккаунт не активен более 1 года, его закрывают и файлы безвозвратно удаляют.


Syncplicity

https://www.syncplicity.com/
The deal: 10GB of free cloud storage

syncplicity-1.jpg

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

syncplicity-3.gif

К таким сервисам можно отнести замечательный Syncplicity. Скачав клиент Syncplicity_Setup.exe (8 МБ) и установив его, получаем удобную иконку в трее (в правом нижнем углу экрана). По умолчанию сервис выделяет папку по адресу Мой компьютер / Избранное / Syncplicity – всё, что туда кинуть, продублируется в онлайн-облако.

syncplicity-4.gif

Недавно я делал обзор сервиса ♥ iDrive – тоже любопытный добротный проект, специализацией которого является резервное копирование.


hubiC

https://hubic.com/
The deal: 25GB of free cloud storage

hubic-1.jpg

"25 ГБ на дороге не валяются!" – сказал я себе и ринулся создавать бесплатный аккаунт на hubiC. Управление файлами и папками очень простое, едва ли можно запутаться в элементарных английских фразах "Download – Other Actions – New Folder – Add Files" ("Скачать – Другие действия – Новая папка – Добавить файлы").

hubic-2.gif

Для создания публичной ссылки жмем "уголок" возле нужного файла. По решению авторов hubiC срок жизни линка ограничен максимум 30 днями.
Скорость заливки в файловое хранилище довольно средняя, во всяком случае звезд с неба не хватает.
hubiC – спокойный, выдержанный, невозмутимый веб-портал с отличным предложением 25 бесплатных гигабайт виртуального пространства. Заслуженно попадает в десятку лучших облачных хранилищ данных.


Ulozto

https://ulozto.net/
The deal: unlimited space (free)

ulozto-1.gif

Необычный участник нашего обзора. На первый взгляд, Ulozto похож на типичный коммерческий файлообменник. Вскоре замечаешь отрадные вещи: после бесплатной регистрации платный аккаунт насильно не навязывается, скорость заливки выше средней, скорость скачивания приемлемая, и, наконец, самое привлекательное – неограниченное место для ваших файлов, в том числе крупных (3-гигабайтное видео заливается без проблем). Эта сногсшибательная "фишка", выделяющая Улозто из серой массы обменников, заставляет обратить на него пристальное внимание.
Файлы можно разделять на приватные и публичные. Помеченные как приватные (For me only), файлы не будут отображаться в общем поиске веб-портала.
Насколько надежно хранение файлов на Ulozto? Точной информации найти не удалось, однако подразумевается "вечное хранение". Мои файлы лежат на сервере уже полгода, никаких угроз и предупреждений от Ulozto не поступает.

ulozto-2.gif

Неограниченное место для файлов – сложная и амбициозная задача для компании, создавшей Ulozto. По адресу в Фейсбуке видно, что она имеет чешские корни: https://www.facebook.com/ulozto.cz Если портал перестанет получать финансовые вливания, а пользователи всё так же будут заливать тонны мусора, ресурс ожидает печальная судьба. Например, весной 2017 года закрылся Megadysk.pl, тоже обещавший золотые горы. Не обойтись, видимо, без чисток особо буйных пользователей с терабайтом хлама. Для того чтобы к вашему аккаунту не привлекалось лишнего внимания администрации, я рекомендую заливать не более 100 ГБ, в самом крайнем случае 150–200 ГБ.
В долгосрочной перспективе Ulozto не годится для хранения ценных файлов, но как запасная площадка он просто великолепен.


Google Drive

https://drive.google.com/
The deal: 15GB of free cloud storage

google-drive-1.jpg

Начать нужно с того, что вам следует завести аккаунт Google.
Волей случая у меня оказалось несколько аккаунтов, и для каждого из них Гугл честно дает свободное пространство в Google Drive. Если у вас есть канал Youtube, то вы, можно сказать, уже обладатель 15 свободных ГБ в Google Drive.
Скорости заливки в облако – одна из самых высоких, что я видел.

google-drive-2.gif

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

Google Drive добавил сканирование "пиратского" контента по хэшам файлов

Итак, мы выяснили, что с лицензионным контентом на файловом хранилище Google Drive лучше не баловаться! Под понятие лицензии подпадают:

• Образы игр и Windows
• Софт
• Фильмы, сериалы, мультипликация
• Музыка: видео и аудио
• Аудиокниги


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

============================
Яндекс и ♠ Mail.ru заблокировали? отзыв мнение облако статья обзор рецензия скачать загрузить хранить файлообменники главные лучшие файловые хранилища 2017 года Best Cloud Storage Services For Backup что такое посоветовать новичку для чайников подробная инструкция хранение бесплатный облачный сервис бесплатно ваши советы где найти free online storage space 10 самых больших облачных хранилищ данных файловый хостинг
============================



Mega

https://mega.nz/
The deal: 50GB of free cloud storage

mega-logo.gif

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

mega-1.gif

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

mega-2.gif

Ваши файлы по умолчанию хранятся на сервере вечно, ограничений нет. Впрочем, этим могут похвастаться все 10 участников обзора.
Доступно приложение Mega с набором стандартных возможностей (поддерживается также iOS, BlackBerry, Android и Windows Phone).
Скачивание очень крупных публичных файлов и папок здесь своеобразно: Mega не любит, когда с него тянут безвестные пылесосы и может выдавать временный бан на сутки на IP-адрес. Больше прав получит тот, кто выполнит регистрацию на сервисе, тем более она несложная и бесплатная.
Еще раз повторю, речь идет о скачивании публичных данных, т.е. таких, на которые вы сгенерировали ссылку. Для личного использования сервиса, разумеется, нет никаких проблем. 50 свободных ГБ без лишних телодвижений и головной боли.

Автор текста: fir-vst, 24.05.2017
resp

Дж. Рейнвотер. Как пасти котов (2016)

Дж. Ханк Рейнвотер. Как пасти котов. Наставление для программистов, руководящих другими программистами. СПб.: Питер, 2016. – 256 стр.

Herding Cats: A Primer for Programmers Who Lead Programmers.

Herding_Cats_2016.jpg

Аннотация. «Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды программистов. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач. В таком случае без этой книги вам не обойтись. А может быть, вы – опытный менеджер, желающий пересмотреть свои принципы лидерства? Тогда, опять же, эта книга для вас. Вне зависимости от возраста, пола и социального статуса она поможет вам укрепить свои позиции в роли лидера программистов. Материал изложен довольно компактно и легко укладывается в голове. Стоя в книжном магазине и раздумывая, что же купить, задайте себе один простой вопрос: «Нужно ли мне совершенствовать свои лидерские навыки?» Полагаю, вы ответите: «Да», – а значит, данная книга окажется для вас небесполезной.

Краткое содержание:

Предисловие
Об авторе
О научном редакторе
Об иллюстраторе
Благодарности
Введение

Глава 1 • Как привыкнуть к роли руководителя
Глава 2 • Как руководить собой
Глава 3 • Как вести стаю за собой
Глава 4 • Как организовать успех
Глава 5 • Как вести совещания
Глава 6 • Философия и методы технического лидера
Глава 7 • Закат лидера
Глава 8 • Восход лидера
Глава 9 • Как ужиться с начальством
Глава 10 • Слова без песни
Послесловие • Снова в плавание
Приложение А • Как ухаживать за живностью – электронный администратор
Приложение Б • Как дать скотине в глаз – критический обзор кода электронного администратора
Библиография • Ресурсы для специалистов по выпасу котов
Алфавитный указатель

* * *
В этой книге я намерен рассмотреть весь комплекс задач, стоящих перед руководителем. Мужайтесь: решить эти задачи вполне реально, что бы вам ни говорили. От вас требуется выстроить стройную систему мышления, эдакий гештальт. Что такое «гештальт»? Согласно словарю Вебстера, это «структура со свойствами, которые невозможно получить путем простого сложения ее элементов». Если перевести это определение на язык объектно-ориентированного программирования, которым, полагаю, вы владеете лучше, чем стилем изложения Вебстера, получится следующее: вашей мысленной архитектуре предстоит пройти серьезные преобразования. Унаследовав навыки менеджера, вы должны будете перегрузить типичные параметры мышления новыми типами и значениями – то есть, грубо говоря, испытать полиморфизм собственного характера. За счет этого вы инкапсулируете в своем программистском мозгу совершенно новый вид искусства – искусство лидерства и руководства. Между руководством и лидерством прослеживаются существенные различия. Нужно то и другое, но лидерство всё же имеет приоритет – хотя крепкие руководящие навыки, естественно, помогают брать новые высоты в роли лидера.
Своевременность производства и качество программных продуктов вашей компании – теперь в ваших руках, и смею надеяться, что моя книга внесет некоторое разнообразие в вашу деятельность. Нельзя же, в конце концов, проводить все рабочие дни совершенно одинаково! (стр. 20)

Кому и зачем стоит прочесть эту книгу

От чтения этой книги выиграют программисты, превратившиеся в менеджеров, руководителей групп и, если вам по душе более высокие посты, директоров по разработке программного обеспечения. Если вы руководите относительно небольшой группой программистов (состоящей, скажем, из четырех-семи человек), работаете в мелкой или средней компании, заняты разработкой нескольких проектов одновременно – значит, вы выбрали издание правильно. Если же вы, скажем, собираетесь за 12 месяцев построить очередную глобальную систему бронирования авиабилетов, а в вашем подчинении 100 программистов, вероятно, эта книга не будет соответствовать вашему размаху. В таком случае вам лучше защитить две магистерские диссертации: по управлению проектами и по психологии. Удачи.
Если вы руководите программистами – именно руководите – и чувствуете, что лидерство подменяется простым манипулированием проектами и людьми, вам нужна помощь. Моя книга вам поможет.
Быть может, вы – опытный менеджер, желающий пересмотреть свои принципы лидерства. Тогда эта книга опять же для вас.
Не исключаю, что вы наконец-таки получили повышение, на которое давно рассчитывали или которого, наоборот, опасались. Итак, многолетние занятия по написанию интеллектуального кода и конструированию выдающихся программ принесли свои плоды. Начальство посчитало вас подходящим кандидатом на роль руководителя программистов. Вероятно, в вас несколько меньше лунатизма, чем в коллегах. Маловероятно, но всё же возможно, что вы привыкли носить сорочки с воротничками, и это обстоятельство сыграло вам на руку. Или кто-то уволился. Как бы там ни было, добро пожаловать в стройные ряды руководителей групп программистов. Моя книга окажется в такой ситуации весьма кстати. (стр. 24)

© Серия «Библиотека программиста», 2016
resp

Лучшие книги по языку Java

Библиотека программиста | С какой книги начать изучение Java? | Учебники | Для профессионального программиста | Книги по программированию для начинающих | Подборка: 5 лучших книг | Java для начинающих | Стоит порекомендовать | Must read | Как быстро выучить новый язык | Наиболее значимые | Новые | Лучшие книги по Java | Купить книги | Обзор


Брюс Эккель. Философия Java. 4-е полное издание. Спб: Питер, 2015 – Серия: Классика Computer Science – 1168 стр.

Bruce Eckel. Thinking in Java. 4th Edition.

Eckel.jpg

Аннотация. Впервые читатель может познакомиться с полной версией этого классического труда, который ранее на русском языке печатался в сокращении. Книга, выдержавшая в оригинале не одно переиздание, за глубокое и поистине философское изложение тонкостей языка Java считается одним из лучших пособий для программистов. Чтобы по-настоящему понять язык Java, необходимо рассматривать его не просто как набор неких команд и операторов, а понять его «философию», подход к решению задач, в сравнении с таковыми в других языках программирования. На этих страницах автор рассказывает об основных проблемах написания кода; в чем их природа и какой подход использует Java в их разрешении. Поэтому обсуждаемые в каждой главе черты языка неразрывно связаны с тем, как они используются для решения определенных задач.

Краткое содержание:
Предисловие
Введение

Глава 1. Введение в объекты
Глава 2. Все является объектом
Глава 3. Операторы
Глава 4. Управляющие конструкции
Глава 5. Инициализация и завершение
Глава 6. Управление доступом
Глава 7. Повторное использование классов
Глава 8. Полиморфизм
Глава 9. Интерфейсы
Глава 10. Внутренние классы
Глава 11. Коллекции объектов
Глава 12. Обработка ошибок и исключения
Глава 13. Строки
Глава 14. Информация о типах
Глава 15. Обобщенные типы
Глава 16. Массивы
Глава 17. Подробнее о контейнерах
Глава 18. Система ввода-вывода Java
Глава 19. Перечислимые типы
Глава 20. Аннотации
Глава 21. Параллельное выполнение
Глава 22. Графический интерфейс
Приложение А
Приложение Б. Ресурсы


Изначально я рассматривал JavaScript как «еще один язык программирования»; во многих отношениях так оно и есть.
Но с течением времени и углублением моих знаний я начал видеть, что исходный замысел этого языка отличался от других языков, которые я видел прежде.
Программирование состоит в управлении сложностью: сложность решаемой проблемы накладывается на сложность машины, на которой она решается. Именно из-за этих трудностей большинство программных проектов завершается неудачей. И до сих пор ни один из языков, которые я знаю, не был смоделирован и создан прежде всего для преодоления сложности разработки и сопровождения программ [! Но по моему мнению, язык Python наиболее близок к достижению этой цели – Б.Э.]. Конечно, многие решения при создании языков были сделаны в расчете на управление сложностью, но при этом всегда находились другие аспекты, достаточно важные, чтобы учитывать это при проектировании языка. Все это неизбежно приводило к тому, что программист рано или поздно заходил в тупик. Например, язык C++ создавался в расчете на продуктивность и обратную совместимость с C (чтобы упростить переход с этого языка на C++). Оба решения, несомненно, полезны и стали одними из причин успеха C++, но также они выявили дополнительные трудности, что не позволило успешно воплотить в жизнь некоторые проекты (конечно, можно винить программистов и руководителей проекта, но если язык в силах помочь в устранении ошибок, почему бы этим не воспользоваться?). Как другой пример подойдет Visual Basic (VB), привязанный к языку BASIC, который изначально не был рассчитан на расширение, из-за чего все расширения языка, созданные для VB, имеют ужасный синтаксис, создающий массу проблем с сопровождением. Язык Perl был основан на awk, sed, grep и других средствах UNIX, которые он должен был заменить, и в результате при работе с Perl программист через какое-то время уже не может разобраться в собственном коде. С другой стороны, C++, VB, Perl и другие языки, подобные Smalltalk, частично фокусировались на преодолении трудностей и, как следствие, преуспели в решении определенных типов задач.
Больше всего удивило меня при ознакомлении с Java то, что его создатели, среди прочего, стремились сократить сложность с точки зрения программиста. Они словно говорили: «Мы стараемся сократить время и сложность получения надежного кода». На первых порах такое намерение приводило к созданию не очень быстрых программ (хотя со временем ситуация улучшилась), но оно действительно изумительно повлияло на сроки разработки программ; для разработки эквивалентной программы на C++ требуется вдвое больше или еще больше человеко-часов. Уже одно это приводит к экономии колоссальных денег и уймы времени, но Java на этом не останавливается. Творцы языка идут дальше и встраивают поддержку аспектов, которые стали играть важную роль в последнее время (таких, как многозадачность и сетевое программирование), в сам язык или его библиотеки, что упрощает решение этих задач. Наконец, Java энергично берется за действительно сложные проблемы: платформенно-независимые программы, динамическое изменение кода и даже безопасность; каждая из этих проблем может существенно повлиять на время разработки, от простой задержки до непреодолимого препятствия. Таким образом, несмотря на известные загвоздки с производительностью, перспективы Java потрясают: этот язык способен существенно повысить продуктивность нашей работы.
Во всех областях – при создании программ, командной разработке проектов, конструировании пользовательских интерфейсов, запуска программ на разных типах компьютеров, простом написании программ, использующих Интернет, – Java расширяет «пропускную способность» взаимодействий между людьми.
Я полагаю, что перегонка туда-сюда большого объема битов не есть главный результат информационной революции; нас ожидает истинный переворот, когда мы сможем с легкостью общаться друг с другом: один на один, в группах и, наконец, всепланетно. Я слышал предположение, что следующей революцией будет появление единого разума, образованного из критической массы людей и взаимосвязей между ними. Java может быть катализатором этой революции, а может и не быть, но по крайней мере вероятность такого влияния заставляет меня чувствовать, что я делаю что-то значимое, пытаясь обучать этому языку. (С. 26)

* * *
Подобно любому человеческому языку, Java предоставляет способ выражения понятий и идей. Если способ был выбран успешно, то с ростом масштабов и сложности проблем он будет существенно превосходить другие способы по гибкости и простоте.
Язык Java не может рассматриваться как простая совокупность функциональных возможностей – некоторые из них ничего не значат в отдельности. Получить представление о целом как о совокупности частей можно только при рассмотрении архитектуры, а не при простом написании кода. И чтобы понять Java в этом смысле, необходимо проникнуться его задачами и задачами программирования в целом. В этой книге мы рассмотрим проблемы программирования, а также разберемся, почему они стали проблемами и какой подход использует Java в их решении. Поэтому раскрываемые в каждой главе возможности языка неразрывно связаны с тем, как этим языком решаются определенные задачи. Таким образом я надеюсь понемногу приблизить вас к тому, чтобы «менталитет Java» стал для вас естественным.
Я постарался помочь вам построить некую внутреннюю модель, которая бы помогла глубже понять язык; столкнувшись с какой-то головоломкой, вы подаете ее на вход своей модели языка и быстро получаете ответ.
Предполагается, что читатель уже обладает определенным опытом программирования: он понимает, что программа представляет собой набор команд; имеет представление о концепциях подпрограммы/функции/макроопределения; управляющих командах (например, if) и циклических конструкциях типа «while» и т.п. Обо всем этом вы легко могли узнать из многих источников – программируя на макроязыке или работая с таким инструментом, как Perl. Если вы уже имеете достаточно опыта и не испытываете затруднений в понимании основных понятий программирования, то сможете работать с этой книгой. Конечно, книга будет проще для тех, кто использовал язык C и особенно C++; если вы незнакомы с этими языками, это не значит, что книга вам не подходит – однако приготовьтесь основательно поработать (мультимедийный семинар, который можно загрузить с сайта www.MindView.net, поможет быстро освоить основные понятия Java). Но вместе с тем, начну я с основных концепций и понятия объектно-ориентированного программирования (ООП) и базовых управляющих механизмов Java,
Несмотря на частые упоминания возможностей языков C и C++, они не являются неразрывной частью книги – скорее, они предназначены для того, чтобы помочь всем программистам увидеть связь Java с этими языками – от которых, в конце концов, и произошел язык Java. Я попытаюсь сделать эти связки проще и объяснять подробнее то, что незнакомый с C/C++ программист может не понять. (С. 34)


Герберт Шилдт. Java 8. Полное руководство. 9-е издание. М.: Издательский дом "Вильямс", 2015. Пер. с англ. – 1376 стр.

Herbert Schildt. Java. Ninth Edition. (The Complete Reference.)

Schildt.jpg

Об авторе. Герберт Шилдт является автором многочисленных книг по программированию, пользующихся большим успехом у читателей в течение почти трех десятилетий, а также признанным авторитетом по языку Java. Его книги продаются миллионными тиражами и переведены на многие языки мира. Его перу принадлежит немало книг по Java, в том числе Java: руководство для начинающих, Java: методики программирования Шилдта, SWING: руководство для начинающих, Искусство программирования на Java, а также настоящее издание. Он написал немало книг и по другим языкам программирования, включая C, C++ и C#. Интересуясь всеми аспектами вычислительной техники, Герберт уделяет основное внимание языкам программирования и, в частности, компиляторам, интерпретаторам и языкам управления роботами. Он также проявляет большой интерес к стандартизации языков. Герберт окончил Иллинойский университет, получив обе степени – бакалавра и магистра.

Оглавление:
Предисловие
Часть I. Язык Java
Глава 1. История и развитие языка Java
Глава 2. Краткий обзор Java
Глава 3. Типы данных, переменные и массивы
Глава 4. Операции
Глава 5. Управляющие операторы
Глава 6. Введение в классы
Глава 7. Подробное рассмотрение классов и методов
Глава 8. Наследование
Глава 9. Пакеты и интерфейсы
Глава 10. Обработка исключений
Глава 11. Многопоточное программирование
Глава 12. Перечисления, автоупаковка и аннотации (метаданные)
Глава 13. Ввод-вывод, аплеты и прочие вопросы
Глава 14. Обобщения
Глава 15. Лямбда-выражения
Часть II. Библиотека Java
Глава 16. Обработка символьных строк
Глава 17. Пакет java.lang
Глава 18. Пакет java.util, часть I. Collections Framework
Глава 19. Пакет java.util, часть II. Прочие служебные классы
Глава 20. Пакет java.io для ввода-вывода
Глава 21. Система ввода-вывода NIO
Глава 22. Работа в сети
Глава 23. Класс Applet
Глава 24. Обработка событий
Глава 25. Введение в библиотеку AWT: работа с окнами, графикой и текстом
Глава 26. Применение элементов управления, диспетчеров
компоновки и меню из библиотеки AWT
Глава 27. Изображения
Глава 28. Утилиты параллелизма
Глава 29. Потоковый API
Глава 30. Регулярные выражения и другие пакеты
Часть III. Введение в программирование ГПИ средствами Swing
Глава 31. Введение в библиотеку Swing
Глава 32. Исследование библиотеки Swing
Глава 33. Введение в меню Swing
Часть IV. Введение в программирование ГПИ средствами JavaFX
Глава 34. Введение в JavaFX
Глава 35. Элементы управления JavaFX
Глава 36. Введение в меню JavaFX
Часть V. Применение Java
Глава 37. Компоненты Java Beans
Глава 38. Введение в сервлеты
Приложение
Применение документирующих комментариев в Java
Предметный указатель


Java – один из самых важных и широко применяемых языков программирования в мире на протяжении многих лет. В отличие от некоторых других языков программирования, влияние Java не только не уменьшилось со временем, а, наоборот, возросло. С момента первого выпуска он выдвинулся на передний край программирования приложений для Интернета. И каждая последующая версия лишь укрепляла эту позицию. Ныне Java по-прежнему остается первым и самым лучшим языком для разработки веб-ориентированных приложений. Проще говоря, большая часть современного кода написана на Java. И это свидетельствует об особом значении языка Java для программирования.
Основная причина успеха Java – его гибкость. Начиная с первой версии 1.0, этот язык непрерывно адаптируется к изменениям в среде программирования и подходам к написанию программ. А самое главное – он не просто следует тенденциям в программировании, а помогает их создавать. Способность Java адаптироваться к быстрым изменениям в вычислительной технике служит основной причиной, по которой этот язык программирования продолжается оставаться столь успешным.
Со времени публикации первого издания этой книги в 1996 году она претерпела немало изменений, которые отражали последовательное развитие языка Java. Настоящее, девятое, издание обновлено по версии Java SE 8 (JDK 8).

* * *
Эта книга предназначена для всех категорий программистов: от начинающих до опытных. Начинающий программист найдет в ней подробные пошаговые описания и немало полезных примеров написания кода на Java, а углубленное рассмотрение более сложных функций и библиотек Java должно привлечь внимание опытных программистов. Для обеих категорий читателей в книге указаны действующие ресурсы и полезные ссылки. (С. 29)

Зарождение современного программирования: язык C
Язык C буквально потряс компьютерный мир. Его влияние нельзя недооценивать, поскольку он полностью изменил подход к программированию. Создание языка C было прямым следствием потребности в структурированном, эффективном и высокоуровневом языке, который мог бы заменить код ассемблера в процессе создания системных программ. Как вы, вероятно, знаете, при проектировании языка программирования часто приходится находить компромиссы между:
    • простотой использования и предоставляемыми возможностями;
    • безопасностью и эффективностью;
    • устойчивостью и расширяемостью.
До появления языка C программистам, как правило, приходилось выбирать между языками, которые позволяли оптимизировать тот или иной ряд характеристик. Так, на языке FORTRAN можно было писать достаточно эффективные программы для научных вычислений, но он не очень подходил для написания системного кода. Аналогично язык BASIC был очень прост в изучении, но у него было не очень много функциональных возможностей, а недостаточная структурированность ставила под сомнение его полезность для написания крупных программ. На языке ассемблера можно писать очень эффективные программы, но его трудно изучать и эффективно использовать. Более того, отладка ассемблерного кода может оказаться весьма сложной задачей.
Еще одна усложнявшая дело проблема состояла в том, что первые языки программирования вроде BASIC, COBOL и FORTRAN были разработаны без учета принципов структурирования. Вместо этого <...> (С. 34)


Р. В. Сеттер. Изучаем Java на примерах и задачах. Спб: Наука и Техника, 2016. – 240 стр.

Setter.jpg

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

Краткое содержание:
ГЛАВА 1. ЧТО ТАКОЕ JAVA?
ГЛАВА 2. ПЕРВЫЕ ПРОГРАММЫ. ВВЕДЕНИЕ В СИНТАКСИС ЯЗЫКА
ГЛАВА 3. ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
ГЛАВА 4. СТРОКИ И КОЛЛЕКЦИИ
ГЛАВА 5. РАБОТА С ДАННЫМИ. АЛГОРИТМЫ
ГЛАВА 6. СТАНДАРТНЫЕ БИБЛИОТЕКИ
ГЛАВА 7. РАБОТА С ФАЙЛАМИ В JAVA


Возникновение языка Java приходится на драматичное время, когда бурно развивался интернет и началась так называемая «война браузеров». Первоначально он предназначался для программирования бытовой техники, например холодильников, микроволновых печей, стиральных машин, электронных записных книжек, видеомагнитофонов и т.п.
Программное обеспечение для бытовой электроники должно удовлетворять определенным требованиям. Прежде всего оно должно быть совместимо с новыми микросхемами, на которых будут строиться последние образцы бытовой техники сразу же после их выпуска. При этом необходимо учитывать, что изготовители очень часто меняют микросхемы: добавляют новые функции, тем самым расширяя спектр устройств, в которых они могут применяться. Программное обеспечение также должно отвечать высоким требованиям надежности, так как поломка бытовой техники обычно связана с большими материальными затратами со стороны производителя. Всё это – «отправные точки», с учетом которых шла разработка Java.
Язык Java своим возникновением обязан Sun Microsystems Inc., в дочерней компании которой в начале 90-х гг. началась его разработка в рамках проекта с кодовым названием Green. Фирма Sun известна на рынке аппаратного и программного обеспечения такими продуктами, как процессоры на RISC-архитектуре и собственная операционная система SOLARIS из семейства UNIX.
Над разработкой программного обеспечения для бытовой техники трудилась группа под руководством Джеймса Гослинга, нынешнего вице-президента Sun. Разработчики быстро убедились, что существовавшие в то время языки программирования, в том числе широко распространенный C/C++, для этой цели не годятся, потому что написанные на них программы требуется перекомпилировать для каждого нового процессора. Кроме того, эти языки настолько сложны, что не позволяют быстро писать надежные <...> (С. 10)


Патрик Нимейер, Дэниэл Леук. Программирование на Java (Исчерпывающее руководство для профессионалов). М.: Эксмо, 2014. – Серия: Мировой компьютерный бестселлер – 1216 стр.

Patrick Niemeyer & Daniel Leuck. Learning Java.

Niemeyer_Leuck.jpg

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

* * *
Перед вами книга о языке и среде программирования Java. Являетесь ли вы разработчиком программного обеспечения или просто пользуетесь Всемирной паутиной в повседневной жизни, вы, несомненно, слышали о языке Java. Его появление было одной из самых волнующих разработок в истории Всемирной паутины, а приложения языка Java сильно ускорили рост бизнеса во Всемирной паутине за последние 15 лет. Java, пожалуй, самый популярный язык программирования в мире, и его используют миллионы разработчиков на всех мыслимых типах компьютеров. За последнее десятилетие язык Java обогнал такие языки, как C++ и Visual Basic, с точки зрения требований к разработке и фактически стал основным языком для определенных типов разработки, в особенности для сервисов, использующих интернет-технологии. Многие университеты теперь обучают Java на своих начальных курсах вместе с другими важными современными языками. Возможно, в таком университете учитесь и вы…
Эта книга преподаст вам основы Java, такие как интерфейсы API. Книга старается соответствовать своему названию, включая описание языка Java и его библиотек классов, техник программирования и идиом. Мы копнем глубоко в интересных областях и по крайней мере поверхностно осветим остальной материал.
По возможности мы предлагаем захватывающие, реалистичные и забавные примеры и избегаем простой каталогизации свойств. Примеры незамысловатые, но намекают на то, что еще можно сделать. Мы не будем разрабатывать очередное великое «убийственное приложение» на этих страницах, но надеемся дать вам отправную точку для многих часов экспериментирования и вдохновенной возни, которые приведут вас к созданию такого приложения своими силами.

* * *
Эта книга создана для специалистов в компьютерной науке, студентов, людей с техническим образованием и финских хакеров. Она предназначена всем, кто хочет попрактиковаться в языке Java, чтобы потом создавать реальные приложения. Эта книга также может рассматриваться как экспресс-курс по объектно-ориентированному программированию, работе с сетями, GUI и XML. При изучении Java вы получите понятие о мощном и практическом подходе к разработке программного обеспечения, начинающемся с глубокого понимания основ языка Java и его интерфейсов API.
При поверхностном рассмотрении Java выглядит как язык C или C++, поэтому вы получите небольшое преимущество в работе с этой книгой, если у вас есть какой-то опыт программирования на одном из этих языков. Если у вас нет такого опыта, не беспокойтесь. Не проводите слишком много синтаксических параллелей между языком Java и C или C++. Во многих отношениях Java ведет себя как такие более динамические языки, как Smalltalk и Lisp. Знание другого объектно-ориентированного языка определенно должно помочь, хотя вам, возможно, придется поменять некоторые представления и отучиться от некоторых привычек. Java значительно проще, чем другие языки, такие как C++ и Smalltalk. Если вы внимательно изучите материал по конкретным примерам и посредством собственных экспериментов, мы думаем, вам понравится эта книга. (С. 18)


Кей Хорстманн, Гари Корнелл. Java. Библиотека профессионала. 9-е издание. Том 1: Основы; Том 2: Расширенные средства программирования – Издательский дом "Вильямс", 2014. Пер. с англ. – 864 стр. + 1008 стр.

Cay S. Horstmann & Gary Cornell. Core Java. Ninth Edition.

Horstmann_Cornell.jpg

В конце 1995 года язык программирования Java вырвался на арену Интернета и моментально завоевал популярность. Технология Java обещала стать универсальным связующим звеном, соединяющим пользователей с информацией, откуда бы эта информация ни поступала – от веб-серверов, из баз данных, поставщиков информации или любого другого источника, который только можно было себе вообразить. И действительно, у Java есть всё, чтобы выполнить эти обещания. Это весьма основательно сконструированный язык, получивший признание всех основных участников рынка за исключением корпорации Microsoft. Его встроенные средства защиты и безопасности обнадежили как программистов, так и пользователей программ на Java. Язык Java изначально обладал встроенной поддержкой для решения таких сложных задач, как сетевое программирование, взаимодействие с базами данных и многопоточная обработка.
С 1995 года было выпущено восемь главных версий комплекта Java Development Kit. За последние 17 лет прикладной программный интерфейс (API) увеличился от 200 до 3 тысяч классов. Теперь прикладной интерфейс API охватывает самые разные предметные области, включая конструирование пользовательских интерфейсов, управление базами данных, интернационализация, безопасность и обработка данных в формате XML.
Книга, которую вы держите в руках, является первым томом девятого издания. С выходом каждого издания мы, ее авторы, старались как можно быстрее следовать очередному выпуску Java Development Kit, каждый раз переписывая ее, чтобы вы, читатель, могли воспользоваться преимуществами новейших средств Java. Настоящее издание обновлено с учетом новых языковых средств, появившихся в версии Java Standard Edition (SE) 7.
Как и все предыдущие издания этой книги, мы по-прежнему адресуем ее серьезным программистам, которые хотели бы пользоваться Java для разработки настоящих проектов. Мы, авторы этой книги, представляем себе вас, дорогой читатель, как грамотного специалиста с солидным опытом программирования на других языках, кроме Java, и надеемся, что вам не нравятся книги, которые полны игрушечных примеров вроде программ управления тостерами или животными в зоопарке либо "прыгающим текстом". Ничего подобного вы не найдете в этой книге. Наша цель – помочь вам понять язык Java и его библиотеки в полной мере, а не создать иллюзию такого понимания.
В книге вы найдете массу примеров кода, демонстрирующих почти все обсуждаемые языковые и библиотечные средства. Эти примеры мы намеренно сделали как можно более простыми, чтобы сосредоточиться на основных моментах. Тем не менее они в большинстве своем совсем не игрушечные и не "срезают острых углов". Все они могут послужить вам неплохой отправной точкой для разработки собственного кода.
Мы предполагаем, что вы стремитесь (и даже жаждете) узнать обо всех расширенных средствах, которые Java предоставляет в ваше распоряжение. В частности, мы предлагаем подробное рассмотрение следующих тем.

• Объектно-ориентированное программирование.
• Рефлексия и прокси-классы.
• Интерфейсы и внутренние классы.
• Модель приемников событий.
• Проектирование графического пользовательского интерфейса инструментальными средствами библиотеки Swing.
• Обработка исключений.
• Обобщенное программирование.
• Архитектура коллекций.
• Многопоточное программирование.

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

• Файлы и потоки ввода-вывода.
• Распределенные объекты.
• Базы данных.
• Расширенные компоненты графического пользовательского интерфейса.
• Собственные методы.
• Обработка данных в формате XML.
• Сетевое программирование.
• Усовершенствованная графика.
• Интернационализация.
• Компонент JavaBeans.
• Аннотации.

________
Каждому программисту: Топ-5
Программирование "с нуля". Как изучать системное программирование ("Магия ПК")
resp

Каждому программисту. Лучшие книги по программированию. Обзор

Должен знать каждый программист | Философия программирования | Совершенный код | Эти книги должен прочитать каждый | Для профессионального программиста | Книги по программированию для начинающих | Подборка: 5 лучших книг | Как улучшить плохой код? | Библиотека программиста


Бьярне Страуструп. Программирование: Принципы и практика с использованием C++ (2-е издание). М.: Издательский дом "Вильямс", 2016. Пер. с англ. – 1328 стр. Тираж 300 экз.

Bjarne Stroustrup. Programming: Principles and Practice Using C++. Second edition.

Stroustrup.jpg


Программирование – это искусство выражать решения задач так, чтобы компьютер мог их осуществить. Основные усилия программиста направлены на то, чтобы найти и уточнить решение, причем довольно часто полное понимание задачи приходит лишь в ходе программирования ее решения.
Эта книга предназначена для тех, кто еще никогда не программировал, но готов учиться этому ценой тяжелого и упорного труда. Она поможет овладеть главными принципами и приобрести практический опыт программирования на языке C++. Моя цель заключается в том, чтобы изложить достаточный объем сведений и научить вас решать простые и полезные задачи по программированию с помощью самых лучших и современных методов. Если вы учитесь на первом курсе университета, то можете изучать эту книгу на протяжении семестра (в предположении, что у вас имеется еще четыре курса средней сложности). Если вы изучаете программирование самостоятельно, то не ждите, что сможете освоить этот курс за меньшее время (ну, при условии, что вы будете работать по 15 часов в неделю, возможно, вам хватит 14 недель).
Три месяца могут показаться долгими, но объем курса довольно велик, и первые простые программы вы сможете написать, проработав над книгой около часа. Кроме того, сложность материала постепенно возрастает: в каждой главе вводятся новые полезные понятия, которые иллюстрируются реальными примерами.

* * *
Станете ли вы профессиональным программистом или экспертом по языку C++, прочитав эту книгу? Конечно, нет! Настоящее программирование – это тонкое, глубокое и очень сложное искусство, требующее знаний и технических навыков. Рассчитывать на то, что за четыре месяца вы станете экспертом по программированию, можно с таким же успехом, как и на то, что за полгода или даже год вы полностью изучите биологию, математику или иностранный язык (например, китайский, английский или датский) или научитесь играть на виолончели. Если подходить к изучению книги серьезно, то можно ожидать, что вы сможете писать простые полезные программы, читать более сложные программы и получите хорошие теоретическую и практическую основы для дальнейшей работы.
Прослушав этот курс, лучше всего поработать над реальным проектом.

* * *
Когда – начиная с 1949 года – в мире появились первые электронные компьютеры с хранимыми программами, каждый из них имел собственный язык программирования. Существовало взаимно однозначное соответствие между выражением алгоритма (например, вычисления орбиты планеты) и командами конкретной машины. Очевидно, что ученый (пользователями чаще всего были ученые) писал математические формулы, но программа представляла собой список машинных инструкций. Первые примитивные списки состояли из десятичных или восьмеричных цифр, точно соответствовавших их представлению в машинной памяти. Позднее появились ассемблер и "автокоды"; иначе говоря, люди разработали языки, в которых машинные команды и машинное оборудование (например, регистры) имели символические имена. Так, программист мог написать "LD R0 123", чтобы загрузить содержимое ячейки памяти, расположенной по адресу 123, в нулевой регистр. Однако каждая машина по-прежнему имела собственный набор команд и собственный язык программирования. (С. 893)


Стив Макконнелл. Совершенный код. Мастер-класс (Практическое руководство по разработке программного обеспечения). М.: Русская редакция, Спб: Питер, 2005. Пер. с англ. – 896 стр.

© Steven C. McConnell, 2004

McConnell.jpg


Аннотация. Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий и дополнена сотнями новых примеров, иллюстрирующих искусство и науку программирования. Опираясь на академические исследования, с одной стороны, и практический опыт коммерческих разработок ПО – с другой, автор синтезировал из самых эффективных методик и наиболее эффективных принципов ясное прагматичное руководство. Каков бы ни был ваш профессиональный уровень, с какими бы средствами разработками вы ни работали, какова бы ни была сложность вашего проекта, в этой книге вы найдете нужную информацию, она заставит вас размышлять и поможет создать совершенный код.
Книга состоит из 35 глав, предметного указателя и библиографии.

"Великолепное руководство по стилю программирования и конструированию ПО".
Мартин Фаулер, автор книги "Refactoring"

"Книга Стива Макконнелла… это быстрый путь к мудрому программированию… Его книги увлекательны, и вы никогда не забудете то, что он рассказывает, опираясь на свой с трудом полученный опыт".
Джон Бентли, автор книги "Programming Pearls, 2d ed"

"Современное ПО должно быть надежным и гибким, а создание защищенного кода начинается с дисциплинированного конструирования программы. За десять лет так и не появилось лучшего руководства по этой теме, чем эта книга".
Майкл Ховард, специалист по защите ПО, корпорация Microsoft; один из авторов книги "Writing Secure Code"


Если вы не имеете специального образования, вы не одиноки. Ежегодно программистами становятся около 50 000 человек (BLS, 2004, Heскеr, 2004), однако число дипломов, вручаемых ежегодно в нашей отрасли, составляет лишь около 35 000 (NCES, 2002). Легко прийти к выводу, что многие программисты изучают разработку ПО самостоятельно. Программисты-самоучки встречаются среди инженеров, бухгалтеров, ученых, преподавателей, владельцев малого бизнеса и представителей других профессий, которые занимаются программированием в рамках своей работы, но не всегда считают себя программистами. Каким бы ни было ваше программистское образование, в этом руководстве вы найдете информацию об эффективных методиках программирования.

* * *
Методики, описанные в этой книге, заполняют пустоту, остающуюся в знаниях программистов после прочтения вводных и более серьезных учебников по программированию. Что читать человеку, изучившему книги типа «Introduction to Java», «Advanced Java» и «Advanced Advanced Java» и желающему узнать о программировании больше? Вы можете читать книги о процессорах Intel или Motorola, функциях ОС Microsoft Windows или Linux или о другом языке программирования – невозможно эффективно программировать, не имея хорошего представления о таких деталях. Но эта книга относится к числу тех немногих, в которых обсуждается программирование как таковое. Наибольшую пользу приносят те методики, которые можно использовать независимо от среды или языка. В других источниках такие методики обычно игнорируются, и именно поэтому я сосредоточился на них.
Как показано ниже, информация, представленная в этой книге, выжата из многих источников. Единственным другим способом получения этой информации является изучение горы книг и нескольких сотен технических журналов, дополненное значительным реальным опытом. Если вы уже проделали всё это, данная книга всё равно окажется вам полезной как удобный справочник.

* * *
За доказательствами влияния, оказываемого языками программирования на мышление программистов, далеко ходить не надо. Типичная история такова: «Мы писали новую систему на C++, но большинство наших программистов не имели особого опыта работы на C++. Раньше они использовали Fortran. Они писали код, который компилировался на C++, но на самом деле это был замаскированный Fortran. В итоге они заставили C++ эмулировать недостатки языка Fortran (такие как операторы goto и глобальные данные) и проигнорировали богатый набор объектно-ориентированных возможностей C++». Данный феномен наблюдается в отрасли уже много лет (Hanson, 1984; Yourdon, 1986a). (С. 60)


Питер Гудлиф. Ремесло программиста. Практика написания хорошего кода. Спб.: Символ-Плюс, 2009. Пер. с англ. – 704 стр.

Pete Goodliffe. Code Craft: The Practice of Writing Excellent Code.

Goodliffe.jpg


Аннотация. Ничто не сравнится по ценности с советами настоящего программиста-профессионала. Книга Питера Гудлифа «Ремесло программиста» написана ясно, практично и занимательно. Она поможет вам перейти на более высокий уровень мастерства программирования и покажет, как писать код, который больше чем «просто работает». Да, вы умеете писать работающий код, но как написать понятный код? Как добиться его надежности и отсутствия ошибок? Смогут ли другие программисты выяснить логику и цель вашего кода? Выдающиеся программисты не просто обладают техническими знаниями – у них есть правильный подход и отношение к программированию.
Перед вами руководство по выживанию в условиях промышленного производства ПО. Эта книга посвящена тому, чему вас никто не учил: как правильно программировать в реальной жизни. Здесь вы найдете не связанные с конкретными языками рекомендации, полезные всем разработчикам и касающиеся таких проблем, как стиль представления, выбор имен переменных, обработка ошибок, безопасность, эффективность групповой работы, технологии разработки и составление документации.
Читатель должен обладать опытом программирования, ибо книга не учит программированию – она учит правильно программировать. Издание будет полезно и студентам старших курсов, знакомым с принципами программирования.

"Легко читается, занимательно, даже забавно… Книга полна мудрости, накопленной за годы реальной работы, мучений и побед в сфере программных разработок… Жаль, что у меня не было такой книги, когда я начинал работать программистом".
Стив Лав (Steve Love), старший разработчик

"Именно та книга, которая нужна необстрелянным новобранцам. Рассказывает всю правду, легко читается и охватывает широкий круг тем, которые должен знать новичок".
Джон Джеггер (Jon Jagger), преподаватель, программист


Программирование – ваша страсть. Печально, но это так. И как закоренелый технарь вы программируете чуть ли не во время ночного сна. И вот вы попали в центр реального мира, в саму эту отрасль, и занимаетесь тем, о чем и не мечтали: забавляетесь с компьютером, а вам за это еще и деньги платят. Ведь вы сами готовы были заплатить за то, чтобы иметь такую возможность!
Но всё не так просто и не похоже на то, чего вы ожидали. Огорошенные назначением вам нереальных сроков выполнения задач и неумелым руководством (если его можно назвать этим словом), непрерывным изменением технического задания и необходимостью разбираться в дрянном коде, доставшемся вам от предшественников, вы начинаете сомневаться в том, что выбрали для себя правильный путь. Всё вокруг мешает вам писать тот код, о котором вы мечтали. Что ж, таковы условия существования в организациях, где пишут программы. Вы попали на передний край упорной битвы за создание шедевров художественного мастерства и научного гения. Удачи вам!

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

Сбой при компиляции
Крайне досадно, когда код, на который вы потратили столько времени, отказывается компилироваться. Это значит, что вам придется вернуться и исправить противную маленькую опечатку или несоответствие типов параметров, а затем снова компилировать и только потом приниматься по-настоящему тестировать свой труд. Как ни странно, это лучший тип ошибок, с которым вы можете столкнуться. Почему? Просто потому, что их проще всего обнаружить и исправить. Они проявляются сразу и наиболее очевидны.
Чем дольше поиск ошибок, тем дороже их исправление; это проиллюстрировано в разделе «Экономика ошибок» на стр. 216. Чем раньше вы сможете найти и исправить каждую ошибку, тем скорее вы сможете продолжить работу и тем меньшим объемом неприятностей и затрат обойдетесь. Ошибки компиляции очень легко заметить (на них просто трудно не обратить внимания) и обычно легко исправить. Вы не сможете запустить программу, пока не устраните их.
Чаще всего сбой при компиляции бывает вызван глупой синтаксической ошибкой или обычной невнимательностью, например при вызове функции с параметром неверного типа. Сбой может быть вызван ошибкой в make-файле, ошибкой этапа сборки (например, отсутствием реализации функции) или даже нехваткой дискового пространства на машине, где осуществляется сборка. <...> (С. 214)


Роберт Мартин. Чистый код: Создание, анализ и рефакторинг. (Библиотека программиста). Спб.: Питер, 2010. – 464 стр.

Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship.

Martin.jpg


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

* * *
…И предоставлю всю необходимую для этого информацию. Но когда вы впервые заберетесь на велосипед, вы всё равно неизбежно упадете.
С программированием дело обстоит точно так же. Конечно, мы могли бы записать все «хорошие» принципы чистого кода, а потом доверить вам всю практическую работу (другими словами, позволить вам упасть, забравшись на велосипед), но какие бы из нас тогда были учителя?
Нет. В этой книге мы пойдем по другому пути.
Умение писать чистый код – тяжелая работа. Она не ограничивается знанием паттернов и принципов. Над кодом необходимо попотеть. Необходимо пытаться и терпеть неудачи. Необходимо наблюдать за тем, как другие пытаются и терпят неудачи. Необходимо видеть, как они спотыкаются и возвращаются к началу; как мучительно принимаются решения и какую цену приходится платить за неверный выбор.
Приготовьтесь основательно потрудиться во время чтения книги. Перед вами не «легкое чтиво», которое можно проглотить в самолете и перевернуть последнюю страницу перед посадкой. Книга заставит вас потрудиться, и потрудиться усердно. Какая работа вам предстоит? Вы будете читать код – много кода. И нам придется как следует подумать, что в этом коде правильно, а что нет. Вы будете наблюдать за тем, как мы разбираем эти модули, а потом собираем заново. Это потребует немало времени и усилий; но мы считаем, что результат того стоит.
Книга разделена на три части. В первых нескольких главах излагаются принципы, паттерны и приемы написания чистого кода. В них приводится довольно солидный объем кода, и читать их будет непросто. Весь этот материал подготовит вас ко второй части. Если вы отложите книгу после первой части – всего хорошего!
Во второй части книги трудиться придется еще больше. Она состоит из нескольких практических сценариев нарастающей сложности. Каждый сценарий представляет собой упражнение по чистке кода – или преобразовании проблемного кода в код с меньшим количеством проблем. Чтобы усвоить материал этой части, <...>

* * *
Правило № 1: выполнение всех тестов
Прежде всего система должна делать то, что задумано ее проектировщиком. Система может быть отлично спланирована «на бумаге», но если не существует простого способа убедиться в том, что она действительно решает свои задачи, то результат выглядит сомнительно.
Система, тщательно протестированная и прошедшая все тесты, контролируема. На первый взгляд утверждение кажется очевидным, но это весьма важно. Невозможно проверить работу системы, которая не является контролируемой, а непроверенные системы не должны запускаться в эксплуатацию.
К счастью, стремление к контролируемости системы ведет к архитектуре с компактными узкоспециализированными классами. Всё просто: классы, соответствующие принципу SRP, проще тестировать. Чем больше тестов мы напишем, тем дальше продвинемся к простоте тестирования. Таким образом, обеспечение полной контролируемости системы помогает повысить качество проектирования.
Жесткая привязка усложняет написание тестов. Таким образом, чем больше тестов мы пишем, тем интенсивнее используем такие принципы, как DIP, и такие инструменты, как внедрение зависимостей, интерфейсы и абстракции, для минимизации привязок.
Как ни удивительно, выполнение простого и очевидного правила, гласящего, что для системы необходимо написать тесты и постоянно выполнять их, влияет на соответствие системы важнейшим критериям объектно-ориентированного программирования: устранению жестких привязок и повышению связности. Написание тестов улучшает архитектуру системы. (С. 201)


Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений (3-е издание). Издательский дом "Вильямс", 2008. Пер. с англ. – 720 стр.

Grady Booch and oth. Object-oriented Analysis and Design with Application. Third edition.

Booch.jpg


Аннотация. Книга представляет собой новое издание бестселлера Гради Буча по объектно-ориентированному анализу и проектированию. Авторы описывают объектные методы решения сложных проблем, связанные с разработкой систем и программного обеспечения. Используя многочисленные примеры, они иллюстрируют основные концепции объектно-ориентированного подхода на примере разработки систем управления, сбора данных и искусственного интеллекта. Читатели найдут в книге практичные советы, касающиеся важных вопросов анализа, проектирования, реализации и оптимального управления проектами.
Книга будет полезна системным аналитикам и архитекторам, программистам, преподавателям и студентам высших учебных заведений, а также всем специалистам по информационным технологиям.

Гради Буч получил всемирное признание за его новаторскую работу в области архитектуры, проектирования и моделирования программных систем. С момента создания компании IBM Rational в 1981 году, он работал ее ведущим научным сотрудником. В марте 2003 года Гради получил звание почетного сотрудника IBM (IBM Fellow).
Гради – один из основоположников языка Unified Modeling Language (UML), а также автор нескольких оригинальных разработок компании Rational. Работая над многочисленными проектами, связанными с интенсивным программированием, Гради был не только архитектором программных систем, но и учил сотрудников принципам проектирования.


"Чем сложнее система, тем она уязвимее". Трудно себе представить строителя, размышляющего, а не вырыть ли еще один подвальный этаж под уже построенным стоэтажным зданием. Такое мероприятие было бы слишком дорогим и опасным. Как ни странно, пользователи программного обеспечения, не задумываясь, просят делать аналогичные изменения в программах. Более того, они считают, что для программиста эта задача не представляет никаких трудностей.
Наша неспособность справиться со сложностью, характерной для программного обеспечения, приводит к задержкам, дополнительным расходам и нарушениям технического задания. Такую ситуацию часто называют кризисом программного обеспечения, но, откровенно говоря, болезнь, длящуюся столь долго, следует называть нормальным состоянием. К сожалению, этот кризис уже привел в расточительному расходованию трудовых ресурсов – самого дорогого товара, – и многие возможности оказались упущенными. Для того чтобы создать новое программное обеспечение, необходимое пользователям, совершенно не достаточно просто собрать команду хороших программистов. Кроме того, во многих организациях большое количество персонала вынуждено отвлекаться на поддержку морально устаревших программ. Учитывая прямой и косвенный вклад, который вносит программное обеспечение в экономику наиболее развитых стран, а также огромные возможности, появляющиеся благодаря информатизации, следует признать, что мириться с такой ситуацией больше нельзя.
Как изменить эту мрачную картину? Поскольку источником всех проблем является сложность, присущая программному обеспечению, следует начать с изучения сложных систем, существующих в других научных дисциплинах. Действительно, если оглянуться вокруг, то можно обнаружить весьма успешно функционирующие системы, обладающие значительной сложностью. Некоторые из этих систем созданы человеком, например, космический корабль "Space Shuttle", туннель, соединяющий Англию и Францию, а также крупные корпорации. В природе существуют еще более сложные системы, такие как система циркуляции крови у человека <...> (С. 34)

* * *
Дилетанты постоянно ищут некий волшебный метод или инструмент, который мог бы сделать процесс разработки программ тривиальным. В отличие от них, профессионалы знают, что такой панацеи не существует. Дилетанты хотят иметь готовые рецепты; профессионалы знают, что такой подход ведет к негодным проектным решениям и нагромождению лжи, за которой разработчики скрываются от ответственности за ранее принятые неверные решения. Дилетанты либо игнорируют документацию вообще, либо делают из нее фетиш, заботясь больше о том, как их бумажный продукт выглядит в глазах заказчика, чем о его сути. Профессионал признает важность документации, но всегда отдает предпочтение разумным архитектурными новшествам.
Процесс объектно-ориентированного анализа и проектирования невозможно описать с помощью рецептов, однако он определен достаточно хорошо, чтобы стать основой прогнозируемого и воспроизводимого процесса разработки программного обеспечения. В главе изучаются процессы анализа и проектирования (его цели, результаты, этапы и критерии успеха), а также приведен обзор процесса разработки программного обеспечения в целом. (С. 281)

________
Книги по языку Java: Топ-5
Программирование "с нуля". Как изучать системное программирование ("Магия ПК")
resp

Файловое хранилище IDrive. Обзор. Пошаговая инструкция

В один прекрасный день мы понимаем, что жесткий диск нашего компьютера содержит файлы, которые имеют большую ценность из-за своей уникальности (документы, персональные фото), и которые не хочется потерять безвозвратно при чрезвычайных ситуациях – скачок напряжения в сети, случайное нажатие кнопки ребенком или котом, просто тихая смерть жесткого диска и т.п.
Уже десять лет человечество активно пользуется файловыми хранилищами сети. Интернет-сервисы, отличаясь друг от друга набором функций, изощряются в одном: как угодить пользователю, как сделать бэкап файлов наиболее комфортным и быстрым. Можно наблюдать также гибкую политику в отношении оплаты за сервис. Базовые функции и определенное количество виртуального пространства обычно доступно бесплатно, а в случае неуемных аппетитов пользователя можно перейти на платные тарифы.
* * *
Итак, нас интересует бесплатное облако для надежного хранения файлов. Лучшие предложения сегодня: Google Drive (https://drive.google.com/), OneDrive (http://onedrive.com/) и некоторые другие. Хочется потестировать разные площадки. Попробуем файловое хранилище ♥ iDrive. Всезнайка-интернет сообщает: "Сервис специализируется сугубо на возможностях резервного копирования."
Начнем по порядку. Инструкция для "чайников".

* * *

Идем на сайт https://www.idrive.com/, слева внизу нажимаем на квадрат "BASIC - 5 GB - FREE - Sign up", что значит: "Основной пакет - 5 Гбайт - Бесплатно - Регистрироваться" https://www.idrive.com/idrive/signupFree
Нетрудно догадаться, что сервис обещает нам бесплатно предоставить 5 Гб дисковой квоты хранения.
Заполняем несложную форму. Пример заполнения полей:

01_reg.gif

1) Имя / Фамилия
2) Email address | Ваш электронный адрес
3) Create a Password | Придумайте ваш личный пароль (не забудем отдельно выписать его на бумажку или сохранить в файле "Блокнота" *txt)
4) Поле "Promo code" оставляем пустым.
5) В поле "Verification" пишем цифры, которые будут предложены на картинке.
6) Ставим галочку возле слов "I agree to the..."
7) Жмем на зеленую кнопку "Create My Account" ("Создать Мой Аккаунт")
Всё это можно проделать за 45 секунд, ничего сложного.

* * *

Появится сообщение, как на скриншоте ниже.

02_config.gif

Сервис предлагает нам выбрать "encryption key" ("ключ шифрования"). Оставляем галочку в поле "Default encryption key" и нажимаем зеленую кнопку "Continue".

* * *

Появится сообщение с предложением скачать приложение "IDriveWinSetup.exe":

03_setup.gif

Нажимаем "Сохранить файл". Файл размером 19 мегабайт скачается на ваш жесткий диск в папку, которую вы назначили для загрузок в Mozilla Firefox (или любом другом браузере).
Приступаем к инсталляции приложения. Запускаем "IDriveWinSetup.exe".
Перед нами промелькнет несколько стандартных окошек, везде жмем "Next", ничего не меняя.

* * *

Тем временем на вашу электронную почту прилетели два письма. В одном из них находим синюю кнопку "Verify Email Now" ("Подвердить Вашу Почту Сейчас"), как на скриншоте ниже и жмем ее.

04_verify.gif

Появится окошко:

05_ver.gif

Верификация электронного адреса прошла успешно. Можно приступать к использованию iDrive-сервиса. В интернете краткое описание работы с ним выглядит так: "Использовать его просто: скачать iDrive программное обеспечение, запустить приложение и выбрать папки для синхронизации." Мы уже скачали и инсталлировали программу. Ищем на рабочем столе красный ярлык IDrive и жмем на него (либо он уже самостоятельно запустился). Затем в открывшемся приложении ищем вкладку "Login to your account", заполняем форму (Ваш электронный адрес + Ваш пароль), жмем галочку "Remember me" ("Помнить меня") и жмем синюю кнопку "Login".
(Кстати: при первом запуске iDrive можно увидеть стандартное сообщение от вашего брандмауэра с вопросом, разрешено ли допускать iDrive в интернет.)
Окошко программы сейчас выглядит так:

06.gif

Вверху указано, сколько места в виртуальном хранилище мы использовали: "0 KB of 5,00 GB used" ("ноль килобайт из пяти гигабайт использовано")
Можно даже растеряться, поскольку нет привычных многим пользователям кнопок "Загрузить" и "Скачать". На самом деле эти главные для файлового хранилища функции перед нашим носом: кнопки слева "Backup" и "Restore".
Пока мы размышляли, видим, что программа развила бурную активность и начала бэкап служебных папок с жесткого диска. Во вкладке Backup ищем синюю кнопку "Change ...", жмем. Убираем галочки с ненужных папок и ставим напротив папки, которую мы решили скопировать в облако iDrive. Затем жмем синюю кнопку "Start Backup Immediately" ("Начать Бэкап Немедленно"). Процесс пошел!

08.gif

В конце появится служебное сообщение, жмем "Close" ("Закрыть"). Ваша папка уже на сервере, хотя вверху всё также "0 KB of 5,00 GB used". Достаточно выйти из программы, а затем снова зайти, чтобы данные обновились.

* * *

Немного потестировал сервис iDrive. Залил в облако папку с 9-ю *rar-архивами, самый большой из которых имел вес 305 МБ. Всего папка весила 859 МБ. Не сказать, что быстро залилось, но в пределах разумного. Гораздо больше огорчил возврат данных назад на жесткий диск. Итак, симулируем потерю папки: выходим из программы iDrive, удаляем папку в корзину.
Запускаем. Программа нервничает: "Folder is missing" ("Папка потеряна"). Во вкладке "Restore" выбираем в проводнике то, что нужно восстановить и жмем "Restore Now" ("Восстановить Сейчас").

09.gif

Моя папка в 859 МБ была восстановлена (скачана из облака на жесткий диск) за 49 минут, что никак не назовешь хорошим результатом – сегодня, когда мы привыкли к скачиванию фильма за несколько минут.
Из любопытства повторил эксперимент в час ночи, когда нагрузка на сервер предположительно меньше. Результат значительно улучшился. 25 минут. Здесь не надо забывать и о собственной толщине интернет-канала.

10.gif

Очевидно, что потеря папки – это утрата, которая бывает раз в год или никогда не бывает, поэтому качать часто с сервера явно не придется. Главное, что эти данные существуют в облаке и никогда не пропадут.
→ Попробовал залить папку также на файловое хранилище ♥ Box.com (https://www.box.com/home/), старейшее и уважаемое, с которым знаком давно. И вот начались подводные камни. Загрузка всех файлов не удалась: система забраковала самый большой *rar-архив весом 305 МБ, мотивируя ограничением бесплатного пакета в 250 МБ на файл. (Ранее у Box.com вообще были смехотворные ограничения в 20 МБ).
→ Ознакомился на днях с облачным сервисом ♥ Cloud Me (https://www.cloudme.com/), который аналогичен iDrive – качаешь программное обеспечение и выбираешь папку для синхронизации. Для бесплатного пакета сплошной негатив: скорость заливки хуже почти в два раза, дают 3 бесплатных ГБ, ограничение в 150 МБ на файл. Cloud Me может отлично подойти тем, кому надо зазеркалить небольшую папку с *doc/*pdf-документами на 100–200 мегабайт, остальные – проходим мимо.

* * *

Еще некоторые наблюдения. Кириллица в названиях файлов обрабатывается десктоп-приложением iDrive корректно, без глюков. Функции публикации обнаружить не удалось – таким образом, ссылкой на файл нельзя поделиться за пределами сервиса.
Напоследок заглянем в настройки десктоп-приложения (кнопка слева "Settings"). Можно найти смену языка: Английский, Французский, Немецкий, Испанский на выбор.

11_settings.gif

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

Автор текста: fir-vst, 22.05.2016
resp

Обзор Gnumeric 1.6.3

Владельцы домашних ПК обычно не используют и десятой части всех возможностей офисного пакета от Microsoft и временами задаются вопросом – а нужен ли он вообще? Не так давно мы уже рассматривали бесплатную альтернативу MS Word – open-source-редактор AbiWord. На этот раз речь пойдет об отличной замене электронных таблиц MS Excel – Gnumeric.

Gnumeric 1.6.3 build 2
• Freeware
Разработчик Jody Goldberg
Размер 16,2 MB

Если сделать своеобразный срез предпочтений пользователей электронных таблиц, то первые места с уверенностью займут функциональность, комфортность в работе и совместимость с другими приложениями. Gnumeric в полной мере отвечает этим требованиям – в отличие от других бесплатных электронных таблиц, похожих скорее на незаконченные курсовые проекты, Gnumeric является на удивление целостной и завершенной программой, где есть всё, что может понадобиться пользователю. Ее интерфейс удобен, практичен и во многом напоминает классический MS Excel 2003. Ну а гибкость и простота в работе вместе с полноценной поддержкой кириллицы гарантируют такой же уровень комфорта, как и в знаменитом продукте от Microsoft.
    Gnumeric обладает всеми стандартными средствами форматирования ячеек: изменение цвета текста и фона, размера и начертания шрифта и т.д. Еще один приятный бонус – отображение формул в ячейках таблицы вместо их значений, а также возможность наложить на их содержимое дополнительные ограничения (например, недопустимость отрицательных значений чисел в указанной таблице).
    Визитной карточкой Gnumeric является просто огромный набор встроенных функций, позволяющих проводить статистические, финансовые, инженерные и другие расчеты. Все они сгруппированы во вкладке Селектор функций на панели инструментов, что значительно упрощает работу.

Gnumeric.gif

    На уровне реализована и пресловутая совместимость форматов. Несмотря на то что "родной" XML-формат программы *.gnumeric неизвестен MS Excel 2007, документ, сохраненный как *.xls (MS Excel 95–2003), открылся в новом Excel без малейших проблем, и все элементы были сохранены. Немного хуже обстоят дела с обратной процедурой – *.xlsx не открываются последней стабильной версией Gnumeric, но в ближайшее время эта проблема тоже будет решена.
    С поддержкой макросов у программы пока не сложилось – их тут просто нет. Правда, авторы Gnumeric клятвенно обещают реализовать эту функцию уже в ближайших версиях ПО. Зато порадовал мастер диаграмм: неплохой выбор шаблонов, широкие возможности для их тонкой настройки – даже поклонники Excel найдут здесь немало интересного для себя.
    Подводя итоги, можно сказать, что Gnumeric станет отличным дополнением к арсеналу бесплатных программ домашнего пользователя, а в большинстве случаев вполне способна заменить дорогостоящий продукт от Microsoft. ■

ВЕРДИКТ: 4/5
ЗА:
Бесплатная и удобная замена MS Excel; отличная совместимость.
ПРОТИВ:
Нет поддержки макросов; пока не умеет работать с документами MS Excel 2007.

Ростислав Панчук ("Домашний ПК" 2007 №6)
fvs

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

* "Магия ПК" 2000 №5(27), С. 43–45.

    Итак, вопреки всякой логике вы всё же решили научиться писать программы. Причем именно писать, а не "ваять" наскоро что придется и как придется. Неважно, что сподвигло вас на это решение, – стремление получить престижную профессию, врожденная любознательность, желание выделиться среди друзей или взломать сервер Пентагона. В любом случае вам придется пройти тернистый путь, лишь изредка перемежающийся минутами подлинного торжества.
    О том, с чего нужно начинать учиться программированию, сказано немало. Неоднократно писала об этом и "Магия ПК". Однако многое из того, что советуют профессиональные педагоги, на практике оказывается более чем спорным. А потому взглянем на эту проблему еще раз – с позиций практики.

Антиутопия компьютерной педагогики

    Во многих современных учебниках по программированию настоятельно рекомендуется начинать с освоения какой-либо системы визуального программирования – Delphi, C++ Builder, Visual C++ или Visual Basic. При этом приводятся следующие аргументы:

• визуальные среды позволяют быстро получить привлекательный результат;
• все современные системы программирования ориентированы на объектный подход; к чему учиться устаревшим парадигмам, если ООП – наиболее современен?
• визуальные среды – профессиональный инструмент, знание которого пригодится в будущей работе.

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

cartoon.gif

    Еще более спорным является тезис о целесообразности начинать изучение программирования непосредственно с объектного подхода. Спору нет, ООП – прогрессивная и современная технология, однако это – не панацея. И сейчас во многих случаях решения, диктуемые этим подходом, оказываются далеко не оптимальными. Но не это главное. Главное заключается в том, что идея программного моделирования предметной области, лежащая в основе концепции ООП, слишком сложна для восприятия без предварительной подготовки. И если понять сам принцип восприятия мира как множества взаимодействующих сущностей при наличии определенного философского фундамента еще возможно, то осознать, как исполняется объектная программа на ЭВМ, – почти непосильная задача.
    Наконец, третий тезис также не бесспорен. Во-первых, потому что изучение программирования лишь на несколько процентов состоит в освоении конкретной среды, а большую часть времени и сил приходится тратить на осознание общих принципов, формирование специфики мышления, ознакомление с типовыми подходами и приемами. Во-вторых, практика показывает, что профессиональному программисту труднее всего работать именно в той среде, с которой начиналось его обучение.
    Это легко объяснимо – на начальной стадии каждый из нас делает массу ошибок, формирует множество неверных представлений, которые впоследствии пересматриваются, однако оставляют заметный след в нашем сознании. И, вторично оказываясь в той же ситуации, с которой ему приходилось сталкиваться в процессе обучения, специалист как бы теряет накопленные профессиональные навыки и непроизвольно ищет решение на основании давних ассоциаций новичка. По крайней мере таково его первое движение, а именно оно играет основную роль в принятии разработчиком ключевых проектных решений.
    Однако главное заключается в другом: использование визуальных сред, во всяком случае правильное использование, полностью заслоняет от пользователя архитектуру машины, специфику выполнения ею написанной программы. А между тем, для того, чтобы программирование не превращалось в мистический процесс укрощения своенравного компьютера, а оставалось ремеслом, профессией, очень важно, чтобы разработчик хорошо понимал принципы выполнения своей программы. И с этой точки зрения обучение на основе визуальных сред и ООП бессмысленно, ибо человек, наученный таким образом, подобен монтеру из известной рекламы – работающая программа невольно вызывает у него восклицание: "Ё-мое, что ж я сделал-то?"

"К четырем прибавить два..."

    Интересно, что идея начинать обучение с конца характерна только для программирования. В самом деле, никто ведь не пытается преподавать релятивистскую механику прежде законов Ньютона! Все науки прошли долгий путь развития, множество ошибочных и неточных теорий, некорректных экспериментов. Школьник, изучая их, как бы повторяет за несколько лет всё, что делало человечество в течение тысячелетий. Бессмысленная трата времени? Нет! Двигаясь таким образом, ученик как бы сам приходит к тем же выводам, что и его великие предшественники.
    Отчего же не начать программирование с начала? Нет, не с тумблеров и светодиодов разумеется, но с фон-неймановской архитектуры и понятия программы как последовательности исполняемых команд. Естественно, рассматривать принципы машинной организации "всухую", особенно если вы молоды и честолюбивы, совсем неинтересно. А потому, если уж начинать писать программы, то лучше всего сразу осваивать язык ассемблера.
    Парадокс? Ведь Ассемблер по сей день считается едва ли не самым сложным из языков программирования. Однако на самом деле он имеет немало достоинств именно с точки зрения "обучения с нуля".
    Во-первых, Ассемблер прост. Это не просто сенсационное заявление – это факт. Архитектура компьютера, будь то IBM-совместимый ПК или промышленный контроллер от Toshiba, как правило, сравнительно проста – память, регистры, стек. Несколько видов адресации да условные и безусловные переходы. Порождаемый каждой командой эффект обычно тривиален для понимания, а потому весь процесс изучения сводится к механическому запоминанию мнемоник инструкций. Если последние достаточно логичны, как, например, в Ассемблере процессоров Intel, учить машинный язык совсем несложно.
    Во-вторых, изучая язык Ассемблера, учащийся волей-неволей вынужден сталкиваться с архитектурными особенностями своего компьютера. Такие понятия, как сегменты памяти, порты или escape-последовательности из чисто абстрактных категорий становятся инструментами для решения прикладных задач. Более того, понимая, можно ли реализовать ту или иную программу на Ассемблере, хотя бы теоретически, программист ощущает пределы возможностей машины, осознает, что можно требовать от компьютера, а что – нет.
    Еще одно несомненное преимущество заключается в том, что переход от Ассемблера к языку высокого уровня значительно проще, чем наоборот. Осваивая C++ или Паскаль, ассемблерщик представляет себе, как работает та или иная конструкция на уровне машинного кода, во что она будет скомпилирована. Соответственно, он понимает свою программу, не боится ее.
    Кроме того, и это психологически важно, Ассемблер благодаря своей универсальности рождает уверенность, что в случае необходимости отдельные фрагменты программы могут быть написаны или отлажены на самом низком уровне. А это – пусть эфемерная, но всё же гарантия того, что любая техническая проблема может быть решена, пусть большой кровью, но наверняка.
    И, наконец, даже сейчас язык Ассемблера иногда бывает полезен и даже незаменим. И не только при программировании для спецмашин, контроллеров и другого "экзотического" оборудования, но и при разработке некоторых программ для ПК – драйверов, системных утилит, фрагментов операционных систем, при реализации алгоритмов, требующих повышенной производительности.
    Очень часто основным недостатком Ассемблера называют громоздкость написанных на нем программ и сложность их тестирования и отладки. Действительно, работать с десятками и сотнями тысяч строк кода самыми примитивными средствами нелегко. Но именно так рождается то упорство, та бесконечная настойчивость, без которой самый одаренный человек никогда не сможет стать хорошим программистом. Ибо для хорошего профессионала мало придумать красивый алгоритм, нужно еще уметь при необходимости дни и недели "выуживать" из него неуловимую, непонятную ошибку.

"Мы всё начнем сначала…"

    Если вы вознамерились начать учиться программированию с освоения Ассемблера, то небесполезно будет знать несколько азбучных истин, способных существенно облегчить учебный процесс.
    Во-первых – о книгах. Учиться программированию проще и эффективнее с книгой в руках, но достать в наше время хорошую книгу по Ассемблеру непросто. Чаще всего попадаются либо справочники по архитектуре ЭВМ, либо толстые учебники с массой примеров, лишающие читателя всякого удовольствия от самостоятельного творчества и мешающие воспринимать принципы построения программ, затмевая их массой ненужных деталей. Начинающему лучше всего подойдет простой справочник по системе команд процессора и функциям операционной системы. Удобным компьютерным вариантом такого пособия может служить система TechnoHelp.
    Не стоит пытаться писать на Ассемблере под Windows. Вообще, желание сразу получить красивые окошечки мало совместимо с последовательным изучением программирования. В данном же случае вы рискуете утонуть в массе ненужных и непонятных деталей.
    Первое, с чем следует ознакомиться, – организация ЭВМ: регистры, память, стек. Первые несколько программ логично написать максимально просто – несколько пересылок между регистрами и памятью, запись и чтение из стека, передачи управления, вызов процедур. Работу программ можно изучить по шагам (в режиме трассировки) в любом доступном отладчике – Turbo Debugger, AFD и даже MS Debug.
    Далее можно переходить к функциям DOS – выводу на экран, работе с файлами, распределением памяти. Последний шаг – программирование внешних устройств: динамика, таймера, параллельного и последовательного порта. Имея в запасе такой инструментарий, можно переходить к реальным задачам. Интереснее, но и сложнее всего разрабатывать резидентные программы и драйверы: овладев этим искусством, вы можете смело переходить к языкам более высокого уровня.

Доброе напутствие

    Чтобы закончить с общими рекомендациями по тому, как проще всего освоить язык Ассемблера, стоит дать еще несколько конкретных советов:
    1. По мнению большинства ассемблерщиков, лучший транслятор для IBM PC – TASM фирмы Borland. Версия, поскольку вы вряд ли будете писать очень сложные программы, решающего значения не имеет.
    2. Знание Ассемблера – не вершина, а только первая ступень к профессионализму. Если вам удалось в совершенстве овладеть этим языком, вы скорее всего хорошо представляете себе устройство компьютера и базовые принципы исполнения программ в однозадачной операционной системе. Это – необходимые навыки, но не более того.
    3. Закончив изучать Ассемблер, познакомьтесь с одним из процедурных языков, лучше всего Паскалем или C++ в режиме расширенного C. Только поняв особенности конструкций высокого уровня, овладев технологией структурного программирования можно начать готовиться к штурму ООП.
    4. Разрабатывая программы на Ассемблере, не стремитесь как можно шире использовать макросредства и специальные директивы компилятора. Во-первых, этим вы, скорее всего, сведете к нулю переносимость своей программы, во-вторых, для целей обучения значительно полезнее, чтобы каждая инструкция, исполняемая в программе, была написана вами собственноручно.
    5. Не "срисовывайте" готовые примеры. Возможно, есть люди, способные обучаться на чужом опыте эффективнее, чем на своем, но только мне такие не известны. Естественно, модификация работающих примеров позволит получать результат значительно быстрее, чем при работе "с нуля", только познавательный эффект от нее будет, увы, невелик.
    6. Стремитесь не только узнать, но и сделать: доделывайте работу до конца. Разработать хорошую программу на Ассемблере не просто, но если вы справитесь с этой задачей, быстрота и компактность вашего детища станут достойной наградой за труды.
    Дерзайте, леди и джентльмены!

Константин Хайт

OCR: fir-vst, 2016
Рисунок: Игорь Копельницкий
©
fvs

История программирования. Фортран

* "Магия ПК" 2000 №6(28), С. 49–50.

    В 1955 году увидел свет первый алгоритмический язык высокого уровня FORTRAN (FORmula TRANslator – транслятор формул). Он использовался в основном для решения научно-технических и инженерных задач, а разработали его сотрудники фирмы IBM под руководством Джона Бэкуса. Чуть позже, в 1957 году, Джон Бэкус и его сотрудники установили в IBM (Beстингхауз) первый компилятор языка Фортран. Программисты, ранее работавшие исключительно на Ассемблере, скептически относились к возможностям высокопроизводительного языка высокого уровня, поэтому основным критерием при разработке стандартов на Фортран и создания компиляторов с этого языка была эффективность исполняемого кода. Кстати, термин "компилятор" тогда еще широко не использовался, хотя уже был введен Грейс Хоппер – единственной в США женщиной-адмиралом, которую называли также "первой леди программирования и бабушкой Кобола".
    Большинство операторов Фортрана транслировались непосредственно в одну–две машинные команды, простые синтаксические конструкции и активное использование меток и goto позволяло получить очень быстрый код, и в результате программы на Фортране подчас работали быстрее ассемблерных. Сама внутренняя структура оттранслированной программы была также очень простой – весь код, все подпрограммы и все данные вместе с общим блоком размещались исключительно в статической памяти, из-за чего, правда, невозможно было использовать рекурсию.
    Поскольку Фортран был первым языком высокого уровня, отвечающим нуждам большинства пользователей того времени, да еще и простым в изучении, распространился он очень быстро.
    Из-за широкого распространения этого языка и появления множества Фортран-программ (преимущественно вычислительного характера) насущным стал вопрос его стандартизации. Сначала это был стандарт Fortran IV 1964 года, затем, по мере появления новых идей, в 1978 году был принят новый стандарт Fortran 77 (f77) с большим числом более современных и гибких синтаксических расширений. Сегодня наиболее распространенным вариантом Фортрана являются Fortran 90 (f90) и Fortran 95. Группа энтузиастов заканчивает работу над суперверсией языка F2k, которая будет опубликована в этом году.
    Хотя в новые версии языка вносились подчас как ненужные дополнения (например, расширения, связанные с динамической аллокацией памяти), так и полезные, типа модульной организации программы, работы с частями массивов и др., сегодня этот язык нельзя назвать перспективным для изучения, так как синтаксис его значительно устарел.
    Однако тем, кому довольно часто приходится решать различные вычислительные задачи, совсем не обязательно каждый раз брать в руки учебник по математике и "начинать с нуля". В 90% подобных случаев то, что вы ищете, уже давно реализовано и отлажено на Фортране. Поэтому, скорее всего, жизнь Фортрану обеспечена надолго.
    Есть и еще одна, сравнительно молодая ниша для Фортрана – параллельные вычисления, где строгая семантика языка позволяет получать высокопроизводительные программы. Обычно используется стандарт f90, немного расширенный набором операторов для указания пригодных к распараллеливанию частей программы. Параллельный Фортран имеет свой стандарт HPF (High Performance Fortran). Тем не менее фанаты Фортрана, девизом которых стала легендарная фраза "Зачем мне изучать другие языки, когда я могу всё написать на Фортране", ощущали его очевидную непригодность для крупномасштабных проектов, связанную с привязанностью к синтаксису 50-х годов, и пытались ввести в него модные идеи ООП, но объектный Фортран в качестве стандарта так и не появился.
    Среди бесплатно распространяемых версий Фортрана наиболее известен f2c, реализованный для всех UNIX-систем и преобразующий текст Фортран-программы в Си-код. Для DOS имеется версия bcf77, распространяемая бесплатно. Из коммерческих версий в первую очередь надо отметить Microsoft Fortran, позволяющий создавать dll-библиотеки, и Watcom Fortran, генерирующий высокоэффективный код. Для задач, требующих высокой точности вычислений, предназначен компилятор фирмы MicroWay. А вообще различные по качеству компиляторы Фортрана имеются на абсолютно всех компьютерных платформах.
    Однако основная заслуга Фортрана в другом. Когда появилась необходимость в разработке очень крупных проектов, недостатки Фортрана, связанные в первую очередь с "тяжелой" отладкой, стали излишне обременительны. Поэтому Фортран послужил сильнейшим стимулом для развития теории отладки и тестирования программ. Появились сотни синтаксических верификаторов Фортран-текстов, вылавливающих скрытые логические ошибки. В дальнейшем из этого направления выросли такие теоретические области программирования, как эквивалентные оптимизирующие преобразования программ, высокоуровневая компиляция, автоматическое тестирование и т.д. Так что про Фортран забывать никак нельзя. Использовать его в качестве инструментария в задачах системной интеграции, наверное, не имеет смысла, но то, что было наработано лучшими программистами за 30–40 лет, вполне может ускорить процесс разработки. По крайней мере, программных "кирпичиков" для Фортрана ныне существует несравненно больше, чем для других языков программирования. ■

* * *

    Джон Бэкус родился 3 декабря 1924 в Филадельфии, штат Пенсильвания, в богатой семье, детские годы провел в Вилмингтоне. Закончив школу в 1942 году, он поступил в университет штата Вирджиния на химический факультет (по настоянию отца-химика), но спустя некоторое время перестал заниматься и в 1943 году был призван на военную службу.
    Бэкус начинал служить в бригаде противовоздушной обороны в форте Stewart, штат Джорджия, но впоследствии был направлен в колледж для изучения медицины.
    Некоторое время он с увлечением работал в городской больнице, но в 1946 году охладел к этой работе, оставил армию и переехал в Нью-Йорк, хотя не знал за что браться и как жить дальше.
    Через некоторое время Бэкус поступил в школу подготовки радиотехников. "У меня был очень хороший преподаватель, и он попросил, чтобы я вычислил характеристики некоторых схем. Это было страшно утомительно, но крайне интересно".
    Вскоре Бэкус поступил в Колумбийский университет (Нью-Йорк), чтобы изучать математику, где и получил высшее образование (1949 г.). Незадолго перед тем, как закончить обучение, он посетил компьютерный центр IBM на Мэдисон Авеню. И здесь удача во второй раз улыбнулась ему – в 1950 году Бэкус стал программистом компании IBM.
    О доминировании IBM в компьютерной индустрии впервые заговорили в 1952 году. Всё началось с модели 701, известной также под именем Defence Calculator (оборонный вычислитель). Сразу после выпуска модели 701 специалисты подразделения прикладных исследований приступили к ее совершенствованию (1955–1956 годы).

Backus_Fortran.jpg

    Наиболее серьезные изменения предложил внести Джон Бэкус, впоследствии принимавший активное участие в создании компьютера 704. В частности, благодаря ему появилась технология так называемого "ускоренного кодирования" (speed-coding), позволившая заметно упростить написание программ для 701. "Возможность ускоренного формирования кода для машины 701, которая представляла собой одноадресный компьютер с фиксированной запятой без индексных регистров, превратила ее в систему с плавающей запятой, произвольной адресацией и индексными регистрами, – вспоминал Бэкус. – Таким образом, пользователям больше не нужно было мучиться с двоичным кодом".
    Уже тогда появились первые компоненты технологии быстрого написания программ, которая используется сегодня. Фактически данная система стала предшественницей аналогичных комплексов, которые были выпущены в 50–60 годах и впоследствии вытеснены языками высокого уровня.
    А в 1955 году Бэкус "изобрел" Фортран, первый машинный язык высокого уровня. Впоследствии, вспоминая этот период, Бэкус скажет: "Мы не знали, к чему стремиться, и не знали, как это сделать". Первоначально все работы планировалось завершить в начале 1954 года, однако разработка языка завершилась практически через два года.
    Первая версия компилятора состояла из 25000 строк машинного кода, записанного на магнитной ленте. Каждая IBM 704 обеспечивалась копией программы с руководством по программированию на 51 странице.
    В 1959 году Бэкус разработал грамматические правила для описания синтаксиса языков высокого уровня (нормальная форма Бэкуса-Наура, сокращенно БНФ).
    В 1976 году Джон Бэкус был награжден Национальной медалью за вклад в науку, а с 1991 года перестал заниматься компьютерной тематикой.

Владимир Буслаев

OCR: fir-vst, 2016