Why I turned down a $250k/yr programming job when I was 22

It was 2007 and Rails was only getting more popular. I had been working in the industry for a few years and was ready for a new job. Living in San Francisco and being young, I was enamored with startups. I spoke to a couple recruiters, found one I liked and let him do his thing.

I ended up interviewing with a startup I really liked – they were socially-minded, had an experienced CEO, and had a team that seemed to work well together. We did a few rounds of interviews, and then they sent me an offer letter: $250k/yr, 1% in stock options, full benefits.


I was 22 years old, a college dropout, and had just become "marketable" in the past couple years thanks to Rails. I was stunned by the offer. I had told the recruiter that that’s what I wanted, but I assumed that asking for that was as good as deleting his introduction letter. Guess not.

Still, I didn’t accept the offer right away. I called up a friend of mine and told him what was going on. He asked if I had any misgivings. I said, "Well, they want me to live within a mile of the office so I can get there quickly if they need me. And I was talking to one of the guys and he said the earliest people ever leave the office is 8:30 at night, and they’re usually there later."

My friend replied: "Sounds like it’s two full-time jobs then, each paying $125k/yr. Most people with that salary don’t feel a need to work a second job. I guess you need to decide if you want one well-paying job and a life, or two well-paying jobs and no life."

He really put things in context for me. I could have taken the job. Who knows what would have happened? Maybe I would have loved it, socked away some cash for a few years, and then cashed in on the stock options they offered me (I never followed the company so I don’t know what happened). There’s really no way for me to know. I bet my friend is right though, and I wouldn’t have had a life there at all. That would be a shame, given what a wonderful city San Francisco is. I probably would never have dated anyone. I probably would never have discovered my favorite restaurants and hangouts. I probably would not have gone swing dancing five nights a week. I probably wouldn’t have run naked through Golden Gate Park with tens of thousands of other people.

I still think back about that job from time to time. I’m glad I didn’t take it. I could have missed out, but I’m not sure I did. In the years since, I’ve learned a lot more about how some startup founders treat their employees. I’m pretty sure that that job wouldn’t have been "fun", other than getting paid an absurd amount of money. Nobody pays a 22 year old dropout a quarter million a year without attaching some serious strings to it. How long would I have lasted, working 80+ hours a week? 3 months? 6 months? a year? Of course, it’s impossible to say what would have happened. Given what I know now, I don’t think I would have lasted very long. I think I would have burned out, and certainly would not have sustained a career as long as I have. I’ve done some pretty cool stuff since then that I would not trade for a few years of good salary.

As you work in the industry, you may come across jobs that seem "to good to be true." Take a good, close look at how the companies operate. Do they they understand that the people who work there have lives, and that their work fits into their life in some way? Or do they dangle a high salary, stock options, and the promise of future riches in exchange for your "dedication" and "commitment" – and perhaps your happiness and sanity?

Join over 1300 programmers who are building the skills they need to get the jobs they want. You’ll receive code examples and one full lesson every week, absolutely free.

How Mob Programming Helps Achieve Group Flow

Last night I witnessed something magical, and it was the second time I saw it in a few weeks. I saw the Standard Librarians invite four new people into the mob, work them into their Mob Programming rotation with basically no explanation of what we’re doing, and then watched these people contribute. Some of them knew Ruby and Rails, some didn’t. Some knew vim, some didn’t. At the end of the night, we had a mini retrospective where we talked about the experience. The guy who didn’t know vim pointed out he felt like he slowed things down because he doesn’t know vim at all… I pointed out that he learned what he needed to in order to contribute to the group, right when he needed to know it.

The core idea of Flow is that you work on something challenging that you need to strive for. By having this constant challenge, you go into a state where you’re fully engaged with the work, and we call that Flow.

The problem with Flow is that it can be hard to get into and maintain. If your challenge is too hard, the motivation gives way to frustration. Frustration knocks you right out of flow and now you have to figure out how to get back into it.

