Tag Archives: Ruby

aha moment

Learning to Program and When to Start Building Your Own App?

After completing 8 weeks, I have hit a critical point in my learning to program journey – I’ve begun coding my first app. I feel a new excitement because this is what I’ve been working towards for almost 2 months now. But, how did I arrive at the point where I was comfortable enough to start programming my own app?

tl;drI didn’t feel comfortable. I felt nervous and unsure of my abilities. But, to make my learning process more targeted, I needed a project to direct what to learn next.

Where’s My ‘Aha’ Moment?

If we wait until we’re ready, we’ll be waiting for the rest of our lives. -Lemony Snicket < Tweet This>

Remember those standardized tests we took throughout elementary and middle school in which we proved our arithmetic and reading comprehension was sufficient to move us on to the next grade? There’s no equivalent competency test in computer programming (at least that I’m aware of). So what did I use to evaluate my own proficiency, in that I had acquired the necessary foundation to begin programming on my own?

Here’s the funny part – there was never a moment when I hit a particular milestone or understood “enough” technique that told me I was ready to begin building. Interestingly, it was more a specific moment at which I felt continuing the tutorials and intro lesson were no longer beneficial.

It occurred to me while reading about cookies and storing sessions in Action Controller in the Rails Guides. At that moment, it struck me; how can I understand the impact of cookies with no frame of reference? I realized I’d hit the point where I needed to build an application in order to guide what is relevant for me to learn.

Additionally, my mentor through this process assured me that I’d never get to a point where I felt perfectly comfortable building on my own. Part of learning to program adventure is diving into unknown territory.

Hitting Highs and Lows

tea cups dizzy

My brain starting to program. Photo courtesy of Andy Castro.

Starting on my first project was a rush. This euphoria was quickly followed by the realization of how lost I am. Staring at a blank project made my brain feel like it had been on the tea cups ride at DisneyLand.

But these mini-panic moments are actually helpful. Hitting a moment when I don’t know how to move the app forward, are actually learning opportunities (disguised as error messages) literally popping up on my screen.

With my foundation from 8 weeks of tutorials, I’ve built a simple app. Each step in the app’s functionality that I can’t execute sends me a quest for answers. Using StackOverflow, blogs, and Twitter, I’ve found help and overcome obstacles.

This is the essence of project-based learning. Rinse and repeat this break-learn-build process a few hundred times and I’ll have built a functional web app while learning Ruby.

At least, that’s the plan.

Update: Join the discussion thread on Lobste.rs

Featured image courtesy of Rishi Bandopadhay

Ruby Nuby Project

Rogues Ruby Nuby Project Video

The team at Ruby Rogues is putting together a show, Ruby Nuby Project, based on learning Ruby. They’ve requested Ruby noobs, like myself, to submit a video describing their experience. You can see my video and written response below. Here are the specifics of the request:

Have your Nuby record a 5 minute video talking about their experience learning Ruby. They should answer these questions:

  • Who are you?
  • What do you use Ruby for?
  • How have you gone about learning the language? What resources did you use? E.g. books, videos, blog posts, online courses, one-on-one tutoring, etc.
  • What has been the most difficult, surprising and/or delightful aspect of learning Ruby?
  • What do you appreciate most about the Ruby community?

Here is why I’m learning to program Ruby.

Who are you?

I’m an entrepreneur, digital marketer, and founder of the digital marketing agency Face The Buzz. I’m on a mission to learn to code. I’m dedicating myself full-time for 18 weeks to transform myself from a non-technical person into a beginning programmer. I’m 7 weeks into journey so far and having a blast.

What do you use Ruby for?

I don’t have an engineering or computer science background. I’m learning Ruby so I can use it to develop web apps. My background is in working with technology startups, but never as part of the technical team. My role has always been in marketing. I’ve been extremely fortunate to work with many great entrepreneurs. I want to be part of the early stage development and building of a product.

How have you gone about learning the language? What resources did you use? E.g. books, videos, blog posts, online courses, one-on-one tutoring, etc.

