Category Archives: Programming

[Published in Women 2.0] The Rising Femme Elite of Tech: How My Classmates and I Became Software Developers in 10 Weeks

By | Learning, Programming | No Comments

My article was published on the Women 2.0 blog last week, here.

Learn about the 6 uncommon things the women at Dev Bootcamp learned in the process of going from no formal programming experience to finding jobs as software developers at top companies in 10 weeks.

It has been almost three months since the end of my software development training at Dev Bootcamp, where my fellow students and I spent 15+ hours daily over a 10-week period to learn to build fully functioning prototypes of web applications like Twitter, Basecamp, Airbnb and Yelp.

All 10 female students have already landed their first jobs as software developers, with salaries to the tune of $75k-95k per year.

It’s impressive, given that students began with no prior formal experience in software development, save for a few exceptions. The typical student previously worked in a non-technical roles, learned programming during off-hours or on the job as a minor part of their role, then transitioned to learning programming full time at Dev Bootcamp.

For example, Amy Lai formerly worked at a large pharmaceutical company as a chemist, and started learning programming through MIT’s online Intro to Computer Science course.

“I tried it and I liked it. At first, I found out about Hungry Academy [the now-defunkt coding apprenticeship program hosted by LivingSocial in early 2012]. But it was past the application due date so I looked around and found out about Dev Bootcamp, and applied.”

Sarah Sorelle was a marketing consultant when she was first exposed to programming – “I was creating email newsletter campaigns with HTML and CSS. I used code from other people’s examples to put [emails] together. I started to fiddle around with it, and thought it was really fun.”

Still, her career could have taken a turn in a completely different direction.

“I was in this interview for a high dollar job, at a huge company. They were about to offer me the position, and I thought if I took that job…my life was over,” she said. It was at that point she realized she wanted to commit to becoming a software developer.

Within two months of the end of Dev Bootcamp, almost everyone had job offers, sometimes with the opportunity to consider multiple companies.

How we became software developers in 10 weeks – here are 6 tips!

1. Establish a Routine to Balance “Pair-Programming” and Solo Work

For a large part of learning at Dev Bootcamp, students worked in pairs, mirroring one of the best-practices that form the bread-and-butter of top software consulting companies that serve clients like Twitter and Groupon.

To Daniela Grossmann, a software engineer at ProofPoint, the most helpful learning strategy was “pairing” with other students because “I really had to think things through carefully before I say them to my [pairing partner].”

As a former middle school teacher, she noticed “it was helpful to be able to teach other students”. She also “loved pairing with [one of the instructors]. I would sit back, watch him, and try to mime him later, on my own”.

Because students were encouraged to pair for most of Dev Bootcamp, Daniela realized the need to take time out for herself, subsequently established a routine of pairing on the weekdays during Dev Bootcamp hours and working by herself on the weekends.

By proactively reaching out to her mentor during Dev Bootcamp, she was able to get the help she needed: “When I was pairing with other students, I felt like I was learning about small parts [of an application]. When I was stuck, [my mentor] would give me help and [let me] see the whole picture.”

Julie Mao, a software engineer at Sandbox Industries, echoes the sentiment on pairing, albeit from a different perspective. As one of the few students with traditional university computer science training and professional programming experience, she found pairing to be immensely helpful in the context of having programmed solo for most of her career.

“Even though I’ve spent a lot of my career programming solo, I find that pair programming is very rewarding [because] you can always learn something from your pair. You learn tremendously in the process of communicating your thought process out loud,” Julie said.

2. Create Your Own Optimized Learning Process

When asked about her strategy for learning a new skill during Dev Bootcamp, one student was particularly thoughtful about the learning process. She explains the importance of understanding the type of skill to be learned, then applying tactics accordingly – “It depends on the type of problem. If it’s a logic or design problem, I like talking through it with other people, or writing it out. If it’s a new framework, I like to familiarize myself with the tools I’m using, and research how the tool is used by people who know what to do with it.”

However, she recognizes there are also tactics that can be generally helpful in learning anything.