I think there’s an even bigger problem, and it’s about the way we think of Flow. People tend to think "I’m in Flow" or "I’m not in Flow and I need to get into Flow". It’s an easy trap to fall into when you work alone – there’s simply not enough energy flowing to see the Flow that is always naturally there. Flow is not a binary thing – on or off – it always exists, and we’re either Flowing more or Flowing less. In a group, you can see this happen much more easily. With just a few people, you can trace how an idea flows through the team. One person can contribute a small idea, and someone else builds on it, and before long you have a powerful new idea that began with something laughably small. This can happen when you work alone, but in my experience it just doesn’t happen nearly as often as in a group. When you work alone, you are solely responsible for getting yourself into a high Flow state. When you work in a group, you simply need to contribute something now and then and let those contributions Flow through the group. The combined energy and contributions create a shared high Flow state.

There’s another reason that Mob Programming is so effective for Flow: it always puts you in that sweet spot of challenge, without getting to a point of frustration. When you sit in the driver’s seat, you become acutely aware of what you don’t know – the navigators tell you to do something, and you might have to ask how. You have time to figure it out on your own – that’s the striving for challenge part of flow. But if you can’t figure something out, you have the whole group to help you. You never get to a point of frustration, because your team helps you solve the problem that was too challenging for you in that moment. The result? You move on to another challenge, which again you either overcome on your own or with the help of your team. Either way, you are presented with a series of challenges which you contribute to as best you can – the very definition of flow.

I’ve seen this work, and it’s pretty amazing. I created RubySteps as a way to get more people to experience this effect. I truly believe it is the best way to learn to create useful software. You don’t need to know the ins and outs of a programming language – you need to know how to contribute to a group, which you’ve been doing your whole life, and which you can get better at. If you want to join a community of learners who work in a way that maximizes flow, sign up for RubySteps absolutely free.

Investing in our industry’s future with company-sponsored learning

There’s a growing problem with our industry: companies only want to hire senior engineers. The problem will compound over time as companies continue thinking that way…until we reach the inevitable end.

What’s wrong with only hiring senior programmers?

Only hiring senior programmers is hard

Senior programmers tend to have well-paying jobs with companies they like. You’ll have to woo them away – and it will cost you.

Only hiring senior programmers is expensive

Unless you have people banging down your door to work for you, you probably will have to hire a recruiter. Recruiters typically charge 10% of the first year’s salary if you hire someone. So if you hire someone through a recruiter at a salary of $100k/yr, you owe the recruiting firm $10k on top of that. That goes for every hire you make. That’s the financial cost – you also have the time cost of interviewing all the candidates the recruiter sends your way.

Only hiring senior programmers is exclusionary

It’s no secret that the software industry is dominated by white men of privelege. I don’t have the numbers to back it up, but my gut tells me that the talent pool gets whiter, more male, and more privileged as you move up the experience scale.

Only hiring senior programmers is unsustainable

If you only hire senior programmers, then junior programmers never get the opportunity to learn and grow into senior programmers. Eventually the senior programmers retire, or die, and the talent pool of senior programmers shrinks with nobody to replenish it.

"But Pat! Growing junior programmers is hard, and costs time and money, and we don’t know if we can sustain it. What do we do?"

I have an idea, based on responses I’ve been getting to RubySteps the past few days. Here’s an example email exchange:

Dear Pat,

I love what you’re doing with RubySteps! I’d love to join, but I’m afraid I can’t afford it because of (some reason). However, I propose that if you give me RubySteps for (free|discounted), then I will (some potentially valuable thing). Please let me know what you think!

Prospective RubySteps Member


Dear Prospective RubySteps Member,

Thank you for writing in! I totally understand where you’re coming from. I have a counter-proposal:

- Make a list of 5-10 companies that you want to work for
- Pitch them on sponsoring your membership, fully or partially

