Category Archives: Learning Resources

How Codecademy Will Make Money

Codecademy is a service that lets people take free online coding classes, and has received $12.5M in institutional capital. It’s an awesome idea, but how will it make money if it’s billed as free (emphasis added)?

Learn to code interactively, for free.
codecademy

I became fascinated with code later in life than your typical self-taught developer. Part of my journey included using CodeYear and Codecademy to kick off my programming.
Continue reading

learning

My Most Helpful Materials in Learning to Program

The number one question I receive about learning to program is which tools have been most helpful to me. It’s an interesting and delicate question for me to answer, because usually the person is hoping to recreate my experience.

I intentionally made the title of this post in reference to my personal materials, as opposed to a generic “Best Tools for Learning to Program”. While, the marketer in my brain wanted to use this broader appealing title to attract a larger audience, it wouldn’t have been has beneficial to you.

Learning styles vary and what works for me, won’t necessarily work for the next.

In this regard, I’ve been careful to write about how to start the process learning to code and important factors to considered in your own personal choices. If you’re just starting out, see these articles for information about getting started:

Once you’ve thought about your best approach, you’ll begin to think about learning tools to help your process and your chosen language. My personal learning approach is entirely focused on building web applications. I’m not trying to be a scholar of Ruby. As a result, I having working knowledge of Ruby, but not necessarily a strong grasp of the language at this point.

Instead, I’ve used the Rails framework to build my application and then only learn aspects of Ruby specifically required to build the next feature. I didn’t start out my learning to program process with this mentality.

When I started, I read a lot online from more experienced developers ranting about newbies only using Rails and not understanding Ruby. Well, that was not going to happen with me. I wasn’t going to be one of those uniformed developers. So I mistakenly made it my goal to learn Ruby from the very start.

I went though material on Ruby basics and covered Procs, Lambdas, Modules, etc. And it gave me a much stronger understanding of Ruby, right? Wrong. I didn’t absorb the Ruby material because I had no context in which to frame it.

Fortunately, I’ve taken an agile approach in learning to program. I quickly dropped the Ruby material and only focused on building an app, knowing that I may need to supplement my understanding of Ruby at a later time. These are the materials that helped me do that:

Best Rails Learning Material

Front-end (HTML, CSS, JavaScript)

  • Codecademy for basic HTML and CSS
  • “Build a Simply RoR App” on Treehouse presents JavaScript and jQuery inside an actual app.

These materials have been most helpful during my first 6 weeks where I focused on tutorials, reading, and creating a baseline level of knowledge to begin building my app. In a future post, I share my materials which have been most helpful for building my first Ruby on Rails app.

Featured image courtesy of Wesley Fryer

bridge support

Learning to Program Supporters

“It Takes A Village to Raise a Programmer” – I just made that up for this post.

So yes I did fabricate this quote for my own purposes. But it seems to fit my situation well, as I truly have been the benefactor of tremendous support and efforts of many. And as those of us in the US settle into our annual time of thanks, I feel incredibly grateful to everyone who has shown me support.

Heading down this path to learn to program required a strong leap of faith, and I don’t regret it for one second. That’s not to say it’s been all positive; in between learning and building, there have been times of stress and frustration.

But the support of everyone from family to complete strangers has been overwhelming. It’s great to know there are people pulling for my success.

Tweet of Support

I’ve placed the following tweet on this site from the beginning. An amazing number of people, many strangers, have sent this tweet out to support me.

“I support @andrewkkirk on his journey to go from total noob to programmer in 18 weeks.” < Tweet This Message >

I send a big thank you to all of you that have taken time to support in one way or another. Theses gestures mean more to me than you could imagine.

The Importance of Sharing

Once I made the commitment to learning to program fulltime, I knew it would also be important to write throughout my entire process. My hope is that others will benefit through documenting my experiences, and even avoid certain pitfalls by avoiding my mistakes.

An additional result, which I didn’t anticipate, is that I’ve reconnected with people who find out about my project from social media. For example, I recently received this note from a high school soccer coach I hadn’t spoke to in several years.

I just read most of your blogs on your page about learning to program. I wanted to let you know I am proud of you for taking this leap. Good luck and I know you have the determination and commitment to get it done. I look forward to hearing about your progress. Take care.

Isn’t the internet incredible? Of course, if I hadn’t written about my process and widely shared it, I wouldn’t have had this benefit.

“On-Call” Support Team

Finally, I’ve add several people take time out of their busy schedules to support me by meeting up to pair program with me, discussing code on skype, and answering questions when I inevitably break something. These folks have gone above and beyond, all in the name of helping a fellow developer.

Remember to be thankful not just for those family and friends close to you, but also to those people that make a subtle impact on us. Without their support, I wouldn’t have made it this far. Thank You!

help wanted

3 Tips for Asking for Help Learning to Program

