TweetFollow Us on Twitter

The Road to Code: The Courage to Start

Volume Number: 23 (2007)
Issue Number: 07
Column Tag: The Road to Code

The Road to Code: The Courage to Start

Take the first step towards programming for Mac OS X

by Dave Dribin

Welcome

Welcome to The Road to Code, a new column about programming on OS X for the non-programmer. My name is Dave Dribin, and I'll be your guide in the issues to come. Unlike a rollercoaster, playing around can't hurt you. In fact, the best way to learn programming is to actually do it. So please, keep your hands and fingers on the keyboard at all times.

Why Program

Before I go into the details of programming, you might be wondering why you would want to program a computer. As a computer user, you no doubt know that the computer is our personal assistant. It helps us stay organized, eases communication with others, and entertains us. Unfortunately, you might also agree that a computer doesn't always work the way we expect. Sometimes a piece of software allows you to do everything except that one thing you need it to do. Other times, software just doesn't exist for the task you are trying to accomplish. The key to harnessing the full power of your personal assistant is to speak to it directly by writing your own programs.

I began programming a long time ago on an operating system far, far away. Apple's DOS 3.3, to be exact, running on an Apple ][+. Once I started programming, I was hooked. The fact that I could tell the computer what to do and it would listen was fantastic. My first programs were very simple, but over the next few years, the programs I wrote increased in complexity.

A year ago, I was going through some of my old 5.25" floppy disks. I came across a number of programs I wrote in Applesoft BASIC: a program to keep track of my (measly) bank account, a blackjack game, and even a program to keep track of my bowling scores. While the finance software and blackjack are not groundbreaking ideas, the bowling program was fairly unique. At the end of our bowling league season, we would get a printout with all of our scores for the entire year, along with a ton of statistics. I was a bowling geek and loved these stats, but I didn't want to wait until the end of the year to see them. So, I wrote a program that would allow me to enter my scores and provide the same statistics without the wait.


Figure 1: My Apple II bowling program

There are a couple of lessons to take away from this. First, start small. I didn't dive right into writing my bowling program. I also found plenty of half-finished work and small, experimental programs on my old disks. Second, practice, practice, practice. The more I programmed, the better I got. Even the little programs that don't do much add to your experience, and that counts for something.

A lot has changed since the days of the Apple ][, with its 1 megahertz processor, 64 kilobytes of memory, and 140 kilobyte floppy disks, but the reasons to start programming have not. Maybe you want to write a program that actually works the way you do, maybe you want to write the next blockbuster game, or maybe you just think it's fun. These are the reasons why I began programming and why I still program today. Whatever your reasons, you should start, too.

What Is Software

Software, also known as a program, is what controls a computer. A computer's sole purpose is to respond to instructions from a program. By writing programs for the computer, you can take full control of your personal assistant. Think of a program as a series of instructions, like a recipe, that the computer follows, step by step. But sometimes even a programmer has trouble communicating with the computer. It is very literal in its interpretation of these instructions. If you don't give them properly, the computer may go off and do something unexpected.

The language used to write programs is called, brace yourself for this, a programming language. Actually, computers are multilingual. Some of the programming languages available on Mac OS X 10.4 are C, C++, Ruby, Python, and Perl. Each language has its own pros and cons. However, the language Apple recommends for writing new OS X software is called Objective-C. Since in this case it's wise to follow the mothership, Objective-C will be the main focus of this column. Objective-C is an extension to C with support for object-oriented programming. You'll get to learn about Objective-C and fancy phrases like "object-oriented programming" in due time, but first we need to build a strong foundation. Since Objective-C is built upon C, I'll cover the basics of C before moving on to Objective-C. As the old saying goes, you've got to learn to walk before you can run.

Time to Code

Before starting to write our first program and in order to follow along, you will need to install Xcode, Apple's free development environment. As of this writing, the current version of Xcode is 2.4.1. It requires Mac OS X 10.4, and is available from Apple's developer website:

http://developer.apple.com/tools/xcode/

You will need to become an Apple Developer Connection (ADC) member, but it does not cost anything to register. Xcode includes all the tools to write Objective-C, including a text editor and a compiler. Even though Objective-C is the language we will be communicating to the computer with, the computer's processor does not understand this language directly. A compiler is needed to translate Objective-C into assembly code, which is the true native tongue of the processor.

With Xcode installed, we can finally start getting our hands dirty and begin coding. We're going to start with what's called a "Hello World" program. This "Hello World" program will print a nice greeting to the user when run, and is often used to introduce programmers to a new language. A word of warning: "Hello World" isn't sexy. In fact, it doesn't even use windows or the mouse. We're going to crawl back into the dark ages for a bit, and we'll be creating console applications, not applications with a graphical user interface (GUI), until we get through the basics. While console applications will run directly in Xcode, they can also be run from the command line using Terminal. But don't get discouraged. We will get to GUI applications soon enough.

Creating Hello World

To create our first program, startup Xcode and select New Project… from the File menu. Xcode provides starting point templates for many kinds of projects. The one we are looking for is Standard Tool under Command Line Utility. For a project name, choose hello_world and choose a suitable directory, such as ~/work/hello_word. After clicking Finish, Xcode will create the project, along with some basic files. Use Figure 2 and Figure 3 as examples.


Figure 2: Creating a new Standard Tool project


Figure 3: Setting the project name and directory

C programs are made up of one or more text files with the ".c" extension called source files. A source file contains the actual programming instructions called source code, often just shortened to source or code depending on the context. This is also why programming is sometimes referred to as coding [Editor's note: if they can be called programmers or coders, could they also be referred to as sorcerers? - jr]. As part of the New Project template, Xcode created a single source file named main.c. To view this file, expand the Source item in the left pane, and select the main.c item. Next, click on the Editor toolbar icon. Your window should look similar to Figure 4.


Figure 4: main.c source file in Xcode

You will notice that this file is not empty. As it turns out, Xcode creates a ready-to-run "Hello World" every time we create a new project. This is handy for us because it means we don't even need to type anything to get started. Click on the Build and Go toolbar icon to compile and run the program. If all goes well, you should get a Run Log window with the Hello, World! message on line 2 similar to Figure 5.


Figure 5: Hello World Run Log

Let's start picking this program apart line by line. The programming instructions are listed in the order you want them to execute. You can think of these instructions, called statements, as sentences, except instead of using a period to mark the end of a sentence, C uses a semicolon to mark the end of a statement. Not every line contains executable statements, though. Sometimes, the code contains extra information about the program for the compiler, and other times it contains extra information for the programmer. For example, Line 4 starts with two slashes, and is what is called a comment. The compiler ignores the two slashes and any text after them. You can put whatever you want in comments, but they should be used to make the program more understandable for someone reading the program.

On line 5, you have a statement that looks like:

   printf("Hello, World!\n");

This is what is known as a function call. A function in C is a set of statements that can be reused over and over again. A function call executes the function's statements. When the function finishes, the program picks up where it left off before the function call.

In this function call, printf is the name of the function to execute, and the text between the parentheses is the function's arguments. Arguments are used as inputs to the function allowing you to customize how it behaves. The text between the double quotes is called a string. The printf function is part of the Standard C library, and displays a message to the console. It expects a string argument and uses that string as its message.

First Steps

To get a better understanding, let's modify this program a bit. Change this line of code to:

   printf("My favorite number is %d\n", 7);

Now build and run the program, and the output in the Run Log should show:

My favorite number is 7

Now it's getting interesting. This time we passed two arguments to printf, the first a string, and the second a number. You'll notice that instead of printing %d, it replaced that with 7. This is where the "f" part of printf name comes from: formatted printing. The string passed to printf is called a format string, and is used like a template to format the final message. In the example above, %d is a placeholder for an integer number. An integer is a number without decimal points. Format strings could be a topic in itself, but here is another example showing how to use strings and floating point numbers (numbers with a decimal point):

   printf("Hello %s.\nMy lunch cost $%.2f.\n", "Dave", 7.5);

The output of this is:

Hello Dave.
My lunch cost $7.50.

You can see the %s is replaced with the string Dave and the %.2f is replaced with 7.50. This also shows how you can customize the formatted output. The .2 tells printf to always use 2 places after the decimal point. The final piece of magic going on is the string \n. printf replaces this string with a newline, which is why our output shows up on two lines. You almost always want one of these at the end of your format string, but I wanted to show explicitly what \n does and that you can put them anywhere in your string.

Congratulations! You're now programming! Try replacing the string "Dave" with your own name, and try printing out other numbers. Remember, it helps to experiment.

Variables

Variables are the next key concept to understand. Think of variables as containers that hold stuff, like storage boxes that you may have around the house. These boxes can hold different items, such as books and clothes. In order to keep things organized, your boxes may also have labels, like "Science Fiction", so you know what it contains. Similarly, variables can hold different values, such as numbers and strings and they also have labels to help keep things organized. Let's replace the entire main.c of our earlier program with Listing 1.

Listing 1: main.c demonstrating variables

#include <stdio.h>
int main(int argc, const char * argv[])
{
   int myVariable;
   myVariable = 5;
   printf("The number is %d\n", myVariable);
   myVariable = myVariable*2;
   printf("The number is now %d\n", myVariable);
   
   return 0;
}

In C, every variable must be declared before it's used, so the compiler is aware of it. The statement on line 3 is called a variable declaration, and it tells the compiler the variable's label, called a name, and type. This variable is named myVariable and its type is int, for an integer. Why do we need the type? Back to the box analogy, variables in C are like boxes with strict rules. Boxes that are designed to hold books cannot hold clothes, and boxes designed to hold clothes cannot hold books. Thus, an integer variable can hold any integer, but not any other type, such as floating point numbers or strings. This may seem silly, but one benefit to including the type with every variable is it allows the compiler to tell you when you've made a mistake. Just as your parents will tell you if you are putting your books in your clothes box and make you fix it, the compiler will not let you put a string in an integer variable.

You can change the contents of a variable with an assignment statement using an equal sign. The first assignment statement sets the contents of the variable, myVariable, to five. The second assignment statement shows that you can use a mathematical expression on the right hand side of the equal sign. In this case the asterisk (also called a star) means we are multiplying the original number in myVariable, five, by two. The resulting output of this program is:

The number is 5
The number is now 10

A Brief Interlude on Expressions

You can use any of the common arithmetic operations summarized in Table 1 as part of a mathematical expression, and you can use parenthesis to prioritize multiple operations. Take this expression, as an example:

   myVariable = (myVariable+1)*2;

First, one is added to myVariable and then the result is multiplied it by two. If myVariable starts off as five, it will be set to twelve by this statement. Without parenthesis, the standard operator priority is observed. In this case, one is multiplied by two first, and then the result is added to myVariable resulting in myVariable being set to seven. It's usually a good idea to add parentheses to any complex expression to avoid confusion.

Table 1: Arithmetic Operations By Priority

Operation   C Syntax   
              Multiply      *   
              Divide        /   
              Add           +   
              Subtract      -   

Variety is the Spice of Life

Variables are an extremely important part of not only C programming, but also any programming language. Now that you know the basics of variables, try changing the name of myVariable to something else or adding new variables. Also, try out different mathematical expressions. Keep in mind that variable names have certain restrictions. You may only use letters, numbers or the underscore character ("_"), and they must not begin with a number.

Your Own Functions

The Standard C library contains other functions besides printf, but as your program starts getting larger, you will want to write your own custom functions. Usually this is because you want to use the same code without duplicating it, but sometimes you will use functions to make your programs easier to understand. Let's say that we will be printing our Hello, World! message multiple times. We can put this code in our own function, and then call it multiple times. Modify main.c to match Listing 3.

Listing 3: main.c demonstrating custom functions

#include <stdio.h>
void printMessage(void)
{
   printf("Hello, World!\n");
   return;
}
int main(int argc, const char * argv[])
{
   printMessage();
   printMessage();
   return 0;
}

If you build and run this program, you should see our message printed twice:

Hello, World!
Hello, World!

Notice that we typed our function before using it — it precedes its use in the program. This is called defining a function. Like variables, you must always tell the compiler about the function ahead of time. The very first line of a function is called a function signature. The function signature specifies the name of the function, the name and type of each argument, and the type of the return value. Let's look at our function signature:

void printMessage(void)

Our function name is printMessage. It doesn't take any arguments, so we use (void) to specify this. The first void before the function name means our function does not have a return value. We will get more into arguments and return values in a bit.

After the function signature comes the function body. The function body always begins and ends with curly braces, { and }. Inside the braces are the function's statements. The body of the printMessage function contains two statements. The first calls another function, printf. And the second is a return statement. A return statement marks the end of a function, and causes the program to return to the place where the function was called. While you may include statements after the return statement, they won't get executed. The return statement is optional for functions without a return value, so we could have written this function with one statement as:

void printMessage(void)
{
   printf("Hello, World!\n");
}

Arguments and Return Values

As I mentioned earlier, functions may have arguments and return values to customize their behavior, similar to a mathematical function. Modify main.c to match Listing 5.

Listing 5: main.c demonstrating function arguments and return values

#include <stdio.h>
int squareNumber(int number)
{
   int square;
   square = number*number;
   return square;
}
int main(int argc, const char * argv[])
{
   int number;
   number = 5;
   printf("The number is %d\n", number);
   number = squareNumber(number);
   printf("The number is now %d\n", number);
   
   return 0;
}

If you build and run this program, you should get the output:

The number is 5
The number is now 25

The function signature of the squareNumber function is different from the printMessage function in that the return type has changed from void to int, and the arguments have changed from (void) to (int number). This states that our function expects to take one integer argument and return an integer value. Inside the body of our function, we multiply the number by itself and store this result in a new integer variable called square. This time, the return statement itself takes an argument, which is used as the return value.

Local Scope of Function Variables

Function arguments themselves are variables. Thus, instead of creating a new variable, we could have shortened our function to:

int squareNumber(int number)
{
   number = number*number;
   return number;
}

Notice that even though we are changing the number variable in the squareNumber function, we still have to set the number variable in the main function. This is because each function has it's own set of variables that are independent from other functions. Variables defined in a function are called local variables. Local variables are only available for use inside the function they are declared in and do not conflict with variables defined in another function. They are essentially different boxes that just happen to have the same label. The concept of which variables are available is called variable scoping. We will cover more about variable scoping over time.

As it turns out, we don't even have to bother using the number argument as a variable. We can just do the multiplication directly in the return statement:

int squareNumber(int number)
{
   return number*number;
}

Multiple Arguments

Functions may take more than one argument by separating each one with a comma:

int multiplyNumbers(int number1, int number2)
{
   return number1*number2;
}

This states that you must pass two arguments when calling multiplyNumbers, for example:

   number = multiplyNumbers(number, 3);

Now that you know how to define your own functions, it's time again to experiment. If you are writing your own functions, keep in mind that the same restrictions described above for variable names also apply to function names. Try creating a function that takes three floating-point number arguments and returns the average of them. I'll give you a hint, especially since I haven't mentioned how to specify floating point number variables and return values, yet. Here's a function signature:

float threeNumberAverage(float number1, float number2, float number3)

Notice that I used float as type for the arguments and return value. Try and fill in the function body yourself.

Tying Up Loose Ends

Before wrapping up, I want to cover a couple points I've been skirting around. Now that you know how to define functions, you'll notice that we've actually been defining two functions in the last few examples. The second function is named main, and main is a special function. The operating system always calls main when a C program starts executing, and is called the entry point of your program. You'll notice that the signature for main has two arguments and a return value. The arguments use somewhat advanced types like an array of strings, which you can ignore for now. The integer return value is sent to the operating system when your program exits. The operating system then sends this value to the program that started your program. For example, if you change the return value to something other than zero, you will see this reflected in the Xcode Run Log window as the status. Be careful, though. Returning a number other than zero from main is typically used to indicate that something in your program went wrong. I suggest always returning zero, for now.

The second point I've skirted around is the very first line of every example:

#include <stdio.h>

Remember how I said that all functions must be defined before use? Well you may be wondering why we can call printf without a definition. This first line tells the compiler to include another source file named stdio.h. This source file, which is short for "standard input and output", contains the definitions for all of the Standard C library functions that pertain to input and output. Notice that this source file has a ".h" extension instead of ".c". This is a special source file called a header file. We will be learning more about header files, but for now, you need to remember to have this line in your source files, if you plan to use printf.

Conclusion

Phew! You made it through this first article, and you've already learned a lot about C programming. I'll reiterate what I said about practice. Take what you've learned about functions and variables and see what you can do. It doesn't hurt to experiment. You'll probably run into problems, but that's all part of the learning process.

Learning something new can be overwhelming. I started running a couple years ago, after being mainly inactive my entire adult life. When I was getting started, I read an inspirational book called The Courage To Start, by John "The Penguin" Bingham (Bingham 1999). A key point John makes is that the hardest part about starting to run at the age of forty-three is taking the first step. This advice holds true to learning anything new, no matter what your age is, though. Don't let that first step scare you. The next time you are cursing at your computer for not being a good personal assistant, take a moment and think. You could wait for an existing piece of software to be enhanced or a new piece of software to emerge, which is what most people do. But if you know how to program, you could write it yourself. Embrace that first step, and I'll see you next month.

Bibliography

Bingham, John. The Courage to Start: A Guide to Running for Your Life. 1999.


Dave Dribin has been writing professional software for over eleven years. After five years programming embedded C in the telecom industry and a brief stint riding the Internet bubble, he decided to venture out on his own. Since 2001, he has been providing independent consulting services, and in 2006, he founded Bit Maki, Inc. Find out more at http://www.bitmaki.com/ and http://www.dribin.org/dave/>.

 
AAPL
$517.96
Apple Inc.
-3.72
MSFT
$39.75
Microsoft Corpora
+0.57
GOOG
$536.44
Google Inc.
+3.92

MacTech Search:
Community Search:

Software Updates via MacUpdate

Starcraft II: Wings of Liberty 1.1.1.180...
Download the patch by launching the Starcraft II game and downloading it through the Battle.net connection within the app. Starcraft II: Wings of Liberty is a strategy game played in real-time. You... Read more
Sibelius 7.5.0 - Music notation solution...
Sibelius is the world's best-selling music notation software for Mac. It is as intuitive to use as a pen, yet so powerful that it does most things in less than the blink of an eye. The demo includes... Read more
Typinator 5.9 - Speedy and reliable text...
Typinator turbo-charges your typing productivity. Type a little. Typinator does the rest. We've all faced projects that require repetitive typing tasks. With Typinator, you can store commonly used... Read more
MYStuff Pro 2.0.16 - Create inventories...
MYStuff Pro is the most flexible way to create detail-rich inventories for your home or small business. Add items to MYStuff by dragging and dropping existing information, uploading new images, or... Read more
TurboTax 2013.r17.002 - Manage your 2013...
TurboTax guides you through your tax return step by step, does all the calculations, and checks your return for errors and overlooked deductions. It lets you file your return electronically to get... Read more
TrailRunner 3.8.769 - Route planning for...
Note: While the software is classified as freeware, it is actually donationware. Please consider making a donation to help support development. TrailRunner is the perfect companion for runners,... Read more
Flavours 1.1.10 - Create and apply theme...
Flavours is a Mac application that allow users to create, apply and share beautifully designed themes. Classy Give your Mac a gorgeous new look by applying delicious themes! Easy Unleash your... Read more
Spotify 0.9.8.296. - Stream music, creat...
Spotify is a streaming music service that gives you on-demand access to millions of songs. Whether you like driving rock, silky R&B, or grandiose classical music, Spotify's massive catalogue... Read more
SlingPlayer Plugin 3.3.20.475 - Browser...
SlingPlayer is the screen interface software that works hand-in-hand with the hardware inside the Slingbox to make your TV viewing experience just like that at home. It features an array of... Read more
S.M.A.R.T. for USB and FireWire Drives 0...
S.M.A.R.T. for USB and FireWire Drives is a kernel driver for OS X external usb or firewire drives. It extends the standard driver behaviour by providing access to drive smart data. The interface to... Read more

Latest Forum Discussions

See All

148Apps Live on Twitch: Pivvot’s Looper...
On our latest Twitch stream, we’ll be playing a pair of minimalist arcade games, one that just got a big content update in Pivvot, and another that was inspired by it in 15 Coins. Whitaker Trebella, creator of Pivvot, will discuss the new modes... | Read more »
Word Cubes Review
Word Cubes Review By Jordan Minor on April 15th, 2014 Our Rating: :: SQUARESVILLEUniversal App - Designed for iPhone and iPad Word Cubes is fine, but it is barely any different from any other word game.   | Read more »
PAX East 2014 – Desert Fox: The Battle o...
PAX East 2014 – Desert Fox: The Battle of El Alamein is Coming to iOS Soon Posted by Rob Rich on April 15th, 2014 [ permalink ] Shenandoah Studio has become one of the go-to developers for war games on iOS, with | Read more »
Tank of Tanks Review
Tank of Tanks Review By Carter Dotson on April 15th, 2014 Our Rating: :: TANKS A LOT!iPad Only App - Designed for the iPad This multiplayer game played on a single iPad is simple, chaotic fun.   | Read more »
PAX East 2014 – Dungeon of the Endless J...
PAX East 2014 – Dungeon of the Endless Just Might Have a Shot at an iPad Release Posted by Rob Rich on April 15th, 2014 [ permalink ] I think it’s fair to say that | Read more »
SideSwype Review
SideSwype Review By Carter Dotson on April 15th, 2014 Our Rating: :: ON YOUR SIDEUniversal App - Designed for iPhone and iPad SideSwype is a puzzler that takes inspiration from Threes, but becomes its own incredibly fun game.   | Read more »
PAX East 2014 – Bigfoot Hunter Invites P...
PAX East 2014 – Bigfoot Hunter Invites Players on a Wild and Wooly Photo Safari Posted by Rob Rich on April 15th, 2014 [ permalink ] Yeti. Sasquatch. Wendigo. | Read more »
Dungeon Quest Review
Dungeon Quest Review By Cata Modorcea on April 15th, 2014 Our Rating: :: NO STORY, BUT GOOD FUNUniversal App - Designed for iPhone and iPad Dungeon Quest does a lot of things right, but ultimately forgets about one of the core... | Read more »
Tempo AI and Speek Join Forces to “Kill...
Tempo AI and Speek Join Forces to “Kill the Conference Call PIN” Posted by Rob Rich on April 15th, 2014 [ permalink ] Today Tempo AI, makers of Tempo Smart Calendar, and | Read more »
Fighting Fantasy: Starship Traveller Rev...
Fighting Fantasy: Starship Traveller Review By Jennifer Allen on April 15th, 2014 Our Rating: :: A SIGNIFICANT VOYAGEUniversal App - Designed for iPhone and iPad Continuing the release of Fighting Fantasy titles, Starship Traveller... | Read more »

Price Scanner via MacPrices.net

Save $50 on Mac mini Server
B&H Photo has the 2012 Mac mini Server on sale for $949 including free shipping plus NY sales tax only. Their price is $50 off MSRP. Read more
PhatWare’s “Ultimate Writing App For iOS” Ren...
PhatWare Corp. has announced it has renamed its new WritePro word processing app for iPhone and iPad: WritePad Pro. The decision to change the app’s name to leverages the strong brand awareness and... Read more
Full Resolution Photo Editor Tint Mint 1.0 Re...
California based independent developer, Jeffrey Sun, creator of the iOS app Modern Editor, has released Tint Mint, a new photography app for editing enthusiasts. The app costs a dollar, and it packs... Read more
16GB iPad mini (Apple refurbished) available...
The Apple Store has refurbished 1st generation 16GB iPad minis available for $249 including free shipping. Both black and white models are available. Read more
Save $120 on the 27-inch 3.2GHz Haswell iMac
B&H Photo has the 27″ 3.2GHz iMac on sale for $1679.99 including free shipping plus NY sales tax only. Their price is about $120 off MSRP. Read more
Using a Mac Doesn’t Eliminate The Heartbleed...
Low End Mac’s Dan Knight notes that any time you visit a website with an https: prefix or see that secure lock icon on your browser, some type of security software is busy trying to protect your data... Read more
AirPrint Basics Tutorial Posted
A new Apple Knowledge Base article helps get you started using AirPrint, the Apple protocol that enables instant printing from iPad, iPhone, iPod touch, and Mac without the need to install drivers or... Read more
Speed Tips For Running LibreOffice On The Mac
LibreOffice is my favorite of several free, open-source application suites, and the one I have configured on my Mac as my default app for Word documents that one frequently has to deal with. It also... Read more
Snag a 15-inch Retina MacBook Pro for $115 of...
B&H Photo has 2013 15″ Retina MacBook Pros on sale for up to $115 off MSRP for a limited time. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.3GHz Retina MacBook Pro: $2489.99... Read more
MacBook Airs on sale for $50 to $100 off MSRP
Several resellers are offering $50-$100 discounts on 11″ and 13″ MacBook Airs today, including Amazon, Best Buy, B&H, and others. See the breakdown of deals on our MacBook Air Price Tracker,... Read more

Jobs Board

Position Opening at *Apple* - Apple (United...
**Job Summary** Every day, business customers come to the Apple Store to discover what powerful, easy-to-use Apple products can do for them. As a Business Leader, Read more
Position Opening at *Apple* - Apple (United...
…challenges of developing individuals, building teams, and affecting growth across Apple Stores. You demonstrate successful leadership ability - focusing on excellence Read more
Position Opening at *Apple* - Apple (United...
…Summary** As a Specialist, you help create the energy and excitement around Apple products, providing the right solutions and getting products into customers' hands. You Read more
Position Opening at *Apple* - Apple (United...
**Job Summary** The Apple Store is a retail environment like no other - uniquely focused on delivering amazing customer experiences. As an Expert, you introduce people Read more
Position Opening at *Apple* - Apple (United...
**Job Summary** Being a Business Manager at an Apple Store means you're the catalyst for businesses to discover and leverage the power, ease, and flexibility of Apple Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.