Posts

What People Really Mean When They Say “I Want To Learn How To Code”

There are two important things to know about coding education:

  1. Most people don’t actually want to learn to code
  2. Learning to code doesn’t mean one thing anymore

It’s important to know these two things because otherwise the way we teach people about coding is wrong, and people won’t learn.

The first point I’ve seen over and over again. People who tell me they’re going to learn how to code, then they start learning, and they think it’s boring as hell.

I call it the coding fallacy. People think they want to learn to code but what they really want to do is build a product.

When we think about it, this should be fairly obvious. Knowledge of code in and of itself is not valuable if you can’t do anything with it. So for most people the biggest motivation for learning to code is building something (although a close second is getting a higher paying job).

That brings me to point number two. Learning to code doesn’t mean the same thing anymore.

It used to be that in order to code you had to know almost everything about computers (hence the term “Computer Science”). Then things were abstracted to the point where you didn’t really have to dive into certain topics unless you really needed to. For example, as a web application developer at this point I need to know very little about system administration because it’s mostly done for me by tools like Heroku and Amazon Web Services.

So when people say they want to learn how to code, most teachers start where they assume they should (where they always have), with data types, the various structures of a language, and help students develop a deeper understanding of computers.

The problem is that’s not what people want. They want to build something. And we should no longer take for granted that in order to build something you have to learn everything about computers or even coding in general.

For example, if someone is already working with a great back-end developer, it would make sense to just teach them the front-end, because that’s going to be the most useful thing for them. They will actually get what they want done faster, and they will be able to learn the back-end at a later point in time. By doing so we reduce the cognitive load on the student and enable him or her to learn faster.

There’s so much that could possibly be taught about coding that we need to start identifying at least semi-complete subsets that someone could learn. At the very least I want to pose the following important distinction I’ve learned:

  1. Web development
  2. Non-web development

When you’re developing for the web you specifically have to deal with:

  • HTML
  •  CSS
  •  Routing
  • Databases
  • Hosting/DNS
  • Application structure

There’s a lot here to learn. And most of it is pretty irrelevant to non-web development (except databases and application structure obviously).

The way I see it, most coding education involves a bait and switch. It goes like this:

Student: “I want to learn how to code.” (But what they really — but don’t know enough to ask — is I want to build a web or mobile application.)

Teacher: “Okay let’s start with data types.”

Student: “…”

(2 weeks later)

Teacher: “Now we can design efficient algorithms.”

Student: “But I just wanted to make a cool-looking website!”

As teachers, we need to recognize that when people say they want to learn how to code, they often really mean that they want to build a web or mobile application.

That’s because to them, that’s what coding IS. It’s all they’ve ever been exposed to about coding. The problem is that they don’t know how to ask for it! So we shouldn’t just be taking everything they say at face value. It’s our job as educators to read between the lines.

I remember watching a play a few years ago in which a priest says that you have to tell the truth even in difficult circumstances. The person he’s talking to asks: “but what if someone asks you a question and you know the truth will hurt them?” The priest responds: “When someone asks you a question, answer the question they are REALLY asking.”

In education as well, you have to read between the lines to figure out what people really want. If they’re asking some specific thing, you have to guide the person towards what’s going to lead them towards their ideal learning experience.

So it’s up to us as educators and as experts to guide people in the right direction and not just let them flounder. If we can do this, then we can empower a lot more people to do amazing things.

As a student: learn what you want to learn.

One of the best things you can do in your own learning adventures is learn a little bit about a lot of things — so you know what you want to dive deeper into later. Here at One Month, we’re launching a Learning Library in the new year, a free resource of videos, essays, and information on topics related to coding, design, and entrepreneurship. It is your first 1 minute, 1 day and 1 week of content for any subject.

Some People Say Ruby Is Too Complex for Beginners…

Is Ruby the right programming language for beginners?

One of the biggest criticisms I hear lobbed against learning Ruby as a beginner language is that Ruby has so many different ways of doing things. People say that these different ways of doing the same thing makes it hard for beginners to learn.

To be specific, here’s one example of this argument that I read on reddit recently in response to my earlier post, Why Beginners Should Learn Ruby on Rails:

“Ruby almost always has 100 ways of doing any problem, and frequently the user-submitted examples on Stack Overflow are meant to dazzle rather than instruct.”

or

“So much shorthand and so many options that when I’m trying to learn one particular function, I get 100 different users telling me to do the problem 100 different ways, none of which helps me understand the thing I’m trying to learn.”

This is true.

