Showing posts with label computer science. Show all posts
Showing posts with label computer science. Show all posts

What I learned from the engineers on the Blockly open source project

It's Computer Science Education Week and I am really glad to see how much it has grown over the years. I expect this year, more people will become aware of the benefits of computer science and how learning to program provides you with powerful tools to create and innovate than in any year prior. If you haven't tried the Hour of Code I highly encourage you to check it out. The ability to program transformed what I was able to do in my classroom and has opened up many opportunities in all areas of my life.

In my last post, I shared my brother's story about how a Computer Science MOOC opened up a new world of exciting projects and ideas for him so now I'd like to reflect on one of the projects I've been working on for the last few months. I already know a bit of computer science, I've learned how from books and tutorials over the years. Nevertheless, no matter how much I learned, it never seemed like I was getting any closer to developing the kind of software professional engineers create. I had access to all of the same resources the professional have but I just could not figure out how to cross this chasm and write more complex programs.



I became much more painfully aware of this issue at Google where I am surrounded by experts in computer science. I realized there was something that was missing, and our team's technical manager told me I needed code reviews, the feedback and guidance one receives when someone more experienced looks at your code. He suggested I join an open source project.

It just so happens that I sit next to +Neil Fraser (blog/tutorials) and +Ellen Spertus (Mills College Faculty Page) who work on +Blockly (Google Code page, demos) and before that App Inventor. Over the next few months, through their kind, helpful, and specific feedback; I was able to build on what they had developed. It is one thing to read about a topic but actually using version control, following style guides, and following the DRY principle taught me lessons that books and tutorials alone never could.

Their willingness to help me improve as a programmer motivated me to learn quickly so I didn't squander their time and mentoring on simple syntax/logical errors (always run the linter!). After improving the readability of my code, I was able to implement additional features and it was so satisfying every time they replied with an LGTM. Not one of my code reviews was accepted the first or second time which tells you:  I still have a lot to learn, Neil and Ellen maintain a high standard of code quality, and that they were both very patient. Code reviews are an incredible way to grow as a developer and as long as you follow Ellen's advice to, "check your ego at the door", you will learn a lot.

I've pointed out the benefits of feedback and refinement for students over the years but I was unprepared for how much and how quickly my programming skills would improve. I am all the more convinced that anyone who is interested in learning how to do something really well cannot learn in isolation. A mentoring/feedback loop is essential to continue growing.

Software developers are always learning new technologies, languages, APIs, quirks, idoms, and styles all the time. Even after all that, things never work like they should, and debugging takes just as much, if not much much more of your time as writing the original code. To be a software engineer is to be very cognizant of how one learns best, where to find answers to abstract questions, and troubleshooting mysterious issues. I am humbled to have worked with both of them, and in general I am inspired by how willing engineers at Google are at helping one another (provided you have done everything you can to figure it out for yourself).

Based on my experience, I would highly recommend joining an Open Source project:
  1. You will learn more than you ever could just from reading books or taking classes. It's a great way to put into practice what you are learning.
  2. There is a great deal of satisfaction in supporting a community/project that has a laudable goal.

I've been told that not all open source projects are created equal so if you are looking to join one, here are a couple of tips:
  1. Find one you care about. You may end up spending a lot of time on the project so pick one you find worth supporting with your time and effort. There are no shortage of projects out there so whether you pick one because of it's purpose, the programming language it's written in, or whatever else, make sure you have some good reason so you are willing to stick with it.
  2. Are you going to learn from it? Look at the code repository, can you tell what the code does, is it readable? Do they follow a style guide? I was working with two experts in computer science at Google so your results may vary. If you are not going to get valuable feedback then you will not learn as much as you could.
  3. Test the waters. Submit a small patch and see what their feedback is. While personality types differ and some can be more snarky than others, a code review should not be a disheartening experience, feel free to join a more appreciative project if you feel like you're being treated poorly.
  4. Supporting a project does not have to involve writing code, Blockly and other projects are always looking for translators, documentation, etc and you can commit as much time as you have to offer.
I love that no matter how much I learn, there is more to discover and improve one's skills/knowledge. I hope you will take this perspective into the new year and model it for your students.

My Brother's Experience with the edX Computer Science MOOC

