пятница, 27 мая 2016 г.

ACTIVELEARNING: Личные итоги конференции "Преподавание ИТ в РФ"

В этом году довелось выступать на конференции "Преподавание ИТ в РФ-2016". Учебные дела, в которых я принимаю участия оказались в тренде и мы с Алексеем Незнановым представили наш программный продукт для поддержки процесса взаимного оценивания.

Общее впечателение от конференции у меня осталось неплохое. Сейчас, спустя неделю я даже готова вывести основую мысль для себя. Не знаю причин, но мотивация учащихся падает. Это замечаю я, это отмечают коллеги. Сегодня я сформулировала для себя следующее. Если вопрос поставлен: "Как мотивировать студентов учиться?". То, вообще говоря, он разворачивается из такой интеллигентной формы в другой вопрос: "Как заставить учиться тех, кто учиться не хочет?". По-моему - никак. Наверное, лучше пытаться отвечать на конструктивный вопрос: "Как пробудить в студентах мотивацию к учёбе?". Мне кажется, что и ответы на этот вопрос уже существуют, если не обобщённом знании, то как минимум в индивидуальном опыте.

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

Презентация доклада:


четверг, 14 апреля 2016 г.

EDUPRACTICE: Треугольные числа и введение в программирование

Внимание, этот пост методически не доработан, но содержит работоспособный код и условие задачи. Осенью на "Введении в программирование" мы со студентами решали следующую задачку:
Сформировать структуру данных - массив массивов, первый массив из одного элемента, каждый следующий больше предыдущего на один элемент. При этом всего элементов в массиве N. Выглядит, если заполнен числами от 1 до N примерно так:
1
2 3
4 5 6
...
.. (N-1) N

Основная проблема, естественно, возникла с вычислением количества строк в массиве массивов. Я выбрала формулу N-го треугольного числа для оценки количества строк.
#include "iostream"
using namespace std;
// getting the number of maximum triangle number
// with value less then N
// function return 0 for N < 0
int getMaxTriangleNumber(int N) {
 if (N <= 0) return 0;
 int tNumberValue = 1;
 int tNumberCounter = 1;
 while (tNumberValue < N)
  tNumberValue = ++tNumberCounter*(tNumberCounter + 1) / 2;
 return tNumberCounter;
}
//
int** CreateJaggedArray(int n) {
 // calculate number of arrays
 int arrRowNumb = getMaxTriangleNumber(n);
 int** arr = new int*[arrRowNumb];
 int rowItemNumCounter = 0; // number items in a row
 for (int i = 0; i < arrRowNumb; i++){
  // the last not full row
  if (n < i) {
   arr[i] = new int[n];
   rowItemNumCounter = n;
  }
  // regular full row
  else
  {
   arr[i] = new int[i + 1];
   rowItemNumCounter = i + 1;
  }
  // filling the row 
  for (int j = 0; j < rowItemNumCounter; j++){
   arr[i][j] = n--;   
  }
  cout << endl;
 }
 // free memory
 //for (int i = 0; i < arrRowNumb; i++)
 // delete[] arr[i];
 //delete[]arr;
 return arr;
}
// Free memory proc
void FreeMemOfJaggedArr(int** jarr) {
 for (int** curr = 0; curr != &jarr[sizeof(jarr)]; curr++)
  delete[] curr;
 delete[]jarr;
}
// N - total number of elements in jagged array
void ShowJaggedArray(int** arr) {
 
}
int main() {
 cout << "Enter number of items: ";
 int n;
 cin >> n;
 if (n <= 0)
  cout << "Can't create an array";
 else
  ShowJaggedArray(n);
 system("pause");
 return 0;
}

FORMATIVE: Обобщённые методы и перечисления C#

Вопрос студента сегодня пришёлся очень ко двору и в тему семинара (обобщения). Разбирались не долго, но мне вперёд наука: обращать внимание на дьявола в деталях.

У студента в курсовой работе 20 перечислений (Enum). Ему очень хотелось получать целочисленное значение, связанное с константой перечисления. Казалось бы какие сложности, явное приведение типа к int и всё. Но нет, проблема была не в этом. Имя константы получалось из строки, поэтому сначала надо было выбрать нужную константу, а затем уже получить её целочисленный код.

Естественно, проблема элементарно гуглится, и находится уйма ответов.

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

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

class Program {
        // получение константы перечисления по её названию
        public static T EnumParse(string str) {
            return (T)Enum.Parse(typeof(T), str, true);
        }
        static void Main(string[] args) {            
            ConsoleColor myColor;
            foreach (string s in str) {
                try { 
                    myColor = EnumParse(s);
                    Console.ForegroundColor = myColor;
                    Console.WriteLine(s);
                }
                catch (ArgumentException ex) {
                    continue; // переходим к следующему элементу
                }
                
            }
           // получение номера константы перечисления   
           // int x = (int)myColor;
           //  Console.Write(x);
        }
    }
}


вторник, 29 марта 2016 г.

EDUPRACTICE: Мой первый вебинар

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

Наверное, именно поэтому от первого проведённого вебинара у меня чувства остались смешанные. Попадание в сеть с видео-записью, где ты говоришь про C++ - это совсем не то, чего бы мне хотелось. Тем более, что моя часть выступления была спланирована как вводная к части по алгоритмизации, но технические проблемы привели к том, что только моё выступление и было.

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

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

Пока для себя зафиксировала следующее:

  1. Слайдов должно быть много; 
  2. Картинок должно быть много;
  3. Вывешивать слайд надолго и болтать в параллель пагубно;
  4. Ссылки, если не кликабельны в демо-режиме, нужно дублировать в чат.


Запись вебинара

суббота, 31 октября 2015 г.

LINKS: подборка ссылок по XML комментариям в коде C#


Практически в любом первом-втором занятие по программированию (языку программирования) говорят о комментировании. По случаю, собрала ссылки для студентов по XML-комментариям в C#-коде. Немного, но вполне представительно.

Сначала общее, об оформлении кода в принципе:
C# Coding Conventions (C# Programming Guide) (https://msdn.microsoft.com/en-us/library/ff926074.aspx)

Русскоязычные источники  [RU]
Статья с хабра: XML документация в C# (http://habrahabr.ru/post/41514/) и ссылки из комментариев к этой статьи (для особенно ленивых):

Англоязычные источники [EN]
XML Documentation Comments (C# Programming Guide) (https://msdn.microsoft.com/en-us/library/b2s063f7.aspx)

Soft
Sandcastle - Documentation Compiler for Managed Class Libraries (http://sandcastle.codeplex.com/)

пятница, 23 октября 2015 г.

EDUPRACTICE: Учебный эффект Хакатона

Страсти-мордасти по поводу участия студентов в Хакатоне всероссийского конкурса "Открытые данные РФ" [http://opendatacontest.ru/region/] улеглись, и я решила записать свои мысли.

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

Наблюдала я за двумя командами: ребятами 4 курса бакалавриата и сборной 1-2 курса бакалавриата Программной инженерии, ФКН. Естественно, уровень обученности и зрелости как специалистов разный, но тем интереснее.

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

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

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

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

Я старалась не вмешиваться.