Teen brothers from Nigeria taught themselves how to code and started with Codecademy

Osine and Anesi went from replicating their schools website as students in Nigeria, to building their own browser and making a name for themselves in the tech industry!

Osine and Anesi code because they “enjoy the thrill of creating something new that works in the digital world.” They started their company BluDoors, creatively inspired by Microsofts “Window’s.” As teenagers, aged 12 and 14, they decided to learn to code and started their coding journey with Codecademy. They learned HTML and CSS and then moved into some more challenging languages like Java.

They decided that the best way to “really learn programming is to create something (start a project).” They used their knowledge from Codecademy to build projects which also aided in their learning process. They are wise well beyond their years, and when we asked them about resiliency towards the difficulties of learning to code, they had some great advice:

“Difficulty is just an illusion. Everything is easy once given time. You shouldn’t get discouraged because you didn’t get it the first or second time. Just keep trying and you will get the hang of it.” They also referenced one of their favorite quotes from Woody Allen: “80 percent of success is just showing up.”

Well, we’re inspired! Coding can be hard, that’s why we tried to make Codecademy as easy as possible to help anyone become successful without getting in the way.

Now, these young software engineers from Nigeria are building things to fix problems for themselves and their communities. They paired their love of computers and passion for coding, since a young age, with issues they were experiencing in Nigeria. They “saw a problem and decided to do something about it.” The brothers were running into issues using Chrome, so together, they built a better browser called Crocodile Browser! They are still working on very ambitious projects and hope to move to America to study at a University in the future.

We were able to ask them a few questions about their coding journey with Codecademy and beyond.

How and why did you get started with coding?

Anesi joined the website design club at school and started learning about the different ways to make a website. After cloning his school’s website, he decided to get serious, started learning with Codecademy and delved more deeply into HTML and CSS before moving on to more traditional programming languages. Osine’s story is really similar. Around the same time, he found HTML and CSS really interesting so he made a few web pages before going onto other projects. We code because we enjoy the thrill of creating something new that works in the digital world.

What were your goals when starting to code and how did you keep motivated?

Our main goal was to create a game . We also wanted to create something that would be really useful in the world ( We didn’t know what that would be at the time ). We kept ourselves motivated by taking baby steps and working on really small projects to build up our confidence. We continued this method of taking baby steps even when we started working on bigger projects. We always had a goal that we were working towards that kept us really motivated.

What was the most challenging part of learning how to code and how did you rise above those challenges?

We found learning all the syntaxes for different languages really difficult because we weren’t used to them. Java has been the most difficult language that we’ve learnt thus far . We overcame most of our challenges by simply working hard and breaking the work down into different modules.

Which resources would you recommend to folks just starting out?

We recommend Codecademy, and youtube videos . Books are also good depending on the publisher . Stack Overflow would be useful to anyone who already knows the basics and maybe even a beginner. We then started creating our own projects with knowledge from Codecademy and by watching a lot of Youtube videos and reading a lot of books. We decided that the only way really learn programming is to create something through projects. It can be said that we started our own projects as part of the learning process, and we are still learning!

What advice would you have for folks who are just thinking of getting started?

Difficulty is just an illusion. Everything is easy once given time. This is something we said to ourselves when it started getting difficult. You shouldn’t get discouraged because you didn’t get it the first or second time. Just keep trying and you will get the hang of it. And finally remember that “80 percent of success is just showing up” — Woody Allen

How did you get to where you are now? What did you do after Codecademy?

We got to our current level by simply working hard on different mini-projects. We practiced in the right way and we eventually got better. After using Codecademy, we went on to using different online learning resources to boost our knowledge and understanding of any language that we wanted to learn. We still go back to Codecademy once in awhile to learn some more languages. We also built the Android web browser called Crocodile Browser for the phones that have low memory. It currently has over 100,000 downloads.

Which steps would you recommend for folks who want to find jobs after Codecademy?

Put your personal projects on GitHub. Join communities like the Codecademy forum community or Stack Overflow and don’t be afraid to do something that is challenging. If you see a problem don’t wait for someone else to fix that problem just do it and that might help you get your dream job. We also recommend coding everyday to build up your confidence levels.

We are excited to follow their journey and see more from these young men in the future.

A Conversation With Summer of Code Winner Ethan Chiu

We sat down with our Summer of Code Challenge winner, Ethan Chiu. A motivated and hardworking high school student, Ethan’s project focuses on bringing students together to help each other through peer mentoring in his school. We asked Ethan to tell us about the project and what inspires him to code.

alt text

Why did you choose to enter the Summer of Code challenge? Since this challenge was during the summer, I knew I had more free time to code something awesome! Thus, I wanted to challenge my existing knowledge of programming and create a web application that would help my local community.

Where did you get the idea for StudyTogether? I got the idea from talking to my peers who were tutors, and my friends who were getting help from my school’s peer tutoring system. My school’s existing peer tutoring system is pretty amazing. It is free and accessible to all students. It gives student tutors academic credit and teaching experience while students get an opportunity to improve on a tough subject with the aid of a free tutor.

Nevertheless, I found out that this system still had some downsides. From a high level perspective, there is no streamline process for this peer tutoring system. The system is unorganized because it is separated into different sections for each subject. Students have to search for certain teachers to get access to the peer tutoring system. More importantly, many struggling students don’t even know of this system because it reaches them through word of mouth. This system also creates a rigid and inflexible schedule for both the tutor and the student. Struggling students often don’t receive enough help to succeed in future classes, and the tutor has to follow a cumbersome schedule.

Interestingly enough, I didn’t hear of this program until the last weeks of school. Therefore, I seek to improve the existing peer tutor system by making it more accessible, scalable, and flexible. My primary goal is to create a web application that would allow students who need help in all school classes to receive the help they need.

When making the app, I made sure to cater to my school. I tried incorporate three core values: organization, flexibility, and safety. I envisioned my web application to allow both student tutors and the students to schedule appointments with each other quickly. In addition, I envisioned that students can also choose a student tutor based on their experience, accessibility, and schedule, while tutors can get to know more about their students’ questions before hand. It is a safe and monitored system controlled by teacher admins. If face to face tutoring is not possible, peer tutors and students can communicate through the inbox or videocam system. Tutors can post their video tutoring session (always recorded) on YouTube so that others can learn.

Overall, I want this web application to allow students to receive the help they need. Hopefully in the near future, after I run a couple tests in my school, I can expand into other school systems, which will create a strong network of resources.

What were some of the difficult parts about coding your project? Some of the most difficult parts came when I was programming the CSS. I often made silly and hard to find mistakes that would throw off my project. For example, it took me a couple hours to figure out I swapped the z-index of two different css classes which ruined the stack order.

What would you have done differently (or more of) if you had time? If I had more time, I would definitely focus more on the backend and making the basic core functions of the website work. For example, I wish I could have spent more time on the login, calendar and videocam parts of my web application. Overall, I would have taken more risks, such as experimenting with different front end frameworks link AngularJS.

Which courses were the most useful for you when creating your project? The HTML/CSS, JavaScript, and jQuery skill courses gave me a solid foundation to grow from. The Web Developer Skills courses such as Make an Interactive Website gave me some inspiration on what beautiful websites could look like. Overall, these courses allowed me to create a website from scratch.

Where did you turn for support when creating your project? For this project, I really wanted to debug everything myself because I wanted to challenge myself as much as possible. I didn’t turn for much support besides using Inspect Element and reading the Bootstrap documentation. Before the project, when I needed support for programming, I always turned to the amazing Facebook group called Hackathon Hackers for help. They are a great community of supportive developers.

How do you hope to continue your project, now that you’ll have support from a Codecademy engineer? With the support of a Codecademy engineer, I hope to make my website’s core backend part, the calendar and scheduling function. Also, I want to improve the UI/UX of my website. Having been using the Codecademy platform for the past 2 years, I am amazed by how Codecademy constantly improves their website’s design to make it more user friendly. More importantly, I want to develop good programming habits and learn from the experiences of a Codecademy engineer.

What do you hope for this project in the future? How would it function ideally? I plan to integrate my school’s email system with my website so that login is fast. Specifically, I want to create three different user accounts: student, tutor, and admin (teachers). I want to create a more flexible calendar system and a more aesthetically pleasing calendar system that makes scheduling easier by combining the best elements from Doodle and Google Calendar.

After developing this core function, I hope to create a system where users can type in their basic information so that they can effectively pair each other up for tutoring. In addition, I want to incorporate a video meeting system where tutors can teach their students. Lastly, I also want to make my website mobile friendly.

What’s next for you? Right now, I am currently working on the login functionality with passport.js. When I am done with the login system, I plan to finish the core functionality of implementing the calendar system. Obviously, there is still a huge learning curve out there. I have had no real experience with backend development so I hope I can learn from Codecademy’s SQL course and move on from there.

Other than working on this project, I am developing the front end for a startup called UScanTechnologies, and I am leading the development phase with my Co-Founders for my startup called DrumSense, Also, I founded and am directing WellesleyHacks, a 10 hour hackathon for high schoolers. WellesleyHack’s goal is to help participants of all levels to create a web, mobile, or hardware hack that they are proud of. Lastly, I am attending various hackathons throughout the year. In fact, I am attending my first hackathon out of the States next week (HackTheNorth), and I’m really excited for that!

Codecademy Partners With The White House

As part of the White House #TechHire initiative, Codecademy is excited to announce our new partnership with the Obama administration, focusing on helping underrepresented and diverse groups of citizens get the skills they need to find jobs through code.

Programming is the future—a coding education gives anyone the ability and skills to create their own future, businesses, and stable foundations. At this time, wide access to computing education for students is missing. We hope to bring it up a notch through free coding courses, available to anyone with an internet connection.

As a leader in coding education, we find ourselves with a responsibility to help others interested in technology to take the next step. Partnering with Libraries Without Borders in New York, we’ve pledged to reach out to 600 underserved and minority students to participate in Codecademy Meets. This series of events will start at our NYC Codecademy HQ, then grow to different parts of the country, including learners from all backgrounds.

Codecademy Meets

At Codecademy Meets, our Codecademy team members will talk about today’s importance of a tech education, and go into detail in why and how coding can change lives, create jobs, and nourish skills, as well as provide resources for folks to learn on their own. We’ll be learning hands-on with Codecademy courses that teach valuable programming skills necessary to get started on a new path in technology—all for free.

Coding is for everyone. We’re here to bring it to everyone.

HTML & CSS projects are up on Codecademy

Our new web projects are here!

What’s New?

You asked for more projects, and we answered with 15 new HTML and CSS projects up on Codecademy!

Our HTML/CSS projects are designed to let you practice what you’ve learned in the HTML/CSS and the Make A Website course. There are 5 levels with 3 projects in each level. As the level increases, so does the difficulty. Once you’re done, you’ll have all the knowledge and practice you need to create your own website with concepts learned from each project.

HTML CSS project HTML CSS project

Why do projects?

Not only will you practice what you’ve already learned, you’ll explore new concepts by diving into the resources we’ve provided in each project. For example, you’ll learn how to go in depth with the Bootstrap grid, and how to use the HTML video tag—all on your own, applying these concepts to your projects as you go.

Choose to follow the end result example, or customize each project to reflect your own interests and personality. Completing these projects will get you working like a real developer, solving problems, learning new concepts, and creating something unique all on your own.

Ready to try your hand at a project? Get started here!

HTTPS

We’ve heard from a lot of users that they wanted to connect to Codecademy securely, and now you can. Today we shipped full HTTPS support for the Codecademy site: https://www.codecademy.com

As a Codecademy learner, all of your login credentials and other browsing activity are now encrypted. This means attackers can’t snoop on your internet traffic to intercept your Codecademy password, or observe what you are doing while logged in.

The transition to HTTPS has been a bit tricky for us because our website embeds user-created websites in our learning environments (see the Learn Ruby on Rails course for example). This means that our HTTPS connection status is impacted by the contents of those users’ projects. We have done our best to make sure we are loading secure versions of resources like scripts, stylesheets, and images wherever possible.

If you have been on the platform for a long time, you may find certain images in your old code are no longer loading—this is a restriction put in place by web browsers. Please replace them with an image available at an https:// URL to fix the problem.

If you find any issues with the HTTPS version of the site, please let us know! Shoot us an email at contact@codecademy.com.

Artur Sapek Engineer at Codecademy

Introducing Learn AngularJS

What’s New?

We’re proud to introduce our new Learn AngularJS course!

AngularJS is a JavaScript web framework aimed to make single-page web apps simple to build and easy to maintain. It’s a popular framework for building web apps, and is used by many companies such as Google, Apple, Udacity, and HBO.

In this course, you’ll quickly learn the essentials of AngularJS. By the end, you’ll be able to use AngularJS to create custom web apps of your own. You’ll build 14 web apps to get a solid foundation in the framework, including a Top 10 app site, an email app, and a local search app. If you’ve completed our JavaScript course, you’re ready to start on AngularJS and take your skills to the next level.

alt text

Why Learn AngularJS?

We decided to build our Learn AngularJS course as a next step for learners wanting more advanced content. Learning a JavaScript web framework such as AngularJS is the next step when getting familiar with building web apps of your own.

Looking for a web developer job? AngularJS is increasing in popularity, both in the developer community and in many tech companies, making it a very useful employable skill. Pair your learning with our jQuery course for a well-rounded approach to creating modern web apps with JavaScript.

We can’t wait to see what you create!

Introducing Ruby on Rails: Authentication and Authorization!

We’re proud to announce the launch of our brand new Ruby on Rails: Authentication course!

What’s New? In this course, you’ll learn how to build an authentication system and an authorization system from scratch. When you’re finished, you’ll be able to write your own custom authentication system as well as use third-party systems.

Want more advanced content? You got it—we built Ruby on Rails: Authentication for learners who have finished our Learn Rails course eager to go on to more advanced topics that will help them create their own web projects and further their skills.

Why Authentication and Authorization? Many web apps let users sign up for a new account as well as log in and out of their accounts. Together, signing up, logging in and logging out make up an authentication system. Most apps use some form of authentication to ensure that only signed in users can access content.

In addition to authentication, many web apps have a way to give specific users permission to access certain parts of the site. For example, a blog would give only its authors or admins permission to access the editing and publishing parts of the site. Permissions are defined with an authorization system.

Expand your web app by learning authentication and authorization with our latest course. We can’t wait to see your projects!

Introducing “Learn Rails”

We’re proud to announce the launch of our new Learn Rails course!

What’s New? Ruby on Rails is a popular web framework used by companies like Airbnb, GitHub, Groupon, and Codecademy that makes it easy to build dynamic web apps in a short amount of time. You can use Rails to build apps, websites, games, and more—all in an easy to use and popular framework.

When building Learn Rails, we had a few basic concepts in mind. We wanted the course to be accessible, quick to complete, and fun to do. We decided to shorten the Learn Rails course time and created 12 hands-on projects that users can work on throughout the course. Coding is exciting, and the new Learn Rails format makes it easy to grab on to concepts and apply them in useful projects.

Why Learn Rails? You might notice that Learn Rails is our second Rails course on Codecademy. We listened carefully to the response from students after our first course—Make a Rails App. Students from our in-person Codecademy Labs classes felt they needed more practice before they could create a Rails app on their own. We responded by creating a new course, Learn Rails, to give all of our learners the skills they need to feel confident in coding custom Rails apps.

At Codecademy, we try to learn as much as possible about how learners use our product, and how we can improve. We’re dedicated to our “learn by doing” experience, helping users feel rooted in what they learn, and confident in being able to build their own real-world Rails apps.

We can’t wait to see what you create with Learn Rails!

Happy coding! -Bana, Content at Codecademy

Codecademy & the 2015 State of the Union: Education for the Jobs of the Future

In his 2015 State of the Union Address, the President singled out technical education as a cornerstone of the effort to skill and re-skill Americans for the jobs of today. The President’s focus on equipping Americans with the tech skills necessary to keep the country competitive for the jobs of the future puts Codecademy one step closer to our mission of training and employing previously-unskilled workers in American technology jobs increasingly available across all industries.

