Introducing your new profile

Your profile page on Codecademy started as a list of the courses you had taken, but it quickly became overly complex as we expanded the variety of ways to interact with Codecademy and each other.

We've recently taken a step back and reworked your profile to better serve its most important purpose - to showcase who you are and what you've achieved on Codecademy.

PROFILE PAGE

Show who you are

We wanted to make your profile really easy to personalize. You can upload a photo, write about yourself, and share some basic information without leaving the page. To make it easier to share, you can access it at www.codecademy.com/[your username].

EDIT PROFILE PAGE PHOTO

Show what you've accomplished

The old profile, like a report card, emphasized your progress - which courses you still had to do in a track. The new one highlights your accomplishments and contributions. At the moment, completing a track is the biggest accomplishment on Codecademy, so we show the tracks you've completed and are working on front and center.

 TRACK CARD DETAIL

And if you've created a course, everybody should know about it, so we spotlight the courses you've contributed.

 COURSE DETAIL

Make it look good!

We've cleaned up and streamlined the new profile to make sure that people looking at it are able to get the important information they want. The visual style is also now consistent with the one first introduced in the new learning experience.

How can you get it?

You can opt in now, or wait until Monday at 4:30 PM EST, when we are going to switch it over to everyone. Let us know what you think about it and how we can make the profile best represent all your hard work and learning on Codecademy.

Meet the Moderators!

This is a guest post by our team of moderators. Special thanks to Michael Rochlin, Alex C, Alex J, Nick Edwards, Haley Higgins, Dustin Goodman, Daniel Seymour, boring12345, Giacomo Sorbi and Jacob Andersen. If you see them in the forums, be sure to say hello!

Hello fellow Codecademics!

As you may have noticed, there is a mysterious group of people who frequent the Q&A forums and have a little moderator badge next to their names. We would like to explain who these moderators are and what they do.

Codecademy moderator group

Back when Codecademy was still in its infancy — before PHP and even before jQuery — we realized that the Q&A forums needed to be managed. Someone needed to be responsible for making sure the community maintained a friendly and helpful atmosphere. Codecademy staff were busy building the amazing site you all know and love, so they reached out to the community for help. The most active, eager, and helpful Codecademics were tasked with making Codecademy even better than it already was, and this small group became “moderators.” The site has since grown, and so has the need for moderators. We are now 20 moderators strong and growing.

So what exactly does a moderator do?

As the name suggests, we moderate the forums. Knowledge-hungry learners post hundreds of new questions and answers every day. It is our job to create a friendly learning environment by removing spam posts and looking out for disruptive users, especially those who use profanity, insults or are just plain mean. We also try to make sure that people are not simply posting working code, because we believe in learning by doing; which is a process that usually involves trial and error. We also sometimes step in to correct people’s posts and show users how to format code snippets.

Moderators are here to provide extra help and answer people’s questions. (In fact, this is what we spend the most time doing.) Each moderator has proven that they can be helpful in answering people’s questions, and we all try our best to provide as much help as we can, to as many people as we can. When you see the “moderator” badge next to our names, you can rely upon that answer to be correct.

Additionally, we are in close contact with the Codecademy staff, especially the Community tag-team of Linda and Karen. We let them know what is going on from a user’s perspective, as well as point out issues that we have noticed across the site. We help to brainstorm on ideas for the future, discuss user reaction to recent changes, and try to provide insight into how Codecademics think.

Here are a few (unofficial) stats about us:

  • Number: 19 moderators plus Linda, Karen, Eric and Codecademy staff
  • Countries of residence: USA, UK, Belgium, China, Germany, Israel, Italy, Kenya
  • Languages spoken: Chinese, Dutch, American English, Texan English British English, Finnish, French, German, Hebrew, Italian, Russian, Spanish, Swedish
  • Ages: in range(15,99)
  • Programming Experience: Novice to expert

In sum:

We are users passionate about fostering Codecademy’s vivid community.
We find it rewarding to contribute and share our knowledge.
We enjoy helping fellow users learn how to code – and learning from them.

