Billy Shih

Writing in English and Code

Becoming a Web Dev: Follow Up on Code Fellows

Big news, I am officially a full time web developer! It’s been a long journey and it’s not over yet but I am really happy to have made it to this milestone.

In the spirit of giving back to the community, who helped me get to where I am today, I am going to write two posts with some advice on transitioning from a non-technical career into software development. Since I get a emails about Code Fellows every week, I’m going to address some common questions I didn’t answer previously in this post. In a future post, I will cover general advice on becoming a developer.

Did you get a job? Are you happy?

Yes, I got 3 job offers in the middle of August and took a role at Full Circle. I am extremely happy.

During Code Fellows, we talked about how there are 3 things that most developers want from a job:

  1. Great people
  2. Interesting technology
  3. Exciting product

The lesson from this being that you should find a job that fulfills at least two of these since you’re just starting out. Once you get good, you can be picky and find one that fulfills all three. I’m really lucky to have found a place that fits all three of those requirements.

Do you think Code Fellows was worth it still?

My last two posts (1,2) are still accurate overall. I must emphasize that it’s not easy to get a job though, even with the help of Code Fellows.

Did you get a job because of Code Fellows or because of your own hard work?

Both. I turned down an iOS dev job offer before joining Code Fellows, so knew I could get a dev job, however because of Code fellows, I got a job that fit me better.

These are the big things Code Fellows did for me:

  • Gave me a great foundation of Rails and overall web development, thus allowing me to also apply to web dev and iOS roles
  • Introduced me to people who made me into a great candidate
  • Confirmed that I am passionate about web development
  • Pushed me to meet other developers and network
  • Gave me a huge morale boost and the confidence to call myself a developer

All of these things made Code Fellows more than worth the time and money I spent. Was any of this required for me to get a job as a developer? No. Am I much happier having gone through Code Fellows? Yes.

I may have been able to get most of this value on my own, but going through Code Fellows made it easier and faster.

Overtime, I can only see Code Fellows becoming more and more valuable as well. Their classes will improve and the network will grow both in students and business interested in hiring from Code Fellows. I bet we’ll see alumni hiring each other eventually.

How many of your classmates have found jobs?

I haven’t kept track, but of the people I’ve talked to in the past few weeks, many of them are still job hunting. I strongly believe all my classmates are ready for entry level web development and should get a job in the next few months.

Since we’re all entry-level candidates, it’ll take longer to find a job than someone who has a lot of experience, but that doesn’t mean there aren’t roles out there.

How did Code Fellows help you get interviews?

They sent our resumes to companies interested in hiring us. My first offer was from one of these companies.

Also, some of the speakers we had were hiring and they invited companies to come to our presentations. I got a couple interviews this way but otherwise it was just good for general networking.

Code Fellows is at Founder’s Co-op/Tech Stars Seattle and is co-founded by Andy Sack, so it naturally is ingrained into start-up/tech community. They are doing more marketing now and getting the word out about what Code Fellows is all about.

What would you do to prep for Code Fellows or applying to Code Fellows?

I would ask Code Fellows about this directly. Otherwise, I would just apply/prep as if you were going to a job interview. Take it seriously!

What are the downsides to joining Code Fellows?

The biggest downside is the investment in time and money. Since they’ve only run through a few classes, Code Fellows still is figuring out the best way to get students job ready. They will ask you often for your feedback, so don’t hold back.

While more a reality than a downside, it’s worth mentioning that it is still a lot of work to become a developer even with paying Code Fellows to help you. Doing the bare minimum will not get you a job and even working really hard won’t mean you get a job right away.

Other

Here are some other posts about Code Fellows from students that I’ve found. If anyone knows of more, please share and I’ll add them here.

There’s a new bootcamp called CodingDojo in Bellevue. I don’t know specifics about their program, it’s another option to consider.

Last words

Code Fellows is one option of becoming a developer, not the only option. If you are dedicated, you can make Code Fellows a successful part of your transition, but realize that Code Fellows isn’t a requirement to success or a guarantee.

If you can’t afford it, then don’t give up on your dream. On the flip side, if you just think this is an easy way out of your current career, then this probably isn’t the right path for you either.