You can make an agreement to intern there, or work there, or whatever you come up with in exchange for their investment in your future – and theirs. You made a great pitch to me, so I know you could make a great pitch to a company you want to work at. I have no doubt that at least one of those companies will be delighted to connect with someone as creative and resourceful as you.


p.s. with your free subscription, you will still receive code examples each weekday and one full lesson each week!

Now, I actually think that’s a killer idea, but so far, ZERO people have replied to me about it. Hopefully they’re off writing their 5-10 companies so they can join RubySteps.

For the junior (or future) programmer

If you’re looking to level up your dev skills, then try my advice: make a list of companies you want to work for, show them your plan for learning and how you will be able to contribute to their business, and ask them if they will pay for your education.

For the business looking to hire programmers

Take a look around: not too many senior devs available, are there? And they don’t grow on trees. Where do they come from? Actually they don’t come from anywhere – senior programmers are just junior programmers with more training and experience. If you want to hire senior programmers, then take responsibility for it and find junior programmers, and train them up. YOU DON’T HAVE TO DO IT YOURSELF. There is so much excellent educational material out there, that you can grow a fledgling senior developer simply by supporting their education.

Company-sponsored education

Let’s go back to the recruiting scenario from before: you pay a $10k fee to hire a $100k/yr programmer. What can $10k buy in self-directed education? Here’s some stuff from a quick google search:

The total cost? $8,533 – leaving you with change for a nice little signing bonus and a celebratory dinner when they join.

There’s so much more stuff out there, too. I just grabbed a few that I knew of that had their pricing immediately available.

Given that you can pay for all that education for one person – and have a future senior developer that will probably love you – it seems downright stupid to me to pay recruiters for the privilege of sifting resumes for you. Also, have you ever wondered HOW recruiters sift resumes for you? If they knew anything about programming, wouldn’t they be programmers? I’m sure there are some technically-minded recruiters out there but I have yet to meet them, and I’ve been contacted by hundreds of recruiters.

Mob Learning – The RubySteps value proposition

You can pay for one person’s learning to grow a senior developer, but why stop there? What if you could grow a whole team of talented developers that work well together, with minimal financial cost to you and basically no time cost?

I’m making that possible with RubySteps’ Mob Learning component.

Via Mob Learning, RubySteps members will have the opportunity to learn how to build software the best way possible – by collaborating with others to build software. I’ll have more info to share later this week, but here’s how it could work for a company looking to grow new talent:

  • Sponsor five RubySteps memberships – $8940/yr
  • The five chosen people work through RubySteps for a year, mobbing with each other and lots of other people
  • You hire the ones you want (maybe all of them?)

In 12 months, you’d have a team of talented developers that already know how to collaborate with one another as well as other people. You’d have a team that is capable of solving its own problems, and learning what it needs in order to get the job done. You might end up with a team that performs as well as or better than the team you already have.

Don’t want to wait 12 months? I get it. I doubt it would take that long, frankly, but I don’t have the data for it yet. Look for my experience report to hit the web 12 months from now. Still, if you intend for your company to be around longer than a year, it makes sense to start investing in your future developers now. It will take 3-12 months before these junior programmers grow into talent that you want to hire, but if you keep doing this then you’ll have a steady stream of programmers to hire. Most of all, you will help make this industry increasingly vibrant as the years go on. We need that.

The next ten years

The next ten years will be very interesting for our industry. Will we take responsibility for the health and success of our community, invest in our own futures, and grow the talent we need? Or will we continue to lament the lack of senior developers, while doing nothing to address the core problem?

I believe that company-sponsored learning is not just a cool idea, it’s a critical idea. Companies have money to spend growing talent. $149/mo means less to a profitable company than it does to a single mom looking to learn to code. Do your company – and the industry, and motivated individuals – a huge favor and consider changing your thinking on how you hire. Consider growing senior developers instead of hiring them. Consider paying for education rather than for recruiting. Consider that there’s only way our industry will have the senior developers it needs to produce the world’s future technology – by starting with junior developers, educating them, and giving them opportunities to learn and grow.

