Overwhelmed!

I didn't finish my app this week! I tried to do too much. But here's what I did finish:

My SaaS homework

I talked a little about this last week. We had to refactor and fix some bugs in a legacy codebase (Typo). I figured out that I had to run bundle exec rake db:test:prepare if I want to run Rspec after I run Cucumber. For some reason Cucumber messes up the database. Then, the biggest road block was writing tests and then getting them to pass. I ended up overly fixing it... and the autograder was not giving me credit because it was expecting this form to be submitted to an edit action when in fact it's really a new action, so I had changed it to new in order to be more accurate.

My portfolio

I got it into my head that I can bang out a portfolio webpage real quick. But quickly got stuck in a rut. Had a hard time setting up gulp. And it's still working weirdly. When I run "gulp sass" it might more might not give me an error. Then if I change some tab inside the gulpfile... or if I just run "gulp" without any task specified, then run "gulp sass" again, it may or may not just work. It's so erratic that I was tearing my hair out trying to figure it out. But I finally just gave up and wrote a shell script that does the same thing. Maybe I'll try grunt next time.

My app

Started but didn't finish itBut the original idea for it was pretty good. It's basically going to be a social network for yoga lovers. Yoga lovers can add yoga poses. And then they can create yoga routines by putting poses together in a certain order. Yoga poses that are shared publicly can be added on other people's routines. There will be many other features, but that's the core functionality. For example, when a routine is done, you can play it back and it will guide you through the routine in real time.

I was basing yoga poses/routines off of Youtube's videos / playlists. So I might work on it in the future. I feel like I need to at least learn a front end javascript framework before attacking this because there are pages that would be really awkward without loading things dynamically on the page without reloading the page.

Level UP Rails

made some progress on this curriculum. Although I started over-engineering one of the exercises, so my time was all sucked up in that. You can see it here. It's still not finished (there are some improvements I am planning) but it's basically a program that reads in two comma separated value files (CSV) of dinosaur data and creates an object that you can query. For example, you can say dinosaur.big to get a list of all the big ones. or dinosaur.bipeds. The cool thing is that you can also chain them together in any order like dinosaur.big.bipeds to get an intersection. You can see my code here (comments and suggestions welcome)

My work

I'm still doing some freelance work for the library. Did a lot of refactoring of code this past week and that was oddly satisfying.

Meetups

went to a Ruby meetup where everyone just socialized and worked on their projects at a coffeeshop. It's not the main meetup they do (with an official speaker) but the other one where it's more just like casual hanging out.

Drop some knowledge!

Not Just Words

I had a whoops! moment the other day. A friend and I were working on a Python program together, and at one point she was asking me how I would do something. And without thinking, I said "Well, we could just pass this variable in," or "Just put this inside of the loop". And after a while, she said "Stop saying JUST! You make it sound like it's supposed to be easy."

Thank god she said that, because I didn't even notice what I was doing. I immediately apologized and stopped using that word.

But it's amazing how (just) one word can be so alienating, and it's important to be conscious of what we say when we're learning with others. The thing is, I've often been on the other side of that equation--where I felt stupid because I was talking to someone much more experienced, and they were using words that made it seem so easy. And I hated it!

Another thing: when you feel alienated by a word or how someone is saying something, tell them! Because a lot of times they may not be aware of it, and they may have the best of intentions but just not realize what they are doing.

So on that note, what words do you find alienating?

Drop some knowledge!

Week 4: Oracle of Bacon and other stuff

This week, I started my SaaS Part 2 class... I decided to just do the SaaS homework in place of my weekly app. The homework involves the Oracle of Bacon website, where you can find the Bacon Number of any actor. It also shows you the linkages along the way... for instance:

Sean Connery was in Der Name der Rose with Ron Perlman who was in Balto with Kevin Bacon.
So Sean Connery has a Bacon Number of 2. The website also has an API. You can ask it for a connection between any two actors, and it will return that information (if any) in XML format.

