Posts

What is Javascript?

Key Takeaways

JavaScript is a programming language. It’s one of the three front-end languages. JavaScript is responsible for the “behavior” of your Website. It’s how HTML elements and CSS style animate and move around on the page.

There are many popular JavaScript frameworks (i.e., free code to help you succeed). Some of the popular JavaScript frameworks include: jQuery, AngularJS, Backbone.js, and Handlebars.

Your Assignment

Additional Resources to Keep You Learning

What is iOS Development?

Key Takeaways

  • Swift is the language used to make apps for iPhone, iPad, and Mac OSX (desktop) apps.
  • Why Swift? Well, You don’t really have a choice. Apple decided that part for you. The rule is: if you want to make an iPhone app, and get it into the Apple Store, then you’re going to have to develop it using Apple’s Swift programming language.
  • Before you start learning Swift, ask yourself: do you really need your project to be an iPhone app? If not, a prototyping tool might be the quickest way for you to develop a Minimum Viable Product. My first choice for iPhone prototyping would be Keynotopia, but also there are some great questions to check out over at Quora.

What is iOS? How to Learn Get Started Today

  1. Read Swift vs. Objective-C (5 minutes)
  2. Download Xcode from Apple’s App Store. Note: you’ll need an Apple computer to develop iOS apps. Windows won’t work (20 minutes).
  3. Browse the additional resources below, and choose the one that’s best for your next step!

Additional Resources to Keep You Learning

  1. “The Swift Programming Language” (iBook): published by Apple
  2. “Start Developing iOS Apps Today” (website): some programming experience will be helpful to understand these two resources.
  3. One Month YouTube tutorials for iOS

What is WordPress?

Key Takeaways

WordPress makes it easy to create websites.

How easy? That depends on your skill level.

  • At its core, WordPress is really just an easy way for you to make updates to your website. You can update text and images, and create new pages without touching a line of code.
  • WordPress is actually two things: WordPress.com and WordPress.org.
  • WordPress.com is for non-developers. It’s where you go to launch a cat blog or a portfolio site. You can’t do much customization over there.
  • WordPress.org is for developers. With WordPress.org, you’ll get complete customization over your site. WordPress.com is currently being used by CNN, Time, TED, and millions of other people.

Your Assignment

Decide if you want to learn WordPress.com or WordPress.org. Spend 10 minutes browsing the two sites to learn more.

If you want to learn WordPress.com, start your first site for free today by registering at WordPress.com. If you’d like to learn WordPress.org, check out the resources below.

Additional Resources to Learn WordPress Today

Digging Into WordPress is a great book for getting started with WordPress.org

WordPress Step-by-Step is a free guide for building your first WordPress.com theme. Just click on the titles to get started with each lesson. Chris Castiglione made this (that’s me).

And now we have added a great WordPress course to our library of offerings. Learn how to build your own WordPress themes. Sign up today! 

What is Web Development?

Key Takeaways

The four most important roles for building a website are:

  1. User Experience (UX)
  2. Information Architecture (IA)
  3. Visual Design
  4. Development

To clarify this… they’re not “people,” they are roles.

If you’re at a small startup, you may have to be all four of these roles. At a larger company, each of these roles might be covered by a group of people.

Question:

Are you missing one of these four roles on your project? If so, leave a comment down below with a description of your team and what you’re working on. Ask any questions you might have, and I’ll try to get back to you ASAP!

Keep Learning!

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 , ways of solving the same problem. But rather than that being a weakness of Ruby, the flexibility of the language is an incredible strength 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 need to keep going?

Flexibility=Creativity

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 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. This is 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. It is also 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

I taught myself how to code.

In college I was a music major. I never thought the Computer Science department was cool. Piano and audio recording were the only things on my mind. But, one day I had a problem: My band needed a website. This was around 2003 — a time before SquareSpace, and WordPress —  and so I ventured on my own to built a website myself.

I had lots of questions. I’m sure anyone looking to dive into software will have similar questions.

  • How do I start learning to code?
  • Which language should I use?
  • Is there a specific kind of computer I should 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 building blocks of programming that you’re taught in college are the internals of the computer. 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. It used to be that being a programmer without training in it was unattainable. 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.

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 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.