Join the new wave of programmers that will shape the software industry over the coming decades. Get code examples and one free lesson every week, absolutely free.

Introducing Mob Learning to RubySteps

Many people have been asking if I’ll do group hangouts to walk through the RubySteps exercises. I love the idea, and so I’ve been hard at work figuring out how to do it in a way that respects your time and delivers you the most possible value. I think I’ve come up with the answer: Mob Programming.

I could tell you more about Mob Programming, but I think you’re better off hearing directly from its creator, Woody Zuill:

Being on a team isn’t about what you “get” from the team, but rather what you bring to the team. The idea is simple: Your place is to contribute however you best can, whenever you best can. For years, we’ve approached programming as an “individual” pursuit, with most of the work being done “solo”. However, a funny thing happens when you start becoming good at working with others: when done right, it multiplies your goodness. You get better at helping others, and at asking questions. And everyone is sharing in the experience, learning how to work well together.

You may have heard of “Pair Programming”, where two people (usually programmers, of course) work at the same computer, discussing the problem and solution as they work out the details and create some working software. Mob Programming is very similar – but with 3 to 5 or even more people helping each other understand the problem and invent the solution. There are too many benefits and details to be able to cover meaningfully here, but you can read more about it in our experience report (PDF), or at our website.

I am really excited about the experiences that Pat and the Rails Girls Summer of Code Standard Librarians have with had with Mob Programming. Most of the team came and shared a day with us (the “original” Mob Programming Team) and we all learned a lot and got a lot of work done. Amazingly, the first person to take the “drivers seat” and start translating our ideas into code was perhaps the least experienced of the Standard Librarians coders – and in a totally different coding language and environment than she was familiar with. Fantastic!

Even more, I am ['stoked', 'jazzed', 'pumped'].at_random to have Pat taking this “virtual”. While I have some experience with remote pair-programming, this is truly a big step to bringing widely distributed teams together. I look forward to hearing how you will bring your personal best to contribute and collaborate to make this a reality.

- Woody Zuill, originator of Mob Programming

In the coming weeks, I will introduce Mob Programming learning sessions covering the course content. The Mob Learning is included in your paid subscription, and is available ONLY to paid subscribers.

If you want exclusive access to the best learning environment possible, take a look at RubySteps – absolutely free – and then subscribe to the paid program for access to the Mob Learning.

Fucking passion

I had a talk with a mentor of mine today in which I dropped the f bomb a couple times. He didn’t say anything, but I paused and asked if he was offended when I used it. He said no, he’s not offended. He said I didn’t need to use it though, and that he doesn’t use it. If he stops talking to me, I’d know why. He would be offended if I called him a "fucking idiot."

I realized then that I’d never seen or heard him swear, and that once again he was just doing his thing and modeling a behavior he finds useful.

I thought about why I use "fuck" in my speech and writing, maybe because I’m caught up in something or maybe in an attempt to indicate how passionate I am.

In this case, I didn’t need to be aggressive to indicate my passion. He knows of the time and energy I’d already put into it. He knows of my intentions for the future. He knows of my decision to share all of that with him as we talked. He already saw and understood the passion in the story. I didn’t have to aggressively make him aware of it in that moment.

I’ve thought about passion and what people mean by it when they say you need it to be successful, or they’re looking for it from people they hire. I’ve seen people wonder what it means for them. If you don’t go home and code every day after your job, and on the weekends, are you not "passionate enough" for someone?

I think I’ve developed a helpful rubrik for trying to understand my own passions. I ask myself:

  1. Have I dedicated a part of my life to this?
  2. Do I have intentions for the future?
  3. Am I willing to share with others what I’ve done, what I’m doing, and what I intend to do?

It’s not perfect, but it helps me. Perhaps it will help you. Perhaps the next time you wonder if you meet someone else’s definition of passion, you can communicate to them what you’ve done and what you intend to do. It doesn’t matter what it is. You could be skipping rocks for all I care. If someone doesn’t see the passion in your story, they’re probably not the right people for you.