Over the last three years, we’ve worked to build the easiest way to learn to code online. It’s been our belief since the beginning that any effort to keep Americans competitive and fully employed in the labor market of the 21st century would need to center around re-education, and that effective coding education could be built to reach anyone with an internet connection.

In November, we partnered with the leading non-traditional providers of coding education across the country to launch ReskillUSA, a partnership designed to educate Americans on the range of options that exist to teach absolute beginners the skills they need to find meaningful work.

Codecademy, alongside the educators involved in ReskillUSA, is thrilled that the president has come out in support of re-educating Americans to meet the demands modern labor market. We hope that his announcement helps focus debate about the American skills gap on how to re-educate our technical workers, and are grateful for The White House’s support as we continue to equip Americans with the skills for tomorrow’s technical jobs.

Codecademy on Campus: Launching UK Student Brand Ambassadors

So far this year, we have helped bring coding to classrooms in over a 1000 schools across England, and now we want to expand our reach and bring the skills required for 21st century jobs to Universities all over the country.

What does being a Brand Ambassador mean?

We are looking for passionate and innovative university students to represent Codecademy on their university campus. A brand ambassador’s main goal will be to improve awareness of Codecademy as a free resource, to improve an individual’s chances of getting a job. We want our brand ambassadors to hold Codecademy events and workshops, create communities of users who can support each other and provide outreach to local schools to continue our support to teachers in delivering the new computing curriculum. We want you to dedicate at least 5 hours per week to helping create these communities, and want you to hold the position for a full academic year.

What is in it for you?

You will be the face of Codecademy on Campus! We believe brand ambassadors will gain invaluable experience in event management, marketing, coaching and training. You will also gain insight into a fast growing start up as we expand internationally, with the opportunity to help shape Codecademy’s strategy and vision. This role will also offer great opportunities to network in the local start-up scene, summer internship opportunities and of course you will receive some awesome Codecademy merchandise!

How do I apply?

We accept single and group applications. All we require is a familiarity with Codecademy and that all applicants are currently students at a UK University. If you are interested, please send your CV and answers to the questions below with the subject line “Codecademy Brand Ambassador” to Rachel Swidenbank at rachel.swidenbank@codecademy.com. The deadline for applicants is 8/10/2014, but ongoing applications will be reviewed.

  • Why is coding so important to your generation?
  • How could you create a Codecademy community in your University?
  • Why do you think Codecademy should support schools?

The New Dashboard

Starting today, we’re introducing a new, redesigned Dashboard that unifies the old dashboard with the course catalog. We’ve done this for two main reasons: to make it easier to browse the content on Codecademy by putting all the skills you can learn in a single page, and secondly, to make it easier to gauge your overall progress on the site. Now, on the new Dashboard, you’ll be able to see which skills you’ve started learning—as well as your progress in them,—and which ones you’ve completed.

New Dashboard

You’ll also notice that we’ve opened up some room in the header. Don’t worry, your points are still alive and, as before, you can look at how you’re doing by accessing your Profile. Clicking the Codecademy logo will lead you to the new, unified Dashboard page. As for the Teach page link, you’ll now find it in the footer.

The final change you’ll notice is on the Profile. Now, your Profile will show only the skills you’ve completed. This is also where you’ll find Codebits.

We’re excited about these changes and we’d love to hear what you think. We’re committed to constantly improving your learning experience, so stay tuned for more updates!

Leveling the Playing Field for Women in CS with DonorsChoose and Codecademy

I’m proud to announce that Codecademy is partnering with DonorsChoose.org and Google in an effort to double the number of high school girls studying Computer Science. Google.org has committed $1 million to fund $125 DonorsChoose rewards for girls who complete a special Codecademy course. Meanwhile, teachers can earn an additional $500 in classroom rewards when four of their students make it through the course.

Education in critical skills should be accessible to everyone, regardless of their gender, where they live, their income, or any other factor. When we started Codecademy, there was a gap between the skills needed to find a job and the education available to students across the world. Programming, in particular, showed a massive achievement gap, with females representing only 12% of Computer Science degree graduates. We think fixing this problem requires efforts on many fronts: increasing the availability of education, providing role models for future students, and incentivizing students and their teachers to take the first step towards learning CS. We hope that today’s announcement will bolster the number of students who are exposed to Computer Science and choose to study it later in their academic careers.

Today’s partnership has another benefit beyond introducing more women to Computer Science. By working with DonorsChoose.org, we’re ensuring that the $1m in rewards that are disbursed help to improve access to technology and classroom materials. Every time a student completes a Codecademy course, they are helping to purchase new materials, like tablet PCs, textbooks, and more, for their classrooms. Not only are we better preparing our students, but we’re better preparing our classrooms as well.

At Codecademy, we spend every day focusing on how to increase access to the skills that everyone needs to find a job in the twenty-first century. Today’s announcement is one part of the solution, but it’s not the only one. Codecademy, along with DonorsChoose.org, Google, and so many others, will continue to work to make sure a great education is accessible to all.

Making Code the Universal Language

In 2013, I landed in Shanghai for a few meetings. My first few minutes walking around the city led to a conversation with a stranger I met in a bar after his long day of work. We discussed life in Shanghai, where he lived, how long he’d been in Shanghai, and what he did for a living. He told me he had just landed a new job with a programming consultancy in Shanghai, and said it all started with a website— Codecademy.com — through which he’d learned to code.

This scene repeated itself months later in Dublin, where I was meeting James Whelton of CoderDojo. We talked about programming education and noticed the couple next to us were talking about programming too. It turned out that they were both Dublin-based programmers - he for Facebook and she for a software consultancy. She talked about how she was planning to leave her job writing Apex (for Salesforce) to take a job writing Ruby, which she had just learned on Codecademy.

These stories aren’t unique — in fact, they’re a reality for most Codecademy users, 70% of whom live outside the United States. From the beginning, we’ve watched with amazement as Codecademy spread. The day we launched, we expected traffic to die down overnight in California, but we hadn’t taken into account that people were just signing on in other parts of the world. Since then, we’ve kept our global audience in mind with everything we’ve built, realizing that the power of an education transcends borders beyond the city we build Codecademy in and the language we speak.

Codecademy: Bringing Skills to You, Wherever You Are

Today, we’re bringing easy access to a world-class skills education to even more people across the world — hoping they’ll benefit from Codecademy in the same way that our more than 24 million existing learners have. We’ve worked to translate Codecademy to Spanish, Portuguese, and French, with more languages on the way. But that’s not all — we’re working closely to create communities and become embedded in new countries to help new learners all over the world become empowered with the skills they need to succeed in the 21st century. We’ve got amazing partners to help us bring Codecademy to five new countries (along with those that speak their languages!).

United Kingdom

The UK made news as the first G8 country to mandate programming education for all primary and secondary schoolers. We’ve worked hand-in-hand with many organizations in the UK over the past few years — sponsoring Code Club as they bring programming education to after school groups, working with the Computing At School network to help connect teachers with resources, and with the government itself to bring programming to classrooms — and we’re now doubling down on our commitment to the UK by opening our first international office in London, headed by Rachel Swidenbank.

France

Libraries Without Borders (Bibliothèques sans Frontières) has worked tirelessly over the past few years to expand access to literacy across French-speaking countries, among them Haiti, Cameroon, and others. Today, Codecademy is working with Libraries Without Borders to translate Codecademy into French and to implement pilot programs to reduce unemployment and including programming in schools. In addition, Codecademy will be a component of the recently announced Ideas Box (designed by Philippe Starck), a project that will be deployed in refugee camps and disaster zones across the world to empower individuals with the skills to improve their lives. Grants from the public and private sector in France helped to make all of this possible.

Brazil

The Lemann Foundation is the largest education foundation in Brazil, funding innovation on the K-12 level and elsewhere by fostering innovation inside the country and by bringing international technological developments to students. Codecademy is available in Portuguese today thanks to close work with the Lemann Foundation and will soon launch in several Brazilian pilots. One of our proudest moments was talking to Brazilian teachers a month ago in São Paolo about today’s launch of Codecademy in Portuguese, their native language.

Argentina and Buenos Aires

The Government of Buenos Aires, led by Mauricio Macri, has made an ambitious commitment to bringing skills and programming education to all of their citizens by working together with Codecademy. Jorge Aguado, the head of educational technology for the City, has worked to make sure that Buenos Aires is one of the first cities in South America (and the world!) to make a statement about its digital future, tying programming into every school in Buenos Aires, pursuing a campaign to provide skills to the unemployed, and to train government workers with technology. Both we and the government of Buenos Aires think this is the first commitment of its kind in the South American region and think it’s a terrific template for other cities (and governments) moving forward. Buenos Aires’ commitment is particularly notable given that its Spanish translations will be available to the entirety of the Spanish speaking world.

Estonia

Estonia’s Tiger Leap program has helped it become one of the most advanced digital economies in the world. We hope to support this commitment by working with the Estonian government to help every Estonian K-12 student learn to program.

Codecademy Speaks Spanish, Portuguese, French, and more!

It’s often said that code is the “language of the 21st century.” We at Codecademy think that code is a language that’s cross-border and truly international, and that our new work internationally is an essential step towards bringing advanced digital skills to people all over the world. We can’t wait to hear stories from the millions of new Codecademy learners to come and from the additional partners we’ll be announcing soon!


Building education for the world isn’t easy – technically or from a product perspective. Want to work on projects like this? We’re hiring!

EventHub: Open-sourced Funnel analysis, Cohort analysis and A/B testing tool

As product development becomes more and more data driven, the demand for essential data analysis tools has surged dramatically. Today, we are excited to announce that we’ve open sourced EventHub, an event analysis platform that enables startups to run their funnel and cohort analysis on their own servers. Getting EventHub deployed only requires downloading and executing a jar file. To give you a taste of what EventHub can do, we set up a demo server to play on located here - demo server with example funnel and cohort analysis queries. EventHub was designed to handle hundreds of events per seconds while running on a single commodity machine. With EventHub, you don’t need to worry about pricy bills. We did this to make it as frictionless as possible for anyone to start doing essential data analysis. While more details can be found from our repository, the following are some key observations, assumptions, and rationales behind the design.

funnel screenshot cohort screenshot

Architecture Overview

Basic funnel queries only requires two indices, a sorted map from (event_type and event_time) pair to events, and a sorted map from (user and event_time) pair to events

Basic cohort queries only requires one index, a sorted map from (event_type and event_time) pair to events.

A/B testing and power analysis are simply statistics calculation based on funnel conversion and pre-determined thresholds

Therefore, as long as the two indices in the first bullet point fit in memory, all basic analysis (queries by event_types and date range) can be done efficiently. Now, consider a hypothetical scenario in which there are one billion events and one million users. A sorted map implementation like AVL tree, RB tree, SkipList, etc. can be dismissed as the overhead of pointers would be prohibitively large. On the other hand, B+tree may seem to be a reasonable choice. However, since events are ordered and stored chronologically, sorted parallel arrays would be a much more space efficient and simpler implementation. That is, the first index from (event_type and event_time) pair to events can be implemented as having one array storing even\t_time for each event_type and another parallel array storing event_id, and similarly for the other index. Though separate indices are needed for looking up from event_type or user to their corresponding parallel arrays, as event_type and user are level of magnitude smaller than events, the space overhead is negligible.

With parallel array indices, the amount of memory needed is approximately (1B events * (8 bytes for timestamp + 8 bytes for event id)) * 2 = ~32G, which still seems prohibitively large. However, one of the biggest advantage of using parallel arraysis that within each array, the content is homogeneous and thus compression friendly. The compression requirement here is very similar to compressing posting list in search engines, and with algorithm like p4delta, the compressed indices can be reasonably expected to be <10G. In addition, EventHub made another important assumption that date is the finest granularity. As event id is assigned monotonically increasingly, the event id itself can then be thought of as some logical timestamp. As EventHub maintains another sorted map from date to the smallest event id on that date, all the queries filtered by date range can be translated to queries filtered by event id range. With that assumption, EventHub was able to get rid of the time array and further reduced the index size by half (<5G). Lastly, since indices are event_ids stored chronologically in an array, plus the array is stored as memory mapped file, the indices are very friendly to kernel page cache. Also, assuming most of the analysis only cares about recent events, as long as those tail of the indices can fit in the memory, most of the analysis can still be computed without touch disks.

At this point, as the size of the basic indices is small enough, EventHub would be able to answer basic funnel and cohort queries efficiently. However, since, there are no indices implemented for other properties on events, in case of queries filtered by event properties other than event_type, EventHub still needs to look up the event properties from disk and filter events accordingly. Due to the space and time complexity needed for this type of query is not easy to estimate analytically, but in practice, when we ran our internal analysis at Codecademy, the running time for most of the funnel or cohort queries with event properties filter is around few seconds. To optimize the query performance, the followings are some key features implemented and more details can be found from the repository.

Each event has a bloomfilter to quickly reject event property which doesn’t exactly match the filter

LRU Cache for events

Assuming the bloomfilters are in memory, EventHub only needs to do disk lookup for events that actually match the filter criteria (true positive) as well as the false positive events from bloomfilters. As, the size of bloomfilters can be configured, the false positive rate can be adjusted accordingly. Additionally, since most of the queries only involves recent events, to optimize the query performance, EventHub also keeps a LRU cache for events. Alternatively, EventHub could have implemented inverted index like search engines do to facilitate fast equality filters. The primarily reason for adopting bloomfilters with cache is that it doesn’t require adding more posting list as new event properties are added, and we believe for most use cases and with proper compression, EventHub can easily cache hundreds of million of events in memory and achieve low query latency.

Lastly, EventHub as is doesn’t compress the index and we left that as one of our todo. In addition, the following two features can be easily added to achieve higher throughput and lower latency if that’s needed.

Event properties can be stored as column oriented which will allow high compression rate and great cache locality

Events from each user in funnel analysis, cohort analysis, and A/B testing are independent. As a result, horizontal scalability can be trivially achieved from sharding by users.

As always, it’s open sourced, and pull requests are highly welcome.

If you like the post, you can follow me (@chengtao_chu) on Twitter or subscribe to my blog “ML in the Valley”. Also, special thanks Bob Ren (@bobrenjc93) for reading a draft of this

Why building a data science team is deceptively hard

More and more startups are looking to hire data scientists who can work autonomously to derive valuable insights from data. In principle, this sounds great: engineers and designers build the product, while data scientists crunch the numbers to gain insights. In practice, finding these data scientists and enabling them to be productive are very challenging tasks.

Before diving further, it’s useful to note a few trends in data and product development that have emerged over the past decade: Companies such as Google, Amazon and Netflix have shown that proper storage and analysis of data can lead to tremendous competitive advantages.

It’s now feasible for startups to instrument and collect vast amounts of usage data. Mobile is ubiquitous, and apps are constantly emitting data. Big data infrastructure has matured, which means large-scale data storage and analysis are affordable.

The widely adopted lean startup philosophy has shifted product development to be much more data-driven. Startups now face the challenges of defining Key Performance Indicators (KPI), designing and implementing A/B tests, understanding growth and engagement funnel conversion, building machine learning models, etc.

Because of these trends, startups are eager to develop in-house data science capabilities. Unfortunately many of them have the wrong ideas about how to build such a team. Let me describe three popular misconceptions.

Misconception #1: It’s okay to compromise the engineering bar for statistical skills.

For data scientists to work productively and independently, they must be able to navigate the entire technical stack and work effectively with existing systems to extract relevant data. The only exception is if a startup has already built out its data infrastructure. But in reality, very few startups have their infrastructure in place before building a data science team. In these cases, a data science team without strong engineering skills or engineering support will have a hard time doing their job. At best, they will produce suboptimal solution that will be rewritten by another team for production.

To illustrate this, take the example of building the KPI dashboard at Codecademy. Before visualizing the data in d3, I had to extract and join (a) user data from MongoDB, (b) cohort data from Redis, and (c) pageview data from Google Analytics. The data collection alone would’ve been near impossible without an engineering background, let alone making the dashboard real-time, modularized and reusable.