Everyone has a unique story to share with regards to learning. It's a lifelong journey that rarely looks like we would expect it to. With my brother's permission, I wanted to share with you a little about my brother Mike's educational experience and how a MOOC made a huge impact on his life.

The following represents the views of my brother with occasional commentary added by me. None of this necessarily expresses the views of my employer or colleagues.


Formal Schooling

Background: My brother and I are very similar but couldn't be more different. He grew up struggling all through school while I chose to "play the game" as my mom called it. I chose to study science and math, where he focused on music and art. While many struggle to find work in the arts, he is lucky enough to tour the world playing music.


Phil: Can you share about your learning experience when you were in school?

Mike: It's hard for me to pinpoint exactly what the cause of my resentment for the educational system stemmed from when I was younger. There were many outside influences that acted upon me and surely had their own respective consequences. As our father is a cinematographer (blog), I had seen the world from the traveling circus mentality and was under the impression that I could lead a full and successful life without any formal schooling.

I recall when I was in second grade, we moved to Vancouver, British Columbia and subsequently went to school there for that period. The system they had in place at that school had the second graders in the same classroom as the third graders. This put me ahead of the learning curve when I eventually returned home to our school in America. I became immensely bored and unchallenged with the material presented to me, and as Jurassic Park had just come out in the theaters, I became obsessed with the works of Michael Crichton and began to read his entire catalogue. I won't pretend that I understood everything he wrote, because much of his stories deal with complex ideas and science, however in this way I began my journey of self-reliant learning.

As the years went on, I continued on with the mentality that school was a tedious exercise of frivolous trivia and acted accordingly. That isn't to say that I was still unchallenged by the material presented to me, on the contrary actually. I fell far behind and by the grace of kind and understanding teachers was coddled and gently prodded to pass classes. I grew frustrated with the books assigned in English classes and would prefer to read my own diverse selections, often in class, to the chagrin of my teachers. I remember being scolded for this, and I would reply, "this is an English class, wouldn't you prefer I read, rather than listen to your opinions?".


Phil: What did you think about math and science back then?

Mike: Math was always a challenge for me and it seemed trivial and obtuse. I needed some sort of tangible way to relate to the material which, by either my frustration or the style of teaching presented to me, I could not find. I adopted the mentality, learned no doubt from a punk rock song, that if I never tried, I couldn't fail. Clearly this logic was flawed, because I consistently failed my math classes. Science, on the other hand, fascinated me, and I worked hard to navigate my way through the lectures and textbooks. I was, however, constantly undercut by the formulas and would end up squeaking by.


The MOOC Experience

Background: Almost a year ago, my brother and I were talking at Thanksgiving and he mentioned he was thinking about learning how to program. A few months later, he calls me up and asks me for some help with a programming challenge. After hearing a little of the code he was wrangling with I said, "Wait this sounds like C?" After hearing his reasoning for preferring C to other languages he had tried, I could tell that my brother was getting serious about learning how to program.

A few months later he told me he signed up for the edX 6.00x Introduction to Computer Science MOOC. He and I had some wonderful conversations over the following months. I would receive a phone call almost every week, then every day. These conversations could last for a few minutes or a couple of hours. My advice would always end with, take a break, take a walk, and write some pseudocode. After a while I would get an email every couple of weeks if at all, and when he did call, the conversations had shifted from tutoring to discussion and feedback. From my perspective, he was quickly picking up the terminology and the skills.


Phil: Why did you decide to sign up for the edX Intro to CS course?

Mike: I have always had a strong desire to understand what makes things work. I often would take apart my toys and gadgets to understand their cogs and mechanics. Computers have always interested me and the fact that I couldn't justifiably open one up or see its underpinnings bothered me, especially because of their intrinsic nature in our society. On a whim, I began teaching myself the basics of C and then upon your recommendation, Processing, but was still longing to learn more.

As a touring musician, I have, should I choose not to spend it in the thrall of a drunken stupor or the following hangover, an inordinate amount of free time and I made a conscious effort to utilize it to the fullest. The drummer in my band, who has also dabbled with programming since studying CS in college, had told me about the edX course MIT was offering on the Python language and I decided to sign up for it, even though it had already started a week prior. I felt that with the support of a friend in the class as well, I could possibly pull it off, even with the distractions of tour-life.


Phil: Why a class on computer science / Python?