But most of all, we’re Codecademics just like you!

Better, Faster, Stronger

After releasing our new coding interface, a number of users have had difficulty running code and loading exercises over the past week. I apologize for this. These issues are not related to the new interface, but instead are deeper issues with how we evaluate code submissions. I wanted to share the background of what is happening and what we are doing to build a stronger code evaluation platform going forward.

Background

It is possible, but not at all easy to run languages like Ruby, Python, and PHP directly in the browser. In fact we used to do this by serving an interpreter for each language, compiled to JavaScript, to your browser!

We ultimately found this approach to be too fragile to use in production, and last summer we launched the Python language track on top of a server-side code evaluation service that we call Codex. Codex was originally designed to run Python code in a secure environment. As we added new language tracks like Ruby and PHP, we began to push it to its limit.

When we designed the new interface, we built it to be more responsive. Unfortunately this strained Codex in ways it wasn't intended to be used, resulting in spotty performance. Making Codex more robust will let the new interface deliver on its promise.

What we're doing about it

Codex has gone through some significant growing pains as we've rapidly expanded both our user base and the ways we use the service.

We pushed a series of fixes to take it off life-support and are doubling down our investment in it as the backbone of our coding experience. We are refactoring core aspects of the service to handle much larger loads and adding support for multi-process environments (i.e. running mongodb, node.js, and redis together in a single app).

This will ensure that Codex is prepared to grow with users as they tackle an ever increasing variety of topics and technologies. Thank you for your patience, and we're excited to see what you build!

If you are experiencing these issues, please see our support article here.

Introducing a New Learning Experience

Today, we're introducing an updated interface that makes learning to build something easier than ever.

A new learning experience at Codecademy

Here's what you can expect:

An immersive experience

We've simplified the interface to let you focus on what matters: the lesson, your code, and what you're building.

A better feedback loop

It's easier to learn when you can see you're doing. For most screen resolutions, you can now always see a visual preview of any webpage you are coding, or a terminal output of your code.

A responsive layout

Our new layout fills your screen, making it easier to code on both a small laptop and a large monitor.

We're rolling out our updated interface to everyone over the next week. When it becomes available to you, you'll see a "Switch now" link at the top of any Codecademy course.

We can't wait to hear what you think. Enjoy!

$action = $_GET['PHP Courses'];

Since the beginning of Codecademy, we've worked with the programming community to help them share knowledge. People posting tutorials to their own blogs started to move over to Codecademy, benefiting from the millions of people taking their courses and the status that came with being a teacher with one of the largest audiences in the world. You, as users and contributors, are empowered to choose what to learn and who to learn it from. We've heard endless requests for PHP—one of the world's most popular programming languages—and we spent the past few weeks thinking of an experiment to help you both learn and teach PHP.

Today, we're kicking off the launch of PHP on Codecademy with a lesson we created. We're opening up the entire track for contributions from the community—help pick up where we started and let's build the web's best PHP course together. If you're more interested in taking PHP than helping to teach it, you can help, too. Share PHP with your friends and ask them to help out by tweeting or emailing them.

The content and collaboration that make Codecademy a great place to learn are all thanks to you, and as we work to achieve the best possible learning experience for all users, we're calling on you to help shape the future of the community and its course offerings. You'll notice that only the first course in the PHP track has been completed; we're looking to you, the millions of users who work to make this site awesome, to help direct and build tomorrow's content.

PHP track

Go ahead and start learning PHP, and if you're ready to take charge of your curriculum, tell us what you want to teach!

More APIs for Your Apps

Last month, we started hosting lessons on APIs to teach people all over the world how to harness the power of real web apps. Codecademy users have integrated videos into their websites, called/texted friends, shortened URLs, and much more. With Codecademy, we think we can bring the power of programming to everyone. That's why we're working with more companies you likely interact with every day in order to show you how programming can affect your workflow and daily life. Use Twitter? So do tens of millions of other people. Most of those people tweet from the Twitter app. With today's new courses, you can tweet from Codecademy or write your own cool scripts that tweet on certain triggers. That's just the beginning.

