Codecademy, a startup that uses interactive online lessons to turn anyone into a computer programmer, has signed up 97,000 students in less than 48 hours for its New Year’s resolution class Code Year. That’s more than twice as many students as were enrolled in the 150 U.S. computer science undergraduate programs that the Computer Research Association surveyed last year.

Anyone who adds their email address to the class list will receive new programming lessons in an email each week. All Codecademy users already have access to these free lessons, which turn learning JavaScript into a game and will soon expand to other programming languages. The class emails will serve as reminders and guidance, putting individual lessons together in a cohesive curriculum.

“One of the biggest complaints we get is that people will learn one lesson and then say, ‘what’s next?’ or ‘where do I get to go from here?’,” Codecademy founder Zach Sims tells Mashable about the startup’s self-directed learning format.

The New Year’s resolution class answers those questions and makes the program even more appealing in the process. In its first 72 hours after launching this summer, Codecademy signed up 200,000 people for coding lessons. Now it’s signing them up for a year-long commitment at a similar rate.

When those who have signed up get their first email on Monday, they’ll be starting their computer science education with at least 97,000 classmates. So far Codecademy hasn’t announced any features that might let those classmates interact with each other, but it seems like a fine opportunity to add social incentives to the learning motivation it has so far maintained with game mechanics.

More About: Codeacademy, coding lessons, programming

For more Dev & Design coverage:

Android Image

Carmen Delessio is CTO of Layercake, an NYC startup focused on helping parents to quickly and easily manage their photos and digital memories. Request a beta invite at Carmen’s Kindle Fire and other apps can be found at

My $99 Logitech Revue was just upgraded to the latest version of Google TV. My “go to” tablet these days is Amazon’s $199 Kindle Fire. These are both Android devices and are examples of the platform’s recent fragmentation.

Android fragmentation highlights include:

  • 5 OS versions on devices (Donut, Eclair, Froyo, Gingerbread, and Ice Cream Sandwich)
  • Devices in various sizes, from small phones to TVs
  • Device manufacturers branching their own versions of Android

Amazon’s Kindle Fire is an example of a device with a manufacturer’s custom version of Android. This splintering has caused real concern among developers.

Android fragmentation is most often compared to Apple’s closed ecosystem for iOS. Apple iPhone and iPad developers can deliver pixel-perfect apps and be assured the apps will just work. Android’s multiple sizes, OS versions and branching make that pixel-perfect delivery difficult for developers.

But there are some positives of Android fragmentation from a developer standpoint. Here’s a look at some of the pros and cons.

Pros for Developers

  • Kindle Fire is showing strong sales
  • Amazon has a dedicated market for the Kindle Fire
  • Developers can design for a specific device
  • Apps on TV are cool
  • Low penetration in the TV app market means it’s easier to get noticed
  • The Android compatibility package and “fragments” address the issue of OS fragmentation (more on this below)
  • New revenue models are available

Cons for Developers

  • Too many devices running different operating systems
  • Need multiple designs for your apps
  • Too many apps in the Android Market
  • In general, Android users pay for fewer apps
  • Android tablet sales are poor
  • Google TV has not enjoyed mainstream success yet
  • TV apps are new and unproven

App Markets

App markets are a key to platform and developer success. The Amazon Android market on the Kindle Fire is the first significant alternate Android market for consumers. There are other options out there, but Amazon puts together the device and the market and curates the apps. This is quite like Apple’s process. Though built on Android, the Kindle Fire is a device that lives in a closed ecosystem. With more than 4 million units sold, the Kindle Fire deserves developer attention.

Similarly, an app market has just recently appeared on Google TV. Sony devices received the app market in November 2011 and the Logitech Revue received the update in December. It is only now that a developer can see his Android apps in a TV market.

Kindle Fire

I believe in the numbers. Kindle Fire will be the most successful Android tablet in the foreseeable future. There are plenty of consumers out there who just use and trust Amazon. TV ads and the Amazon site will be their introduction to the tablet world.

The $199 price tag and focus on the device as a reader and video player make the Kindle Fire a consumer device worthy of attention regardless of lackluster reviews.

Amazon knows how to sell, and that is an opportunity for developers. We can hope that making a good app for this device will drive sales.

Google TV

Apps look great on TV. As a developer, it’s fun to see your app on a big screen, especially if you’re working with photos or videos.

The availability of a marketplace drives growth and consumer acceptance. The recent upgrade provides the first real opportunity to develop and market apps for a Google TV. There is a window of opportunity for developers to stand out from the crowd before media companies and others really get into the game.

Google TV provides the potential for new revenue models. Advertising on TV apps is an unknown, but showing an in-app ad on the big screen may be more compelling than a 40-pixel mobile banner. Promoting your own phone and tablet apps within a TV app is an idea that seems worth pursuing. It is common to have a free advertising supported app and a paid app, but maybe a free TV app and paid apps on all other platforms is the way to go. We can speculate quite a bit about apps for TV, but one thing is certainly true — you can’t take it with you.

Technical Solutions

Google has done a lot to address fragmentation. One of the few times I thought Google showed a sense of humor as a company was when they added a new feature called “Fragments” to the Android Honeycomb release. Fragments provide the ability to create and reuse sections of the screen as UI components. In one app, a fragment may take up the full screen on a phone and just part of the screen on a tablet.

Google has provided a compatibility library that further addresses Android OS fragmentation. The library supports fragments and commonly used features for Android 1.6 to 3.x. A single code base can support Eclair through Ice Cream Sandwich.

Design and Targeting Devices

As screen sizes are factored in, the development task becomes design dependent. While Android provides great support for designs that work on multiple screen sizes, it can still be more challenging than the pixel-perfect closed iPhone system.

One option is to target a specific device. I’ll admit a guilty pleasure in developing an app just for the Kindle Fire. Based on the market size and technical spec, it seems worthwhile. Knowing that I could create and test an app on a single device and that it would look great on every Kindle Fire is very gratifying. It’s a small taste of how iPhone designers and developers must feel.