Over 900 passionate programmers around the world are taking the next steps in their learning and their careers. Join us, absolutely free.

“Young” programmers

I’ve caught myself saying "young programmers" a lot in conversations, when I really mean "newbie programmers" or "people new to this language." Considering how different people new to a language are from people brand new to programming, lumping them all under "young" just makes things really confusing.

I haven’t experienced agism from either side. At least, I haven’t felt it. I’ve talked to many people, younger than me and older than me, who have experienced agist discrimination against them.

I can’t really go in to that topic, because I don’t know anything about it. I do know of some really amazing programmers who are way older than me who have really amazing careers. And I know of some really amazing programmers who are way younger than me who have really amazing careers. What I’m getting at is, any person or organization that discriminates against you for any reason is – in addition to opening themselves up to lawsuits – weeding themselves out of your selection process.

Do you really want to work for jerks?

I know how frustrating it is to try to find a job when you’re just getting started programming, or you’ve been doing it a few years but don’t feel like your resume says much. 10 years ago I lived in Western Colorado – not exactly a tech mecca. I worked at a three-person printing company converting coldfusion shopping carts to PHP and writing glue scripts. I was grateful for the work, but I can’t say I was getting a kick out of it. At least the guy I worked for was cool and honest. One of them, anyway. His business partner, not so much.

Anyway, when you’re looking for a job and someone makes you feel like you’re too young or you’re too old, forget them. Seriously, just move on. Even if it happens 100 times. It sucks, but if you tell yourself that you can’t get a job because everyone’s looking for someone younger, or older, or more experienced, or for less pay, then you’re never going to find something that really makes you happy. You’re going to stick it out somewhere you don’t like, hoping you can find something that sucks less, or just sucks differently…

It sucks when you have to pay rent, but it sucks even more to spend months of your life at a subpar job just because you need to pay rent. It sucks up your time. It sucks up your energy. It sucks up your life.

You might not think the opportunities are there for you to find something amazing, but I have a simple solution for you: go to a Ruby conference. Anything with 200+ people will do (ask me if you want my recommendations). There you will come across people who are curious and successful and are progressing along all different stages of their careers. You will see people who have come from nothing, who have built amazing stuff, and who are excited about what they do. You will see this amazing energy, and this community of people who have created so much just by working together towards common purposes.

It won’t get you a job (although, it doesn’t hurt to get business cards). But it puts you THERE. It puts you in with the people who are living it every day, who want to meet new interesting exciting people. They want to bring you into their networks. You just have to go to them. They won’t come to you. They don’t know about you.

If you want to get a job in software, you can pay a code school $20k, learn what you need to and talk to a recruiter and go about your business. If you want to build a career that you love, that becomes more powerful as you grow, then you’re going to need to think about things differently. You’re going to need to accept responsibility for everything you do, starting right now, to make your career a success. You need to accept that the steps you take now will be some of the most important you ever take – they will shape your options and your beliefs from here on out. Make the right moves, and you can learn and continually expand your capabilities and value. Make the wrong moves, and you’ll get sucked in, chewed up, and spit out.

I don’t claim to know the right moves. I’ve made a lot of bonehead moves, but I still seem to be doing okay. If you can manage to do some of the things I and others have done right, and avoid the things we’ve done wrong, then I think you’ll do great.

I do know that if someone discriminates against you, you should tell them to fuck off and then call an attorney to deal with them. Life’s too short to waste time on assholes.

Join over 900 programmers around the world who are taking the next big steps in their careers, absolutely free.

Software development companies that I recommend hiring or working at

Software development companies that I recommend hiring or working at

People often ask if I can recommend companies to work on large software
projects. Just as often, people ask me if I can suggest companies they should
apply to work at. I’ve always listed a few solid recommendations, and then a
couple others that I think might be good based on people I know that work there
or have worked there.

