Category Archives: Learning Resources

group learning to program

The Power of Group Learning to Code

I was in San Diego this week and a friend invited me to attend a San Diego Tech Immersion Group (SDTIG) meeting. It’s experienced computer programmers who want to learn new technical skills.  I was struck by the unique group learning to code environment being fostered by the group.

The group consists of 3 developer leaders/mentors and approximately 100 developer participants, who follow a new learning track every six months. The Fall 2012 track is focused on web development (HTML/HTML5, CSS, Javascript, JSON, and JQuery). Monthly, each member completes the same reading assignment from a book for the current technology and the topics are discussed in a more detail during monthly meetings.

Here are few amazing features of this group learning:

Learners Helping Learners

Members help each other overcome stumbling blocks while learning new technology. In addition to the monthly meetings, there is a forum for group discussion. Because each person is going through the same track, there’s great opportunity for collaborative learning, members jump in to help when they understand the material.

Expert Mentors as Guides

These mentors serve as an expert resource for the group. More than just subject-matter expertise, these mentors also plan the learning schedules, select the materials, and determine an appropriate learning pace.

Learning isn’t easy and creating a plan to learn a foreign subject is a challenge. These experts greatly reduce that burden.

Social Pressure = Accountability

This aspect was never directly mentioned during the meeting, but I couldn’t help notice it. There’s no financial cost to join the group, but by actively choosing to participate in a group environment, there is a social force at play. You don’t want to fall behind so you complete the reading and come prepared to discuss.

Conclusion

I’m always on the lookout for new and interesting resources for learning to code. The SDTIG was a new experience and not like anything I’ve come across locally (if you know of something similar in LA, let me know).

There are characteristics of a traditional classroom setting, but there is much more collaboration amongst the members. Also, members complete individual learning, but it is in a structured, expert-guided fashion. This mix and match of learning styles, guidance, and support are great for beginners learning to code.

featured image courtesy of UBC Library 

email mac

4 Factors Crucial for Choosing Your First Programming Language

In creating my plan to learn to code, I made the decision to learn Ruby. The first programming language is a very important decision and one that I didn’t take lightly. Below is the process I followed to make this decision.

First, a bit about web technologies (you can skip to the 4 factors if you’re familiar with web technologies click here). If you’re like me, someone without a technical background, you’ve been amazed by a first-hand experience with an amazing web application.

While that amazing web app is a cohesive product, it’s important to understand that there are several layers or tiers of functionality you’re experiencing simultaneously. Before you choose your area of study, consider how each of these areas apply to you.

Tiers of Web Functionality

  • Graphic Designer – This person creates the visual aesthetics of an app, including colors, logo, and layout. The graphic design determines the immediate impact felt by users and the mood conveyed by a site. Graphic design isn’t truly a web development tier, but I think it’s important to recognize because of its impact on users.
  • Web Designer – Using primarily HTML, CSS, and JavaScript, the web designer brings a web app to life and makes it interactive to the end user.
  • Web Applications Developer – This developer is concerned with the interaction between the client (web browser) and the application server.
  • Web Database Developer – In complement to applications developer, the web database developer ensures a smooth connection between the application server and the database.

Web Browser, App Server, and Database Diagram

Experts in each of these areas work collaboratively to execute a complete web application. In reality, most everyone learns skills across different tiers and it’s not practical to dedicate yourself to learning only one area in a vacuum separate of any others. But, you do need to select your primary area of expertise and that should the focus of your first programming language. This level of specificity will ensure you have a clear end goal and focus of study.

Once you’ve selected your tier of expertise, you need to select a specific language. Just like there are different spoken langues to express “Hello“, there are different tools and languages within your chosen area, each with pros and cons. I won’t start to name all the specific options, but instead show how you can evaluate these options and pick what programming language is right for you.

I selected the Web Applications Developer tier and then narrowed my language choices to python, PHP, and Ruby. Here is the process I used to evaluate different languages and decide where to start.

4 Factors for Learn to Code

#1 Executing a Prototype

You want to learn because you want to build something which serves a purpose. Your first development attempt will not bring you fame and fortune. But, you may build a prototype which either inspires someone else to work with you or to invest in your idea. How easily you can build this basic mode is a strong factor to consider.

Learning programming is a means to an end objective and getting outside support can expedite your process. Because Ruby has the Rails framework, I felt confident I’ll be able to get up a working prototype by the end of my 18 weeks.

#2 Learning Feedback

I’m part of the ADD generation. Our brains have been trained to expect immediate gratification. If you’re learning and there is large barrier to begin executing, it’s going to make the process more tedious. If you have the dedication, then more power to you. Be realistic about your expectations and commitment to your goal.

#3 Access to Mentorship

Don’t underestimate this factor. There are unlimited resources avaiable online and in books, but the talking with someone one-on-one is a huge help. Use meetup groups locally where you can meet web developers in your selected language. Developers were in you’re shoes once, and most are willing to help you. Even better, find mentor-specific opportunities to get involved with.

I was lucky to get connected with Tara Tiger Brown in Los Angeles and the Teach My Stuff program. Through this program, I’m working with Joe Goldberg, who’s Ruby expertise helped me plan my own learning program. We meet every two weeks and he’s available to answer questions when I need clarifying.