I learn by doing. Therefore, I’ve focused on online tutorials. I’ve used a few online courses, including Code School’s Rails for Zombies, Treehouse, Codecademy for HTML, CSS, and JavaScript. I’m also using a project based approach to learn to program and I’ve begun to work on a web app project of my own. This important step and I hope will help me transition between simple repetition into more critical thinking about programming.

What has been the most difficult, surprising and/or delightful aspect of learning Ruby?

Ruby and Rails have an amazing amount of functionality built into the language/framework. This feature is powerful, but can also be difficult and confusing for trying to understand exactly what’s going on inside an app.

What do you appreciate most about the Ruby community?

I appreciate how receptive and helpful the Ruby community is. Whether it’s sending out a tweet, using online communities, or a meetup, developers have been very friendly and happy to help – you just have to ask.

measuring

How I Measure My Progress to Learn to Code

Taking the plunge to go full-time to learn to code was exhilarating. I knew what I wanted to accomplish and began laying out a project plan.

I also knew it would be important to measure my progress along the way. I definitely didn’t want to simply throw up my hands after 18 weeks and shout “Ta-Da!”

Receiving this Tweet from @mdbenner prompted me to write out specifically how I’m measuring my progress.

Think About The End First

In order to track my progress, I had to have an end goal by which to gauge. I struggled with coming up with a specific, tangible achievement goal.

My initial thought was to base it on finding a short, contract job as a developer. My rationale was that if someone else believed in my abilities enough to hire me, then this was validation enough that I’d achieved a certain level of knowledge and understanding.

After much thought and consideration, I abandoned the “job goal” for two reasons. First, my decision to learn to code is not motivated by finding a job or improving my career opportunities. I’m going down this path because I want to be able to build and execute interesting products. Thus, making my success dependent on a job felt counterintuitive.

Second, I sought out input from talented developers and tech people that I admired. Several, especially Tara Brown and Buster Benson, helped me realize that if I made the job the end goal, then this outcome would influence me and my plan. It would be easy to make decision about languages, tools, and platforms based off an employment motivation; ultimately, I didn’t want unnecessary external influence finding it’s way into my plan.

At this point, I took a step back and realized I was making it too complicated. If my goal is to increase my technical skills to build a product, then it makes sense to create a product as the end goal.

If you’re inexperienced, create goals based on learning the code necessary to build a product. <Tweet This>

Obviously I couldn’t build a product from day one. So, I’ve divided the 18 weeks into two halves. In the first 9 weeks, my focus is on completing as many tutorials as possible, reading Ruby on Rails Guides, and getting familiar with developer basics, such as RubyGems, Bundler, Rake, and version control (Git). The second 9 weeks will be dedicated to a project-based learning style, where I’ll be learning by building.

Learn to Code Tracking Progress

I do track my progress and what I’ve completed. For one I want to keep myself honest and ensure I’m completing ample work each week. Second, I want to have a record of the work I’ve completed.

I use Pivotal Tracker to record each tutorial or lesson I complete. Using Agile development mentality, tutorials and lessons are logged as “stories“. I score each story as either 1,2,4, or 8 points based on difficulty and time required to complete. I also log my time for each story, in order to understand how long a story took to complete.

Note: I’m not Agile nor Pivotal Tracker expert; I simply adopted these systems in a manner to meet my own needs.

Pivotal Tracker

My hope is that I complete as much or more points each week. However, I’m mindful not focus too much on simply churning out stories each week. If a tutorial isn’t helpful, I’m not afraid to abandon it before completing it. These aren’t homework assignments; my focus is on learning. Therefore, I try to balance the importance of completing a steady pace of work each week, with ensuring that my time is dedicated to learning.

How do you track progress on your goals? Share your thoughts in the comments section.

Featured image courtesy of Louise Docker.

team work

Why It’s Important to Learn How Developers Work

The focus of my learning to code project has been on improving my understanding of Ruby and building an app with the help of Rails. Until, this week I hadn’t given much thought about how developers work, especially in a team environment.

That changed recently when I attended Carbon Five bimonthly Hack Night. Twice a month, this developer shop opens it doors to all and invites people in to work on their own personal projects.

logo carbonfive

It’s an informal setting, and I took the opportunity to work part way through Daniel Kehoe’s RailsApps Project. Two hours into the evening, Travis, a Carbon Five developer, and I struck up a conversation. We spent very little time talking specific code or functionality and instead discussed how developers work. As a recent convert from .NET to Ruby, he provided some great insight.