“I learn best watching people who are really good at it do it. I’m most empowered to learn when I have best practices to follow and when I can be exposed to more than just process, but also style [of] how someone does something,” she said.

This deep understanding of her own learning process influenced her work, in particular, when she took time outside of Dev Bootcamp to author a free tool for Ruby developers to incorporate foreign language translations in their applications. It has been downloaded 200+ times since its release three months ago. That subsequently laid the foundation for her acceptance into apprentice.io, an apprenticeship program hosted by thoughtbot, a leading Ruby on Rails software consultancy in San Francisco and Boston.

3. Build Passion Projects on the Side

Kyrie Kopczynski, an apprentice at CloudCity Development, a software consultancy in San Francisco, learned best when she was “generating new apps and seeing what [she] could do with it”.

Instead of thinking about programming as individual exercises in isolation that teach a single concept, “it really helps if I’m making [a real application]…I do better when I’m free to think about what I want [the app] to do.”

Fortunately, Dev Bootcamp provided such freedom in the context of group projects, with the open-ended goal of creating applications that would meet a basic set of specifications. For example, students were tasked to create an application that would notify users by email the results of any Craigslist search. While certain features were required, like the ability for the application to send emails, the implementation of such features was left to students to figure out.

When there were no group projects, Kyrie would satiate her learning needs with self-directed side projects, explaining “I learn best having a problem I want to solve and looking up Stackoverflow…and hit a lot of of roadblocks and push through by doing as much as I can, with the resources that are available.”

4. Proactively Reach Out to Others for Help

Formerly from Hawaii and now software intern at ThredUp, a startup in San Francisco, a Dev Bootcamp graduate recounts her experience trying to learn programming before Dev Bootcamp: “I was by myself, on an island. It was very frustrating to get help.”

She realized that “the Ruby community is very small, so “[she] could use Facebook or email groups to have a network to reach out to when you need help learning something new.” She has been attending every local Ruby on Rails meetup she could as soon as the full-time demands of Dev Bootcamp ended.

Looking back, she wishes she could have “moved to San Francisco earlier and plugged into the social tech scene earlier”, because “it was twice as fast to talk to someone” than to solve problems alone.

Therefore, she concludes that the “biggest benefit of Dev Bootcamp was the people, by far. Everyone’s learning and [that] makes it easier to learn, push yourself, [and provide] positive pressure. Whenever you got stuck, you would ask your friends.”

5. Solidify Learning by Giving Back to the Community

Kari Weiler, a developer at GoBalto, an award-winning clinical trials startup, had attended Railsbridge – an introductory programming workshop series for women – as part of her earlier exposures to programming with the Ruby on Rails framework.

She enjoyed it so much that, once she learned enough about Rails development at Dev Bootcamp, she has returned twice as a volunteer to teach the very same things that were impressed upon her merely months prior, saying “It helps me retain information that I learn when I have to explain it to someone else. And it’s nice to be helping others learn.”

6. Know Your Worth and Negotiate Salary

Of the women who negotiated their salaries, the result was varied, but fruitful: up to a 60% increase in salary. It’s important to be persistent in negotiations, even when unsuccessful at first. One student tried to negotiate on two job offers she received. This did not result in higher salary, but “the main upside, in my view, was gaining salary negotiation experience.”

Recommended Resources for Finding Mentorship and Learning

Events in the San Francisco Bay Area:

  • San Francisco Ruby on Rails Meetup
  • Silicon Valley Ruby on Rails Meetup
  • SuperHappyDevHouse

Workshops for Beginners:

  • Railsbridge
  • CodeEd
  • GirlDevelopIT

Top Books for Beginners:

  • Head First HTML and CSS, by Elisabeth Robson and Eric Freeman
  • Learn to Program, by Chris Pine
  • Learn Web Development with Ruby on Rails, by Michael Hartl

Tutorials for Readers:

  • CodeYear

Tutorials for Video/Visual Learners:

  • Treehouse
  • CodeSchool