Mike: As I stated before, the subject matter was very interesting to me, but beyond that, I felt that with enough time and dedication I could begin to earn an income from coding and possibly even supplement my income while I was on the road. After much time and consideration, I see how lofty an ambition this was, especially without a formal education in the subject, but I have always had perseverant spirit, and work towards this goal with daily strides and small victories. The more I learned about Python, the more I liked what it stands for. Aside from being a huge Monty Python fan, I really admire the Pythonic ideals and its desire to be readable. I am constantly amazed at how powerful this language can be.


Phil: What worked for you in this class / what did you do to succeed?

Mike: I feel that the weekly deadlines and set course schedule helped promote the stability and drive I needed to succeed. I was constantly pushing myself to get assignments in on time or in the few cases where I would finish early, reward myself with some hang-time with the band. The forums were a reliable source for help and a sounding board for ideas, examples, venting, site issues, and most importantly, interaction with peers and TAs. In my darkest hours, when no solutions seemed available, I leaned heavily on you, Phil. I am very grateful for your kind insistence and guidance, never giving me the answers directly but helping me to find them on my own. I think having someone to discuss coding with or problem solving in general, without fear of judgement, has been immensely beneficial to my learning experience.

Note: I emphasized the previous point, because I know how this type of pedagogy has helped students who often struggle with school.  The best part is, they end up understanding it better than those who absorb it via other means.


Phil: In general how do you learn something new (e.g. new software, new instrument, etc)?

Mike: By exposing myself to this constant stream of information over the past few years, I've come to learn a great deal about how I absorb content. Typically for me, I learn best the old fashioned way - empirically. When learning a new instrument, I would practice constantly, consuming books on scales, patterns and theory until eventually it would all click. Now, 'eventually' is a nice way of saying a really long time, because I'm still in the process of growing, and it is my belief that when you stop striving to get better, you stop being an artist. I have directly applied that philosophy to coding.

It starts with reading, and although my whole life I've been an avid fiction reader, I am now consistently in the middle of several technical books at any given time (right now the subjects are: Python, open-source, Django, problem solving, Java, and Vim). I am also concurrently taking a few casually paced MOOCs which keep me pretty busy all the time. I have been blessed to have all the downtime that being a musician has afforded me and am so grateful to my fiancé for giving me the support and pep talks, without which, I could never have come this far. As I traverse new paths, I know I must be carefully aware of where I've been and to consistently apply what I've already learned. I like to analogize it with the old expression - If you don't use it, you lose it.

Note: My entire family have benefited from this method of learning new things, and I've captured some ideas about this in How to Learn Anything - Lessons in Neuroscience from Dad.


Phil: What did you like about the course and the environment?

Mike: Once I started with the lectures, I was immediately drawn to Professor Grimson's assured and kind demeanor. His style of teaching and the simple ways he had of breaking down complex ideas such as recursion were very comforting, considering the stress the weekly class assignments had on me. Having now taken courses on other MOOC platforms, I have a greater appreciation for the layout and format of edX. First off, I've always been attracted to clean design, and the website and information presented never felt cluttered. Everything was always easily accessible. The Python interpreter they used for quizzes and assignments has a simple interface and gives back informative tracebacks and error messages, which were very helpful in debugging my flawed code.

6.00x definitely felt very organized in a way that I haven't experienced with any other MOOC yet.


Phil: What didn't work for you? What could have been improved about the course?

Mike: The few bugs that would pop up occasionally, would quickly be addressed in the forum and corrected. There was one time that the grader for a assignment became so overloaded that it crashed the system. They kindly gave us another day to turn in our assignments, "and there was much rejoicing". In hindsight, and though I understand their reasons for doing so, I wish they would have taught us to program in Terminal instead of using a GUI like Enthought EPD. I feel like this would have made my skills more translatable to the real world. It is a very user friendly interpreter however, and gives the user instant gratification and comforts galore, especially when it came to plotting graphs with pylab.

Now I have begun weening myself off of Enthought and am doing my best to become one with the way of the Terminal and Vim (I am writing this on it right now).


Phil: Why didn't you give up?

Mike: It would have been very easy to, actually. My friend who had joined the class with me ended up dropping it, due to the restrictions it imposed on his lifestyle. Everyday it was a constant effort to continue and keep prodding through. In order to make the time necessary to complete the course, I imposed a strict regimen on my daily life. I would wake at 6AM every morning (much to the annoyance of everyone who had to hear me snoozing or not hearing my alarm for an hour) and then make a pot of coffee, all while the tourbus was still rolling to the next city.