Becoming a developer requires a lot of work, but it’s not impossible. Dig in and get working.

Let me know if this was helpful or not at me@billyshih.com or @tobillys. Otherwise, look out for my next post on general tips on making the transition to become a developer.

Code Fellows Gold: Final Thoughts

I’m almost 3 weeks out of Code Fellows and I’m deep in my job search. This has given me some good perspective of how my bootcamp experience is helping me find a job and if it was worth it.

Before I dive into that, I’ll summarize the Gold portion of Code Fellows. It followed the same model as Silver, as I described in my earlier post but instead of following the Rails In Action 4 book, we did more online learning. We all were feeling comfortable with Rails by the end of Silver so it was a good point to start branching off into more specific topics like deployment, sending/receiving emails, OAuth and AJAX.

Gold was easier to keep up with the workload, giving me more time to polish my assignments or look at other topics. I felt that this was an artifact of the Gold being new so the curriculum was less structured since they haven’t had much time to develop it and also working through a book takes more time since it’s more detailed.

Overall though, I really enjoyed the second month, especially because my group project really came together. You can see how the project turned out on Heroku (login using: admin@admin.com/password) or source on GitHub. We ended up being voted Best Final Project by our peers and the audience on the last day, which was a nice way to end the class.

So do I think Code Fellows was worth it? Yes, I still do. Although there is still a lot to learn, I can hit the ground running and be a useful developer at a Rails shop. It really rounded out my previous experience with HTML/CSS and also my iOS development experience. I am confident I could build a Rails app and iOS app that work together at this point and that’s really empowering to feel like in such a short amount of time.

For the job search, there does seem to be some reputation being built around Code Fellows, but it is still early on and I think it’ll have more value as many of us get jobs and become more well known.

My biggest criticism of the class is that we didn’t learn a lot of Ruby, so we’re not as well prepared for interviews which usually ask algorithmic questions and so require knowing Ruby. Luckily my Objective-C helps fill in some of those gaps, but I do think that spending some time on just Ruby would be useful in the class and even doing mock technical interviews as a class exercise.

At the end of the day, Code Fellows is like most great opportunites in life. If you work hard, make friends and network, you’ll get a lot of value out of it. Similarly if you continue to do those things once the class is over, you’ll be in a great position to find a job as a developer.

That being said, I haven’t found a job yet, but interviews take time and I’ve gotten way more interviews than I expected, so I feel confident I’ll have a job in the coming weeks. Also, I decided to spend time creating a portfolio site and helped a friend out making a Twilio Rails app for a business he wants to start. Using SMS with a website is so awesome and I’m so happy I can build something like that in just a couple days work.

Anyway, if you’re looking for a career change and you think Code Fellows might be the way to go, I highly recommend it. The classes and the network are only going to grow and get stronger. They’re teaching at businesses, offering all different types of classes and I can really see it being something huge. Being a part of it will only become more and more valuable.

If you have questions (or want to hire me :)), feel free to tweet me @tobillys or email me.

Code Fellows: Ruby on Rails Bootcamp Review

It’s hard to believe I didn’t know any Rails just a month before. While I have a lot to learn, Rails is truly incredible for how much it can do so quickly. A lot of credit is owed to the creators of Ruby and Rails, but also to Code Fellows, which has taught me everything I know about Rails in the past month.

When I was considering joining there wasn’t much information on Code Fellows, so now that I’m halfway through the program, here are my thoughts about it to help anyone considering joining Code Fellows.

Note: Code Fellows is a start-up and changes as they see opportunities to improve. My experience will likely be representative but not entirely accurate of the structure of the class in the future.

Code Fellows is a two month Ruby on Rails intensive bootcamp. More than just teaching Rails, they guarantee a job with at least a $60k salary.

The bootcamp is structured in two parts, Silver and Gold, one month each. People with some Rails experience can jump right into Gold, but I started and just finished Silver. All my classmates who started in Silver have had some experience coding, building web pages (HTML/CSS) and/or know about some area relevant to web development, like QA, project management or working with databases. I came in with iOS development, HTML/CSS and a little JavaScript experience, all self taught.

