Программист

 

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

 

История

 

Программирование зародилось совсем недавно. Первым оборудованием был ткацкий станок, построенный в 1804 году Ж.М. Жаккаром. Прибор имел несколько карт для разных машинных узоров. Вычислительную аналитическую машину изобрел Ч. Бэббидж, однако построить не смог. Первую программу для нее создала женщина, графиня А. А. Лавлейс в 1841 году. Она изобрела ряд современных понятий программирования: модификацию команд, индексный регистр, подпрограммы, библиотеку программ. Но труды графини оставались на бумаге.

 

Это начало зарождения программирования. Ада же признана первым, почетным специалистом написания ПО. Работающий компьютер же появился в 1941 году. Создателем стал Конрад Цузе. Он разработал первый сложный язык программирования и программы. В современности компьютерные технологии занимают одну из ведущих позиций во всех видах деятельности. Существует масса языков программирования, постоянно изобретают новые ПО. Компьютерные технологии – неотъемлемая часть жизни.

 

Описание

 

Программист – это специалист, занимающийся разработкой алгоритмов программ. Основой для написания являются математические вычисления. Современное программирование – трудоемкий процесс.

 

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

 

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

Слаженная работа, качество картинки, возможность сидеть в интернете – результат многих лет напряженного развития данной профессии.

 

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

 

  • системный программист – занимается разработкой операционных систем, глобальных поисковых систем – его работа как бы находится в родо-видовых отношениях с прикладным программистом. Эта специализация предполагает и аналитическую работу, что немаловажно для дальнейшего развития компьютеров и компьютерных сетей;

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

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

 

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

 

Личные качества

 

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

 

  • способность к самообучению;

  • терпеливость;

  • выдержка;

  • коммуникабельность;

  • инициативность;

  • самостоятельность;

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

  • ответственность;

  • упорство.

 

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

 

Плюсы

 

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

 

Второе несомненное преимущество – высокая оплата труда. Даже начинающий программист может рассчитывать на зарплату около 30-40 тысяч рублей. Если же говорить о зарплате высококвалифицированного программиста, то яркий пример таких именитых программистов, как Павел Дуров и Илья Сегалович свидетельствует о том, что доход специалистов в сфере IT может исчисляться миллионами (если не миллиардами).

 

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

 

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

 

 

Минусы

 

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

 

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

 

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

 

Важные качества

 

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

 

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

 

Интересные факты

 

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

 

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

 

Первое программируемое вычислительное устройство, Аналитическую машину, разработал Чарлз Бэббидж (но не смог её построить). 19 июля 1843 года графиня Ада Августа Лавлейс, дочка великого английского поэта Джорджа Байрона, как принято считать, написала первую в истории человечества программу для Аналитической машины. Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости. 

 

Законы Мерфи для программистов

 

1. Ничто не работает так, как планировалось запрограммировать. 

2. Ничто не программируется так, как должно работать.

3. Хороший программист характеризуется умением доказать почему задачу невозможно выполнить, когда ему просто лень её выполнять.

4. На решение проблемы уходит в три раза меньше времени, чем на обсуждение всех "за" и "против" её решения.

5. Обещанный срок сдачи - это аккуратно рассчитанная дата окончания проекта плюс шесть месяцев.

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

7. Настоящие программисты любят Windows — все ошибки, сделанные по собственной тупости, можно свалить на Microsoft.

8. Следствие — 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.

9. В приступе злости все почему-то молотят по невинному монитору, вместо системного блока.

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

11. Настоящий программист уже как минимум поменял три залитых пивом клавиатуры.

12. Все, кто испытывает проблемы с настройкой кодировки, автоматически считаются неандертальцами.

13. Дилетантские разговоры о компьютерах вызывают резкую тошноту вплоть до приступов рвоты. Вопрос о том как поменять "обои" в Windows вызывает желание перерезать горло вопрошающему.

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

15. HTML, HTTP, FTP, SMTP, TCP/IP, RTFM и т.д. - это слова, а не аббревиатуры.

16. Словосочетание "мышка-норушка" не несёт никакого смысла.

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

18. Следствие - если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое.

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

20. Решение всех жизненных проблем находится в интернете. Надо только уметь хорошо искать.

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

22. Тех, кто презирает программистов, программисты презирают сильнее, чем те, кто презирает программистов, презирают программистов, которые презирают тех, кто их презирает.

23. Если ты понял предыдущее — то ты программист.

 

Книги

 

«Эффективная работа с унаследованным кодом», Майкл К. Физерс

 

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

 

