Yesterday I tweeted about “learning to learn” and mentioned that AI would help us learn better. One of my students asked me to share some useful links. Here are a few starting points. I am going to use Education as a proxy for Learning even though they are not exactly the same.
Discovered an International Journal of Artificial Intelligence in Education. Lost of useful resources and they have conferences.
A search for “Artificial Intelligence in Education” got me a bunch of tweets. Here is a link. This is snapshot as of 16th May. If you are interested in these tweet streams, let me know. Will maintain a separate page for these tweets.
I like it when one of my students (current or past) asks me a question. It makes me research a bit more and helps me learn too. Thanks, Hemamalini. This is the first post to answer a small part of your question. There will be more!
If you are just starting out programming, you may want to learn a language, and start exploring by building small applications.
Don’t worry that you don’t know object-oriented analysis/modeling and design. You can learn them when you need them. This is true of algorithms, data structures, object-orientation, software engineering as well.
You can build simple apps with procedural programming and learn to reuse first using functions. As your apps grow in complexity, you appreciate the need for organizing these functions as classes/methods. (You may not even get there if you start out with a functional programming language).
As you deploy your apps and fix bugs, you will come to appreciate testing. If you need to update your app frequently, you will understand the need for automated testing.
As your apps get used more and more, you will understand the need for improving the app. You will learn the need to simplify the code (helping you fix problems faster), and the need for profiling to identify slow performing subsystems.
Learning to build computer application by step-wise refinement is a path to learning and improving. If you need to rework the code, you will learn to re-factor. Automated tests will improve your confidence in refactoring without breaking existing functionality.
Programming is a creative endeavor. It is enjoyable, because you are solving problems big and small. Puzzling over the parts that do not work, trying out things, learning from others, is all part of the experience.
Programming is a journey of self-discovery. The little bits of happiness during the journey add up.
Just finished reading this book. I was tweeting a few quotes as I was reading the book. Here is the full list.
Before you read the quotes, please remember the context Charlie was mostly answering questions about being an Investor.
Let us first look at these quotes.
There is no way you can live an adequate life without making many mistakes.
The best thing a human being can do is to help another human being know more. Being an effective teacher is a high calling.
Those of us who have been very fortunate have a duty to give back. Whether one gives a lot as one goes along as I do, or a little and then a lot (when one dies) as Warren does, is a matter of personal preference.
Spend each day trying to be a little wiser than you were when you woke up. Day by day, and at the end of the day-if you live long enough-like most people, you will get out of life what you deserve.
What are the secret of success? One word answer: rationality.
There’s only one way to the top: hard work. Do what you like and are good at.
Understanding both the power of compound interest and the difficulty of getting it is the heart and soul of understanding a lot of things.
Quickly eliminate the big universe of what not to do, followup with a fluent, multidisciplinary attach on what remains, then act decisively when, and only when, the right circumstances appear.
If you always tell people why, they’ll understand it better, they’ll consider it more important, and they’ll be more likely to comply.
…it never ceases to amaze me to see how much territory can be grasped if one merely masters and consistently uses all.
My habit of committing far more time to learning and thinking than to doing is no accident.
Some people are extraordinarily good at knowing the limits of their knowledge, because they have to be.
So the game is to keep learning, and I don’t think people are going to keep learning who don’t like the learning process. You need to like the learning process.
If you’re capable of understanding the world, you have a moral obligation to become rational.
For me there were many takeaways. There is a note of warning. Whoever edited this book did not do a good job. There are too many repetitions. Please remember it if you buy and read the book. Despite bad editing, the book is full of gems. So it is worth a read.
A few reflections.
The importance of reading. I do read though not anywhere near being “a book with a couple of legs sticking out.”.
When we were programming in early 70s, we spent far more time learning and thinking than doing. Now it is very different. There is a lot more doing. Charlie’s quote “This habit of committing far more time to learning and thinking than to doing” is right on.
Spend each day trying to be a little wiser than you were when you woke up. This can be a powerful micro-habit and a daily goal to shoot for.
This is the fifth edition of a book I started writing in 1999, when I was teaching at Colby College. I had taught an introductory computer science class using the Java programming language, but I had not found a textbook I was happy with. For one thing, they were all too big! There was no way my students would read 800 pages of dense, technical material, even if I wanted them to. And I didn’t want them to. Most of the material was too specific—details about Java and its libraries that would be obsolete by the end of the semester, and that obscured the material I really wanted to get to.
The other problem I found was that the introduction to object-oriented programming was too abrupt. Many students who were otherwise doing well just hit a wall when we got to objects, whether we did it at the beginning, middle or end.
So I started writing. I wrote a chapter a day for 13 days, and on the 14th day I edited. Then I sent it to be photocopied and bound. When I handed it out on the first day of class, I told the students that they would be expected to read one chapter a week. In other words, they would read it seven times slower than I wrote it.
The philosophy behind it
Here are some of the ideas that make the book the way it is:
Vocabulary is important. Students need to be able to talk about programs and understand what I am saying. I try to introduce the minimum number of terms, to define them carefully when they are first used, and to organize them in glossaries at the end of each chapter. In my class, I include vocabulary questions on quizzes and exams, and require students to use appropriate terms in short-answer responses.
To write a program, students have to understand the algorithm, know the programming language, and they have to be able to debug. I think too many books neglect debugging. This book includes an appendix on debugging and an appendix on program development (which can help avoid debugging). I recommend that students read this material early and come back to it often.
Some concepts take time to sink in. Some of the more difficult ideas in the book, like recursion, appear several times. By coming back to these ideas, I am trying to give students a chance to review and reinforce or, if they missed it the first time, a chance to catch up.
I try to use the minimum amount of Java to get the maximum amount of programming power. The purpose of this book is to teach programming and some introductory ideas from computer science, not Java. I left out some language features, like the switch statement, that are unnecessary, and avoided most of the libraries, especially the ones like the AWT that have been changing quickly or are likely to be replaced.
The minimalism of my approach has some advantages. Each chapter is about ten pages, not including the exercises. In my classes I ask students to read each chapter before we discuss it, and I have found that they will do that and their comprehension is good. Their preparation makes class time available for a discussion of the more abstract material, in-class exercises, and additional topics that aren’t in the book.
But minimalism has some disadvantages. There is not much here that is intrinsically fun. Most of my examples demonstrate the most basic use of a language feature, and many of the exercises involve string manipulation and mathematical ideas. I think some of them are fun, but many of the things that excite students about computer science, like graphics, sound and network applications, are given short shrift.
The problem is that many of the more exciting features involve lots of details and not much concept. Pedagogically, that means a lot of effort for not much payoff. So there is a tradeoff between the material that students enjoy and the material that is most intellectually rich. I leave it to individual teachers to find the balance that is best for their classes. To help, the book includes appendices that cover graphics, keyboard input and file input.
One of my students wanted a suggestion for a Java book. I Googled and found some. When I saw this book, I thought it may be a good one to start with. I like Allen’s books. There are three reasons I like Allen’s books.
The chapters are small and easy to read. For a beginning programmer, they are not very intimidating.
Allen’s Python book had a creative common’s license, and I noticed that a few authors have taken his material and reused parts of it and came up with new books.
The most important reason is this philosophy behind the book (and also why I copied the entire section in this post).
From a few experiments I have conducted so far, I found that the first challenge in teaching computer programming to students is to make it interesting. Once students are interested and feel confident, they can create simple programs with reasonable effort, they tend to explore more. Many programming books, however start out with too much detail. If you can teach the basic concepts in a few sessions and get them to code, you have won half the battle.
How do you bootstrap a culture of Innovation and Entrepreneurship in your college?
Start an Innovation and Entrepreneurship development activity. Find a few mentors from the industry. Involve your nearest TiE/NASSCOM/NEN/CII chapters. Have each mentor adopt a few projects. They can teach students how to generate ideas, build demonstrable prototypes, find initial users and validate ideas. Pick simple ideas that benefit people or industry. Encourage projects with an element of social innovation.
Adopt The Lean Startup method. The concept of a lean startup is to build early prototypes and validate product/service ideas. There is a great free course on Udacity on building The Lean Startup.
Create a set of student startups (have a goal of doing 10-20 startups in every batch). Associate a faculty member and an industry expert with each group. Create a plan for brainstorming ideas, building prototypes to test the feasibility.
Develop student skills on user centric design, communicating with potential customers, validating ideas. They can start in the Second Year of college.
Give course credit to innovation and entrepreneurship activity. Kerala government is doing this, and it is a great idea to adopt it in your institution.
Focus on finding at least 5-10 customers/users for each startup, in the first year of entrepreneurship. Every following year, try to raise that number by a factor of 10.
Allow for failures. Don’t discourage them. Make students blog about their experiments, what worked and what did not. This will be useful for students. Have open sessions to discuss these experiments.
By creating a practical program for student entrepreneurship and getting faculty involved, you will change the culture of your institution. You are sending a message that practice is as important as theory.
the concept of “the umwelt” coined by biologist Jakob von Uexküll in 1909 — the idea that different animals in the same ecosystem pick up on different elements of their environment and thus live in different micro-realities based on the subset of the world they’re able to detect. Eagleman stresses the importance of recognizing our own umwelt — our unawareness of the limits of our awareness:
I can see this in different ecosystems I observe – the entrepreneur ecosystem, the learning ecosystem and the microcosm of our own product teams and businesses.
In the startup ecosystem, different players – startups, investors, mentors and customers have different micro-realities about products, businesses, and markets. While they overlap somewhat, sometimes they are very different.
In the learning ecosystem similar micro-realities exist between institutions, teachers, students and learning experts.
But the best example, I have seen of these different micro-realities is in a product team or a business.