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

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

 

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

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

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

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

Теперь поговорим о языке, на котором стоит читать книги о программировании. Идеальным языком для чтения является английский. Но, если человек не владеет языком, естественно, он выбирает книгу на русском языке. Осуществляя данный выбор стоит быть предельно осторожным. Так, существуют попытки изобретения собственной терминологии переводчика из-за неопознанности в области программирования. Поэтому, лучше воспользоваться словарем и выбрать все же книгу на английском языке. Еще одна проблема может возникнуть в том случае, если вы хотите заняться изучением нового языка программирование, который стремительно развивается. Будьте осторожны! Так, к примеру, язык Scala. Книги об этом языке, которые были написаны несколько лет назад, считаются уже устарелыми.

Для того, чтобы овладеть языком на высоком уровне, вам прийдеться читать не только книги, касающиеся непосредственного особенностей данного языка, но и книги, в которых речь идет о связанных с ним технологиях. Так, изучая Python, вам захочется освоить Django. Если вам интересен язык Scala, нужно будет пролистать книги по Akka, Play Framework и Scalatra.

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

Если вы стремитесь быть опытным специалистом в чтении того, языка, который вы изучаете, тогда вам стоит решать задачи с его помощью. Практически во всех книга вы встретите небольшое количество задач в конце каждой главы, над которыми можно поработать. На мой взгляд, все эти задачки не естественны. Как по мне, то я предпочитаю заниматься чем-то более естественным. Для решения задачи, вместо написания 5 строк кода, я лучше использую в ней dict’ы. Ниже, я предлагаю вашему вниманию список реальных задач, которые я сгруппировал в соответствии с их тематикой.

 

1. ВЕБ

Воспользуйтесь любым веб-фреймворком языка, который вы изучаете, и создайте сайт с надписью на главной странице «Привет, мир!». Если вы изучаете, к примеру, Haskell, то фреймворком сможет послужить Yesod, Happstack, Scotty или Snap.

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

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

Не ограничивайте пользователей в загрузке аватарок.

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

Представте ваше предложение в Амазоне или в каком-либо другом хостинге.

 

2. БАЗЫ ДАННЫХ

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

Сделайте так, чтобы созданное вами приложение смогло при использовании одного и того же кода, смогло работать одновременно с несколькими РСУБД.

Воспользуйтесь одной из баз данных NoSQL (MongoDB, CouchDB или Riak) для создания телефонной книги.

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

 

3. СЕТИ И ПРОТОКОЛЫ

Приняв во внимание HTTP API социальной сети Twitter, вы сможете написать программу, отображающую 10 последних твитов, содержащих определенный хэштэг.

Агрегатор блогов – тоже неплохой вариант для рассмотрения. При помощи RSS- и Atom-лент программа генерирует файл index.html, в котором содержаться ссылки на 50 последних постов, которые были опубликованы в блогах из списка. Сделайте так, чтобы программа запускалась автоматически каждые 10 минут, сделайте систему обновлений для файла index.html систематической.

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

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

Воплотите в реальность программу-уведомление о получении нового письма по протоколу POP3. Наполните программу IMAP и удостоверьтесь в том, что SSL поддерживается. Используйте уже созданные библиотеки для POP3 и IMAP.

Или же просто напишите ICQ-, IRC- или Jabber-бота, которая даст возможность работать в соответствии с выбранным протоколом.

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

Если вашему языку знакомо программирование биндинги к libpcap, создайте HTTP-сниффер, если нет – простой аналог libpcap на raw-сокетах.

 

4. МНОГОПОТОЧНОСТЬ

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

Решить задачу, используя процессы ОС вместо потоков.

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

 

5. ГРАФИКА

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

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

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

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

 

6. НЕМНОГО АЛГОРИТМОВ

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

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

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

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

Используя полином четвертой степени, аппроксимируйте функцию синус на отрезке [0; pi/2]. Возьмите во внимание генетический алгоритм для правильного подбора коэффициентов. Попробуйте эту задачу на другом отрезке и в другой функции.

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

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

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

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

Придумайте самый легкий язык программирования и интерпретируйте его.

 

7. КРИПТОГРАФИЯ

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

Создайте программу, которая сможет считать MD5, SHA1, SHA256 от заданной строки.

Напишите программу, которая сможет зашифровывать файлы при помощи AES или другого симметрического шрифта.

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

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

 

8. ДЕСКТОП

Создайте самое обычное приложения, в интерфейсе которого будет поле для ввода имени и кнопка-подтверждение (при нажатии появиться надпись «Привет, имя»). Усовершенствуйте данную программу. Создайте иконку в трее, которая сможет самостоятельно в нем сворачиваться. Попробуйте вывести popup-сообщение.

Создайте программу с возможностями построения скрипшотов экрана и их сохранения в bmp-файл.

Займитесь созданием mp3-, ogg- и wav-файлов.

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

Создайте приложение, которое сможет снимать вебкамерой видео и делать фото.

Попробуйте отсканировать документ или отправить его на печать.

Подумайте над созданием программы, которая сможет записывать звук с микрофона в формате wav.

Создайте генератор Excel-отчетов, который будет содержать в себе графики и гистограммы. Обратите внимание на то, чтобы он нормально отображался в Microsoft Office, Libre Office и Google Docs.

 

9. ПРОЧЕЕ

Выберите одно из заданий, которые были приведены выше. Будьте уверенны в том, что данная программа будет работать как минимум в 2 операционных системах (к примеру, под Windows и под Linux или под Linux и MacOS ).

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

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

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

Если у вас есть возможность писать под Android, iOS или Windows Phone, напишите простое мобильное приложение.

Я думая, что я более, чем удовлетворил все ваши желания. Я думаю, здесь вы сможете найти ответы на все ваши вопросы. Если вы ярая саморазвивающая личность – читайте книги о программирование как можно чаще. Читая книгу о том или ином языке, вам на ходу буду придумываться самые разнообразные задачки. Принимайте активное участие в конкурсах, посвященных программированию. Пишите программы для решения самых рутинных задачек. Интересные блок задача вы также сможете найти в блогах и в их архивах. Посещайте проекты open source. Создайте собственный блог, на котором вы сможете размещать все ваши успехи. Комментарии опытных программистов также очень часто наталкивают на интересные решения.

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

Удачи! Жду от вас новых предложений.

 

Автор статьи: Павел Ильин (Компьютерные курсы «Столица»).

Comments are closed.