Ruby in particular has lots of instances where there are multiple, equally good (and sometimes not equally good), ways of solving the same problem. But rather than that being a weakness of Ruby, I actually think the flexibility of the language is an incredible strength, especially for beginners.

But rather than that being a weakness of Ruby, I actually think the flexibility of the language is an incredible strength, especially for beginners.”

You see, there’s no one way that you learn something, and whichever way sticks is usually the best for a beginner.

Here’s an example.

In Ruby, there’s the select method (in Ruby, functions are called “methods”), which lets you take a list of things and pull out a sub-set of that list.

It looks like this:

list_of_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_of_numbers.select { |number| number.even? }

Even if you’ve never coded in Ruby in your life, read that second line and take a guess at what you’re going to get. That’s right, you’re going to get the sub-set of even numbers: [2, 4, 6, 8, 10]

There’s a second way to do the same thing. It’s called the find_all method.

So instead, you could write:

list_of_numbers.find_all { |number| number.even? }

What do you think you’ll get here?

Right! It’s exactly the same result as the select method.

So why does Ruby have at least two ways of doing exactly the same thing?

It’s because the people who created Ruby were inspired by a few other programming languages — Perl, Smalltalk, and Lisp are a few — and they borrowed the different names for doing things from those languages. Also, it happens to be really easy to write a method once in Ruby and just point other methods to it. That’s not as easy to do in other languages.

So why is this an advantage?

Well, because you don’t have to remember both of these ways of doing things! You just have to remember the one that works for you. I almost always use select.

Doesn’t this get confusing? Maybe, if you’re looking at lots of different people’s code. But by that point you’ve already learned that select and find_all are the same, and it’s not so hard to figure out. Language is a lot like this. There are many ways to say the same thing in English:

Language is a lot like this. There are many ways to say the same thing in English, which enables creativity.

I’m happy, I’m cheerful, I’m pleased, I’m delighted, I’m jolly, I’m beatific, I’m glad, … do I needto keep going?

The flexibility actually opens up creativity, which I think is one of the coolest parts about a language like Ruby. Meanwhile, in most other languages when there’s only one way of doing something, if you don’t remember that way then you’re screwed.

Another clear example that people like to hate on all the time: parentheses.

In Ruby, parenthesis are optional in methods. So are brackets { } a lot of the times, and you can basically use either single quotes or double quotes interchangeably.

Take that same list from before:

list_of_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

What if you wanted to see if it included a particular number?

You could use the include? method:

list_of_numbers.include?(2)

But you could also leave out the parentheses in this case (and lots of Rubyists do) because it’s prettier and easier to read:

list_of_numbers.include? 2

Sure, there’s a few rules about this. You have to put a space beforehand instead of parenthesis (otherwise Ruby would think you were trying to run a method called include?2 which doesn’t exist).

The point is, you can try many different ways of getting at the same issue, and get an answer to your question in many ways. Rather than get stuck on needing to know the exact way to write something, you can solve your problem in more than one way.

The same is true for software applications, like AutoCAD. As a user, you can type into the command line, navigate towards a button, or use drop-down menus. In addition, you can choose to draw a line with at least eight different tools (line edit, polyline, arc, points, etc). One way isn’t better than the other — they’re just all different tools for drawing. Having many different ways to get shit done makes it easier for people to remember the technique that works best for them.

Flexibility! It’s a beautiful thing.

I’ve never understood why people thought that having multiple ways of doing something was a bad thing. When you’re first learning, you have to grasp and understand whatever concepts you can, as a starting point.

Meanwhile, a language like JavaScript is a truly hard language for beginners to learn, because there are so many specifics that don’t come naturally to a beginner, and you have to do them that way. I’m not saying you can’t learn it, but the amount of times I’ve heard beginners so frustrated they were ready to give up because they’ve forgotten a “;” somewhere and have no idea where.

If you’re interested in reading more about why Ruby is a great language for beginners, check out Why’s (Poignant) Guide to Ruby. It’s one of the most beautifully and interestingly written pieces about programming, and is one of the biggest reasons I fell in love with Ruby in the first place.

And then, if you want to learn more about Rails, watch our free one-minute video or check out our Rails course to go build your first app.

Let’s Change How We Think About Learning to Code

Before I ever had my first paid job as a programmer, I spent a lot of time contemplating what it means to get paid as a programmer. I was a hobbyist, teaching myself to code in grade school and high school.

When I became a freshman in college studying Computer Science, I began thinking about the future. I was being asked to commit to being a programmer for the rest of my life. I had no idea what it meant to work with programmers or even work as one on a team.

