Tag: teaching

  • An Introduction to Processing

    Find the slides for this below. If you’re interested, there will be a session tonight in Wave at 7pm, but there will be another one later this week as well.

    As ever – feedback welcome!

  • Explaining Pass by Reference and Pass by Value

    MMMM an Iced Cap from Timmys
    Credit: flickr / feistygalkmc

    Yesterday I had to teach the distinction between pass-by-reference and pass-by-value to my first year non-CS students. There are second and third year CS students that don’t grasp this concept. But there you go.

    And so I explained it, to a sea of blank faces. They understood what I was saying (I think) but it made no sense to them. Trying to explain that the same thing can have different names, but sometimes it’s a different thing and sometimes it’s just the same value as the other thing but… yeah. It’s a little mystifying.

    So I hit upon a better way to explain this (the slight temperature from the swine flu vaccine I’d had the previous day and the copious amounts of Tylenol probably helped), using Ice-Caps, which one of my students keeps telling me I should be drinking (I know, instead of tea – horrifying!). Lets call her Student A.

    So Student A can have an ice-cap, which she calls delicious. Then she can pass it to me as a parameter, and I can call it disgusting-like-poutine. Then I can pass it to Student B, and she can call it n’apporte quoi. If we give it back to Student A, she can continue calling it delicious.

    If we’re passing by reference then it’s always the same Ice Cap. Student A might have a full one, drink a bit, give it to me, I might pour some away, then my function exits and Student A has the Ice Cap again (in some sense Student A always has it, but let’s just assume that we as a group are running in a single thread), which has whatever was left when I finished pouring it away.

    If we pass by value then each of us has our own Ice Cap. When Student A gives me the Ice Cap, it’s like she gives me a clone of hers. If she passes me a full one, and I pour all mine out, she still has a full one when I exit. My actions to the Ice Cap do not affect her Ice Cap.

    Make more sense? The problem with teaching programming is that everything seems very abstract. I find adding real world examples (and humor) really helps.

  • Missed Opportunity

    Problems are Opportunities
    Credit: DonnaGrayson

    I’m spending a lot more time teaching other people to code than I am actually coding at the moment.

    Whilst I like teaching, this is not at all in line with how I want to be spending my time.

    I TA a mandatory computer course in the management school, and I have a friend taking another mandatory programming course for Engineers. The course I TA teaches VB, and the Engineering course teaches C.

    These students aren’t stupid, the students learning VB only have to ask you whether you use VB (of course not, does any self-respecting programmer?) and they know they aren’t learning anything that can’t be done using the built in functions in Excel. The students learning C notice that their TA’s (and the prof) keep accidentally giving them Java code. According to O’Reilly, Java has been overtaking C++ as a teaching language for over a decade. Why are these courses so behind?

    I think this is a missed opportunity. Students taking Computer Science have signed up for a degree of torment-by-compiler. These students have not. Instead of a course that they hate why not take the opportunity to create a course that excites them about the potential of programming? Instead of alienating them about the whole concept you motivate them with the reasons and real world examples for why programming is a useful skill to have?

    For instance: mashup creation, simple scripting, what an API is (and how to make calls to it), web apps.

    Yes, it requires more creativity in course creation. Yes, it may require the people teaching these courses and the TAs to learn more skills. Maybe before it didn’t make a big difference to send a bunch of students into different fields with a hatred for programming. In the new reality though, an understanding of programming and why it is useful would potentially give them a big head start.

    What do you think?

  • Java Workshop in Wave

    Java Workshop in Wave

    Tonight, I ran my first workshop in Wave. It was nice to have a space to discuss things, and unlike in a chat client it’s easy to indicate what you’re replying to. What I did was create a slide deck and make it available the day before. Then on the day, I was available to trouble shoot. The slide deck was fairly comprehensive (see it here) so I encouraged people to work through it at their own pace, whilst I clarified and helped with issues that arose.

    Screenshot below shows mutiple threads of conversation happening simultaniously:

    Multiple Conversations
    Multiple Conversations

    It’s also really easy to drag and drop screenshots, so that can help me see where people are at, and what could be going wrong.

    Drag and Drop Screenshots
    Drag and Drop Screenshots

    Wave has nice indentations (kind of like we indent in Java!) that show a diversion:

    Indentation shows the flow of the conversation
    Indentation shows the flow of the conversation

    Finally, trying to schedule when everyone can make the next session can be difficult – but Widgets sure make it easier!

    Widgets help with scheduling
    Widgets help with scheduling

    So, all in all, wish Wave was faster but I think it was a success. Hopefully as people build up more knowledge they’ll discuss amongst themselves more. We will leave this wave going as people work their way through the rest of the slides (and I can help if necessary) and move to a new wave for the next session.

    I’ll keep you posted about when that will be – and will put the slides up here soon!

    Thanks to everyone who participated.

  • Java: Building Blocks

    Tomorrow I’m running an introduction to Java via Wave. Because I’ve had a degree of interest from non-complete beginners in learning Processing, I’ve split the content so that one session will be Java: Building Blocks which will teach the very basics of Java but does not introduce Processing, and the other session will be An Introduction to Processing.

    Java: Building Blocks covers the very very basics of Java – writing your first program, primitive types, conditions, and loops. At the end, we should be able to make a simple Hangman game using a framework I will provide.

    An Introduction to Processing will cover getting started with Processing and be suitable for beginners who have gone through Java: Building Blocks but hopefully won’t be too dull for more advanced programmers. It will take you through creating your first little Java applet in Processing.

    I’m taking suggestions for Topics, but things I’m contemplating are:

    • Java: Next Steps – covering arrays, multidimensional arrays, Objects, more on functions (passing arguments etc). Finishing with a TicTacToe or Pacman game (I have frameworks for both of these).
    • Test Driven Development and Exceptions – throwing and handling exceptions, writing code to pass test cases. Working on a Blackjack game.
    • Creating games in Processing – detecting key presses etc.
    • New Since Java 5 – Generics, enum, for each, etc.

    Slides for Java: Building Blocks can be found below. As ever, I really welcome feedback!

  • Great Teachers

    I’ve been thinking about this a lot lately, given certain circumstances I find myself in. And I’ve realized that in all my time at university (I’m entering my 6th year) I’ve had two great professors. The kind that inspire you, the student, with passion. Who explain clearly. The ones who teach the classes that you work hardest for, where you leave feeling it was worth it because you learned the most.

    Two. Out of  – lets take a pretty conservative estimate – thirty.

    There were a few more who were good – they didn’t inspire the same level of passion, perhaps, but I at least got the impression that they cared about what they were teaching. A significant number just couldn’t seem to be bothered at all. They weren’t “present” in their presentations. They made something potentially interesting sleep inducing.

    If this is typical in Computer Science, no wonder enrollment is dropping.

    So what do these great instructors have in common? I feel these can be summed up into a concept of “Teaching Effectively, not Efficiently”. Efficient Teaching is putting all the concepts out there and trying to cram them into your students. Effective Teaching is sending your students away understanding the big picture and interested in learning the details that make it up.

    • Passion. They believe in what they’re teaching and convey that to the class.
    • Practicality. Being able to talk about the practical applications of something keeps students engaged.
    • Understanding > Learning. Memorizing something is pointless if the student can’t apply it.
    • Class Engagement. Class is interactive and doesn’t consist of a prof droning on whilst students fall asleep.
    • Engaging Assignments. These profs set homework students want to do, not what’s in the textbook.

    Anything I’ve missed?

  • Video Presentations

    The class I TA for has to create presentations in Powerpoint using transitions and music. A million miles from Presentation Zen, hey? There are some good examples of stand-alone presentations using transitions and music though – caveat is, stand-alone is an important point. If you tried to present with so much movement behind you, your audience would be pretty distracted.

    Social Media Revolution – think social media is a fad? This video might change your mind.

    Shift Happens – interesting video on globalization and the information age.

    danah boyd: remixeddanah boyd works on social media, the video is a “remix” of a talk she gave.

  • The Social Networking Assignment

    My supervisor teaches classes in the business school, and is looking for an assignment on Social Networking to use, perhaps as early as next semester. Of course given that I spend much of my time thinking about, reading about and writing about social networking and most of the rest of it actually socially networking myself, I think I would create a good one.

    So here it is – my social networking assignment. How would you score?

    1. Write about which social networks do you use and why. What are your goals in using them, and what do you get from them? Are they personal or professional? How do you manage your privacy? This post is a guide.
    2. Create a professional profile on Brazen Careerist, if you don’t already have one.
    3. The founder of Brazen Careerist (Penelope Trunk) describes it as being about ideas, and writes a lot about how blogging is good for your career. Why can blogging be good for your career? What are the potential downsides, and what do you need to be careful of?
    4. Do you read any blogs? Blogs are a great way to stay on top of your field and the things you’re interested in. Find some interesting bloggers to follow and use something like Google Reader (or similar) to keep track of the RSS feeds. Bonus: What’s RSS?
    5. Some people describe Twitter as pointless, but many people have made people Twitter part of their lives and find it useful and/or entertaining. What are common criticisms leveled at Twitter, and why do people find it useful?
    6. Find 10 people who inspire or interest you that you would follow if you were on Twitter. What about them inspires or interests you?
    7. What’s ambient awareness?