Then I would listen to lectures and work on the quizzes till my brain was sufficiently fried, and by that time we would hopefully have arrived at our destination where I would proceed to take a much needed head-clearing walk through town. After soundcheck I would sneak in some more time at the computer till it was time to play the show, and after the show (and after several drinks had been consumed) I would work in my bunk till the wee hours of the morning only to repeat again the next day. This was my life. I felt like I was isolating myself from my friends and they would constantly remark with amazement at my will to continue on in this way.

When I was home, there were many times when I would say goodnight to my fiancé, only for her to wake up for work the next morning and see me in the exact same place. There was one time, I recall, where I didn't sleep for three days from being completely consumed by an assignment. She couldn't believe it and she coerced me into taking a much needed break, whereupon I returned and found a solution shortly thereafter. I quickly learned the value of stepping away from a problem. In many respects, I think that having everyone constantly seeing me endure this lifestyle gave me a certain gratification. I think they were a bit perplexed at why I would put myself through this and ultimately, to answer you question in my very long-winded fashion - the reason I continued on was the amazing satisfaction and pride I would feel when a program would run without error or when I would solve a problem, after countless efforts, only to find the simplest answer coming from changing the way I looked at the problem.


Phil: Do you feel like you understand the topics taught well enough to teach them to someone else?

Mike: Yes and no; I feel there are many things that I have learned repeatedly enough, that are intrinsic and fundamental to all coding languages, which I could easily teach to others and find useful anecdotes for. There are many concepts, however, that I struggled with and continue to struggle with daily. While I can explain recursion in theory, finding practical applications where I use it properly is another story. Other concepts that I find myself struggling with still, and perhaps through lack off consistent application are: search algorithms, pylab graphing and statistical analysis. I really did enjoy learning about Random walks and Monte Carlo Simulations, though.


Phil: In addition to Python skills, what other skills did you gain?

Mike: For me, there is nothing comparable to the "shout from mountaintop" feeling I get from programming. Of course, there are countless hours of frustration and study, but I believe that only makes the rewards that much more cathartic. Music has always been a great joy and outlet for me, but as a constantly self-critiquing artist, it's hard to find the same true moments of reward. Now with that being said, most times after the brief moments of cathartic splendor, there is still much more testing/debugging/implementation to be done but it's nice to know that there are always those lights at the end of the tunnel. Thats what makes coding so exciting for me.

I think of all the tools I've learned in the class, the most valuable to me are the self-reliance and realization that math does not have to be an obtuse and highfalutin rite of passage as I once considered it to be. Instead I see math as a tangible and often exciting way to solve problems and extend the possibilities of our world. I did learn a great deal of debugging tools, such as: black box, glass box, using edge cases and running tests, though I've extended that learning considerably with Peter Norvig's use of assert statements in his Design of Computer Programs course on Udacity.

I've absorbed many algorithms, discovered the world of Object Oriented Programming, used memoization and hashing to optimize designs, and learned big O notation just to name a few. It was a lot to take in all at once, to be honest, but I feel that the pressure and constant application made me retain a great deal more than I would have expected.


Phil: What advice would you give someone else thinking about taking a course like this and those who are frustrated?

Mike: I would tell them to make sure they set aside enough time to really do justice to the material. Honestly, there were many times when I felt like giving up and just going back to bed with my fiancé or going out to party with my band. I won't pretend to be any sort of genius because I finished this course, it was a combination of sheer will-power and the understanding and support from my family and friends who propped me up when I was literally exhausted and through. I began to realize that taking breaks wasn't giving in, but allowing the mind to wander and explore more possibilities than a screen filled with code and error messages can provide (emphasis by Phil).

I believe that anyone who sticks with it, through the pain and mind-numbing frustration the intensity this course can provide, will succeed. Use the forums, they are your allies, reach out to friends who are willing to lend an ear or put up with some occasional venting, and definitely get the book the class follows. They lead you to believe that you don't need it, and they do provide an online version (I didn't buy it until halfway through the class), but for me it was so much better to have the book to follow along with in my Kindle.


