5 столпов программирования, с которыми вы точно освоите азы


Оглавление (нажмите, чтобы открыть):

5 способов быстрее научиться программировать

Изучение программирования — не то, чем можно заниматься между делом. Но не нужно тратить всю жизнь, чтобы понять основы. Есть множество способов облегчить себе обучение.

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

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

1. Изучайте примеры кода

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

2. Не просто читайте примеры кода — запускайте их!

Когда вы читаете обучающее руководство или учебник, легко посмотреть на пример и сказать: «Я понял, я понял. Да, в этом есть смысл». Конечно, вы могли понять его, но вы не знаете наверняка действительно ли вы поняли его правильно. Есть лишь один способ выяснить — сделать что-то с кодом.

«Росбанк», Москва, до 60 000 ₽ (до налогов)

Если вы до сих пор не сделали этого, установите среду разработки (IDE), которая поддерживает ваш язык программирования.

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

Теперь скомпилируйте и запустите код. Убедитесь, что он делает именно то, что должен.

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

3. Начните писать свой код как можно раньше

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

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

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

4. Научитесь использовать отладчик

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

Отладчик позволяет быстро ответить на вопросы о том, что делает код.

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

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

5. Ищите больше источников

Если вы что-то не понимаете, в первую очередь посмотрите альтернативные объяснения — интернет полон информации о программировании. Мы все воспринимаем новую информацию по-разному: может быть, вам для понимания нужны картинки, а кому-то другому — подробные инструкции или множество книг с детальными объяснениями.

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

5 языков программирования, которые надо учить первыми

Сегодня каждый, кто стремится попасть в IT, задается вопросом — какой язык программирования изучить? Все ищут универсальный ответ, который предопределит головокружительную карьеру. Да, до изобретения интернета и появления мобильных платформ можно было освоить один язык, написать на нем программу и быть востребованным разработчиком. Сегодня реалии таковы, что даже джуниорам предъявляется огромный список требований, среди которых — знание нескольких языков.

Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Python

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

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

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

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

JavaScript

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

Объем кода практически не изменился, зато снизилась читаемость. После изучения Python вы без проблем разберетесь, как работает структура return, и оцените удобство именно такого способа записи.

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

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

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:

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

Swift

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

Четвертая версия Swift вышла в 2020 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:

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

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

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

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

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

Сегодня каждый, кто стремится попасть в IT, задается вопросом — какой язык программирования изучить? Все ищут универсальный ответ, который предопределит головокружительную карьеру. Да, до изобретения интернета и появления мобильных платформ можно было освоить один язык, написать на нем программу и быть востребованным разработчиком. Сегодня реалии таковы, что даже джуниорам предъявляется огромный список требований, среди которых — знание нескольких языков.


Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Python

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

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

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

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

JavaScript

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

Объем кода практически не изменился, зато снизилась читаемость. После изучения Python вы без проблем разберетесь, как работает структура return, и оцените удобство именно такого способа записи.

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

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

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:

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

Swift

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

Четвертая версия Swift вышла в 2020 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:

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

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

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

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

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

10 способов научиться программировать самостоятельно

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

10. Выясните, почему вы хотите программировать

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

9. Выберите правильный язык

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

Язык, с которого стоит начать, зависит от причины изучения. (К примеру, если вы хотите создать приложение под iOS, вам лучше начать с изучения Swift). Если вы со всей серьёзностью отнеслись к намерению программировать, можно начать с языка C. Хотя выбрав Python, вам будет проще влиться в струю программирования. Приводим инфографику для сравнения нескольких популярных языков программирования.

8. Начните с малого… и будьте терпеливы

Независимо от выбора языка или метода обучения, вам следует начать с самого начала. Когда Дэвид Сински (David Sinsky) научился программировать за восемь недель, он, к примеру, потратил одни выходные на изучение основ Python, а другие — на Django. Взяв учебник, он удалял написанный код и снова проходил обучающий материал с нуля. Начните с основ и будьте терпеливы к себе. Взяв первый проект в программировании, разделите его на несколько этапов. И если один из способов обучения вам не подходит, не опускайте руки — попробуйте другой.

7. Попробуйте приложения для детей

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

6. Воспользуйтесь бесплатными онлайн-тренингами

Бесплатные онлайн тренинги и проекты (Codecademy, Hour of Code и др.) могут помочь вам в написании первой программы. Учебные пособия от Khan Academy, Codecademy, Code.org и других познакомят с основами программирования и всем необходимым для создания игры, сайта или другого проекта. Найдите нужный источник в зависимости от языка программирования, воспользовавшись Bento. Это хорошая отправная точка, однако дальнейшее обучение вам нужно взять на себя.

5. Пройдите онлайн-курс

Онлайн-курсы по программированию предполагают более обширную образовательную подготовку по сравнению с сайтами, предлагающами онлайн-тренинги по одному языку. Такие курсы предназначены для обучения основным навыкам в течение нескольких месяцев на занятиях университетского уровня. Я большой поклонник гарвардского онлайн-курса CS50 (его можно пройти бесплатно). Существуют также другие возможности. Вы даже можете получить образование университетского уровня, выбрав один из 15 онлайн-курсов.

4. Бесплатные книги по программированию

Если вы застряли на какой-то проблеме или вам нужно найти ответ на свой вопрос, не стоит забывать о справочниках. На GitHub можно найти огромную коллекцию из более чем 500 бесплатных книг по программированию. Также доступна коллекция электронных книг, охватывающая 24 языка программирования.

3. Изучайте, играя

Иногда лучшим способом обучения являются игры. В то время, как многие учебники по программированию обучают вас программировать простые либо сложные игры, некоторые обучающие сайты сами являются играми: Code Combat и CodinGame — инструменты, используя которые вы можете весело провести время.

2. Найдите наставника или станьте им

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

1. Разберите чужой код

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

Обучение программированию с нуля – пошаговое руководство для начинающих. Десять шагов от чайника к программисту-профессионалу

