Bear Cahill is an iOS and Amazon Web Services developer, an excellent instructor, and author of Manning's "iOS in Practice." Bear recently sat down with us to discuss his background and the life of a trainer. Here's what we found.
Q: Tell us more about yourself. How did you get into to programming?
A: I saw the movie "War Games" as a kid and just thought, wow, that's really cool – computers and hacking into stuff. So, I got a TI994A – an old 16gig computer and just started writing stuff. I had a book I learned from. I started with an if-then statement and started writing code and fell in love with programming. Then I kept doing it through school and studied Computer Science in college. I kept thinking that as long as I can keep passing, I'll do it. As long as I can keep getting through the math part. Eventually I started liking the math too and even minored in math. It was quite a challenge. I worked on the server side; I worked at IBM during college, and then Ericson and Travelocity.
My last job, which was at a Windows shop, I was doing some stuff on the side in J2ME on Blackberry phones and that kind of thing. In 2008 they were moving development to Arizona, so I took a package and decided to do more full-time. That was when the app store came out. To get into work in the iPhone world, I got a MacBook Pro, an Objective-C book, and a Go code book and started learning. There was a lot of action to keep me busy. I was fortunate to expand from there into teaching. The market has changed a lot since, but I have been able to stay independent and teach, which I really like. Diversification has been working well for me.
Q: You do both iOS and Android development and training. Can you tell us a little bit about how they compare with each other?
A: Java has been around longer than Swift, but Objective-C has been around for a while. So, they both have some maturity to them. I had a Java background for several years before doing the iOS and Objective-C part. The language part I think is mature and it really solid, so that is not as much of a challenge if you've already got some object-oriented programming experience. The differences also have to do a little bit with the language. But, with Swift it is not as much. In fact, I've written some code in Swift where I intentionally put semicolons at the end so that I could copy it into Java and it was not as big of a deal. The UI design has some similarities and is getting to be a little more similar but there are some differences there. And the Android studio, the IDE, has also come a long way from the past. For me, not having as much experience on the Android side, getting more into the Android side, the Android studio has helped a lot. The biggest difference in my experience is in the devices. Apple has a handful of devices and you're mostly dealing with knowns. Whereas Android has so many devices. You have to install a bunch of emulators. I have a lot more Android devices to test. These create differences in the development cycle. They're both great and very powerful. They both have some great devices out there now. I think they are probably more similar than they are different, conceptually. I'll probably upgrade soon.
Q: What device do you use personally?
A: I use an iPhone 6. This one is pretty old. I used to upgrade until they stopped with the rebate program. I might need to upgrade. There are some things I can't do with my current device.
Q: How do you stay up to date with the everchanging mobile technologies?
A: One thing that helps is teaching. You have to learn in order to teach something well. Producing anything helps too. Ideally, your own blog, or writing guest posts, or anything that you write you have to be able to explain. And then, projects. I have been very fortunate to be able to work on a variety of mobile projects over the past ten years. You might have someone come to you and say that they want a project that takes two audio streams and merges them together. And then you figure it out. Everything I have learned has pretty much been through building a real project. Sometimes you write your own project and do your own research. The thing that has been really good for me has been the mix of doing projects and maintaining them, and constantly taking on new projects that teach me new things as I go. The more you take on projects and explore, the better and faster you will learn. The challenge is more in getting the projects than in learning. Learning to teach and write is a great way to make sure you are not caught not knowing something when you are asked about It.
Q: Do you have any favorite resources that you look to to learn from?
A: Stack Overflow, which is probably everyone's answer. It is just so well put together with the voting system. You see something with over three hundred votes and you know that you have found your answer. I like NSHipster because it goes into explanations. I like Medium articles too. I also like Ray Wenderlich; I used to be a subject matter expert there and I think that they strive really hard to produce good content quickly and expertly, and really stay on top of questions on the forums.
Q: What do you like most about being a technical trainer?
A: Just one part? That's tough. I love the learning. When a client says they want me to add this, or learn that, that is very satisfying because it does feel like I am able to keep up to date and not get stuck in one technology. I also love interacting with people and seeing them learn. It is a lot of fun to see when someone gets it. Especially after they first say things don't make sense. I usually try to ask at the end of the first or second day, is this getting kind of confusing? And they usually say yes. And I say – good, that means you are learning. That means you are about to take the leap. Go home and sleep on it. Tomorrow when we come back you will get it. If it is just easy, then they are not pushing themselves. And then, I also love the travel involved with technical training. Not necessarily a specific destination. I just like getting out there and seeing different places. I guess it is a break from everyday life, which is always nice. It keeps you young.
Q: What are some of the most frequently asked questions in your iOS or mobile classes?
A: There are certain types of questions that come up a lot. People might ask how often do you do X? Sometimes you might say, I do it all the time, and others you'll say it does not come up a lot, but you still have to know how to deal with it. It might have to do with dealing with certain problems, certain errors, certain things that go wrong. For example, in your story board, if you connect two things from the code to the UI, and then go and use that and set the label text, you might find out later in your UI that you don't actually want the label in the code. And maybe you need to break the connection in the UI and still use it in your code. Or, vice versa, you delete the code, but you never broke the connection in the story board. You're going to get a bug and a crash and not understand what is going on. When you see these three words in a crash, you will recognize the error and be able to handle it better. Even if you only have this come up once a month, it is crucial to be able to understand and figure it out quickly. Otherwise you could end up spending three days on these kinds of issues.
Another one is asking – what did you just do there? I use so many different keyboard shortcuts that it can be hard to follow. People want to know how to work faster and better. So I go over shortcuts and hotkeys too, and encourage people to use the autocomplete function. If any casing is wrong, the whole code will be wrong.
Q: Are there any cheat sheets you recommend for keyboard shortcuts?
A: Xcode will show you everything inside. That will be easier to learn from since it is automatic and just pops up for you. You don't need to manually learn it.
Q: With mobile being the future, what advice do you have for kids or teenagers who want to get into the technology sector or mobile technology specifically when they grow up?
A: There are a billion resources out there right now. I recommend finding a good one. A lot of people say they'd watch a YouTube video on something. A lot of them are good but a lot are not. I'd recommend finding online resources that have a system or an organized program that you can step through over time in a more organized way. It is better to learn all the tools and how they go together. You don't want to just know how to do one thing. You want to learn and understand concepts thoroughly so that you can solve problems better as a software developer. Learn things from the beginning and get a complete understanding of how and why things work.
Q: Having a portfolio of work to showcase is so important for developers. Are you on the app store?
A: I have stopped counting how many I have. It has to be in the hundreds. I have to cut down the list I sent to prospects and clients. It is always helpful to have published work and apps online to share and show what you can really do with your programming skills. A portfolio is great to show what you have done. One of my advantages when I graduated college was that I had already worked for IBM. I had experience working for a manager and with real deadlines. This is true proof for what you can do. You can show and not just tell.
Q: What are some of your passions and interests outside of work?
A: I play guitar. I play fingerstyle, and a lot of jazz. Just messing around with the guitar and trying to learn interesting chords and fretboard. My goal was to be able to pick up the guitar, mess around, and know what I'm doing. Then I thought, oh, jazz sounds cool. We homeschool, so I like hanging out with my kids. The rest of the time I like being away from my kids. And going to friends and church. We just moved to a new house and our church community is really close by. I also like coffee and beer.
Our live, instructor-led lectures are far more effective than pre-recorded classes
If your team is not 100% satisfied with your training, we do what's necessary to make it right
Whether you are at home or in the office, we make learning interactive and engaging
We accept check, ACH/EFT, major credit cards, and most purchase orders
Alabama
Birmingham
Huntsville
Montgomery
Alaska
Anchorage
Arizona
Phoenix
Tucson
Arkansas
Fayetteville
Little Rock
California
Los Angeles
Oakland
Orange County
Sacramento
San Diego
San Francisco
San Jose
Colorado
Boulder
Colorado Springs
Denver
Connecticut
Hartford
DC
Washington
Florida
Fort Lauderdale
Jacksonville
Miami
Orlando
Tampa
Georgia
Atlanta
Augusta
Savannah
Hawaii
Honolulu
Idaho
Boise
Illinois
Chicago
Indiana
Indianapolis
Iowa
Cedar Rapids
Des Moines
Kansas
Wichita
Kentucky
Lexington
Louisville
Louisiana
New Orleans
Maine
Portland
Maryland
Annapolis
Baltimore
Frederick
Hagerstown
Massachusetts
Boston
Cambridge
Springfield
Michigan
Ann Arbor
Detroit
Grand Rapids
Minnesota
Minneapolis
Saint Paul
Mississippi
Jackson
Missouri
Kansas City
St. Louis
Nebraska
Lincoln
Omaha
Nevada
Las Vegas
Reno
New Jersey
Princeton
New Mexico
Albuquerque
New York
Albany
Buffalo
New York City
White Plains
North Carolina
Charlotte
Durham
Raleigh
Ohio
Akron
Canton
Cincinnati
Cleveland
Columbus
Dayton
Oklahoma
Oklahoma City
Tulsa
Oregon
Portland
Pennsylvania
Philadelphia
Pittsburgh
Rhode Island
Providence
South Carolina
Charleston
Columbia
Greenville
Tennessee
Knoxville
Memphis
Nashville
Texas
Austin
Dallas
El Paso
Houston
San Antonio
Utah
Salt Lake City
Virginia
Alexandria
Arlington
Norfolk
Richmond
Washington
Seattle
Tacoma
West Virginia
Charleston
Wisconsin
Madison
Milwaukee
Alberta
Calgary
Edmonton
British Columbia
Vancouver
Manitoba
Winnipeg
Nova Scotia
Halifax
Ontario
Ottawa
Toronto
Quebec
Montreal
Puerto Rico
San Juan