Phil: Did your experience as a musician play a role in your ability to learn in this course?

Mike: I have always thought about music in numbers, and for someone who was as bad at math as I considered myself to be, that system works very well for me. I realized during a class on Orchestration that I was adept and quick at making transpositions because of this system, and it still proves very useful to me when reading full scores or changing keys on the fly. When I was younger and teaching myself different instruments, I would work at it day and night and was obsessed with everything I could hear. I think that same passion to learn has helped me with this class and programming in general.

I would definitely say I'm obsessed, and though I'm not yet the hacker I long to be, it has helped redefine the way I see the world. I think in code, I look for solutions to problems and enjoy the process of learning and challenging myself. It's hard to say whether being on tour while taking this class helped or hurt me, but however difficult, stressful, and painful it could be, upon reflection it was one of the most rewarding things I have ever done and I wouldn't change it. I'd like to think it has made me a better man.


Phil's final thoughts: The transformation I saw in my brother was amazing. It's difficult to convey how big an impact this has had on his life. I had not seen him apply himself this much except with music and now he can't stop studying CS. It's worth mentioning that throughout his educational career, many teachers expressed their concerns about Mike's study habits and grades and yet about a decade after high school he is studying complex technical subjects. With all of the criticisms about MOOCs, we should not discard experiences that make a huge impact on people like my brother.

I just want to thank my brother for sharing his experience with me and allowing me to publish it here. I could not be more proud of his work and what he accomplished and learned!

Job Posting: Google Teaching Fellow

Here's what you need to know, Google's looking for an awesome educator.

A couple of years ago, +Dan Meyer  posted that the Curriculum Fellow job at Google he had previously worked on was hiring again. I saw that post, and immediately posted my resume to the Google Jobs website. I had no idea how much that action would change my life.

I was very happy as an educator. I worked at an awesome school that used Project Based Learning and had a great robotics team. But there were two things that compelled me to apply. First off I told my students and friends that the only two things that would make me leave my classroom were if the Mythbusters or Google wanted me to work for them. The second was how much I wanted to see others use Computer Science and Computational Thinking in their classroom.

I blogged often about Computational Thinking but I still wanted to reach a wider audience, plus it is difficult to create high quality lessons when you have a class everyday. Since working at Google I've been able to accomplish both of those things (in my humble opinion). The Exploring Computational Thinking reaches many educators each month who are starting to implement the lessons but more importantly the philosophy and tools into their classes. I've also had the privilege of working on many other awesome projects impacting education.

I'm happy to pay it forward and let you know about another awesome opportunity for educators, take a look at the job posting and see if it would work for you. You will have amazing managers, an exciting mission, and you will have freedom to create and innovate. Sounds awesome? You have no idea....

#CompThinkChat on Twitter - Join the discussion

Computational Thinking is showing up in discussions and talks everywhere I look. The Next Generation Science Standards reference them and the skills are implied in the Common Core.

A few days ago, I saw this tweet from @Kevin_Krenz:


and knew that this would be a perfect way to bring the community together to discuss and share experiences with Computational Thinking. Kevin put this planning document together and #CompThinkChat was born.

The first chat is Wednesday Aug 8th at 7pm CST (5pm PST/8pm EST) and continuing every other week. This may not be the best time for everyone who wants to be involved so add your suggested times to the planning doc and let's see what works out in the long run.

If this is your first Twitter chat, here's the steps to get started:

  1. Sign up for Twitter.
  2. Sign in during the scheduled chat time.
  3. If you are using the Twitter homepage search for #CompThinkChat in the upper right corner. This filters out all tweets except those relevant to the chat.
  4. Chat! Share your thoughts, questions, link, etc. Note: Make sure you add #CompThinkChat to your Tweets so everyone else can see them.
There are many ways to access Twitter, especially on your mobile device. I personally use Silver Bird for Chrome and Seesmic on Android but do a search and try a few out to see what works best for you.

If you miss out on a chat, they will be archived in the Exploring Computational Thinking General Forum.


Here's the document of Computational Thinking Resources I share in my presentations about Computational Thinking. All are invited to join the chat whether you have been using Computational Thinking since Papert, Wing, or if this is the first time you have heard about it. It'll be exciting to hear the community's thoughts on the implications and possibilities and I hope you will join us!

Updated Python: How to Think Like a Computer Scientist