Each day we discuss what we worked on the previous day from 9:00AM to 12:00PM and then from 1:00PM to 4:00PM work on a chapter in Rails in Action 4, along with other assignments. This works out well since the concepts and amount of work is pretty extensive so having a large block of time to just code and go through the book is important. The morning discussions give space to review, answer questions and solidfy concepts.

We also have many App-a-day assignments, creating small Rails apps that review a given topic like ActiveRecord::Associations, popular gems (Devise and Cancan) and nested resources. Other homework includes going through Code School tutorials (e.g. Chrome Dev Tools, HTML5/CSS3, jQuery and Ruby), Railscasts and read articles about Rails and web development.

Lastly, we are given a group project, which we presented at the end of Silver and will again at the end of gold. My group is building out a Rails app that allows people to apply for Code Fellows and then be rated by Code Fellows staff (source on GitHub). This project is my favorite so far since it’s more free form and I work with others, giving me good practice in pair programming and git.

One huge benefit is the location at TechStars/Founder’s Co-op. We work alongside all the start-ups here and so it’s a good environment to be focused and code with others, while also not having to leave early since it’s an office. I usually stay until 5:30PM and then finish up at home. While there are some days I’d finish earlier, I can’t imagine working part- or full-time while in Code Fellows.

I spent 10 days in Chicago during the second week and it was really hard to get all my work done. Although I participated remotely via Google Hangout, it was sub-optimal.

Our instructors, Brook Riggio and Ivan Storck, are awesome too, teaching us all of the above and always open to helping out. You can really tell they want us to succeed and are doing their best to make that happen.

Code Fellows acknowledges that getting a job as a software developer requires more than technical skills and so include many non-technical activities. There are two speakers every Friday, which has been one of my favorite parts of the class, and recommend networking events to attend. They also have us build out our LinkedIn profiles and personal websites/blogs. (I had this blog up already but switched it to Octopress because of my new knowledge!)

They also hook you up with a mentor but unfortunately my mentor is going to be on vacation, so I’m trying to set something up with him or may get a new one.

Overall, I’m really happy with the bootcamp. I can leverage git and the command line, whip up a basic Rails app easily and learn web development topics on my own at a decent pace now. The only things I would improve about the course are overall organization and more opportunities to network with my classmates and start-ups. Hopefully I’ll see more of that this month.

If you’re thinking of applying for Code Fellows, I recommend you do! Once Gold finishes, I’ll wrap up with some final thoughts about Code Fellows but hopefully this is helpful to anyone considering applying now.

First Hackathon: What Went Well and What Didn’t

Code for Seattle, a hackathon merging civic engagement and technology was today. It was part of a larger event across the nation called Hack for Change organized by Code for America. I had a great time, although I didn’t do any coding.

On reflection, I would do some things differently, so here’s a quick summary of my experience and what I learned.

The Good

  • Met other front-end and back-end developers and designers
  • Learned about non-business problems that technology can help solve
  • Contributed to helping to save cats!
  • Watched someone who really knows Ruby on Rails do some coding
  • Recognized that I have some practical problem solving skills that others lack
  • Finally went to a hackathon :)

The Bad

  • Only talked to people within my group
  • Didn’t get to code because we had enough back and front-end developers and…
  • Our team got stuck with a technical issue that even the people who created the API we were using couldn’t help us with

Takeaways

  • Join a team that is lacking the skills you have
  • Take time to talk to others
  • Be more aggressive in seeking guidance from others around you
  • If someone has deep knowledge in something you want to know, ask to follow along but still try to be helpful
  • Spend time thinking hard about what you want to do and what you want to accomplish beforehand, even if you change your mind at the event

Overall, it was a fun event and I definitely will join another hackathon ASAP. I’m also planning to go to the Seattle on Rails Practice meetup that one of my group members run. More networking and hacking to go along with my regular learning is definitely a big goal of mine, especially after how this event went.

Lastly, giving back is really important to me and this is a unique way for me to give back to the community. I’ll definitely try to brainstorm more ways I can use the awesome data Seattle offers to help others out. I always think about how OneBusAway made bussing part of my routine and something much less scary when I first started and want to have the same impact on others.

