Talk given at TaCoS 25, 15./16.05.2015, Munich. Aimed at computational linguists who have participated in beginners' programming classes or even given one themselves.
Fundacja Rozwoju Społeczeństwa Przedsiębiorczego•144 views
How not to fail at programming education
1. Programming skills are a crucial part of our education as computational linguists, yet so
many programming classes leave students uninformed, confused, and often unable to
solve problems that differ too much from those that were discussed in class. How can we
offer better programming courses that motivate and enable students to grok all basic
concepts, rather than merely learn a number of functions by heart, without understanding
why things work the way they do?
In the first part of this session, I will give an overview of some questions that I think
should be considered when a programming class for computational linguists is being
designed.
In the second part of the session, you are welcome to discuss these questions with me
and share your own opinions and experiences. If you've participated in a programming
class before, either as a student or a teacher/TA, or if you're going to do so soon, your
input is valuable for the discussion!
How not to fail at programming education
2. How not to fail at
programming
education
Esther Seyffarth - TaCOS 25
3. Any feelings about programming courses?
● Raise your hand if you’ve participated in a
programming class.
● Raise your hand if you’ve contributed to a
programming class (as a teacher or TA).
● Raise your hand if you’ve learned a
programming language by yourself.
● Raise your hand if you don’t know how to
code.
4. What went wrong?
● Bad class materials?
● Boring examples for complex concepts?
● Not enough explanations?
● No connection to your other classes?
● Too much homework? Too little homework?
● Obligatory class with no intrinsic pull?
5. How can we design a great programming
class?
● There is no objectively great programming
class!
● Where you have to start depends on where
the students are.
● Which aspects of a programming class
matter most?
● How should each aspect look in your specific
case?
6. Morphological Box
● The morphological box is a way of thinking
about products one aspect at a time.
● You identify core attributes and find a
reasonable number of different values.
● Compare possibilities and decide which
combination of values you prefer.
7. Attribute A: Assumptions about students’
knowledge
● Pretend nobody knows anything about
computers or logic.
● Compare the language in question to
languages students might already know.
● Assume students have worked with the
language, but give opportunities for
struggling students to keep up.
● Publish strict course prerequisites early on.
8. Attribute B: Object Orientation (in Python)
● Pretend there’s no such thing as classes.
● Teach imperative style for a couple of
weeks, then switch to OO.
● Teach imperative for a semester, talk about
OO in last 2 weeks.
● Force students to understand Object
Orientation before they write their first line of
code.
9. Attribute C: IDE
● Use a simple, wooden interpreter/shell/editor
with no syntax highlighting etc.
● Use an IDE like IDLE, with syntax
highlighting, but no remarkable qualities.
● Use an IDE that has integrated Version
Control, code completion, error detection…
● Use IPython Notebook ❤
10. Attribute D: Depth vs. Breadth
● Use a book, focus on showing how to solve
given problems.
● Explain basic concepts and build more and
more complex projects together.
● Give a broad overview of a range of topics,
show students where to look for help.
● Provide an opportunity for students to
develop their own projects.
11. Attribute E: Exams? Homework?
● Give programming assignments throughout
the semester.
● Start each class by asking a couple of
questions about the learnings so far.
● Have a big, intimidating exam in the last
week.
● Plan supervised practice sessions with
small, optional tasks.
12. Morphological Box
A:
Prerequisites
Zero prerequisites Build on existing
knowledge
Help students
help themselves
Strict
prerequisites
B:
Object
Orientation
Pretend objects
don’t exist
Introduce after
first 2 weeks
Introduce in last 2
weeks
Pretend
everything’s an
object
C:
IDE
B/W shell IDLE Most Intelligent
Python IDE
IP[y]:
D:
Depth vs.
Breadth
Narrow focus on
individual
examples
Develop complex
projects together
Broad overview,
show good
resources
Let students
develop ideas
E:
Exams?
Homework?
Homework
programming
assignments
Continuous
repetition of key
concepts
Final exam Supervised
practice sessions
13. Morphological Box: Opinion Time!
A:
Prerequisites
Zero prerequisites Build on existing
knowledge
Help students
help themselves
Strict
prerequisites
B:
Object
Orientation
Pretend objects
don’t exist
Introduce after
first 2 weeks
Introduce in last 2
weeks
Pretend
everything’s an
object
C:
IDE
B/W shell IDLE Most Intelligent
Python IDE
IP[y]:
D:
Depth vs.
Breadth
Narrow focus on
individual
examples
Develop complex
projects together
Broad overview,
show good
resources
Let students
develop ideas
E:
Exams?
Homework?
Homework
programming
assignments
Continuous
repetition of key
concepts
Final exam Supervised
practice sessions
14. Other questions
● Covered: Prerequisites, Object Orientation,
IDE, Depth vs Breadth, Exams
● Other questions:
o Which programming language?
o Cooperation with other courses?
o Materials: Books? Slides? Websites?
o Extracurricular projects, e.g. NaNoGenMo ❤