Learning to program is not easy, especially in my case coming from a non-technical, non-engineering background. The biggest boost to my entire process has been finding help directly from other people. In the age of the internet, you might think that all answers are already available online and we could simply cut out the human-to-human interaction.

Wrong!

If you’re looking for answers to simple questions or to very specific error messages, then a simple web search will be your best bet. But, in my experience, the ability to speak and work directly through difficult problems with another person, is the area where the greatest learning takes place.

The most difficult aspect is finding and seeking out the help. People won’t randomly stop by your blog or Facebook page, to ask if you have questions. You have to take a very proactive approach to learning from others. This step can be intimidating for many people. When you’re in the position of having less knowledge and asking for a favor for someone with greater knowledge, it can be scary.

There’s no need to be scared. Here’s the biggest lesson I’ve learned throughout this entire project:

When learning to program, most developers are happy to help – you just have to ask. < Tweet This>

With that mentality in mind, here are three tips to find the right people to ask and get help learning to program.

#1 Send a Tweet Asking for Help

Tweet to a specific person and not just out into the entire twittersphere. This method is great for people who’ve created online teaching tools. Twitter is a public forum and your question will bring exposure to their project. For example, I was working on the ‘Rails Deep Dive‘ from RubySource, and had questions so I went directly to the owner Glen Goodrich.

 

He responded directly to my question and created a gist on GithHub with a detailed explanation to my questions. Unprompted, he sent a message directly to Daniel Kehoe informing him about my self-guided learning to program project. Daniel reached out to me directly to let me know about his RailsApps Project, which is geared towards getting a new Rails project up and running very quickly. Daniel’s built an incredible resource for developers, and he’s also been extremely responsive and helpful to me. Keep in mind this entire chain of events with Glen and Daniel was kicked off by me sending a Tweet to a complete stranger. Isn’t the internet incredible?

#2 Find Online Communities

For specific technical questions, StackOverflow or IRC channels will likely be more helpful. However, to find help for the purpose of learning, you need to find individuals who’ll take a more personal interest in your progress. The best method to accomplish this scenario is to look for online communities specific to your language, where people develop relationships and look out for one another. Use Google Groups are online communities with a very specific focus. Search and you’ll find people talking about your language, answer questions, and providing guidance. Find Helper Hotlines I was overjoyed when I first discovered the Rails Hotline. The concept is that more experienced Ruby on Rails developers hold tutoring hours online, where students can call them directly. Unfortunately, my experience has been a miss to date. I’ve tried calling twice without a response.


But, that recent Tweet gives me hope that I’ll have better luck the next time I try. It is a free service, with donations excepted, so my expectations are tempered at this moment.

#3 Find Local Developers

Use meetup.com to find groups dedicated to the language you’re learning. There will be free meetings and you’ll learn from experts. But, the meetings can happen in several different formats, all of which can be helpful to meeting developers.

Social Gatherings

While you won’t be opening up your laptop to learn, social gatherings are a great place to meet lots of developers and find interesting projects that others are working on. The more developers you know the better. They may help you learn, introduce you to other developers, and perhaps help you get a job one day.

In Souther California, LA Tech Happy Hour and 106 Miles – Southern California are a good Social Gathering meetup.

Tech Presentations

Presentations by other developers are a great way to learn, especially about new technologies or techniques. For total newbies, they are probably too advanced, but you can still meet people. The networking time will be limited as compared to Social Gatherings.

In LA, LA Ruby on Rails Monthly Meetup is a great monthly Ruby Tech Presentations meetup.

Hack Nights

These are my favorite meetups, especially for learning. The basic concept is that everyone gets together to work individually on projects. These meetings are great for finding more advance developers to sit down with you in front of your project and work in tandem. Your brain will be stimulated during these sessions in ways you couldn’t have imagined.

In LA, Carbon Five Hack Nights has been amazing!

Regardless of the meetup type, you should always have genuine interesting in meeting and talking to developers. It will help you grow your network and you’ll likely find people willing to help. Do NOT go to meetings and start conversations by telling people you’re looking for a developer coach or tutor. You’ll appear insincere and will quickly scare away anyone from helping you.

Instead, show an interesting in getting to know the group members. Better yet, prior to your first meeting, contact the group organizer. Explain to him/her that you’re new, excited to get involved, and offer to help. By taking an interest the in the group, others will take an interest in you and your projects.

Help Learning to Program Conclusion

Help is available in many different forms. Never be afraid or embarrassed to ask for assistance. Most developers love to help for two reasons. First, people love appearing knowledgeable and sharing knowledge with others is an ego boost. Second, at some point in time, the developer was in the exact same shoes as you and can commiserate with the process you’re going through. This sense of shared experience instantly creates a bond between you, the learner, and the experienced developer.

Featured Image courtesy of K Nicoll

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