A Generation of Lifelong Learners - An Interview with Andy Matuschak

A Generation of Lifelong Learners - An Interview with Andy Matuschak

[[126900]]

Andy Matuschak currently works at Khan Academy, a well-known online education website, leading its mobile development team. Previously, he was responsible for the development and maintenance of UIKit for iOS 4.1 to 8. Andy is also the creator of Sparkle, a well-known Mac framework. It can be said that whether we are iOS developers or Mac developers, we actually use what Andy developed every day.

Thanks for your time, Andy. Can you tell us a little bit about how you got started in programming?

I think it started with games, like many people do. There was a time when I was a kid and my family didn't allow me to play video games, so I would go to the public library. When I was nine, I found that the books I thought were about programming were just basic source code. There were also books about game design that were all source code. So when I wanted to play a game, I would type the source code into the computer, but I would often encounter syntax errors halfway through, and I couldn't understand these error messages at the time, and I didn't know how to solve them. So I had to start over again until I could finally play the game, and after repeating this process, I realized that I could modify the game, and from then on, I couldn't stop. I learned C++ -- I was about 10 years old at the time -- because people used it to write games, and I tried to write a MUD game -- that was my first big project, and it went well...

Did you finish it?

All functions worked fine in single player mode, but multiplayer was not finished - so I guess the answer is no. Because then I turned my attention to graphics and became fascinated with GL and 3D rendering and things like that.

And then you continued making games?

I worked on game engines and stuff for a while, watching all the OpenGL tutorials, spinning cubes, particle engines and stuff, and then I started making real games. At the time, it was a lot of work for a 13-year-old me. I realized there weren't good enough graphics tools to display game content. So, my roommate and I started making a pixel editor. We called it Pixen. That was my first exposure to Cocoa, and it was open source. When we released version 1.0, I was about 14, and we went to the Apple store in the mall to launch OS X Panther (or was it Jaguar?). That was when they started doing launch events! We wanted to give away CDs of our pixel editor.

Is there anything else that might have prevented you from becoming a programmer? Was there anything else you were particularly interested in at the time?

My dream was to be some kind of engineer. I was fascinated by electrical engineering, or even those little science subjects from high school chemistry experiments, so I wanted to be one of those engineers, and software engineering was something I could actually do. I called it programming, not software engineering, and some people told me, "No, no, you should call it computer science!" Of course, at the time, I didn't understand the cultural differences between computer science, software engineering, and programming. I just thought they were useful and clear terms. But in fact, we often use them incorrectly.

Okay. So you're basically a software engineer now?

I'm definitely not a computer scientist, although I studied it. I think I'm more of a software engineer, a software engineer who is deeply influenced by computer science. But I'm spending about half of my time doing some research on children's education, reading papers and books, analyzing ideas, and we hope to do our part in this direction.

Leaving Apple to join Khan Academy, helping people learn and educate, seems like a big step. How did that come about? What motivated you?

Well, I think I can answer this question from something else... I went to Caltech for a while, and Caltech supports a lot of natural science projects, such as NASA and DARPA, so the discussion at that time was focused on human impact. At that time, a NASA person came to us and said, "Okay, you are the best, and you are going to study at one of the best research institutes in the world, and you will have a lot of possibilities. This is a huge opportunity for you, and you should seize such opportunities and use them to do something really meaningful."

When I came to the wider software community, I was one of the few people who didn't go into research after graduation. When I first graduated, I wanted to do something, but I was disappointed with the impact and goals that most commercial software engineering and software sales could achieve. So I thought hard about where I could use my expertise, and the first step I took ultimately determined my direction. I was deeply influenced by physicist David Deutsch, who confirmed the direction I wanted to go, which was to expand the scope of human knowledge and ability, and then I began to think about how to do it.

If humans can live longer, we can go further in knowledge and ability, so there will be many opportunities in biotechnology and chemical engineering. If humans have better tools to experiment, they can also go further, so there will be many opportunities in tool manufacturing, integrated tools, virtual reality, or the next field of artificial intelligence. But based on my background and opportunities, I finally decided to make some contributions in education, which I think will be a better choice. Because if I can create a generation of lifelong learners, then we will have more people to solve these problems.