If you know of any events in Seattle, let me know (@tobillys) and I’ll try my best to go!

Learn Sass and Compass Quick

For Code Fellows we had to do a lightning talk on a topic of our choice. Since Rails utilizes Sass and my CSS skills have always been more of a learn on demand thing rather than a deep dive, I decided to check Sass out. While doing so, Compass came up often, so I added a little bit of it to my presentation.

Below are my slides, notes and links so you can play around with Sass. It’s pretty easy to digest but there’s a lot of depth I didn’t cover and need to continue learning myself. Enjoy!


Slides

Compass and Sass examples

Try it out by installing compass, cloning the repo and then opening the application.css.scss file.

gem install compass
git clone git@github.com:bbshih/sass_presentation.git
cd sass_presentation
rake db:migrate db:test:prepare
subl /app/assets/stylesheets/application.css.scss
Start a rails server and load localhost:3000 in the browser.

SASS = Syntactically Awesome Stylesheets

TL;DR Sass is an extension of CSS3 that adds on features that programming languages have that CSS lacks. These features make it easier to write and manage CSS.

Sass filetypes

Sass has 2 acceptable syntaxes with 2 different file types:

  • Indented syntax(.sass) – Similar to Haml
  • SCSS(.scss) – Uses CSS semantics, so CSS is valid SCSS (I’ll be using this in the demo)

Sass has an interpreter that spits out traditional CSS files from the *.scss files you create. You can set a command to monitor whenever you make changes to your .scss file so that you always have the .css file, but with Rails and the Sass gem, it will always automatically generate a .css file for you when you reload the page.

Compass

Compass is an open-source CSS framework. It utilizes Sass to provide mixins that solve common problems encountered when creating CSS files

How to install

Add to your Gemfile

group :assets do
  gem 'sass-rails' # if running rails 3.1 or greater
  gem 'compass-rails'
end

In your project directory run:

$ bundle
$ bundle exec compass init

Rename your application.css to application.css.scss to change it into a Sass file. Then add the import below to the file:

@import "compass"

Create new .scss files and @import them into the application.css.scss to use them.

Once your ready to push for production use:

rake assets:precompile

Features of Sass

Variables

  • Create a variable by using $name and assign value with a $highlight: #ff0000;

  • Supports 4 data types: numbers (and units), strings, colors and booleans

Nesting

Place child styles within a parent for better organization and readability

Mixins

  • A selection of code that contains any valid Sass code. Whenever the mixin is called, it is inserted into the location
  • Define by using @mixin nameOfMixIn {} and then calling @include nameOfMixIn
  • You can give a mixin an argument to customize the mixin code:

     #mixin highlightBox($border_width) {
         border-width: $border_width
         color: blue;
     }
    
     .box {
         @include highlightBox(3px)
         height: 30px;
     }
    

Selector inheritance

Use CSS of another selector by using @extend selectorName

Develop Faster in Rails With Zeus

Waiting is my least favorite part of developing. In Rails, every time you run a test or a rake command, even if it’s just a few seconds, it’s seconds that stop your flow.

Zeus is a gem that is out to solve that problem. It preloads the Rails app so that when you run commands it doesn’t have to boot up Rails and so shaves time off of your commands. Like this:

Zeus speed comparison

Here are the supported zeus commands.  It makes running all of these faster:

zeus console
zeus server
zeus test (works for rspec too)
zeus cucumber
zeus dbconsole
zeus generate
zeus destroy
zeus rake
zeus runner

Instead of running rails server, you run zeus server and instead of bin/rspec you run zeus rspec, etc.

Installation

Zeus requires:
  • OS X 10.7+ OR Linux 2.6.13+
  • Rails 3.x
  • Ruby 1.9.3+
  • Recommended: Use with backported GC from Ruby 2.0
I ended up using this command to get the rvm patch working:
rvm get head && rvm install 1.9.3-p0-perf --patch falcon
To install zeus, simply:
 gem install zeus
Now go to your Rails app’s directory and do:
start zeus

Zeus will show that it’s running and show green statuses when its done loading.
Zeus start console

After that, simply run the zeus commands listed above!