Сегодня многих интересует, можно ли научиться программировать с нуля.

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

Шаг первый. Подготовка

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


Они представляют данное ремесло как что-то романтическое, динамичное – прямо какой-то постоянный экшн.

В фильмах этот процесс показывается совсем не таким, какой он есть на самом деле.

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

Яркий пример тому – фильм «Социальная сеть», в котором вообще не показывали, как главные герои занимаются кодами.

Мастер Йода рекомендует:  Используем базу данных MySQL PHP

Рис. 1. Кадры из фильма «Социальная сеть» (2010)

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

Рис. 2. Постер к фильму «Кадры» (2013)

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

Вот вам правда о рассматриваемом ремесле – программирование это:

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

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

Шаг второй. Выбор первого языка

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

Согласно рейтингу журнала IEEE Spectrum наиболее популярными на сегодняшний день являются такие языки, как C, Java и Python. Ниже представлена первая десятка данного рейтинга.

Рис. 3. Рейтинг языков по версии IEEE Spectrum

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

Но интересно, что в хороших учебных заведениях, а также на курсах студенты изучают языки в таком порядке:

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

  1. Веб (разработка сайтов, онлайн систем и все, что с этим связано) – html (хотя его нельзя назвать полноценным языком программирования), PHP, Perl, Python, Ruby, Java, Groovy, а также технология ASP.NET.
  2. Пользовательское ПО (всевозможные программы вроде справочников, браузеров, мессенджеров и тому подобное) – Delphi, C, C++, C#.
  3. Пользовательское ПО для мобильных устройств – Java, Objective-C.
  4. Машинные разработки (работы с микропроцессорами и другими устройствами, проектирование робототехники) – Assembler, модификации С.

Кто-то также может внести в этот список так называемое программирование 1С. Не верьте профанам и ничего не знающим людям! Это совсем не программирование.

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

Выбирайте то, что вам больше всего понравится.

Большинство специалистов также советуют начать свое обучение с Pascal. Такой вариант позволит

Вам написать самые простые программки и иметь общее представление о рассматриваемом ремесле в целом.

Можно сказать, что Паскаль – это некий мост. Человек, который просто хорошо знает математику, может перейти через него в мир программирования.

Как правильно изучать программирование: метод Франклина

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

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

В XXI веке обществу нужны работники информационных технологий (IT): инженеры, дизайнеры и программисты. Кто такой программист? Это профессионал, который всегда открыт новым знаниям и готов принять быстро меняющийся мир. Сегодня это самая перспективная профессия. С такой профессией вы всегда заработаете на хлеб с маслом в любой стране мира.

Языки программирования универсальны, так что работать вы сможете где угодно: или в родной России, или в теплой Калифорнии, куда уезжают самые талантливые ребята. Если вы не попали в топ мирового рейтинга — не беда. Рядовой программист может эмигрировать в Новую Зеландию, Германию, северные штаты вроде Иллинойса или Миннесоты. Выбирайте сами, в какую страну уехать жить и работать. Или остаться на родине. Кому-то больше нравится быть первым парнем на деревне, чем последним в городе (к тому же низкий социальный статус негативно отражается на состоянии иммунной системы). Когда у вас достаточно денег, то можно и здесь прилично жить.

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

Талант программиста можно заметить в человеке, который не написал ни строчки кода. Это человек, который любит головоломки. Он любит обдумывать задачки, словно это сладкое мороженое, от которого невозможно оторваться. Каждая флуктуация нелогичности в окружающем мире — новый вызов для него. Всё нужно упростить, упорядочить и алгоритмизировать. Какими качествами должен обладать математик, описано в первых главах книги «Прелюдия к математике» У.У. Сойера. Многое из этого нужно, чтобы стать программистом.

Самообучение

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

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

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

CS50 на русском 2020 Основы программирования (часть 1)

Неделя 0 курса Гарвардского университета по основам программирования CS50 2020 года на русском языке начинается с рассмотрения графического языка. Это язык Scratch (Скретч). Графический язык, который создан сотрудниками Массачусетского технологического института.

0:04:06 — двоичная система исчисления
0:10:01 — как перевести числа из десятичной в двоичную систему исчисления
0:12:24 — как компьютер запоминает буквы, цвета и изображения
0:16:12 — как в три действия сосчитать всех студентов в классе
0:22:11 — как в три действия найти человека в телефонной книге из 1000 страниц
0:30:50 — что нового в курсе CS50 2020 года
0:47:20 — графический язык Scratch (Скретч)
0:52:29 — играем в игру Oscartime
0:56:31 — создание первой программы в Scratch (Скретч)

Этот курс нацелен на тех, кто в раздумьях над тем с чего начать изучать программирование. Этот курс приобрел популярность во всем мире благодаря кропотливому и упорному труду команды CS50 Гарвардского университета. А это более, чем 100 человек во главе с талантливым оратором и преподавателем, профессором Дэвидом Мэлэном. Почему легко начать изучать программирование с курса CS50? Потому что вся информация преподается простым и понятным языком, а манера преподавания отличается от постсоветских ВУЗов настолько, что курс больше похож на тренинг, нежели на университетскую лекцию.

Почему Неделя 0?

Это старт курса Гарвардского университета по основам программирования CS50 на русском языке 2020 года. Почему неделя 0? — спросите вы меня. Все очень просто. Программисты начинают считать не с 1, как все остальные люди, а с 0. Именно поэтому курс CS50 начинается с недели 0. Если немного отклониться в сторону, то каждый человек начинает свой жизненный путь, свое дело, именно с 0, а не с единицы, так что начать изучать программирование предстоит именно с Недели 0.

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

Как быстро посчитать людей в большой аудитории и почему Scratch (Скретч)?