Google TV and Android tablet apps have a lot in common. Depending on your design, they may be exactly the same. Creating a TV app may lead you to releasing a tablet app because … you might as well.


A developer has the capability to create a single app for all devices using available technology. I suspect a common approach will be to use fragments and the compatibility library, which offer a significant amount of common code across a phone, Kindle Fire, and tablet/TV releases.

Having three or four products in the market may make more sense financially as well. An app called “Great App (Kindle Fire Edition)” may share 95 to 100% of the code with an app called “Great App (Google TV Version).” Rather than comparing that to iOS development, compare it to the work that web developers do to create websites that work well in five or six different browsers.

The opportunity to use newer Android versions and tools will help new developers get up to speed. The compatibly package and fragments will help those developers support multiple devices. The availability of Kindle Fire and Google TV offer two new markets for apps. Right now, the rewards for developing on new platforms for Android outweigh the risks.

More About: android, contributor, design, development, features, Mobile, mobile development, programming

For more Dev & Design coverage:

Jonathan Goldford is a partner at JG Visual, an Internet strategy company that works with organizations to develop and implement their online presence. You can connect with Jonathan on the JG Visual Facebook page.

Sometimes as programmers, we forget that 99.9% of the population doesn’t care how a piece of text, a button, an image or a video ends up onscreen. Most people just care that it’s fast, easy to use and gives them the content they want. Otherwise, they get upset — and rightfully so. Here are three common mistakes we programmers make, and what we can do to fix them.

1. Forgetting About Conventions

Ever since they started using the Internet, users have been trained how to interact with a website. Therefore, they often get frustrated when websites don’t meet their expectations. Here are some examples.

  • They hover over an object they think is clickable, but become confused when they see an arrow instead of a hand pointer.
  • They click on blue, underlined text, but find it’s not a link.
  • They click on the logo in the top left, believing it will return them to the homepage, only to find it takes them nowhere.

Web design doesn’t always meet our expectations. However, developers and designers should always maintain certain rules to avoid user confusion. Here are three.

Clickable Elements Should Have the Pointer on Rollover
Everything clickable should switch to the hand pointer when a user hovers over it. You can accomplish this using simple CSS. The code would look like this

div:hover { cursor: pointer; }

Style Links Appropriately
Links should look different than regular text, and should be underlined within a page’s main content. If you really want to stick with convention, make them blue — research found users engage most with blue links.

Make Logos Clickable
The logo in the header of your website should be clickable, and should take the user to the homepage. This is pretty simple: Just wrap your logo in a tag.

<a href="">
<img src="logo.gif" alt="Example Company" title="Example Company Logo" height="100" width="100" />

2. Creating Slowly-Loading Websites

Users hate slow websites. Studies have shown that 40% of users will abandon a website that takes more than three seconds to load. Here’s how to avoid common speed mistakes by new programmers.

Resize Images Outside the Browser
New programmers will sometimes use a very large image, let’s say 600 pixels wide by 600 pixels tall, but will set the height and width so the image shrinks to the desired size. They use the following code.

<img src="big-domo.jpg" alt="Domo" title="Big domo at the park" height="200" width="200" />

There are two problems with this method: First, the full image still needs to load. Typically, bigger image files mean longer load times.

Second, shrinking an image using the height and width attributes can render a photo awkwardly, causing the browser to display a photo not nearly as clear as it would be were the image sized 200 x 200 pixels.

To fix these issues, resize and compress images in an editor like Photoshop or Gimp. Then code the image like we did above. Try to use a tool like Photoshop’s Save for Web & Devices to further shrink the file size.

Load JavaScript in the Footer
Many programmers unnecessarily load all the page’s JavaScript files in the head tag. This stalls the rest of the page load. In almost all cases, except for JavaScript critical to user interface navigation, it’s okay to load script in the footer. Then the rest of the page can load beforehand. Try this code.

Rest of the page...
<script type="text/javascript" src="js/scripts.js"></script>

Load CSS Externally
Sometimes new programmers load CSS on each individual page using inline styles or an internal stylesheet. For inline styles, code looks like this.

<p style="margin-top: 50px;">Hi Mom!</p>

And for an internal stylesheet, you’d most likely see this code in the head tag.

<style type="text/css">
p { margin-top: 50px; }

You should almost never use CSS in the page that holds your html. Store it externally using code like this.

<link rel="stylesheet" type="text/css" href="css/style.css" />

There are two advantages to loading CSS externally: First, the user’s computer will save the external stylesheet to be used on every page, instead of retrieving the same styles over and over. This greatly speeds up load time.
Second, using an external stylesheet is much easier to maintain. If you need to change the font size of your website’s paragraphs, you’re able change it in one place, without having to access each individual html file.
Learn more about good CSS practices at CSS Basics.

3. Not Accounting for Potential Backend Changes

Most programmers nowadays are using a content management system like WordPress, Joomla or Drupal to build their websites. This is great because it gives website owners the ability to make changes and updates.

The problem is that a lot of developers only program for a website’s content at launch time. For example, at launch a developer may only create CSS styles for website headings 1, 2 and 3. What if two months after the website’s launch, the communications director decides to set some text to heading 6, since that’s an option in WordPress’s format? That decision would revert to the default styles of the browser since the developer never styled for it initially. Here is how to avoid this situation.

Include Styles for All the Common Tags
To make sure that the design of your website remains consistent with any backend formatting, programmers should include styles to handle the following html tags.

  • Body (<body>)
  • Heading 1, 2, 3, 4, 5, 6 (<h1>, <h2>, <h3>, <h4>, <h5>, <h6>)
  • Link (<a>)
  • Paragraph (<p>)
  • Address (<address>)
  • Preformatted (<pre>)
  • Strong (<strong>)
  • Unordered list (<ul>)
  • Ordered list (<ol>)
  • Quotes (<blockquote>)

It’s best to check the WYSIWYG that your website owners are using to make sure you have all the appropriate tags covered.

Basic styling isn’t the only opportunity for your website to break down. Also make sure to prepare for large image uploads and for copy/paste from Word. Although items like these can seem trivial, educating your website owners about how to add content can make all the difference.

