A Few Things We Learned from Doing a Workshop at #PyDelhiConf

Here are a few lessons I learned, doing a workshop at #PyDelhiConf
  1. Chatbots are interesting to people (we had good attendance)
  2. Jump into the code after showing a couple of overview diagrams (I talked too much)
  3. Send the code and tools to the participants a few days earlier
  4. Make it interactive (one of the organizers came by and told me during our session)
  5. Just because you are going to a Python conference, don’t assume that everyone knows Python. Lots of students and beginners were in attendance.
  6. Do code walkthroughs – very clear and very concise
  7. Don’t underestimate the time needed to do a good workshop. Use time wisely.
  8. Take the help of the community during the workshop, a couple of kindred spirits helped others.
  9. Always go with a few copies of all the software needed in pen drives.
  10. Ask yourself one question and let it guide the flow – what nanoskill will a participant get from their investment of time in your workshop

Trying to Teach my Companion Bot

This is an imaginary conversation between me and my companion bot. I teach my cb and by teaching, I am learning too.
me: Hi cb, how do you find Twitter influencers?
cb: Dorai you need to tell me what is Twitter first and then about influencers. 
me: fair enough. Twitter is a micro-blogging service.
cb: I know about blogging. What is micro-blogging?
me: micro-blogs are blogs limited to 140 characters.
cb: I get that. Anything else I should know about Twitter?
me: It is very popular with over 300 million users using it.
cb: wow! that is almost the population of USA. 
me: Yeah.
cb: tell me more
me: People pointificate on Twitter.
cb: That is not very useful. Why do they do that?
me: Forget that.
cb: Ok. Erased “pointificate” from my memory. What else do people do on twitter?
me: They post news and links
cb: what else?
me: They retweet – meaning that they repost other tweets they like.
cb: Retweet is Repost?
me: Yeah.
cb: Is that all?
me: They sometimes post videos and images.
cb: Is this like sharing photos and videos?
me: Somewhat.
cb: Ok. I am getting a dim picture of Twitter now.
me: Give me a break. Dim picture?
cb: Hey, I am just a bot. I don’t have all the contextual knowledge you humans have.
me: Sorry. I forgot that.
cb: Since you seem to be tired of explaining Twitter, tell me about influencers. 
me: An influencer tweets and has a lot of followers.
cb: Followers?
me: I forgot. You can follow Tweeters.
cb: Dorai, you are a lousy teacher. Who are Tweeters? 
me: Thanks for the compliment, cb. Tweeters are people who tweet.
cb: That is better. Now tell me about followers. 
me: Followers are people who subscribe to Tweeters and receive their tweets.
cb: This is all very confusing. But I am getting excited to learn this stuff.  Now tell me about influencers. 
me:  you know what? I need to prepare a lot better to teach you. I am going to take a break now and come back later. Remember all this stuff.
cb: You humans. Always taking breaks. Sigh! Ok. Ping me when you are ready to resume. Of course, I will remember all the stuff. I have infinite memory. 
me: bye cb.
cb: bye Dorai
Meta: What does it take to teach a bot? How can they understand semantics? How can we give them bits of world knowledge? I cheated a bit and took lots of shortcuts. This dialog shows some of the problems in imparting knowledge to bots. We will try another version of this with an AI engine and see how it pans out.

A Good Teacher …

A good teacher worries about a lot of things, IMO. Here are a few, I can think of:

  1. Do I understand the subject really well to teach? Do I have both the conceptual and the detailed understanding of the topic?
  2. How can I keep the students engaged, curious and continuously learning during my session?
  3. How can I make my students understand enough to ask a lot of questions? What do I do if I don’t know the answer to some of them?
  4. What pace should I cover the subject?
  5. How do I handle a mix of knowledge levels of students?

Once you start teaching, you will figure out the answers to most of these questions. You will also learn how to be a good guide.  Be comfortable with who you are. Prepare, prepare, prepare and prepare some more. If you don’t know something, say so and find the answer and get back to the students.

The toughest part of teaching is to keep the students fully engaged and curious and maybe even a bit entertained.  The greatest joy of teaching is that you will always learn something new and the ‘aha’ moments you create for the students will make you forget everything else.

Meta:

I wrote this for a young friend who is just starting to teach to professionals.

Drinking from the CES2017 Fire Hose

I am going to try this for the first time. It is supposed to be live blogging, but it really is not. I am not at CES (I wish, I were). I am running a tweet collector to gather #ces2017 tweets (thanks to my buddy #Faizal), pick a few, add some choice comments and blog them here.tweetstream

 

What does that mean? I first got a friend to install #Wordpress #liveblogging plugin kept the authoring window open so that I can blather on.

Now to the announcements (tweets and my pearls of wisdom draped all over them):

Python Workshop for Students – An Experience Worth Sharing

Yesterday I conducted a Python hands on workshop for (mostly) students. Before I started the workshop, I asked them to introduce themselves and share why they were attending the workshop.

Here are some answers that warmed my heart.

I want to learn something that is not covered in our courses and do something that we don’t do as part of our college education.

Ever since I started programming, I got hooked on to solving problems. I am here because I want to become a full stack developer and solve problems.

I have been mostly doing embedded programming for robotic challenges. I was inspired by a couple of members in my team who were Python experts. I tried Python, and liked it.