Можете ли вы без особого труда изменить код и тут же получить ответную реакцию на внесенные изменения? Насколько понятен этот код? Если вы ответите на эти вопросы отрицательно, значит, вы имеете дело с унаследованным кодом и понапрасну тратите время и средства на разработку. В своей книге Майкл Физерс предлагает полноценные стратегические приемы эффективной работы с крупными базами унаследованного нетестированного кода.

 

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

В этой книге освещаются следующие вопросы:


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

 

«Приёмы объектно-ориентированного проектирования. Паттерны проектирования», Эрих Гамма и другие

 

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

 

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

 

Издание предназначено как для профессиональных разработчиков, так и для программистов, осваивающих объектно-ориентированное проектирование.

 

«Чистый код. Создание, анализ и рефакторинг», Роберт К. Мартин

 

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


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

 

«Предметно-ориентированное проектирование», Эрик Эванс

 

Классическая книга Э.Эванса освещает наиболее общий, стратегический круг вопросов, связанных с объектно-ориентированной разработкой программного обеспечения. Это переработка и структуризация знаний о предметных областях, применение типовых архитектурных шаблонов, построение и анализ моделей предметных областей, проектирование программных объектов с точки зрения качества их взаимодействия и передачи логической структуры знаний, организация программ на основе крупномасштабных структур, выработка общего языка и стратегии коммуникации в группе.

 

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

 

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


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


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

 

«JavaScript: сильные стороны», Дуглас Крокфорд

 

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

 

Автор - уважаемый среди разработчиков эксперт в области JavaScript - выделяет массу интересных идей, которые делают JavaScript прекрасным объектно-ориентированным языком программирования. Эта книга откроет вам красивый, элегантный, простой и выразительный язык программирования, позволяющий создавать эффективный код независимо от того, управляете вы библиотеками объектов или просто пытаетесь заставить Ajax работать быстрее. Если вы разрабатываете сайты или приложения для Интернета, эта книга вам просто необходима.

 

«Шаблоны корпоративных приложений», Мартин Фаулер и другие

 

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

 

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

 

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

 

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

 

«Совершенный код. Мастер-класс», Стив Макконнелл

 

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

 

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

 

 «Рефакторинг. Улучшение существующего кода», Мартин Фаулер и другие


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

 

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

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

 

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

 

«Паттерны проектирования», Эрик Фримен, Элизабет Фримен и другие

 

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

 

Паттерны появились, потому что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Особенностью данного издания является уникальный способ подачи материала, выделяющий серию «Head First» издательства OReilly в ряду множества скучных книг, посвященных программированию.

 

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

 

«Язык программирования C», Брайан У. Керниган, Деннис М. Ритчи

 

Классическая книга по языку С, написанная самими разработчиками этого языка и выдержавшая в США уже 34 переиздания! Книга является как практически исчерпывающим справочником, так и учебным пособием по самому распространенному языку программирования. Предлагаемое второе издание книги было существенно переработано по сравнению с первым в связи с появлением стандарта ANSI С, для которого она частично послужила основой. Книга не рекомендуется для чтения новичкам; для своего изучения она требует знания основ программирования и вычислительной техники. Книга предназначена для широкого круга программистов и компьютерных специалистов. Может использоваться как учебное пособие для вузов.

 

«Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программ», Скотт Майерс

 

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными.

 

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

 

Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам. Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

 

«Экстремальное программирование: разработка через тестирование», Кент Бек

 

Возвращение знаменитого бестселлера. Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development - разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелые выводы.

 

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

 

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

 

«Алгоритмы. Построение и анализ», Томас Х. Кормен и другие


Книга "Алгоритмы. Построение и анализ" удачно объединяет в себе полноту охвата и строгость изложения материала. Много книг, посвященных алгоритмам, отличается строгостью изложения материала, но страдает определенной неполнотой; другие книги охватывают огромный объем материала, но недостаточно строго излагают его.

 

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

 

Первое издание книги "Алгоритмы. Построение и анализ" давно стало стандартным справочным руководством для профессионалов и учебным пособием для университетов.

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

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

 

Фундаментальный труд "Алгоритмы. Построение и анализ" известных специалистов в области информатики достоин занять место на полке любого человека, чья деятельность так или иначе связана с вычислительной техникой и алгоритмами:

 

  • для профессионала эта книга может служить настольным справочником,

  • для преподавателя - пособием для подготовки к лекциям и источником интересных нетривиальных задач,

  • для студентов и аспирантов - отличным учебником.


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


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

 

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

 

Томас Кормен - профессор информатики в колледже Дартмута и бывший директор Института литературы и риторики Дартмутского колледжа. Чарльз Лейзерсон - профессор информатики и электротехники в Массачуссетском технологическом институте, где также работает и профессор Рональд Ривест. Клиффорд Штайн - профессор организации производства и исследования операций в Колумбийском университете.


