Информатика

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

Да, лекции в нашем университете – на английском языке.

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

Все советы автономны и их порядок не имеет значения.

octocat

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

Познакомьтесь с UNIX. Установка Убунту и компиляция ядра – это не знакомство с UNIX. Почитайте о том инженерном и научном фундаменте который лежит в основе философии UNIX. Не обязательно становится крутым сисадмином и поднимать десяток серверов, лучше просто привыкните к принципам работы и UNIX way.

Математика – это главное. Не смотря на сугубую потребительскую направленность многих софтверных компаний, фундаментальные науки остаются фундаментом всего.

Задавайте вопросы. Естественно, если не нашели ответ в гугле. Соответственно, не задавайте вопросы, на которые может ответить гугл. Сайт StackOverflow – ваш лучший друг. Задавайте вопросы в интернете, среди друзей, учителей, коллег. Глупый вопрос лучше незнания.

Познакомьтесь с системами контроля версий.  Хотя бы с основными – SVN, Git, Mercurial. Откройте репозитарий на своей машине и используйте его для домашних заданий и собственных проектов.

Инструменты
Знай свой инструмент

Познакомьтесь с современными инструментами разработки. Зачастую в университетах не уделяют внимания средам разработки и другим программам и утилитам, необходимым для полноценной работы. Многие IDE бесплатны, попробуйте Eclipse, NetBeans, Emacs, XCode, привыкните к принципам работы, найдите удобный для вас инструмент.

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

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

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

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

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

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

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

Пиво
У нас на работе всегда есть пиво :-)

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

Не забывайте о принципе Парето. 20 процентов усилий дают 80 процентов результата. Это, естественно, не правило, но вполне очевидная тенденция.

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

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

Первый ребус:

  • Сигма – сумма того, что получится в красных фигурных скобках
  • Шеврон внизу и зеленая двойка – битовый сдвиг два раза (или просто деление на 4)
  • Первая картинка – первый логотип компании, которая в последствии превратилась в IBM, а аббривеатура M. F. T. S. – The IBM Mathematical Formula Translating System – язык программирования Fortran. Четыре запятые в конце превращают это в «for».
  • Пирог (pie, читается так же, как π)  – просто переменная
  • Знак равенства это знак равенства
  • На фотографии в компании пингвина Тукса изображен Эндрю Танненбаум, известный в том числе спором с создателем Линукса Линусом Торвальдсом, который произошел в 1992 году. Две запятые в начале превращают это в 92.
  • 2 читается как «to»
  • printf («goodbye, dad\n»); – смерть Денниса Ритчи, 2011 год. Можно по той же логике превратить это в 11, но это не так важно
  • Принтер – оператор PRINT
  • Девочка брызгает (squirt)  воду. Из букв 1, 2, 5, 6 получится SQRT – квадратный корень. (Другие ассоциации со словом «squirt»? Бывает)
  • Снова π

Что получается?

sum {
   for π = 92 to 2011
     print sqrt π
} / 4

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

Второй ребус:

Читать дальше →

Уважаемые подписчики блогов «Подкастим.ру», «ruAPOD» и «Computer Science Student»!

Уже почти год все эти блоги являются разделами единого сайта freetonik.com. Я приглашаю вас подписаться на RSS-поток всего сайта: здесь публикуется намного больше постов, включая заметки о Вселенной «APOD по-русски» и статьи по информатике и ИТ. Адрес фида – http://feeds.feedburner.com/freetonik

Старые фиды никуда не денутся, пока там есть хотя бы один подписчик.

Спасибо!

Пока на работе выдалась свободная минутка, давайте я вам расскажу как создать простое приложение с помощью Microsoft .NET Silverlight и C#. Имейте ввиду, что я сам только на днях начал знакомиться с .NET, никогда раньше не работал с технологиями Microsoft, лишь использовал замечательную Visual Studio Express 2005 для С/С++.

Microsoft Silverlight — это программная платформа, включающая в себя плагин для браузера, который позволяет запускать приложения, содержащие анимациювекторную графику и аудио-видео ролики, что характерно для RIA (Rich Internet application). (Википедия)

Для сегодняшнего вводного урока нам понадобится среда для разработки. Можно воспользоваться бесплатной Microsoft Visual Web Developer 2010 Express или приобрести Microsoft Visual Studio 2010. Также вам понадобится Silverlight 4 Tools for Visual Studio 2010. Можно также попробовать визуальный редактор Microsoft Expression Blend, который позволяет создавать красивые интерфейсы без написания кода. Сегодня он нам не понадобится, я буду использовать MSVS 2010.

Читать дальше →

Сегодня я хочу рассказать вам о том, как можно сделать процедуру голосования лучше и надежнее. Во-первых, советую посмотреть речь Дэвида Бисмарка на TED или здесь в моей озвучке (перевод Андрея Новика):

Как это работает? Читать дальше →

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

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