Misconception #2: It’s okay to compromise the statistics bar for engineering skills.

Proper interpretation of data is not easy, and misinterpreted data can do more damage than data that’s not interpreted at all (check out “Statistics done wrong”). Building useful machine learning (ML) models is trickier than most people expect. A popular but misguided view holds that ML problems can be solved either by applying some black box algorithm (a.k.a magic), or by hiring interns who are PhD students. In practice, hundreds of decisions and tradeoffs are made in solving such problems, and knowing which decisions to make requires a lot of experience. (I’ll expand upon this more in a future post titled “Machine learning done wrong”.) For a given ML problem, there are tens if not hundreds of way to solve it. Each solution makes different assumptions and it’s not obvious how to navigate and identify which assumptions are reasonable and which model should be used. Some would argue: why not just try all different approaches, cross validate, and see which one works the best? In reality, you never have the bandwidth to do so. A strong data scientist might be able to produce a sensible model right off the bat, while a weak one might spend months optimizing the wrong model without knowing where the problem is.

Misconception #3: It’s okay to hire data scientists who lack product thinking.

Imagine asking someone who doesn’t have a holistic view of the product to optimize your business KPIs. They may prematurely optimize the sign up funnel before making sure the product has reasonable retention, which would lead to more unretained users. Some think data-driven product development is a local optimization. This criticism is only correct when those who drive product development with data fail to think about the product holistically.

To sum up, a productive data science team requires data scientists that are strong in engineering, statistics, and product thinking. It’s hard. And it becomes even harder to look for the first data science hire who will be spearheading data efforts in a startup. For startups that don’t have the luxury to wait and hire these rare data scientists, it’s important to be aware of the compromises made especially in terms of the hiring bar. Before the data team is strong enough across all three areas, make sure they have strong support for the skills they lack, and don’t expect them to work autonomously.

If you like the post, you can follow me (@chengtao_chu) on Twitter or subscribe to “ML in the Valley”. Also, special thanks Ian Wong (@ihat), Leo Polovets, and Bob Ren (@bobrenjc93) for reading a draft of this.

We're Learning Too: A New Codecademy

Two years ago, we started building a product that would help teach people the skills they needed to succeed in a digital world. As more than 24 million people took Codecademy courses on our web and iOS platforms, we too learned and grew. Now, we’re excited to show you our latest project — a new Codecademy designed from the ground up, aimed to help you learn skills hands-on, with real projects, and constant feedback. Better yet, the new Codecademy experience helps to connect you with the real skills you’ll need to succeed in today’s workplace.

Logo

Learning isn’t just about one exercise or “class,” but instead is a gateway to community, opportunities, ideas, and a better life. We’ve witnessed this through the millions of learners on Codecademy and through the thousands of inspiring teachers who have shared their knowledge with the world with our course creator. We listened to them while building what we think is the best learning experience — for anyone, anywhere — to learn the most important skills of today.

In two years, Codecademy has scaled to become larger than we had ever imagined. Our learners, spread across the globe in every country in the world, have:



Today, we’re proud to show off the results of all of that to a few friends and, within days, the rest of the world. The first fruits of this effort are an experience that gets you from knowing nothing to building a website — in this case, Airbnb’s homepage. Along the way, you’ll experiment with blocks of code, see the results of adding and subtracting different parts of a page, and use the real terminology that developers and designers all over the world over use to create websites just like Airbnb’s.

Build a professional website

Our new platform leaves you not just with new knowledge, but with a portfolio of projects you can share with your friends, enabling them to learn from you. We’ve even built the capability for you to share your work with future employers, and to demonstrate your new skills. We’ve been testing our new learning interface for weeks and we’ve seen it applied in an amazing number of ways — from designers at major firms winning new consulting work because of their ability to build their designs to students in high school making personal webpages for themselves.

Learning environment

Codecademy’s learning experience comes not just from the data behind 24 million learners and billions of lines of code, but also from the individual stories we’ve heard from our wealth of committed learners. Former book critic Juliet Waters, for instance, started learning with her 11-year old son as part of our Code Year program in 2012. Since then, she’s gone on to chronicle her journey in a book that’s coming soon, noting that programming helped her feel “more connected with others in our tech-driven society.” A parent named Shari told us that her 11 and 13-year old sons had a “reaction to what they are learning [that] beats their enthusiasm for the [video games].” We work hard everyday to deliver a similar experience for our users all around the world — with more than 65% of users outside the US, it’s important to us that we’re democratizing access to the fundamental blocks of knowledge that can improve peoples’ lives.

Panel

Tommy Nicholas’ story is just the sort we’re hoping our new learning environment will foster: he began with almost no programming knowledge at all, and gained enough skills to develop a website, Coffitivity, that was named one of TIME Magazine’s Top 50 websites in 2013.



Billions of lines of code, millions of users, and years after our founding, we’ve been astonished by what people can do when they can easily learn the fundamental skills that can transform their lives. Today, we’ve redesigned Codecademy to reflect that potential — and hopefully to help more people reach their goals and build the future they want to live in.

If you want to help us, we’re hiring!

Codecademy Reimagined

We’ve been working hard over the past four months trying to reimagine Codecademy and we couldn’t be happier to finally unveil it to the world. We have redefined every component under our brand, from a single button on our dashboard to our email template, business cards, slides and even apparel.

We had been discussing a design refresh for a while, but somehow it always ended up being pushed to the side. Finally, in October last year, after completing a user segmentation project that brought to live the main user archetypes of Codecademy.com, it quickly became apparent that if we wanted to grow and mature as a brand, we required a thorough redesign of our entire product.


Why a redesign?

Reason #1 – Start fresh

First, there was the obvious problem of design incoherence and variation. This happened primarily because we lacked a well-defined color and font palette, a uniform visual language for our badges, a unified layout scheme (page types), and a cohesive strategy for all print materials – business cards, postcards, posters, etc. After two and a half years of multiple nip and tuck design fixes and additions, it was time to clean up the house and start fresh. This meant we could finally create an extensible UI pattern library (used and shared by designers and developers) and optimize our new face across multiple platforms by embracing a responsive design layout.

Some of our old webpages A random sampling of pages within our old web ecosystem, showcasing some visual design inconsistency.

Reason #2 – Brand matureness

Secondly, was the realization that our young startup look and feel was slowly becoming incompatible with our future goals and aspirations. In a time when we are engaged in several partnerships with schools, companies, and governments across the globe, while also continuing to fulfill the needs of our growing user base, our brand should feel a bit more mature, inviting, professional, and sophisticated.

Our old logo Codecademy’s quirky and undistinguished old logo was created by one of our co-founders in a few minutes by browsing through various fonts in a word processor. The logo featured the giddy lobster font, which has become so popular that is at times compared with Microsoft’s Comic Sans.


Our new look

Phase 1

Back in early November last year, we partnered with our friend Eddie Opara, and his immensely talented team of designers at Pentagram, in order to create a new visual identity that could better reflect the company’s age, ambition, and main attributes.

The first thing we tackled was the logo, as the key centerpiece of our new look. We spent some time talking to our users, colleagues, and our founders Zach and Ryan, to have a solid grasp of Codecademy’s perception and future aspirations. After this important research period, we went through several revisions, continuously narrowing down on the mark that best represented our main traits.

While putting the finishing touches to our new logo, we began creating a complementary color, font and iconography palette. It was important to handle all these components simultaneously, so we could delineate a consistent design thread through all of them. Phase 1 gave us the most critical building blocks of our new brand, through our partnership with Pentagram, and marked the beginning of an exclusive in-house development period.

Early directions of our logo Various early directions for our new logo.

narrowing down on the logo Narrowing down on a few favorite visual marks.

our final logo Our final logo with its underlying grid.

our new graphical language Our new graphical language used across the site to indicate different types of content (symbols), actions and controls (icons), and learning achievements (badges).

our new font FF DIN Rounded - Our primary typeface.

our new color palette Our new color palette.

Phase 2

After defining the main brand pieces with Pentagram (logo, typography, iconography, color), we started applying it internally to our entire web ecosystem by building a comprehensive number of reusable design patterns. For two weeks we built a sizable UI toolkit covering a variety of elements (see below).

our first UI toolkit Our first attempt at the UI toolkit encompassing only a short amount of elements.

our final toolkit Our growing UI toolkit covering every element, such as header, footer, form fields, button styles, sign up modules, grid, padding, typography, colors, and interactions.

Phase 3

This was the longest, and perhaps most exhausting, of all phases, where we redesigned 70+ webpages in tandem with other collateral material (email templates, slides, apparel, etc). Fortunately, we imposed ourselves a very well defined timeline, with multiple cycles and milestones, which helped us guide through this large task (see sitemap below).

sitemap First, we created a comprehensive sitemap of Codecademy.com and then divided the sitemap into four groups, each representing a 2-week delivery cycle. As we redesigned the various pages in each cycle, our brilliant team of developers built our UI styleguide and constructed many of the pages based on the shared design patterns.

examples 1 Examples of our redesigned pages, from left to right: Enterprise, Stories, Profile.

examples 2 Examples of our redesigned pages, from left to right: Blog, About, Jobs.

examples 3 Examples of our redesigned pages, from left to right: Help Center, UK Curriculum, Hour of Code.

Phase 4

Our final phase was all about making sure we were building the thing right. We implemented and tested our new redesign, while in the process getting feedback from our community. We created a huge amount of redlines for all the new material, started experimenting with some versions live on the site, and listened to dozens of comments from our selected users and moderators.

redlines An example of the various comps created to support the accurate implementation of all our redesigned pages.


The beginning

Even though we spent a long time rethinking Codecademy, this hefty work is still unfinished. It certainly provides our team and product with a much-needed fresh face, one that we can feel proud of, and most importantly, one that our users can thoroughly enjoy. But this is just the beginning. We would love to hear what you have to say about our redesign and how we can continue improving our product. We have dozens of ideas to continue pushing this brand foreword. Please keep coming back for more!

Codecademy's First iPhone App

Codecademy started to help anyone learn the skills they need in order to succeed in the twenty-first century. We want Codecademy to be with you everywhere - learning shouldn’t be confined to a classroom or a desktop computer.

We launched our first iPhone app, Codecademy: Hour of Code, for anyone in the world to get started learning to code on the go. We’ve built an entirely new Codecademy experience for mobile that includes the same things that make Codecademy on the web great - interactivity, “snack” sized content, and fun lessons. Our first app gives you the basics of programming and should help absolutely anyone get started with programming - it’s almost too easy not to try!

alt text

We’ll send content updates to this app with more courses for you to complete as time goes on. You’ll see more feature updates as well.

Perhaps best of all, this is just the beginning of Codecademy on the go. We want to help you learn the skills that can help you change your life - anywhere and anytime. Download our first app and let us know what you think!

Codecademy & English Computing Curriculum

Today, Codecademy is really pleased to announce our partnership with Computing at School (CAS), the leading authority on the new computing curriculum in England. England is the first country to mandate programing in schools. Starting in September 2014, students aged between 5-16 will learn HTML, CSS, Python and JavaScript. CAS were largely responsible for designing the curriculum objectives, and are leading the way in teacher training.

Teacher training is critically important and Codecademy is pleased to partner with CAS to be a part of the solution. Teachers can use Codecademy resources after they’ve attended training sessions to continue building their skills, and remote teachers can access the platform if they are unable to attend in person training sessions. Below is the official announcement:

From September 2014 schools in England will teach a new statutory computing curriculum, which aims to ensure all students can understand and apply the fundamental principles and concepts of computer science. This will make England the educational envy of almost every other country in the world, but it will also be a major step change from what schools currently teach. Not surprisingly this has left many teachers looking for support and further training.

CAS is running a national Network of Excellence for Teaching Computer Science, that aims to provide exactly this support and training. Codecademy, based in New York, will complement CAS’s in-person approach with a free online platform and interactive learning resources specifically designed to support the programming aspects of the new computing curriculum in England. Teachers can use it to learn programming themselves, or as a way to teach programming to their students.

Simon Peyton-Jones, Chair of CAS says “The UK has tens of thousands of teachers who need support and encouragement to deliver the new Computing curriculum with confidence and enthusiasm. Codecademy offers us the scalability of an online platform, and teachers can move smoothly from learning programming themselves to Codecademy to teach their students. I’m delighted to have this support.”

Codecademy Goes to Back to School

alt text

It’s that time of the year again. The air is crisper, lattes are spiced with pumpkin-flavor extract, and Codecademy is coming to a campus near you!

Codecademy is taking to the road for a whirl-wind college tour up and down the eastern seaboard. We’ve had a great time sharing stores from our college fellowship program and spilling the technical details on how we evaluate up to 5,000 code submissions a second (over 25 million a day!)

alt text

So far, we’ve had a turnout at Brown that would scare any fire marshall and we’ve stayed up all night to hack with the best and brightest at MIT’s blow-out HackMIT event. But we’re just getting started, so come join us if we’re visiting a campus near you!

Hope to see you soon!


MIT tech talk 10/8 at 7pm Bldg 5, Room 233

Olin tech talk 10/9 at 7pm Academic Center 126

Princeton talk 10/11 at 9pm Code@Night

MIT On campus interviews 10/25 Apply on careerbridge, if interested

Codecademy at HackMIT

A few of us at Codecademy spent the weekend at MIT for HackMIT - a hackathon involving over 1000 college students from around the world. It’s been an awesome experience seeing so many coders in one location hacking away at amazing projects.

The atmosphere inspired us to start hacking ourselves. For our hack, we decided to programmatically find the most active Codecademy users at HackMIT and give them some love and swag.

By querying our database for all of the emails of attendees at HackMIT, we were able to find all the Codecademy users in attendance. We then sorted the list of users by points and achievements to find the top 3 most active Codecademy users at HackMIT.

Here is a photo of us with our top HackMIT user - spiltpeasoup!

We were surprised to find out that over 25% of hackers at HackMIT have a Codecademy account! If you are at HackMIT this weekend, stop by and say hi!

Progress Updates to Our Learning Interface

A few weeks ago, we released some updates to Codecademy that make it easier for you to keep track of what you’re learning and how far you’ve progressed.

Improved Navigation

The name of the track and the course are now always visible. Additionally, we enhanced the exercise navigator so now you can switch between sections without leaving the interface.

Updates to Orientation

Track Progress

Whenever you finish a section, you’ll see a subtle indicator telling you what percent of the track you’ve finished.

Updates to Track Progress

We hope you like these changes!

Codecademy Site Downtime Friday 9/13

As some of you may have realized, Friday morning at about 10:00am, our site was not operable for 2 hours. We apologize for the inconvenience and wanted to explain to you why this happened.

Our hosting provider, Amazon Web Services (AWS), was having networking issues. This affected our app servers, app load balancer, and redis boxes. Some of you may have noticed a 503 error, which was thrown by our CDN (content delivery network). During these two hours, we are able to restore the site, but because of the networking issues, the site was very slow. At 12:07 Amazon Web Services restored the issue, and the site was back up and running as normal. Because this was a networking issue, no content or progress was lost.

Again we apologize for any inconvenience caused by this downtime. Unfortunately this particular issue was out of our control. We’re investigating ways we can add greater redundancy to Codecademy to help ensure we’re protected from similar issues in the future.

