Using Git with Xcode, Part I

A few years ago I wrote a series of posts about getting Subversion working with Xcode. Now that the latest versions of Xcode now support Git, I figured I would put together a tutorial about getting Git working with Xcode. Having worked with Git for only a short while, I find it is a much easier source control management system to work with compared to Subversion and others.

Getting Started with Git

If you are brand new to Git, you can get a quick overview of the product and download it by visiting the Git official website. One of the best overviews and tutorials that I have found is at the Git Reference website. The tutorial walks you through how Git was conceived and introduces you to some of the most common commands.

Creating a Local Git Repository for NEW Xcode Projects

The easiest way to put a new Xcode project under version control within Git is to select the Create local git repository for this project check box when creating your project in Xcode. You can verify that this project is under version control by looking for the .git directory under the project. You will need to use Terminal to browse to your project folder and perform a ls -a to see the directory.

Xcode Local Git Repository

Creating a Local Git Repository for Existing Xcode Projects

To add an existing project to a new local Git repository will require you to use the command line. Open Terminal and navigate to your project directory. You should first create a .gitignore file in your project directory. This file will tell Git to not track certain file patterns.

Here is a sample .gitignore file for Xcode projects:

# Sample .gitignore file for Xcode Projects
.DS_Store
*.swp
*~.nib

build/

*.pbxuser
*.perspective
*.perspectivev3

xcuserdata

If you walked-through the tutorial I mentioned above in Getting Started with Git, these commands should be familiar to you.

1. Initialize a new Git repository

$ git init

2. Add project files to Git repository

$ git add .

3. Perform an initial commit of files to Git repository

$ git commit -m “Initial Commit”

4. Add repository to Xcode

Your code should now be under version control; however, now we need to tell Xcode about the local repository we just created. Open Xcode and from the Window menu, open the Organizer.

Xcode Window Menu

The Organizer lists all registered devices, projects, snapshots, documentation and version control repositories. Click on the Repositories icon.

You need to create a new repository, click on the plus (+) in the bottom left of the window and select Add Repository…

Xcode Repository Options

In the Add a Repository wizard, enter the following:

  1. 1. Name – This is typically the name of the project or collection of projects.
  2. 2. Location – Since we are adding a local repository, this the absolute path of your local repository or project.
  3. 3. Type – This should be Git in this situation.

Add a Repository Window

After you click Next, your local repository should be listed on the left-hand side of the screen. Clicking on it, should list an entry for your initial (or subsequent) commits and the files modified.

You should now be able to make changes to your project within Xcode and commit your changes using the Xcode GUI. In the follow up posts to this series, I will walk you through using the Xcode GUI to commit changes and also show you how to setup a remote repository on BitBucket.

0

The Leadership of Steve Jobs

Apple Computer Logo

A few days prior to the passing of Steve Jobs, I did a presentation on leadership incompetence – focusing on Steve Jobs.

Did I just say that Steve Jobs was an incompetent leader? Yes, but not the Steve Jobs that brought us the iPhone, iPad, iMac, iTunes, etc.

The leadership incompetence that I am referring to goes back to Apple’s early days, when they were still called Apple Computer Inc. One of the best portrayals of the early days of Steve Jobs and Bill Gates was in the docudrama The Pirates of Silicon Valley released in 1999. This movie showed us a Steve Jobs who was not the CEO of Apple, but rather the head of the Macintosh Division.

Before

Take a look at this following clip from the movie which shows what kind of manager/leader Steve Jobs was at the time:

The Steve Jobs portrayed in the video was a results-only manager. His management style was temperamental and erratic. He did not care about his employees. He just wanted results and wanted to see the success of the Macintosh line.

Aftermath

What happened to the company afterwards?

The Apple Macintosh was released and was well received.

What happened to Steve Jobs?

Steve Jobs, co-founder of Apple Computer, Inc., was forced to resign from the company. So what happened, after he resigned? Steve Jobs went on to found NeXT, a rival computer company that would later be bought by Apple and whose operating system would be the basis for Mac OS X. Steve Jobs would later return to Apple almost 10 years later and serve as CEO (until August 2011).

After

I don’t have a video of Steve Jobs leading in action, so I will have to take his word for it. In this interview at All Things Digital D8 Conference, Steve Jobs describes what he does all day at Apple.

Analysis

This video portrays Steve Jobs as a competent leader.

