Archive for the ‘Education’ Category

Ruby Week 4: Ruby, Peter, Paul

Here’s where we get into the weird, stressful scrunchy part of the term, where there’s too much to do and not enough time to do it. Ever heard that phrase, ‘Robbing Peter to pay Paul?” Sorry Ruby, but you’re Peter this week. Not as much movement on the Ruby front as I would have liked.

The good news? Only 1.5 weeks left of the evil, life-sucking online classes. By the way, if you’re ever thinking of taking two of them at once–I don’t recommend it. However, I’m going to be a VERY happy camper in about 9 days when my work load decreases by 70%.

I did manage to squeeze in my scheduled tutorial this week: Conditional Statements and Loops. Yeah it seems basic, but I’ll appreciate this later when I’m (hopefully) not pulling my hair out wondering why my code doesn’t work over some weird Ruby syntax issue.

And there are a couple of either ‘gotcha’s’ especially for the PHP and Javascript inclined.

For example:

A typical PHP switch statement might go like so:

switch (variable) {
case 'value':
# do stuff...
break;
default:
# do default stuff...
break;
}

The Ruby version would be:

message = case
when hour < 12
"Good morning"
when hour > 12 && hour < 17
"Good afternoon"
else
"Good evening"
end

Or, for an even more ‘English’ looking effect, the same thing could be written:

when hour < 12 then "Good morning"
when hour > 12 && hour < 17 then "Good afternoon"
else "Good evening"
end

Kinda makes you glad you don’t have to put your program on punch cards don’t it?

I also have an official project repo up on Github, though there’s nothing in it but a template at the moment. We had a lot of useful information thrown at this week, and I’m looking forward to sifting through it to see just which parts I’ll be able to apply.

Adventures in Ruby, Week 2

This week was a bit all over the map. Part of me really wants to dive into the Vim tutorials series on Nettuts…but I feel like I’ve spent most of my education trying to master tools at the expense of actually learning whatever language or framework I’m supposed to be immersed in. I’ve put in my time with Textmate and I still have only scratched the surface of what it can do–with a dull nail at that–so I’m gonna resist editor-jumping for another little while yet.

Instead I spent some time reviewing the notes from our Ruby class page and trying to wrap my head around the different methods of calling Ruby methods, working with classes etc. It still freaks me out that there are NO SEMICOLONS ANYWHERE. But I also kind of like it.

I’m still not convinced the merits of Haml, despite the glowing reviews of the Haml fans. At this point I think it’s good to know it exists, but again, I already know HTML quite well and piling on an abstraction layer while I’m trying to learn the basics of a new language seems like asking for some ::headdesk:: in the not-to-distant future.

I’m still trying to figure out the best way for me to learn things in a way that I will actually retain them. I spent some time with the Ruby Essentials training on Lynda.com this week. They’re very well done, but it can feel slow at times and I ended up skipping some things because I got bored.

The most interesting find of the week was the Ruby Koans which follows a teaching Ruby through Ruby testing method unlike any tutorials I’ve ever seen.  I’ve been around long enough to understand the concept of building an app through testing. You write tests for what you need to build, they fail and then you write code until you pass the tests. But for a n00b programmer, the thought of writing tests when you can barely write a function, much less a Class, is pretty overwhelming. I thought this was a pretty unique approach to getting at the concept in a really manageable way.

I’ve also been looking into Capistrano, although that’s not strictly related to the Ruby/Sinatra focus of class. Even though I use it daily at work, I haven’t yet had time to implement it for any of my personal projects. And now that I know it’s there, I get really bitter about my slow and painful deployment methods!

I’m supposed to come up with a project to work on for the rest of the term. I’ve been thinking about it, but nothing earth shattering has come to mind. Last term I was fortunate to have a project I was really passionate about–mostly because I really needed it and the existing tool was beyond crap. I even dabbled in Rails with that project, but if it is going to be truly usable for my school, I’m going to have to make it into a PHP-based app. And I would really like to leave it as a gift to future confused students trying to make it to the finish line.

I already dabbled in hand coding my own blog too. My current state of overwhelmedness is probably contributing to my lack of inspiration. There’s a sample project on the Lynda.com tut that is a restaurant finder. That might be a good project to try. The tutorial walks through creating a command line based app. Maybe I could go through that and then apply to Sinatra.