I hold a special place in my heart for the How to Think Like a Computer Scientist tutorial. When my former teacher and then colleague Michel Paul told me about this great language Python I went home and checked out a few tutorials.

Jeff Elkner's How to Think... was not only the easiest introduction to the syntax of the language, I still use it as one of my references as well as for my students. The tutorial started out as a series of explanations and tutorials but recently has evolved into a much more interactive experience. For many students it is difficult to get software installed on their home computers and sadly it can be difficult for teachers to have it on their school network. Brad Miller has released an updated version of How to Think Like a Computer Scientist with interpreters built into the lesson so students can learn right from the browser.


The ability to program from within the browser is making a huge impact on one's ability to learn right away. Some great examples of this beyond How to Think... are: W3 School (HTML, CSS, Javascript, etc), SAGE (Math), and CodeAcademy (lots of great potential here).

You will need a Google account (free) and an up to date browser (Chrome, Firefox, IE). In addition to the interactivity, video tutorials and an administrative back end is being tested and will be opened up at the end of the semester for use with your students. Brad Miller, continues to refine this project and is committed to making it useful and open to as many as possible. New tutorials have been added to take you from Hello World to full blown Object Oriented Programming (trust me it's awesome).

I can personally testify to the quality of these lessons. If you are motivated you could go through these in a weekend or so and be off and running to the great possibilities in using programming with your students. As I have said before, it will provide opportunities for students to try ideas they never could have before. I think of all my students and I have been able to accomplish with Python and it all started with the How to Think Like a Computer Scientist tutorial. I can only imagine what could happen if every teacher who read this blog gave it a shot and passed it on to their students.

Subscribe and Connect to BrokenAirplane and stay up to date with the best resources for your classroom.

Start Programming with Your Math and Science Class Today

If you are a long time reader of this blog, then you have seen the many ideas, thoughts, and examples of how I use and encourage the use of programming to learn math and science. I realized that I have not ever created a clear introduction to getting started with using Python in your class.

I hope that this tutorial helps you get started and have some great ideas. The more of us who are using and creating awesome math the more it helps everyone else. So please enjoy, ask questions, try something, and share with us what you did and how it went. It is exciting to think of all of the cool learning, questions, and skills that your students will gain from this experience.

Enjoy, and if you have any feedback or discover errors let me know. Here is a link to the PDF as well.

Subscribe to BrokenAirplane and keep up with all of the latest education and technology resources!

Is Calculating Math? Part 2

The history of math bifurcated a few thousand years ago with the rise of cities. Humans have been using records and math to determine seasons long before the historical record shows otherwise farming would not have been possible. There is also evidence of games like Mancala and Nim going back very far into human history. There was no need for humans to play games or develop calendars for tracking the sun and seasons but we did because it was fun and useful.

As cities grew larger and empires formed, math served other purposes like machine/weapon making, business/taxation and other administrative tasks. Over time the prominence of calculation as math took hold and math as recreation became more and more esoteric. It was understandable that this would happen as calculation was necessary to get the necessary precision for engineering.

Flash forward to the early 20th century. Computers are capable of doing large calculations that would have been too time consuming for humans to attempt previously. Yet, there were very few people on Earth who knew how to program these machines. As time went on, new programming languages (e.g. Pascal, Basic) and the greater demand for software applications allowed more people to learn programming. Now we are a highly connected society, heavily reliant upon the Internet and technology to maintain "modern" society.

Wait, isn't this a post about math?

Over the last few thousand years, math has become more and more defined as the ability to calculate accurately and quickly. We know this because our classrooms reflect this in our curriculum. Almost all of our time is devoted to helping students become great at calculating. But wait...we have computers now. Do we even need to know how to calculate?

Gottfried Leibniz (co-discoverer of Calculus in the 17th century) said, "It is unworthy of excellent men to lose hours like slaves in the labor of calculation which could safely be relegated to machines."

In other words, let the machines do all of the hard work so we can use our incredible minds to be creative and inventive.

How do we do that, and how do we help our students to do that as well? Now more than ever, we are using software that we have no idea how it works. Whether it is guarding our bank information or the photos of our vacation, software is no longer on the periphery of our society. I have to agree with many who are calling Programming the new literacy. Clive Thomson says, We're All Coders Now and Douglas Rushkoff goes one step further with the title of his newest book Program or Be Programmed (Youtube interview with author).

Conrad Wolfram ,director of Wolfram Research, has a TED Talk that has gone viral. It is 17 minutes, but if you are a math teacher or interested in curriculum reform it is one of the best ways to spend 17 minutes. Here is the accompanying blog post with transcript.


Math has always been about four steps.
1) Posing the right questions
2) Taking a real world example and transforming it into something that can be described with math.
3) Calculating
4) Confirming that the results apply back to the real world situation and answer our original question.

