Creating your own custom apps has never been easier than it is today. Thanks to an abundance of smart frameworks for Web, desktop, and mobile development, anyone with the right mindset, focus, and determination can build cool, data-driven apps for almost any platform. But getting started can be daunting for a would-be coder. In this article, we'll explore how to get started in app development.

First, a few caveats: Programming isn't for everyone. Although it's now relatively easy to get started, it's unrealistic to expect to produce world-class, professional-quality apps right out of the gate. So set your ambitions accordingly, and expect to spend a few months learning a language and framework before producing anything remotely useful.

And be prepared for the fact that your first apps aren't likely to be quite as sophisticated, efficient, and polished as those created by experienced developers. But with some planning and dedication, you can create very useful apps for yourself, your business, and your customers. As we'll discuss further below, development is an iterative process, and you'll have ample opportunity to refine and improve your apps as you go along.

What to expect when you're expecting to code

Software development is all about process, and the process of learning to code and creating an app looks like this:

1. Choose a language and framework.

2. Get some training.

3. Plan your app.

4. Make an MVP (minimum viable product).

5. Iterate!

Simple, right? Well, as simple as it can be, anyway. Let's move on to Step 1.

Pick a programming language

Possibly the most baffling decision a new coder can make is the selection of a programming language and accompanying framework. Every language has its advantages and disadvantages, and--to make matters more confusing--old concepts about the proper role of a given language are breaking down, so it's no longer all that easy to pigeonhole a language into a narrow purpose. For example, JavaScript, typically known as a front-end language for browser-side effects, is now widely used on the back end.

Fully exploring the range of languages and frameworks is an undertaking that falls outside the scope of this article, but here's a quick rundown of some good options:

  • JavaScript -- Essential scripting language for front-end/UI development, but also growing in popularity as a back-end language
  • Python -- Versatile language for desktop and Web apps that's also great for scripting
  • PHP -- Popular server-side language for Web apps, essential for tinkering in blog platforms like WordPress
  • Ruby -- Easy-to-learn language commonly used for Web apps
  • Java -- Versatile language commonly used for Android apps
  • Objective-C -- General-purpose language based on C, the core language for iOS apps

It's worth pointing out that the commonly accepted or intended uses for a given language are by no means written in stone. Thanks to a growing body of available multi-platform frameworks, you can build iPhone or Android mobile apps from code written in just about any popular language. A good example is PhoneGap, which compiles your HTML, CSS, and JavaScript into native apps for iOS, Android, or Windows Phone.

Most app development today happens within the context of a development framework--a software platform that organizes your code and gives structure to your app, and typically automates a lot of routine tasks. Some common examples include Rails for the Ruby programming language, Ember for JavaScript, and Django for Python. Because frameworks take a holistic approach to building an app based on pragmatic design principles, they'll require you to learn at least a little about some supporting scripting languages. So even if you decide you want to focus on Ruby or Python as your core programming language, you'll end up learning some HTML, CSS, and JavaScript or CoffeeScript (a separate, simpler language that compiles into JavaScript--it's pretty awesome) along the way. (In general, you should think of HTML and CSS as basic skills, no matter what language and framework you're using.)

It's a good idea to get a little hands-on feel for a few languages before settling on one as your primary focus. I suggest taking some basic tutorials for a spin on a learning site like Codecademy to see which language resonates with you most.

Get some dev training

Once you've figured out where you'd like to start, it's time for some training. There are tons of great options out there for dev training, ranging from live classes to online courses and books. When in doubt, do all three.

It's a good idea to invest some time in online courses before devoting time and money to an in-person class. Sites like Code School, Codecademy, and Treehouse offer rich interactive primers on a variety of programming languages and development frameworks at very low cost. Codeacademy's free courses are an excellent place to start getting a feel for coding without dipping into your training budget. My personal favorite of the three, Treehouse, offers an incredible range of courses and tutorials designed to take new coders from the very basics to building advanced projects with sophisticated social media features.