После этого Вас ждет разминка в виде задачки, в которой требуется найти в телефонном справочнике на 1000 страниц некого Майка Смитта. Но ценность задачи не просто в том, чтобы найти Майка Смитта, ведь все знают как это сделать, а в том, чтобы сделать это максимально быстро и эффективно. Профессор Дэвид Мэлэн расскажет Вам, как, используя простой алгоритм, другими словами, инструкцию, найти очень быстро человека в телефонной книге. Более того, алгоритм настолько универсальный, что позволяет быстро найти человека в телефонном справочнике, что даже справочник в 4 млрд страниц не является проблемой. Этот же алгоритм будет использован для подсчета количества людей в огромной аудитории.

Первым языком программирования, который Вы изучите в ходе курса, будет графический язык Scratch (Скретч). Он позволяет в буквальном смысле слова создать программу просто перетаскивая кусочки головоломки и объединяя их между собой. Это похоже больше на игру, нежели на программирование. Язык Scratch (Скретч) настолько разнообразен, что позволяет создать аналог популярной игры Pokemon GO, просто перетаскивая и объединяя блоки головоломки.

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


Логичным продолжением примеров, рассмотренных в ходе лекции Недели 0, является практическая часть, а точнее пошаговое руководство или уроки Scratch для начинающих. В практических уроках по Scratch сотрудники курса CS50 шаг за шагом расскажут о том, как работает программа от друзей из Массачусетского технологического института. Вы научитесь создавать свои собственные программы. Однако Вы не будете кодить, Вы будете просто перетаскивать соответствующие блоки, объединять их с другими блоками, использовать переменные, логические выражения, циклы и т.д.

Кроме того, существует также ресурс Code.org, который, подобно Scratch (Скретч), позволит в игровой манере постичь азы программирования. Преимуществом вышеуказанного ресурса является обучение не только на английском языке, но и возможность выбора русского языка в качестве основного.

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

Практическая часть курса представляет собой практические занятия, так называемые Problem Sets, пошаговое руководство и «шоты» — коротенькие видеообзоры определенной узконаправленной темы. Практические занятия являются логичным дополнением курса лекций CS50 на русском, а конкретно этот пост относится к практическому занятию к лекции Недели 0, посвященной языку Scratch. Это своего рода уроки Scratch для начинающих.

Словарь практического занятия Scratch

Motion — движение
Look — вид
Sound — звук
Pen — ручка
Data — данные
Event — событие
Control — контроль
Sensing — ощущение
Operators — операторы
Costumes — костюмы
Sounds — звуки
to Move — двигаться
to Play — играть
to Change — менять
to Set — установить
Score — счет
Space — пробел
Key — клавиша
Forever — навсегда
Repeat — повтор
Until — до тех пор
Global — глобальный
Local — локальный
Behave — поведение
Receive — получать
Broadcast — трансляция
Edge — край
Bounce — отскок
Glide — скольжение
Touch — касание

Первые уроки Scratch для начинающих

Переходим по адресу https://scratch.mit.edu/ и мы попадаем на сайт. Для перехода непосредственно в интерфейс программы, мы можем нажать на оранжевого кота «попробовать». Кроме того, справа есть видео по работе со Scratch.

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

В центральной консоли расположены блоки. Блоки распределены по разделам:

* Движение
* Внешность
* Звук
* Перо
* Данные
* События
* Управление
* Сенсоры
* Операторы
* Другие блоки

Кроме того, на центральной консоли есть 3 вкладки: скрипты, костюмы, звуки.

Любая программа Scratch начинается с блока из раздела «События», который называется «когда щелкнут по зеленому флагу». Это строительный блок, который будет встречаться чаще всего в Ваших программах, так как без него не будет работать ни одна программа.

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

Блоки действий находятся в разделах «Движение», «Внешность», «Звук», «Перо».

Блоки условий и циклов

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

Наш первый урок Scratch.

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

Получилось? В качестве бонуса сыграйте в игру от Гарвардского университета.

На Неделе 1 профессор Дэвид Мэлэн проведет аналогию между графическим языком Scratch и низкоуровневым языком программирования C. Фактически все программы, реализованные на языке Scratch на Неделе 0, будут реализованы используя язык программирования C.

0:01:12 — графический язык Scratch и язык программирования C
0:14:10 — описание библиотеки CS50 IDE
0:16:39 — написание первой программы на языке С
0:28:50 — основные функции CS50 IDE
0:35:07 — какую стратегию следует использовать для поиска и устранения ошибок в коде
0:47:58 — как компьютеры округляют числа
0:54:49 — типы данных в языке С
0:55:51 — сколько памяти занимает каждый из типов данных
1:01:48 — какое максимальное число может представить компьютер
1:08:37 — ошибки в играх Lego Star Wars и Civilization
1:10:32 — ошибки в программном обеспечении самолетов Boeing
1:13:54 — как возникают ошибки из-за округления чисел компьютером
1:19:01 — взрыв ракеты Arian 5 и трагедия в Персидском заливе из-за ошибки в программном обеспечении ПВО Патриот
1:30:17 — написание программ на языке программирования С

Язык программирования C и «привет, мир»!

Фраза «Привет, мир!» без преувеличения является легендарной, ведь это первая фраза, с которой сталкивается практически каждый человек, желающий изучать программирование. Она стала настолько популярной, что используется практически в любом языке программирования. Это, по сути, первая программа, в которой рассматривается базовый синтаксис языка. Язык программирования C не является исключением, поэтому его рассмотрение начинается именно с этой фразы.

Поиск ошибки в коде или «детские» шаги?

Программирование неразрывно связано с наличием ошибок, так называемых «багов», которые постоянно приходится «фиксить» или устранять. Даже самая простая программа, состоящая всего из 6 строк кода может привести 10 строкам ошибок. Естественно, это вызывает разочарование у начинающего ай-тишника и может навсегда отбить охоту программировать. Но не все так страшно, потому что в терминале CS50 IDE будет подсказка, которая укажет номер строки и номер символа, вызвавшего ошибку. Идея в том, чтобы пойти в самое начало текста с ошибкой и вникнуть в эти первые строки, после чего исправить нужную строку кода. И в этот момент может произойти действительно чудо, когда все остальные ошибки пропадут. Это может быть связано с тем, что они были вызваны из-за каскадного эффекта. Такая ситуация возникает, когда программа не понимает одну строку, после чего не понимает следующие несколько строк. Но так бывает не всегда.

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