I’m sure anyone looking to dive into software will have the same questions.

  • How do I start learning to code?
  • What language should I use?
  • What kind of computer should I have?
  • What operating system do I need?
  • What books should I read?
  • Should I go to a bootcamp?

The trouble is that all these are surface level questions. You feel frustrated because every time you ask these questions, you don’t feel like the answers satisfy you. Someone can write a post telling you the differences between Ruby vs Python and yet at the end you still can’t make a decision between the two.

That’s because there is a laundry list of meta-questions you might not even be aware of yet. What you’re really trying to answer are questions like these:

  • Why do we have so many programming languages?
  • How do I know if I’m on the right path, using the right technologies, and working with the right people?
  • What is the difference between a bad programmer and a good one?
  • How can I tell if other people are good or bad programmers?
  • How will I know when I’m a good programmer?

These are just scratching the surface of the underlying questions you probably have.

You will have this intense feeling of discomfort for a while. You know there are lots of important questions you should be asking, but you don’t know what they are yet or how to articulate them.

This experience shouldn’t be unfamiliar to you. Remember in high school when they tried to prepare you for college? You took these career quizzes, teachers gave you advice, your parents pushed you in different directions. It was a huge decision to make and you didn’t even know where to begin.

It’s the same thing when you start programming. The fundamentals of computers have always been the same.

It is called a programming *language* for a reason.

The most obvious purpose of a programming language is to tell the computer to do what you want. I type some code, it reads it, and adds two numbers together and gives me the result just like I expected it to. Perfect.

The hidden purpose of a programming language is to talk with other human beings.

The hidden purpose of a programming language is to talk with other human beings. We have many natural languages like English, Spanish, German, Chinese, the list goes on. There are many ways we can communicate with other human beings. The same thing applies to programming and this is why we have so many different programming languages.

There are a thousand ways to explain an idea. The computer can understand all of them, but humans can’t. When you write code, you have to express your ideas in the clearest ways. Code that you wrote six months ago looks like gibberish because you think differently now. There is so much difference in human thinking due to learning, culture, and experience. That means that great code emphasizes human understanding first and computers second.

Great code emphasizes human understanding first and computers second.

There is a broad spectrum here and each programming language falls somewhere on it.

Some programming languages are designed more for computers than they are for humans. In fact, the most computer-focused programming language would actually be 1s and 0s. Something that, as humans, we wouldn’t even consider a language at all.

As you move up the chain, you can see things shift more towards humans.

Assembly is introduced to make the 1s and 0s more memorable for us.

C is designed to be an easier level than assembly but you still have to heavily think about how the internals of a computer works.

C++ begins to introduce some human concepts into the language so we can represent ideas better in code.

Java builds upon the ideas of C++ but abstracts away the internals of the computer as best it can. You don’t need to care about how things inside your computer like RAM is used as much.

Python takes another step towards humans and focuses on a syntax that’s more readable for humans but still has a lot of the structure inside it.

Ruby is focused on flexibility. They want your code to be like writing a story or a poem. Sure, you still have to worry about how the computer works somewhat, but even less so than Python.

Every programming language fits on this scale somewhere.

The trouble is that it’s hard to even understand what this means as a beginner programmer. If you don’t know how the computer works, then Assembly is going to sound scary. At the same time, if you only ever learn Python then you will feel something is missing because you’ve never learned how the internals of the computer actually work.

The trouble is that it’s hard to even understand what this means as a beginner programmer.

The internals of the computer are the building blocks of programming that you’re taught in college. The problem is that college is on one end of a spectrum that we didn’t realize existed until recently.

In a college computer science degree, you’re put in a world of heavy theory and concepts. There is little practical application of these ideas, but you dive deep into these topics. You learn about algorithms and data structures and how the electricity flows through the computer to make it work. Yet, you learn all this without seeing its value applied to problems that make money in the business world. At the end of the day it feels very disconnected.

Bootcamps tend to be the opposite end of the spectrum. You learn how to type code without ever learning how a computer works. The stuff you learn is built upon a fragile foundation because you’ve been quickly pushed through a system designed to get you a job after just three months (or less).

Until the recent rise of bootcamps and online learning, I don’t think it has been obvious this spectrum even existed in education. As you read this, 5 more bootcamps are getting started and 5 more colleges are committing to teaching old technology for another year (not really, but basically).

The value of programming and tech is becoming apparent to the entire world and it’s becoming cool.