See what we posted on [twitter] (https://twitter.com/Codecademy) Friday morning.

Glossary Redesign

We’re always asking ourselves how we can help users when they get stuck while working through our courses. I had an idea at a company hackathon that turned into a big project.

For the past few weeks we’ve been running my idea as an experiment: when certain users write code that returns a common syntax error, we show them a snippet of code from the glossary that’s an example of what they were trying to do.

The idea was that people need to see examples of good code before they can learn how to write good code.

In order to do this we had to redo the internals of the glossary to be more dynamic. With that done, another great result has been that we were able to hand over editing privileges to our moderators, who have been thrilled to take ownership of this part of the site and improve the content. They’ve been doing a good job of cleaning it up and adding to it, and this will be an on-going thing.

The best part of this is that as the moderators improve our glossary, the code suggestion feature will get smarter and show more examples! They come right from the glossary.

The overhaul was also aesthetic; the glossary is now much prettier and easier to read. The typography improved thanks to some expertise from our designer Jason and the code samples now match the color of our code editor.

Go take a look!

codecademy.com/glossary/javascript codecademy.com/glossary/python codecademy.com/glossary/ruby codecademy.com/glossary/html codecademy.com/glossary/css

Learn Page Redesign

We’ve recently launched our new Learn Page. In case you haven’t noticed, please see it in detail here.

alt text

This redesign was long overdue and we’ve collected many tips and ideas from our community over the past few months. The goals of the new layout were the following:

  • Provide a clearer order and grouping of content, divided between individual languages and goal-driven paths (Web Projects and APIs for now).
  • Suggest a clear starting point for newcomers (Web Fundamentals) placed at the very top of the page.
  • Deliver an indication of progress on all initiated tracks. Notice how the “Explore” button changes into a “Continue” button with corresponding completion percentage on all ongoing courses.
  • Offer a redesign more in line with our brand and existing color scheme.

We hope you like it, and as always please let us know if you have any thoughts or suggestions.

Five Things We're Reading This Week

Education never exists in a vacuum. Here’s what we’ve been reading this week.

Andrew McAffee: What will future jobs look like?

“In this TED talk an economist outlines trends in the global job market, particularly the growing divide between middle class workers who have and do not have the skills to fully engage in a technology-dominated future.”

Brett, product manager

Don’t Blame the Work Force

“This controversial editorial from the New York Times suggests that the skills gap isn’t so real, it’s that companies simply don’t want to pay skilled workers what they are worth.”

Douglas, code literacy evangelist

How Caffeine Can Cramp Creativity

coffee

Fascinating read on coffee’s relationship to creativity. “I thought I was hardcore, but Balzac takes the cake: ‘He pulverized coffee beans into a fine dust and ingested the dry powder on an empty stomach. He described the approach as ‘horrible, rather brutal,’ to be tried only by men of ‘excessive vigor.’”

Zach, co-founder

In Head-Hunting, Big Data May Not Be Such a Big Deal

“Takeaways: * Brainteasers are useless * GPAs are worthless * Consistency == good leadership”

Amjad, lead engineer

Apple: Making a difference, one app at a time

“This new marketing video focuses on people creating apps to solve meaningful problems like remote healthcare and helping children who can’t communicate in traditional ways. It underlines the “I’m not a programmer - I just wanted to solve this problem” message that gets to the core of learning to code.”

— Brett, product manager

What Language Do You Need to Know?

This is a post by Eric Weinstein, creator of many Codecademy courses and a current student at Hacker School.

There’s a lot to learn when it comes to coding. How do you know where to start? Should you learn HTML or JavaScript? What’s the difference between Python and Ruby? What are “client-side” and “server-side” languages, “front end” and “back end” and how are they different? Hopefully this quick post will help you choose the language best suited for what you want to do.

To edit webpages

If you’re interested in creating a static website or a single webpage, you should start with Web Fundamentals of HTML and CSS. HTML stands for Hyper Text Markup Language and describes the structure of webpages. CSS stands for Cascading Style Sheets, and controls their appearance — for example, the font color or the position of text on the page.

To make them interactive

If you want to give your website behavior—think automatic Twitter updates, your Facebook notifications, or the ability to drag and drop elements of your LinkedIn profile—then you’ll want to learn JavaScript and jQuery. JavaScript is a frontend, or “client-side” language which means it runs on the web browser of the person visiting your site. jQuery is a library of specific JavaScript tools designed to make website interaction more awesome.

To store user information

If you want to develop a full-blown web app that lets users log in and saves information for them (such as tweets, Facebook posts, or Codecademy badges), you’ll want to learn a backend, or “server-side” language like PHP, Python, Ruby or JavaScript (it’s ambidextrous). These languages run on the computer where the website code lives, also called the server. You can accomplish the same things and build the same kinds of projects with each of them, so go ahead and pick your favorite!

Which language will you start with?

Floor Drees: How to Learn by Teaching

This is a guest post from Floor Drees, who is organizing a beginner’s course in Python in Vienna, Austria on July 20th.

Floor

Who are you and what are you about?

My name is Floor (yes, really) Drees, and I’m originally from The Netherlands. Currently I work as a tech reporter and developer evangelist in Austria, and make time to organize and coach at Rails Girls events, and co-organize the vienna.rb meetups and PyLadies events on the side.

After learning Rails, why did you decide to pick up Python?

For me, learning doesn’t stop when you kind of understand one language. If anything, I learned a lot from looking at Rails and Java code at the same time! The similarities and differences help you get the hang of it.

You’re just starting out with this language yourself — why teach it to others?

I’m somewhat confident with HTML, CSS and Rails and I like to share my experience when it comes to learning and teaching programming. I genuinely believe that teaching skyrockets your own learning curve and would encourage everyone to start coaching beginners, even if you feel you are still a beginner.

How did you start organizing coding events?

I tend to challenge myself and my ability to learn quite a bit — when I first thought about tackling Python I soon found myself starting my own PyLadies chapter in Vienna. PyLadies is this great worldwide network that empowers female coders in the Python community.

I boldly decided to list a beginners workshop on Meetup.com and then of course needed to come up with a program. After going through the Python track on Codecademy I decided I wasn’t going to come up with something more fun to do — with such a great resource around, why not use it?

What can beginners do to get better at coding?

One fun way to better your programming skills is CheckiO, a web-based game where you need to code Python to get to the next level. This startup from the Ukraine lets you to challenge yourself and your friends to write more elegant code in a fun way.

Learning on your own tends to get lonely, so I’d advise anyone to look for user groups in their city. The Python community is very friendly and it shouldn’t be a problem to find a mentor who is willing to answer your questions when you need.

Any parting words?

If you happen to be in Vienna next month, stop by our Pyladies event! Contrary to the name, anyone can apply to attend. We invite experienced Python developers to help you out, along with great sponsors and coaches for lightning talks. There will be cookies. And Codecademy stickers. ;)

The NSA, Code Literacy, and You

Whatever we might think of Edward Snowden’s release of classified documents detailing the NSA’s snooping on America’s - well, everyone’s - communications, at least we all now know what’s going on.

Sure, most of us on the coding side of the screen already knew the deal. I haven’t found a programmer who was surprised by the news that our emails, text messages, and phone calls are being logged and stored. If anything, most of them are surprised that the general public seems so shocked. What were people thinking? That Google just gives us services like Gmail for free? We pay for this stuff - not with cash, but with our data.

None of our data may be so interesting in itself, but when it’s combined with everyone else’s it reveals a whole lot of information about us. Using factor analysis and other statistical techniques, big data can identify members of a population who might be about to purchase a new car, trying to have a baby, or even about to change political affiliations. No logic is required; the people and machines analyzing big data sets don’t care about why one set of data points might indicate some other data point; they only care that it does.

As long as corporations from Facebook to Twitter are collecting and using this data, why shouldn’t government get in on the act? Instead of looking for potential car buyers or new mothers, however, government is looking for potential terrorists. Or at least that’s what they say. In reality, the sample size of known terrorists is so small that it’s essentially impossible to draw statistical conclusions about their data. The only way to know what they’re saying is to listen to what they’re saying. Luckily (or terrifyingly, depending on your perspective) voice calls can be scanned for keywords as easily as a text document. The conversation can then be parsed by humans to determine whether there’s a threat.

The big news here, if any, is that now this stuff is public knowledge. Most of my friends and colleagues knew about government surveillance of digital communications, already. Some former students had even told me about installing switches at cell phone companies to be used for government snooping. Others helped write the database architecture for facilities that store voicemail long after it has been “deleted” by its recipients. Most of them were relieved that the information they were afraid to leak themselves is finally out.

But they aren’t the only ones who had foreknowledge of this recent leak. Pretty much anybody who knows how code works was prepared for this sort of revelation. Because becoming code fluent is about more than simply knowing enough javascript to get a job. It’s a way to become familiar with the operating system on which the human drama is playing itself out.

Moreover, the better you understand the programs and platforms you use - and the permanence of almost everything you do online - the better equipped you will be to choose what the data watchers know about you, and what they don’t.

May the digitally illiterate proceed at their own risk. Once again, you have been warned.

Three Ways Coding Kickstarts Your Career

Whether it’s moving up in your job or getting a new one entirely, there’s always a way to put code to work for you. Here are three ways users have applied their new skillset to take them where they want to go.

1. Find a new job

Liz was laid off from her administrative position this past November, and at 55 — without a college degree — she needed a way to make her resume stand a chance. Key web coding skills such as JavaScript, jQuery, Ruby, HTML/CSS, and Python helped shoot her to the head of the queue. What else? “My daily hard work on Codecademy gave me a feeling of competence, which helped me to be confident and knowledgeable in my interviews.”

Find out how she did it

2. Land a promotion

Tim’s office at the University of York uses Google Forms to automate housing transfer requests from thousands of students. After a few lessons he used JavaScript to write a Google Apps Script that sends a confirmation email as well, and that project slowly grew into building an entire dashboard to manage the transfer process from start to finish. The result? A nice promotion to the Data Analysis team, and a big boost of confidence.

Read his story

3. Become a developer

While working in the music industry, Jennifer started dabbling in web development and noticed that the hours seemed to pass quicker than before. She decided to move from a full-time position in music to working as an intern and studying in the evenings — but, she says, “this really accelerated my learning. During the day, I continued to improve my HTML and CSS skills while I worked on the Codecademy JavaScript and jQuery coursework in the evenings.” Slowly but surely she became a full-time staff developer and now works at a SaaS startup.

Get her tips

Angie Chang: How I Learned to Code

What did you study in college?

After barely passing the Computer Science major requirements at UC Berkeley, I decided to focus on easier topics to graduate with: English and Social Welfare.

How did you get into tech?

When I graduated I had years of building websites under my belt, so my first job was at a venture-backed startup. I quickly learned how lonely it can be as a woman on an all-male engineering teams, so I went on to start Women 2.0 to meet like-minded entrepreneurial women in tech, and then two years later started Bay Area Girl Geek Dinners to meet even MORE of them! Women in tech DO exist in droves!

What are you currently working on?

Currently I’m working to change the ratio of women in engineering as Director of Growth at Hackbright Academy. An accelerated software development program solely for women, we attract students from all over the world and pair them with software engineer mentors to help them find work in tech. Now our students are working at partner companies and commanding some pretty impressive salaries after graduating from the 10-week program.

When did you get into programming?

In high school we got AOL at home and I was fascinated by the Internet. I looked at the HTML behind the simple webpages in 1999, and learned to write my own code and put up webpages. As a shy and quiet student, I supported my friends in leadership positions by creating their websites, and they started referring me to paid positions. And so it goes.

How did you learn to program?

Learning to program is simply being curious about how things work. How does this webpage render? What makes that do that? You peek behind the curtain, like they did in Wizard of Oz, and find that it’s lines of code that eventually make sense after you do a lot of Googling and asking questions.

mentoring

Google is a great resource for learning to program, as well as simply hanging out with other people who like to code. When sitting next to another person on their laptop coding (I think we call this “co-working” now), you can ask questions aloud and have them answered right away.

Your 140 character tip for aspiring founders?

Just start asking questions out loud - over Twitter, Facebook, LinkedIn - and you will learn from the answers you receive. Start iterating on your idea, and it will snowball.

Every Child Can Learn To Code

We are proud to partner with Google and Mozilla in supporting Code Club UK as it expands across the globe. We’ve seen the impact coding has on children first hand at Codecademy, and we are excited to watch Code Club open in more countries.

Code Club UK is a volunteer network of after-school coding clubs that exposes children aged 9 to 11 to programming. Their open source Code Club World initiative now extends the same opportunity to children everywhere, with materials in Norwegian, Ukranian, German, Brazilian Portuguese and Dutch — as well as hosting them on GitHub for programmers worldwide to translate and use in their own coding clubs.

Their mission — “to give every child in the world a chance to learn to code — complements our own and we can’t wait to see everyone, young and old, have the opportunity to learn to program. Onwards!

Your Guide to Semicolons in JavaScript

This is a guest post by moderator Alex J. If you see him in the forums, say hello!

When do you need a semicolon? Here’s a handy cheat sheet…

Required: When two statements are on the same line

The semicolon is only obligatory when you have two or more statements on the same line:

var i = 0; i++        // <-- semicolon obligatory
                      //     (but optional before newline)
var i = 0             // <-- semicolon optional
    i++               // <-- semicolon optional

Optional: After statements

The semicolon in JavaScript is used to separate statements, but it can be omitted if the statement is followed by a line break (or there’s only one statement in a {block}). A statement is a piece of code that tells the computer to do something. Here are the most common types of statements:

var i;                        // variable declaration
i = 5;                        // value assignment
i = i + 1;                    // value assignment
i++;                          // same as above
var x = 9;                    // declaration & assignment
var fun = function() {...};   // var decl., assignmt, and func. defin.
alert("hi");                  // function call

All of these statements can end with a ; but none of them must. Some consider it a good habit to terminate each statement with a ; – that makes your code a little easier to parse, and to compress: if you remove line breaks you needn’t worry about several statements ending up unseparated on the same line.

Avoid!

1. After a closing curly bracket

You shouldn’t put a semicolon after a closing curly bracket }. The only exceptions are assignment statements, such as var obj = {};, see above.

// NO semicolons after }:
if  (...) {...} else {...}
for (...) {...}
while (...) {...}

// BUT:
do {...} while (...);

// function statement: 
function (arg) { /*do this*/ } // NO semicolon after }

2. After the round bracket of an if, for, while or switch statement

It won’t harm to put a semicolon after the { } of an if statement (it will be ignored, and you might see a warning that it’s unnecessary). But a semicolon where it doesn’t belong (such as after the round (brackets) of an if, for, while, or switch statement) is a very bad idea:

if (0 === 1); { alert("hi") }

// equivalent to:

if (0 === 1) /*do nothing*/ ;
alert ("hi");

This code will alert “hi”, but not because 0 equals 1, but because of the semicolon. It makes JavaScript think that you have an empty statement there, and everything to the right of it is treated as no longer belonging to the if conditional and thus independent of it.

Of course there’s an exception…

An important quirk: inside the () of a for loop, semicolons only go after the first and second statement, never after the third:

for (var i=0; i < 10; i++)  {/*actions*/}       // correct
for (var i=0; i < 10; i++;) {/*actions*/}       // SyntaxError

How to fix your semicolons

The JavaScript syntax proofing tool JSLint, which is built into the Codecademy code editor, does a pretty good job of finding unnecessary semicolons – or missing ones.

It’ll show you yellow warning triangles in code lines. Hovering the mouse over a triangle will tell you if there’s a missing semicolon or an unnecessary one. You can generally trust those warnings until you develop an intuition of where to use semicolons and where not to.

Getting Started with Git

This is the first of a three post series by one of our moderators, Joah Gerstenberg.

What’s git?

Git is a Version Control System (VCS), a tool used by coders around the world to keep track of their code and the changes they have made to it. A VCS will save a snapshot each time you check your code into the VCS, allowing you to go back to any revision along the way and restore your code to the way it was then.

Every programmer should use a VCS.

Here’s why:

Ever made change to your code, but just after you saved the file, you realized that you made a horrible mistake and you need to go back? A VCS lets you quickly jump back to before you made the mistake.

Ever wanted to be able to prove (or disprove) that one particular line of code is breaking your project? A VCS lets you see multiple revisions of your code to enable you to do just that.

Ever wanted to try out a new innovative feature in your project without accidentally messing up the project altogether? A VCS lets you create parallel deviations to your code which can later be merged into the final project.

Step 1: Download git

Although not alone with alternatives such as SVN or Mercurial, Git is by far the most popular VCS available.

Get started with git by downloading the appropriate package from Git’s Download Page for your OS. Git installs by default as a command-line tool, so follow the appropriate instructions to access the git command line for your OS (in Mac and Linux, simply go to the Terminal).

