<?xml version="1.0" encoding="UTF-8"?>
<rss version='2.0' xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Scott Moschella</title>
    <description>Ruby on Rails and iOS Developer</description>
    <link>https://scott.silvrback.com/feed</link>
    <atom:link href="https://scott.silvrback.com/feed" rel="self" type="application/rss+xml"/>
    <category domain="scott.silvrback.com">Content Management/Blog</category>
    <language>en-us</language>
      <pubDate>Mon, 07 Oct 2013 20:13:54 -0400</pubDate>
    <managingEditor>scottmosch@gmail.com (Scott Moschella)</managingEditor>
      <item>
        <guid>https://scott.silvrback.com/advice-for-new-ios-and-ruby-on-rails-developers#326</guid>
          <pubDate>Mon, 07 Oct 2013 20:13:54 -0400</pubDate>
        <link>https://scott.silvrback.com/advice-for-new-ios-and-ruby-on-rails-developers</link>
        <title>Advice for New iOS and Ruby on Rails Developers</title>
        <description></description>
        <content:encoded><![CDATA[<p>I was recently emailed by a beginning developer asking how I went from just repeating steps in a tutorial to <a href="https://itunes.apple.com/us/app/launch-day/id711241887?mt=8" title="Launch Day for iPhone">actually building something</a>. I&#39;m not an advanced developer by any means, but this is what worked for me and it might work for you too! What follows is a copy/paste of my reply.</p>

<p>I recommend coming up with a small project to work on. That will give you some focus and might lead you down some paths that you wouldn&#39;t necessarily take with a step-by-step tutorial. I started with a simple site for cataloging video games. Maybe you can come up with something that&#39;s just beyond what you think you&#39;re capable of. That way, you&#39;re not just repeating a bunch of steps.</p>

<p>Don&#39;t be afraid to copy and paste code. It&#39;s a big part of the learning process. Just be sure you understand what the code is doing as you&#39;re copying and pasting.</p>

<p>The main thing that&#39;s helped me improve is adding new features to simple projects I started -- things like a login system, image uploads, pulling data from an API like Twitter, Amazon or Youtube, etc. Just tackle things one step at a time and you should be able to add any new feature you can think of. You&#39;ll be forced to work with different kinds of concepts &amp; objects that you might not use often (hashes, callbacks, etc.).</p>

<p>For Rails, <a href="http://www.railscasts.com">Railscasts.com</a> is a great resource. If you have a feature idea, chances are there&#39;s a Railscast video to get you started.</p>

<p>I love <a href="http://railstutorial.com">Michael Hartl&#39;s Ruby on Rails Tutorial</a>. If you haven&#39;t worked through that yet, definitely give it a try. It will get you more comfortable with tools like git and services like Heroku and github.</p>

<p>Also look into meet-up groups in your area on <a href="http://www.meetup.com">meetup.com</a>. I found a Ruby group in Los Angeles that way. Just showing up each week was a huge help. I learned much faster by being surrounded by coders. I also went on to help other beginners understand basic concepts. Teaching others really reinforces the basics for you.</p>

<p>I also recently <a href="http://scott.silvrback.com/how-a-38-year-old-with-no-computer-science-background-made-an-iphone-app">wrote a post listing the tools and books that helped me go from 0 to part-time developer</a>. You might find some insight there, too.</p>
]]></content:encoded>
      </item>
      <item>
        <guid>https://scott.silvrback.com/how-a-38-year-old-with-no-computer-science-background-made-an-iphone-app#116</guid>
          <pubDate>Fri, 04 Oct 2013 14:58:04 -0400</pubDate>
        <link>https://scott.silvrback.com/how-a-38-year-old-with-no-computer-science-background-made-an-iphone-app</link>
        <title>How a 38 year-old with no computer science background made an iPhone app</title>
        <description>or how I spent the last 5 years of nights and weekends</description>
        <content:encoded><![CDATA[<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/75188d07-2f7e-467c-8968-66efee8568a7/launch_day_large_large.png" /><br>
I recently launched my first iPhone app. <a href="https://itunes.apple.com/us/app/launch-day/id711241887?mt=8" title="Launch Day for iPhone">Launch Day</a> tracks upcoming video game release dates for video game consoles. The app sends push notifications for &quot;subscribed&quot; games when release dates are announced or changed. Users also receive push notifications at set intervals that serve as reminders before a game&#39;s announced release date.</p>

<p>Launch Day sends and receives data from a Rails app and API that I built. The Rails app interfaces with the Urban Airship API to send push notifications to iOS devices.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/6821231e-2c05-4c33-9649-0a49f6e317a6/photo-4-1_large.png" /><br>
Launch Day is not especially pretty or advanced, but I made it mostly by myself, it does what I initially set out for it to do and it works. I&#39;m proud of it and I will be improving it, adding features and porting it to iPad and iOS 7 in the next few months.</p>

<p>I think my story may be of some use to beginners and aspiring programmers like me, so here&#39;s the basic gist of how I got here.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/0bc5fadd-7f9b-4682-918b-cdb97147beca/techtv_large.png" /><br>
In 2005, I was working in television as a segment producer at G4/TechTV, the twisted hybrid of a video-game centric TV network called G4 and a much-loved, now defunct tech-centric television network called TechTV. On the side, I was creating content for my moderately popular tech blog at plasticbugs.com (also defunct). There, I would push the limits of my very limited computer skills to create what I called &#39;hacks&#39;: mostly-harmless, technology-based pranks for my own amusement. One was a Skype/iTunes Automator Workflow that called my phone and played a song after emailing a song title. Another time, I removed the DRM from a silent .99 cent song on iTunes and posted it on my site for anyone to download, along with step-by-step instructions. I also put my keyboard in the dishwasher after I spilled beer on it. My very, very smart friend Ron said he had heard putting keyboards in dishwashers was something people did, so I did it and documented the process for my blog. That stunt landed me <a href="http://www.npr.org/templates/story/story.php?storyId=11029793">on NPR a few years later</a>.</p>

<p>One day, I thought it would be cool if GIMP, the open source image editing application worked more like Photoshop. I knew Photoshop pretty well. GIMP was similar to Photoshop, but the commands, their locations in the drop down menus and tool names were all quite different (e.g. Gimp&#39;s blur tool is/was called convolve). GIMP was not easy to use for someone who knew Photoshop.</p>

<p>Maybe if I downloaded the source code and opened some of the files in a text editor, I might be able to come up with a plan of attack. Unfortunately, for a guy like me who only knew HTML and messed around a little with <a href="http://www.processing.org">Processing</a> and Applescript, GIMP&#39;s source code was pretty much indecipherable.</p>

<p>A day later, I was talking about the GIMP-to-Photoshop idea with Ron and how impossible I thought it would be for me to actually execute it myself. Ron said, &quot;You&#39;ll figure it out. Just download the source code and do it.&quot;</p>

<p>So, I went back to the GIMP source code and started reading, looking for anything that looked familiar.I read through the code file by file, line by line. I was looking for menu commands, names of tools, and wrote down every file name and line number where I found something that matched. Then, I would use &#39;find and replace&#39; to change the code to match the Photoshop equivalent, taking care not to overwrite working code, just words that I was certain were used only as text strings.</p>

<p>After months of reading and editing each file, I had pieced together something that actually compiled and worked on my Mac. <a href="http://en.wikipedia.org/wiki/GIMPshop">I posted GIMPshop on my blog</a>, along with a detailed writeup of exactly what I did and why, and waited. Several hundred people downloaded GIMPshop by the following morning, and it seemed like I had a moderate success on my hands. Two days later, on April 1st, someone posted GIMPshop to Slashdot and I quickly had far more traffic than my site could handle. My web host shut me down and I rushed to get re-hosted somewhere else. In the meantime, Slashdot commenters thought GIMPshop was an April Fool&#39;s prank.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/f72a147b-2239-43ed-ae61-97eb5dd31387/gimpshop_large.png" /><br>
Nearly a million downloads later, I should have been pleased with the result -- but I wasn&#39;t. To me, GIMPshop felt more like a stunt. I performed the coding equivalent of pounding a square peg through a round hole. My hack was inelegant and I wished I knew enough to do it properly. I also wanted to eventually make something of my own and execute it. I had no shortage of ideas, but actually turning those ideas into working code was impossible without knowing how.</p>

<p>I began to look at more technical blog posts and demos online: cool CSS tricks, jQuery, a new-to-me programming language called Ruby, and <a href="http://www.youtube.com/watch?v=Gzj723LkRJY">a short demo by a guy with a funny accent who said &quot;whoops&quot; a lot</a>. I didn&#39;t know how to code, so most of it was not something I was going to just &#39;pick up&#39;. However, the Ruby on Rails scaffold stuff from that video looked easy. Based on the number of blog posts and Ruby tutorials being posted, Ruby itself seemed like something worth learning. And, thanks to my GIMP experience, I was semi-comfortable with the OS X terminal, so I started there.</p>

<p>Over then next several years, I spent about one or two nights each week reading a book or working through a tutorial. Then, I dedicated at least a half-day every weekend to reading, following more tutorials and working on small projects. Though it took me years, this whole process would have gone much quicker if I didn&#39;t have a full time job in a completely different field. What follows isn&#39;t necessarily the quickest or easiest way to learn iOS development, but here&#39;s how I did it, step-by-step.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/edb9b415-41d5-45c8-a59d-4969bdeb8008/css-missing-manual-books-web-development-books_large.jpg" /></p>

<h3 id="1-html-css">1.HTML &amp; CSS</h3>

<p>I learned basic HTML in 1995, but that was the end of my &#39;coding&#39; ability. So, I decided to start my education with a concerted effort to learn CSS properly. Within a month, I had finished one CSS book and knew enough to build web pages that looked half-decent.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/45e54e43-7734-4a2c-bd6b-c2bc6ce34195/cat_large.gif" /></p>

<h3 id="2-ruby">2. Ruby</h3>

<p>Rails was fun to play around with. But I knew that, with Rails, I was just repeating a bunch of steps from tutorials. I still didn&#39;t know how to make what I wanted, so I had to take a step back and learn Ruby.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/e0755842-c807-4b0f-bf2f-c3166cf113f5/whys-poignant-guide_large.png" /><br>
I read <a href="http://mislav.uniqpath.com/poignant-guide/">Why&#39;s Poignant Guide</a> first because it seemed so approachable with its cartoon foxes. I understood most of what I read, but some concepts like blocks and symbols, I didn&#39;t quite get. That led me to <a href="http://www.amazon.com/Learning-Ruby-Michael-James-Fitzgerald/dp/0596529864/ref=sr_1_1?ie=UTF8&qid=1380932217&sr=8-1&keywords=learning+ruby">the first of many Ruby books</a> that I would read over the next year.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/29cee8dc-86ce-4689-a79e-68c656270ba6/9780133047233_p0_v1_s260x420_large.JPG" /></p>

<h3 id="3-ruby-on-rails">3. Ruby on Rails</h3>

<p>After two beginner Ruby books, I learned the basics of Ruby on Rails, a framework for building interactive/dynamic websites with Ruby. I read books like the Pragmatic Programmers Rails book and watched videos. I got a <a href="http://www.peepcode.com">Peepcode subscription</a> &amp; watched a handful of videos from <a href="http://www.railscasts.com">railscasts.com</a>.</p>

<p>I created several project sites, mostly just to learn. One tracked 3D blu-ray movies and video games with Amazon API data. Another was <a href="http://www.3dstxt.com" title="Nintendo 3DS Streetpass Social Site">a social site with user accounts, logins and more</a>.</p>

<p>Around this time, <a href="http://www.railstutorial.com">Michael Hartl&#39;s Rails Tutorial</a> first appeared. Rails and the process and tools that I was learning about from Peepcode (things like git, RSpec, Heroku, gems) suddenly became a lot more clear after plowing through Hartl&#39;s well-written guide.</p>

<p>I also started attending Ruby programmer meet-ups every week where internet-famous Ruby guys helped and advised new-comers like me. I would bring along whatever beginner project I was working on and if I got stuck, I had a place to get answers.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/573d7365-85eb-4ab3-99de-1a6f121783e3/119_large.jpg" /></p>

<h3 id="4-ios-false-start">4. iOS False Start</h3>

<p>After becoming comfortable with Rails, I purchased <a href="http://www.amazon.com/Beginning-iPhone-Development-Exploring-SDK/dp/1430216263/ref=sr_1_2?ie=UTF8&qid=1380932360&sr=8-2&keywords=beginning+iphone+development">my first iPhone programming book</a> and it scared the shit out of me. The concepts were mostly foreign and the examples were nearly impossible to comprehend. This was not going to be easy.</p>

<p>I checked online for some videos to start with instead. The <a href="https://itunes.apple.com/us/course/coding-together-developing/id593208016">Stanford CS 193p iTunes U course</a> seemed like the most popular. I watched the first six videos over a couple weeks and, in the end, I had learned exactly nothing. It was obvious that I needed to start with the prerequisites or everything would continue going right over my head.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/3602e58d-0f4f-45f8-bedb-a372920a9a36/9780321566157_large.jpg" /></p>

<h3 id="5-objective-c">5. Objective-C</h3>

<p>I picked up some basic Objective-C from this book: <a href="http://www.amazon.com/Programming-Objective-C-Edition-Developers-Library/dp/032188728X">Programming Objective-C</a>.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/e6865eec-0cbf-4381-8830-a5d78c87a04a/The_C_Programming_Language_cover_large.jpg" /></p>

<h3 id="6-then-i-learned-c">6. Then, I learned C.</h3>

<p>I felt like I wanted to work on something fun for my first iOS project after plowing through that Objective-C book. I bought a Cocos2D book. But there was a lot C stuff going on in that book and I wasn&#39;t understanding the code. That&#39;s when this book happened:<a href="http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628/ref=sr_1_1?ie=UTF8&qid=1380932608&sr=8-1&keywords=c+programming+language"> The C Programming Language</a></p>

<p>Also, that advice about not working on a game for your first iOS project? That&#39;s good advice that I should have followed sooner. After the C book, I gave up on making a game for my first app.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/a1f64b35-d27b-471f-b646-ac5b5a88caad/Screen%20Shot%202013-10-04%20at%2012.15.28%20AM_large.png" /></p>

<h3 id="7-xcode-ios-stanford">7. Xcode, iOS &amp; Stanford</h3>

<p>Now, I felt like I had enough of the basics to go back to the <a href="https://itunes.apple.com/us/course/coding-together-developing/id593208016">Stanford iTunes U Course</a>. Though it was still difficult, I was understanding much more of what was happening. The hardest things were not the Objective-C language, but the workflow, concepts like multithreading, callbacks, delegation, observers, and the tools. For me, the Stanford course was the key to the putting all the pieces together.</p>

<p>Nearly five years after picking up my first Ruby book, I was able to cobble together a very basic iOS application and the rest I learned as I went, adding features along the way.</p>

<p>I don&#39;t think I would have as firm a grasp on Objective-C if I didn&#39;t start with Ruby and Rails. Things like object oriented programming, MVC, and callbacks were much easier for me to understand in Ruby first. Then, I was able to apply what I already knew to Objective-C as I learned it.</p>

<p><img alt="Silvrback blog image" src="https://silvrback.s3.amazonaws.com/uploads/41f21f5c-e1b8-435c-a209-7bb5725eebd3/photo_large.png" /><br>
Giant pile of books.</p>

<h3 id="where-i-went-for-help">Where I went for help:</h3>

<p>The LA-based Ruby meet-up group I attended was fantastic. They were very welcoming to newcomers and really helped me to get past any stopping points where I felt I could go no further without more information. Once I knew enough to know exactly what questions to ask, the answers came much easier.</p>

<p>I&#39;m also a member of the Something Awful forums, so when I got stuck, I usually went to the Hardware/Software sub-forum for answers. In many cases, after I had finished typing my problem into the post form on Something Awful, I would suddenly understand what my actual problem was and how to solve it without actually submitting my question. This, I have come to find out, is known as <a href="http://www.rubberduckdebugging.com/">Rubber Duck Debugging</a>. <a href="http://www.stackoverflow.com">Stackoverflow</a> and <a href="http://www.nsscreencast.com">NSScreencast</a> were also an enormous help.</p>

<p>It can be discouraging if you don&#39;t have a formal education and don&#39;t necessarily know where to start or where to go for help. Hopefully, you&#39;ll just start doing and persistence will get you to your goal. If you spend enough time doing anything, you get decent at it.</p>

<p><a href="https://itunes.apple.com/us/app/launch-day/id711241887?mt=8" title="Launch Day for iPhone">If you like video games, get my app!</a></p>
]]></content:encoded>
      </item>
  </channel>
</rss>