The value of programming and tech is becoming apparent to the entire world and it’s becoming cool. Being a programmer used to be considered unattainable if you weren’t trained in it. With the rise of popularity in startups and the financial success of tech companies, learning programming and investing in technology is becoming the cool thing to do. The barrier to entry isn’t as high as it has been in the past and the average person is able to hop online and start learning Rails in 30 seconds.

The value of having skills in tech are becoming increasingly obvious as well. Being a programmer means you can work from home, remotely, and still take home a six figure salary. Print designers are looking to add web design to their skill set because they know they can advance their careers that way. Corporate managers are looking to start a startup because they feel like they would get more value out of it. The list goes on and on.

The important piece of all this is that these are all people without a technical background.

They come from careers where software was not a large part of their job. The need for learning software from a more human focused vantage point is clear.

It is likely that college will persist as the place to learn deeply technical things and bootcamps will be the place to dip your toes in the water.

There is a middle ground though that is largely unfulfilled — and what online education startups are beginning to address. A place where you can go to dip your toes in, but shows you that going deeper isn’t scary.

The reality is that everything about computers that exists today was created by humans. It’s all a product of our imaginations and hard work. We have the tools for anyone to learn it.

The path to becoming a programmer is simple. You start at a point on the spectrum where you feel most comfortable and you work your way towards the middle.

The path to becoming a programmer is simple. You start at a point on the spectrum where you feel most comfortable and you work your way towards the middle. The middle ground is a place where people are equally comfortable with people and computers. It’s the future we’ve dreamed about where most people are able to write their own software to solve their problems.

If you start on the deeply technical side of the spectrum, you’ll be best served by figuring out how to apply your technical skills to solve human problems. All the hard work and innovative software you create can be used by thousands of people to solve their problems in unique ways.

If you start on the human side, learning technical skills and programming will give you a tremendous advantage in solving those human problems you work on every day. Maybe that nagging issue you can’t seem to fix is solvable by writing your own tool to improve communication.

The important thing to realize is that there’s no one way to start and no one direction to go. If there were, everyone would be doing this and it would be easy. But you should keep trying because coding is one of the most valuable and creative things you could ever do. You can literally build things out of thin air that don’t exist yet.

And one day you’ll step back from the computer and realize you finally get it. There’s no feeling like it. As Neil Gaiman says, “Perfection is like chasing the horizon. Keep moving.”

Top Five Reasons You’re Wasting Your Money When You Don’t Know How To Code

Here’s a guy.

He works in Bushwick, Brooklyn.

“Creative Director” they call him. Well, he isn’t introduced that way, but if you saw him; you’d know. He doesn’t give pep talks. Doesn’t own a car. He donates to NPR, and cares deeply about Meatless Mondays.

He’s changing the world. Or so he thinks.

Because… while his non-profit has been steadily raising money for water in Africa (over $2m came in from donors just this year!) …a fat chunk of that cash has already been lost. Lost on spaghetti code and fucking abysmal project management.

If you’re going to be working with a web development team you should know, at the very least, some coding fundamentals. Otherwise, you’re likely wasting money. Money that might be your savings, your company’s investment, or money that is owed to a group of children 7,500 miles from America.

Here are 5 reasons you waste money not knowing how to code:

1. It takes you 30 minutes to understand a basic coding concept

“So…. tell me again, the CSS is doing the who?”

2. You have to ask your developer to make every little change

“Hey Tom, can I see the text in Red?”, you ask, “Blue?”, “Dragon Green?”, “Honey Yellow?”

If you knew just a little bit of code you might be able to check it out the text editor yourself, or even update the CSS (it’s not that difficult). Okay, not that you should, but if you could then at least you’d know how long it takes.

You might also just use Chrome’s Web Inspector (which could test out all 4 of those colors in less than one minute), saving you and your developer a lot of back and forth time on revisions.

All tips that come within the first 20 hours (or so) of learning to code.

3. You Hire the wrong people

4. You chose the wrong language!

“Should we use CSS, XML, SSL, or CMS?”

5. You can’t properly estimate a project

In programming, it can be hard to explain the difference between the easy, and the virtually impossible. Knowing how to code makes that easier.

During my career I’ve watched tens of thousands of dollars slip away from non-profits — mostly due to mismanaged developers, and poor technology choices. Money that could have been literally feeding children in Africa!

I used to work for a non-profit. It was dark period. But it doesn’t have to always be that way.

Even if you don’t work at a non-profit, I’m sure you’d like to save some money: learning to code helps project managers manage better, it makes team leaders more confident, and most importantly it makes you look more attractive.

The Perfect Follow Up To One Month Rails

Why should someone who already took One Month Rails take One Month Ruby?