You’re Smart, But It’s Hard To Remember Everything

The mistakes listed here have nothing to do with a developer’s intelligence. Like most jobs, things fall through the cracks, especially when you’re just getting started.

Do you agree with the items listed above? Are there any others we should have included?

Image courtesy of Flickr, …Tim

More About: contributor, design, dev, features, programming, Tech

For more Dev & Design coverage:

Martin Odersky is Chairman and Chief Architect of Typesafe and creator of the open source Scala programming language. This post was co-authored by Chris Conrad, an engineering manager who is part of the Search, Network and Analytics team at LinkedIn.

While interacting with social media and other consumer websites has become routine for many of us, ensuring a seamless, positive user experience is still the Holy Grail for web developers. The volume of queries and messaging on websites increases every day, as does the challenge of keeping the underlying infrastructure running smoothly for millions of users.

Below, we’ll highlight key challenges facing web developers of high volume sites, provide examples of how to address these hurdles, and discuss the role of emerging open source platforms as a modern approach to overcoming them.

Three Key Challenges

  • Performance: While web application developers of high volume sites face many challenges, performance tops the list. With consumers now demanding blazing computing speeds and uninterrupted service, a wait time of 250 milliseconds can mean the difference between a successful service and a failed one. For key user operations, such as interactive, real-time slicing and dicing of large data sets, performance is essential. The application needs to perform flawlessly and logically in order to attract and keep consumers.
  • Efficiency: When operating services on a massive scale, it’s essential to make the most efficient use of hardware assets. For example, optimize the use of memory and available processing resources. In practice, this often means using event-driven and distributed architectures like node.js, versus previous generation thread-based models like traditional Java Servlets. Developer productivity programming languages are further facets of efficiency. Fewer lines of code, made possible by concise languages like Scala and Ruby, generally translates to higher productivity for application developers.
  • Reliability: Systems need to remain resilient against component failures, including hardware, software and network crashes. An ever-expanding ecosystem of applications depends on reliable access to user-generated content, like LinkedIn’s, for instance. As such, the network needs to target “five nines” availability goals that have previously been benchmarks for the telecommunications and electrical power industries.

  • Real-World Applications

    LinkedIn faces these challenges every day and is always looking to incorporate the most advanced technology to keep its services running smoothly, reliably and efficiently. For example, to support the Signal product introduced last year, LinkedIn created a high performance web service written in Scala. This service is accessed through a REST/JSON-RPC model that enables quick ad hoc data manipulation and fast iteration from the web-based user interface.

    For its real-time people search service (with a peak demand exceeding the hundreds of queries per second), LinkedIn uses a scatter-gather approach that distributes search queries in parallel across a large server farm. This approach balances quick response time with efficient use of server resources.

    To support reliability, LinkedIn created a cluster management and workload distribution library called Norbert, which it implemented in the open source Scala programming language. It then incorporated open source technologies from the Apache ZooKeeper, Netty and Protocol Buffers projects. Norbert is a key component of several mission-critical applications at LinkedIn, most notably its social graph engine, which fields a high volume of requests per day.

    Open Source – Solving Today’s Modern Programming Challenges

    In the last few years, many new open source technologies have emerged to help web application developers. Open source projects such as Norbert, now available under the open source Apache license at, are readily available to web developers charged with tackling such challenges.

    Open source programming languages and frameworks that enable parallel and distributed computing can be especially helpful in keeping today’s most trafficked websites running steadily and smoothly. Below are key considerations to keep in mind when programming for today’s multicore paradigm:

    • For applications that benefit from highly interactive user experiences, like LinkedIn Signal, developers should consider breaking data-intensive functionality into asynchronous web services that can be integrated into the web-based user interface using REST-style APIs.
    • To encourage “efficiency by default” for today’s web-scale applications, developers should look to modern frameworks like Akka and Norbert that incorporate capabilities like event-driven processing, asynchronous I/O and cluster-aware fault tolerance.
    • For applications that can truly scale up and scale out, developers should favor languages like Scala that provide first class support for functional programming, which discourages the use of mutable state. This allows applications to more easily scale hundreds of cores on a single server, and thousands of servers on a network.

    In summary, web applications and their supporting infrastructure need to be robust and efficient as more of society shifts its everyday interactions online. Fundamental advances in technology, many driven by the open source community, are making it possible for today’s web application developers to stay ahead of the scalable computing needs of consumers.

    Image courtesy of Flickr, Fon-tina

    More About: apps, linkedin, programming, Web Development

    For more Dev & Design coverage:

The Web Development Series is supported by Rackspace, the better way to do hosting. Learn more about Rackspace’s hosting solutions here.

Taking on a large project can be both exciting and intimidating, particularly if you’re a solo developer. Big builds can be a lot of fun and serve as great learning experiences. At the same time, you have to keep the project moving forward, or risk missed deadlines and burnout.

Below are some tips to help you stay organized and productive, whether you’re working individually or as a team.

1. Make Your Contract Rock-Solid

When dealing with clients, issues like scope creep, late payments and deadlines are always a concern. And what may seem obvious to you may not be clear to your client. To avoid hurt feelings, delays and financial troubles, your first priority should be establishing a thorough, firm, but fair written contract.

A good contract protects both you and your client. In addition to general terms and conditions, your contract should contain specifics about the project: payment schedules, due dates, deadlines (and consequences for missing those deadlines), cancellation policies, guidelines regarding intellectual property and project scope. You can find many sample contracts on the web, but there’s no substitute for consulting with an attorney. When dealing with the safety of your business and your livelihood, the expense is justifiable, and should be calculated in your business overhead.

2. Have a Well-defined Road Map

One of the required supplements to your contract should always be a project road map. It should outline all of the project features as thoroughly as possible, and establish the general plan for project progression, from research all the way through deployment.

To start, write out all of the features in outline format. It helps to break them down into groups, such as “Account Administration Features” and “Inventory Control Features,” for example. Keep refining the outline until you’ve defined exactly what is expected and what needs to be developed.