Отзывы о книге:

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


Шан-Хуа Тенг, Университет Южной Каролины
"Это настоящая библия в указанной области, исчерпывающий учебник, охватывающий весь спектр современных алгоритмов: от быстрых алгоритмов и структур данных до алгоритмов с полиномиальным временем работы для решения очень сложных задач, от классических алгоритмов теории графов до специализированных алгоритмов поиска подстрок, вычислительной геометрии и теории чисел. Нельзя не упомянуть появившиеся в третьем издании деревья ван Эмде Боаса и многопоточные алгоритмы, важность которых постоянно увеличивается".


Дэниел Шпильман, факультет информатики Йельского университета
"Как преподаватель и исследователь в области алгоритмов с более чем двадцатилетним стажем, могу с уверенностью утверждать, что книга Кормена - лучший из встречавшихся мне учебников. Это умный, энциклопедичный и современный подход к изучению алгоритмов; наш факультет продолжит использовать эту книгу как в качестве учебника для студентов и аспирантов, так и в качестве рекомендуемого справочного пособия".
Габриэль Робинс, факультет информатики Университета Вирджинии

 

«Регулярные выражения», Джеффри Фридл

 

Книга Джеффри Фридла "Регулярные выражения" откроет перед вами секрет высокой производительности. Тщательно продуманные регулярные выражения помогут избежать долгих часов утомительной работы и решить проблемы за 15 секунд. Ставшие стандартной возможностью во многих языках программирования и популярных программных продуктах, включая Perl, PHP, Java, Python, Ruby, MySQL, VB.NET, C# (и других языках платформы .NET), регулярные выражения позволят вам автоматизировать сложную и тонкую обработку текста.


В третье издание включена информация о РНР и его мощном механизме регулярных выражений. Кроме того, обновлены и дополнены сведения о других языках программирования, включая расширенное и углубленное описание пакета java.util.regex компании Sun, при этом особое внимание уделено различиям между Java 1.4.2 и Java 1.5/1.6.

 

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

 

Кроме того, автор демонстрирует наиболее распространенные ошибки и показывает, как их избежать.

 

«CLR via C sharp. Программирование на платформе Microsoft.NET Framework 4.5 на языке C sharp », Джеффри Рихтер

 

Эта книга, выходящая в четвертом издании и уже ставшая классическим учебником по программированию, подробно описывает внутреннее устройство и функционирование общеязыковой исполняющей среды (CLR) Microsoft .NET Framework версии 4.5.

 

Написанная признанным экспертом в области программирования Джеффри Рихтером, много лет являющимся консультантом команды разработчиков .NET Framework компании Microsoft, книга научит вас создавать по-настоящему надежные приложения любого вида, в том числе с использованием Microsoft Silverlight, ASP.NET, Windows Presentation Foundation и т.д.

 

Четвертое издание полностью обновлено в соответствии со спецификацией платформы .NET Framework 4.5, а также среды Visual Studio 2012 и C# 5.0.

 

«Современное проектирование на C++», Андрей Александреску

 

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

 

В книге Александреску "Современное проектирование на C++" изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга Александреску "Современное проектирование на C++" предназначена для опытных программистов на С++

 

«Microsoft ASP.NET 2.0. Базовый курс», Дино Эспозито


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

 

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

 

Книга адресована тем, кто не ограничивается прикладными сведениями, почерпнутыми из обычных учебных пособий, а намерен разобраться во всех деталях внутреннего функционирования исполняющей среды ASP.NET 2.0; состоит из 15 глав и предметного указателя.

 

«Шаблоны тестирования xUnit. Рефакторинг кода тестов», Джерард Месарош

 

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

 

В части I рассматриваются теоретические основы методов разработки тестов и описываются концепции шаблонов и "запахов" тестов (признаков существующей проблемы). В частях II и III приводится каталог шаблонов проектирования тестов, "запахов" и других средств обеспечения большей прозрачности кода тестов. Кроме этого, в части III сделана попытка обобщить и привести к единому знаменателю терминологию тестовых двойников и подставных объектов, а также рассмотрены некоторые принципы их применения при проектировании как тестов, так и самого программного обеспечения.

 

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

 

«Компиляторы. Принципы, технологии и инструментарий», Альфред В. Ахо и другие


Каждый, кто интересовался разработкой компиляторов, не мог не слышать о знаменитой "Книге Дракона", классическом труде Ахо и Ульмана "Принципы разработки компиляторов". Развитие технологий компиляции привело к рождению очередного "дракона" — книги "Компиляторы. Принципы, технологии, инструментарий", — у которой теперь уже четыре автора, и каждый из них является высококлассным специалистом в данной области.

 

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

 

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

 

  • языки программирования,

  • архитектура вычислительных систем,

  • теория языков,

  • алгоритмы и технология создания программного обеспечения.

 

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

 

«Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET», Кржиштоф Цвалина, Брэд Абрамс


Издание позволит разработчикам освоить лучшие приемы разработки многократно используемых библиотек для Microsoft .NET Framework. Расширенное и обновленное для .NET 3.5, это новое издание фокусирует внимание на разработке тех частей, которые непосредственно определяют применение в программах библиотеки классов, особенно общедоступных API.

 

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

 

Искусство программирования [4 тома] Дональд Кнут


«Искусство программирования» (англ. The Art of Computer Programming) — фундаментальная монография известного американского математика и специалиста в области компьютерных наук Дональда Кнута, посвященная рассмотрению и анализу важнейших алгоритмов, используемых в информатике. В 1999 году книга была признана одной из двенадцати лучших физико-математических монографий столетия.

 

Проект написания книги был начат автором в 1962 году. Изначально планировалось выпустить её одним томом, но объём материала оказался столь большим, что количество томов было увеличено до семи. Первые три тома были изданы достаточно быстро: том 1 — в 1968 году, том 2 — в 1969 году, том 3 — в 1973 году. После этого последовал перерыв до февраля 2005 года, в котором автор опубликовал первую часть четвёртого тома.

 

Было принято решение выпускать остальные части четвёртого тома приблизительно по две в год отдельными выпусками, после чего официально издать весь четвёртый том. На протяжении 2005—2009 годов были изданы выпуски 0, 1, 2, 3 и 4, а в 2011 году был выпущен том 4А, в который вошла информация из этих выпусков. Также в 2005 году был выпущен выпуск 1 «MMIX — RISC-компьютер для нового тысячелетия», информация из которого войдёт в новое, четвёртое издание первого тома. В 2015 году был издан выпуск 6 Satisfiability, представляющий собой среднюю треть будущего тома 4B.

 

Поскольку Кнут всегда считал «Искусство программирования» основным проектом своей жизни, в 1993 году он вышел на пенсию с намерением полностью сконцентрироваться на написании недостающих частей и приведении в порядок существующих. Он полагал, что на завершение работы потребуется 20 лет.

 

Основной чертой монографии Кнута, выгодно отличающей её от других книг, посвящённых программированию, является исключительно высоко поднятая планка качества материала и академичности изложения, а также глубина анализа рассматриваемых вопросов. Благодаря этому она стала настоящим бестселлером и настольной книгой каждого профессионального программиста. Журнал American Scientist включил «Искусство программирования» в список 12 лучших физико-математических монографий XX-го столетия вместе с работами Дирака по квантовой механике, Эйнштейна по теории относительности, Рассела и Уайтхеда по основаниям математики и немногочисленными другими.

 

Обложка третьего издания первого тома книги содержит цитату Билла Гейтса: «Если вы считаете себя действительно хорошим программистом…, прочитайте „Искусство программирования“ (Кнута)… Если вы сможете прочесть весь этот труд, то вам определённо следует отправить мне резюме». Впрочем, фольклор также приписывает эти слова Стиву Джобсу

 

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

 

Том 1. Основные алгоритмы.
— Глава 1. Основные понятия.
— Глава 2. Информационные структуры.

 

Том 2. Получисленные алгоритмы.
— Глава 3. Случайные числа.
— Глава 4. Арифметика.

 

Том 3. Сортировка и поиск.
— Глава 5. Сортировка.
— Глава 6. Поиск.

 

Том 4. Комбинаторные алгоритмы.
— Глава 7. Комбинаторный поиск.
— Глава 8. Рекурсия.

 

Том 5. Синтаксические алгоритмы.
— Глава 9. Лексикографический поиск.
— Глава 10. Синтаксический поиск.

 

Том 6. Теория языков.
 

Том 7. Компиляторы.

Том 1. Основные алгоритмы.
Том 2. Получисленные алгоритмы.
Том 3. Сортировка и поиск.
Том 4. Комбинаторные алгоритмы.
Том 5. Синтаксические алгоритмы.
Том 6. Теория языков.
Том 7. Компиляторы.

 

Структура и Интерпретация Компьютерных Программ. [EN + RU] Structure and Interpretation of Computer Programs — SICP


Книга под названием "Структура и Интерпретация Компьютерных Программ" была выпущена в далёком 1979 году. Раньше по ней преподавали вводный курс в программирование среди студентов MIT. Сейчас книга находится в свободном доступе в Интернете, и любой желающий может скачать и изучать её в своё удовольствие. Помимо книги, в сети также есть цикл видео-лекций от авторов, они расположены на ресурсе MIT OpenCourseware, мне кажется они могут неплохо дополнять друг друга по ходу изучения материала.

 