Well, for one, you know very little about Ruby so far. Sure, we did some basic stuff like if… then. And we created a few variables. But Ruby is a wonderful language, and your ability to get stuff done in Rails is only like 20% of what it could be. There’s so much more still that you could do that you don’t even know about!

Have you wanted to expand the functionality of your Rails app? Take the Ruby course. If you want to be able to get a job as a developer, you HAVE to get a better understanding of Ruby.

When I was first learning how to code, I built my first Rails app and then I hunkered down and learned as much Ruby as possible.

I went through Codecademy’s Ruby tutorial. I went through other resources like Ruby Koans and Ruby Warrior. My favorite were two books: one called Practical Object Oriented Design with Ruby by Sandi Metz and one called Why’s (Poignant) Guide to Ruby.

That was when I first fell in love with Ruby. It’s an incredible language. It’s really powerful, so much fun to use, and it’s got an amazing community.

If you enjoyed One Month Rails, you really should take One Month Ruby.

For years Rails students have been asking me to create a Ruby course because they feel like they wanted a deeper understanding of the language that Rails is based on. So that’s what I’ve done.

Why else should Rails developers learn Ruby? Well, obviously Rails is built in Ruby. If you took Rails, then you can do it. But, if you want to understand it, you had better learn Ruby.

That’s probably the biggest most obvious reason.

There are things you can do in Rails that you can only do if you know Ruby. For example, writing web scrapers and interacting with APIs. All of that is outside the bounds of what Rails is meant to cover, so you’ll have to know it if you want to do anything more advanced. If you want to automate stuff. If you want to be a better coder. This is the next step.

Google Analytics: The Modern Way to Know Your Users

How many users came to your site today?

Do you know how many people are coming to your site? How could you figure that out? Well, if you live in the 1990s, you could put one of those little web counters at the bottom of your screen and keep track every time someone clicks it (you could also say hi to Ace of Base for us).

Now there’s a much better way to track web activity: Google Analytics. Google Analytics is a free service you can sign up for that will track all sorts of useful information on your site. It tracks much more than just who shows up. It will also tell you how many users are boys or girls, where they’re coming to your site from, how often they come back, even what kind of computer they’re using.

At One Month, we use Google Analytics to track data that allows us to figure out what sort of content will help our community best. Like when we found out that many of our visitors are Windows users, that helped us remember to keep them in mind when we make our classes.

Any web site you make can benefit from Google Analytics. It doesn’t matter if the site is a straight out of the box site from somewhere like Squarespace or if it’s a site you made yourself. It also doesn’t matter if you’ve never tracked the site before; you can add Google Analytics to it now.

Here’s how you get started:

  • Create a new account at the Google Analytics homepage.
  • Fill in a quick form with some details of you and your web site.
  • Copy the tracking script they give you into the code of your site (make sure it’s showing up on every page).

Then you’re ready to track your demographics.

Takeaways

  • Google Analytics helps web sites track user demographics
  • If you have a web site, you need good demographics to make content your users need.
  • Adding Google Analytics to your web site is easy no matter what kind of web site you’re using.

Why a Growth Mindset is Essential for Learning

Have you ever heard anyone say “I can’t draw,” or “I’m not good at sports,” or “I could never do that?”

I used to think I’d never be able to draw. The way I understood the world was that there were artists, and then there were other people.

I was one of those other people. I had my own areas of creativity, but drawing wasn’t one of them. And yet somehow I stumbled into architecture and design school at the age of 21, trying to learn how to draw.

“Genius (or talent) is not enough; we need to get the job done.” — Carol Dweck

Even my graduate school teacher stood behind my desk and shook her head and told me that I wasn’t talented. (In retrospect, that wasn’t a very good example of teaching.) For years, I carried around a belief about my skill meant, in my mind, I’d never be able to do it.

Unfortunately, this is a mindset, and it’s one that we are all taught — but it’s incorrect. We can all learn, and part of this learning is about adopting a new mindset about how we learn at all.

How identifying and adapting your own mindset can help you learn

Interestingly, as children we’ll spend hours and hours learning how to do new things — from learning how to speak, crawl, walk, and go to the bathroom — but as adults, we think that our ability to learn is no longer part of our repertoire.

According to researcher Carol Dweck, the attitude and belief that you can’t learn something is part of a mindset, and it’s something that we can change. When it comes to our mindset, people fall into one of two predictable patterns: they learn to adopt either a growth mindset or a fixed mindset. The good news? These basic beliefs are learned, and we can changed them.

A lot of people seem to carry around fixed beliefs about what they can and cannot do.