I’m changing my policy as of today. I’m only going to give the solid
recommendations – the recommendations I can give based on my personal
experience. With that in mind, if you are looking to hire a company to work on
your software project, or you are looking for a place to bring your talents, I
suggest contacting:

The answer is the same for both questions – who to hire, and where to work -
because a place that does the best work is where the best people want to work -
and they do.

I have worked for a client of Pivotal Labs, and worked for Pivotal as a
contractor. They have perfected the art of constructing effective software. They
also have created a work environment that I think is just killer – smart and
friendly coworkers, a commitment to best practices, predictable SANE hours,
regular learning opportunities, and oh yeah the amazing breakfast every morning.

I’ve known the brains behind Thunderbolt Labs for several years. They take a
scientific approach to software development, and cut through way more bullshit
than you’re prepared to throw at them. As far as work environment, they work
mostly remotely and have the smartest people I’ve ever seen on one team. Working
for Thunderbolt got my fingers in two of the biggest software projects to happen
in 2013 in my opinion, in terms of visibility and coolness. Perhaps they’ll give
me permission to reveal the clients’ names… :)

The rest

I’m sure there are a lot of wonderful companies out there that will do a great
job of building your software, or be a great place for you to grow as a
developer. At this point, I can only honestly recommend places that I have
direct experience with – and I have lots of direct experience with Pivotal and
Thunderbolt Labs.

HOWEVER if you think your company should be on this list, we can absolutely make
it happen. All we need to do is arrange for me to spend 2+ days working with
your team in an ordinary work environment (other than the fact that there’s an
outside observer who’s apparently doing reviews on his blog?). You don’t pay me,
you just cover my travel and accomodations. If I choose not to recommend you, I
won’t ever say anything about my visit. If I do recommend you though, you will
join the list of what are – in my opinion at least – elite software development

If you want to build the skills you need to work at top software companies, check out my RubySteps learning program. You’ll receive daily code examples with explanations, and one interactive lesson each week that will help you become a better programmer, absolutely free.

How you can learn more by writing code than by reading it

When you’re learning to program, you’ll often hear the advice
"learn how to read code". The idea is that by reading code, you will see how other people do it and you will pick up on it, and learn new techniques and ideas. That’s like saying you can
improve your walking technique by watching other people run – and you haven’t
yet learned to walk! In linguistic terms, you don’t know how to ask where the
bathroom is, and you’re sitting down to read something that could be a technical
manual for hydraulic toilets or could be a guidebook to the most luxurious
bathrooms in France!

I know I sound ridiculous. I sound ridiculous for saying you can learn more by
ignoring everyone and focusing on your own programs. What if you don’t know how
to program? If you’ve ever done a hello world tutorial, you can program. You
won’t be able to do as much as you want, and you won’t be able to do as much as
other people, but you will still be able to write an endless number of
programs. Most importantly, you will be in a position to learn more by asking
questions, reading lots of documentation, and yes – learning from other people’s

Here’s my 1-step guide to becoming an expert programmer:


If that doesn’t work for you, try again. And again, and again, until it works. I
promise you it works. It’s what I’ve done to develop my career over the past ten

You’re probably wondering why you should write so many programs, instead of
reading other people’s code. Writing code is the best way for you to develop
your sense of coding style. You will express ideas, and you will experiment. You
will feel things as you write code and read it over, and you will incorporate
those feelings into your regular work as a programmer.

This goes double if you’re just getting started. You don’t want to try to
understand someone else’s style before you’ve started to understand your
own. There will come a time when it makes sense to read someone else’s code, and
where doing so will challenge your coding sensibilities. I do not think that
time comes until you’ve written at least 100 programs, and I do not think that
time comes regularly for more experienced programmers. You will spend plenty of
time reading other people’s code as part of your work – it will quickly become a
part of your daily practice.