Note: Since RSpec support files and FactoryGirl factories are preloaded, Zeus will need to be restarted to utilize changes to those file types. To restart, ctrl+c to stop Zeus and then run zeus start.

Zeus creates a .zeus.sock file you should add to your .gitignore_global file so that you don’t commit it.

Fixes

So I ran into a few problems using Zeus, many of which were documented in the GitHub repo. Here are the fixes I used:

Remove the require statements below in ‘spec/spec_helper.rb’ to solve problems with RSpec. RSpec was running twice or getting undefined methods when I ran tests, but this fixed it. (Source 1, 2)
 - require 'rspec/autotest'
 - require 'rspec/autorun'

If you have problems with the “zeus rake” command, try “zeus rspec spec”. I had to do this to fix an “Uninitialized constant FactoryGirl” error. (Source)

Zeus is can be picky about the order of your gems in the gemfile, try reorganizing it or even adding it to your gemfile (although that will slow it down).

Lastly, if you see things behaving incorrectly, try restarting zeus by using ctrl+c to stop it in the terminal you’re running zeus and then running “zeus start” again.

Adding onto Zeus

If you use Sublime Text 2, utilize it with Sublime Text 2 Ruby Tests, which allows you to run tests inside of Sublime Text. Install it via the Package Manager or the GitHub repo. Then customize it to use Zeus by finding the RubyTest.sublime-settings file inside of the RubyTest package directory and copy it. Place the copy in the package User directory. Open the copied file and replace the “run_cucumber_command” and “run_rspec_command” settings with this:

 "run_cucumber_command": "zeus cucumber {relative_path} --no-color",
 "run_single_cucumber_command": "zeus cucumber {relative_path}:{line_number} --no-color",
"run_rspec_command": "zeus rspec {relative_path}",
 "run_single_rspec_command": "zeus rspec {relative_path}:{line_number}",

Andy Wait shows how he uses Zeus with Guard to autorun tests.

Thoughtbot sets up Zeus with some customizations.

The Zeus-Parallel Tests gem combines Zeus and another gem to allow running tests in parallel.

There’s a great Railscast that goes over the Zeus installation as I did above and also covers alternatives called Spring and Command. If you like Zeus or have problems with it, check those out too. Spring looks pretty great and doesn’t require starting up separately, so I might do another post on it.

Let me know your experience with Zeus and if there are any other speedy gems out there by tweeting me or email me.

Becoming a Code Fellow

My blog has been sparse because I’ve spent the last few months contracting and applying for iOS dev jobs. Although I eventually found a promising job as an iOS developer, I decided to join Code Fellows, a developer bootcamp at Founder’s Co-op in Seattle to teach me some Ruby on Rails, network with the Seattle start-up community and find a opportunity that fits me better. Classes started this month and I’ll be done by the end of June. Hopefully by then I’ll have a great job as a full time developer.

Look out for more posts about my adventures learning Rails and mobile development, as well as my transition into a new career. Also, I should have fun side projects to talk about.

Please reach out to me if you have any questions or are interested in hiring a developer!

Beginning iOS Development: Books, Stack Overflow and GitHub

While learning how to create my first app, I realized that not only do I need to learn how to code, but I’m an outsider to resources that developers love and use everyday. Many resources teach you how to make an app but neglect to emphasize amazing resources like Stack Overflow and GitHub, which were critical to accelerating my learning and creation of my first app.

In this blog series, I will lay out my advice to help you get over the hump of building your first app as quickly as possible. Your goals should be get enough understanding of coding so that you can:

  1. Understand Apple’s official documentation
  2. Understand questions and answers in Stack Overflow
  3. Utilize and modify open source projects for your own app

Once you can do these 3 things, you’ll be well on your way to creating your first app. Not to say you’ll be a seasoned developer, but you’ll have what you need to build a great first app.

Another part that is typically not covered is learning marketing and design, of which there are a lot of resources out there but were unknown to me as well. Part 2 will cover these topics in a similar fashion as this with the approach of getting a solid foundation and taking advantage of online resources.

Starting off with an idea and sticking to your books

At this first stage, you need to learn the basics by just going through a beginner class, tutorial or books.