So you want to build some learning tools for future generations so they can solve harder problems?

Yes, that is my hope. One of the great challenges of learning is meta-learning (learning how to learn). It is a way to learn without destroying your confidence or destroying your attitude towards learning. If I can develop these tools so that not only do graduates get the same grades, but they end up not only having a better understanding of math but are more inclined to learn math later in life, then I will have achieved my goal.

It seems clear that you are not satisfied with the education we have. Can you elaborate on this?

Yes, it is not good enough, and it is not good enough in many aspects. The most lacking is that students do not get the opportunities and resources I just mentioned. I think that is the most important and the first thing that needs to be improved. So that's why the current mission is to provide free education to everyone, and Khan Academy's mission is to provide everyone with the best free education in the world. So now we will focus on providing free education to everyone, and then the best free education in the world. But that's a follow-up, because I still have some doubts and considerations about the so-called world's best now.

Many of my classmates received paid education from the ***, taught by Nobel Prize winners. Despite this, their attitude towards learning is terrible, thinking that once they graduate, it's over. They just want to be done with it all and find a stable job and empty their minds, because they have been defeated by the system and the system, and their curiosity and wisdom have been exhausted.

That sounds really depressing...

Yeah. If you ask people what they think of math, most people will say, "Oh, math is boring." or "I'm not good at math, I'm not cut out for it." If you ask them about science, the answers are similar. But if you ask them about literature, maybe they'll talk about some interesting passages in books they've read, but that's only what they read when they were students, and they haven't read them anymore. So what I'm most looking to influence is changing people's perception that education ends with college graduation. And this isn't really a technical question, so I'm a little hesitant to label myself a "software engineer." Although most of my experience is related to that, my goal is not to go in that direction.

Since you have such a big plan for lifelong learning, what is your vision for ten years from now? What goals do you hope to achieve?

There is a standard definition of learning that is widely accepted today. Whether you read a textbook, watch a video, or listen to a lecture, you absorb knowledge passively. You just sit there and absorb it, and maybe if you're rich you can have a conversation afterwards or something like that. But when you graduate, you have to create that learning environment yourself. I'm interested in what are called constructivist learning environments. This is a term coined by a learning researcher named Papert decades ago. In a constructivist learning environment, students go from passively learning from a textbook to autonomously creating knowledge. In this model, it's more like creating an environment in which you actively understand things and then master them.

One example from Papert’s research was that he was trying to use Logo to teach students abstract and procedural thinking, not programming itself. He even had a classroom with a Logo turtle logo hanging in it. There was also a mechanical turtle at the time that could draw on real paper. This classroom was filled with drawings, some of which were generated by source code, some of which were not. These drawings would change with each batch of students, because for example, some students would see a flower and say, “Oh, I like that picture, can I have it?” And the teacher would say, “Of course, but you have to enter this code and the turtle will draw this picture according to the code.” Then the student would say, “Okay,” and start drawing. Then he might like another drawing, but there was no source code for those, so he had to figure it out on his own.

These paintings without source code in the classroom are designed, and students need to understand the principles to make them. A creative environment is created in this way. I am studying this hypothesis, which is likely to be studied for many years. First, if people are allowed to construct knowledge by themselves, they will most likely get the same learning effect. Of course, I will be very happy if this result is achieved. Not only that, they will also be much higher than other students in self-cognition, learning attitude and learning interest.

In addition to encouraging people to learn more proactively with a structured approach, another major difference between what you do at Khan Academy and more traditional education is the freedom to choose what you want to learn and when you want to learn it. What impact do you think this change has had?