#4 Future Relevance

While not as important factor as the first three, it is still worth considering. Web development changes rapidly and you wouldn’t want to bank on what’s going to happen in the future. You should consider your future opportunities, both from a career standpoint and the type of projects you’ll be suited to work on.

For example, there are many people who have a passion for Latin and thus choose to learn what’s considered a “dead language”. But, your future opportunities if you learn a programming language that’s the equivalent of Latin will be diminished.

Conclusion

These are the factors which I considered when choosing Ruby. Do you agree or disagree with my reasoning? Are there factors that I didn’t include, which should be considered? Leave your thoughts and questions in the comments.

Update: Join the lobste.rs discussion here.

Sticky Notes Plan

3 Steps to Create The Ultimate Plan to Learn Code

There is an amazing wealth of information available to anyone wishing to learn code. This abundance of resources is both assuring and overwhelming. How do you sift through available resources and choose the course of learning best for you?

The nature of learning a new skill requires that you dive into foreign territory, which can be scary. But, it’s not uncharted territory; there are others who have been in your shoes before and succeeded.

For me, I visualize learning a skill as trying to cross from one side of a giant river to the other side. You’re currently on one side and you want to get to the other side. Standing, gazing across that great divide, you know there are lots of people who have tried to cross and have been unsuccessful. But, there also people who have crossed successfully, doing so using various methods available to you.

River Crossing

Photo courtesy of Chris Gladis

How do you, standing alone on the starting side, determine which path is right for you? Following these 3 steps will help.

#1 Evaluate All Options Against Your Resources

There are many options out there – too many to list. Quora is a great resource for any language you’re trying to learn. Here’s the Quora question and answer I used for as guide for Ruby. Because most resources will either be online or books available to order, create a bookmark folder for each language to save your list.

Also, your resources factor heavily into your decision as well. For me, spending years to get a CS degree, attending a developer bootcamp, or hiring a private tutor wasn’t an option because of time and cost reasons. Eliminate any options for which you don’t have the resources.

#2 Determine Your Learning Style and Match Resources

Once you’ve got a list of resources, it’s time to evaluate those options against your own learning style. Just because someone raved about a learning source doesn’t mean it’s right for you. Remember, there are many people who successfully crossed the river, but they didn’t all take the same journey. Find what works best for your brain.

#3 Don’t Be Afraid To Iterate

This last step is crucial, especially in learning web development. If you find a resource isn’t holding your attention or is incredibly too hard or too easy, don’t allocate your precious resources on it. Get rid of it and move on. This isn’t school, you’re not being graded on what you complete; instead, your accomplishment is all about what you learn.

One word of warning, don’t quit a resource because it’s challenging you; some of the best learning happens at this neural point.

My first week was scheduled to include Michael Hartl’s Ruby Tutorial. I even had a comment posted, which suggested this tutorial was a good place to start. However, I ultimately shifted course and focused my time on Rails for Zombies by Code School. I wanted to see the individual Rails pieces in action (MVC) before diving in heads first.

Learn Code Conclusion

Your time is the most precious resource you have when learning a new skill. Do what’s best for you and be able to adjust your plan as needed.

How do you create a plan for learning a new skill? Leave your thoughts and comments below.

 

Rails for Zombies Redux Code School

My Plan to Learn Code

We each have our own learning styles. Because I don’t have an engineering or computer science background, I’m hoping my that previous learning experiences will be applicable enough to this new undertaking to learn code.

Learning Styles

I learn by doing. I’ve previously tried to pick up programming books which were formatted like an academic textbook – an introductory chapter, followed by 10-15 chapters, each on a specific topic. I didn’t become engaged in the material.

With learning a foreign topic, I need to feel like I’m hitting the ground and running. Even if in reality I’m moving at a slow walk, I still need to feel the movement of progress underneath me.

Rails for Zombies Redux Code School

Therefore, tutorials and online lessons will be the bread and butter of my first three weeks. I especially enjoy interactive micro-lessons, where each step involves learning a new concept followed directly with user application. For Ruby, I’ll be using Code School (Rails for Zombies, Git Real). For HTML, CSS, JavaScrip, and jQuery, I really like Codecademy.

Project Based to Learn Code

I have 18 weeks and I know that I can’t simply spend the entire time following other’s tutorials or lessons. Starting with week 10, the halfway point in my process, I’ll start working on a web app project of my own. I imagine I would quickly become mentally fatigued without diving into a project of my own undertaking.

This important step, will serve as a transition between simple repetition and more critical thinking. Also, I’ve selected an app for which my interest will help to motivate and drive forward my learning. I’ll be writing more about the project (and looking for testers!) as the time approaches. The app functionality isn’t a secret, I just don’t want to get too far ahead of myself by discussing it at this point.

And don’t think that I have any irrational expectation that my first app will be a runaway success. My excitement is driven by the possibility of building something useful and interesting.

And if it happens to make a billion dollars, well, that’s just an added bonus. :)

Understanding personal learning style is a critical step in learning anything. Do you learn best by doing, listening, reading, or something else? How would you improve my plan? Leave your thoughts and comments below.