среда, 29 июня 2011 г.

Итоги весеннего семестра 2011

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

C++

Саша С. – повелитель C++
Смешанные чувства. Вроде не так уж и много нового узнал. Но преподавалось все на уровне. Порадовали задания лаб. Реализация подобных заданий, на мой взгляд, позволяет довольно неплохо разобраться в шаблонах. 
Также, как обычно, студенты публиковали записи лекций. Их можно посмотреть тут. А задания практик - тут
Экзамен немного разочаровал. В прошлом семестре было сложнее. А в этом - неприлично легко.




Спецкурс по высоконагруженным сервисам

Смотрим exorg

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

Практика

Про практику мне чего-то совсем не хочется рассказывать... Скажу только, что она была про мою любимую компьютерную графику. Однако, на OpenGL. Совершенно разочарован данным API. Видеть его более не хочу. Никогда.
Летом займусь переписыванием проекта на DirectX.

Алгоритмы 

Наконец-то пришло осознание малой полезности курса в данной форме. Напомню, мы занимаемся только теоретической частью. Практики реализации алгоритмов у нас нет. Вот именно это я и считаю основным упущением. Реализовать алгоритм и прочитать про алгоритм - уж очень разные вещи. Также не понравилось некоторое разгилдьяйство преподавателя.
Еще довольно неоднозначаным получился экзамен. Каждый приходил в строго назначенное ему время. После чего в течение 40 минут решал 2 задачи. А потом 40 минут беседовал с преподавателем на все темы семестра. Многим такая форма экзамена не понравилась. Мне, например, не хватило времени на задачи. Однако я все-таки выкрутился).



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

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

Теория формальных языков
Худший предмет семестра. Посетив первые пару лекций и офигев от преподавателя, читающего слайды слово в слово. Я решил на сие не ходить. И правильно сделал, как выяснилось. А еще, эти слайды товарищ Герасимов не менее слово-в-слово переписывал из учебника. Не, это конечно похвально. Трудолюбивый преподаватель и все такое. Но вот слушать это было решительно невозможно. А еще, он как-то так сделал, что мне поначалу предмет показался очень сложным. Но стоило только начать читать книгу - как оказалось, что это чуть ли не самый простой предмет семестра.
Отдельного упоминания заслуживают контрольные. Очень тупые задания. В основном - на применение пройденных алгоритмов. Глупо и скучно. Да еще и придирался невероятно. Пример задания: дана грамматика, задающая арифметические выражения в постфиксной записи с операциями сложения, умножения и чего-то там еще. Построить LL, ПП/СП, (S)LR(?) - автоматы для этой грамматики. В каждом привести пример, распознаваемой цепочки и ПРОГНАТЬ автомат на бумажке. Блин. Просто дух захватывает.
Что смешно - на контрольной можно было пользоваться всем, чем угодно. Но нельзя было, например, разговаривать с соседом. Мне вот интересно, преподавателя не насторожило то, что на его контрольной студенты вместо написания собственно работы сидят уткнувшись в мониторы ноутов и громко стучат клавишами?))) Короче, кто хотел - тот списал =)


Технологический семинар

Если помните, то 5го апреля я жаловался на скучные семинары. Так вот. Буквально через 3 дня в рассылку прилетело сообщение от преподавателя о том, что надо что-то менять на семинарах. Врядли он читал мой блог, просто проблема скуки стала уж очень очевидна.
В итоге, на семинарах стало больше практической части. Были введены мастер-классы. А главное - стало больше докладов по темам, которые интересны(и хорошо известны) самим докладчикам. Получилось неплохо, я считаю.
Непофигизм преподавателя очень порадовал. Уважаю

Семинар по скриптовым языкам 

Проблема та же, что и с предыдущим семинаром. Скучно. Только тут не нашлось преподавателя, которому не пофигу. Который попытался бы что-то изменить. В результате и студентам стало пофигу. Короче, получился отстой.
Я уж молчу про дурацкие темы. Ну как можно на новый язык программирования отводить одну лекцию? Мы за семестр рассмотрели что-то около 7 языков программирования. И в итоге, я смогу написать что-то осмысленное только на JavaScript и ruby. И то, потому что готовил презентацию по node.js и писал веб-сервер на руби.

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

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

вторник, 14 июня 2011 г.

struct vs class

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

Раньше я всегда для "вумных" объектов писал class, а для всяких мелких "контейнеров" struct.
Потом лень меня победила и я стал использовать struct везде. И вот мои аргументы:

1 Наследование
Вы часто используете приватное наследование? А защищенное?
Нет? А чо так?
Я тут прикинул, что не использовал приватное наследование осмысленно ниразу. Соответственно почему оно является наследованием по-умолчанию для меня загадка. Отсюда первый довод в пользу struct: Используя ключевое слово struct вам не придется лишний раз писать "public" при наследовании.









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











Вы не находите, что здесь что-то лишнее?

Итог
А в итоге часто имеем такой код:

В приведенном листинге 3 раза написано ключевое слово public. И все три раза оно нафиг не нужно при использовании struct.









P.S. Не то чтобы я считал это все очень важной проблемой C++. Просто захотелось что-нибудь запостить в блог =) Не принимайте близко к сердцу