SlideShare ist ein Scribd-Unternehmen logo
1 von 53
Reinvent Yourself
Become an iOS Developer in Nine Steps
987654321
Jason Hanson
✤ St. Louis, MO
✤ Alien Robot Overlords, Inc.
✤ Flash/Flex Dev (1999 - 2012)
✤ iOS Developer (2011-2013)
✤ @jayfour000
Change is Hard – Set a Goal
Change is Hard – The Plan
Change is Hard – Smaller Plan
Change is Hard – Woot! a Shovel
✤ Change is hard
✤ Fear >>= anger >>= hate >>= dark side
✤ Friction, heat, pressure, energy
✤ Takes time and patience
✤ Change too much at once and things break
✤ Don’t have to start over, start with what you have
✤ Change not is necessarily better or worse — just different
Properties of Change
Step 0: Start Somewhere
We all have to start where we are with what we have.
Step 1: Accept the Apple Way
I <3 Apple (fake it till you make it)
✤ Apple knows better then you
✤ Well, they think they do anyway
✤ Like a child who insists that you disappear into the
nether when you step out of sight
✤ Just nod, smile, and go along for the ride
✤ Some blind faith is required. Be comfortable with ‘not knowing’.
✤ Apple can do no wrong, even when wrong they bend the universe so
that they are not wrong
Step 1 – Accept the Apple Way
Step 1 – Accept the Apple Way
✤ Apple makes decisions for you ... so you don’t have to (good & bad)
✤ Form factor, asset types, sizes, names – lots of convention
✤ Supported OS versions (only need to support current + one version back!)
✤ App Store Rejections
✤ Available APIs (using undocumented APIs gets your app rejected)
✤ Appropriate content / interesting app
✤ Grades your code quality (rejects bad code)
Step 1 – Accept the Apple Way
✤ Stuck in a Sandbox
✤ It is a really nice sandbox
✤ Be happy in your little corner and work with the tools provided
✤ Don’t waste time trying to go outside your sandbox
✤ ex: Closing app with code
✤ ex: Reading device phone number
✤ ex: Code injection
Second Thoughts?
✤ Hey! I want outta here! Maybe I can still make that session on Flex ...
✤ Wait ... why do I care about Flex still?
✤ javaScript unit tests?? (hmm ... lipstick? pig?)
✤ What other options do I have, really?
✤ But why would I subject myself to this egocentric platform?
✤ Should I really sell my last ounce of pride, and my soul, to Apple?
✤ Really f’ing Apple ... really, those guys?
Why I Chose iOS over JS & Android
Why I Chose iOS
✤ The ecosystem is very nice. Hard things are made easy.
✤ Solid Object Orientated language
✤ C and Obj-C useful for a very long time
✤ The ease and power of native device code was a breath of fresh air after
fighting Flash to ‘act native’ for ten years
✤ Good developer community
✤ Good documentation
✤ Good tools Xcode Interface Builder, JetBrains AppCode
Why I Chose iOS
Why I Chose iOS
✤ The barrier to entry is higher then HTML/JS/CSS work
✤ The startup cost is high (@see Step 2)
✤ Hard(er) skill to learn IMO; lots more barriers
✤ Statistically less qualified developers
✤ Equates to better projects / higher bill rates
✤ The Apple App Store monazites better then competition
Why I Chose iOS
✤ iOS:
• 90% on iOS 6
• 2 screen aspect ratios
• 3 screen DPIs
✤ Android:
• 40% on “Jelly Bean”
• 22% on “Ice Cream Sandwich”
• 33% on “Gingerbread”
• “Lots” of screens ...
Step 2 – Get the Gear
The right tool for the job
Step 2 – Get the Gear
✤ Let's go shopping!
✤ Macintosh computer (MacBook Pro)
✤ iOS device (Retina iPad)
✤ Apple developer account
✤ Apple Xcode
✤ JetBrains AppCode
Step 3 – Hello World
Time to play with the new toys!!
Step 3 – $1900 Hello World
✤ $1199.99 - Macintosh computer (MacBook Pro)
✤ $499.99 - iOS device (Retina iPad)
✤ $99.00 / year - Apple developer account
✤ $0.00 – Apple Xcode
✤ $199.00 – IntelliJ AppCode
✤ $29.99 - Cord to connect your iOS device (joking ... but just barely)
Step 3 – $1900 Hello World
✤ Yes, it just cost you $1900 to do a Hello World
✤ Deep breath, it is worth it. Stick with it.
✤ Good to know everything is working
✤ Show off to your friends
✤ Get setup to start playing!
Step 4 – Get Organized
Prepare before setting off for your journey.
Step 4 – Get Organized
✤ Place to study (kitchen table, coffee shop, library)
✤ Schedule time to study (nights, weekends)
✤ Books
✤ Videos
✤ Forums
✤ Tools
Objective-C
Programming
The Big Nerd Ranch
Aaron Hillegass
Forum where you can ask questions about
code for each chapter in the book.
iOS Programing
The Big Nerd Ranch
Joe Conway & Aaron Hillegass
Forum where you can ask questions about
code for each chapter in the book.
Cocoa Design
Patterns
Erik M. Buck
Donald A. Yacktman
I have not read this book, but Joel Hooks
recommended it to me.
WWDC Videos
Included in your Apple Developer
account
Stanford
Videos
Free videos. Apple SDK changes faster
then the curriculum, but good starting
point.
Stack Overflow
Unlike Flash and Flex I found tons of very
great posts with very usable code and
answers most all of my questions.
Ray
Wenderlich
http://www.raywenderlich.com/
Great blog with amazing tutorials for
everything you want to do
CodeRunner
OS X AppStore $9.99
Write and run code snips
Step 5 – Join the Community
Learning is easier with friends!
Step 5 – Join
the Community
✤ Learning is easier with friends
✤ User groups – CocoaHeads
(http://cocoaheads.org/)
✤ Message boards (Stack Overflow)
✤ Guy at coffee shop
✤ Friends, co-workers
✤ Give presentations
Intermission – Motivation
(needed before next step)
(needed before next step)
✤ Find out what motivates you
Intermission – Motivation
(needed before next step)
(needed before next step)
✤ My motivators
✤ Primal urge to provide food and shelter for my family
✤ Personal *fun* projects
✤ Competition with friends also reading the same books
✤ Little rewards
✤ Coffee at 4pm - doing my morning ritual at 8pm
Step 6 – Learn Core Language
Deep down in the mine I mine at night.
Step 6 – Learn Core Language
✤ This is hard. Very hard. No easy way around it,
only through it
✤ iOS apps are written in C and Objective-C
✤ C requires manual memory management
✤ Objective-C now has a memory management helper called ARC
(Automatic Reference Counting)
✤ Any null pointer will crash your app - boom! I needed to get this
right.
ActionScript 3 vs Objective-C
BOOL myBoolean = YES;
int myInt = 13;
float myFloat = 3.14;
NSObject *myObject = [[NSObject alloc] init];
NSObject *myObject = @{};
NSArray *myArray = [[NSArray alloc] init];
NSArray *myArray = @[];
- (int)addA:(int)a plusB:(int)b {
return a + b;
}
var myBoolean:Boolean = true;
var myInteger:int = 42;
var myNumber:Number = 3.14;
var myObject:Object = new Object();
var myObject:Object = {};
var myArray:Array = new Array();
var myArray:Array = [];
public function addTwoInts(a:int, b:int):int {
return a + b;
}
Storytelling Syntax
// Objective C
-(void)showUserDataFor:(User *)user onDate:(NSDate *)date withSortOrder:(NSSortDescriptor)sortOrder{
// TODO: method implementation
}
Show user data for Jason on date Oct 28, 2013 with sort order ascending.
// Same method as above with colons lined up
-(void)showUserDataFor:(User *)user
onDate:(NSDate *)date
withSortOrder:(NSSortDescriptor)sort{
// TODO: method implementation
}
// AS3
public function showUserDataForUserOnDateWithSortOrder(user:User, date:Date, sortOrder:String):void {
// TODO: method implementation
}
// AS3
public function showUserData(user:User, date:Date, sortOrder:String):void {
// TODO: method implementation
}
✤ Bringing old patterns that did not fit well; like meta-data dependency
injection & presentation model
✤ Android patterns (widgets, expecting hardware back button)
✤ C and Objective-C numeric types
✤ CoreData
✤ Not learning more about Categories, Delegates, and the mediator
design pattern early on.
Where I Stumbled
Gotcha – Numbers
CodeRunner
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
NSNumber *msTimeSince1970 = [NSNumber numberWithLongLong:1374759546000];
int secTimeSince1970 = msTimeSince1970.intValue / 1000;
NSDate *myDate = [[NSDate alloc] initWithTimeIntervalSince1970:secTimeSince1970];
NSLog(@"The date is %@", myDate);
}
}
Gotcha – Strings
CodeRunner
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
NSString *myString1 = @"foo";
NSMutableString *myString2 = [NSMutableString stringWithString:@"foobar"];
[myString2 replaceOccurrencesOfString:@"bar"
withString:@""
options:NSLiteralSearch
range:NSMakeRange(0, [myString2 length])];
NSLog(@"myString1 is: %@", myString1); // foo
NSLog(@"myString2 is: %@", myString2); // foo
NSLog(@"%d", (myString1 == myString2)); //0
NSLog(@"%d", [myString1 isEqualToString:myString2]); //1
}
}
Step 7 – Study, study, OMG
study
Book, book, book, book
Step 7 – Study, study, OMG
study
✤ Everyone learns in a different way
✤ Make slow, steady progress
✤ It will be hard
✤ Do lessons multiple times
✤ Review is an important part of learning
Step 8 – Build Free Apps
Off to work I go
Step 8 – Build Free Apps
✤ Help out friends, people from the community (see step #5)
✤ Make apps that do something to help your life
✤ Release your own app to App Store
✤ Build relationships
Step 9 – Get Paid
Diamonds!!!
Step 9 – Get Paid
✤ Charge for side work as soon as you can
✤ Replace your study time with billing time
✤ Balance learning with billing
✤ Build a good reputation
✤ Bill rates for iOS are comparable to Flash/Flex rates
My iOS Journey Timeline
✤ Sep 2011 - Started learning iOS
✤ Oct 2011 - Got iPad 1
✤ Nov 2011 - Flex is dead to me
✤ Feb 2012 - iOS dev account
✤ Mar 2012 - My first iPhone
✤ Apr 2012 - Billed first iOS work
✤ Apr 2012 - Speaker Cocoaheads
✤ Aug 2012 - iOS Speaker IDSTL
Where I am today
✤ Still learning
✤ Contracting
✤ Mentoring apprentice
✤ Talking at user groups
✤ Keeping on eye on what is coming up next (wearable computing)
Reinvent yourself - How to become a native iOS developer in nine steps

Weitere ähnliche Inhalte

Ähnlich wie Reinvent yourself - How to become a native iOS developer in nine steps

Mobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B ExperimentsMobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B Experimentslacyrhoades
 
Hotfixing iOS apps with Javascript
Hotfixing iOS apps with JavascriptHotfixing iOS apps with Javascript
Hotfixing iOS apps with JavascriptSergio Padrino Recio
 
App stores + cordova... get excited!
App stores + cordova... get excited!App stores + cordova... get excited!
App stores + cordova... get excited!Drake Emko
 
7 things one should learn from iOS
7 things one should learn from iOS7 things one should learn from iOS
7 things one should learn from iOSPaul Ardeleanu
 
Hall Davidson: DEN ISTE PreCon 2011 "It's in Their Pockets: Teaching Them Spe...
Hall Davidson: DEN ISTE PreCon 2011 "It's in Their Pockets: Teaching Them Spe...Hall Davidson: DEN ISTE PreCon 2011 "It's in Their Pockets: Teaching Them Spe...
Hall Davidson: DEN ISTE PreCon 2011 "It's in Their Pockets: Teaching Them Spe...changingconnections
 
Going mobile - tip, tricks and tools for building mobile web-apps
Going mobile - tip, tricks and tools for building mobile web-appsGoing mobile - tip, tricks and tools for building mobile web-apps
Going mobile - tip, tricks and tools for building mobile web-appsJoshua May
 
The Good, the Bad and the Ugly things to do with android
The Good, the Bad and the Ugly things to do with androidThe Good, the Bad and the Ugly things to do with android
The Good, the Bad and the Ugly things to do with androidStanojko Markovik
 
Cross-platform logging and analytics
Cross-platform logging and analyticsCross-platform logging and analytics
Cross-platform logging and analyticsDrew Crawford
 
iPhone Development: Zero to Sixty
iPhone Development: Zero to SixtyiPhone Development: Zero to Sixty
iPhone Development: Zero to SixtyThomas Swift
 
You shouldneverdo
You shouldneverdoYou shouldneverdo
You shouldneverdodaniil3
 
CoreData - there is an ORM you can like!
CoreData - there is an ORM you can like!CoreData - there is an ORM you can like!
CoreData - there is an ORM you can like!Tomáš Jukin
 
How to be an Independent Mobile Dev by TJ Grant
How to be an Independent Mobile Dev by TJ GrantHow to be an Independent Mobile Dev by TJ Grant
How to be an Independent Mobile Dev by TJ GrantTJ Grant
 
Extreme Programming practices for your team
Extreme Programming practices for your teamExtreme Programming practices for your team
Extreme Programming practices for your teamPawel Lipinski
 
2018 GIS in the Rockies Vendor Showcase (Wed): Adventure Safely: A New Techno...
2018 GIS in the Rockies Vendor Showcase (Wed): Adventure Safely: A New Techno...2018 GIS in the Rockies Vendor Showcase (Wed): Adventure Safely: A New Techno...
2018 GIS in the Rockies Vendor Showcase (Wed): Adventure Safely: A New Techno...GIS in the Rockies
 
Lazy, Messy, Backwards - Scott Porad, Start Pad, June 2009
Lazy, Messy, Backwards - Scott Porad, Start Pad, June 2009Lazy, Messy, Backwards - Scott Porad, Start Pad, June 2009
Lazy, Messy, Backwards - Scott Porad, Start Pad, June 2009Scott Porad
 

Ähnlich wie Reinvent yourself - How to become a native iOS developer in nine steps (20)

Mobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B ExperimentsMobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B Experiments
 
Hotfixing iOS apps with Javascript
Hotfixing iOS apps with JavascriptHotfixing iOS apps with Javascript
Hotfixing iOS apps with Javascript
 
App stores + cordova... get excited!
App stores + cordova... get excited!App stores + cordova... get excited!
App stores + cordova... get excited!
 
7 things one should learn from iOS
7 things one should learn from iOS7 things one should learn from iOS
7 things one should learn from iOS
 
Hall Davidson: DEN ISTE PreCon 2011 "It's in Their Pockets: Teaching Them Spe...
Hall Davidson: DEN ISTE PreCon 2011 "It's in Their Pockets: Teaching Them Spe...Hall Davidson: DEN ISTE PreCon 2011 "It's in Their Pockets: Teaching Them Spe...
Hall Davidson: DEN ISTE PreCon 2011 "It's in Their Pockets: Teaching Them Spe...
 
Going mobile - tip, tricks and tools for building mobile web-apps
Going mobile - tip, tricks and tools for building mobile web-appsGoing mobile - tip, tricks and tools for building mobile web-apps
Going mobile - tip, tricks and tools for building mobile web-apps
 
Learn to Code and Have Fun Doing It!
Learn to Code and Have Fun Doing It! Learn to Code and Have Fun Doing It!
Learn to Code and Have Fun Doing It!
 
The Good, the Bad and the Ugly things to do with android
The Good, the Bad and the Ugly things to do with androidThe Good, the Bad and the Ugly things to do with android
The Good, the Bad and the Ugly things to do with android
 
Inheriting iOS code
Inheriting iOS codeInheriting iOS code
Inheriting iOS code
 
Cross-platform logging and analytics
Cross-platform logging and analyticsCross-platform logging and analytics
Cross-platform logging and analytics
 
iPhone Development: Zero to Sixty
iPhone Development: Zero to SixtyiPhone Development: Zero to Sixty
iPhone Development: Zero to Sixty
 
All of Javascript
All of JavascriptAll of Javascript
All of Javascript
 
You shouldneverdo
You shouldneverdoYou shouldneverdo
You shouldneverdo
 
CoreData - there is an ORM you can like!
CoreData - there is an ORM you can like!CoreData - there is an ORM you can like!
CoreData - there is an ORM you can like!
 
How to be an Independent Mobile Dev by TJ Grant
How to be an Independent Mobile Dev by TJ GrantHow to be an Independent Mobile Dev by TJ Grant
How to be an Independent Mobile Dev by TJ Grant
 
Extreme Programming practices for your team
Extreme Programming practices for your teamExtreme Programming practices for your team
Extreme Programming practices for your team
 
Lec11cgu_10.ppt
Lec11cgu_10.pptLec11cgu_10.ppt
Lec11cgu_10.ppt
 
2018 GIS in the Rockies Vendor Showcase (Wed): Adventure Safely: A New Techno...
2018 GIS in the Rockies Vendor Showcase (Wed): Adventure Safely: A New Techno...2018 GIS in the Rockies Vendor Showcase (Wed): Adventure Safely: A New Techno...
2018 GIS in the Rockies Vendor Showcase (Wed): Adventure Safely: A New Techno...
 
Lazy, Messy, Backwards - Scott Porad, Start Pad, June 2009
Lazy, Messy, Backwards - Scott Porad, Start Pad, June 2009Lazy, Messy, Backwards - Scott Porad, Start Pad, June 2009
Lazy, Messy, Backwards - Scott Porad, Start Pad, June 2009
 
Um2010
Um2010Um2010
Um2010
 

Kürzlich hochgeladen

TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 

Kürzlich hochgeladen (20)

TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 

Reinvent yourself - How to become a native iOS developer in nine steps

  • 1. Reinvent Yourself Become an iOS Developer in Nine Steps 987654321
  • 2. Jason Hanson ✤ St. Louis, MO ✤ Alien Robot Overlords, Inc. ✤ Flash/Flex Dev (1999 - 2012) ✤ iOS Developer (2011-2013) ✤ @jayfour000
  • 3. Change is Hard – Set a Goal
  • 4. Change is Hard – The Plan
  • 5. Change is Hard – Smaller Plan
  • 6. Change is Hard – Woot! a Shovel
  • 7. ✤ Change is hard ✤ Fear >>= anger >>= hate >>= dark side ✤ Friction, heat, pressure, energy ✤ Takes time and patience ✤ Change too much at once and things break ✤ Don’t have to start over, start with what you have ✤ Change not is necessarily better or worse — just different Properties of Change
  • 8. Step 0: Start Somewhere We all have to start where we are with what we have.
  • 9. Step 1: Accept the Apple Way I <3 Apple (fake it till you make it)
  • 10. ✤ Apple knows better then you ✤ Well, they think they do anyway ✤ Like a child who insists that you disappear into the nether when you step out of sight ✤ Just nod, smile, and go along for the ride ✤ Some blind faith is required. Be comfortable with ‘not knowing’. ✤ Apple can do no wrong, even when wrong they bend the universe so that they are not wrong Step 1 – Accept the Apple Way
  • 11. Step 1 – Accept the Apple Way ✤ Apple makes decisions for you ... so you don’t have to (good & bad) ✤ Form factor, asset types, sizes, names – lots of convention ✤ Supported OS versions (only need to support current + one version back!) ✤ App Store Rejections ✤ Available APIs (using undocumented APIs gets your app rejected) ✤ Appropriate content / interesting app ✤ Grades your code quality (rejects bad code)
  • 12. Step 1 – Accept the Apple Way ✤ Stuck in a Sandbox ✤ It is a really nice sandbox ✤ Be happy in your little corner and work with the tools provided ✤ Don’t waste time trying to go outside your sandbox ✤ ex: Closing app with code ✤ ex: Reading device phone number ✤ ex: Code injection
  • 13. Second Thoughts? ✤ Hey! I want outta here! Maybe I can still make that session on Flex ... ✤ Wait ... why do I care about Flex still? ✤ javaScript unit tests?? (hmm ... lipstick? pig?) ✤ What other options do I have, really? ✤ But why would I subject myself to this egocentric platform? ✤ Should I really sell my last ounce of pride, and my soul, to Apple? ✤ Really f’ing Apple ... really, those guys?
  • 14. Why I Chose iOS over JS & Android
  • 15. Why I Chose iOS ✤ The ecosystem is very nice. Hard things are made easy. ✤ Solid Object Orientated language ✤ C and Obj-C useful for a very long time ✤ The ease and power of native device code was a breath of fresh air after fighting Flash to ‘act native’ for ten years ✤ Good developer community ✤ Good documentation ✤ Good tools Xcode Interface Builder, JetBrains AppCode
  • 16. Why I Chose iOS
  • 17. Why I Chose iOS ✤ The barrier to entry is higher then HTML/JS/CSS work ✤ The startup cost is high (@see Step 2) ✤ Hard(er) skill to learn IMO; lots more barriers ✤ Statistically less qualified developers ✤ Equates to better projects / higher bill rates ✤ The Apple App Store monazites better then competition
  • 18. Why I Chose iOS ✤ iOS: • 90% on iOS 6 • 2 screen aspect ratios • 3 screen DPIs ✤ Android: • 40% on “Jelly Bean” • 22% on “Ice Cream Sandwich” • 33% on “Gingerbread” • “Lots” of screens ...
  • 19. Step 2 – Get the Gear The right tool for the job
  • 20. Step 2 – Get the Gear ✤ Let's go shopping! ✤ Macintosh computer (MacBook Pro) ✤ iOS device (Retina iPad) ✤ Apple developer account ✤ Apple Xcode ✤ JetBrains AppCode
  • 21. Step 3 – Hello World Time to play with the new toys!!
  • 22. Step 3 – $1900 Hello World ✤ $1199.99 - Macintosh computer (MacBook Pro) ✤ $499.99 - iOS device (Retina iPad) ✤ $99.00 / year - Apple developer account ✤ $0.00 – Apple Xcode ✤ $199.00 – IntelliJ AppCode ✤ $29.99 - Cord to connect your iOS device (joking ... but just barely)
  • 23. Step 3 – $1900 Hello World ✤ Yes, it just cost you $1900 to do a Hello World ✤ Deep breath, it is worth it. Stick with it. ✤ Good to know everything is working ✤ Show off to your friends ✤ Get setup to start playing!
  • 24. Step 4 – Get Organized Prepare before setting off for your journey.
  • 25. Step 4 – Get Organized ✤ Place to study (kitchen table, coffee shop, library) ✤ Schedule time to study (nights, weekends) ✤ Books ✤ Videos ✤ Forums ✤ Tools
  • 26. Objective-C Programming The Big Nerd Ranch Aaron Hillegass Forum where you can ask questions about code for each chapter in the book.
  • 27. iOS Programing The Big Nerd Ranch Joe Conway & Aaron Hillegass Forum where you can ask questions about code for each chapter in the book.
  • 28. Cocoa Design Patterns Erik M. Buck Donald A. Yacktman I have not read this book, but Joel Hooks recommended it to me.
  • 29. WWDC Videos Included in your Apple Developer account
  • 30. Stanford Videos Free videos. Apple SDK changes faster then the curriculum, but good starting point.
  • 31. Stack Overflow Unlike Flash and Flex I found tons of very great posts with very usable code and answers most all of my questions.
  • 32. Ray Wenderlich http://www.raywenderlich.com/ Great blog with amazing tutorials for everything you want to do
  • 33. CodeRunner OS X AppStore $9.99 Write and run code snips
  • 34. Step 5 – Join the Community Learning is easier with friends!
  • 35. Step 5 – Join the Community ✤ Learning is easier with friends ✤ User groups – CocoaHeads (http://cocoaheads.org/) ✤ Message boards (Stack Overflow) ✤ Guy at coffee shop ✤ Friends, co-workers ✤ Give presentations
  • 36. Intermission – Motivation (needed before next step) (needed before next step) ✤ Find out what motivates you
  • 37. Intermission – Motivation (needed before next step) (needed before next step) ✤ My motivators ✤ Primal urge to provide food and shelter for my family ✤ Personal *fun* projects ✤ Competition with friends also reading the same books ✤ Little rewards ✤ Coffee at 4pm - doing my morning ritual at 8pm
  • 38. Step 6 – Learn Core Language Deep down in the mine I mine at night.
  • 39. Step 6 – Learn Core Language ✤ This is hard. Very hard. No easy way around it, only through it ✤ iOS apps are written in C and Objective-C ✤ C requires manual memory management ✤ Objective-C now has a memory management helper called ARC (Automatic Reference Counting) ✤ Any null pointer will crash your app - boom! I needed to get this right.
  • 40. ActionScript 3 vs Objective-C BOOL myBoolean = YES; int myInt = 13; float myFloat = 3.14; NSObject *myObject = [[NSObject alloc] init]; NSObject *myObject = @{}; NSArray *myArray = [[NSArray alloc] init]; NSArray *myArray = @[]; - (int)addA:(int)a plusB:(int)b { return a + b; } var myBoolean:Boolean = true; var myInteger:int = 42; var myNumber:Number = 3.14; var myObject:Object = new Object(); var myObject:Object = {}; var myArray:Array = new Array(); var myArray:Array = []; public function addTwoInts(a:int, b:int):int { return a + b; }
  • 41. Storytelling Syntax // Objective C -(void)showUserDataFor:(User *)user onDate:(NSDate *)date withSortOrder:(NSSortDescriptor)sortOrder{ // TODO: method implementation } Show user data for Jason on date Oct 28, 2013 with sort order ascending. // Same method as above with colons lined up -(void)showUserDataFor:(User *)user onDate:(NSDate *)date withSortOrder:(NSSortDescriptor)sort{ // TODO: method implementation } // AS3 public function showUserDataForUserOnDateWithSortOrder(user:User, date:Date, sortOrder:String):void { // TODO: method implementation } // AS3 public function showUserData(user:User, date:Date, sortOrder:String):void { // TODO: method implementation }
  • 42. ✤ Bringing old patterns that did not fit well; like meta-data dependency injection & presentation model ✤ Android patterns (widgets, expecting hardware back button) ✤ C and Objective-C numeric types ✤ CoreData ✤ Not learning more about Categories, Delegates, and the mediator design pattern early on. Where I Stumbled
  • 43. Gotcha – Numbers CodeRunner #import <Foundation/Foundation.h> int main(int argc, char *argv[]) { @autoreleasepool { NSNumber *msTimeSince1970 = [NSNumber numberWithLongLong:1374759546000]; int secTimeSince1970 = msTimeSince1970.intValue / 1000; NSDate *myDate = [[NSDate alloc] initWithTimeIntervalSince1970:secTimeSince1970]; NSLog(@"The date is %@", myDate); } }
  • 44. Gotcha – Strings CodeRunner #import <Foundation/Foundation.h> int main(int argc, char *argv[]) { @autoreleasepool { NSString *myString1 = @"foo"; NSMutableString *myString2 = [NSMutableString stringWithString:@"foobar"]; [myString2 replaceOccurrencesOfString:@"bar" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [myString2 length])]; NSLog(@"myString1 is: %@", myString1); // foo NSLog(@"myString2 is: %@", myString2); // foo NSLog(@"%d", (myString1 == myString2)); //0 NSLog(@"%d", [myString1 isEqualToString:myString2]); //1 } }
  • 45. Step 7 – Study, study, OMG study Book, book, book, book
  • 46. Step 7 – Study, study, OMG study ✤ Everyone learns in a different way ✤ Make slow, steady progress ✤ It will be hard ✤ Do lessons multiple times ✤ Review is an important part of learning
  • 47. Step 8 – Build Free Apps Off to work I go
  • 48. Step 8 – Build Free Apps ✤ Help out friends, people from the community (see step #5) ✤ Make apps that do something to help your life ✤ Release your own app to App Store ✤ Build relationships
  • 49. Step 9 – Get Paid Diamonds!!!
  • 50. Step 9 – Get Paid ✤ Charge for side work as soon as you can ✤ Replace your study time with billing time ✤ Balance learning with billing ✤ Build a good reputation ✤ Bill rates for iOS are comparable to Flash/Flex rates
  • 51. My iOS Journey Timeline ✤ Sep 2011 - Started learning iOS ✤ Oct 2011 - Got iPad 1 ✤ Nov 2011 - Flex is dead to me ✤ Feb 2012 - iOS dev account ✤ Mar 2012 - My first iPhone ✤ Apr 2012 - Billed first iOS work ✤ Apr 2012 - Speaker Cocoaheads ✤ Aug 2012 - iOS Speaker IDSTL
  • 52. Where I am today ✤ Still learning ✤ Contracting ✤ Mentoring apprentice ✤ Talking at user groups ✤ Keeping on eye on what is coming up next (wearable computing)

Hinweis der Redaktion

  1. Thank you all for coming More storytelling, and less code. Share my experiences over the last two years as
  2. Then we need a plan
  3. Nope, not that plan ...
  4. Why am I here?
  5. Going to be here a while; lets build some shelter.
  6. My thought process; convincing myself.
  7. Netflix - number of native clients?
  8. None of the things on this screen have caused me to work late, or have a bad day since moving to iOS.
  9. Go fast past this slide More fragmentation in the browser and on Android
  10. Hello World
  11. To be more specific, $1900 Hello World
  12. no desire to work when family out of town
  13. Like trama
  14. Objective-C is based on C, but with OO int, float, double, long, long long, short, BOOL, NSNumber, NSDecimalNumber (signed and unsigned versions of both) I should have read the book Joel reccomended
  15. Skip this slide during presentation
  16. Skip this slide during presentation
  17. I was very lucky, a client I was doing Flex side work for needed some help with iOS 7 months from when I stared learning till I was billing part time 1 year from when I stared learning till I was billing full time
  18. Slideshare