There is also a child education researcher named Piaget who has done a lot of research on this. He believes that one of the most important things in the development of the young generation is the training of autonomy. The autonomy here is broader than what we usually think of as autonomy. It is not the autonomy of "I can play freely", but "I am making decisions about everything in my life". This is contrary to other people telling you how to allocate your time or appeal to authority. For example, the conventional answer to the question "Bobby cheated in the game" would be "Oh, I'll go talk to him". On the contrary, if it is an autonomous answer, it would be "So what did you say to Bobby?" I think the training of autonomy is very important in all aspects. Some studies believe that this will get better results in the short term, but I think it will also lead to better thinkers in the long run.

I'm skeptical of the idea of ​​someone else scheduling the entire day. I think it's more positive if a teacher can adjust the student's learning environment day by day to correct the student's learning process. To be more specific, for example, instead of giving students a catalog of all human knowledge at once and categorizing each knowledge point by importance, I think it's better to think of all knowledge as books on a shelf and arrange them from the lowest to the highest difficulty.

Is there anything you miss about Apple?

Of course, I miss the people there, that's so important. In fact, this is what I feel a little disappointed about the industry. There are so many great people trapped in these giant companies, and they are only sometimes used well, but more often they are just parts of a machine, but their wisdom can actually make a bigger and more far-reaching contribution. I don't mean necessarily coming to my project, I mean the broader situation. It's not just the emotional miss that makes me feel a little sad, but I miss the very stimulating conversations I had with those very experienced people at NeXT. I still hope that they can make a greater impact.

Can you share more about your time at Apple? What was it like developing a framework that is used by so many people? And how did you get there from making games?

One thing that bridged that gap was when I was 16, I wrote a framework called Sparkle. It opened my eyes to some of the realities of framework development, like if you change an API that people are using, they get really mad. It's one of the fundamental realities of framework development, but I honestly didn't know what I was doing until I got to Apple. I finished school, I had bigger ambitions, and Apple seemed like a great place to learn, and it was. It still is, so I still give the same advice to people who were thinking the same thing as I did. I was working with a team of people who had been developing this system for over a decade, and I was pretty much at the bottom of the pile. So I was forced to learn and understand very quickly a lot of the unique angles that go into designing a framework of this size. Especially considering binary compatibility in a framework, which Sparkle didn't consider. Fortunately, the people around me were very generous with their time and energy to help me improve. After making many, many mistakes, I finally realized what stupid things I had done, and when I left a few years later, I probably wouldn't use those skills anymore.

What surprised you most about developing a framework of this scale?

I think binary compatibility was the thing that surprised me the most. I didn't understand how difficult and complicated it was. Imagine a bug like this: a button has a white background in iOS 8, but it's transparent in iOS 7. iOS 8 hasn't been released yet, so it must be our fault. So you start digging a little bit and find that maybe there's a method called in iOS 7 that controls this, but it's no longer called in iOS 8. And then very quickly you break it down and trace it back to figure out what's going on, and it turns out that it's a third-party code that did it, and you don't have the source code. Basically half the time, someone is doing something weird and outrageous to achieve the effect, and the other half of the time we made some changes in some unconventional way, so we need to add some defenses because of it.

Sounds like a lot of things...

Yeah, it's almost like detective work.

It sounds like Peter Steinberger is going in another direction, decompiling UIKit to fix the bug

Yes, definitely. Each version is very confidential, and we can't ask, "Hey, Facebook guys, why are you doing this?" We have to figure it out ourselves. I really admire Peter and his team's work on this. I think it's a very good thing and I'd love to see more of it. I look forward to seeing more teams developing frameworks. Facebook has set a very good example, and so has GitHub.

I never thought that Apple also needs to decompile other people's binaries to analyze bugs

Yes, as a third-party developer, I have to decompile UIKit from time to time, because I want to know questions like "UIKit, what are you doing?", and the easiest way to answer this question is to reverse compile.

There have been so many new things released in the last year, are there any that excite you? Are you excited about the emergence of Swift?

Yeah, I'd say it's all pretty exciting. If there's anything that's really exciting to me, it's not in the consumer software engineering industry. The things that are going to help me in my job, the ones that I'm most excited about are true interactive prototyping tools. Like when you want to make an interaction that never existed before, or there's a concept for it but there's no real tool for it. Most of us still just design it in Photoshop. When you design in Photoshop, you're just creating the same thing you designed in Photoshop. I remember when I was at Apple, I could tell the difference between a requirement that was originally in Photoshop or After Effects or a live mockup, and there was a huge difference. There are some tools that can do this now, and while I think they're all lackluster, I'm still very passionate about it and hope to contribute.