Чем же примечательна эта книга? Среди рецензентов есть такие личности как Peter Norvig и Paul Graham. К слову, сейчас у книги рейтинг 3.8 из 5, отчего некоторые известные личности недоумевают.

 

А если серьёзно, то это фундаментальный классический труд в области программирования (ничем не хуже небезызвестной книги The Art of Programming от Д. Кнута, которую никто не читал). Единственным непонятным моментом для меня является факт преподавания курса программирования для новичков по этой книге.

 

Представляю как можно напугать новоиспечённых студентов её содержимым. Интересно, есть ли в сети статистика по которой можно узнать много ли людей, посещавших этот "адский" курс, предпочли в дальнейшем поменять свой major :) Если бы организаторы Code.org пропагандировали программирование по этой книге, получился бы знатный epic fail.

 

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

 

СИКП — не книга про языки программирования или разработку программного обеспечения, не книга по ООП, функциональному программированию или паттернам проектирования.

 

СИКП — книга об информатике (computer science). Восприятии компьютеров как абстрактных машин, используемых для манипулирования данными. Несмотря на то, что книга впервые опубликована в 1979, она до сих пор не потеряла свою актуальность и не потеряет в будущем. СИКП неизменно находится в топе лучших книг по обучению программированию на протяжении десятков лет.

 

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

Сдержание

 

  • Абстракция с помощью функций

  • Элементы программ

  • Выражения

  • Вычислительные стратегии

  • Подстановочная модель вычислений

  • Функции и процессы порождаемые ими

  • Линейная рекурсия и итерация

  • Древовидная рекурсия

  • Функции высшего порядка

  • Функции как аргументы

  • Функции как обобщения

  • Функции как возвращаемые значения

  • Абстракция с помощью данных

  • Введение в абстракцию данных

  • Барьеры абстракции

  • Что такое данные?

  • Иерархические данные и свойство замыкания

  • Представление последовательностей

  • Иерархические структуры

  • Последовательности как стандартные интерфейсы

  • Символьные данные

  • Цитирование

  • Множественные представления абстрактных данных

  • Тегирование данных

  • Программирование управляемое данными. Аддитивность.

  • Модульность, Объекты и Состояние

  • Присваивание и локальное состояние

  • Преимущества присваивания

  • Недостатки присваивания

  • Модель с окружениями

  • Правила вычисления

  • Применение

  • Фреймы как репозитории локального состояния

  • Моделирование с изменяемыми данными

  • Изменяемый список

  • Представление очереди

  • Представление таблиц

  • Многозадачность

  • Потоки

  • Метаязыковые абстракции

  • Вычисление с помощью регистровых машин

  • Рекомендации

 

Первое, что нужно понимать: СИКП — не просто книга. Это университетский курс, записанный в виде книги. Он сложный и объёмный, его бесполезно проходить без практики. Практику придумывать не придётся. После каждой главы есть блок задач, которые авторы просят выполнить. Некоторые из них сугубо математичесские (просят что-то доказать), либо подразумевают хорошую математическую базу. Их можно и даже нужно пропускать, иначе вы можете очень быстро потерять мотивацию.

 

Сколько читать

СИКП условно можно разделить на две части. В первую часть входят главы 1, 2 и 3. Во вторую — 4 и 5. Разница в том, что во вторую часть входят главы, копающие очень глубоко, и пройти сквозь них может только по-настоящему увлеченный человек. По этой причине Хекслет рекомендует поставить себе планкой прохождение первых трех глав. Остальное можно с легкостью отложить на потом.

 

Язык

Для примеров и практики в книге используется язык Scheme (Ским), созданный авторами курса. Это один из диалектов семейства Lisp. Как и полагается любому Lisp-языку, Scheme имеет примитивный синтаксис, который можно изучить буквально за несколько часов. Он очень необычен для тех, кто имел дело только с широко распространенными языками, но обладает рядом серьезных достоинств, о которых говорится в книге.

 

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

 

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

 

Однако, сам Scheme не развивается и уже не актуален. Его заменил язык Racket, который изначально был реализацией языка Scheme, но вырос во что-то большее. Другими словами, на базовом уровне Scheme и Racket выглядят идентично, что крайне удобно при прохождении СИКП. Хекслет рекомендует проходить СИКП именно на Racket. Специально для этого гайда мы подготовили репозиторий, который можно использовать как основу для кода. Не забудьте правильно настроить редактор. Lisp языки относятся к тем языкам, для которых нужна поддержка со стороны редактора для комфортной работы.

 