Growth mindsets vs fixed mindsets

In a fixed mindset, you come to believe that your skills, traits, and talents are fixed. What you know is unchanging, and therefore, you can’t possibly learn anything new. While this seems extreme at first, you can hear it crop up in conversations when people say things like “I’m a terrible singer,” or “I can’t dance,” or “I’m not a good athlete.” All of these are an example of a fixed mindset.

The misfortune here is that people haven’t taken the time to practice — to work through and puzzle over something until they have acquired a new skill. And thus, they dismiss their ability and say that they simply “can’t” do something.

A growth mindset, however, believes that challenges and learning are opportunities, and that failure is an opportunity for growth. Rather than seeking out evidence that proves we’re not smart, people with a growth mindset focus on process and progress, searching out opportunities to stretch their existing abilities.

This belief that intelligence and personality can be developed has profound consequences on our behavior as adults. “Believing that your qualities are carved in stone (the fixed mindset) creates an urgency to prove yourself over and over.” People will avoid difficult situations, refuse to challenge themselves, and effectively evaluate every situation to see if it will make them look smart or dumb, whether they will success or fail.

In contrast, the growth mindset believes that “the hand you’re dealt is just the starting point for development,” and “that your basic qualities are things you can cultivate through your efforts.” The growth mindset embodies a passion for learning (rather than a hunger for approval).

The growth mindset embodies a passion for learning rather than a hunger for approval.

Why prizing natural ability is bad for learning

When we prize “natural ability” or “talent” over learned ability, describes Dweck, we undermine the process of learning. When we expect ourselves to “just know it” and to be perfect from the first time we start anything, we end up creating a framework that scares us from trying anything new:

‘Mindsets frame the running account that’s taking place in people’s heads. They guide the whole interpretation process. The fixed mindset creates an internal monologue that is focused on judging: ‘This means I’m a loser.’ ‘This means I’m a better person than they are’ ‘This means I’m a bad husband.’ ‘This means my partner is selfish.’”

The reality, however, is that learning is a constant experience of expansion, difficulty, repetition, and mastery. When an toddler first learns to walk, we don’t yell at them for being incompetent with their first 100 or 1,000 tries. They fall down, they get back up. Nothing stops them for very long from eventually wobbling about on two legs.

Yet as we get older, we start to expect ourselves to naturally know how to do something. As a culture, we prize natural endowment over earned ability.

“As much as our culture talks about individual effort and self improvement, deep down, we revere the naturals.”

How many opportunities for learning are we losing if we place our admiration on youth and natural ability?

Growth mindsets prioritize learning:

People with a growth mindset learn that:

  • Trying and failing is part of the process
  • Learning requires stumbling, correcting, and growing
  • You don’t have to know everything in advance
  • Practice and skill-building are more important than embedded talent
  • You’re always a beginner
  • Life is about life-long learning

Three ways a growth mindset shows up in learning:

Once you know the difference between a growth mindset and a fixed mindset, you can start to notice how it shows up in your everyday habits and in your learning. Here are three ways that a growth mindset stands out:

#1: “Those with a growth mindset found success in doing their best, in learning, and improving.”

People with a growth mindset derive just as much happiness from the process as the results. They look for challenges and opportunities to engage with material, rather than deriving all of their satisfaction from mastery. Rather than focus exclusively on the outcome or the goal, they focus equally on the process.

Rather than desiring a finished book, written and perfected, they are motivated by the process of showing up every day to write and edit. Master athletic champions will continue to find ways to improve their personal best rather than sitting on the bench and buffing their nails.

#2: “Those with a growth mindset found setbacks motivating. They’re informative. They’re a wake-up call.”

“In the fixed mindset, setbacks label you,” explains Dweck. “You’re terrified of losing and performing badly, because to you, you are your performance. When you perform badly, you’re devastated, because you, by association, are now no longer valuable or special.”

Whereas a fixed mindset affixes their identity to the outcome, a growth mindset knows that their performance is not the only indicator of who they are. “Wow, that performance wasn’t as good,” the growth mindset might say. “I wonder what I could do differently to get a different outcome? How can I change and grow here to improve my game?”

#3 “People with the growth mindset in sports (as in pre-med chemistry) took charge of the processes that bring success — and that maintain it.

When you believe you are fixed, “you are not a work in process, you’re a finished product,” Dweck says. When you believe that you already have all of the ability you’ll ever have, there’s little reason to invest in processes that will help you grow your skills — that wouldn’t matter. “In the fixed mindset, you don’t take control of your abilities and your motivation.”