Travis and I discussed many aspects of developing in a team and here are 3 most important I came away with.

#1 Pair Programming

The concept that two people would stand together at one computer working simultaneously blew my mind. Upon hearing this idea, it immediately contradicted how I would imagine you best use developer resources.

But, Travis described to me several scenarios where he and another developer at the onset didn’t individually know how to accomplish the task at hand, but were able to harness pair programming to drive though a development sprint. Working as a duo, these two could accomplish more than either could working separately. This multiplicative effect in efficiency is an incredible result.

In addition to the project benefits, pair programming helps you learn new concepts and become familiar with the techniques and style of your coworkers.

Travis even offered to pair program with me when I feel ready. I can only begin to imagine the learning benefits to be gained of working side-by-side an experienced developer.

#2 Like-Minded, Not Like-Skilled Coworkers

I want to be a developer who is constantly learning new skills. This mentality seems particularly important with web development where the programming languages change rapidly. To learn from other developers requires finding others who have a different skill set.

But while the skills are different, it seems important to share similar philosophies for development practices. For instance, it would be difficult to learn from another developer if your attitudes on testing differ greatly. And I’m sure there other characteristics which are important to consider. I’m interested to pick up more insight around this thought process as I progress.

#3 Test Driven Development

The upfront investment in writing tests before coding pays off dividends in the long run. Specific to Ruby, I inquired Travis’ thoughts on Test::Unit vs. Rspec. He suggested I understand at least the basics of Test::Unit. I’m interested to get more feedback on learning testing.

As a new developer, I’ve heard the importance of testing. But, I’m not so much inspired to to learn testing as I a feel it’s an obligation of the trade. I want to learn it sufficiently to build web apps that don’t break. If that means I can use Rspec without diving into Test::Unit, I’m all for it.

How Developers Work Conclusion

As with any environment, there is not a “correct” way by which all developer teams should operate by. Being introduced to the concepts was extremely important and I’d recommend all new developers be introduced to it early in the learning cycle. Use Meetups focused specifically on programming (not networking events), or if that’s not an option, ask a more experienced developer directly if you can spend a few hours observing an informal work session.

Share your thoughts in the comments section.

featured image courtesy of elmastudio

 

progress

Learning to Code Progress – 3 Weeks Completed

I’m now three weeks or 1/6 into my learning to code process and my progress to date can be summed up in one word: slow

slow moving

Photo courtesy of Ian Britton

Alright that’s probably being a little harsh on myself. But, when I first started out this process, I thought I could be plugging away and building something after three weeks.

Instead, my time has been spent completing lessons and Ruby on Rails tutorials, but I’m not yet to the point where I feel I could begin building a project or web app on my own. That’s a frustrating current state because I have ideas that I want to execute.

Maintaining Perspective

I’m staying positive and my Teach Me Stuff mentor, Joe Goldberg, is very helpful in this area. Here’s a snippet of our reacent phone conversation discussing my progress:

Me: “I feel that I’m learning, but it’s going much slower than I imagined at the onset.”

Joe: “I’d be surprised if you told me any different.”

It’s incredible how reassuring it was for me to hear this simple phrase. Learning to code is foreign territory to me and I have no point of reference by which to judge my progress. On the other hand, Joe is experienced with Ruby and development. This support is a large benefit of having a web development mentor.

Adjustments Moving Forward

I’m not planning any major changes. However, one very important takeaway for me has been the idea that I need to focus more specifically on learning Rails, a framework for building with Ruby, than Ruby itself.  My focus for this 18 weeks needs to be moving to where I can build a product. As a result, my comprehension of Ruby will, understandably, not be as strong.

In the future, I may have to backtrack or dive further into Ruby because I’ve missed something in this first 18 weeks. That’s a short-term sacrifice that seems reasonable. I don’t want a preoccupation with learning every facet of Ruby to hinder my ability to create an app.

Leave your thoughts about my progress, focusing more a Rails, or any other thoughts in the comments below. Also, for those interested, here are the specific tutorials and lessons I’ve completed to date.

Completed