Pick whatever you think will work best for you and stick with it. Unless you totally lose faith in the resource you selected, don’t be tempted to buy more books or videos instead of doing the work (I made this mistake!)

What ended up working for me was committing to the two books below. They were highly recommended from many sources and they pair up well one after another since they’re from the same company.

These books were great because they start off with small ideas and expand on them appropriately, giving you a deeper understanding of what’s going on and the exercises at the end of each chapter force you to stretch your understanding and learn on your own. Both those are critical to you being able to create your own app.

It wasn’t until near the end of the second book that I was able to really start on my app with any confidence and not get completely stuck.

Even if you end up using different books or doing something else, digest as much as you can and use this time to practice the techniques in the finding answers section below.

Once you’re done with the books or close to finishing, start making your app and don’t feel bad about referencing or copying code that you used while learning. In fact I’d recommend your first project to rely heavily on what you learned so that you actually prove to yourself that you learned it.

Finding answers

Once you start making your own app or are working on the exercises in the book, you’ll encounter specific questions that you’re curious about or need help out on but can’t figure out through the book.

Your first resource should be Apple’s extensive documentation, which is included with Xcode (shortcut cmd+ctrl+?) and online. It’s essential you get used to the way it’s laid out and the language they use to explain things, as the faster you learn this, the easier time you’ll have in the long run. The documentation is really great, but at first I really didn’t understand anything. Fortunately Apple documents everything in a consistent fashion, which means once you get a hang of it, almost everything starts making sense.

Optional: I use Dash to search the documentation since I found it more user friendly to navigate the documentation and faster than Xcode’s documentation browser.

Next, leave a browser open to Stack Overflow at all times. It is the greatest resource for finding answers to programming questions. If you haven’t used it before, it’s a Q&A site for developers and since you’re a beginner like me, most like your question has already been asked and already answered by other people. Additionally if you can’t find an answer, you can ask one and it usually gets answered within 24 hours.

Although it’s a great resource, it can be tough finding answers at times so here are some tips:

  • Use the search function and add [ios] to your searches. The brackets mean it’ll filter to only questions tagged [ios]
  • When reading questions and answers, read anything that sounds related. Often I get answers from questions that are different but the answer still covers what I need to know
  • While the top answer is usually the best, read some of the other highly rated answers and any comments. Sometimes your situation will be better answered by a non-top answer or the top answer won’t be current with updates to iOS
  • If you can’t find the answer you need, try new searches using these techniques:
    • Remove the [ios] tag and instead use a related tag like [iphone], [ipad], [objective-c]
    • Start with a specific search and then make it more general to see if you can find different questions and answers
    • Replace official class names with unofficial ones and vice versa, e.g. UIViewController vs view controller
    • Each question page has a related questions on the right side, be sure to check if there are other questions that might hold your answer
  • If the above fails, don’t be scared to ask a question. Just make sure you follow the rules and try answering questions sometime to test your knowledge and give back to the community

Optional: Using Stack Overflow means you have a browser window open that can tempt you to visit Hacker News or Facebook instead of coding, so I recommend using SelfControl or opening it in a browser that you never use and so have no bookmarks around to tempt you.

If none of those turn up answers, do a Google search and check the Apple developer forums.

Lastly, ask other developers for help or just talk about development in general. Although I have few iOS developer friends, discussions with more seasoned developers helped me understand different concepts and explaining Objective-C and Cocoa touch to them helped me make sure I really understood what I was doing. Additionally you may have an iOS group/meetup in your area that can be a great resource. (If you’d like to chat, feel free to email me!)

Using open source code

Being stuck because you have absolutely no idea how to start is common at the beginning and using or referencing someone else’s code is one of the best ways to learn and gain confidence. I can’t emphasize how many barriers are lowered when you utilize open source code.

At times it feels like you’re cheating, but that really is just showing you the power of open source code and why it is so amazing.

Open source code are basically projects and pieces of code that people have written that either are made to be used by others or full projects on their own. What will be most useful to you for using are the code to be used by others. If you want example code to reference, then full projects of similar apps to what you are building are useful but rare.

An example is that I wanted to have the Facebook/Path style navigation where you hit a button on the top left and a menu slides in. Here it is implemented in my app:

I added this to my project by finding an open source project that replicated that navigation called ZUUIRevealController by Philip Kluz. It comes out of the box with an example like this:

As you can see in the screenshots above, not everything will work or look how you want just by copy and pasting their projects. People created their code for specific uses or didn’t implement features that you need, so you often have to make modifications to their code. This is the part where you’ll probably learn the most from others code.

You’ll have to reverse engineer what they did by reading and understanding their code and then in order to customize it the way you want you’ll have to modify it. Some projects are easier to change than others and many come with ways built in to customize their projects, but at the end of the day you’re using someone else’s code, who is probably a much better coder than you, so you’ll learn a lot.

The site I used most is GitHub. GitHub is a place that hosts open source projects (and private projects) that anyone can contribute to or make their own variation. Although GitHub can be really intimidating, you only need to know a little to take advantage of it.

Starting off, think of a single component/feature of your app that you need. For example, some components I needed for my app were a youtube player, a photo gallery, social sharing and in-app purchases.

Search for your component in GitHub’s search box and hit enter. It’ll give you some results, as well as advanced options. Change the Search Language to Objective-C and search again to show open source projects related to iOS (and mac, which you’ll have to filter out yourself by looking at the project descriptions but almost everything is iOS)


In GitHub, search and then refine the Search Language to Objective-C

At this point I’ll go over the basics to get going immediately and then some tips to more effectively use GitHub. Click on one of the projects (GitHub calls them repositories) and scroll down to the Readme sections for a description and help on how to use the code. If it doesn’t include anything helpful in the readme, I would recommend not using the code since you’re just starting out.

If you find something you like, simply click the Zip button and it’ll download the entire repository.

Most repository will have an example Xcode project file that uses the code itself and then have instructions on how to install it into your own project in the readme file (or on GitHub). Often the author’s offer up their email address for help as well. If it’s a popular project you often can find answers in Stackoverflow though too.

Now that you know the basics, some background knowledge of GitHub will help you get the most out of it. The first thing is that in Github, anyone can copy a repository, modify it and post it on GitHub (called a fork) and so you’ll often see copies of the same repository made by different people in the search results like the screen shot below. Typically you’ll want the originating project, not someone’s copy/fork. The first part of the name is the username (lwz7512 and bsfan) and the second is the name of the repository (PhotoGallery).

The originating repository typically is the first one listed in the search results, but you can make sure by going to the link and seeing if it says “forked from ____”. If it is forked then it is a copy and you can click the repository it’s forked from to go to the original.

Additionally, often in the code description area (or in the readme) there is a link to the original source or a page that talks about the repository that can give you more information and instructions on how to use the repository.

One of the best signs to know if a project is a quality project you should use and therefore likely well documented, easy to use and robust, is if it has a lot of stars and forks as shown in the top right of the repository page.

In the image above, I’m signed in and have starred this project. If you want to bookmark projects and contribute to them eventually, I highly recommend you sign up for a GitHub account to do this.

Optional: Try using SourceTree to pull (sync) updates for these projects. The advantages of this are that when people update the repositories to fix bugs or add features, you can request your files to be updated as well.

To help get you started, here are some repositories that I think almost every app could use:

  • Appirater - Asks a user to rate your app in the App Store after an amount of days, app launches and/or actions you set
  • SVProgressHUD - A simple way to show a loading or other temporary message to the user
  • TSMiniWebBrowser - A web browser for your app so you can show a web page that you can update outside the app, e.g. blog and FAQ

Optional: Instead of looking for new controls all the time, Cocoa Controls has a weekly email on their website that sends out new submissions. It’ll give you ideas of what you can add to your app or just key you into projects you can take a look at to see their inner workings.

What’s next?

While coding is a huge chunk of the process, there’s a lot more to it. In the coming weeks I’ll be following up with posts on resources and tips I used to finish and submit my app, along with anything I think would help other beginner iOS developers.

Please send me an email if you have any advice, comments or suggestions for a beginner iOS developer. I’m looking for a iOS development job and iOS developer friends :)

Lastly, if you’re curious about my first app, I’d appreciate a download and feedback: Corgi Fetch (App Store link).