Branching out from its San Franciscan roots, Dev Bootcamp will launch Chicago-based cohorts starting April 22. Although the first class consists of only two women out of 18 students, the goal is to reach a 1:1 gender ratio with at least one cohort this year.

Dev Bootcamp Chicago plans to achieve this through a scholarship program for women and minorities, and progress is promising. Recently, they managed to attract a 60% female attendance rate at their “Day of Dev Bootcamp” workshop, wherein 18 women attended the 30-person event.

Dev Bootcamp cohorts in both San Francisco and Chicago locations are booking up quickly, we hope, with many women.

Photo Credit: Dev Bootcamp

Getting Started: Setting Up a New Development Environment on Mac for Ruby on Rails

By | Programming | No Comments

FFFFFFfffff!!!!

I had dropped the F-bomb way too many times in my head that I was afraid my fellow cafe patrons would start hearing the words forming on my pursed lips and sensing the tenseness in my hands. It seemed that nothing in my Terminal program was working for the last 5 hours, and, given that I was practicing basic coding exercises that would have been no problem on a properly configured computer, I just about had it.

I decided to start from scratch and do a clean install of Mountain Lion OSX on my Macbook Air laptop, as it had come installed with Lion OSX, which resulted in countless compatibility issues when I had initially tried setting up my development environment  during Dev Bootcamp. I ended up primarily using the computers at the Dev Bootcamp office and neglecting my laptop until recently.

Building a development environment from a clean install allows one to:

  • save time: on troubleshooting and filling system dependencies
  • set and forget: by customizing every setting from the start
  • save emotional energy: on work that lays ahead, when you really need it and cannot avoid it

I looked at install scripts from two of the leading Ruby on Rails software consulting firms:

  • SoloWizard by Pivotal Labs
  • Laptop by Thoughtbot

After evaluating the installation options for both, I decided to go with Thoughtbot’s Laptop script. There are about 1/10th of the options as SoloWizard, which reduces “analysis paralysis” and can get a developer up and running as quickly as possible with little more than the minimum requirements. After all, one can always install other tools on an as-needed basis.

Tools Included in Laptop:

  • Ack for finding things in files
  • Bundler gem for managing Ruby libraries
  • Foreman gem for serving Rails apps locally
  • Heroku Toolbelt for interacting with the Heroku API
  • Heroku Config plugin for local ENV variables
  • Homebrew for managing operating system libraries
  • ImageMagick for cropping and resizing images
  • Postgres for storing relational data
  • Postgres gem for talking to Postgres from Ruby
  • Qt for headless JavaScript testing via Capybara Webkit
  • Watch for periodically executing a program and displaying the output
  • Rails gem for writing web applications
  • Redis for storing key-value data
  • Ruby stable for writing general-purpose code
  • RVM for managing versions of the Ruby programming language
  • SSH public key for authenticating with Github and Heroku
  • Tmux for saving project state and switching between projects

Of the 17 tools above, I have used all except these: Ack, Foreman, Qt, Watch, Redis, and Tmux.

In addition, I installed these using Solowizard:

  • Git – a very popular source code management system that allows multiple users to perform revisions simultaneously
  • Github for Mac – GUI for github, it’s easy to see changes in source code, make commits, checkout branches, in a visually pleasing way.
  • Sublime_Text – free text editor that has snazzier colors (in my opinion) than Textmate, the other commonly used editor, and a less threatening popup prompts-to-pay for the service. Some people also like Vim, but I haven’t used it myself. The interface that allows for all-keyboard file manipulation on Vim can be intimidating to beginners. That said, I’m open to considering it if it demonstrates measurable increases in productivity.
  • Dropbox – automatically saves files on my computer that live in the provided Dropbox folder, the contents of which can then be accessed from anywhere online, and vice versa
  • Chrome and Firefox – In addition to the already-installed Safari, I installed both these commonly used browsers for testing browser compatibility. Personally, I like using Chrome because it saves browsing history when the user is logged into their Gmail account, so you have all your autocomplete searches saved when switching computers.
  • Flycut – a Mac clipboard tool that remembers everything you copy for future pasting, a lifesaver. It was inspired by Jumpcut, which is also available for download, but is more frequently maintained/updated.
  • Skype – for remote communication with project collaborators
  • gem no rdoc no ri – install gem package without rdoc/ri (saves time in install process)