Оформление

На Гитхабе можно найти множество репозиториев, в которых лежат решения задач из СИКП на всех возможных языках программирования. Мы настоятельно рекомендуем поступать также: создать репозиторий в своем аккаунте и выкладывать в него все свои решения. Идеально, если каждое решение будет сопровождаться тестами. Такой подход хорош не только тем, что вы дополнительно прокачиваетесь в git и получаете дополнительную мотивацию, но и тем, что у вас появляется код, который можно показать при поиске работы. Более того, велика вероятность, что собеседовать вас будет человек, знающий про СИКП. Это добавит очков в карму и даст возможность продуктивно пообщаться.

 

Теория синтаксического анализа, перевода и компиляции (в 2-х томах) [1978] Ахо, Ульман Дж


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

 

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


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

 

Том 2. Компиляция. Второй том фундаментальной монографии известных американских ученых посвящен методам оптимизации синтаксических анализаторов, теории синтаксически управляемого перевода, а также способам организации памяти при переводе. Большое внимание уделяется методам оптимизации объектной программы.

 

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

 

Книга предназначена тем, кто работает в области системного и теоретического программирования, преподаст или изучает эти дисциплины, а также разработчикам математического обеспечения ЭВМ.

 

Бесплатные ресурсы

 

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

 

Специальные знания нужны для того, чтобы его применять. И это не обязательно математика или устройство компьютера. Если вы хотите заниматься веб-программированием, вам нужно изучить СУБД, и один из популярных фреймворков, Django/Flask. Математика тоже нужна, но в программировании искусственного интеллекта.

 

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

 

Очень важно изучить как работают алгоритмы и паттерны проектирования.

 

Несколько советов:

  • Если не понимаете какую-либо тему, попробуйте изучать её в разных источниках.

  • Курсы покупать не обязательно, можно получить необходимые навыки по книгам, главное подходить к выбору основательно

  • Обязательно практикуйте полученные знания

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

  • Не изучайте программирование ради денег, есть много других не менее востребованных и оплачиваемых профессий, например 3D художник.

 

 Codecademy

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

 

freeCodeCamp

Бесплатная онлайн-школа, которая сначала обучает программированию по стандартной учебной программе (около 800 часов), далее предлагается пройти практику на некоммерческих реальных проектах. Отлично подойдёт для тех, кто хочет обрести практику по программированию, добавив этот опыт в своё резюме.

 

Coursera

Одна из лучших платформ, где бесплатно можно обучиться программированию. Есть как общие/универсальные, так и узкоспециализированные курсы. Сайт представляет большую онлайн-библиотеку, где занятия преподают преподаватели топовых университетов мира. Все курсы бесплатные, но можно дополнительно оплатить сертификат «Coursera Verified» (цена 30-100$) для подтверждения успешного завершения выбранных курсов. В некоторых случаях, оплатив сертификат, вы получаете доступ к контенту, который не был доступен в бесплатном варианте.

 

edX

Этот ресурс по изучению программирования курируется Массачусетским технологическим институтом и Гарвардским университетом. 100+ отличных курсов в категории «Computer science», обучающих разным языкам программирования.

 

Codewars

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

 

GA Dash

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

 

Khan Academy

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

 

MIT OpenCourseware

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

 

The Odin Project

Современные «викинги» могут отправиться в плавание для изучения программирования с помощью этого проекта. Он был создан основателями Viking

 

Code School 

одной из топовых площадок для изучения программирования. The Odin Project — это их бесплатная версия. Есть групповой онлайн-чат.

 

Udacity

Платформа предлагает сотни индивидуальных курсов по программированию, вместе с получением «нанодипломов». Сами материалы курса бесплатные, но за «нанодиплом» придётся заплатить.

 

 

SoloLearn

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

 

The Code Player

Небольшие онлайн-туториалы по HTML5, CSS3, JavaScript и смежным технологиям с интерактивными вставками, которые покажут процесс создания интересных вещей с нуля. Хорошо подойдёт для тех, кто хочет «набить руку», получить опыт и просто посмотреть, что можно сделать с помощью технологий выше.

 

Уроки Ravesli

210+ уроков по С++, 60+ заданий по С++ с градацией сложности, пошаговое создание игры на С++. Также есть другие уроки и образовательные материалы по сфере IT и программирования. 

 

Bento.io

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

 

Udemy

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

 

Code.org

Предлагает учебные материалы, предназначенные как для детей возрастом 4-6 лет, так и для взрослых. Начинайте с их ускоренных учебных пособий «Час кода» или создавайте проекты на лабораторных занятиях.

 