In-person programming courses like those offered by San Francisco-based Marakana or Denver-based Pragmatic Studio can give you a hands-on coding crash course in one week for about $2500, depending on the course. These classes focus explicitly on one programming language or framework, such as iOS or Android for mobile, or HTML5 or Ruby on Rails for the Web. Typically you'll get a guided experience building some simple project throughout the week, such as a blog, a Twitter clone or a To-Do app.

The main benefit live courses offer over online tutorials is a chance to ask questions and interact with a seasoned developer who can coach you and give you a sense of perspective about the challenges you're facing as a new coder. But be prepared to move quickly: Most of the students in these courses will be experienced developers looking to expand their skills, and dabblers can fall behind fast. So be sure to take the time to acquaint yourself with the basics of the language or framework you'll be learning ahead of time.

There are, of course, more comprehensive boot camps, such as, well, Dev Bootcamp, in which a select group of students get an intensive immersion in a full range of development topics over a nine-week period. But the length of the programs, the limited number of available slots, and $12,000+ price tags make them impractical for the small-business DIYer.

It's a good idea to allow at least a month or so of pure training time before expecting any productivity out of your budding programmer. At this point, you still won't have a "real" developer on your hands. Instead, you'll have a somewhat overwhelmed person with some basic programming skills and a rough idea of how an app comes together.

Plan your app

After you've got several weeks of training under your belt, you should have enough working knowledge of a language and framework to begin planning your app. Based on what you've learned in your classes, books, and practice tutorials, you can start to map out the features you need, the underlying data structure, and the interface design.

Development methodology is a whole subject unto itself, and many professional developers are fanatical about it. (Ask PCWorld's CTO about Agile, for instance, and be prepared for an earful.) And not for no reason, either: Bad development practices can ruin a product. The process laid out in this article is largely influenced by the Agile Manifesto, which focused on producing working software quickly, while allowing opportunity for improvement and alteration through ongoing iteration. But as you start out on your path of DIY programming, don't obsess about methodology too much. Just focus on building a useful app that meets your own needs.

Planning your app should be a simple process, and need not get in the way of actually creating something. At the outset, define clearly what it is you want your app to do. Keep it concise and functional. Think "Customers will be able to schedule service appointments from their phone" over "Streamline customer interactions through self-service features." The first example describes an action that you can create in your code. The second describes an abstract concept that offers no clear direction.

You may, of course, want your app to do more than one thing. So capture all of the things you want it to do, from a specific user's perspective, in a single list. Be sure to focus on the actual result of the action, and don't get bogged down in interface considerations at this point. Don't get into details like tapping or clicking buttons, boxes, or forms. The phrase "tap a button to schedule an appointment" is needlessly restrictive, and closes your mind to opportunities. It doesn't belong on this list.

Once you've got your list, narrow it down. If you've got a list of 10 features, try reducing it to four or five that are absolutely essential, and save the rest for future iterations. The fewer features you try to build right out of the gate, the sooner you'll have a working app.

At this point, you can also start thinking about design principles. Draw some sketches of your app's screens. Consider the flow of a user's experience through these screens. What has to be on the opening screen for users to understand your app? After someone does something on that home screen, what happens next? You can map out the process with a flow chart, and make simple wireframe mockups to guide your design process. Tools like LucidChart and make it easy to generate useful mock-ups and diagrams quickly.

Develop iteratively

Once you have a basic plan, you can start thinking about how to turn it into working software. Expect to spend several weeks researching a range of options for building the app in a way that accomplishes your goals, and then several weeks more for actually coding a basic, feature-limited version of the app. This is sometimes called an MVP, or minimum viable product, and it represents a starting point from which you can continue to iterate the app based on what's working and what's not.

As your app begins to take shape, you may want to bring in some outside dev talent on a limited basis to sanity-check your work, answer questions that arise during the process, and offer solutions to nagging problems. Many freelance developers are happy to offer their insights for an hourly rate, and you can benefit from their expertise without hiring them for a complete project.

To be sure, software development isn't easy. If it were, everyone would do it. But if you approach it with realistic ambitions and manage your training, research, and planning processes effectively, the DIY approach can pay off in unexpected ways as you continue to improve your app, build your skills, and tackle new projects.