With these new API offerings, you'll be able to:

  • Control the cloud. With courses from Box and SkyDrive, you'll be able to store and access files from anywhere in the world.
  • Authenticate with other apps using OAuth. These days, countless web applications (including Twitter and Facebook) use OAuth to authenticate users. Let GitHub be your guide to the OAuth2 protocol.
  • Become a consummate consumer. Find the latest fashions with Gilt, the best restaurants from Ordr.in, and pay for it all with Dwolla.

And much more!

API track landing page

Whether you're looking to learn an API that will underlie your web app or you just want to pull in some data for your site, you'll find a ton of useful, customizable, and fun services in our latest batch of API lessons. Our partners have worked hard to bring you a host of new tools to integrate into your own projects—check them out!

(And if you're interested in teaching your API, please don't hesitate to get in touch with us.)

Back in Action

Thanks to all of our users for bearing with us this week with our downtime and database issues. We've worked nonstop the past couple of days to make sure the site is up, functional, and behaving like it was before the downtime. A very small number of users are still affected, and we're working with each and every one of them on a case-by-case basis to make sure they're happy with their profiles. We thought our downtime could be a learning experience for everyone - I wanted to let you in on what happened in the aftermath as well.

RECOVERING FROM DATA LOSS

After we had our database issue, we pieced together the data from last week using backups and with the help of some of our external service providers that had cached copies of submissions, posts, achievements, and more. Our entire engineering team worked shifts for 36 hours straight to pull data out of our backups and prepare a fixed version of our database for when the site came back online.

Thursday evening at 6 or 7pm, after a little more than 5 hours of downtime, we decided not to bring the site up until we were confident we had restored the majority of users' progress, points, and badges. We spent the next 11 or 12 hours working on that (all hands on deck).

Thursday morning, we brought the site back with almost all of the data we were able to restore. Most users were unaffected and saw no issues after the site came back up. Linda and Karen, our community management team, designed a form for people to report issues. Ryan, Codecademy's cofounder and CTO, put up a blog post explaining the reasons behind the downtime. Lots of users reported no problems and offered to lend a hand to help out - thanks! It's amazing to work with such a receptive and helpful community.

SWEATING THE SMALL STUFF

After bringing the site back online, we dedicated Thursday and Friday to working with our users to recover their data based on the feedback we got through email, Twitter, Facebook, and the form we designed. We know how important progress, points, and badges are to our users, so we have spent the past couple of days getting everything back to normal. Tonight, we're running a final script and the site will be down for 15 minutes as we add in a small amount of data that should affect only a handful of users.

We know downtime is not good for our users and we are not proud of it. That said, it happens to everyone. Great companies we admire like Etsy and Twitter have had downtime issues in the past. What's most important is how they handle themselves afterwards.

Everyone who was affected by data loss will get a special Codecademy badge.

BUSINESS AS USUAL

Thanks for bearing with us after this outage. Going forward, we've implemented a lot more policies internally to make sure this never happens again. We've increased our daily backup schedule and, in some cases, started backing data up more frequently. Our backups are redundant across several data sources. After this experience, we've practiced how to recover from many circumstances - data loss, downtime, etc. We want you, our users and learners, to be confident that Codecademy is the best place to learn to code whenever you want to learn. We're back to building new features and working on old ones - check back next week for more announcements!

Downtime on Codecademy

Sometimes you learn from Codecademy; sometimes you learn from real-life experience. Yesterday, Codecademy was offline for almost 24 hours. We want to apologize and explain what happened.

Currently we have restored all user progress — courses, points and streaks — from before 2/6/13. We are doing all we can to restore user progress from 2/6/13 to 2/13/13 at 1:09 PM EST. Despite our best efforts we cannot guarantee that all work from that one week period will be recovered. If you have been affected, please let us know.

What happened?

At 1:09AM EST on Wednesday 2/13, we took Codecademy down to deal with a database migration issue we were facing. We tweeted about it at 1:30. Then we spent the next 24 hours behind the scenes to iron out the issue.

How did it happen?