In contrast, the growth mindset knows that we are each responsible for our own learning and growth, and are therefore responsible for setting up systems for continuing our own learning. If we want to become a doctor, we’ll set out to learn everything about pre-med chemistry. If there are particular areas that are challenging or cause struggle, we’ll ask for extra help and spend more time on the puzzles until we figure out a way to do it.

Some of the best hip-hop dancers, for example, don’t just naturally begin with their talent. (And talent is a tricky word and often not a helpful word.) While talent might be what you begin with, where you end up depends on your desire to learn, practice, and improve. Many of my favorite performers have spent hundreds of thousands of hours practicing, falling, tripping, and stumbling over routines until they mastered their moves.

How to adopt the growth mindset in your own life:

  • Reward yourself for the process of working and learning, not the outcome…. such as working on challenging problems. Say to yourself “That was great — I really pushed myself and struggled with that for a while,” not “I’m such an idiot for not knowing this.”
  • When you successfully complete something, try out phrases that reward your ability to learn and grow, not your inherent success.
  • Search for and look for things that challenge you, and find ways to enjoy the challenge.
  • Don’t attribute your success or failure to inherent skills; instead, notice the hard work and effort involved in both.
  • Record the entire process (struggle and all) and begin to link the struggle with the adventure of learning.

Learn how to learn by training your own growth mindset:

Luckily, the growth mindset can be learned, says Dweck. People with the growth mindset are constantly trying to improve. “They surround themselves with the most able people they can find, they look squarely at their own mistakes and deficiencies, and they ask frankly what skills they and the company will need in the future.”

As for me, back in graduate school, I was surrounded by people who were drawing every day, and I had to complete drawing assignments every day for several semesters. Over time, the gap between my skill and my taste began to close, and my drawings improved, bit by bit. (For the first year and a half, I thought I wouldn’t actually be able to master the skills to further my design career.)

Then, about a year and a half in, I pinned a drawing up to the wall — a graphite still-life sketch. The teacher paused and said, “This one is not so bad — in fact, it has great linework in here, and we can work on the perspective over here…”

Today, a decade later, I still smile when people watch me draw and they tell me that I’m a natural. I think about the years it took for me to overcome my own beliefs and push my abilities, and how now I believe that anyone can learn anything. When people cough and say “I can’t draw,” I know for certain that yes, they too can learn to draw.

It might not be easy.

But everyone can learn.

Why 80% of Websites Are The Same

1. Yelp is Just a “Blog” with Ratings and a Map

  • The posts are the same.
  • The descriptions are the same.
  • The avatar image is the same.
  • Yelp adds ratings and map functionality!

Similarities: The skeleton of both of these sites starts the same: Medium is a list of blog posts, Yelp is a list of restaurants.

Differences: Yelp then adds ratings, and maps.

2. Airbnb is like Yelp With Payment Processing

  • The posts are the same.
  • The Google Map API functionality is the same.
  • The concept of search is the same.
  • Showing a logged in user on the top right-hand corner is the same.
  • Airbnb let’s you put in a credit card and make payments.

Similarities: Yelp is a site that categorizes restaurants, Airbnb is a site that categorizes vacation homes.

Differences: Airbnb allows you to send money via credit card to the person who created the listing.

3. Twitter is just Public Facebook

  • The posts are the same. Note that Facebook calls their posts “Posts”, Twitter calls their posts “Tweets.” But it’s basically the same stuff.
  • Both sites are two column sites.
  • This concept of user pages is the same.
  • Twitter just allows functionality to make the posts public. Whereas Facebook is private.

Similarities: Both Twitter and Facebook allows users to make posts.

Differences: Facebook is a private version of Twitter, and has some differences on how two people connect: On Twitter you click to “follow” a user, on Facebook you “add friend” and you’ll need a confirmation from the other person.

4. WordPress is just WordPress

Millions of websites that you see around the web use WordPress: they’re just post-based layouts with differences in styling.

  • The posts are the same.
  • Almost everything is the same.
  • The big change here is the layout (ie. the HTML & CSS Layout)

Similarities: Most WordPress sites are the 80% the same.

Differences: The HTML, CSS and PHP (ie. the site layout) changes slightly for each new theme. In addition to that, each site may have differences in plug-ins that the developer chose.

The Two Most Common Types of Sites:

When you look across all these examples, most websites can either be understood one of two sites: a Blog or a Web App.

1. The Blog (80% of all websites):

  • One-to-many: one person writes blog posts, and many people are reading them.
  • Only admin users can sign in and create new content.
  • Examples: WordPress sites, Squarespace, About.me sites, simple landing pages.