From there, all you need to do is cd into the directory your code is stored in, and git init. That will initiate a versioned git repository in the current directory you are in.

Step 2: Add a new revision

When you are ready to add a new revision to the git repository’s records, simply (while cd‘d into the git repository) git add what you want to add to this specific revision. For example, if your folder was like this:

- Code # <== this is a git repo
|- index.html
|- js
 |- script.js
|- css
 |- style.css
|- img
|- .git # <== this is a hidden directory, but exists if {Code} is a git repo

And you just wanted to add the changes in /js to your current revision, simply use git add js, or if you wanted to just add the style.css file, you would use git add css/style.css.

Step 3: Commit your revision

Git uses the term “commit” for the different versions recorded to connote that you are “committing” the current code to the pretty-much-permanent record held by the git repo. Once you have git add‘d the files you want to be a part of your next commit, simply use git commit -m "Your Commit Message Here".

Git highly recommends that you include a commit message as a part of your commit, so that you, and anyone else looking at your code, can easily recognize what the current version of the code does. One less-known trick that you can use while using the git command line is that you can use git commit -m "" --allow-empty-message, and bypass having to supply a message with your commit.

Step 4: To the Internet!

By following the above instructions, all your code and commits associated with it will be stored locally on your computer. This is perfectly acceptable, but in my next post I’ll discuss the more popular approach; storing your code online with a service such as GitHub.

Getting Things Done > Grade Point Average

This post by Alexis Ohanian, co-founder of reddit, was originally published on LinkedIn.

Graduation

We’re a generation in debt.

I had a world-class education at the University of Virginia. I met my reddit co-founder Steve Huffman there on move-in day. That chance encounter changed both of our lives. I had some awesome professors. There was the fortuitous trip to Waffle House that convinced me I wanted to be an entrepreneur, not a lawyer. I’ve written the book about internet entrepreneurship I wish I had back then. But my kids won’t have the same education I did. And that’s a good thing.

A year ago I sat on a panel at the White House for a room full of deans from universities across the country. We were tasked to talk about entrepreneurship and how to better prepare our nation’s undergraduates for an uncertain job market.

“A critical skill I see in great entrepreneurs and employees alike is resourcefulness. Resourcefulness doesn’t come from case-studies, it comes from doing things.”

This turned out to be quite the applause line.

Paul Graham says the best founders are “relentlessly resourceful.”

I’ve been thinking about that day in D.C. ever since.

Getting Things Done > Grade Point Average

I’m an employer and I don’t really care where you went to school or what your GPA was – I want to know what you’ve done. Paid off student loan debt by tutoring computer science in New York? Rock on. Raised $20,000 on kickstarter for a daft punk tribute album? Awesome! Started the ‘dear photograph’ meme? Splendid! Blogged years worth of eating across the world and now creating food-tour-guides? Now we’re cooking with bacon.

Read the full article


How Kids Can Learn to Code

Designer Jeffrey Karl illustrated a Codecademy Kids for the iPad app to help more kids learn how to code. While not developed (yet!), his ideas show how to get any child interested in coding.

Why do you think kids should learn to code?

It’s not that you need to master code, but everyone should know the basics. I had heard about how the country of Estonia mandated that elementary school students learn how to program, and also how there are not enough code literate people. There’s a big barrier to entry to learning how to code - so how do you lower it?

How do you get them started?

One way to make kids excited about coding - or learning anything for that matter - is providing context for whatever subject it is you want to teach them (“If you learn this, you’ll be able to…”). Let them know that if they code they’ll be able to make their own games, or code their own website, or maybe just having fun with a more game-like or story-driven experience will be enough.

Coding is intimidating even to adults - how does this app help?

I wanted it to feel very tactile, like a child’s arts and crafts project — each interactive element in the app is something to move around.

I used drag and drop (roughly borrowed from Scratch) to simplify the experience. I had the idea of having pre-made tools; for kids, they don’t need to know the intricacies of writing code. So say you want to write an If / Else function in JavaScript. Drag and drop a function from the toolbox onto the looseleaf paper, then go back and grab the If / Else bit and drop it inside of the function. You’ll see them expand so you can look at syntax. In the beginning, it’s more the structuring of code that matters.

Without badges, what’s the motivation for kids to do lessons?

Instead of getting badges for the sake of badges, in this app you’re getting robot parts so that you can build a robot of your choice.

A robot represents a course. We need help building this robot and you do that by completing the lessons. There are different sized lessons so that you can add a leg and an arm, and it’s fine to add three arms to make a really big robot (or a really long lesson) too! Each of the sections highlights a different part of the body.

As a game designer, how do you keep kids engaged?

I recently saw a talk given by Sebastian Deterding. He stressed that gamification is more than badges, leaderboards and points; it’s about providing a meaningful experience for the user. One way to do that is through creating a fun story. This was basically the solution I used with Codecademy Kids for the iPad: the current system of badges aren’t really related in any meaningful way - save the overlapping skill set it takes to complete each. Providing a storyline where kids can help this friendly character, Ratchet the monkey, build the individual parts of a robot is one way to contextualize these lessons for children.

How To Build an App

Did you know you can create an app using JavaScript? Read these three stories of users who went on to do just that.

1. Jonathan and SimpleTax

Jonathan never wanted to become a programmer, he wanted to learn to solve problems. With Code Year, he got the skills to do that. Now he’s building an app to simplify doing your taxes.

2. Ryan and Sworkit

Last year Ryan was looking for ways to learn to code. After trying books, videos and articles, he stumbled upon Codecademy. Armed with the skills he learned there, Ryan wanted to build something of his own.

3. Michael and GVING

When Michael Perry founded GVING, he knew he would have to learn to code eventually. With Codecademy (and the help of some friends) he finally met his goal.

Code in the Classroom

This is an excerpt of an article by Jon L. Denby of NYU explaining a Coding 101 course using our curriculum. If you’re interested in using Codecademy in the classroom, get started here.

“If you don’t speak ‘computer’ in our current economy, it’s a little like not being able to read the street signs; it’s a major handicap,” says Leibovitz.

Thankfully, there is no shortage of students eager to learn.

Leibovitz’s first class, co-taught with programmer David Hu in fall 2012, had only 50 seats available. They were all reserved in less than three minutes of class registration opening, and the wait list grew to 120 students.

While teaching courses at NYU Steinhardt like Video Game Theory, Video Game Industry, and Digital Literacy, Professor Leibovitz realized that many of his students lacked an understanding of how digital systems actually worked. He was looking for a simple way to teach his students computer programming when he stumbled upon the Codecademy website:

I realized it was a really, really good solution for several reasons. First of all, it was something that was modular. You could do it on your own time. You could do several units, or all the units or tracks. It really gave you options.

It was also based on real-world, complete projectsI mean every single track that you have there is based on building a game, building a tip-calculator, building a Blackjack game, building a choose-your-own-adventure game—all kinds of real-world projects. It was written in this language that I thought would resonate tremendously well with our students because it was down to earth, it was English, it was easy to understand.

Continue reading here.

Getting Comfortable in the Terminal: Linux

This is a guest post by Daniel Seymour, one of the Codecademy moderators, with editing help from Alex Craig and Dustin Goodman.

“I see a blinking cursor. WHAT DO I DO?!”

When you hear the word “command line”, “terminal,” or “little window that tells a computer what to do but only has a flashing cursor in it,” what comes to mind? Do you scream and hide under your bed? Or do you look at me inquisitively and wonder why I would bring such a scary thing up?

I hate to tell you this, but you MUST conquer your fear of the terminal (if you have a fear) and learn how to use that annoying little window with a flashing line in it. A *nix (Unix (like Mac), Linux) system is an operating system that can enable you to do some rather amazing stuff quite quickly, if you know what you are doing in the terminal. Before I start throwing terms at you I need to define a few.

Basic Terms

OS: Operating System, the program that tells the different pieces of hardware how to work together to make a comprehensive system. GUI: Graphical User Interface, essentially the little window that has buttons you can click that often hides the power of the terminal. Terminal: Part of the computer that allows you to issue commands to the computer and directly interface with the OS. Executable: Executable file, file used to execute a program on your computer.

Now that you have a rudimentary computer vocabulary, you can start conquering your fear. I use the terminal all the time and am able to do basic things faster, such as pushing to Github, connecting to a network, etc. I currently use a command-line-based Linux distribution. On the rare occasion that I have to use Windows, most of the basic jobs of the computer, such as connecting to a wifi network, take so long that I feel like I am waiting for a marathon to end.

Step 1: Find your Terminal

So how should you start conquering your fear? I would suggest finding the terminal on your system. For this first part, I am going to assume that you are using a Linux distribution such as Ubuntu, Linux Mint, Fedora, OpenSUSE, or Debian (to name a few). On any regular GUI-based Linux system, go to the applications menu and search for terminal. When you find it, open it and stare at that blinking cursor for a few seconds while saying, “I will learn to use this thing.” :) (You can skip the staring if you want.)

Step 2: Start an Application

The most basic operation that a user can do from the terminal is start an application. On almost every Linux system, simply using the name of the executable in the /usr/bin directory will start the application. For example, starting the Firefox web browser simply requires typing “firefox” into the command line and pressing enter. You should now see a session of Firefox launch on your desktop. Congratulations! You just executed your first command from the terminal!

Note: Launching an application from the terminal will lock that terminal instance so that you cannot do anything else with it. If you want to be able to use the terminal for other activities, trailing the application executable name with a “&” will put the process in the background of the terminal and you will be able to use the terminal for other things.

Step 3: Get Specific

Launching an application is not all that the terminal can do. You can launch applications and tell the application to edit such and such file (in the case of a text editor, such as Nano, Vim, or Emacs. Nano is the default terminal text editor for most Linux distributions) or you can tell a web browser to launch such and such a web page. For example, the command:

firefox www.codecademy.com

will launch a session of firefox and open the session on the Codecademy home page.

Step 4: Entering Commands

Now that you know how to launch an application, you will also need to know how to traverse the file system straight from the terminal as doing so is a big part of many operations that are done in the terminal.

To start off, enter the command pwd. You should now see something along the lines of

/home/{username}/

The above command stands for Print Working Directory so the directory that you see posted to the terminal is the directory that the terminal is currently in. Now enter the command “ls”. You should now see something along the lines of:

Desktop/    Documents/    Downloads/    Music/    Pictures/    Videos/

And all of the other folders that your home directory contains. The ls command can be thought of as standing for LiSt the contents of the present folder.

A Brief Note on Flags

Before we go any further, you will need to know about flags. Flags are options that are passed to a command that extend the command to accomplish another task at the same time.

Now type the command ls -a (-a meaning all). You should see everything that you saw using the ls command but also you should see a bunch of folders and files that begin with a .. These extra files/folders are “hidden” so as not to clutter up your home directory with files that you may only open once in the life of the computer (if that). As you may have guessed, the difference between a hidden and not hidden file is the beginning dot. The dot tells Linux to hide the folder/file.

Step 5: Change Directories

One last command that you must know to be able to start using the terminal effectively is the cd command. If you type cd by itself, you most likely will go back to your home directory or nothing will happen. This is because the cd command stands for Change Directory.

Because you didn’t pass cd an argument, the terminal has no clue what folder it should enter. The most important cd arguments that you will need to know are {childFolderName}, .., . and ~.

  • {childFolderName} argument tells the terminal to enter the folder in the current directory by the name of {childFolderName}
  • .. tells the terminal to go to the parent folder of the current directory
  • . when used in conjunction with /{folderName} tells the terminal to enter the child folder of the current directory by the name of {folderName}
  • ~ tells the terminal to go back to the home directory (/home/{username}).

Other Useful Commands

Here is a list of other commands that you will probably find useful:

  • mkdir “Makes” a directory in the file system at the specified file path.
  • rm Deletes (“removes”) the file at the specified file path.
  • rmdir Deletes the directory at the specified path.
  • man Opens the MANual pages for the specified command or application. For example, man ls will open the man page that contains all of the information and flag options for the “list” command. This is especially useful to see if a program offers any extra functionality or to figure out how to configure a program.

That’s it! Now you’re ready to get started in your terminal.

Bringing back keyboard shortcuts

Since introducing the new coding interface the much loved keyboard shortcuts have been amiss. Now we’re bringing them back.

Here’s a cheat-sheet you can follow

Reset Exercise Completely messed up a solution? Start fresh. * Windows: Alt-R * Mac: Option-R

Next Exercise Peek at the exercises ahead. Get excited by what the section has in store you! * Windows: Alt-P * Mac: Option-P

Previous Exercise Want to retrace your steps to solve the current problem? Revisit an exercise to see all you’ve done! * Windows: Alt-O * Mac: Option-O

Save and Submit Ready to see if it works? * Windows: Control-Enter * Mac: Command-Enter

That’s it! To start using them, go try out an exercise like this one in JavaScript.

To infinity, and beyond!

Designer Olivia Cheng and her Codecademy team’s project Mars Watchtower was selected as a winner for Virtual Participation in the International Space Apps Challenge. We interviewed her to find out how the magic happened.

What led you to apply for the hackathon?

I saw it on Twitter and thought to myself, “Wow, it would be so awesome be involved in that” and then, “Well, why not?” I couldn’t attend any of the physical hackathons, but I saw there was a virtual location option. Couldn’t hurt to try!

How did you find your team?

I reached out to the Codeacademy group The Open Source Project to see if anyone would be interested, and got positive responses. I thought it would be a good fit since any project submitted to the Space Apps Challenge would be open source, and our team ended up with 5 members total.

What was it like to working together virtually?

I always planned on contributing to one of the GitHub projects started by the group, but I hadn’t expected to work with other members in real-time—there’s a big difference.

Because of the time zone difference, we took shifts coding—one of us about to sleep would fill the other people in on the progress and what tasks remained. There were hiccups, of course—occasionally someone would accidentally overwrite another person’s code, and sometimes a whole page of code would get wiped if Cloud9 IDE crashed while saving (oops!).

Any advice for people who want to do a hackathon?

Plan well. Do as much planning as possible ahead of time or in early hours because you have limited time to do what you need to get done. If you’re in a team, have a project manager to coordinate everyone’s efforts. Collaborating online can be a lot harder than in person, especially when you can’t just walk over to your teammate to quickly discuss something, so set up a workflow ahead of time.

Mars Watchtower team

We ended up using Workflowy for managing tasks and Cloud9 IDE for sharing code. Cloud9 IDE allowed us to write, edit and run our code with other team members simultaneously without the hassle of setting up individual local environments.

So… what’s next?

I’ll keep the project up on GitHub here so that team members (or anyone else) can continue to contribute. Although we didn’t win any global awards, our work paid off—we were selected as one of four winners for Virtual Participation.

As for the Codecademy group, I’ve been talking with the leaders of The Open Source Project and there are some ideas floating around to kickstart some projects in a hackathon-style… so we’ll see where that goes :)

How Knitters are Human Computers

This is a guest post by M.K. Carroll, Crochet Editor at Cooperative Press and Knit Edge magazine. Have something you’d like to share on our blog? Drop us a line.

It’s a popular hobby, practiced by people all over the world. At its most basic, it’s a loop of string and two pointy sticks. The loops can be combined in various ways to create a wide variety of things, from the practical and useful to the whimsical and just plain weird. In other words, knitting is a lot like coding.

Say what?

*k2, p2, 2/2 LC; rep from *, end k2.

What you see above could be described as a line of knitting code: a set of instructions that you can use to execute a row of knitting. Combined with additional lines of code, these instructions (commonly referred to as a knitting pattern) can be used to create a recognizable item, such as a sweater or a pair of socks.

Knitting — like coding — gives you the freedom to create

You can buy a sweater ready-made with a lot less effort than it would take to knit one, but there are a lot of reasons why you might want to knit that sweater yourself, like having one that fits you perfectly. You could also spend a lot of time trying to find one to buy, or a lot of money getting someone else to design and knit it for you. Sometimes - like learning how to code - learning how to create is how you get exactly what you want.