Anyway, there are many ways and many things to set up in a development environment, but here is what I found to be the simplest so far.

How to Setup Your Mac for Ruby on Rails Development

Total Time: 30-60 minutes

Steps:

  1. Install XCode and Command Line Tools [10-15 min] Install XCode. Once XCode is installed, install “Command Line Tools” in XCode in “Preferences”, under the “Downloads” tab.
  2. Open Terminal and set zsh as your login shell.

    chsh -s /bin/zsh

  3. Run the script to install the Laptop package. [25-30min]

    zsh <(curl -s https://raw.github.com/thoughtbot/laptop/master/mac)

    It may help to make your mac show hidden files, so you can see where everything is being installed after you press enter you will be directed to the github SSH keys page.

  4. Run the script to install the other applications as listed above. [10-15min]

    bash < <(curl -s http://www.solowizard.com/soloist_scripts/u4ufbj.sh )

    Or, customize your script using SoloWizard, then run it in Terminal.

Now, you will have a basic development environment setup to start creating and deploying applications.

Sources:
http://www.solowizard.com/
https://github.com/pivotal/pivotal_workstation#ok-im-ready-to-dive-in-how-should-i-use-this
https://github.com/thoughtbot/laptop
http://playbook.thoughtbot.com/tooling-development-process/laptop/

Getting Started: How to Perform a Clean Install of Mac OSX Mountain Lion

By | Programming | No Comments


Shortly after Dev Bootcamp, I was ready to start doing my own side projects, namely a platform for turning stacks of lab test papers into an online dashboard of coherent health information. Unfortunately, I was running into problems associated with setting up a Postgres database in a development environment, and a mentor said it may be due to problems with Homebrew and that fixing them would “level you up in sysadmin skills”.

I thought upgrading my Macbook Air’s operating system from Lion to the Mountain Lion would fix the issue.

It didn’t, and I ended up being unable to do basic things like run Rspec to test my Rails applications. Because of that…

I decided to do a completely clean install of the OS X Mountain Lion, which would save time and allow one to:

  • develop an understanding of what goes into a properly working development environment
  • not worry about patching up an unknown number of problems that could occur at any point down the road

Although “leveling up” in system administration skills would help any developer, I’m looking to maximize my time spent learning skills more directly related to web development. Being sidetracked by tangential issues can be discouraging, especially for beginners who need to learn core skills first. The idea is to maintain long term motivation with quick wins, only then following with increasing depth of technical knowledge in supporting, non-mission-critical areas such as system administration.

Without further ado…

How to Do a Clean Install of the Latest Operating System for Mac

Total Time: 1:00-1:30 hours.

Tools needed:

  • USB thumb drive with 8GB or more storage
  • hard drive, thumb drive, or online “cloud” storage account with enough space to store all system files

Steps:

  1. Download, but do not install, Mountain Lion from the Mac App Store. If you already upgraded to Mountain Lion, re-download it. https://itunes.apple.com/us/app/os-x-mountain-lion/id537386512?mt=12 [15-30 min]
  2. Install the latest version of Lion DiskMaker: http://blog.gete.net/lion-diskmaker-us/ [1-5 min]
  3. Create a bootable install drive with an empty 8GB USB drive by following instructions on Lion DiskMaker [15-20 min]
  4. Save all system files. With a clean install, everything will be erased and Mountain Lion will be installed in its place, so at minimum, save your documents, media files, and other important files. I saved a copy of everything on my hard drive to Dropbox, thinking it would be cool to use a hardware-free approach, and it took 3 days to sync to the cloud! Next time, I would opt for a hard drive or large thumb drive for near-instant data backup.
  5. Reboot Mac and Rewrite the Hard Drive [30 min]
  • Restart your computer and hold down “Option” key on reboot. This will lead you to the menu.
  • Select “Mac OS X Installer” from the menu.
  • Select “Disk Utility” and choose the hard drive to be formatted on the left hand side. Click the “Erase” tab. Click on “Format” and select “Mac OS Extended (Journaled”).
  • Click the “Erase” button. At this point, consider your data gone forever unless you saved it elsewhere. Beware!
  • Exit out of “Disk Utility”. In the menu, choose the “Install Mac OS X” option. Install Mountain Lion onto the newly reformatted hard drive.

The computer will reboot and you will have a clean install of Mac OS X 10.8!

Sources:
http://osxdaily.com/2012/07/25/create-os-x-mountain-lion-boot-dvd-usb-drive-liondiskmaker/
http://osxdaily.com/2012/07/25/how-to-clean-install-os-x-mountain-lion/

Beyond Beginner’s Luck: The Beginner Mind Advantage

By | Learning, Mindset, Programming | No Comments

Ah, it’s that time again. In 1 day, I start again as a beginner. This time, it’s in an attempt to learn Ruby on Rails programming in the span of 10 weeks. The Fall 2012 cohort has 60 students, some of whom have prior programming experience.

 

 

 

 

 

 

 

Some days, some of us–especially those with no programming experience–get worried and think we are behind the rest of the students. Jesse Farmer, founder of Everlane and one of the instructors at Dev Bootcamp, put it well (bolded emphasis mine):

Some questions you might be asking yourselves at this point…
Am I behind?  Should I be preparing more?  Will I be ready?
Those questions are healthy as long as “Will I be ready?” doesn’t become “There’s no way in heck I’m ready” and “Am I behind?” doesn’t become “I’m so far behind I’ll never catch up.”

That mindset reminds me of when I was on the triathlon team in college. In my second year competing, there was a “mentor-mentee” matching program, wherein newcomers to the team would be assigned to a more senior athlete for mentoring. Of the entire season, it turned out that the most exciting and anxiety-inducing day was likely an athlete’s first race. Sometimes on race day, my mentees would come to me and lament about how much “less talented” they are than the faster athletes, or say something like:

All I want is to not come in last.

As if being a beginner were a bad thing. I beg to differ. In my days of being dead last on my high school cross country team, there were some great perks. After I became a faster runner, I came to relish them when I started cycling as a beginner, triathlon as a beginner, and now, programming as a beginner. Come to think of it, there are at least 6 advantages to be found in any endeavor as a beginner.

1) Lots of room for improvement. Even more motivating to compare the progress of others and notice how much more you’re improving from all that hard (and smart!) work.

2) No external pressure to perform. The pressure we place on ourselves is high enough. Imagine the added stressors of a team, coach, family and friends that burdens the elite athlete.

3) It’s easier to learn proper technique as a novice, and it will make you fitter in the process. Two birds, one stone. The talented must slow down before seeing gains from clean form.

4) They won’t mind if you miss your goal time. By “they”, I mean the team, your friends, other people.

5) You have no responsibility to respond to competitors in the field, or your performance in relation to others. You have only the responsibility of your own performance.

6) Usually the personal achievement is more than enough for satisfaction, although there is less public visibility when you meet your goals. Fortunately, your mood is less dependent on others’ affirmation of how well you did, because any improvement is a step forward. Also, you don’t get in the situation where you can’t decide how happy to be because you achieved a “personal record” time but didn’t win the race.

Of the 60 incoming Dev Bootcamp students, I likely have less programming experience than most. According to my 24/7 time tracking system which records everything I do everyday in increments of 15 minutes, I spent:

9.25 hours in 2011 learning HTML and CSS
48 hours in the summer of 2012 doing Ruby tutorials

…throughout exactly 16 days (57.25 hours cumulative) of touching code, ever, in my life.

And it’s going to be great. For the beginner, every minute is a challenge, every challenge overcome is an accomplishment, and there will be nothing holding you back from going through hell and high water, doing the best possible work and learning as much as possible.