Next, break the project down into different phases, such as research, design, development, testing and deployment. For each phase, state its goals clearly, and define where the project should be when the phase is completed. Have your client sign off on the phases, and include this document with your contract. You may want to make a second copy of this road map to include more technical details, such as technologies to employ and methods to implement each feature — but don’t change the scope unless your client signs off on the changes.

3. Establish a Style Guide

Whether you’re working alone or with a team, taking the time to establish a style guide for your project will help you maintain consistency throughout. Furthermore, when the project needs updating six months from now, you’ll be glad you made the effort.

There are two types of style guides you should consider: a visual guide and a coding guide. Keep in mind that either or both may apply to the project. The visual style guide should contain information regarding fonts, colors, branding and any other notes on visual appearance. You should also include a few examples of common elements, such as headers, forms, body content, sidebars and menus. While you may never need to go into such detail, the Skype Brand Book is a great example. The guide provides a great presentation to your client, a tool to help them understand how the project will ultimately look and feel. Review the established style with the client (mood boards are great for this purpose), and have them sign off on the look. Refer back to the visual style guide often during your own work to make sure you’re adhering to the set guidelines.

A programming style guide needn’t be project-specific (unless you’re working with a new team that has already established a style different from your own). It may be as simple as following an existing style guide, such as the Zend style guide. You don’t need to start from scratch here, but you need to be consistent. Having a clear set of guidelines will help any developers who may come on board later.

4. Take Time to Research, Plan and Test

When developing a new project, particularly one that’s interesting and exciting, people have the temptation to dive right in and get to work. An initial lack of proper research and planning can have detrimental effects, especially for larger projects. Take the proper initial steps and spend time researching, diagramming, reading through source code and organizing your thoughts. It will end up saving you time and money down the road.

The same applies to testing your code. It will spare you the tedious and often embarrassing problems of code rewrites, because the only thing worse than having your code fail during a demo is having it fail in production. Testing code and debugging shouldn’t be afterthoughts, so work both into your project estimate and timeline. There are a lot of automated testing suites out there today — everything from PHP and JavaScript to Ruby and Python, and countless other languages. It’s a good idea to learn at least one for each language you plan to use. Don’t forget to have real users navigate your software too. You and your client should both spend time actually using the site you’ve developed before going live.

5. Document As You Go

If you’re like most developers, you cringe at the thought of writing documentation. Taking the time to document something, especially when it seems clear at the time of creation, feels like a waste of valuable time. However, years from now those thousands of lines of source code may not make nearly as much sense.

Furthermore, programming styles and skill evolve over time, which can make old code hard to dive back into. So take time to document your code as you go. Make it as intuitive as possible by using descriptive names and logical progression. As a good rule of thumb, you should never need to document what something does, but make notes in your code that explain a feature’s purpose and function. Also note any dependencies that it either relies on or creates. Stopping at the end of each new feature and taking the time to draft some end-user documentation is a good idea as well. This will make it much easier to train your client on the software, and will also serve as a good way to catch any usability issues or features that were accidentally omitted.

6. Use Version Control

This should almost go without saying, but many solo developers don’t use version control for their projects. For a large project, this simply isn’t an option. A good VCS (whether you choose SVN, Git, Mercurial or some other system) virtually eliminates the possibility of accidentally deleting or overwriting code.

In addition to providing an invaluable safety net, commit logs also help you track your progress. And the ability to branch, fork, and merge your code gives you the flexibility to experiment with different methods of feature implementation. You can also refine and fine-tune your software’s performance without the risk of breaking existing code. Finally, it simplifies remote backup and deployment to testing and production environments. These days, version control should be considered an essential part of your development, particularly if you collaborate with other individuals.

7. Take Thorough Meeting Notes

Whether you prefer to use a laptop or a spiral-bound notebook, take notes when you meet with your client and other collaborators. Otherwise, you may not retain that minor detail discussed during the meeting as effectively. Good note-taking demonstrates to your clients that you’re attentive, interested and dedicated to providing them with good service. It ensures you don’t forget the little details, and it also saves you the embarrassment of having to go back to the client for clarification. It sounds simple, but one minor modification that went forgotten or overlooked could mean major changes in code or functionality. Save yourself the headache, stress and humiliation and learn to write everything down.

8. Organize Your Assets

As with thorough note-taking, keeping assets organized is another important step toward streamlining your project work flow. You may even consider a separate version control repository for project assets that don’t belong in the finished code base. Your client will likely send you a lot of files, content, artwork and emails containing feedback and requests for modifications and new features. Often, they’ll send more than one version of those files or requests.

Think about putting these assets into version control or some well-defined project management software. It can go a long way toward helping you keep information organized. Sending the wrong file or hunting through hundreds of emails not only slows you down and introduces the likelihood of errors, it makes you look unprofessional.

9. Put Due Dates in Writing

Due dates may often be established when outlining the project and its contract, but if this isn’t something you’re already doing, or if your current system isn’t working as well as you would like, it’s definitely worth the attention. Large projects tend to have a lot of dependencies, and missing one deadline can often put an entire project behind schedule. Mark due dates on your calendar and discipline yourself to stick to them.

Due dates aren’t just for you, either. It’s not at all unreasonable to give your client due dates for various deliverables, such as content and branding, and to set fixed periods of time for reviewing and approving assets. Clearly define due dates for all parties, and furthermore, address the consequences of unmet deadlines. As with negotiating a contract and drafting the project outline, always try to be fair, but don’t be afraid to be firm. Your client will respect you for it, and your reputation and career depend on it.

Series Supported by Rackspace


The Web Development Series is supported by Rackspace, the better way to do hosting. No more worrying about web hosting uptime. No more spending your time, energy and resources trying to stay on top of things like patching, updating, monitoring, backing up data and the like. Learn why.

Images courtesy of Flickr, ZedZAP .. gone camping, justonlysteve

More About: code, contract, design, dev, developement, MARKETING, programming, project, style, web development series

For more Dev & Design coverage:

Christopher Kahler is a co-founder and CEO of Qriously, a service for measuring real-time public sentiment by replacing ads with questions in smartphone apps. Follow him on Twitter