One line at a time…

Knitters and other “yarncrafters” (like crocheters and weavers) understand what it means to build something one stitch (bit) at a time, and yarncrafting pattern designers (coders) know what it means to code, use an API, design, test, debug, and maintain the source code - even if they don’t realize it yet. Daniella Nii says that: > “Just as in coding, attention to detail and syntax are crucial to a successful execution of a pattern (program). An overlooked parenthesis, comma or repeat can result in a piece of code that doesn’t compile and will interrupt the flow of the program, possibly discovered when the next line of instructions will not work with what the knitter has on the needles.”

Knitters know how to learn and “speak” a different language already, and learning how to code could mean being able to design and build the knitting app they want, without having to hope that someone else will. Not bad for something that starts with two sticks and some string!

Know how to knit? Learn how to code!

If you are a yarncrafter, you are already predisposed to learn how to code. Do you think it would be awesome to play a video game based on knitting? You can learn how to make one. Would you like to sell your crocheted mustaches on your own website? You can learn how to build a website and storefront too. Do you think PlaceKitten is an awesome API, but would be improved with yarn? You can learn how to use APIs to make the app that you want, instead of settling for an app designed for someone else.

Know how to code? Well…

If you are learning how to code and enjoying it, you may also enjoy learning how to knit, crochet, or spin. After all, if you want to build a website to look and function in just the right way for you, you may also be the kind of person who would want to knit a pair of Dalek patterned mittens that fit you perfectly.


Thanks to the yarncrafting coders LeTonBeau (on Ravelry.com), Daniela Nii (nikkisstudio on Ravelry.com), and Megan of stockinettezombies.com for volunteering to check my analogies and make sure they were accurate!

Looking for a Few Good Fellows

We’re looking for a few good fellows to come join our team!

The Codecademy Fellowship gives curious college students the chance to spend one year as professional software engineers working at a startup driven to change how people learn.

This spring we’ve had the pleasure of having Bob & Louis with us. Learn what they have to say about the experience below!

Meet the Current Fellows

Louis, MIT ‘14 Louis Sobel

Bob, UIUC ‘14 Bob

Why were you interested in becoming a Codecademy Fellow?

Bob: It seemed like an incredible opportunity to work with a very talented team working on a great mission. Louis: Gaining some practical industry experience that would apply some of the things I learned in school seemed like a great next step to shape my career.

What projects are you working on at Codecademy?

Louis: I am working on the interactive evaluation environment for languages like Python, Ruby and recently released PHP. Bob: I’ve spent most of my time here building the new Learning Interface.

How has the fellowship met your expectations?

Louis: They have been more than met. My expectations were to work with smart and driven people on problems that challenged me and gave me the opportunity to learn. Bob: Definitely. It’s an incredible learning experience to ship code everyday at a fast paced startup like Codecademy.

What is the best part about living in New York?

Bob: The energy of the city really is undeniable. There’s always something going on, new things to experience and learn. Louis: It’s been exciting to be part of the diverse and growing tech community in New York.

Any advice for future fellows?

Louis: Think about yourself and your education critically - what are you good at, where do you lack experience? The fellowship is an opportunity to learn things that you couldn’t learn in a classroom or internship. Bob: Be very specific with your application. Show us your personality, emphasize what makes you unique.

Codecademy Meetups!

Editor’s note: This post is about our NYC Meetup. You can find a Codecademy meetup near you on our Meetup page! To get help hosting a meetup, reach out here.


Learning to code on your own can be tough.

That’s why each month we host meetups for people to come and learn together. This month we were lucky enough to have journalist and Code Year veteran David Bauer come and present.

David Bauer

David wanted to do something better with code than creating arrays of zoo animals; so he decided to create Instacurate to visualizes tweets using Twitter’s API. (To learn how to use Twitter’s API yourself, try out this course.)

After a brief Q&A we broke into groups to explore the questions the group most wondered about:

1. What language should I start with? 2. How do I get started coding on my own computer? 3. What should I make with what I’m learning?

If you can learn, you can teach, and this gave everyone an opportunity to help out. Bravo!

Until next time, happy coding!

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!

Make 2013 Your Code Year

On January 1, we proclaimed 2012 “Code Year.” Our aim was to make programming mainstream in 2012. We thought that not everyone needed to be a programmer, but everyone needed to understand what programming was. Code Year launched and more than 450,000 people joined us on the journey, making their own New Years Resolution to learn to code.

Code Year brought amazing awareness to the importance of programming literacy. NYC Mayor Michael Bloomberg joined in, helping to turn his city into one of the most fertile for startups by pledging to learn to code. Weeks later, The White House realized the same thing and helped us champion a program to teach children to program. Schools everywhere contemplated including coding in their core curriculums, and politicians started the crusade to make more engineers in America.

WHERE TO?

We’ve seen tremendous success stories come out of Code Year and we’ve collected them for you to check out. These four stories are merely a small sampling of what’s come out of Code Year, and there are stories all over the web. Ryan Hanna, who knew nearly no programming before seeing Codecademy and Code Year, launched his company Sworkit and has seen more than 100,000 downloads. Joah and Haley, meanwhile, learned bits of code on Codecademy and then created their own course to share with others. We think they embody true success on Codecademy - learning, building, and sharing back with the community.

At the same time, while we’ve seen tremendous success, all of us at Codecademy have spoken to the thousands of people who have let our emails languish unread in their inboxes. Kevin Roose of New York Magazine wrote a great apology to Codecademy last week and we understand where he’s coming from. Making a commitment over a year and keeping it is notoriously difficult. We judge Code Year’s success not just by the finishers but by the people who now are simply more interested and more aware of programming and the community that surrounds it.

SO, WHAT NEXT?

We’re here to help. In 2012, we pulled together an excellent yearlong curriculum that spanned JavaScript, HTML/CSS, jQuery, and Python. This year, we want people to do more than learn to code, we want them to use their code to build something. Learning is the first step, but creating is the next (and maybe more important) step.

Sticking to your resolutions is hard. That’s why, in 2013, we’ve done everything possible to make sure you’ll come out a capable coder:

  1. Pick a project and build it - in 2012 people could “learn to code.” That’s a hard goal to achieve. In 2013, you’ll build a project and you’ll do it almost immediately. Build a website or build a game and learn the basics of code in the process.
  2. Timing - consistency is hard to achieve and starting small is the key. In 2012, people got emails every week. In 2013, you’ll start small by achieving your goal in less than a month! Where you go from there is up to you.
  3. Pencil the time in - are you always “too busy” to finish your resolutions? Start off by putting the time in your calendar.
  4. Measure progress - we’ll show you what people who stick with it can achieve. Track your own progress with our profiles and stick with it!

It’s easier than ever to start now. Programming is empowering and we’re proud to have helped thousands of people learn to code. In 2012, Code Year students built mobile apps with hundreds of thousands of downloads, taught thousands of people, and got better at their own jobs. It’s 2013 - what will you accomplish with code?

JOIN THE MOVEMENT

Code Year is about more than learning - it’s about creating. In 2013, let’s make a community of creators, teachers, and students, all united by the power of programming.

¡Prueba nuestros nuevos cursos de HTML y CSS!

Aprender con Codecademy ahora es más fácil para millones de personas.

Aprender a programar es difícil; ¡aprender en un idioma extranjero es aun más difícil! Ya no tendrás que preocuparte por el idioma: usuarios como tú nos están ayudando a traducir Codecademy al español, y nuestro primer curso, HTML/CSS, ya esta listo. Pruébalo y dinos tu opinión, esperamos tener muchos más cursos listos muy pronto.

¡Disfrútalo!

Meet our latest language: ¡Español!

Learning on Codecademy just got easier for millions of people.

Learning to code is hard; learning to code in a foreign language is even harder. That’s why we’ve been working with users to translate our courses into their native language.

Have friends that speak Latin American Spanish? Now they too can learn the basics with our newly translated HTML/CSS track. You may just make their day.

Check it out!

Psst… Want to help translate? Let us know.

Moi maailma: Happy Findependence Day!

Last week we celebrated a very special holiday for one of our Codecademists — Finnish Independence Day, or as we affectionately call it, “Findependence Day.”


Office all decorated!

Finland has given us many things in the land of technology, including the mobile communications company Nokia and the creator of operating system Linux, Linus Torvald — not to mention Santa Claus himself!

But most importantly, it gave us our lovely community manager, Linda! To thank the country for its kind gift we turned a wall into its giant flag and celebrated with specially-handcrafted cupcakes, courtesy of our interaction designer.

Nom nom nom


Happy Findependence Day, everyone!

Announcing Codecademy Projects

Learning the basics of a programming language—its syntax, design, and features—is necessary to be able to write programs. Once you know the basics, though, you want to put your new knowledge to work to build something!

In order to provide more concrete things for you to build, we’re rolling out Codecademy Projects. The courses in this track come in two types: basic and advanced.

The basic projects will walk you through a step-by-step process to make something of your very own, whether it’s a CSS-styled button, a web form, or a JavaScript drawing. The advanced projects are free-form (there’s no correctness test!) and allow you to put your knowledge to work to create more complex web applications like a video game or an online store. They include links to helpful courses, tutorials, and documentation to help get you going, and when you’ve finished, you’ll get a link you can use to share your creation on social networking sites like Twitter and Facebook!

While the advanced projects rely on the products you’ll build in the basic projects and the basic projects rely on the knowledge you’ll gain in the tracks, you don’t need to do all the basic projects or advanced projects in order. As long as you’re familiar with the prerequisites a project mentions, you’re good to go!

As we develop more advanced and engaging projects for you, we’ll continue to improve the Codecademy learning environment. We’re confident you’ll love all the new ideas and features we have in store.

Start your first project!

Show off your work!

Facebook Sharing

One of the most wished features in the community has been the ability to share your accomplishments with your friends on Facebook. Now it is possible.

Post your badges to a gallery on your Facebook timeline - just remember to set your account to public. And don’t worry, you can change your sharing preferences at any time under account settings.

Account Settings

New Tracks: Web, jQuery, and JavaScript

Just over a year ago, Codecademy started with a single JavaScript course. Since then, we’ve built out the JavaScript language track and added curricula for HTML/CSS, the jQuery library, Python, and Ruby.

As we’ve developed these courses, we’ve listened carefully to your feedback and worked to ensure the best possible learning experience for you. To that end, we’re unveiling three refurbished Codecademy tracks for the web (HTML and CSS), the jQuery library, and JavaScript.

These new tracks are now available on the main tracks page. If you’ve been working through the original courses, never fear! Your progress is safe and sound, and you can access it by clicking on the “Me” icon in the upper right of the page and selecting “View my profile.”

Whether you’ve been advancing through the original tracks or are looking for a new language to tackle, go ahead and try out our brand-new courses. We’re sure you’ll enjoy them!

Welsh teachers and Codecademy

We’ve spent a lot of time working on ways to reach out not only to individual students, but also to educators who can help groups of students learn. To that end, we’ve created things like our after school kits. Today, we’re pleased to announce our newest partnership with Computer Science teachers in Wales.

Codecademy Cymru—a joint program between Codecademy and the Welsh Computing At School (CAS)—will feature a custom curriculum to help teach computer science in schools across Wales. This collaboration marks another small step in our international expansion. For Welsh teachers interested in joining in, please sign in here.

Resizable Editor: More Room for Your Code

Today we’re pleased to roll out one of your most-requested features: a resizable editor for your code! Now you have all the space you need—just click and drag anywhere along the gray bar at the bottom of the editor to resize it.

screenshot

Currently, only the height of the editor can be adjusted. This feature is now available on all Codecademy courses, so whether you’re writing a long nested list in HTML or a complex Ruby method, you can adjust your view to look at all your code at once.

What are you waiting for? Go check it out!

Codecademy college tour

Codecademy’s going on tour this fall. We’re visiting several colleges to meet with awesome programmers and designers who are passionate about changing programming education. Please spread the word!

If you’re interested in meeting one of our developers for dinner on these dates, please apply by sending Sasha your resume/CV and a little about you.

We’ll be on campus the following dates:

  • RISD Wed 10/17
  • Yale Fri 10/19
  • NYU Mon 10/22
  • Carnegie Mellon Tue 10/23
  • Columbia Thu-Fri 11/8-11/9
  • Princeton (date TBA)

We look forward to meeting you!

NYU partners with Codecademy

Last Friday, Codecademy and NYU held the first class to teach digital literacy and coding to NYU students. It was a rainy Friday morning, but more than 50 students packed into a classroom to attend this non-credit course (with another 170 on the waiting list). Run through NYU Steinhardt, the class will teach students how to code using Codecademy's platform. When asked about the partnership, NYU's Media, Culture and Communications Department Chair, Marita Sturken, said

"In today's networked culture, learning the basic grammar of coding is an essential part of education, a skill that students will use in a broad range of professions. We're happy to team up with Codecademy to help our students navigate this digital landscape more effectively and with greater insight."