If I can go into old geezer mode for a moment (hey, I just turned 29 the other
day)… I really wish I knew about version control systems when I was first
learning to program. I remember some cool programs I wrote – poker simulators,
my first web application, "love programs" I wrote for valentines (not as
romantic as I’d hoped). I don’t have the source code for them anymore, and I’d
love to have them. They’re like old records, I guess. Anyway, if you’re reading
this, then I’m sure you can find access to free version control hosting. I
highly suggest keeping copies of your programs in version control. You will
build up good habits, practice skills that are critical to your success as a
professional programmer, and have a logbook of everything you’ve done. This can
be very motivating, and it will definitely be valuable when it comes to
remembering something you’ve done. It’s also a great starting point for a

Reading is the secret to your success

When I was a kid, my favorite tv show was reading rainbow. It still blows my
mind that they had a tv show about books and reading. It blows my mind even more
that Levar Burton just raised the most money in kickstarter history to bring it
back and put it in more homes and classrooms than ever before.

Anyway, my point is that reading is not only important, it’s also amazing and
will make your life better. If you read anything right now, make it the error
messages. Make it anything on the console. Read every last little piece of
information that the computer feeds back to you as you use it, because that is
the most relevant and useful information you will ever get. Read the
documentation for the software you use – the majority of software out there has
no documentation, or out-of-date documentation, so if you do come across a
project with comprehensive, useful documentation, you have struck upon a gold
mine. Too many newbies ignore the documentation, and don’t read command line
output because they don’t understand it. Newsflash: the only way you’ll learn to
understand it is by reading it and figuring it out. I use google all the time,
but I still have to figure out what it is I’m looking for.

Once you have a habit of writing code, and reading computer interactions and
documentation, you should incorporate reading other people’s code. Expand as
much as you can and read as much code as you can. See what’s available and
incorporate what you learn into your work. But don’t do that until you’ve
developed a coding style. Don’t do it until you’ve developed a coding lifestyle.

If you want to develop a coding lifestyle, my RubySteps learning program will help you build a daily practice for programming success. You’ll receive daily code examples with explanations, and one interactive lesson each week that will help you become a better programmer, absolutely free.

Why learning your second programming language can be harder than the first

Learning a new programming language is never easy. You have to learn new syntax,
tools, and libraries. You make use of what you already know in order to
understand new things, but sometimes what you know can make it harder to
understand a new concept.

I’ve noticed that this applies especially to people who are learning their
second programming language. Becoming a programmer already warps your brain
enough – when you discover that what you’ve learned is just one of many
different ways to think about solving programming problems, it can be tough to
handle. I have seen professional programmers of ten years baffled by things like
blocks in Ruby. Now I’ll be the first to claim fault with my teaching, but
I’ve used those same teaching methods with people who have never studied
programming and they’ve been able to get it. I am certain it is not that the
professional programmers are bad at what they do, but that their thinking is so
ingrained that they literally can’t accept the idea when I show them something
radically different from what they already know.

Whether you’re learning your second language or your twentieth, here’s what I
suggest: as you work, and as you go through documentation and educational
materials, make a list of EVERYTHING. Every function, every library, every tool,
every concept. Build up that list for the first week or two, don’t do anything
with it. Then go through the list, and map everything on it to things you
already know. What do you know about how strings work? What do you know about
order of operations? Networking? Exception Handling? Now you have a list of
things that the language has that you’re familiar with. It also represents a
starting off point for investigating further – you’ve identified similarities
with this language and other languages you know, but now you need to learn how
it differs. You don’t want your knowledge of another language to incorrectly
prejudice your understanding of the new one.

Additionally, you’ll have a list of things that don’t map up to anything you
know. This represents even more learning opportunities, ones you may struggle
with. Keep your head up – it’s okay if it’s hard. It is a brand new part
of your mental universe, after all!

If you’re struggling to make the leap into the Ruby programming world, my RubySteps daily learning program can help you. You’ll receive daily code examples with explanations, and one interactive lesson each week that will help you become a better programmer, absolutely free.