In late 2010, Apple approved 14-year-old Robert Nay’s app, Bubble Ball, for publishing on the App Store, where it quickly racked up 2 million users and, for a short while, even wrested the ever-popular Angry Birds from its perch at the top of the download charts. It’s a staggering achievement for a young teen with no formal programming experience -– never mind education. No skills. Nada. Zip.

Nay used an application called Corona that essentially allows users to build smartphone apps using a graphical interface, eliminating the need of any coding skills. He’s a pioneering user of the next generation of platform dependencies — innovations upon which further innovations can be built.

The term “platform dependency,” referring to products and services that are symbiotic with an existing platform (FarmVille on Facebook, Tweetdeck on Twitter, Rapportive on Gmail, and so on), has been discussed at length in several recent blog posts that weigh its dangers and opportunities.

While these relationships are not unique to “our” industry, the heady pace of evolution in the information sector, modeled with equal parts idealism and fantasy, is pointing toward some fascinating outcomes. The most fascinating of these is also the most paradoxical: The smartest kids are coding themselves into unemployment.

Before I’m viciously indicted with committing the Luddite fallacy, give me a chance to qualify: Smart kids code platforms that are making it increasingly redundant to know how to code — look at Nay for instance. As such, coding as a skill is becoming a casualty of efficiency, which is a beautiful thing. Coding is a means to an end, and if new methods are developed that enable us normal folks to achieve comparable results, then that’s a win in my book.

To a certain extent this is already happening, albeit to a less romantic degree. Take Google App Engine for instance. Instead of needing to set up whole server infrastructures, you just upload a simple web app and Google handles everything else, from load-balancing to scaling. Many companies don’t even go that far. A Facebook Page, with its built-in tools to distribute content, advertise, promote and engage with an audience, is often all you need.

Beyond the purely technical realm, services and layers are appearing to make aesthetic skills more and more redundant as well. Enterprise software company Cloudera used 99designs, which recently scored $25 million in funding, to crowdsource its logo on the cheap. And apps like Instagram and Retro Camera that allow users with little “skill” to take brilliant photographs.

Eventually, you won’t need to have any technical knowledge in a world increasingly defined by technology.

Rather, the only thing you will need to have is an idea, and having good ones will be the only meaningful thing setting you apart from others. I like to think of it as the triumph of creativity over learned skill — a change that some believe has ramifications for formal education as well.

The only remaining question is: Where are your ideas going to bubble up from?

Interested in more Dev & Design resources? Check out Mashable Explore, a new way to discover information on your favorite Mashable topics.

More About: apps, platforms, programming, web apps, Web Development

For more Dev & Design coverage:

The Web Development Series is supported by Rackspace, the better way to do hosting. Learn more about Rackspace’s hosting solutions here.

Learning to code is something every tech-minded person should try at least once — and the wealth of online courses, many of which are free or surprisingly inexpensive, make learning about programming easier than ever.

If you’re thinking of picking up C++, Ruby on Rails, Python or Java, these online options might be a good way to test the waters of programming before you fully invest your time and money in formal training or certifications. And if you’re a veteran programmer in need of resources for learning new languages, these sites might help you a bit, too.

One disadvantage of learning to code through an online platform is the lack of face-to-face interactions with an instructor. But don’t let that intimidate you — Google, Stack Overflow, and other online forums (even Twitter) are great ways to get help when your code won’t compile, you don’t understand a concept or you just get frustrated.

In the comments, let us know if you’ve found other great resources for learning about programming — or other sites for support and Q&A for newer developers.

UC Berkeley Webcast/Courses

The University of California at Berkeley has an extensive catalog of webcasts, including events and courses. The coursework is entirely free to access, and it includes video and audio webcasts of computer sciences classes from the current semester all the way back to 2003.

Mozilla’s School of Webcraft

Mozilla’s 100% free developer training site is all about teaching noobs and jedis alike how to code. If you want to get started coding with something like HTML or if you’re an experienced dev who wants to dive into Python, the School of Webcraft is something worth checking out. Several courses generally run simultaneously, and new classes are being drafted all the time.

Google Code University

From Google Code, we have the Code University, a free and fascinating resource. And of course, it has its own forums for learners to ask questions and get help. True beginners can also start out with the introductions and tutorials, which are designed with newer devs in mind.

MIT’s OpenCourseWare

If you’ve dreamed of studying computer science at one of the U.S.’s leading tech institutions, here’s your chance. MIT’s free and accessible courses are great for ambitious would-be coders. Check out the full list of courses for computer science, which include introductions to Java, Python, C++ and more.

Series Supported by Rackspace


The Web Development Series is supported by Rackspace, the better way to do hosting. No more worrying about web hosting uptime. No more spending your time, energy and resources trying to stay on top of things like patching, updating, monitoring, backing up data and the like. Learn why.

More Dev & Design Resources from Mashable:

Ruby on Rails: Scaling Your App for Rapid Growth
Should Your API Be Free or Pay-to-Play?
HOW TO: Get Devs to Use Your Company’s API
Should Your Company Offer an API?
10 Tools for Getting Web Design Feedback

Top image courtesy of iStockphoto user nullplus

More About: beginner, code, coding, developers, development, education, learning, programming, web development series

For more Dev & Design coverage:

The Web Development Series is supported by Rackspace, the better way to do hosting. Learn more about Rackspace’s hosting solutions here.

Gowalla CTO and co-founder Scott Raymond knows a thing or two about Ruby — and about Cocoa, scaling, handling huge amounts of location data, mobile apps and NoSQL.

Gowalla is a Ruby shop, and as the captain of that particular ship, Raymond has had quite a bit of experience building a popular web app from the ground up using Ruby on Rails.

In a recent e-mail interview, we found out what Raymond had to say about those experiences and what he has learned from them over the past three and a half years.

Much has been made of Ruby/Rails’ perceived flaws when it comes to scaling. In your experience, what are the unique challenges of working with this language and framework and trying to scale an app for a nation-wide consumer audience?