Стоит сказать, что этот подход можно использовать не только в программировании, но и в повседневной жизни, когда у Вас есть объемная задача, не так ли?

Помните! Залог успеха в маленьких «детских» шагах. Не менее важным является постоянство этих шагов. Выполнение сложной задачи маленькими кусочками изо дня в день даст Вам результат придаст уверенности в своих силах.

Постоянство «детских» шагов…

Даже самый мощный суперкомпьютер обладает ограниченными ресурсами

На неделе 1 курса приведено 2 примера, свидетельствующих о том, что в реальном мире компьютеры обладают ограниченными возможностями и не могут представить, например, число 1/3 как 0,333(3) и бесконечное количество троек, они обязательно округляют его.

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

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

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

Словарь:
Caeser — Цезарь
Ciphertext — зашифрованный текст
Plaintext — обычный текст
Encipher — зашифровать
Multiple — множественный
Same — одинаковый
Dog — собака
Correct — правильный
Usage — использование
Character — символ
Letter — буква
Alphabet — алфавит

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

00:00:00 — Обзор Недели 1
00:04:33 — Отладка программ
00:05:05 — buggy0
00:09:12 — buggy1
00:12:49 — buggy2
00:18:11 — buggy3
00:22:19 — debug50
00:29:04 — Отладка при помощи резиновой уточки
00:31:46 — Обзор практических занятий
00:35:18 — Академическая честность
00:39:07 — Щенки
00:39:58 — Криптография
00:41:00 — Ральфи
00:44:21 — Секретный ключ криптографии
00:46:18 — Строки
00:48:06 — string0
00:57:35 — string1
01:01:20 — Символы
01:02:39 — ascii0
01:06:19 — ascii1
01:09:04 — capitalize0
01:12:41 — capitalize2
01:13:47 — Руководство
01:16:31 — strlen
01:17:40 — Больше строк
01:22:49 — Больше о strlen
01:25:09 — Аргументы командной строки
01:26:53 — argv0
01:34:22 — argv1
01:36:35 — argv2
01:42:26 — exit
01:46:36 — Итоги

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

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

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

Стоит сосредоточиться на прочтении описания возникшей ошибки и, полагаясь на имеющиеся знания и опыт, опеределить причину ее возникновения. Кроме того, студентам курса CS50 может прийти в помощь help50, debug50 и как бы смешно и странно это не звучало — резиновая уточка. Интересно, не так ли? Тогда включайте видео на 29-й минуте и Вы увидите как пользоваться таким инструментом.

Залогом качества обучения, спектра полученного опыта и навыков является самостоятельное выполение всех заданий. Это основной принцип курса CS50, о котором говорится практически на каждой неделе. Просто задайтесь вопросом: «Хотите ли Вы научиться программировать?!». Если ответ утвердительный, то в случае, когда у Вам возникают трудности Вы можете обратиться к своему товарищу, сокурснику, знакомому. Но ключевым здесь является то, что Вам нельзя смотреть на готовый код. Вы смело можете демонстрировать свой код и задавать различные вопросы. Вы не в коем случае не должны пользоваться чужим кодом или просить кого-то выполнить задание вместо Вас.

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

Главной темой Недели 2 курса CS50 Гарвардского университета являются массивы. Оказыватся, что любые слова или строки это массивы символов, которые следуют один за другим в памяти компьютера. Это связано с тем, что 1 бит памяти компьютера способен хранить 1 символ строки. Наборы этих символов, хранящихся в памяти компьютера, представляют собой строки, другими словами массивы символов. Более того, компьютер может представлять не только массивы символов, но и массивы строк. Но как же он понимает, где заканчивается одно слово и начинается другое, ведь его память это огромное количество ячеек? Оказывается, что существует специальный символ \0, который ставится вконце каждого слова в памяти компьютера и означает именно окончание слова.

Мастер Йода рекомендует:  Выйти из-под фильтра Google Panda проще всего запустив новый сайт

Если вспомнить Неделю 1, а именно ASCII, то сразу становится понятно, что компьютер, понимающий только нули и единицы представляет в своей памяти буквы алфавита в виде цифр. Соответствие букв цифрам можно узнать из Интернета, посмотрев Неделю 2 курса CS50 на русском языке или, написав программу на языке С. На последнем варианте и будет сосредоточено внимание студентов на Неделе 2.

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

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

00:00:00 — Обзор Недели 2
00:04:32 — Поиск числа 50
00:08:23 — Линейный поиск
00:11:56 — Бинарный поиск
00:15:18 — Память
00:19:13 — Сортировка синих книг
00:23:08 — Сортировка игральных карт
00:25:57 — Сортировка добровольцев с числами
00:28:31 — Сортировка выбором
00:31:58 — Пузырьковая сортировка
00:35:07 — Сортировка вставкой
00:37:30 — Псевдокод Пузырьковой сортировки
00:38:42 — Псевдокод сортировки Выбором
00:39:22 — Псевдокод сортировки Вставкой
00:40:19 — Алгоритмы и время их выполнения
00:45:11 — Обозначение большой О
00:51:10 — Обозначение большой Омега
00:56:33 — Обозначение большой Сэта
00:58:02 — Визуальная сортировка
01:02:00 — Рекурсия
01:03:04 — Сортировка объединением
01:17:23 — sigma0
01:19:15 — sigma1
01:22:58 — Интервью в Google

Сортировка данных и алгоритмы сортировок