Like most web applications, Codecademy stores its information — everything from your submissions in exercises to new accounts — in a database. We use a technology called MongoDB (by our friends at 10gen) to do this. Our databases have hundreds of millions of items in them and are growing larger by the second. We've been working to change the configuration of our databases so that we can migrate our data to new database structures, laying a solid foundation for future developments and features.

Around 1:30 PM yesterday we became aware of an issue: one of our local environments was not set up correctly, and was causing a database malfunction. The whole team dropped what they were working on and focused on restoring the site as quickly as possible.

Soon after we made the decision to keep the site down until we were 100% sure we could restore the majority of the data. Working with our external service providers, we matched up the data they had with the data we had internally from backups. We verified the integrity of certain data and began piecing back together our databases before bringing the site back online.

After pulling together backups of submissions from Amazon S3, course progress from our backup, and emails from our email database and userfox, we tested things internally to verify we hadn't lost much. Then, finally, we brought the site back up.

What does this mean for me?

We have minimized the number of people affected by pulling from our backups, but we were not able to restore everything.

**Currently we have restored all user progress — courses, points and streaks — from before 2/6/13. We are doing all we can to restore user progress from 2/6/13 to 2/13/13 at 1:09 PM EST. Despite our best efforts we cannot guarantee that all work from that one week period will be recovered. If you have been affected, please let us know.**

There are also certain data types that we were not able to retrieve for some users.

Anyone who created a new account from 2/6 - 2/13

Profile pictures will be missing and connection to social media accounts will need to be restored. We will be sending you a link to get set up again.

Anyone who created or joined a new group from 2/6 - 2/13

A small number of users and beta testers have access to our groups feature. If you created a group in the past week you will need to recreate it. If you joined a group in the past week you will need to rejoin.

What Now?

This event underscored the importance of frequent backups. We have created a new plan based on what we have learned to better recover from potential database migration issues in the future.

We will also be extending everyone's streaks today. We know that you are committed to learning to code. We are committed to helping you get there. If our site goes down, your learning does too. This is the least we can do.

I wrote this post so that you would have confidence that we take downtime very seriously; we learn from each and every event; and we are committed to building the strongest community for learning how to program. Thank you to all our users for your patience.

Learn APIs with Codecademy!

When I worked at GroupMe before starting Codecademy, it always amazed me that the company started at a TechCrunch Disrupt hackathon. Its founders somehow built an awesome group texting application in less than 48 hours! How'd they do it? They built on top of another company's technology - Twilio, in this case - and used it to build an app of their own. Twilio sent the text messages, but GroupMe handled group formation, the interface, and more. A year after GroupMe was created at a hackathon, Skype bought it for more than $60m.

That's one of the many examples of the power of APIs - application programming interfaces. They exist to make it easy to interface with applications other people have built. Without APIs, hackathons would be much harder. APIs make it easy to create things - to make things that interface and interact with the real world and the technologies in it. For Twilio, this means interacting with phone numbers. For YouTube, it's with videos.

Learn APIs Page

Codecademy has long taught people the basics of programming and how to build things like games and websites. It's always been our goal to help people create things - to make companies, products, and real-world applications. Today, we're one step closer with that. We worked with great companies like Youtube, NPR, Bitly, SoundCloud, Parse, and more to teach you how to build simple API apps. What can you do with these APIs? Build awesome websites with video with YouTube’s. Shorten links on the fly and grab stats with Bitly’s. Mash up the news with NPR’s. That’s just the beginning - we’ll be adding more APIs soon!

Programming is an amazing skill because it lets you create things on your computer. Using APIs makes that one step easier. It's often hard for developers (even professional ones!) to get up to date on the latest APIs and to learn how to use them. Dense documentation makes it nearly impossible to pick up an API and start programming immediately. These new Codecademy lessons should be just as helpful to experienced developers as they are to total newbies. They'll help you get up and running faster than ever.

Amazing products and projects have been built on the APIs that we're starting to teach today. This is just the start - if you have an API you'd like to teach or one you'd like to learn more about, let us know! Let's build something great together.

Get started now!