Most of the “Rails can’t scale” noise is outdated or was misguided in the first place. In general, the question of scalability applies at the level of architecture and systems, and not really at the level of languages and frameworks.

That said, languages and frameworks do definitely have performance and efficiency characteristics that need to be considered. Ruby’s standard interpreter doesn’t have a great reputation for being fast, but as part of a larger, well-architected system, it is very rarely the bottleneck.

So, as a developer for a popular service, the challenge becomes trying to foresee which actions will be the most frequently requested, which data types will be the fastest growing, and which actions are the most performance-sensitive. In my experience, it’s harder to predict these things than you would think. I have spent many hours trying to “pre-scale” parts of the app that never became a problem, which often leads to maintenance headaches.

You guys collect and store a massive amount of location data for your app. How do you use Ruby and Rails for this type of data in these amounts?

We use a variety of storage systems for different purposes. Our biggest database is PostgreSQL — it currently stores the canonical records for most of our data, including users, spots, and checkins.

We also rely heavily on Redis for all kinds of things, like friendships, counters and queues. We use lots of memcached for ephemeral things, Varnish for HTTP caches and Solr to keep fuzzy spot searches fast.

Increasingly, we’re using Cassandra to store a lot of stream-like data — things like activity feeds and audit logs. I expect that our usage of Cassandra will grow a lot this year, and that we’ll also start relying on Hadoop to help us understand our data better.

Here is a simplified example of how we store and retrieve checkins, using a custom-build timeline service, called Chronologic, which is backed by Cassandra:

When you’re not coding in Ruby, what other languages/tools do you use? Or, if you had to choose another language for Gowalla, what would it be?

When I’m coding at work these days, it’s usually on our iOS client — so Cocoa/Objective-C is where I’m spending most of my time.

But for server-side work, I see us gradually moving toward a more services-oriented architecture. We are always looking at our application today and trying to identify pieces of functionality that can be isolated into services that have their own data storage and deployment patterns. So far, all of those services are written in Ruby, but I won’t be surprised if some of them end up being written in Scala, or with Node.js, or something else. But when it comes to the central web application that powers, I’m very happy with it being Ruby/Rails.

Here is a section of one of the view controllers in the Gowalla iPhone application. This code handles authenticating with a third-party service.

From a fan via Twitter: Was the traditional ActiveRecord modeling enough or did you have to use an NoSQL alternative?

Every Rails app that I’ve ever worked on has had to break away from the “ActiveRecord way” at some point, for some part of the app. But it’s not an all-or-nothing question. Most of the time, the standard relational/ActiveRecord approach works perfectly well, and the convenience of following the Rails golden path is completely worthwhile. But most interesting apps will run into at least a few points where the standard tools break down, and you need to access your data differently.

Fortunately, it’s a wonderful time for alternative data stores. Just look through the Heroku add-ons page — you’ve got Redis, MySQL, CouchDB, Memcache, MongoDB, Solr and more — all available as hosted services. It’s incredibly freeing to be able to tinker with these tools without worrying about up-front installation and configuration.

The example from the second question is a prime example of this. Scaling activity streams with a relational database in fairly real time is tricky — it often breaks down when one user has millions of followers, or when one user follows millions of others. To make it work, we created a service called Chronologic that manages any kind of timeline, and exposes a relatively simple interfa
ce to the Rails application. Under the covers, Chronologic uses Cassandra for most of its storage.

What kind of gem testing do you use, if any?

We use Shoulda, Factory Girl and FlexMock for testing our Ruby/Rails code. After each commit, a local continuous integration server runs the test suite and notifies the developers via Campfire of any failures.

What side project(s) are you working on right now?

Most of my “side” projects these days are tangentially work-related — small experiments to learn about a new database or library, to try out a new web service or as a proof-of-concept for a new technique. My work directly is littered with dozens of tiny re-writes of our iPhone client, each exploring some new UI idea, networking optimization, etc.

Series supported by Rackspace


The Web Development Series is supported by Rackspace, the better way to do hosting. No more worrying about web hosting uptime. No more spending your time, energy and resources trying to stay on top of things like patching, updating, monitoring, backing up data and the like. Learn why.

More Dev & Design Resources from Mashable:

HOW TO: Transfer Your Blog From to [VIDEO]
A Beginner’s Guide to Integrated Development Environments
10 Chrome Web Apps to Check Out
HOW TO: Make Your WordPress Blog More Like Tumblr
10 Tools for Getting Web Design Feedback

Image courtesy of Flickr, Robert Scoble.

More About: gowalla, node, programming, RoR, ruby, Ruby on Rails, Web Development, web development series

For more Dev & Design coverage:

The Web Development Series is supported by Rackspace, the better way to do hosting. Learn more about Rackspace’s hosting solutions here.

The Ruby community and the language itself are a fast-growing phenomenon that plays an ever-increasing role in the ecosystem of web apps we all know and use.

If you’re a beginning Ruby dev, this post is for you. We have polled seven experts in the Ruby community — developers who have come highly recommended and respected by their peers.

This is the advice they give specifically to new Ruby developers. We hope you find it useful, encouraging and enjoyable.

If you’re a seasoned pro or an intermediate Rubyist, stay tuned. We’ve got lots more where this came from, and our seven experts have got tips, tricks and code snippets for you, too.

Jacques Crocker: Learn As You Build

Jacques Crocker is a Rails Jedi based out of Seattle who loves working on early-stage startup ideas and launching new products. He’s helped launch almost a dozen Rails apps this year including (automatically scale your Heroku workers and dynos) and (a massively multiplayer online word game). Next year, he’s planning on using Rails to launch 24 new web apps.

In an e-mail exchange, he told us new Ruby devs should “start building something and get it released to GitHub as soon as possible.

“You don’t have to have a new or exciting idea to implement. When you are learning, just build stuff that has been done before. Build a scaled down version of Twitter. Or reimplement a blog.”

Crocker says he once ported a PHP-built job board to Rails — a thoroughly educational experience.