В современном мире сортировка данных занимает место в жизни практически каждого человека. Вы сталкиваетесь с этим при игре в карты, при расстановке фигур на шахматной доске или при сортировке букв в алфавитном порядке. В контексте изучения программирования, сортировка является неотъемлемой его частью. Взять хотя бы iPhone или Android в Вашем кармане, телефонная книга которого содержит несколько десятков или сотен имен знакомых и родственников. Даже страшно представить сколько времени пришлось бы потратить, если бы фамилии и имена людей в телефонной книге не были отсортированы. Масштабируя и рассматривая этот вопрос в объеме данных интернета, становится понятно, что эффективный и быстрый поиск информации невозможен без сортировки данных. Именно сортировка данных и различные алгоритмы сортировок станут ключевыми на Неделе 3 курса Гарвардского университета по основам программирования CS50 2020.

На Неделе 4 мы рассмотрим память компьютера, а именно — взаимодействие кода программы и памяти компьютера. И по обычаю начало Недели 4 сопровождается кратким обзором материала алгоритмов сортировки данных с Недели 3.


00:00:00 — Обзор Недели 3
00:03:24 — Строки это вранье
00:04:20 — compare0
00:06:34 — copy0
00:10:05 — noswap
00:15:49 — Память программы
00:17:35 — Стэк (Stack)
00:22:15 — Подробное рассмотрение get_string()
00:31:05 — Пред просмотр мультипликации об указателях
00:31:29 — Удаление тренировочных колес
00:32:05 — compare1
00:32:39 — char *
00:34:45 — strcmp
00:36:42 — copy1
00:37:02 — malloc
00:45:07 — Рассмотрение указателей
00:49:27 — swap
00:55:04 — Память компьютера и профессор Мэлэн
00:56:05 — Арифметика указателей
00:56:18 — Указатели
01:03:06 — Игра указателей с Бинки
01:06:26 — Утечки памяти
01:07:02 — Отладка программы с помощью Valgrind
01:07:30 — memory
01:14:42 — Хип (Heap)
01:16:01 — Типы переполнений
01:17:26 — Переполнение буфера
01:21:20 — Подробное рассмотрение Стэк (Stack)
01:26:53 — Увеличение
01:28:38 — Изображения
01:31:04 — JPEG
01:32:11 — Шестнадцатиричная система исчисления
01:37:10 — BMP
01:40:24 — struct
01:42:19 — structs0
01:45:00 — structs1
01:47:55 — CSV
01:48:43 — Улучшение
Строки STRING и память компьютера

Почему курс СS50 Гарвардского университета по основам программирования приобрел столь широкую огласку и популярность? Мне кажется, что секретной формулой успеха являются детские шаги, о которых мы впервые узнали в самом начале курса на Неделе 0 при рассмотрении языка Scratch. Ведь все большие дела делаются маленькими шагами, не так ли?

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

Оказывается, что программа работает не со значениями или символами, которые ввел пользователь, будь-то слово Hello, Zamyla, David или любое другое слово. Программа работает с адресом символа в памяти компьютера, то есть с адресом первого символа строки, с которым мы выполняем операции в памяти.

Почему мы тогда рассматривали строки string на предыдущих занятиях, если их не существует? Все очень просто. Это сделано преднамеренно, для того, чтобы двигаться от общего к частному и не запутаться в самом начале изучения программирования в вопросах самого низкого уровня. Такое поэтапное движение дает четкое представление того, что же находится «под капотом» и каким образом устроена память компьютера.

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

Что нужно для того, чтобы стать файлом?

На Неделе 4 мы немного отвлечемся от рассмотрения как работает память компьютера и затронем определение файлов на примере изображений с расширением JPEG, которые все Вы видели у себя в компьютере, фотоаппарате или телефоне. Оказывается, что файл это все тот же набор нулей и единиц, однако компьютеру нужно как-то понимать отличие между изображениями и текстовыми документами Microsot Word или презентациями Power Point или другими файлами. Поэтому люди пришли к соглашению, что определенный набор цифр десятичной системы или двоичной системы, или шестнадцатиричной системы исчисления будет означать тот или другой тип файла. Так, например, изображения JPEG содержат цифры FF D8 FF в шестнадцатиричной системе исчисления, которые дают компьютеру понимание того, что это действительно изображение JPEG с большой долей вероятности. Давайте посмотрим, как будут выглядеть комбинации символов, представляющих изображение JPEG в различных системах исчисления:

1. Десятичная — decimal: 255, 216, 255.
2. Двоичная — binary: 1111 1111, 1101 1000, 1111 1111.
3. Шестнадцатиричная — hexadecimal: FF D8 FF.

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

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

На пятой Неделе мы изучим структуры данных, что позволит использовать память компьютера эффективнее. В начале Недели 5 вы увидите краткий обзор предыдущей Недели 4, в которой мы рассматривали память компьютера.

00:00:00 — Обзор Недели 4
00:07:22 — Ограничения в массивах
00:10:45 — Списки
00:13:11 — Узлы
00:15:10 — Связанные списки
00:20:39 — Список людей
00:26:52 — Список операций
00:28:14 — Реализация поиска
00:40:11 — Компромиссы в вязанных списках
00:41:26 — Стеки
00:43:57 — Реализация стека
00:47:30 — Очереди
00:49:43 — Реализация очереди
00:54:40 — Типы абстрактных данных
00:56:06 — Мультфильм о стеке и очереди
00:57:53 — Деревья
01:00:59 — Двоичное поисковое дерево
01:07:56 — Реализация дерева
01:14:26 — Код Хаффмана
01:28:42 — Хэш таблицы
01:30:37 — Ящики
01:33:31 — Линейное пробирование
01:36:21 — Отдельные цепочки
01:39:05 — Префиксное дерево

Словарь терминов и структуры данных

Во-первых, я хочу искренне поздравить Вас, дорогие друзья с тем, что Вы изучили 50% курса Гарвардского университета CS50 на русском 2020. Неделя 5 это середина курса и является последней Неделей, в которой рассматриваются основы того, что происходит в памяти компьютера, ведь во второй половине курса CS50 2020 мы сосредоточимся на таких темах, как протокол передачи данных HTTP, язык Python, SQL, Javascript и т.д.

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