Compare this to the earlier video – note that what Steve Jobs talks about is: leading teams and communicating ideas. While the final products are still important to Steve Jobs, the process of getting there is also important.

Why in the early days of Apple was Steve Jobs an incompetent leader?

  • Lack of business knowledge?
  • Single focus – Macintosh line of computers?
  • Lack of interpersonal skills?

If you watch the entire movie – Pirates of Silicon Valley, you will see that although Steve Jobs was a visionary, he was not a people-person.

Conclusion

Although you can lead a project to success, it does not mean that you are a successful leader. To be a competent leader, you must be able to accomplish goals, provide support to your team, and receive empowerment from your team.

0

Keyword Counts of Popular Programming Languages

Keys.

In a previous post, 10 Problems with ‘Hello World”, I made a remark that a ‘Hello World’ program only teaches you on average a single keyword. Without doing any research, I asserted that there are hundreds or thousands or keywords in a given programming language – until someone called me out on it.

What I found couldn’t be further from the truth.

Based on a list of the Most Popular Programming Languages, I researched how many keywords and reserved words each language had. I am certain my counts are not exact and depending on specific implementations and versions of languages – the keyword counts may vary.

Here are my findings in descending keyword/reserved word count:

VB.NET

Keyword/Reserved Word Count: 159

AddHandler AddressOf Alias And AndAlso
As Boolean ByRef Byte ByVal
Call Case Catch CBool CByte
CChar CDate CDbl CDec Char
CInt Class CLng CObj Const
Continue CSByte CShort CSng CStr
CType CUInt CULng CUShort Date
Decimal Declare Default Delegate Dim
DirectCast Do Double Each Else
ElseIf End EndIf Enum Erase
Error Event Exit False Finally
For (in For…Next) For Each…Next Friend Function Get
GetType GetXMLNamespace Global GoSub GoTo
Handles If Implements Imports In
Inherits Integer Interface Is IsNot
Let Lib Like Long Loop
Me Mod Module MustInherit MustOverride
MyBase MyClass Namespace Narrowing New
Next Not Nothing NotInheritable NotOverridable
Object Of On Operator Option
Optional Or OrElse Out Overloads
Overridable Overrides ParamArray Partial Private
Property Protected Public RaiseEvent ReadOnly
ReDim REM RemoveHandler Resume Return
SByte Select Set Shadows Shared
Short Single Static Step Stop
String Structure Sub SyncLock Then
Throw To True Try TryCast
TypeOf…Is UInteger ULong UShort Using
Variant Wend When While Widening
With WithEvents WriteOnly Xor #Const
#Else #ElseIf #End #If

Source: http://msdn.microsoft.com/en-us/library/dd409611.aspx


C++

Keyword/Reserved Word Count: 144

registerreinterpret_castreturnsafecastsealed

__abstract __alignof __asm __assume __based
__box __cdecl __declspec __delegate __event
__except __fastcall __finally __forceinline __gc
__hook __identifier __if_exists __if_not_exists __inline
__int16 __int32 __int64 __int8 __interface
__leave __m128 __m128d __m128i __m64
__multiple_inheritance __nogc __noop __pin __property
__raise __sealed __single_inheritance __stdcall __super
__thiscall __try/__except __try/__finally __try_cast __unaligned
__unhook __uuidof __value __virtual_inheritance __w64
__wchar_t wchar_t abstract array auto
bool break case catch char
class const const_cast continue decltype
default delegate delete deprecated dllexport
dllimport do double dynamic_cast else
enum event explicit extern false
finally float for for each, in friend
friend_as gcnew generic goto if
initonly inline int interface interior_ptr
literal long mutable naked namespace
new noinline noreturn nothrow novtable
nullptr operator private property protected
public ref selectany short signed
sizeof static static_assert static_cast struct
switch template this thread throw
true try typedef typeid typename
union unsigned using uuid value
virtual void volatile while

Source: http://msdn.microsoft.com/en-us/library/2e6a4at9(v=VS.100).aspx


C#

Keyword/Reserved Word Count: 98

abstract as base bool break
byte case catch char checked
class const continue decimal default
delegate do double else enum
event explicit extern false finally
fixed float for foreach goto
if implicit in int interface
internal is lock long namespace
new null object operator out
override params private protected public
readonly ref return sbyte sealed
short sizeof stackalloc static string
struct switch this throw true
try typeof uint ulong unchecked
unsafe ushort using virtual void
volatile while add alias ascending
descending dynamic from get global
group into join let orderby
partial remove select set value
var where yield