Scotch.io

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

 

Hackr.io

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

 

W3Schools

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

 

Coderbyte

Учитесь программированию непосредственно во время программирования! Платформа обучает основам популярных языков программирования и позволяет развить новые навыки с помощью использования их библиотеки из более чем 200+ заданий и челленджов.

 

Виртуальная академия Microsoft

Бесплатные онлайн-курсы преимущественно по инструментам и технологиям Microsoft. В наличии видеоматериалы, презентации, электронные книги, форум сообщества.

 

Edabit

Edabit — это как Duolingo, только для изучения программирования. Вашему вниманию предлагаются простые и не очень задания, которые нужно решить. Есть градация сложности.

 

ITVDN

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

 

Launch School Open Book Shelf

Это бесплатные книги, которые являются отличным дополнением к учебной программе Launch School по разработке ПО. Помогут освоить необходимый базис большинства популярных языков программирования.

 

YouTube каналы

 

LearnCode.academy

Здесь размещены видеоролики на тему веб-разработки, созданные Уиллом Стерном. Просто тонны бесплатных пособий по JavaScript и других языках программирования, а также видео о самых популярных инструментах, применяемых разработчиками.

 

thenewboston

Здесь вы найдёте свыше 4000 роликов по разным тематикам в программировании, начиная от разработки игр и заканчивая дизайном. Один из самых популярных каналов с больше чем двумя миллионами подписчиков.

 

Derek Banas

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

 

ProgrammingKnowledge

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

 

Гоша Дударь

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

 

Хауди Хо

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

 

Блоги

 

David Walsh

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

 

Softwarehow

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

 

SitePoint

У этого блога есть много писателей, которые часто пишут на сайт. Диапазон тем для публикаций: от HTML&CSS и до предпринимательской деятельности. Также имеются платные книги и курсы.

 

Tuts+

Огромное число бесплатных туториалов по программированию, а также платные курсы. Блог имеет свыше 1130 видеокурсов от «местных экспертов». Публикуются электронные книги.

 

CSS-Tricks

Подробный разбор CSS в их большом и достаточно известном CSS-альманахе. Однако сейчас уже блог вышел за рамки обычного CSS и рассказывает и о других технологиях, таких как Sass, JavaScript, PHP и т.д. 

 

A List Apart

В этом блоге публикуются многие авторы. Они пишут книги, проводят мероприятия и публикуют материалы по разработке и дизайну. 

 

Командная строка

 

Learn Enough Command Line to Be Dangerous

Бесплатный учебник по командной строке для новичков. Основы командной строки в Unix, наличие предварительного технического опыта не требуется.

 

Conquering the Command Line

Бесплатная онлайн-книга Марка Бэйтса, который очень подробно освещает особенности работы с командной строкой.

 

Git и GitHub

 

GitHowTo

Отличный интерактивный самоучитель, который познакомит с основами Git.

 

Git Immersion

Англоязычный аналог экскурсии по основам Git выше.

 

Try Git

Серия интерактивных заданий для изучения и экспериментирования c Git.

 

TML&CSS

 

HTML Academy

Академия по HTML, CSS и JavaScript. Интерактивный тур с заданиями, тестами, викторинами и просто отлично структурированными уроками, и материалом, который в них подаётся. Сложность нарастает с прохождением уровней. Есть также курсы, интенсивы и «обучение профессиям» (но это уже платно).

 

Marksheet.io

Веб-ресурс для начинающих, который разделен на четыре главы: веб, HTML5, CSS3 и Sass. Это своего рода электронная книга.

 

HTML5 Dog

Учебник по HTML для начинающих, есть также «средние» и «продвинутые» учебники по HTML. 

 

Learn to Code HTML & CSS

Очень подробные уроки по созданию красивых и понятных сайтов. Рассматриваются различные нюансы и аспекты веб-разработки + jQuery + препроцессоры.

 

Mozilla Developer Network

Бесплатная документация по HTML, CSS и JavaScript. 

 

JavaScript

 

JavaScript для котов

Это «одностраничная книга», которая разбита на разделы … с кошками. Создана программистом Максом Огденом. Кошки есть в начале и в конце туториала.

 

NodeSchool

Проводят международные, персональные семинары и мероприятия, а также ведут активную деятельность в Интернете. Их онлайн-уроки можно посмотреть здесь.

 

Learn JS

Ещё один ресурс для изучения JavaScript. Есть встроенный редактор кода. Сайт создан теми же людьми, что создали learnpython.org.

 

Красноречивый JavaScript

Очень хорошая подробная онлайн-книга по JavaScript. Среди финансовых спонсоров есть Mozilla и Hack Reactor. 

 