The only other thought I’ve had so far is some kind of online recipe book. That’s not really something I need since I already have an app that works well for that–but it’s a least something I might find interesting, since my partner and I are really into cooking right now, mostly from this site.

So that’s all from the idea factory so far. Survived 2 weeks of online classes so far with 3.5 weeks to go. What doesn’t kill me… blah blah blah.

 

Adventures in Ruby: Week 1

Poor little neglected blog. I can tell you exactly when it went into a prolonged coma: Oct 6th, 2008. AIP Fall Term Begins. Goodbye to reading books that aren’t assigned textbooks and goodbye to writing anything that won’t be turned in to an instructor

Fortunately I can finally see the light at the end of the tunnel. Also fortunately, this term seems to be all about writing so the least I can do is post some of it in this poor little ghost town.

Last term I dove into Ruby with an independent study of Ruby on Rails. There are not any full time instructors at school who know anything about Ruby, but fortunately, my coworker at the time, @vosechu, is a Ruby nut and was happy to stay late one evening and give me enough guidance to get my environment up and running. From there, I dove into 12 hours of tutorials from Lynda.com that actually were quite good. I went through almost the entire series in less than 48 hours and was able to get my first project up and running and learn a few things about setting up a database and running migrations.

But learning RoR before I actually studied the Ruby language is by any measure, a little backwards. So I was happy to see a Ruby course offered this term that starts from the beginning and builds up the basics.

When I started my first term at the Art Institute 3 years ago, I remember clearly Chappy telling us in the first class that if we got out school without knowing how to learn a programming language on our own, then they hadn’t done their jobs. Now I understand what he was talking about. Having dipped my toe into the waters of Python, Javascript, PHP, SQL and Actionscript, there are many aspects of programming that are found across all these similar languages. Once you understand the structures and the concepts of programming, picking up a new language can be largely a matter of syntax. A loop is a loop is a loop after all.

There are a lot of basic principles I’m still learning so I’m definitely not past the struggling phase. But I do finally have the confidence to keep digging into things until I figure them out. The other thing I figured out pretty quickly is that if I have a problem, I am likely not the first one to have it. Google knows all, sees all, and until it turns on us in Skynet fashion, I continue to rely on it to learn from other people’s mistakes (which I much prefer to making my own).

One thing I’ve noticed when I have the chance to observe people who have been programming for a while is that they tend to be heavy users of the Terminal or Unix shell. When I started as an intern at Metal Toad, Chuck blew my mind with all the things that were possible with the terminal and I’ve been a devoted user ever since. I’m not doing anything earth shattering, but it has been useful to at least get more comfortable with the basic commands, and it’s been great for getting cozy with Git, which I now use every day. The Unix tutorials that Steve gave us in the first week, are some of the clearest and simplest explainations I’ve seen. If you’re interested in dipping your toe in, I definitely recommend it.

I also found just under 7 hours of Ruby Essential Training on Lynda.com. I know a lot of students might not have the budget to spend $25/month on a tutorial site when there’s so much out there for free. For me, I don’t really learn practical things that well from programming books. I’ve been a devoted fan of Nettuts since my second term of school. Being able to follow along with what is happening, and having a pause button, are a lot more valuable for me when I’m trying to learn something new.

So far I haven’t gotten too far with the actual Ruby tuts that Steve assigned for week one but this one looks pretty good (and it’s free). I have a habit of trying to extend my school break by an extra week and scheduled a ton of social activities, including an out of town guest who left today. It’s been an extra busy week, keeping up with my two compressed (5.5 week) online classes (procrastination is so not an option with remote classes). Yeah, I should have done one at a time, but I’d rather get the pain over with early and not have a four class pile up at the end of the term like last time. Now that I work three days a week on top of all of this, I’ve become one of those insane people that I looked at when I started here and wondered A) how they did it and B) if they slept at all.

I guess I’ve figured out the answer at least for me is, A) Because I really want to graduate in September instead of December so I can get my freaking life back and B) Not much.

How To Find A Web Development Job After (Or Before) Graduation