1. Список — list
2. Узел — node
3. Указатель — pointer
4. Очередь — queue
5. Дерево — tree
6. Префиксные деревья — tries

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

Динамическое выделение памяти

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

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

Как реализован стек или очередь queue?

На Неделе 5 курса CS50 на русском рассматривается интересный пример размещения информации в стек. Представьте стопку разносов в столовой или кафе. Идея заключается в том, что когда Вы кладёте разнос на стопку, а потом снова хотите взять разнос, Вы, как правило, берете верхний разнос, а все остальные разносы лежат, как и прежде. Это если бы Вы пришли купить новый iPhone в магазин Apple в первый же день начала продаж, простояли бы в очереди в ожидании открытия магазина и начала продаж, однако, получили бы свой новый iPhone не в порядке очереди, а после тех, кто пришел в магазин последним. С точки зрения логики, если Вы дадите товар сначала людям, которые ближе к выходу, эти люди выйдут из магазина первыми, в результате чего магазин будет постепенно опустошаться. Но вряд ли Вам понравится такой алгоритм продажи новых iPhone.

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

Разницу между stack и queue можно легко понять, посмотрев короткометражный мультик на 56-й минуте Недели 5.

Код Хаффмана или азбука Морзе?

Скорее всего нет человека, который бы не знал что такое азбука Морзе. На Неделе 5 курса CS50 на русском 2020 проводится аналогия между азбукой Морзе и кодом Хаффмана. Так вот, интересным моментом азбуки Морзе является использование длинных или коротких сигналов для обозначения той или иной буквы. Основным является то, что самый короткий сигнал используется для буквы E. Все дело в том, что при создании своей азбуки, господин Морзе увидел, что некоторые буквы фигурируют в словах чаще других. Поэтому для того, чтобы сделать передачу информации максимально быстрой, было решено передавать самыми короткими сигналами те символы, которые используются чаще всего, а более длинными сигналами — буквы, которые реже всего используются.

Такой же принцип использует код Хаффмана, который служит для сжатия файлов. Принцип сжатия, например, файла Microsoft Word заключается в том, что для хранения в памяти букв, которые чаще всего используются, используется более короткий набор нулей и единиц. Более того, зная принцип работы кода Хаффмана, Вы можете закодировать информацию, а затем с легкостью расшифровать. Если Вы хотите узнать в каком случае сжатый файл может стать большего размера, нежели первоначальный — смотрите перевод на русский язык Недели 5 курса CS50 Гарвардского университета.

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

На следующей Неделе мы рассмотрим протокол передачи данных HTTP.

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

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

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

С чего начать

Есть несколько вариантов развития событий, в результате которых человек становится программистом. Первый — родители-программисты, которые всему научили своих детей. Таким детям даже не нужно идти в университет. Второй вариант — модная профессия программиста. После школы нужно было выбрать, куда пойти учиться, и выбрали модное направление IT, вроде бы понравилось. И последний вариант — хобби, которое переросло в работу.

Если с вами ничего из вышеперечисленного не произошло, значит, у вас есть выбор из четырёх вариантов:

  • Самообразование. Этот вариант можно использовать как самостоятельно, так и в паре с другими методами. В интернете полно сайтов, книг и приложений, которые помогают изучать различные языки программирования и технологии. Но это самый тяжёлый путь для начинающих.
  • Университет. Если вы оканчиваете школу и хотите быть программистом, тогда идите в университет. Если не за знаниями, тогда за корочкой. Она может послужить бонусом при устройстве на работу. Хотя и какие-то знания вы тоже получите. Но не забывайте заниматься и самообучением. К выбору вуза стоит подойти очень ответственно. Внимательно изучите программы обучения и выбирайте лучшие технические вузы.
  • Ментор. Будет очень неплохо, если вы найдёте человека, который согласится помочь вам и направит вас в правильную сторону. Он подскажет подходящие книги и ресурсы, проверит ваш код, даст полезные советы. Кстати, мы уже писали о полезном ресурсе, где вы сможете найти ментора. Наставника можно искать среди знакомых программистов, на IT-тусовках и конференциях, на онлайн-форумах и так далее.
  • Специализированные практические курсы. Попробуйте поискать в своём городе курсы, где вас обучат какому-нибудь языку программирования или технологии. Я был приятно удивлён количеством таких курсов в Киеве, в том числе бесплатных и с последующим трудоустройством.

Какой язык, технологию и направление выбрать

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

  • Наличие на рынке вакансий. Конечная цель этого пути — найти работу программистом. А это будет трудно сделать, если на рынке вакансий никто не будет искать разработчиков на вашем языке программирования. Проверьте сайты с вакансиями, посмотрите, кого больше ищут, выпишите десяток языков. И переходите к следующему критерию.
  • Низкий уровень вхождения. Если вам придётся потратить длительное время на изучение языка, это может отбить у вас охоту к программированию вообще. Почитайте о тех языках, которые вы выбрали выше. Просмотрите литературу, которую нужно будет прочитать, чтобы изучить эти языки. И выберите те, о которых пишут, что они лёгкие, или которые вам показались лёгкими. Такими языками могут оказаться PHP, Ruby, Python.
  • Кайф от процесса. Если вам не нравится писать код на выбранном языке, вы не будете получать удовольствия от этого процесса, от работы и от жизни. А оно вам надо? Делайте правильный выбор.

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

В любом случае изучите веб-технологии. Это язык разметки HTML, стили CSS и JavaScript, который позволит сделать вашу страницу динамической. На следующем этапе изучите серверный язык (Python, PHP, Ruby и другие) и подходящие для него веб-фреймворки. Изучите базы данных: практически в каждой вакансии программиста это упоминается.

Как получить начальный опыт

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

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

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

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