We're really excited to be partnering with a world-leading institution like NYU and thrilled that our courses and learning environment have been incorporated into their curriculum. It's great that educational institutions like NYU are keen to experiment with teaching methods, and we're hopeful that we'll see more of this in coming months. For more on this partnership, see this article in [Wired magazine](http://www.wired.com/wiredenterprise/2012/09/nyu-teams-up-with-codecademy)

Ruby and Python are Ready!

We’re pleased to make a dual announcement today: our brand-new Ruby track is now available and we’re promoting the Python track out of beta, adding a number of new courses to that track as well.

Since our Python track went into beta, we’ve been listening carefully to your feedback. We know many of you had problems running your code, and when we set out to add a Ruby track, we knew we had to do better. We totally rebuilt our systems from the ground up to give you a faster, more reliable experience. Today we’re excited to launch Ruby and re-launch Python on that platform.

We work hard to ensure your experience is as educational, helpful, and fun as possible, and we know it’s hard to learn when you suffer interruptions, no matter how infrequent or brief they might be. Thank you for your patience as we’ve worked to create a safe and stable interface for Ruby and Python, and we hope you enjoy our brand-new coursework.

If you encounter any problems or have feedback on these courses, please contact us; if you’re interested in creating additional Python or Ruby courses, please send me an e-mail.

Codecademy takes small steps into Colombia

Codecademy exists to teach the world how to code. Recently, we took a small step towards realizing this vision when we launched a partnership with the Colombian ICT Ministry. Together, we’ve managed to translate the courses into Spanish and make those courses available. In less than 2 weeks, we’ve had over 13,000 Colombians sign up for the Appsco initiative which is aimed at promoting entrepreneurship in Colombia. When talking about the partnership, Appsco team leader, Claudia Obando, described it as “a great opportunity for Colombian people to access new ways of creating businesses and foster social change.” We’d like to thank our partners at the Colombian ICT Ministry who have been great to work with, as well as all those who have signed up to learn how to code.

Sharing profiles to build community

The Q&A forums have become a great source of community, support, and help for thousands of users over the past several months. We believe learning works better when there are others to help you when you’re stuck, explain tricky points in more detail, and inspire you to learn even more. And at any given moment, there are thousands of users learning right alongside you, and their profile pages help you get to know them better.

Your profile page is designed not only to help you show off your progress and display your accomplishments, but also to let others get to know you better. But curious users that follow forum links to profiles marked as private only get an error message and a heart full of disappointment.

So soon your profile will have two sharing options: visible only to Codecademy users, and visible to the entire web. The latter setting is useful if you want to share your progress with friends, family, and employers even if they’re not Codecademy users themselves.

If your profile is currently set to “private,” you have plenty of time to get your profile exactly the way you like it before it changes to “only Codecademy users.” Feel free to change the name that appears at the top of your profile by changing your Name or Username in your settings page. You can also include any links to your social media profiles like LinkedIn, Facebook, and Twitter.

We hope these changes will improve your experience in the forums and help you get to know the users around you. Please feel free to get in touch with us if you have any questions or feedback.

After-School Programming with Codecademy

"Everything you need to start After-School Programming"

We at Codecademy think everyone should be exposed to programming and computer science—especially kids. This back-to-school season, Codecademy wants to help every school to start an after-school programming club—an easy way for kids to start learning the programming skills that formal education doesn’t yet provide. Programming is a fun and rewarding way to learn about the technology that surrounds us, and anyone can learn it. Programming will change the way kids think, fostering solid algorithmic thinking skills that will help them in a myriad of pursuits going forward.

Millions of students will go back to school this year to institutions that don’t have computer science programs. Great organizations like the Computer Science Teachers Association are working hard to make CS a part of high school and middle school curricula. Since launching Codecademy, we’ve seen teachers take things into their own hands, with hundreds of them using Codecademy in their classroom and starting clubs after school to expose their students to programming. Based on their feedback, we put together a simple kit for teachers (or students!) who want to start an after-school programming club at their school.

We wanted to make it as easy as possible for anyone to get started so we’ve included everything you need. No installing, no downloading, and no background in programming necessary (the kit comes with curriculum). Best of all, it’s completely free.

We worked with teachers across the world to put together a whole year of learning, starting students at the beginning and showing them the magic of programming through real projects in real programming languages. Kids love creating and customizing their code through our interactive interface. And when they’re done, they with web pages and projects that they have built themselves.

Exposing students to programming is one of the most important things we can do—and we can’t do it without teachers. That’s why we’re also launching the “teachers’ lounge” for teachers to share stories, ideas, and support among themselves. We’re excited to learn even more from the great teachers who are using Codecademy!

Have a wonderful start to the school year!

Python in beta

We announced Python in beta a month ago. The Python track is well loved, but there have been some problems with stability. We’ve been working on fixing these issues.

From a security perspective, running other people’s code (that means you!) on our servers is a nightmare! At this point you may have an understanding of just how powerful a skill programming can be — this is why we’ve set out to teach the world to code. Unfortunately, giving someone such power over your servers can be potentially dangerous.

Without proper precautions, malicious users could gain access to sensitive information or take down our services, denying other students the ability to learn at Codecademy. We take your security very seriously and, thus, place a premium on security over reliability. So, when it came time to approach our issues present in our platform, it was a no brainer — we opted to simplify the service in such a way that would guarantee security at the expense of slightly less stable service.

For the time being, the service is, for the most part, quite stable. From our monitoring we’ve observed around 95% uptime. Unfortunately, that 5% downtime means interrupted student sessions, and for that we are deeply sorry. We’ve been working hard to bring the service out of beta — a feat we hope to accomplish soon.

We appreciate all the help & reports we’ve received - you can let us know about any issues you run into with Python in this topic.

Your Daily Serving Of Points

Points on Codecademy are a great way to keep track of your progress as a learner. Currently, we keep track of the total points you have earned on the site — you can view that number in either your user badge in the header bar or on the right hand side of your profile.

In addition to tracking your long term learning goals through total points, we have added the ability to track how much material you have covered each day with daily points tracking. From now on you can see how many points you have earned today through your user badge, as well as in your profile. Your profile will also keep track of your ‘daily high score’ — the maximum number of points you have earned in a single day. There may even be some achievements lurking for your big days!

profile points

Announcing Python

When Zach and Ryan started Codecademy last August, they envisioned a place where anyone could come to learn how to code—in any language—to build the things they dreamed of and to use programming more effectively in their everyday lives. Since August, millions of people have used Codecademy to learn awesome front-end technologies like JavaScript, HTML, CSS, and jQuery.

Moving Server-Side—to Python!

We’ve spent the past few months working on adding more languages to Codecademy and the first one (and most requested!) launches today—Python! Python is used by hundreds of thousands of developers worldwide. Lots of schools and classes use it as a starter language because of its clean and readable syntax. Advanced developers use it at companies like Google and NASA. It goes nicely as a server-side backend to what many users have learned to do with JavaScript.

In January, we started the shift towards supporting more languages with the release of Codecademy Labs (by Amjad Masad, creator of repl.it and Codecademy team member). Labs ran Ruby and Python on the client side, allowing users to use the interpreter offline (so long as the page had been loaded) with reduced latency. Labs has been an awesome testing ground for the technologies that we’ve built, and we discovered that much of the experimentation with client-side Ruby and Python is constantly broken by updates in browsers.

Everything we’re launching today has been built from the ground up and rearchitected to run Python server-side. The infrastructure we’ve built can help us launch other server-side languages you’ve been asking for sooner than we expected.

Create Your Own!

As with all the other languages, all of our content is created by our users. Think you have what it takes to write a Python course? Create one now!

New Keyboard Shortcuts and Next Exercise's Information

Exercise Keyboard Shortcuts

Many of you have requested keyboard shortcuts to navigate between exercises in a course. As of a few days ago, you may have noticed the following revised keyboard shortcuts instructions:

Mac users: mac keyboard shortcuts

Windows/Linux users: windows keyboard shortcuts

Why these keys? We chose key combinations that wouldn’t conflict with existing browser actions. For example, a combination of ⌘ + N or CTRL + N already tells your browser to open up a new tab.

With our new shortcuts, you can move to the next exercise of a section by pressing ⌥ + T or ALT + T. You can also move to the previous exercise using ⌥ + P or ALT + P.

Next Exercise’s Information

When you complete an exercise, you’ll now see the name of the upcoming exercise.

alt text

This new change makes it a little bit easier to see your progress in the console.

Discuss these features in our forum!

Keep the streak alive

As someone who learned to code outside of the classroom, I know how important it is to establish a regular routine for applying the concepts that you’re learning. The more frequently you use the concepts that you encounter on Codecademy, the more easily they’ll stick.

This is why we’ve just added a new element to your profile: the streak. The streak is the number of consecutive days on which you’ve completed at least 1 exercise on the site. As long as you keep learning at least a little bit each day, you’ll keep the streak alive. This way, you can look back on a long streak and feel proud that you’ve been leveling up your coding skills every day.

See how long you can keep the streak alive!

http://cl.ly/image/0P1p1H2C2e0s

Profile Update

Many of you use your Codecademy profiles for a range of purposes, from sharing progress with friends to interviewing for jobs. Learning a new subject takes a lot of time and effort and it’s very important to us that your accomplishments stand out and shine.

We’ve reworked user profiles to give more equal weight to teaching and learning accomplishments. We’re also experimenting with ways for learners to share and compete with each other; adding your recent activity and representing your progress in a track-centric way are steps in that direction.

Hope you enjoy it, and happy coding!

alt text

Q&A Forums

In addition to improving course quality and the course creation process, we’ve been busy working to improve the community experience on Codecademy. Forums have provided a resource that supplements course content and allows users to both learn from and interact with each other. Today, we’re rolling out a Q&A redesign that makes it easier to find the content and answers you need.

Instead of a general forum for each section, questions are now categorized by course, section, and exercise. Here’s an example of what the main view for navigating forum questions looks like:

Forum view for Getting to Know You, Part I - Section 1, Exercise 1

We’ve built the new Q&A using backbone.js and HTML5 pushState, which makes for quick navigation through the forums, and we’ve also made the system more flexible in preparation for future growth (we’re also working on more general Q&A beyond course content). At the same time, we are adopting new community norms for Q&A that will make them a more helpful, pleasant place to get questions answered and go beyond the lessons. Be sure to check out the new forums for your courses and send us your feedback!

Investors++: gearing up for a new Codecademy

When Ryan and I started building Codecademy in August of 2011, we were focused on building something for ourselves. I was teaching myself to code and was incredibly frustrated by what I found in books, videos, and elsewhere online. Ryan, meanwhile, had taught hundreds of students while we were at Columbia and wanted to find a way to teach millions more. What started as something built for the two of us has become so much more in the nine months afterwards.

Shortly after we launched, hundreds of thousands of people around the world used Codecademy. Since then, we’ve heard awesome stories from thousands of them. Some of them are below:

Ben Roberts from Memphis, TN told us about how learning just the basics of JavaScript helped him land a position as a Data Management Specialist - and that knowing the core programming concepts has been been very handy in his new job.

Juliet Waters, a writer from Montreal, has been learning programming with Codecademy with her 11 year old son, Ben, and blogging about their experiences. She told us that six months ago, she didn’t know what a programmer really did. Now she’s joined a hacker space, hosted coding meet ups, and made her own website and app!

Users like Adam Travers from Bristol, UK have also shared with us how valuable it can be to combine a little coding with an existing skill. Adam is an illustrator and designer, but has found that learning some programming has greatly complemented his existing skills. He now incorporates his illustrations into dynamic websites that he creates himself!

Learning is a complex process, and we’ve put a lot of thought into designing the best learning experience possible. Many of us taught programming before Codecademy and we took what we learned there from our teaching experiences and put it all into Codecademy. That’s why we’re so passionate about learning by doing, creating, and building real projects with new technologies.

Along the way, we’ve been fortunate enough to work with amazing people as both friends, mentors, and investors. In November 2011, we started working with Andy Weissman and the folks at Union Square Ventures. They and our other awesome first-round investors contributed tremendously to both our vision and our progress.

In January, we launched Code Year as a way to show the world just how important programming is. Months later, hundreds of thousands people are getting programming lessons sent to them each week. A few weeks after we launched Code Year, we met Neil Rimer and Saul Klein of Index Ventures. Saul told us, about the world he wanted for his kids - one where code was a foreign language as important as Chinese and English for people to learn. Mary Meeker of Kleiner Perkins visited our office around the same time and painted a picture of a few industries that needed to be shaken up - education chief among them (see her 2012 Internet Trends presentation here). We spent a lot of time talking to Saul and Mary, and Mike Abbott at Kleiner about the future of education, programming, and our workforces.

Ryan, the rest of the Codecademy team and I have thought endlessly about the future of education and how we get there. It became clear that we needed partners who both understood the importance of a global company (more than 50% of Codecademy’s users are outside of the US) and the process of scaling a company far beyond the nine people we have grown to now. Index Ventures and Kleiner Perkins are joining the Codecademy family with $10 million in our second round of financing. They’re joined as well by Union Square Ventures, Yuri Milner and Richard Branson. It’s inspiring to work with both great firms and terrific entrepreneurs like Richard and Yuri.

With this new funding, we’re going to keep doing what we’ve been doing. We’ve reached millions of students in more than one hundred countries. Tens of thousands of teachers that have created Codecademy courses are now able to spread their knowledge all over the world. We want to make that process better for our students and for our teachers.

Codecademy is a global movement. We’ve hired people from all over the world - Jordan, Finland, Australia, and elsewhere - and we want anyone, anywhere to have access to an education that can change their lives.

Rarely is there an opportunity to have so much of an impact on so many people, and we’re excited to keep working for our students and our teachers. If you think you can help, come join the team.

Best Practices for Course Creation

This guest post is from Eric Weinstein, a proud Codecademy user and talented course creator. Eric learned Javascript through Codecademy and dabbled in Python on the side. He has since created and edited a number of courses across numerous tracks. In this post, Eric shares his thoughts and process on how to get started creating quality courses. ***

Teaching is hard. The first time I sat down in front of a room full of undergraduates and found myself tasked with communicating information to them, realizing I was largely responsible for their ability to understand the material, I was a little overwhelmed. How do you distill an entire discipline into a sequence of lectures, exercises, and discussions?

Writing courses for Codecademy is very much like teaching a class. You have to figure out the best way to explain technical terms and concepts, the best order in which to present information, and how best to divide the work into digestible pieces—exercises, sections, and courses. When writing my own Codecademy courses, I usually go about it in five steps.

1. Big-picture planning

Teaching a programming language is similar to teaching a natural language like German or Mandarin. The early exercises shouldn’t assume any special knowledge, and later exercises should build on previous ones and give students the opportunity to use what they’ve learned.

I’ve found that it’s tremendously helpful to understand the “big picture” aspect of each course that I write—what material to cover, useful analogies and comparisons, and so on. Beyond that, though, I make a conscious effort to explain to students what a programming language is good for and what they’ll be learning in the future, both to keep them informed as well as motivated.

When writing your own courses, set yourself up with a word processor, pencil & paper, or dry erase board and map out the subject you want to teach. Resist the urge to teach too much too quickly! There can always be more exercises to expand and expound.

2. Small-picture planning

Once I know what topic I want to cover, I divide the course into sections and the sections into exercises. (I usually set up the outline of my course first, then fill in the content later). With practice, you’ll get a sense of scope: how much material to cover at which level. A lesson with 100 exercises covers too much; a lesson with 3 exercises, too little. The sweet spot seems to be five to seven sections, fifteen to thirty-five exercises.

3. Exercise and default code creation

Once my outline is complete and I’m comfortable with the amount of information and the order in which I’m presenting it, I start writing exercises, one at a time. I don’t always go in order (see #5), but I do my best to ensure that I don’t introduce anything new without thoroughly explaining it. If I mention something I’ve covered in a previous lesson, I try to link back to it or provide a reminder in the hint.

I don’t usually worry about SCT (Submissions Correctness Test) creation at this point—my concern is writing readable instructions and good default code.

4. SCT building

This is the part I spend the most time on. A Codecademy lesson is only as good as its weakest SCT, and it’s very easy to write overly simple (or even broken!) SCTs if you’re not careful. The best SCTs identify the correct answer, rule out any incorrect answers, and provide useful error messages for common mistakes. For example, let’s say you want a student studying Python to write

p = 'spam'[1]
print p

in the editor. Your SCT could just be return codecademy_lib.printed('p'), but this won’t check to make sure the student actually accessed the second letter of the string by offset; they might have just put print 'p' in the editor and called it a day. A more robust SCT would be:

if type(error) == IndexError:
    print "Oops! You went too far. Use a smaller number in []!"
    return False
elif not codecademy_lib.printed('p'):
    print "Looks like you didn't get 'p'! Did you start counting with 0?"
    return False
else:
    return codecademy_lib.printed('p') and '[' in code

This makes sure that the student didn’t cheat by just printing “p,” while also providing helpful error messages along the way.

I always go through my SCTs as part of my overall run-through (see #5) to make sure I haven’t updated code or instructions without also updating the SCT.

5. Overall run-through

Finally, I run through my course in preview mode, exercise-by-exercise, and then in overall view mode in order to ensure that:

  • I haven’t introduced any information out of order;
  • I haven’t updated code without also updating comments, hints, SCTs, and instructional text (the most common error I run into is changing variable names in one place and not everywhere else);
  • I haven’t written a broken or inaccurate SCT.

If I can run through my entire course twice, providing correct and incorrect answers, without hitting a bug, typo, or inconsistency, I submit the course for review.

And that’s it! I hope some of this was helpful to you—I know it’s been a bit of a learning process for me. Good luck with your course creation, and happy coding!


Please note that a guest post is from a member of the community and not the Codecademy staff.

Preview Mode

In light of the recent efforts to enhance our course creation experience we’ve added a new feature called Preview Mode.

Before, both course creators and students would see the same functionality when previewing an exercise. This made it difficult to catch submission test errors and generally debug courses.

To make debugging easier, the new Preview Mode adds a retractable console to show helpful messages and error logs. The console will show the following:

  • Errors in the submission correctness test (SCT).
  • Errors in the student code.
  • Helpful debugging messages and warnings.

Now that we distinguish between preview and student modes, we define different behaviors for our teachers and students:

  • Erroneous SCTs will pass in student view (so our students don’t get blocked).
  • Erroneous SCTs will fail with a console message in preview mode.
  • Preview Mode will always show up-to-date default code in the editors unless chosen otherwise.

Want to learn more? Read the official documentation here.

The jquery.expect Library

Since the launch of the Codecademy course creator tool, we’ve been so lucky to have such smart and dedicated people writing and maintaining courses for our platform. In that short period, in addition to our own experience with the tool, we have received a lot of feedback from course creators about the major pain points of creating and testing a course. So lately we have been iterating and shipping small features and many fixes to the course creator. However, there is one point we haven’t really addressed – how hard it is to check the correctness of the student submitted code, especially in the “Web” courses.

Course creators have to write tests, Submission Correctness Tests (SCT), that would run against the students’ submitted HTML, CSS and JavaScript after they’ve been processed and rendered in an in-browser iframe. The only convenience we gave our beloved creators was the fact that we loaded jQuery for them. However, they had to pretty much do all of the heavy lifting.

The old submission correctness test is wrapped with a function that, when called, expects one of the following return values:

  • true: Test has passed.
  • false: Test has failed with an unknown error.
  • Error string: Test has failed with an error message to show to the
    student.

Example from one of our recent Web courses:

if ($('div').length === 0) {
    return 'Did you add a new div to your page?';
}

if($('div.post').length === 0) {
    return 'Make sure your new div has a class name of "post"!';
}

if ($('div.post > h2').length === 0 || 
      $('div.post > p').length !== 2) {
    return "Your div should surround the h2 and two p's";
}

// Regexp to match color in hex and rgb.
var rColor = /ccc|rgb\s*\(204,\s*204,\s*204\s*\)/i;
if ($('div.post').css('border-bottom-style').match(/dashed/) == null ||
    $('div.post').css('border-left-style').match(/dashed/) == null ||
    $('div.post').css('border-left-color').match(rColor) == null) {
    return "Make sure you give your post div a border.";
}

if($('#nav li').css('padding-top') !== '5px' &&
    $('#nav li').css('padding-left') !== '5px') {
    return "Give your nav elements proper padding!";
}
return true;

Here are the major pain points and what we can do to make them better:

  • Expressiveness: An SCT is very verbose and there are repetitions in the code.
  • Browser differences and incompatibilities: Even though jQuery greatly helps normalize browser differences, there are many things that it just doesn’t help with. For example, when trying to get an element’s color using $().css('color') you may get one of the following three formats:
    1. The rgb code of the color.
    2. The hex code of the color.
    3. The English name of the color (if you originally specified it using the name).

    Another noticeable issue in the previous example is that checking the border or the padding, using the shorthand notation, isn’t possible because most browsers would return an empty string if you try to get $().css('border') or $().css('padding'). In order to check those CSS rules, you would have to specify and check each direction and style.

  • Readability: An SCT is hard to read, understand, and maintain across all of the browsers that we support.

Enter jquery.expect

jquery.expect or $expect is a simple DOM assertion library built on top of jQuery and is inspired by LearnBoost’s excellent expect.js library.

Without further ado let’s rewrite the previous example in $expect:

$expect('div').to.exist('Did you add a new div to your page?');

var missingPorHMsg = "Your div should surround the h2 and two p's";
$expect('div.post').to.exist('Make sure your new div has a class name of "post"!')
			   .and.to.have.children('h2', missingPorHMsg)
			   .and.to.have.children('p', missingPorHMsg)
			   				.that.has.elements(4, missingPorHMsg).end()
			   .and.to.have.css( 'border'
			   				   , '1px dashed #ccc'
			   				   , "Make sure you give your post div a border!");
			   				   
$expect('#nav li').css('padding', '5px', "Give your nav elements proper padding!");

Thus, we have transformed a very verbose and unreadable test into a succinct and elegant one. $expect is very fluent and expressive and we think it would immensely help in writing SCTs and assertions in general.

$expect has many other features that you can find in the documentation. One new feature is event testing, which was impossible with the old framework.

$expect('button').to.click(function () {
  $expect('div').to.be.hidden();
});
$('button').click();

The new $expect library is well tested and stable. Nonetheless, jquery.expect is still in the early development stages and your feedback is greatly appreciated.

We think other people and projects may benefit from a library like jquery.expect, so we have made it available on Codecademy’s github under the MIT license. Happy testing!

Course Collaboration: Beta Release

Codecademy isn’t just a place for people to learn to code. It’s also a platform for people to create courses and share their knowledge with all of our users. As such, we’re focused on making it as easy as possible to create high quality courses.

This is why we’re starting to roll out a new feature for course creation: course collaboration. Soon, course creators will be able to invite collaborators to work on their courses with them. These collaborators will have full course editing powers, but only the original course creator will be able to add and remove collaborators.

Here’s a sneak peek of the “add collaborators” interface:

alt text

Invisible Stumbling Blocks

There is an interesting paradox in teaching: the better you know a subject, the harder it is to talk to beginners. Experience means you have forgotten what tripped you up when you were a beginner.

Consider typing. Or division. Or even reading this sentence. Easy now, right? Looking back, it’s hard to remember why they were hard. Looking back, the stumbling blocks are invisible.

Let’s consider a sophisticated concept you know and love: variables.

Variables are so fundamental that it is impossible to write useful code without them. I bet you think about them about as much as you think about breathing. But they weren’t always that easy. Consider the following code:

>>> myValue = 5
5
>>> myValue + 3
8
>>> myValue

What will this third command print? The answer is 5, but many beginners will say “8.”

Why? Most misconceptions are the brain enthusiastically applying previous knowledge to new situations. If you can figure out what rules and knowledge your students are bringing to the table, you can start to anticipate their misconceptions and design lessons and error messages accordingly.

For example, in basic arithmetic, adding two numbers yields a third number. It is not at all obvious to students that addition does not come bundled with assignment. And from your perspective this is an invisible stumbling block, because this is knowledge you know so well you didn’t even remember it was there to be learned.

Before we go on, take a moment to write down everything you know about variables, or know how to do with variables. Try to state the “obvious.”

Nice! Now check your list against this one and see if there are any invisible stumbling blocks missing from your list. (The specific bullet points will, of course, depend on the programming language you have in mind, but the purpose of this list is to help you spot invisible concepts.)

  • why they are so hugely important for writing software
  • how to change the value of a variable
  • how to perform operations on a variable without changing its value
  • how to check the value of a variable, both on the interpreter and in a script (crucial for debugging)
  • variables can store any data type, including strings, objects, and in some languages, functions
  • variables can refer to other variables
  • multiple variables can point to the same thing
  • variables can have no value, or an undefined value, and this is different from a value of ‘0’ or “”
  • changing the name, and even capitalization, means a totally different variable to the interpreter.

Want more practice? Try unpacking some other “obvious” concepts, like printing (with a printer, right?), strings (let’s make a sweater), and functions (this is a hard one—make sure to practice on a real human).

Crucially important note: this does not mean that you should try to explain all of these things to a beginner, but it is very important to remember that they exist so you don’t blithely run your students over rough terrain.

So how can you help students around these stumbling blocks?

1) State the “obvious.” It’s only obvious once you already know it.

2) Plan to spend 2x-4x more time on the basics than you think students will need. Regardless of the elegance of the explanation, students need time to wrap their heads around new concepts.

3) Iterate on feedback. Put your lesson in front of students and ask them to think out loud as they take it. Asking probing questions will help you uncover their misconceptions, but don’t jump in with explanations. Tweak your lessons, then rinse and repeat.