Five years ago I decided to make a 180 degree career turn and become a web devloper. At the time I was pretty good at using computers, but I had no programming experience aside from a few vague memories of typing in DOS statements in middle school. I still remember asking the web devloper in our office what CSS was and nodding along as if I understood the answer.

I’ve come a long way baby, but there were times when I wondered if I would ever know enough for someone to actually pay me to make websites. Luckily, I’ve been able to keep my fine coworkers here at Metal Toad from finding out that I still have no idea what I’m doing. Here are a few things I’ve learned along the way.

Start Networking From Day One

One of the reasons I chose the Art Institute of Portland was that it is located in the heart of Pearl District close to scores of agencies and also within easy distance of a lot of great networking opportunities. Many of our instructors are professionals who work in the industry—and that means you can pick their brains about what you need to know to be marketable. It is entirely possibly that your instructor may be your future boss, coworker or at least a reference.

While you’re networking, don’t forget about your fellow classmates. The ones who graduate or start working before you are the ones who will be able to recommend you to their bosses—unless you become known as the one who always slacks on team projects. Likewise, if you are hardworking and awesome people will remember that too. When Joaquin asked me if I knew someone who knew about search engine optimization and had excellent writing skills, one person came to mind immediately and now he works here too.

Put The Your in Your Education

I figured out pretty early on that the term ‘required’ can actually be pretty flexible if you push on the sides of the box. In any college curriculum, there will be painful classes that you cannot escape. But when it comes to your core major, you should strive to study the things that interest you the most. Photography yanks my chain a lot more than typography and websites use both so I’ve squeezed as many photography classes into my elective slots as I could. If you want to learn about a topic that isn’t offered, consider an independent study or an internship.

Speaking of Interships…

Internships are a great way to get real world experience but they can also be a great way for companies to scam free work out of you without teaching you much in return (which, by the way, is illegal). Planning ahead can help you steer towards the former and avoid the latter. (Do as I say, not as I do). If you’ve reached the point in your education where you’re starting to narrow your focus to specific technologies you’d like to learn, that is a great time to start looking for a company who can offer you real world experience in that area. In my case, I had gotten a taste of Drupal and knew I need to be hanging around some smart people who knew a lot more than I did. I was extremely lucky to get a great mentor who really enjoys sharing his knowledge. Chuck taught me more about Drupal in two days than I had learned in six months of taking classes. (Drush, anyone? Yes, thank you!)

What’s that you say? The company you have your eye on isn’t looking for interns? What does that have to do with anything? Get your notepad ready, I’m about to offer up a free Rule For Life. Ready? Here it is: If you don’t ask, the answer is always no. Metal Toad wasn’t looking for an intern, and in fact I was the first intern the company has ever had. I found this out on my second day when Chuck asked, “So how did you talk Joaquin into this—he’s been anti intern forever.”

I just asked. Specifically, I emailed and explained that I was a senior at the Art Institute who was eager to learn and was there anything I could do to help him? I got a reply in about 15 minutes from Joaquin, inviting me to meet. Once I had a meeting, I had to prove that I could actually be useful which brings me to my final point:

Choose Your Tools, Learn Your Tools, Love Your Tools

Remember way back in paragraph two, when I talked about picking the brains of your instructors/industry professionals? One of the most valuable lectures I ever heard was in my first CSS class (yes, I did finally learn what CSS is!). In the computer labs at AI, we are constrained to the limitations of the software offered, which means a lot of us end up learning to code in Dreamweaver. The professor took some time in our first class to let us know that no one in her professional environement uses Dreamweaver. Although it has evolved greatly as a program, it is still considered by many to be a WYSIWYG crutch for programmers who don’t know what they’re doing.

She strongly encouraged us to find and learn one of the many excellent text editors out there and said that most people in her office use Textmate. I made the commitment right then to try Textmate, and downloaded the free trial that week. The learning curve was STEEP, my homework took twice as long, if not more, but after few weeks of unlocking the features and memorizing keyboard shortcuts, I couldn’t imagine living without it. I’m not going to tell you what editor to use—wars have been fought over less. Whether you’re on Windows or Mac, there is probably something out there that will float your boat.