Do you mean tools like Framer?

Yeah, Framer is a good example. I'm very interested in products like Form, which was just acquired by Google, and of course Origami, which is also very interesting. I worked on an internal project at Apple for a prototyping tool that was better at some things and not as good at others. Each tool had pros and cons, and we kind of had a list of "this tool is better for this, that tool is better for that," and we had to pick and choose. I don't think they were particularly good at anything except doing things that were very similar to what the existing tools did.

Do you think storyboards are moving in this direction?

I don't think so, but I think I need to explain it further. There are discrete modes of interaction and continuous modes. For example, mouse clicks are discrete modes of interaction, while gestures are continuous modes of interaction. Similarly, your application has discrete states and continuous states. For example, scrolling is continuous, while navigating to other levels in the navigation stack is discrete.

Storyboards only allow you to control discrete areas within that boxy space. So you can tap a widget on the screen and it takes you to another place through a discrete transition. This interaction is the most common and the least interesting, and honestly I think the reason it dominates is because we don't have a tool that allows us to think about other modes of interaction.

However, since iOS 7, the boundaries of this discrete mode have also become blurred. For example, you can click on a cell in a form to display the content below the cell. These are some very simple examples, but they are difficult to implement with storyboards.

We need more people like Bret Victor to fix this kind of problem.