WordPress

 

WordPress.tv

Живые записи лекций WordCamp по всему миру. Создано командой Automattic.

 

WPBeginner

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

 

WP-KAMA

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

 

Python

 

A Byte of Python

Бесплатная онлайн-книга для новичков, желающих научиться программировать на Python. Её можно скачать бесплатно в формате PDF или купить печатное издание.

 

LearnPython.org

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

 

Ruby

 

Rails Tutorial

Книга из 12 глав, написанная Майклом Хартлом. Можно купить книги, скринкасты от автора и многое другое. Или прочитать эту книгу бесплатно онлайн.

 

RubyMonk

Абсолютно бесплатная платформа с интерактивными уроками по Ruby. Есть встроенный редактор кода и разные уровни сложности для изучения материала.

 

Ruby за 20 минут

Отлично подойдёт для новичков, изучающих Ruby. Можно изучить основы языка за 20 минут или даже меньше, что даст вам отличное начало.

 

Data Science

 

Dataquest

Бесплатные курсы по программированию, где вы получите необходимые навыки для того, чтобы стать специалистом по data science, аналитиком или экспертом по данным. Вы сможете создавать проекты в своём браузере и работать над реальными проблемами науки о данных.

 

Springboard

Краткое, но интенсивное введение в анализ данных. Вы узнаете, как использовать и анализировать данные при помощи тщательно спланированной учебной программы, которая состоит из бесплатных онлайн лекций, домашних заданий, проектов и многого другого. (Для этого вам не потребуется наличие знаний в области анализа данных или программирования!).

 

EliteDataScience

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

 

Машинное обучение

 

Machine Learning Mastery

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

 

Google AI

Обучайтесь Machine Learning у экспертов Google. Предлагают туториалы, курсы, видео и упражнения для развития у вас навыков работы с искусственным интеллектом. Отлично подойдёт как для новичков, так и для опытных инженеров машинного обучения.

 

Кибербезопасность

 

Cybrary

Бесплатные видео и обучающие материалы по IT и кибербезопасности. Охвачены такие темы, как криминалистика, криптография и анализ киберугроз.

 

Xakep.ru

Известный русскоязычный журнал о кибербезопасности и новостям в сфере IT и программирования. Есть платная подписка.

 

Разработка мобильных приложений

 

Android Developers

Официальный сайт для разработчиков приложений на Android. Узнайте, как сделать своё первое приложение для Android, пройдя бесплатные туториалы и курсы на их сайте.

 

Google Developers Training

Бесплатные онлайн-курсы по программированию для начинающих и опытных разработчиков Android. Создано экспертами из Google и Udacity.

 

Начинайте разрабатывать приложения для iOS (Swift)

Часть архива документации Apple. Идеальный старт для написания приложений под iOS.

 

Swift Playgrounds

Приложение для iOS, которое позволяет изучать Swift через интерактивные мини-головоломки. Ещё можно посмотреть, как ваш код будет работать в трёхмерном мире.

 

UI/UX дизайн

 

Энциклопедия взаимодействия человека с компьютером

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

 

UXPin

Огромное количество бесплатных электронных книг и руководств по UX. Охватывает мобильную и веб отрасли, модели, макеты, юзабилити-тестирование и многое другое.

 

Разное

#SimpleCode

YouTube-канал о программировании на C++ и C# с вкраплениями разговорных видео о программировании.

 

Code Basics

Платформа с бесплатными интерактивными уроками по основам программирования для новичков: PHP, JavaScript, Python, Java, HTML&CSS.

 

HTML Book

Отличный справочник по HTML.

 

TutorialsPoint

Библиотека бесплатных туториалов по множеству тем, связанных не только с программированием, но и вообще с компьютерами: Big Data, базы данных, веб и мобильная разработка, Computer Science и даже машинное обучение.

 

Создание прототипов сайтов

 

Axure

Наиболее известная программа  с широким функционалом. Устанавливается на ПК. Многими копирайтерами, проектировщиками, менеджерами проектов признается лучшим сервисом для прототипирования. Бесплатно можно пользоваться в течение 30 дней.

 

Moqups

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

 

Adobe Illustrator

Программа предназначена для создания векторных иллюстраций. Но не только. С ее помощью удобно делать прототипы сайтов. Гибкий инструментарий и понятный интерфейс. Результат можно выгрузить в виде PDF-файла или изображения.

 

Google Рисунки

Бесплатный сервис для копирайтеров, в котором можно создавать схемы, инфографику, диаграммы. И прототипы сайтов. Готовый результат можно отдать заказчку по ссылке с настройкой уровня доступа или экспортировать в формате PNG, SVG, JPEG, PDF.

 

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