Share your thoughts and collaborate with other teachers and course creators in our course creator forum.

Thanks to E.O. Stinson and Kyle Conroy for their insightful draft feedback.

Tracks get a design upgrade

Today we’re rolling out an improved look and experience for tracks.

Tracks are series of courses grouped to help you master a topic or language. We first introduced them a few weeks ago, following the release of our first HTML and CSS courses. Since then, we’ve listened closely to your feedback and cooked up a little design upgrade to make tracks even easier to use.

Here are a few of the key changes:

  • View all the courses in a track at once, rather than drilling down into units
  • Clearer visuals for different course types (projects, challenges) and progress
  • More focus on guided content—the “Learn” tab now lists all tracks

We hope these design changes make it easier to overview your progress, work through tracks, and most of all—get you learning to code!

Check out the new tracks! »

HTML & CSS Courses

JavaScript is one of the fundamental programming languages of the internet. It serves as a great introduction to general programming principles, and it shows the power of programming.

Yet, as important as Javascript is, you need to know more than Javascript to create a website. For web development, HTML and CSS are as important as JavaScript is. Since one of the most frequently requested tutorials on Codecademy is one around how to actually create a website, we’re launching a new set of courses on HTML/CSS. Best of all, with these courses, you can see what your code is doing in one click. It’s the best of learning by doing - write your code out and see what happens instantly!

I learned to write HTML and CSS this way, and we hope that our new tutorials let you learn the same way. We’re starting slow - you’ll be building a basic webpage. After that, you’ll learn how to use JavaScript to spruce up webpages and to create your own personal homepage. Join us!

Create Your Own Codecademy Courses

Codecademy has always been the easiest way to learn to code. Today, we’re becoming much more - we’ll also be the easiest way to teach programming. The past few months, our team has focused on building great content for our users - we’ve pushed out new courses every week since the beginning of 2012 with Code Year, and we’ve added awesome new features. Some of them we haven’t even announced yet! Those of you that have been watching the site closely have probably noticed we changed the editor - we’re now showing you where your errors are occurring (you’ll see a little “x” next to them). We’ve also redesigned our interface to show you lessons, projects, and challenges, a new organization framework we’ve developed and will explain in more detail now.

Today, anyone can create their own Codecademy lesson. We’re also expanding beyond JavaScript - lessons can be created in Ruby or Python too! The lessons are just as interactive and exciting as the ones that Codecademy itself has created. We’ll be featuring the best lessons prominently on the site as well.

This is part of our mission to teach the world to code. We’re excited for everyone to join us in this mission by creating awesome tutorials for anyone to learn to code.

Check out more coverage from the Wall Street Journal, TechCrunch, GigaOM, and VentureBeat.

Announcing meetups and our partnership with the White House

We’ve been blown away by the response to Code Year, our latest initiative. In less than 7 days, more than 300,000 people pledged to learn to code in 2012 (you can still sign up!). We were thinking about how to further spread the word about coding literacy when Aneesh Chopra, the CTO of the United States, called last week with an interesting proposal. We thought the proposal was in line with what we’re trying to achieve here at Codecademy so we agreed to partner up!

Today, we’re proud to announce that we will be working with the White House to get more kids and adults learning to code. With their Summer Jobs+ program, the White House has been working on finding jobs for hundreds of thousands of people over the summer. We think learning to code is an integral part of finding a job in the 21st century economy, so we’ll be helping out by rolling out a course called Code Summer+. This will be a shorter course than Code Year that aims to teach people the basics of programming. You can find a bit more on the White House’s blog.

More importantly, we’re pleased to announce that we’re moving Codecademy from being a strictly online learning platform to something you can do offline as well. Users all around the country and the world are getting together to talk about Code Year and to support each other as they learn. We’ve seen them get together in New York and elsewhere. Today, we’re launching meetups for Code Year and Codecademy participants worldwide. Anyone can sign up to host their own meetup or to attend another one at codeyear.com/meetups. You can meet weekly to discuss each Code Year lesson or whenever you’d like.

All of this wouldn’t be possible without the help of some awesome partners. Today, we’re pleased to announce that Code Year is now endorsed by the Kauffman Foundation, Startup Weekend, Launchpad LA (hosting LA Codecademy meetups!), AngelPad, Teens in Tech, Ladies Learning to Code (in Canada), Women Who Code, Quanta (an accelerator in Kosovo), Open Network Lab (an accelerator in Japan). Companies like Foursquare, Sailthru, Skillshare, and Twilio have signed on to support our effort to get the world to code as well. We’re working with dozens more partners not included in this post (but who will be included in a forthcoming site just for partners).

We’re constantly trying to improve Codecademy for all of our users. This week, we launched new Q&A forums as well - if you look at any lesson on the site, you’ll notice you can click “Q&A” to ask questions and get answers from fellow users. We’re grateful for all the user feedback and we’re working as hard as we can to deliver a good experience for you all.

Thanks for using Codecademy!

Time for the 'House' Party!

Monday was not only the first day of Code Year, but it was a great day for the Codecademy team. We are super happy to welcome Allison House to the team as our Lead Designer.

We had been looking for a designer for a few months - Ryan and I really place a premium on design and we hadn’t quite found someone we thought could help to shape the company’s design thinking. We had interviewed dozens of designers when we saw the subject line “Hey Zach and Ryan! Let’s talk design” pop in our inboxes. We read into it and discovered that Allison was incredibly talented, well regarded in the industry, and passionate about education.

After a quick Skype, we had a great feeling about Allison. We flew her out to New York for a few days and she proved to be even better in person. We spent a few days redesigning a few aspects of the Codecademy site. Allison’s work spoke for itself - she’s amazingly talented and will bring a whole slew of awesome new ideas to Codecademy.

The best part though, was hanging out when we weren’t working. Ryan, Allison, and I spent an afternoon exploring downtown Manhattan and walked over the Williamsburg bridge to spend some time in Brooklyn. We ended up at the Standard Hotel dancing at 2am (and Ryan and I don’t even dance…).

We’re thrilled to be able to work with Allison on a daily basis. You’ll see her work appearing on the site immediately. Want to come work with us? Check out our jobs page.

Codecademy.push('Amjad').pop() === 'Labs'

Today’s a special day for us at Codecademy for two reasons.

First, we’re excited to officially welcome Amjad Masad to the team. In a way, you could say that Amjad has always been a part of Codecademy. Ryan and I first got in touch with him after stumbling across his open source console project, jqConsole, this August. We were just beginning to hack together our first iteration of the site, and needed a console for people to interact with. As it turns out, jqConsole was just what we needed (it still powers the Codecademy console today).

But we soon realized that, while his project was great, Amjad was even better. So far, we’ve interviewed hundreds of engineers as part of our search to find the next awesome additions to the Codecademy team (if think you could be one of them, check out our jobs page), but none have stood out as much as Amjad. He is incredibly talented, experienced, and as dedicated as we are to advancing education online. Not to mention he’s just a cool guy (which we found out when we flew halfway across the world to Jordan, his home country, to spend a few days with him).

Second, we’re also excited to announce one of the first (of many!) projects that Amjad has worked on with us: Codecademy Labs, the easiest way to play with JavaScript, Ruby, and Python online. Now, after you learn with Codecademy courses, you can use Codecademy Labs to create your own programs, share them via Twitter and Facebook, and show your friends what you’ve learned. Another special thing about Labs is that it runs entirely on the client side, meaning you can use it when your computer is disconnected from the internet.

(You’ll probably notice, too, that we’ve included Ruby and Python in Codecademy Labs but we don’t have any courses for those topics yet. Know that it’s just as big of a priority for us as it is for you, and stay tuned for some news on that front soon)

This is the start of an awesome next few weeks for us at Codecademy, full of more courses, more features, and more learning. Check back soon for more and, as always, let us know what you think!

Codecademy.add(investors)

Many of you have sent us emails and tweets over the last few weeks wondering what we’ve been up to. The answer is that we’ve been up to a lot, and we’re thrilled to (finally) be able to share some of it with you.

Since we launched in August, we’ve been focused on building a roadmap for making sure Codecademy is a project that lasts not just for weeks, but for years. Today, we’re proud to announce our first step toward achieving that goal. We’ve raised a Series A round of financing from some great investors and entrepreneurs, including Union Square Ventures, O’Reilly, SV Angel, Yuri Milner, Social+Capital Partnership (Chamath Palihapitiya), Thrive Capital, CrunchFund, Collaborative Fund (Craig Shapiro), Founder Collective (Chris Dixon), Joshua Schacter, Vivi Nevo, Naval Ravikant, Sam Altman, and several others. This is the first of many awesome developments for Codecademy.

We’re Hiring

We’re ready to bring more developers and designers on to the Codecademy team. You can find more about the openings on our jobs page, but we think there are few opportunities that offer you the chance to make a difference in the lives of hundreds of thousands of people. We’re creating an educational revolution and improving equality of access to education and we want you to be a part of it. If that sounds awesome, send us an email and check out our jobs page.

New Courses

Expect an update soon, but to celebrate this progress, we’re launching our first user generated course. Albert Wenger, a partner at Union Square Ventures, is the author of “Functions in JavaScript,” a new course available today.

What Else?

Expect a lot of changes the next couple of weeks - more content, more features, more everything. Ryan and I are incredibly grateful for all of the emails, feedback, and users who’ve worked with us thus far. We’re starting an educational revolution, and we’re glad we have some incredible people along with us.