Ещё одним неплохим вариантом для получения реального опыта является open source. Таким проектам всегда нужны новые люди, пусть даже и новички. Вы можете поискать в проекте баги или посмотреть в баг-трекере и предложить методы их решения. Найти такие проекты легко на GitHub или других сервисах для хостинга кода. Не стесняйтесь задавать там вопросы.

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


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

Почему стоит выбрать Python

Давайте немного подробнее поговорим о выборе первого языка программирования. Первый язык должен быть простым и популярным на рынке. Таким языком является Python. Я очень советую выбрать именно его в качестве первого языка программирования.

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

Справедливости ради стоит упомянуть и о других языках программирования. Java может стать неплохим выбором для новичка. Этот язык популярнее, чем Python, но и немного сложнее. Зато инструменты для разработки гораздо лучше проработаны. Стоит только сравнить Eclipse и IDLE. После Java вам будет проще перейти к работе с низкоуровневыми языками программирования.

PHP — ещё один очень популярный язык. И, мне кажется, он даже проще, чем Python. Очень легко найти себе ментора или решение какой-нибудь проблемы на форуме. Всё потому, что в мире существует огромное количество PHP-программистов разного уровня. В PHP нет нормального импорта, есть множество вариантов решения одной и той же задачи. А это усложняет обучение. И PHP заточен исключительно под веб.

Языки C и C# очень сложны для новичка. Ruby — хороший выбор в качестве второго языка, но не первого. JavaScript — очень простой язык, но ничему хорошему он вас не научит. А задача первого языка программирования всё-таки научить вас чему-то правильному, задать какую-то логику.

Важен ли английский язык

Важен! Не знаете? Учите. Знаете? Совершенствуйте. Учитесь читать, писать, слушать и говорить на английском. Делайте упор на техническую литературу. Слушайте англоязычные подкасты. Читайте англоязычные учебники по программированию.

Что нужно знать, кроме языка программирования

Конечно же, кроме языка программирования и английского, нужно знать что-то ещё. А вот что — зависит от направления, которое вы выберете. Веб-программист обязан знать HTML, CSS, JavaScript. Десктоп-программист учит API операционной системы и различные фреймворки. Разработчик мобильных приложений учит фреймворки Android, iOS или Windows Phone.

Мастер Йода рекомендует:  Как сделать пользовательские сессии безопасными

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

Последние шаги

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

Как быстро и без лишних вложений освоить азы программирования

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

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

IT-портал GeekBrains предлагает один из лучших курсов бесплатного обучения программированию – онлайн-курс «Основы программирования». Здесь на протяжении 4 уроков даются фундаментальные основы создания кода и реальный опыт разработки. Причем обучение проходит в онлайн-форме, а в конце урока для закрепления материала даются домашние задания, которые потом разбираются на уроке следующем. Для удобства учеников курсы проходят вечером, однако занятия не теряются даже при вынужденном пропуске — каждый урок остается в виде видеозаписи в собственной «классной комнате» ученика. В ходе курса вы ознакомитесь с основными языками и направлениями программирования, поймете принцип написания кода и даже сможете сами писать простые программы. После обучения, помимо знаний, с вами останутся инструкции для дальнейшего развития навыков программирования и все видеозаписи онлайн-занятий.

Для людей с пониженной концентрацией внимания более удобным будет другой бесплатный курс — видеокурс GeekBrains по «Основам программирования». Он представляет собой цикл из 15 видеоуроков по 6 минут каждый. Обучение построено в проектно-игровой форме, что позволяет оптимально сочетать теорию с практикой. Таким образом, за общие 90 минут видеокурса ученики изучают азы алгоритмизации — переменные, типы данных, циклы, ветвления, массивы, функции — и создают свои первые программы: финансовый калькулятор и игру. Видеокурс рассчитан на комфортное прохождение в удобном ученику темпе.

Начать обучение веб-программированию и даже написать свой первый блог вам поможет бесплатный видеокурс на 15 уроков «PHP. Быстрый старт». Перед погружением в PHP будет подробно рассмотрено создание веб-страницы, 80% времени уроков занимает практика. Вы познакомитесь с HTML и CSS, основными тегами веб-страницы. Во время обучения узнаете базовые функции PHP, как здесь работают с переменными и параметрами, циклами и массивами. По итогам курса каждый ученик напишет свой первый скрипт на PHP.

Еще один бесплатный курс — Объектно-ориентированное программирование. Этот довольно сложный для понимания, но необходимый курс является логичным продолжением «Основ программирования» и дает представление об объектно-ориентированном подходе. Во время прохождения курса вы узнаете о классах, объектах, методах, научитесь их создавать и использовать. Познакомитесь с ключевыми принципами ООП – инкапсуляцией, наследованием и полиморфизмом. А поскольку курс практический – на каждом уроке будете работать над созданием собственной игры и уже к концу обучения получите свой первый самостоятельно написанный программный продукт.

Бесплатные уроки по Objective C и приложению TO-DO List научат вас, как по всем правилам создать мобильное приложение. Курс из 16 занятий дает отличную базу для дальнейшего изучения прикладного программирования для гаджетов.

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

Обучающий видеокурс «С#. Мини-программы» позволяет бесплатно изучить технологии Windows Forms Net.Framework на языке C#. За 10 уроков ученики знакомятся с рабочей средой Net.Framework и пишут несколько утилит под Windows.

Видеокурс-инструкция «С#. Работа с API Вконтакте» на 11 занятий позволит начать работать с API «ВКонтакте» и создать свое мобильное приложение для данной соцсети.

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

При разработке приложений для гаджетов будет полезно прослушать бесплатные вебинары: «Kivy. Мобильные приложения на Pythons» и «Мобильные приложения на NativeScript». А для веб-разработчиков — «Навыки и инструменты для эффективной разработки на PHP», «Веб-сервер по-взрослому», «Web разработка на java» и другие.

Такие статьи, как «7 типичных ошибок неопытных программистов» или «Лучшие инструменты по достижению целей», позволят новичкам учиться и на чужом опыте, что значительно ускорит процесс обучения программированию. Непростой вопрос преодоления прокрастинации освещен в статье «Как поддерживать мотивацию для занятий программированием?» С помощью данных советов можно успешно мотивировать себя в обучении.