2. The Web App

  • Many-to-Many: many people are writing posts, and many people are reading them.
  • Anyone can sign up and create new content.
  • Examples: Airbnb, Facebook, Twitter, Ebay, etc

Beyond Themes

If it’s all so simple, what are web developers doing all day!?

The last 20% is the tricky part. That’s why it’s free to get an 80% WordPress blog, and it’s $4000 to add your company’s face to the header, SEO lead tracking, and a customized payment page. Because as soon as you want some weird customizations, you need to hire someone.

Luckily, each coding framework comes with a library of plug-ins to make life easier. (FYI — Plug-ins are free code that you can use to install specific features to your existing project) For each type of website framework, you have a corresponding set of plug-in tools:

  • Ruby on Rails: Gems
  • Python: Packages
  • WordPress: Plug-ins

Did you just create a “Yelp”-like site, and now you want to take payments? There’s a plug-in for that.

Take a Look at These Patterns

In the new One Month Python class Eric Neuman (the teacher) and myself (producer) put some thought into how you can learn these common Website patterns.

In the class, we convert a static page to a landing page, and a Blog into a Web App. We also deploy some customizations like the Google Map API, and ratings.

Check out the projects. What patterns can you notice?

I’m Oversimplifying — Don’t Freak Out

I’m sure some developers on Hacker News are reading this saying “Facebook is SO MUCH MORE complex than Twitter! It’s impossible to compare the two.”

Yep, I get it.

Comparing the two is not very different from saying, “The Beatle’s Let it Be is only four chords.” It’s a true statement, but admittedly the art is in how you play those chords.

You can play Beatles songs with just four chords, but to become The Beatles, it might take a lifetime. That doesn’t mean you shouldn’t master the basic chords and begin to play — everyone should learn the basic chords. And who knows? You might become the next Big Thing.


Ready to start learning? Check out these courses:
One Month Ruby | One Month Python

What is a 404 Page?

Okay, quick lesson. When you go to a link on the web, or visit a site on the web, you’re telling a server somewhere to send you a page. A server is basically the same thing as a site. For example, when you go to twitter.com you’re telling the Twitter server that you want to see their home page.

Every time you talk to a server, it’s called a request. The server then sends you back a page as a response. That whole system of communication is called HTTP (which is why the full URL is http://twitter.com). It’s like this:

  • You: I want the page at twitter.com
  • Twitter’s Server: OK! Got it for you.

or

  • You: I want the page at twitter.com/person-who-doesnt-exist
  • Twitter’s Server: Uhhhh, what? I don’t know who that is. Sorry there’s no page for you.

Each response is sent to you with a status code. Status codes are three numbers like 200, 404, 500, and 301. Normally you don’t see the status code, because it’s something your browser (Chrome, Firefox, Internet Explorer *shudder*, or whatever) hides from you.

404 — means not found. Basically, you’re looking for a page but the web application you’re talking to has no idea what you’re talking about. This is almost always what happens when you try to load some random page that doesn’t exist, like www.google.com/sdflkjasdflwjks

What are some other important status codes?

There are literally dozens of status codes, but only a handful of really important ones:

200 — means OK, you got your page and everything’s good. Like when you visit www.google.com.

301 — means permanent redirect. This happens a lot without you realizing it. For example, when you go to facebook.com, you’re actually redirected to www.facebook.com, so your first request gets a 301 response telling your browser to www.facebook.com, which then gives your browser a 200 OK Status.

401 — means unauthorized. That happens when you try to load a page that exists, but you’re not allowed to. Like if it’s an admin page that you shouldn’t be able to access.

500 — means internal server error. Basically the application itself fucked up somehow. This is usually code error somewhere. They often look the same to you as a user, but there’s a major difference from the developers perspective.

There’s tons of others, but the basic rule is:

  • 1xx means informational (I’ve never actually seen this though, so don’t worry about what it means)
  • 2xx means success
  • 3xx means redirection
  • 4xx means a browser error — like you’re trying to load a page that doesn’t exist or you shouldn’t access. Basically it’s your fault usually.
  • 5xx means a server error — like the developer fucked up somehow.

Don’t worry, you’re not expected to memorize any of them. There’s a whole list of them all and what they mean on Wikipedia (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes) in case you’re interested. Again, don’t try to memorize them. Did all of this make sense? Ok, good. Otherwise, post a question below.

P.S. Want to see some awesome 404 pages? Here are some of our favorites:

What is your favorite 404 page? Leave an image or link down below in the comment.