Our job was to connect to the API and write a wrapper around the XML that gets returned. Our wrapper would basically detect if the returned value was valid, and if so, it would make it into an object that we can query. The SaaS class (both part 1 and part 2) has been really good at stressing agile practices, and this homework was no different. We were to pair program over Google Hangouts on Air. The tests were written for us in this assignment, but we needed to get them to pass.

Firsts:

  • writing an abstraction layer / wrapper
  • handling XML with nokogiri
  • writing my own validation method (our class included ActiveModel's Validation methods, so it got a lot of behavior for free)
Homework 2

I finished early so I started on homework 2, which is all about refactoring and working with legacy code. We have to clone an existing repo, the Typo blogging platform and fix a bug in it, but first we have to write tests around the bug. Here's a Google Hangout video of me trying to work out the first part:

I was really confused about half an hour in because I had made some changes and my tests passed, and I was really happy with it. But then all of a sudden all the tests failed even though I hadn't changed anything since the last time! I finally figured out that I had to run bundle exec rake db:test:prepare. Although I still don't understand why... I hadn't changed the database at all since the last time I ran the tests. I thought I only had to run that command when I changed the database.

Other things:

Level UP Rails is a project designed to give a common baseline to engineers on the Rails Prime stack. It was designed by Joseph Mastey to help onboard new hires to the Enova team. But guess what? It's also open source, so I'm taking it even though Enova hasn't offered me a job yet (what are they waiting for? Fools!). So far I've finished the first lesson of the first course, which mostly focuses on server commands and borderline sysadmin skills, many of which have intimidated me in the past. I just started on the second section entitled 'Basic Ruby'. The overall course description is: "Learn to build and test a complete Ruby on Rails application. This isn't a basic intro: you will finish with some serious ruby chops." I can't wait to have serious chops! I'm documenting my progress on github.

Also this week I participated in two Code Club sessions (through the CodeNewbie website). They were great! It's sort of like hanging out with cool people while learning a lot. Each session has a host, but the host doesn't necessarily have to know any more about the subject than anyone else. It's basically like a study session; everyone is there to learn and encourage others to learn. The first one I took was on Javascript Variable Scope where I got to hang out with Saron and Cynthia. The second one I took was an introduction to Ember.js with Jonathan and Yaw.

And ... and ... and ... I went to a Ruby Meetup on Wednesday (the featured talk was on Angular JS). I met a lot of nice people. And then I got home just in time to participate in #CodeNewbie Twitter Chat! I didn't feel like I did that much this week, but I guess I did!

Drop some knowledge!

Learning Roadmap

One of the hardest things about self-guided learning is coming up with a disciplined curriculum of some sort. School is good for giving you some kind of structure in which to learn, but when you're learning on your own, you can go in any direction, which can be good and bad. When you don't know a lot, you may not even know what is worth learning and what isn't. It's really easy to end up learning "spastically" -- by which I mean, I'll learn a little bit of this until I see something shiny over here and then I'll learn that before I finish learning this, etc. Meanwhile maybe there's something else that is super important to what your end-goal is, but since you didn't read the right blog posts, you never even find out about it... the proverbial "things you don't know that you don't know."

So it's important to start with a rough roadmap, and re-assess that roadmap regularly to see what spots you're missing. Here is my current roadmap:

  • take the EdX.org Software as a Service Part 2 class. Part 1 was super helpful in terms of learning basic Ruby/Rails, testing and agile practices. Part 2 focuses on more advanced Rails topics as well as working with legacy code. I am currently in week 2 of this class, which ends in mid-February.
  • continue writing an app per week, with the following caveats:
    • I want to learn at least one new thing per app. currently it's pretty hard not to learn one new thing, as I know relatively little. But as I learn more, I will probably want more specific goals like "learn to make an API for my app" or "learn to write a simple gem".
    • Since I am also taking the EdX SaaS class, on weeks where my SaaS homework is pretty involved, I can substitute that homework assignment for my weekly app
  • Level UP Rails -- I heard about this curriculum through the Ruby Rogues podcast episode "Apprenticeship with Joseph Mastey and Jill Lynch of Enova" where Joseph talks about implementing an apprenticeship program at his company for onboarding new hires who show a lot of potential but who may not be as technically proficient. These apprentices spend the first few months just learning the company's stack, codebase, and a lot of other basic skills. Joseph also mentioned that the curriculum that he designed is now open source! It's available at https://leveluprails.com/. So far I'm really enjoying this curriculum. It provides just enough guidance and links about each topic so that you know what you should learn, without providing too much more. Then it's your responsibility to Google it if you want to know more. There are also exercises at the end of each section. I also find the way the exercise titles are phrased to be amusing... I'm not sure if this was a conscious decision but they're phrased to sound like unit test describe blocks..., for example "Knows what ports are and can use netstat to find them". You can follow my progress on github, where I'll record my answers to the exercises as well as whatever personal notes I want to remember for later.
  • Read Practical Object Oriented Design in Ruby by Sandi Metz - this is a great book so far. If you haven't already, go watch Sandi Metz's talks on YouTube. I've learned so much from her.
  • Continue to blog at least once a week.
Those are my top priorities. And here are some of my lesser goals that would be wonderful to accomplish if I can find the time: Social or career oriented goals:
  • Continue to attend meetups / hackathons
  • Create my resume webpage
  • Make some business cards
Non programming related:
  • ride the Atlanta Streetcar which just opened up about a month ago.
  • go to the Martin Luther King Center I've lived within 2 miles from the MLK center, drive by it all the time, and yet I've never visited. There's no excuse for that!

Drop some knowledge!

My Coding 'Journey'

I've been hanging out at the Code Newbie website a lot lately, talking in the forums as well as listening to the excellent podcasts hosted by Saron Yitbarek. She interviews programmers not only about the technical nitty gritty, but also about the more human side of software development. One of these topics is: how do people get started in software development? What was your first app? What was something you wish you knew before you got into programming?

So far in this blog I haven't divulged many personal details, and you may even be wondering "who is this Jimmy Lo anyway?" This may be because I feel like my story isn't nearly as dramatic or interesting as many others. I didn't change careers (at least not in the traditional sense), or go through bootcamp, or battle many personal adversities.

In fact, my interest in programming started with BASIC in high school, and I was a computer science major in college. So technically I'm not a "newbie" at all (despite how I feel inside). In college, I wrote programs in Pascal, C, Lisp, Smalltalk, as well as making websites for fun in plain HTML and CSS (this was before CMSs existed). After graduating, I worked in a design firm doing their web development, mostly working in Flash and Actionscript as well as some ASP. Then, I made my dramatic career change--away from computers.

I've always loved writing, and in 2003, I moved to Tempe, Arizona to pursue a Master of Fine Arts degree in Creative Writing-Poetry at Arizona State University.

my Free Poems on Demand project in the Creative LoafingLong story short: I eventually focused a lot of my energies towards writing and the arts, which you can find out more about if you go to my main website here. I still coded, but my attention had been diverted. My skills lagged. When I moved back to Atlanta, I got a job at the county library as the in-house web developer, building out their website as well as making useful tools in PHP to streamline their day to day tasks.

Last year, I quit in order to do freelance work and have more time to learn new things (both professionally and personally). Despite the financial hit, I think it was worth it--my interest in coding has blossomed since then. I am now learning more than I ever had.

Even though I don't regret spending time on other interests, I also wish I had dedicated more of it towards coding. When I think back on it, I realize that all my programming jobs have been at places where I was the only programmer, or I was only one of a very small team where everyone just worked on their own code. Even though I'm not technically a newbie, I feel like one when it comes to collaborating in a team and working on a shared codebase. And as a programmer, the best way to learn is to collaborate with a team of smart people that will push you. This kind of learning and working environment is what I crave now.

Luckily, I'm getting back into the game right when coding is starting to get a lot more mainstream and exciting. Free learning resources are all over the web, and the community is super supportive. Open source software has made code available to all. And attitudes are also improving. Programming has gotten a lot more inclusive to newbies and non-programmers alike. People who don't come from a traditional computer science background can easily enter the field. All of this is encouraging and makes me feel like I am moving in the right direction.

Drop some knowledge!