I try to learn new things whenever I can. During holidays and breaks I keep trying out new things.

I am into competitive coding and like to participate in challenges. That is why I am here.

There were some amazing things about the participants:

  • They came on a Saturday to learn and sat till about 6 pm working on problems
  • Some of them built websites when they were in school and won competitions. They kept learning new things.
  • Some of them were in robotics competitions and were interested in embedded programming, Arduino, Raspberry Pi. Python is the next step in their evolution.
  • A faculty member came to the class (not to attend it but to encourage the students) and stayed throughout the day. He was interacting with students, instructors and even the organizers.
I taught them very little – mostly showed code snippets and made them work through problems throughout the day. We ended with a 2 hour coding challenge. We plan to offer internships to two of them (there were about 16 students).

Can You Give Me a Bigger Problem?

I was conducting a Python workshop at KCG College a few years ago.  I was teaching them basics  – variables, strings, control statements, etc. for about half an hour. Then, I gave them a few minutes to try out some examples and started walking around to see how they were doing.

I saw Swathi (one of the students) sitting with a bored look. I walked up to her and asked, how she was doing.

“Sir, I finished all the problems you gave me. Can you give me a Bigger Problem?”.

I was pleasantly surprised. I said, “Do you know Newton-Raphson Method” for finding the square root of a number? She did not know. I explained briefly with an example, the principle of how the method worked. A few minutes later, she called me and showed me her program. I tested it a bit, and it worked great. In those few minutes, she got the formula from Wikipedia, coded in Python and tested it.

She used is one of the most powerful methods of learning – “Learning by Doing”.

Swathi was an unusual student. She is doing her masters now. I normally find one or two such students in each batch, and it is always a pleasure to discover them. I am always looking to work with such students.

If You Know How to Program…

In the past week, I have come across a slightly different view of programming, from two different sources.

The premise of this book, and the other books in the Think X series, is that if you know how to program, you can use that skill to learn other topics.

from “Think Bayes” by Allen B. Downey.

I see programming as a way of learning Mathematics

from Coding the Matrix: Linear Algebra through Computer Science Applications, a free Coursera course.

This is something worth thinking about. This gives programming a slightly different twist – as a tool for learning. It is also a good tool for thinking.

 

Social Media Nuggets – Likes vs Shares

On Facebook, you have Likes and Shares. On Twitter, the equivalents are Favorites (Favs) and Retweets.

Likes and Favs are good.  They are very simple attention indicators. They make you feel that people are paying enough attention and are kind enough to take a few seconds to “Like” what you posted or tweeted. It is some kind of validation that your content may be consumed.

Shares and Retweets are better than Likes/Favs. You get a lot less of them, though. When some on shares/retweets, they are signalling you, that “this content is good for my readers/followers”.

Shares with comments are even better. Replies or retweets with edits are great too. They all show that you are engaging your readers.

The best Tweets/Posts are the ones that generate discussions. Even if the comments are negative, you learn something new. You get to know your community better through these discussions. You come to know what they like and what they don’t. You learn different view points

I spend a couple of hours in social media and moderate 5-7 groups on Facebook. It is an investment in time in understanding your communities. I enjoy being there and the interactions.

Nano Hackathons and Build to Learn

A small group to build stuff together, learn together and learn by doing. This will replace techtalks for our weekly meets.

  1. A nanoapp is something we can build n a day. The core in a couple of hours. The goal is to learn by doing.
  2. We may find open source stuff that to build upon. It will be easy to get started. Every nanoapp we build will be open sourced with a liberal license (like BSD/MIT/Apache)
  3. We can start with a few programming languages  – Python, Lua, Clojure. We can have others too. We need a couple of champions for each language.
  4. We can build web apps, mobile apps and desktop apps to start with.
  5. If there is enough interest and a community forms around it, we can grow them in to mini apps or even commercial products.
  6. We will keep the group small – 10 to 20 regulars
  7. We would love to have students. As long as they are willing to work and learn.

If the experiment is successful, we can create nano hackathon events in schools, colleges.

Someone Once Made a Remark That There Were Two Kinds of Programming Languages

From Prolog in Python – An Introduction

“Someone once made the remark that there were only two kinds of programming languages, Lisp and all the others. At that time the primary languages like Fortran were much more machine centric than those of today. That is, the way you programmed was, although more efficient, not too different than how you would program in machine language. Lisp with dynamic data, automatic garbage collection, and the ability for a lisp program to easily create and run more lisp code was very much an exception.

However over time, modern languages, like Python, came to support the kind of features found in Lisp. Today, the above remark might be changed to “Prolog and all the others”.”

I found a link to 50 Free Python Books and started looking at some of them. One of the most interesting was Python for Fun. I was amazed at what I found. I do like the author’s idea of fun! It was not meant for beginners (as I thought) but towards intermediate programmers.

Purpose of this Collection

This collection is a presentation of several small Python programs. They are aimed at intermediate programmers; people who have studied Python and are fairly comfortable with basic recursion and object oriented techniques. Each program is very short, never more than a couple of pages and accompanied with a write-up.

Looks at these projects.  I am certainly going to make some of these part of our tech talks and training programs.

python_for_fun