Обучение программированию с нуля – пошаговое руководство для начинающих. Десять шагов от чайника к программисту-профессионалу

Сегодня многих интересует, можно ли научиться программировать с нуля.

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

Шаг первый. Подготовка

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

Они представляют данное ремесло как что-то романтическое, динамичное – прямо какой-то постоянный экшн.

В фильмах этот процесс показывается совсем не таким, какой он есть на самом деле.

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

Яркий пример тому – фильм «Социальная сеть», в котором вообще не показывали, как главные герои занимаются кодами.

Рис. 1. Кадры из фильма «Социальная сеть» (2010)

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

Рис. 2. Постер к фильму «Кадры» (2013)

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

Вот вам правда о рассматриваемом ремесле – программирование это:

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

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

Шаг второй. Выбор первого языка

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

Согласно рейтингу журнала IEEE Spectrum наиболее популярными на сегодняшний день являются такие языки, как C, Java и Python. Ниже представлена первая десятка данного рейтинга.

Рис. 3. Рейтинг языков по версии IEEE Spectrum


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

Но интересно, что в хороших учебных заведениях, а также на курсах студенты изучают языки в таком порядке:

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

  1. Веб (разработка сайтов, онлайн систем и все, что с этим связано) – html (хотя его нельзя назвать полноценным языком программирования), PHP, Perl, Python, Ruby, Java, Groovy, а также технология ASP.NET.
  2. Пользовательское ПО (всевозможные программы вроде справочников, браузеров, мессенджеров и тому подобное) – Delphi, C, C++, C#.
  3. Пользовательское ПО для мобильных устройств – Java, Objective-C.
  4. Машинные разработки (работы с микропроцессорами и другими устройствами, проектирование робототехники) – Assembler, модификации С.

Кто-то также может внести в этот список так называемое программирование 1С. Не верьте профанам и ничего не знающим людям! Это совсем не программирование.

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

Выбирайте то, что вам больше всего понравится.

Большинство специалистов также советуют начать свое обучение с Pascal. Такой вариант позволит

Вам написать самые простые программки и иметь общее представление о рассматриваемом ремесле в целом.

Можно сказать, что Паскаль – это некий мост. Человек, который просто хорошо знает математику, может перейти через него в мир программирования.

Календарь событий

Посланник Аллаха (да благословит его Аллах и приветствует) обратился к своему сподвижнику: «О, Абу Зарр! Не откладывай дела свои на завтра — у тебя только сегодняшний день и нет у тебя ничего после него. Если у тебя будет завтра, будь таким каким был сегодня. Если у тебя не будет завтра, ты не будешь сожалеть о том, что упустил сегодня».

О, Аллах! Благослови Мухаммада и семейство Мухаммада!

Проповедь имама

Ислам против террора

«Хикмәт» — областная духовная культурно-просветительская газета

5 столпов Ислама

Ислам — это покорность Единому Богу в соответствии с Его законами. Закон, которому следуют мусульмане, включает всё, что было ниспослано Пророку Мухаммаду, да благословит его Аллах и да приветствует, от Всевышнего Аллаха.

Ислам основан на пяти столпах:

1. Шахада — исламское свидетельство.

2. Ежедневное совершение пятикратного намаза.

3. Ежегодное соблюдение поста в месяц Рамадан.

4. Ежегодная выплата закята (для состоятельных людей).

5. Совершение хаджа раз в жизни (для тех, у кого есть такая возможность).

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

Соблюдение столпов Ислама является обязанностью для каждого мукалляфа. Мукалляф — это разумный человек, достигший половой зрелости. Как только человек становится мукалляфом, на него распространяются все предписания Шариата. Таклиф (обязанность соблюдать Ислам) не распространяется на сумасшедших и несовершеннолетних детей. Если человек сознательно не соблюдает столпы Ислама, он совершает грех и наносит себе огромный вред.

Шахада

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

Ашхаду алля иляха илляЛлах. Ва ашхаду анна Мухаммадан ‘абдуху ва расулюх.

Я свидетельствую, что нет никого достойного поклонения, кроме Аллаха. И я свидетельствую, что Мухаммад — Его раб и Посланник.

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

Когда человек только принимает Ислам, он, как правило, еще не знает в подробностях всех положений веры и предписаний Шариата. На этом этапе достаточно общей веры и убежденности в истинности Ислама. Если какой-то вопрос для человека пока не ясен, следует держать в голове: «Я верю в это в той форме, как это передал Пророк, да благословит его Аллах и да приветствует», — и обязательно обратиться за разъяснением к знающим людям.

Намаз

Совершение намаза (араб. салят) является вторым столпом религии Ислам. Его обязан совершать каждый совершеннолетний находящийся в здравом уме мусульманин. Намаз предписан верующим в Коране, а способ его совершения дошел до нас от Пророка Мухаммада, да благословит его Аллах и да приветствует

Мусульмане совершают обязательную молитву (намаз) пять раз за сутки: на рассвете, в полдень, после полудня, вечером и ночью.

Намаз может совершаться практически везде: в мечети и дома, на рабочем месте и в учебном заведении, на улице, то есть в любом чистом месте. Молиться можно индивидуально или в джамаате (коллективно).

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

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

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

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

Соблюдение поста предписано мусульманам в Благородном Коране:

«О те, которые уверовали! Предписан вам пост, так же, как он предписан тем, кто был до вас, — может быть, вы будете богобоязненны!» (сура 2 «Аль-Бакара», аят 183)

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

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

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

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

Закят

Состоятельные мусульмане один раз в год обязаны выплатить в пользу бедных единоверцев 2,5% от своего имущества. Это своеобразный налог, который в Исламе называется «закят», что буквально означает «очищение».

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

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

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

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

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

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

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

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

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

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

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

Добавить комментарий