(Translator's note: You can take a look at the cool interactions on this website, which can be said to be a model of continuous interaction)

Yes, that's why I hope not so many people will make photo sharing apps.

You mentioned earlier that consumer software engineering is not an area that interests you. So what are you interested in outside of this area?

I read papers in a variety of different areas, and I'm still thinking about this question. Recently, what caught my attention was the child development or education, teaching model. The most exciting survey result I read was that there was a class of first-grade students who were only five years old. The teacher did not give them regular math instruction, but an atmosphere composed of a series of slowly adjusted activities, and these activities were all games. After a year, they were evaluated, and although these students did not learn formal arithmetic methods, they were able to answer questions correctly and had very unique cognition. This kind of thing makes me very excited.

So what is the most important thing you have learned since starting at Khan Academy?

It's hard to lead the team...

Why?

This is a unique skill set that I had no prior experience with. In the software industry, we always put some contributing engineers into leadership roles and expect them to excel. Of course, since leading others is a unique skill, we have to be grateful that they are doing well because it requires a lot of knowledge to learn.

You mentioned earlier that you had great mentors at Apple. Why were they so great and what did you learn from them?

First of all, they are very generous in spending their time to be my mentors. There are always many challenges at Apple, but one problem with Apple's culture is that it does not value the value of mentors. Apple does not have any special rewards for this, and teaching and learning are not included in the construction of corporate culture.

Anyway, I've been really lucky to have people who took the time to teach me how to do things, and who took the time to proactively help me when I made a big mistake. So what's impressive? Probably their experience. The industry is really interesting right now because it's full of new grads, and it's these new grads who are tweeting and speaking at conferences. But the industry has been around for a while, and there are definitely a lot of god-level software engineers with 15 or 20 years of experience in the field, but they don't tweet about it very often. You don't always read about them because they're basically hidden in the company, so they can't speak out and keep a low profile, but they definitely know a lot.

At Khan Academy, you and your team quickly adapted to Swift. Can you share your experience with us?

We have about 20,000 lines of Swift code, and there are four developers on the project, all writing in Swift. The problems we have, or what we call problems, are really a clash of pragmatism and idealism. I believe that the problems with the language itself are temporary and do not have a macro impact, and for an app you can make in 6 months, these problems are not important. So feel free to ignore my complaints, as long as the ecosystem of professional software development can develop healthily in the long term, I think this new language will be a very good contribution, and the bumps in the first few months are not worth mentioning.

On the positive side, Swift makes our code clearer. This is what I like most when reading Swift interfaces. For example, in Swift block code, I can see what is happening and what is going to happen next. I can see the return value and understand more from it. I can enumerate the system state in the model in a more accurate way. We can use value types in a more accurate way with constraints, restrictions, and dependencies. More generally, I am in favor of the pattern of treating UIKit as a library rather than a framework.

If there are problems, it's that there are no tools and engineers can't get to the bottom of it. In fact, I actually think that Apple's Swift development team is the best engineering team in Apple, but the work is not done yet. It's still full of bugs, crashes frequently, and occasionally generates incorrect code. On top of that, it's really slow. Very, very slow. The inability to compile incrementally is the biggest problem. We're building an app with a UI, so we have to spend almost as much time polishing the app's user interactions and animations as we do thinking about how to promote learning, and it takes nearly two minutes to see the results every time, which is really hurtful - not just efficiency but morale. This makes everyone angry, almost everyone is angry all the time. Worse, it makes us lazy. Because it's so slow, we don't want to change things, so I wouldn't be surprised if the UI implemented in Swift is uglier than the UI implemented in Objective-C, because iterating on it always makes us depressed.

But it's only temporary, I'm not worried about it. They know about it and they're going to fix it. It's just that you can't manage expectations, not out of malice, I just don't think Apple really understands and hasn't done anything this big before.

How do you think Swift will affect the APIs of Apple frameworks? Do you foresee any changes in the short term?

I don't have any inside information, so I'm just guessing, but I think this will be a long-term project. At least when I was there, the team's main work was to maintain and improve the existing framework, and then support market needs such as new screen sizes or new hardware. This will take a lot of time, so they will be more cautious about making big decisions, and I don't think it will be quick.

I think if we fast forward ten years from now, the API will be completely different. I have no doubt that it will be very disappointing otherwise. But if it's only a year from now, I think everyone will see better commented header files... (I have to say, beautifully black!)

Or we could have someone like Reactive Cocoa who can encapsulate it a little bit more nicely...

Yeah, it's definitely going to happen in the short term. Facebook's components project (actually React) is doing great, but that's not Swift, it's C++, and I think it's super awesome, it's a great idea. React is a great design. That's one of my biggest complaints about my time at Apple, because the culture at Apple doesn't value learning, so no one reads. I mean no one reads the real stuff, no one reads journals, no one reads papers, no one knows what's going on out there. People don't know about things like React, and that's really frustrating.

Anyway, I think it's very good, and there will undoubtedly be people who will treat UIKit or other frameworks as libraries to encapsulate them better. However, unless Apple does it themselves, it will not be a better solution and will always be behind and out of tune.

Now that you’ve left Apple, you’ve started doing more writing and speaking. What other things do you have planned?

It's basically the same. I want to release more open source stuff. I've been hurt by this before. It's interesting that when you release open source, people expect you to maintain it. I think the expectations of the software open source community are not yet clear. Some open source software has its own community and is well maintained, while other open source software is shared for educational or hobby purposes and is not maintained. I basically only have the energy to do the latter because, to be honest, software engineering is not a problem I am interested in dealing with right now.

<<:  Google confesses to providing employee data to the FBI

>>:  KTplay supports 2015 Global GameJam in China

Recommend

A universal method to improve operations and marketing conversion rates!

Previously, I shared that my favorite growth is r...

What does Douyin’s natural traffic mean? How to improve?

Nowadays, there are many people playing Douyin . ...

How to quickly achieve user growth through active traffic generation?

Nowadays, not only works of art, but as long as v...

How to make a complete advertising plan?

How to make an advertising plan ? Make a 30-page ...

How to plan a professional online event?

Planning an event is not an easy task. It is esse...

How can educational institutions prepare good plans for Double 12 activities?

Double Eleven has just passed and Double Twelve i...

A comprehensive article on user retention!

Faced with the current situation of difficulties ...

Detailed explanation of Xiaomi App Market ASO keyword ranking

Today we are going to talk about the process of X...