He continued, “I’d recommend finding a project that looks interesting on and getting up and running locally (and the tests functional). Then try adding a few new features to it. And get it upgraded to the latest Rails version while fixing the dependencies.

“Jumping straight into development work without experience will definitely be difficult and frustrating. However the amount of learning you’ll receive will be enormous… Making yourself suffer through the pain of a new environment will help you learn faster than you ever thought possible.”

Yehuda Katz: Dive Into the Ruby Community

Yehuda Katz is a member of the Ruby on Rails core team, and lead developer of the Merb project. He is a member of the jQuery Core Team and a core contributor to DataMapper. He contributes to many open source projects, like Rubinius and Johnson, and works on some he created himself, like Thor.

He advises newer Ruby developers, “Don’t be intimidated. Take advantage of the very many robust community resources that exist, and make connections with community members through open source. The Ruby ecosystem is hungry for new developers, and if you make your mark, you won’t go jobless for very long.”

In fact, Katz says the community itself is one of the strongest points of the Ruby language. “Even though most of the web development community is focused around the Rails framework, there are standalone libraries for just about everything, like virtually every new NoSQL database and connectivity with services like Twitter and Facebook.

“There’s a spirit of experimentation in the Ruby community that makes it extremely strong.”

Obie Fernandez: Start With a Clean Slate

Obie Fernandez is the founder and CEO of Hashrocket, a Florida-based web consultancy and product shop. He’s a well-regarded blogger and speaker, and he’s also a series editor and book author for higher-education publishers Addison-Wesley.

He said, “Don’t try to bring over your old idioms and patterns, because they’ll just weigh you down.

“When I came over to Ruby from Java, my first instinct was to try recreating a bunch of concepts and architectural patterns that I already knew, such as dependency injection, instead of learning new ones more appropriate to Ruby. If you’re coming from a statically typed language like I did, you might have some trouble letting go of the perceived security of type constraints.

“There’s like this whole Zen aspect of working with Ruby where you have to let go of trying to exercise control over every possible interface for your objects.”

He also echoes Katz’s statements about the Ruby community. “We’ve got this amazing, creative and hard-working global community of people working to make Ruby the most enjoyable environment. There is no big commercial vendor getting all capitalistic on us and causing problems like you see with Oracl
e and Microsoft and their developer communities. Almost everything that gets done in our space, 99% is done for open-source love and passion and because it is useful to the person doing it.”

Ryan Bates: Ask — and Answer — Questions

Ryan Bates is the producer and host of Railscasts, a site full of free Ruby on Rails screencasts.

For beginning Ruby devs, Bates recommended, “You can learn a lot by asking questions, and you can learn even more by contributing, yourself.

“With every problem you run into, there are many others who will likely run into the same thing. When you find a solution, write about it to help others and to get feedback on better solutions. We’re all learning.”

Bates takes his own advice, as well, by contributing to sites like Rails Forum.

Disclosure: Mashable‘s features editor, Josh Catone, is the co-founder of Rails Forum.

Desi McAdam: Learn From the Masters

Desi McAdam is a Ruby developer at Hashrocket. She also co-founded and regularly contributes to the technical blogging group DevChix.

She said the thing that helped her most in her study and use of the Ruby programming language was “pairing with other masters of the language.” Since not everyone who wants to learn Ruby has one-on-one access to the masters, however, she has a few suggestions for beginning devs.

“I would also suggest reading books like The Ruby Way by Hal Fulton and Programming Ruby, a.k.a. The Pickaxe Book, by Dave Thomas, Chad Fowler and Andy Hunt.

“If Ruby happens to be the first language you are ever learning I would suggest Learn To Program by Chris Pine. My sister is a nurse who has never done any programming whatsoever and she was able to use this book to learn the fundamentals of programming and she did so at a remarkably fast pace.”

Raquel Hernández: Three Steps With Four Tools

Raquel Hernández is an experienced hacker/mathematician with a background that includes many programming languages and many work environments, from freelance and contract work to startups and larger companies. However, she’s made a particular focus of Ruby and Rails.

She came to us with a list of specific steps and tools for new developers.

“I would suggest reading Programming Ruby 1.9: The Pragmatic Programmer’s Guide (The Pickaxe Book) in order to get familiar with Ruby.

“For Rails-specific stuff, I’d highly recommend Railscasts as starting point. Pick a fun project; complete the Getting Started with Rails tutorial; and deploy it to Heroku.

“After completing these three steps, you’re going to be having so much fun and getting lots of things done that there won’t be coming back.”

José Valim: Focus on Best Practices and Testing

José Valim is the founder of Plataforma Tec, a web development shop and consultancy. He’s also an open source developer and a Rails Core team member.

For beginners, he writes, “Ruby is a very powerful language… it is natural that when you start your first project, you get carried away by the productivity the language gives you and don’t worry about Ruby’s best practices.

“My advice is to control a little this initial amazement and read up on Ruby best practices. Ruby is an object-oriented programming language, so the knowledge of features like encapsulation and inheritance and principles like single responsibility are extremely important to have.

Valim also advises new Ruby devs to not leave testing out of the picture. “Ruby ships with a built-in test framework, and there are several others available as open source, all with plenty of documentation and books. It will reduce your productivity at the beginning, but it definitely pays off withs well-tested, organized and readable code.”

Specific Questions or Tips?

If you’re new to Ruby and you have a question, feel free to drop it in the comments! Our panelists are likely to stop by with more feedback.

Likewise, if you’re a more experienced Ruby dev and you feel like answering questions or passing on some great advice of your own, please leave a comment and school us all.

Series supported by Rackspace


The Web Development Series is supported by Rackspace, the better way to do hosting. No more worrying about web hosting uptime. No more spending your time, energy and resources trying to stay on top of things like patching, updating, monitoring, backing up data and the like. Learn why.

More Dev & Design Resources from Mashable:

The Top 8 Web Development Highlights of 2010
HOW TO: Get More Out of Your Fonts
4 Predictions for Web Design in 2011
HOW TO: Make the Most of TextMate
5 Free Annotation and Collaboration Tools for Web Projects

Image of José Valim courtesy of Flickr, levycarneiro.