Yet our math class spends 80% of it's time doing Step 3. As I previously stated, this was because computers and the software simply was not friendly enough for students to use so students had to learn how to calculate by hand.

I also appreciate his statement that

math!= calculating    math is greater than calculating 

Or translated from the computer terminology. Math is not calculating, it is greater than calculating.

Wolfram says that Calculus has typically been taught later because the calculations were too difficult, yet now we can teach it to students earlier because the computer can do the computation for us. The concepts and ideas of Calculus can be understood far earlier than when most students learn it.

I can hear the grumbling already. I have heard math teachers, department heads, and even students say that programming is cheating. If a student does not actually calculate the answer then they do not really understand the math.

Hmmm, well do you understand how Netflix suggests new movies to you? How about your car, if something big went wrong, could you fix it yourself? Yet you can benefit from these technologies. Let me clarify something, just because you don't understand how something works, doesn't mean  you cannot use the tool itself.

Calculus is not the chain rule or L'Hopital's rule. It is seeing patterns of slope and area/differentiation and integration in nature. If students cannot understand math until they understand the calculation, then the only people who understand math might be those with PhDs. Since we know that is ludicrous, lets stop implying to the students that math == calculating.

Let them use their calculators (better yet show them how to program their calculators) and spend that brain energy and class time analyzing graphs and patterns because that is what computers are not very good at doing. I used a programming calculator to make my own applications in High School which saved me a lot of time on homework or tests to derive and solve more complex problems.

Now, you might say, should a student never learn to add and subtract? Should we rely on calculators for everything and teach our students nothing about computation? Of course not, the pendulum shouldn't swing too far to the other side, but we are doing our students a disservice by not allowing them to spend more time developing their problem solving skills, creativity, and lateral thinking (and in my opinion, solving for the y-intercept in the point slope form is useful but not creative).


What are my suggestions for how we should begin to move forward?

1) Begin integrating computer science into the math/science/humanities curriculum. Note I am not saying separate computer science classes. I think we should continue to do those as well, but we need to begin integrating it into our STEM classes and allowing it to free up our time to do more interesting things as well as discover the joy of creating your own software.
  • I encourage you to start with Python as as programming language. It is free and open source so it can be implemented immediately no matter what your situation, be easy enough for students to learn, and still remaining powerful enough to do anything you want.
  • There is now one place on BrokenAirplane where you can find all of the programming resources, like tutorials, and software to get you started (all free). If you have any suggestions let me know but this section will always be updated.
  • You should certainly do something even if you yourself have never programmed until now. Even just a little introduction will whet their appetite for more. Don't feel like you have to jump in and do an elaborate project, just start with what you enjoy and feel comfortable with. Most students in America do not see programming until college and even then only if they are a CS, math, or science major. We must start as young as possible and you are the one to do it.

2) Less is more. We must shorten the curriculum of calculation so we can spend more time learning actual math. Calculating is unnecessary in large part so spend time analyzing data, finding patterns, discussing and writing about math, and so on. If your students begin creating programs and algorithms that do the calculating for you or confirm mathematical proofs, they will learn so much more deeply than any set of problems will ever accomplish.

3) Connect with others. I get my support from friends who teach computer science, fellow science/math  teachers, the Python Education mailing list, websites and people like Maria Droujkova's Natural Math, Allison's Infinigons blog, and many other relationships that you will develop once you start.

4) Realize that you are doing something important. We are the only developed nation that does not require computer science as part of the curriculum. I am not saying that I would want it to be, because then it might become rote and boring. This kind of literacy needs to be shared via motivated educators like you. I thank you and your students will thank you.

If you need any support, I am always available via comment, social networking, or email (phil@Brokenairplane). It is my goal to be a resource for all teachers and students seeking to implement technology and programming in their classroom and I thank you for reading and sharing. Your help makes what we do possible.

Subscribe to BrokenAirplane!

Computer Science in High School is Critical for the 21st Century Student

It is an amazing world isn't it? We have so much technology that exceed our science fiction fantasies. The question is, who is and will be making this stuff? Will it be your students? There has been an exponential boom in the demand for electronics, and unless we are talking about your basic appliances, those electronics require programming.

More and more, there is a need for our students to be literate in Computer Programming. Every field in science and mathematics requires an understanding of how computers work and those who speak the language of computers will be ahead of the game. My mother who has been a Nurse for over 30 years has seen the face of the medical field change dramatically in the last few years. In fact her department now has a need for a Bioinformatician, who is a person qualified in both nursing and computer science.

One of the most important articles I have ever read was published in June of 2008 entitled The End of Theory (accompanying diagram) and it described how we are collecting information about our Universe and ourselves so quickly that we do not have time or enough resources to interpret it so it can be used. This is why distributed computing platforms have been so successful, as they allow millions to share in the work of the scientists (e.g. BOINC, Fold It). Google has made billions in searching data quickly. Facebook and MySpace have likewise connected data in ways never before and in doing so connected people from around the World.

Computer science is a mystery to most. Very few K-12 schools offer it and those who do not major in STEM (science, technology, engineering, or mathematics) will not likely take it. This means that the majority of our population is and will remain completely illiterate in that which is truly our most universal language. It will be those who can program who will, according to Marc Prensky, truly have the upper hand.

Computer Science majors are on the rise so there will be someone to do the job. Will it be your students?

How does one get interested in Computer Science? For me, it started with my Dad and I sitting around and learning how to program our Apple IIc in BASIC. Then I learned C++ from my Mom's friend. I taught myself how to program the TI Graphing Calculator in High School (much to my benefit), and I was brought to love Pascal and Python from my teacher and friend, Michel Paul.  The point is that in all of this, I was encouraged to learn programming by others. Some of them knew how to program well, some of them were learning along with me, but they were all excited to teach and/or learn. Since the opportunities to learn how to program are very few (currently), we must be creative and innovative in getting this to our students.

I hope I have your attention. You have the potential to give your students one of the most valuable skills they will ever have (next to reading and writing). Yet your next thought might be one of doubt:

  • My students wouldn't be interested
  • There is no time with my already full schedule to teach this
  • I don't know how to program
For all of these doubts, I ask you to trust me. Many of your fellow educators around the world are already using programming in their math, science, and humanities (???) classroom. Those I have helped, were able to begin right away. As with anything your students will be only as motivated as you are and what their assignments are (link to relevant article). I have students who are interpreting genetic data, creating scientific video games, art, and going deeper in understanding of math and science every day and you can too.

In the next couple of posts, I will show you give you some tutorials and examples that I have used in the classroom. Once we have a few items, I will compile all of this together so it is easy to find and share. 

There are many different programming languages out there and they all have their advantages. In my classroom, and therefore my examples, we will be using Python. The reason for this is:
  • 100% free and open source
  • it is a very popular language used by Google, Blender, NASA, and many others so your students will have a directly transferable skill.
  • for its ease and succinct syntax
  • Python was designed from the ground up to be used in the classroom (link to the DARPA Proposal)
If you would like to begin looking through some great resources on learning Python before the next post here are my recommendations:

Python - I would strongly encourage you to download version 2.7 instead of 3.0 as it is more compatible.
How to Think Like a Computer Scientist with Python - How I learned Python basics, and still the best tutorial  for beginners I have found.
EDU-SIG - The mailing list for those who discuss Python and education. It can be overwhelming at times but it is always inspiring.
Mathematics for the Digital Age and Programming in Python - An excellent textbook already used by many teachers to integrate programming into their STEM Classroom.

*If you are a Humanities teacher and would like to inspire your students with programming as well, I have seen it done very well using a program called Alice. It was designed by Randy Pausch (of The Last Lecture fame) and others at Carnegie Mellon University, and has been an exciting opportunity for students at middle school and older to create stories while learning how to program. This software is also free and there are many great examples and tutorials available on the Alice website.

I look forward to bringing you into this exciting world that will help you and your students go deeper in understanding and enjoyment of science and mathematics. Stay tuned for the tutorials and examples.