Source: http://msdn.microsoft.com/en-us/library/x53a06bb(v=VS.100).aspx


PHP

Keyword/Reserved Word Count: 56

abstract and array() as break
case catch cfunction class clone
const continue declare default do
else elseif enddeclare endfor endforeach
endif endswitch endwhile extends final
for foreach function global goto
if implements interface instanceof namespace
new old_function or private protected
public static switch throw try
use var while xor __CLASS__
__DIR__ __FILE__ __LINE__ __FUNCTION__ __METHOD__
__NAMESPACE__

Source: http://php.net/manual/en/reserved.keywords.php


Java

Keyword/Reserved Word Count: 53

abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
true false null

Source: http://download.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html


Ruby

Keyword/Reserved Word Count: 42

BEGIN END __ENCODING__ __END__ __FILE__
__LINE__ alias and begin break
case class def defined? do
else elsif end ensure false
for if in module next
nil not or redo rescue
retry return self super then
true undef unless until when
while yield

Source: http://www.ruby-doc.org/docs/keywords/1.9/


Javascript

Keyword/Reserved Word Count: 29

break const continue delete do
while export for function if
else import in instanceOf label
let new return switch this
throw try catch typeof var
void while with yield

Source: http://www.aptana.com/reference/html/api/JSKeywords.index.html


Python

Keyword/Reserved Word Count: 29

and del for is raise
assert elif from lambda return
break else global not try
class except if or while
continue exec import pass yield
def finally in print

Source: http://docs.python.org/release/2.3.5/ref/keywords.html


If you find any errors or omissions, please let me know. If there is a particular language I did not include, please share the keyword/reserved word source and I would be happy to add it.

0

My Experience at Orlando Code Camp 2011

As a follow up to last years post: My Experience at Orlando Code Camp 2010, I thought I would share my experience at Orlando Code Camp 2011.

This year I took away a lot more, compared to last year as I tried expose myself to more variety by focusing on the Showcase sessions and not sessions that were “how to do this with < insert technology here >”.

There was a great variety of tracks this year:

  • Showcase
  • Fundamentals
  • Web
  • Azure
  • Design and Animation
  • Languages
  • Patterns
  • Services & More
  • Collaboration
  • Visual Studio & ALM
  • Silverlight
  • SQL Server
  • Windows Phone 7
  • DotNetNuke Development
  • DotNetNuke Design
  • DotNetNuke Administration

I know that Code Camps are Microsoft-centric, but the one thing that continues to bother me (I see it at .NET User Group meetings also), is the Microsoft Fanboy attitude.

Sorry, I do not think that Windows Phone 7 is an “iPhone Killer” nor is it an “Android Killer.” I also refuse to use Bing as my primary search engine – Google works just fine thank you. It was comforting to see some iPads and MacBooks among the attendees.

Orlando Code Camp Keynote

Orlando Code Camp Keynote

Here is the breakdown of each session I attended:

Session 1

Applied Object-Oriented Design Principles

Presented by: Jay HIll

Jay presented several design patterns that are based on Bob Martin’s SOLID Principles.

Take Away: There are many design patterns that can be used in practice that extend beyond those originally written by the Gang of Four.

  • Null Object Pattern – this is the assurance that you will never receive a NULL object, therefore avoiding the dreaded ArgumentNullException.
  • Enumeration Classes
  • – a way to extend basic enums and prevent enum growth.

  • Nested Classes
  • – a reason to use nested classes in your code.

  • Composite Pattern
  • – treating objects as if they are a single instance.

Links

Code Quota


Session 2

Decoupled UI

Presented by: Page Horton

Page demonstrated an application that completely separates the UI from Business Logic.

Take Away

Links

pagehorton.com


Session 3

Visual Studio 2010 Tips and Tricks

Presented by: Sean Laberee

Sean demonstrated several new features and shortcuts available in Visual Studio 2010.

Take Away: The Extension Manager can be used to install additional functionality into Visual Studio 2010. Including:

  • Start Page Project Template
  • Productivity Power Tools
  • Visual Studio Color Theme Editor

Session 4

Intro to MVC 3

Presented by: Ken Tucker

Ken demonstrated creating a MVC website that went a little bit beyond the MVC Tutorials at ASP.NET.

Take Away: MVC 3 can be added to Visual Studio 2010 by installing the Microsoft Web Platform Installer 3.0.

Links:


Session 5

Design for Developers: Bad Design Kills Good Projects

Presented by: Diane Leeper

Diane demonstrated six things that can decide the fate of your web project.

Take Away: Developers are typically not known for their design capabilities (see 10 Resources for Design-Challenged Programmers), so it was a wake-up call to hear things from a designers standpoint.

Links


Session 6

Meet the Visual Studio Team!

Presented by:

  • Adrian “Spotty” Bowles – Compilers QA
  • Prakash Balasubramanian – Compilers QA
  • Sayed Ibrahim Hashimi – VS Web PM
  • Kevin Halverson – Compilers QA (VB/C#)
  • Sean Laberee – Editor/VB/C# IDE PM

Visual Studio Team

The Visual Studio Team answered audience questions:

Question: What does a Program Manager do?
Answer: A Program Manager is the “voice of the customer” who tries to understand what the end-users want.


Question: When is the next version of Visual Studio due out?
Answer: The typical version lifecycle for Visual Studio is 18 months.


Question: How is Microsoft moving towards combining the functionalities of Expression Blend and Visual Studio?
Answer: They are looking to make Expression Blend more developer friendly and Visual Studio more designer friendly.


Question: Where can I report issues or make suggestions?
Answer: Microsoft Connect


Question: Are there plans to include Silverlight or XNA updates in Web Platform Installer?
Answer: No, Silverlight and XNA have a different product lifecycle than Visual Studio.


Question: Why is Visual Studio 2010 so slow?
Answer: The Visual Studio team is currently looking at ways in to improve memory management. Other factors could be:

  • Running VS 2010 in Windows XP – doesn’t support video hardware acceleration
  • Installation of multiple extensions
  • Windows Forms Designer is known to leak memory on rebuilds



Question: Will future versions of Visual Studio support Design view of MVC projects similar to Web Forms?
Answer: The Visual Studio team is currently looking at ways to display a view in design mode.


Question: Will Visual Studio be offered in the cloud – similar to Office 360?
Answer: See Try F# from Microsoft Research.


Question: Will the next version of Visual Studio include the Ribbon?
Answer: Not in the short-term. The next release will have more simplified menus. Future releases will have a variation of the ribbon, but won’t be identical to the one found in MS Office.


Question: What can I do to prevent repositioning of windows after compiling?
Answer: Visual Studio 2010 supports multi-monitor support. Also the window positions will vary in Design Mode vs Debug Mode.


Overall, it was a great experience to expose myself to different approaches and ways of thinking that are presented in a classroom setting rather than a book or a blog.

If you have the opportunity to check out a Code Camp near you, I highly recommend it.

1

Write Your Own Programmers Credo

Star Wars Greedo

There’s an old joke that’s been floating around the web for over 10 years called: Computer Programmer’s Credo #73, which says:

Documentation is like sex:
When it is good, it is VERY good;
and when it’s bad, it’s still
better than nothing at all.

Putting humor aside, if you examine Computer Programmer’s Credo #73 – it describes something that all computer programmers face at one time or another.

Think about the last time that you worked on or inherited code that didn’t belong to you. How many times did you ask yourself:

Why did this person write this in this particular way?”

or

Is there a reason why they chose to implement this so inefficiently?

If the original author of the code is still around, you could ask them – but what are the odds that they would remember why they did it? Without having documentation in code, all you can do is read the code at face value.

What exactly is a credo?

A credo is more than a cute little saying about a particular subject matter. It is best described as a philosophy or words by which you live or work.

I assume the author of the Computer Programmer’s Credo #73, was somebody who had to constantly modify or rewrite code that wasn’t his or hers. If the author appreciated good code documentation, does this mean that he or she implemented the same practices in his or her own code?

A credo should be something that you strongly believe and actually implement in your habits. It is not a complaint about how someone else does something, but you also do that same something at one point or another.

Get Started with Your Programmers Credo

Think about what you appreciate about programming:

Do you:

  • Appreciate good code documentation?
  • Implement best practices?
  • Design your code for reusability?
  • Learn new programming languages and frameworks
  • Encourage Jr. programmers to grow and learn from Sr. programmers

These are just a few questions that you can ask yourself about your programming habits.

Take a few minutes to write down several things that you as a programmer believe as your philosophy. Just keep in mind that whatever you write down, should be something that you practice.

0

10 Problems with ‘Hello World!’

Hello World
I think it’s fair to say that every programmer is familiar with a “Hello World!” program. By convention it is a quick and dirty way to start learning a programming language and getting your first program to compile and run.

However, beyond this it offers very little value. I have come up with this list of the 10 problems with “Hello World.”


10. Why “Hello World” ? Why not “Hello Dave” (i.e. HAL 9000 from 2001) or “It Works!”?

I know this one seems like a bit of a stretch. Where did the saying “Hello World!” come from? When was the last time that anyone in the world ran your program besides yourself? Perhaps it would make more sense to use “Hello <Insert Your Name Here>!”


9. It’s Only Good For One Thing

I’m not making the argument that “Hello World!” doesn’t have its uses. However, they only thing it is good for is a sanity check.

“Hello World!” doesn’t help you learn any programming language, it simply helps you write a simple program that you are able to compile and execute and that’s it.

It is a way to maintain your sanity so you can say to yourself, “I’ve got that working!”.


8. Not Cool or Fun

With intensive graphics in gaming and the interactivity of the Internet, few people are impressed with an application that prints a couple words on the screen.

With that being said, writing a “Hello World!” program is not something that will impress anybody but yourself. Beyond that, it probably won’t be your motivator in learning to program.


7. It’s impractical

When was the last time that you needed to write a program that’s only task was to print a string to standard output? One could say that fewer programs are written these days that don’t involve a GUI – whether it be a web, windows interface or even a to a file or database. Perhaps it practical in academia, where you consistently write programs to that display a calculation or value, but not professionally.


6. No interactivity

‘Hello World’ is an example that does not rely on the end-user to do anything except verify that “Hello World!” is displayed on the screen. There is no interactivity to prompt the user to enter his/her name, exit the program, or run the program again. It teaches nothing about how end-users interact with programs.


5. No logic or calculations

Computing relies heavily on logical constructs (e.g., print this statement if this condition is true) and calculations. Most programs written will utilize some decision logic based upon a set of criteria. Even the basic building blocks of a computer (machine code) represent a logical expression: 1 = True, 0 = False.


4. Too similar across languages

If you take a look at Hello World in several different languages, you will notice that they are all very similar to one another.

Once you are proficient in writing a “Hello World!” program in one language, you are pretty much proficient in writing it in all languages.


3. Uses only one concept

If you saw the list of Hello World examples, the commonality among most of them is that they use a single keyword.

How many keywords does a programming language have: Hundreds? Thousands? Learning a single keyword is an extremely small step in learning a programming language.

Edit: You can make the argument that there are probably less than 100 keywords in most programming languages. However, if you include every language construct (such as classes, methods, etc.) – these might add up in the hundreds.


2. Ignores variables, constants

As I’ve said before learning a programming language involves a lot more than the capability of displaying something on the screen.

Few programs can be written that don’t use a variable of some sort.

You could make the argument that “Hello World!” teaches bad programming practices by hardcoding a string in statement.

The “Hello World!” example could at least use a constant to store the value of the “Hello World!” string.


1. Ignores Functions, OO Concepts, Etc.

“Hello World!” examples don’t try to explain the other requirements of a given program language to get a program to run.

Some of things that are taken for granted are:

  • Function Signatures
  • Class Structure
  • Namespace Imports
  • Inheritance

Most seasoned programmers will be able to figure out the syntax of these, but it could be discouraging for beginning programmers or those with only a procedural programming background.


What bugs you about “Hello World!”? or Better yet what type of programming do you do to learn a new language?

Please share below…

8

RepeatGeek Theme Update

Suffusion Options

This weekend I updated the framework of this blog to Sufffusion.

I wanted a theme framework that was:

  1. Easily Customizable
  2. Clean Looking
  3. Cross-browser compatible (XHTML Compliant)
  4. FREE

Hello Suffusion

Suffusion had all of these things and more that I have yet to take advantage of. Out of the box it supports the following:

  • 17 Pre-defined Skins
  • Pre-defined widgets and widget areas
  • Magazine style blog template
  • WordPress Architecture Customization: Navigation Menus, Pagination, Excerpts, Comments
  • Multiple Browser Support

If you are unfamiliar with Suffusion, it is a relatively new theme (Just over 1 year old in development).

Suffusion is advertised as just a WordPress theme, but it truly is a Framework that allows for rapid web development. Almost every feature can be customized in an easy-to-use graphical interface. After you make your changes you can export your customization to a file for version control, importing into production, etc.

Suffusion has some defined action and filter hooks that I am going to experiment with next to add some social media widgets to my posts.

Check out the Showcase to see websites built with Suffusion.

Goodbye Thematic

Previously I was using the Thematic Framework with a customized child theme. For a while, the theme suited me well and was very robust. However, with every update of WordPress, I would seem to lose some functionality – plugins would stop working, navigation links would disappear, search box would disappear, etc.

Thematic is a framework for those who like to get your hands dirty – all your customizations are made through a child theme and requires extensive troubleshooting if you are trying to retrofit a non-thematic theme to the Thematic framework.

So far I am very happy with Suffusion. I guess we’ll see how well the theme holds up to upgrades. Until then, Goodbye Thematic!

0

6 Books to Inspire Creativity in Programmers

I mentioned in a previous post that the secret to success as a programmer is original and creative thinking.

So what if you are not creative? Don’t worry, you’re not alone. In fact, most programmers you meet lack creativity. The reason being is that creativity requires a different type of thought compared to the objective, logical thought of programming.

Luckily, creative thinking is something that can be learned. I have chosen a list of books to inspire your creativity.

Note: This list has no particular order.


Pragmatic Thinking and Learning: Refactor Your Wetware

Andy Hunt

This is a creativity book specifically made for programmers, by a programmer (one of the authors of The Pragmatic Programmer: From Journeyman to Master).


Thinkertoys: A Handbook of Creative-Thinking Techniques

Michael Michalko

Michael Michalko takes you through several visual puzzles to force you to change your way of thinking. This can often be difficult task for those with little creativity.


Thinkpak: A Brainstorming Card Deck

Michael Michalko

Ok, so this one isn’t really a book. Building upon the skills learned in Thinkertoys, Michael Michalko created a deck of cards that you can use to inspire creative thinking and transform your ideas into solutions.


Cracking Creativity: The Secrets of Creative Genius

Michael Michalko

The last of three books (resources) by Michael Michalko. This time around, Michael focuses on how to think like the creative geniuses of history, including Leonardo da Vinci and Walt Disney.


How to Get Ideas

Jack Foster, Larry Corby

Part of being creative is having an original idea, but where does this idea come from? This book will tell you how to inspire new ideas so you can take them to the next level.


The Innovator’s Toolkit: 50+ Techniques for Predictable and Sustainable Organic Growth

David Silverstein, Philip Samuel, Neil DeCarlo

Innovation goes hand-in-hand with technology. Just look at companies like Apple or Google – who are constantly innovating computer hardware and software. This book by Silverstein, et al. is an excellent reference book for those who are innovators. To be a successful innovator, you also need to be a creative thinker.


Programming is the easy part, if you are reading this blog you are probably self-sufficient in at least one programming language. Now you know how to get to the next level: be creative!

If there are any other books that have inspired you to become a creative innovator, please share below in the comments.

7

20 Great Quotes: Steve Jobs vs. Bill Gates – Answer Key

This is the Answer Key for Quiz: 20 Great Quotes: Steve Jobs vs. Bill Gates


Quote 1

You can’t just ask customers what they want and then try to give that to them. By the time you get it built, they’ll want something new.

Answer: Steve Jobs


Quote 2

As we look ahead into the next century, leaders will be those who empower others.

Answer: Bill Gates


Quote 3

DOS is ugly and interferes with users’ experience.

Answer: Bill Gates


Quote 4

Sometimes when you innovate, you make mistakes. It is best to admit them quickly, and get on with improving your other innovations.

Answer: Steve Jobs


Quote 5

I think it’s fair to say that personal computers have become the most empowering tool we’ve ever created. They’re tools of communication, they’re tools of creativity, and they can be shaped by their user.

Answer: Bill Gates


Quote 6

If you can’t make it good, at least make it look good.

Answer: Bill Gates


Quote 7

Innovation distinguishes between a leader and a follower.

Answer: Steve Jobs


Quote 8

Design is not just what it looks like and feels like. Design is how it works.

Answer: Steve Jobs


Quote 9

If I’d had some set idea of a finish line, don’t you think I would have crossed it years ago?

Answer: Bill Gates


Quote 10

Life is not fair; get used to it.

Answer: Bill Gates


Quote 11

I’m the only person I know that’s lost a quarter of a billion dollars in one year…. It’s very character-building.

Answer: Steve Jobs


Quote 12

So we went to Atari and said, ‘Hey, we’ve got this amazing thing, even built with some of your parts, and what do you think about funding us? Or we’ll give it to you. We just want to do it. Pay our salary, we’ll come work for you.’ And they said, ‘No.’ So then we went to Hewlett-Packard, and they said, ‘Hey, we don’t need you. You haven’t got through college yet.’

Answer: Steve Jobs


Quote 13

Unfortunately, people are not rebelling against Microsoft. They don’t know any better.

Answer: Steve Jobs


Quote 14

If I were running Apple, I would milk the Macintosh for all it’s worth — and get busy on the next great thing. The PC wars are over. Done. Microsoft won a long time ago.

Answer: Steve Jobs


Quote 15

We’ve got to put a lot of money into changing behavior.

Answer: Bill Gates


Quote 16

When you want to do your homework, fill out your tax return, or see all the choices for a trip you want to take, you need a full-size screen.

Answer: Bill Gates


Quote 17

Be nice to nerds. Chances are you’ll end up working for one.

Answer: Bill Gates


Quote 18

If GM had kept up with technology like the computer industry has, we would all be driving $25 cars that got 1000 MPG.

Answer: Bill Gates


Quote 19

Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma – which is living with the results of other people’s thinking. Don’t let the noise of other’s opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary

Answer: Steve Jobs


Quote 20

I’ve always wanted to own and control the primary technology in everything we do.

Answer: Steve Jobs


1
The Secret to Being a Successful Programmer

The Secret to Being a Successful Programmer

You are reading this because you want to discover the secret to being a successful programmer. If the secret is all you care about, go ahead and scroll down to the bottom of the page because that is where you will find it.

If you are still reading this, I will explain to you why there is a secret to being a successful programmer.

Being Good Isn’t Good Enough

When you learn any type of skill, such as a new programming language or even a physical sport – professionals or experts will often say to you, “If you want to get better, you have to practice, practice, practice.”

I believe this statement true in the sense that if you practice you will become a better programmer or athlete, but you will not necessarily become successful.

What is Success?

Everybody has their own definition of what success is – what does success mean to you?

  • Success is accomplishing goals?
  • Success is making a lot of money?
  • Success is making the world a better place?

I don’t believe that Success is one thing, but rather a combination of all the above.

So how do you get there? How does one become successful?

If you look back at my example of learning a new skill. Which of the definitions of success will directly result by becoming an expert?

Unless your goal was to learn a new skill (or master a skill), you will have only become successful in accomplishing goals. Just because you are good at something doesn’t mean that you will make a lot of money or put you in a position to change the world.

So what’s missing?

The Secret

The secret to being a successful programmer (or anything else) is: creativity and original thinking.

A successful programmer is one who is knowledgable (knows language, concepts, architecture, etc.), but can also use this knowledge to create or conceptualize.

Success as making money

If you believe that success is making a lot of money, you need to look at the concept of doing business. In business you can compete on two different levels: price and value.

Price

You can make a decent salary if you are a good programmer (defined as having a detailed understanding of programming languages and concepts) – but what is going to make you stand-out against the next programmer?

If you were interviewing for a job and all the candidates had the same knowledge, same background, and same skills – the person who would be hired would be the one asking for the least amount of money.

The scenario above is probably unrealistic for established programmers (but probably more true for recent college graduates). Despite what you may think, you may already have a creative/original side.

Value

Value is not a comparison of price vs. features – but rather what makes you unique against alternatives. The perfect example of this is to look at the Apple iPhone.

Today you could make the argument that the Droid has more features than the iPhone. Does that mean that the Droid has more value because it cost less?

So how can Apple charge more for something that is equal (or fewer) in features?

This is where creativity and originality come into play.

When the iPhone came out it was one of the most original smart phones around. To this day, every smart phone manufacturer has been trying to “copy” everything about it: touch screen, App Store, Games etc.

The original creativity continues to live on in the product – and allows the iPhone to maintain its demand.

The same can be said about why Google tends to hire PhDs – through their dissertations they have proven their ability to think originally and offer a creative solution.

Next Steps

If you are already an expert programmer, you are already half way there. Creativity and original thinking can be learned, it just might not seem like that because they are “right-brained” skills, compared to the “left-brained” skills of programming.

To start thinking about success:

  1. Define success as it applies to you.
  2. Think about where you want to be.
  3. Start thinking (creatively) about how you can use your skills to achieve your success.

I would love to hear about your projects that you are working on to become successful. Please share in the comments.

3