More About: beginner, developers, programming, rails, ruby, ruby tips series, Web Development, web development series

For more Dev & Design coverage:

The Web Development Series is supported by Rackspace, the better way to do hosting. Learn more about Rackspace’s hosting solutions here.

This year brought quite a few headlines of note to the developer world. While we each have our favorites, from new releases of classic tools to astounding announcements from tech companies, here, in no particular order, are a few stories that stood out to us this year.

In the comments, we’d love to know what stories stood out most to you this year, partly to indulge our sense of gratuitous end-of-year nostalgia and partly to help us hone our coverage for 2011, when we hope to bring you more fascinating web dev news than ever before.

What were your favorite dev-related headlines of 2010?

1. The Release of Rails 3.0

Early in February, the Ruby on Rails core team took the wraps off Rails 3.0, a long-awaited release of the popular Ruby framework.

Rails creator David Heinemeier Hansson wrote on the Rails blog, “We’ve had more than 250 people help with the release and we’ve been through almost 4,000 commits since 2.3 to get here. Yet still the new version feels lighter, more agile, and easier to understand.

“It’s a great day to be a Rails developer.”

2. Salesforce’s Acquisition of Heroku

Earlier this month, Salesforce bought Heroku for a staggering $212 million, giving another token of legitimacy to the growing Ruby community as well as to cloud-based programming tools.

Salesforce CEO Marc Benioff said at the time, “The next era of cloud computing is social, mobile and real-time… Ruby is the language of Cloud 2, and Heroku is the leading Ruby application platform-as-a-service for Cloud 2 that is fueling this growing community. We think this acquisition will uniquely position as the cornerstone for the next generation of app developers.”

3. Facebook’s Release of HipHop for PHP

In February, Facebook rolled out HipHop, an internal open-source project intended to speed up PHP for large-scale applications.

HipHop isn’t quite a compiler. “Rather,” wrote Facebook engineer Haiping Zhao, “it is a source code transformer. HipHop programmatically transforms your PHP source code into highly optimized C++ and then uses g++ to compile it.”

The project was the culmination of two years of work by a small team of engineers; in the end, it got a thumbs-up from PHP creator Rasmus Lerdorf, who said, “I think it is a cool project and it will certainly be a good option for some sites.”

4. The Rise of Node.js

Node.js has been around for a couple years, but 2010 was the year awareness and use of the JavaScript framework really blew up.

Commits have grown, as have the number of committers. Traffic to the project website has steadily climbed through the year, and downloads for Node.js from GitHub have predictably grown, as well.

As the organizers of the annual Node Knockout wrote, “It’s at the bleeding edge of a technology stack that allows developers to blur the lines between software, the web and the new like never before.”

5. Microsoft’s Release of Visual Studio 2010

The latest version of Microsoft’s Visual Studio, a big release by any standards, launched this year to impressive reviews from all corners of the web. InfoWorld said the release “marks a major advance in functionality and ease,” and The Register wrote, “It is hard not to be impressed by Microsoft’s tool suite.”

The IDE was overhauled, completely rewritten from the ground up. Support for Silverlight was added, and Microsoft also took this opportunity to release F#, a new programming language developed by Microsoft Research.

6. Facebook’s Release of the Open Graph API

Facebook and social app developers have long wrestled with Facebook integration for third parties. In the spring at its f8 developer conference, Facebook rolled out a brand new model for tapping into the social web, and it did so to unprecedented fanfare.

Dubbed the Open Graph, Facebook’s changes brought instant gratification and familiarity for Facebook users as they surfed the web — and they brought a fast and easy way for devs to integrate with the social network, as easy as a single line of HTML in many cases.

7. The Android/Java/Oracle Saga

What a year it’s been for Java! Not only is the language a key part in the programming stack of the fastest-growing mobile OS out there; it’s also the star of a big, potentially spendy lawsuit between two of the giants of the tech industry.

Sun, which developed the language in-house back in the dark ages, was acquired by Oracle. That deal became official in January, and Oracle wasted no time in getting litigious with Google over that company’s use of Java in the Android platform and the Dalvik virtual machine that stands in for the JVM on mobile OSes.

The lawsuit began in August with Oracle claiming that Google “knowingly, directly and repeatedly infringed Oracle’s Java-related intellectual property.”

Google quickly countered that it was shocked — shocked! — that Oracle would make such claims over an open-source technology. It followed with the assertions that Oracle’s patents are unenforceable and that if there had been “any use in the Android platform of any protected elements” of Java, Google itself “is not liable” due to the fact that such violations would have been committed by third parties and without Google’s knowledge.

We’ll continue to keep an eye on the lawsuit and on Java’s role in the Android platform throughout 2011.

8. Apple Declares War on Flash

Tensions between Apple and Adobe ran high this year, beginning in January when the iPad launched without support for Flash. Then in February, Apple co-founder Steve Jobs told employees why: “No one will be using Flash. The world is moving to HTML5.”

These were the words that launched a thousand blog posts. Throughout the spring, the two companies waged a war of words — and one sweet antitrust inquiry with the Department of Justice over Apple’s banning of Flash for iPhone app devs.

Steve Jobs dropped the bomb of the year in a passive-aggressive missive on Flash in which the Apple co-founder stated that Adobe’s programming technology is “no longer necessary” and waxed hypocritical about open technologies.

But while he may have been passive aggressive and hypocritical, he also may have been right. With HTML5 making a strong showing early in its lifetime, it was only a matter of time before a public figure of Jobs’s stature would make a statement or two about the death of Flash.

Of course, this tension has made for a convenient cozying-up between Google and Adobe along the way.

What Are Your Picks?

Again, let us know in the comments what your favorite stories of 2010 were — and Happy New Year from the geeks at Mashable!

With special thanks to our Twitter friends who made suggestions for this list: Jordan Runnin, Leon Gersing and Jeremy Bray.

More About: 2010, developers, heroku, hiphop, java, News, node.js, php, programming, rails, ruby, visual studio, Web Development, web development series

For more Dev & Design coverage: