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 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:

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 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");
int main(int argc, const char * argv[])
   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.


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.


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 and>.


Community Search:
MacTech Search:

Software Updates via MacUpdate

Microsoft Office 2016 16.11 - Popular pr...
Microsoft Office 2016 - Unmistakably Office, designed for Mac. The new versions of Word, Excel, PowerPoint, Outlook, and OneNote provide the best of both worlds for Mac users - the familiar Office... Read more
Adobe Photoshop CC 2018 19.1.2 - Profess...
Photoshop CC 2018 is available as part of Adobe Creative Cloud for as little as $19.99/month (or $9.99/month if you're a previous Photoshop customer). Adobe Photoshop CC 2018, the industry standard... Read more
Adobe Dreamweaver CC 2018 -...
Dreamweaver CC 2018 is available as part of Adobe Creative Cloud for as little as $19.99/month (or $9.99/month if you're a previous Dreamweaver customer). Adobe Dreamweaver CC 2018 allows you to... Read more
Adobe Flash Player - Plug-in...
Adobe Flash Player is a cross-platform, browser-based application runtime that provides uncompromised viewing of expressive applications, content, and videos across browsers and operating systems.... Read more
Drive Genius 5.2.0 - $79.00
Drive Genius features a comprehensive Malware Scan. Automate your malware protection. Protect your investment from any threat. The Malware Scan is part of the automated DrivePulse utility. DrivePulse... Read more
MegaSeg 6.0.6 - Professional DJ and radi...
MegaSeg is a complete solution for pro audio/video DJ mixing, radio automation, and music scheduling with rock-solid performance and an easy-to-use design. Mix with visual waveforms and Magic... Read more
ffWorks 1.0.7 - Convert multimedia files...
ffWorks (was iFFmpeg), focused on simplicity, brings a fresh approach to the use of FFmpeg, allowing you to create ultra-high-quality movies without the need to write a single line of code on the... Read more
Dash 4.1.5 - Instant search and offline...
Dash is an API documentation browser and code snippet manager. Dash helps you store snippets of code, as well as instantly search and browse documentation for almost any API you might use (for a full... Read more
Evernote 7.0.3 - Create searchable notes...
Evernote allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at anytime, from... Read more
jAlbum Pro 15.3 - Organize your digital...
jAlbum Pro has all the features you love in jAlbum, but comes with a commercial license. You can create gorgeous custom photo galleries for the Web without writing a line of code! Beginner-friendly... Read more

Latest Forum Discussions

See All

All the best games on sale for iPhone an...
It might not have been the greatest week for new releases on the App Store, but don't let that get you down, because there are some truly incredible games on sale for iPhone and iPad right now. Seriously, you could buy anything on this list and I... | Read more »
Everything You Need to Know About The Fo...
In just over a week, Epic Games has made a flurry of announcements. First, they revealed that Fortnite—their ultra-popular PUBG competitor—is coming to mobile. This was followed by brief sign-up period for interested beta testers before sending out... | Read more »
The best games that came out for iPhone...
It's not been the best week for games on the App Store. There are a few decent ones here and there, but nothing that's really going to make you throw down what you're doing and run to the nearest WiFi hotspot in order to download it. That's not to... | Read more »
Death Coming (Games)
Death Coming Device: iOS Universal Category: Games Price: $1.99, Version: (iTunes) Description: --- Background Story ---You Died. Pure and simple, but death was not the end. You have become an agent of Death: a... | Read more »
Hints, tips, and tricks for Empires and...
Empires and Puzzles is a slick match-stuff RPG that mixes in a bunch of city-building aspects to keep things fresh. And it's currently the Game of the Day over on the App Store. So, if you're picking it up for the first time today, we thought it'd... | Read more »
What You Need to Know About Sam Barlow’s...
Sam Barlow’s follow up to Her Story is #WarGames, an interactive video series that reimagines the 1983 film WarGames in a more present day context. It’s not exactly a game, but it’s definitely still interesting. Here are the top things you should... | Read more »
Pixel Plex Guide - How to Build Better T...
Pixel Plex is the latest city builder that has come to the App Store, and it takes a pretty different tact than the ones that came before it. Instead of being in charge of your own city by yourself, you have to work together with other players to... | Read more »
Fortnite Will Be Better Than PUBG on Mob...
Before last week, if you asked me which game I prefer between Fortnite Battle Royale and PlayerUnknown’s Battlegrounds (PUBG), I’d choose the latter just about 100% of the time. Now that we know that both games are primed to hit our mobile screens... | Read more »
Siege of Dragonspear (Games)
Siege of Dragonspear 2.5.12 Device: iOS Universal Category: Games Price: $9.99, Version: 2.5.12 (iTunes) Description: Experience the Siege of Dragonspear, an epic Baldur’s Gate tale, filled with with intrigue, magic, and monsters.... | Read more »
7 Wonders Guide - Should You Buy The Lea...
The fantastic mobile version of 7 Wonders just got updated with an expansion that adds Leaders to the game. This new content adds a whole layer of depth to the game, but before you spend $1.99 to buy it blindly, check out this breakdown of exactly... | Read more »

Price Scanner via

B&H drops prices on 15″ MacBook Pros up t...
B&H Photo has dropped prices on new 2017 15″ MacBook Pros, now up to $300 off MSRP and matching Adorama’s price drop yesterday. Shipping is free, and B&H charges sales tax for NY & NJ... Read more
Apple restocks Certified Refurbished 2017 13″...
Apple has restocked Certified Refurbished 2017 13″ 2.3GHz MacBook Pros for $200-$230 off MSRP. A standard Apple one-year warranty is included with each MacBook, models receive new outer cases, and... Read more
13″ Space Gray Touch Bar MacBook Pros on sale...
Adorama has new 2017 13″ Space Gray Touch Bar MacBook Pros on sale for $150 off MSRP. Shipping is free, and Adorama charges sales tax in NY & NJ only: – 13″ 3.1GHz/256GB Space Gray MacBook Pro (... Read more
Best deal of the year on 15″ Apple MacBook Pr...
Adorama has New 2017 15″ MacBook Pros on sale for up to $300 off MSRP. Shipping is free, and Adorama charges sales tax in NJ and NY only: – 15″ 2.8GHz Touch Bar MacBook Pro Space Gray (MPTR2LL/A): $... Read more
Save $100-$150+ on 13″ Touch Bar MacBook Pros...
B&H Photo has 13″ Touch Bar MacBook Pros on sale for $100-$150 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 13″ 3.1GHz/256GB Space Gray MacBook Pro... Read more
Current deals on 27″ Apple iMacs, models up t...
B&H Photo has 27″ iMacs on sale for up to $150 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 27″ 3.8GHz iMac (MNED2LL/A): $2149 $150 off MSRP – 27″ 3... Read more
Thursday Deal: 13″ 2.3GHz MacBook Pro for $11...
B&H Photo has the 13″ 2.3GHz/128GB Space Gray MacBook Pro on sale for $100 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 13-inch 2.3GHz/128GB Space... Read more
How to save $100-$190 on 10″ & 12″ iPad P...
Apple is now offering Certified Refurbished 2017 10″ and 12″ iPad Pros for $100-$190 off MSRP, depending on the model. An Apple one-year warranty is included with each model, and shipping is free: –... Read more
Silver 12″ 1.3GHz MacBook on sale at B&H...
B&H Photo has the 2017 12″ 1.3GHz Silver MacBook on sale for $1399.99 including free shipping plus sales tax for NY & NJ residents only. Their price is $200 off MSRP, and it’s the lowest... Read more
Amazon offers 21″ Apple iMacs for up to $150...
Amazon 21″ iMacs on sale today for $50-$150 off MSRP, depending on the model. Shipping is free: – 21″ 3.4GHz 4K iMac (MNE02LL/A): $1349.99 $150 off MSRP – 21″ 3.0GHz iMac (MNDY2LL/A): $1199 $100 off... Read more

Jobs Board

*Apple* Genius - Technical Customer Service...
Job Description: Job Summary As a Genius at the Apple Store, you maintain customers' trust in Apple as the skilled technical customer service expert, Read more
*Apple* /Mac Desktop Specialist - University...
Provides technical support, expertise and user training for a variety of Apple /Macintosh hardware, software and devices. Researches, analyzes and resolves complex Read more
*Apple* Support Engineer - Kforce (United St...
Kforce's client is seeking an Apple Support Engineer in Washington, District of Columbia (DC). The Apple Support Engineer will be responsible for designing and Read more
*Apple* Certified and Windows Desktop Suppor...
** Apple Certified and Windows Desktop Support Engineer** **Preferred Qualifications** **About the team ** The Desktop Support Team is a fast paced, service oriented Read more
*Apple* Endpoint Administrator - Massachuset...
Reporting to the Director of Client Services (DCS), the Apple Endpoint Administrator serves as a member of the Client Services team, which provides technical support Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.