In general, make a habit of keeping your ear to the ground and finding out what it being used in the industry, and then make an effort to learn those things—whether or not they are being taught in a classroom.

Here are a few other tools that will help float you to the top of the candidate pile:

  • Start tracking your time. Even if it’s just for homework assignments. You will develop the habit which will be one less thing to get used to when you start working. You can also celebrate as the time it takes for you to do the same tasks becomes shorter. Harvest seems to be the cool kid on the block right now. They offer a free account and have a complimentary iPhone app and dashboard widget for Mac.
  • Learn a version control system. Git is hot hot hot right now. Yes, the command-line can be scary if you don’t have any previous experience with it, but with beautiful amazing tutorials and new powerful GUI clients, you really have no excuse.
  • It makes me sad to have to include this last item, but based on the two interventions I’ve had to initiate, I guess it needs to be said: Get a decent email address. No, Hotmail and AOL (I’m not kidding), don’t count. At first I thought maybe I was being too judgemental about this, but I’ve asked around, and so far all the developers I talk to say they would have a hard time taking a developer with an AOL account seriously. I’m not the boss of you, but it’s a good way to get your resume tossed in the recycle bin, so if you love trees, just bite the bullet and get yourself a nice Gmail or personal domain address.

When I showed up to my meeting to infiltrate my way into Metal Toad, I think the fact that I was already familiar with almost all the tools we use every day counted as much if not more than my knowledge of Drupal (which was not much). It showed initiative and willingingness to learn new things. That is something you can’t teach in a classroom and something employers get excited about.

Have you had an awesome internship or job opportunity or have any tips to add? Share in the comments.

How to Get an Internship

6 steps to obtaining your academic internship

Procrastination is the enemy.

I started my academic internship at Metal Toad Media this week. I had originally planned to do my internship this summer, while I was only taking two classes. Then I remembered how bitter I was going to school full time last summer so I wasn’t too upset when the couple of leads I was following didn’t pan out.

I rode my bike instead and had an awesome summer. I returned home from Cycle Oregon and a couple of weeks before school started, it occurred to me that I had signed up for the internship class and I might want to actually get an internship to go with it!

I looked at job sites and talked to some people but I wasn’t terribly excited about what I found. There are lots of design internships but I really didn’t want to be designing as my primary activity.

Metal Toad was not looking for interns, but from what I read and heard, it sounded like a place where I could learn a lot. And they do most of their development in Drupal, which is something I want to learn a lot more about and they’re not afraid to live on the edge of new technology. I went to the contact form on their site and wrote a short email, stating that I was a senior at the Art Institute, looking for an internship and what I had to offer.

I was surprised to get an email from CEO Joaquin Lippincott only ten minutes later. We had coffee a few days later and here I am.

There are a few things about this experience worth highlighting:

Ask and you shall receive. If you don’t ask, the answer is always no. Don’t die wondering.

Variations on this theme have gotten me a lot of amazing opportunities, including the chance to sing on stage with one of my favorite local musicians, on my birthday, in front of my mom and all my friends.

The place you want to work might not be looking for you…but maybe that’s just because they don’t know how awesome you are. Ask for what you want. The worst that can happen is nothing.

Don’t wait till the last minute.

Yes, I know. It seems I didn’t really follow this advice and that’s sort of true. But I also have a year before I graduate so I’m not so desperate that I have to take the first thing that comes along. After a spring term job fair, I had one contact literally hounding me to come work for him. Desperation is never an attractive quality, whether you’re the intern or the hiring company. This particular company wasn’t in a field I’m interested in or qualified for–they just wanted someone to update their website for free.

Know what you want

I’m incredibly fortunate to have a scholarship that allows me to attend school full time and a smokin’ hot sugar mama who gives me a break on my rent. I wasn’t limited to seeking out paid internships so I can continue to eat. This allowed me to focus on finding a position doing something I’m actually interested in. My primary goal was to surround myself with smart people who know lots more than I do about Drupal and were willing to share that knowledge (this last part is key!). I feel I’ve definitely succeeded on that front.

It’s only been a couple of days, but I already have that overwhelmed feeling that usually precedes gaining +10 to geekiness.