SB apprenticeship: Day 15

A excerpt from Close to the Machine, by Ellen Ullman, written 17 years ago but strangely prescient.

A excerpt from Close to the Machine, by Ellen Ullman, written 17 years ago but strangely prescient.

I think my mentor’s back from his cross-country drive today! Now I can stop pestering everyone else!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

I really need to remember to take notes or start a blog post on Friday afternoon, I have no idea what I did. I think I finished the TDD book?

We had a Labs Showcase, so everyone could show off the projects they’ve been working on on Fridays. It was really interesting, everything from a new tool for scripting to the latest version of a mural that Meredith is painting to the preliminary plans for a laser harp (!) that Brian wants to build. Brian needs some help with the physical stuff for his harp and I volunteered; I’ve missed getting my hands dirty like I did making the art car. Speaking of the art car, it’s Burning Man week, and I’m feeling slightly regretful at not being out there getting dusty. It’s weird when lots of people posting frantically on Facebook makes you nostalgic! Ah well. Maybe next year.

Today begins the second quarter of the apprenticeship! For this part we’re getting more into Rails, doing new katas and reading The Pragmatic Programmer and The Clean Coder. My ex used to talk a lot about Pragmatic Programmer, so I’m looking forward to digging into that and discovering what he loved about it. So far I’m really enjoying this apprenticeship, Smashing Boxes is a great company that is really supportive. Everyone has been really giving of their time and expertise, and it’s been super interesting to see how a real shop works. Plus there’s just such a great culture here, everyone is friendly, and while there’s obviously a lot of work being done, there’s also a lot of joking around on Slack. I can make jokes and ask questions without worrying that people are going to think I’m dumb, or judge my programming skill based on my gender. There’s an expectation that, assuming I don’t screw anything up, we’re all going to be hired as junior devs after we work through the apprenticeship curriculum, and being here and seeing how everyone works has made me even more determined to achieve that. Man, time’s flown, though. Three weeks!

Today I think I’m going to work on some of the online courses that are recommended for this quarter: Rails for Zombies 1 and 2, and Surviving APIs with Rails. I think it’ll be a good refresher for the stuff I learned at TIY, and will be a good starting point for the rest of the assignments.

SB apprenticeship: Day 14

I would actually really like to see this mashup.

I would actually really like to see this mashup.

I don’t have a lot to say today, so here’s a silly screwup from the PlayStation store from last night.

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday I worked through a lot of the Test-Driven Development book. I struggled for a while with this book; the code examples are written in Java and Python, and so I would spend more time trying to figure out what the code was doing than learning about the tests, but I finally hit a couple chapters that were more explanation than code, and that was really helpful.I like this book, but I think I’m going to pick up Rails 4 Test Prescriptions and see if maybe this makes more sense with code that is more familiar to me.

Today is labs day! Although I’m not really working on a project, per se, so for me it’s work on tutorials day! W00t!

I’ve been trying to go back through some of the tutorials I did before TIY, I feel sometimes like I didn’t actually retain any information from code school and I’m just like flailing at the keyboard and faking it really well. Objectively I know that isn’t true, but imposter syndrome is definitely a thing.

SB apprenticeship: Day 13

Isis Winger, an engineer in San Francisco, started the #ilooklikeanengineer Twitter campaign after getting negative responses to her appearance in another set of ads for her work.

Isis Winger, an engineer in San Francisco, started the #ilooklikeanengineer Twitter campaign after getting negative responses to her appearance in another set of ads for her work.

A friend recently sent me a link to an Indiegogo campaign to help the #ilooklikeanengineer folks put up a billboard representing more women and minorities in tech. I have to wait until payday to support them, but I was thinking of the rewards and which I would choose, and I like t-shirts, and stickers are cool too, but would I really wear a t-shirt that says “I look like an engineer” because, I mean, *am* I actually an engineer? And that kind of stopped me short, because I’m pretty comfortable calling myself a ‘developer,’ I’m slooooowly becoming ok with the label ‘programmer’, but ‘engineer’…well, those are people in hard hats, right? Who went to school for a long time and use lots of math. They make things, physical things, and huh, why is the mental image that pops up in my head of a white man? I can’t quite tell if this personal rejection of the label engineer is just another insidious appearance of our old friend imposter syndrome, or if the definition I have of what an engineer is and does is legitimately out of the purview of what I am learning to do. What do you folks think?

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday I was doing pretty well until two things completely derailed my concentration: some asshole murdered two journalists in Virginia and used social media as a very effective way of publicizing it, and WordPress decided that it didn’t want me to be able to put tables in my post. I had intended to have a little table with the Vim and terminal commands I learned in the course of finishing the SSH assignment: the command, and then a brief description of what it did. Unfortunately, nothing I tried worked, and my table remained all mangled. I fell down the rabbit hole of attempting to add a plugin, only to discover that WordPress.COM won’t let you install plugins, I need to use WordPress.ORG, and also download the entire codebase of my blog and host it myself. Which, I’ll admit, is less intimidating than it was when I first started this blog years ago, but still. WTF. Would it be so hard to just explain that difference before I spent two house fighting this stupid thing? Anyway, that fractured my attention span for longer than it should have, and as a result, I ended up attempting the Roman Numeral kata and messing up so much that I just worked on the Treehouse stuff for the afternoon. I always used to joke that journalism was the perfect job for someone as ADD as I can be sometimes, but I am finding that it really is sometimes challenging for me to be able to put my head down and code for hours on end. Remembering to take my ritalin helps, and having a really interesting problem or lesson also helps, but it’s a thing I have to be really aware of.

Today I’m going to continue working on writing tests for my tic-tac-toe; I’m going to try to finish the Test-Driven Development book and Git Real 2 this week as well. Friday will be the end of my third week here! Man, the time has flown.

SB apprenticeship: Day 12

I've never been so happy to see a simple unstyled

I’ve never been so happy to see a simple unstyled “Hello World”

So I actually needed to know way less Vim than I freaked out about on Tuesday. Whoops. I am going to start adding a list of new commands and stuff I learn on here, both as a way to help any other juniors who might be reading this, and also to cement them in my brain through repetition, just as soon as I figure out why WordPress hates tables. Stay tuned!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday, with much help and trial and error, I figured out how to SSH into a web server and make it serve a static page. That pretty much took most of the day. In the process, I learned four new Vim commands (:wq, i, j, k) and three new Unix terminal commands (cat, curl, tail)! I also did a couple more of the Treehouse ‘learn to make a website’ courses.

Today I’m going to rewrite the Roman Numeral kata and then work some more on making tests for my 4×4 tic-tac-toe.

SB apprenticeship: Day 11

Real programmers set the universal constants at the start such that the universe evolves to contain the disk with the data they want.

One of the interesting things about learning how to program is how much some of the other things I’m into make sense now. For instance, I’ve been reading XKCD for years, but honestly only understanding about a third to a half of them. The jokes about math or programming mostly went over my head, unless they were visual gags like the ‘compiling‘ one. When the comic above came out, in 2008, I not only had no idea what vim, emacs, ed or cat were, I didn’t even know what they were referencing. There’s nothing in that comic to explain what an editor is, or an IDE, or what the difference was, or why they were important. Which, of course, makes sense, Randall Munroe is a programmer and this is a comic for that audience. Also, to quote E.B. White, “Explaining a joke is like dissecting a frog. You understand it better, but the frog dies in the process.” But since I started learning to program, people will link to old comics and I find myself appreciating the humor in an entirely different way, and that is super cool.

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday I worked on the Roman Numeral kata for the second time, and actually finished it! The first time I got super frustrated because nothing I was trying was making sense, so Brandon suggested that I work on Coin Changer some more. In one of her blog posts, Lindsey posted a link to a woman who worked through the kata in a way that really made sense to me, so I used that as a reference and managed to complete it. I was feeling pretty good about that, so I worked on adding tests to my 4×4 tic tac toe with Jordan for a bit, and then decided to tackle the next challenge: learning how to SSH into a server and post some static content. That…was a little less successful. The page describing the assignment was out of date, so I ended up needing Josh to sit with me for a bit and walk me though the terminal commands to get started, and just as I was nearing the end I discovered that using nginx to serve up an HTML file on a server required me to know Vim. Viiiiiiim….so daunting. (But see, that comic at the top was totally relevant!) Vim is an editor that I’ve heard is super awesome. Once you get the hang of it, it’s all keyboard commands to do what you want. It’s powerful and widely used…and has a learning curve roughly the size of Mt. Everest. The cheat sheet I found and printed out is seven pages long. Sigh. Still, I’ve known this day would come, and honestly I’m looking forward to learning Vim. I’m just a little nervous, is all.

Today I’m going to work on the SSH stuff. I’m not sure how much Vim I’ll actually need to know to get through it, but I have my cheat sheet in hand and am feeling ambitious. Also, yesterday I rewrote the documentation for the assignment and did a pull request for it. Ian is taking a look at it now, so if I need to make any corrections or add anything before it goes live I’ll do that.

I expect to learn enough Vim to be able to put a static HTML page on a server using SSH. Exciting!

SB apprenticeship: Day 10

Fridays are Pax days! Here he's helping David code.

Fridays are Pax days! Here he’s helping David code.

In our growth engineering meeting Friday we learned about SEO, one of the important practices of which is not duplicating content. So I think that means I should come up with different headlines for my blog posts, since the only thing that changes is the number of the day. Sadly, I have always been terrible at headlines (the advantage of being a reporter is that usually editors come up with headlines based on space and other editorial considerations. I never had to get good at them.) so this may be a work in progress.

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

I didn’t get a lot of work done Friday: we had the backend standup, then the growth engineering meeting, then the company standup, then lunch, then Ian showed a bunch of us how to do a simple project in Swift and Xcode, then we apprentices met with our mentors to discuss whether we should switch from Code School to Treehouse for online lessons. After that I decided to play with Treehouse some, so I could have an informed opinion. My only complaint so far is that Treehouse makes you follow a track, so I had to spend 10 minutes learning very basic Ruby things. As far as complaints so, though, that’s pretty minor.

Today I plan to start working on the Roman Numeral kata, then Jordan, who was in my TIY cohort and who finished the apprentice program right before I started, is going to help me go over some tests for my tic-tac-toe. I think this week I’m going to start working on the SSH & Webservers challenge also, so I can keep to the schedule they suggested for us.

Today I expect to learn how to do the Roman Numerals kata. I tried it last week, but got really confused, so Brandon suggested I go back to Coin Changer and make sure I really had that down.

SB apprenticeship: Day 9

We walked into a slightly different Smashing Boxes this morning — we rearranged the desks and are now sitting in pods. Instead of having people grouped by job (like back-end developer, marketing, project manager, etc), now we’re grouped in teams. It’s an interesting way of doing things, and I look forward to better figuring out how the different components work together here! I’m sitting next to David, one of the other apprentices, but Lindsey is now all the way across the room, so our little apprentice pod is no more. *tear*

We're trying out a new seating system at SB: pods! I am no longer in my little apprentices group, they let me out into the population!

We’re trying out a new seating system at SB: pods! I am no longer in my little apprentices group, they let me out into the population!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday I fought some more with Rspec, attempting to write tests for my 4×4 tic tac toe. I can’t seem to figure out how to get started doing them, every time I try I just get confused. I may try to pin Brandon down and see if he can give me advice. I also finished the Git Real Code School course.

Today is Friday, so it’s labs day! Last week I ended up working on Learn Ruby the Hard Way, but I think this week I’m actually going to wander around and see what other people are doing. There’s going to be a lecture about Swift that I want to sit in on, I’m curious how mobile development works. We apprentices also have a meeting with the growth engineering team this morning, so I’m excited about finding out what growth engineering actually is.

I expect to learn a little about a lot of things today: Swift, growth engineering and various projects around the office.

SB apprenticeship: Day 8

I discovered yesterday that I have like five people who aren’t attached to Smashing Boxes in some way who read this blog! Welcome, friends! If anyone has a topic they would like to hear more about, let me know in the comments. (Comments are moderated, FYI, because WordPress gets a lot of spam. I haven’t figured out how to get into the source code for this theme in order to post something letting people know about the moderation.) I could also conceivably tell people about my fascination with red pandas, or how I’ve been trying to work out more because moving from San Francisco to North Carolina means that I don’t really walk anywhere anymore, or how having ADD is way more of a pain when I’m trying to program than when I was trying to write in my previous life.

Ooooor, we could just stick to the daily questions.

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday I think I may have finally grasped recursion. One version of my unbeatable Tic Tac Toe game used the Minimax algorithm, (here’s a really good blog post that explains it actually using tic tac toe) and had two functions which recursively called each other. My boyfriend helped me with that part, and while I was pretty sure that I understood what I had done, when it came time to refactor that code into working with a 4×4 game board, I was stuck staring at my monitor in confusion. I knew that what I wanted to change was in that code, and it was only like two additional lines, but when it came to actually making that change I just broke things a lot. Fortunately we figured it out, and now I can play 4×4 Tic Tac Toe! That was a pretty cool breakthrough, there was much chair dancing.

Today I am going to write the coin changer kata again, and then I think I’m going to figure out Rspec testing for my 4×4 game. I used Minitest in my original game, because that’s what we learned at TIY, and I think it was easier in some ways. For instance, in order to test that the board exists, I simply put a copy of what the board should look like in the test. I’m still figuring out how to make that work in Rspec. I’ve also been working through Code School’s course on Git and version control, Git Real. (Oh, how they love their puns. What is it with programmers and puns?) I’ve actually been a little surprised how much of it I already knew, I guess TIY gave us a thorough grounding, but it’s a good refresher.

So, all that being said, I expect to learn how to retroactively write Rspec tests for a game and more about version control. I also plan to learn what kind of batteries my wireless keyboard takes, and where to find them, since I have a little red outline in my menu bar. Eep!

SB apprenticeship: Day 7

There's a set of giant Durham chess at the American Tobacco Campus!

There’s a set of giant Durham chess at the American Tobacco Campus!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday Brandon and I went over my coin changer kata once again, this time completely without peeking at previous versions. I think I use the other ones as a crutch, so it’s kind of disheartening when I go to do it and can’t remember that I want to have “`it “does this code” do“` rather than “`if “does this code” do“` even though I’ve been doing this for a week now. I really just want the Matrix stuff to be available already. Download all the code knowledge! Doing it that way did seem to help me cement some of it, I think. Guess we’ll find out when I do the kata again!

Today I think I figured out how to implement the depth limit search into my minimax code for my 4×4 tic-tac-toe, so I’m going to mess with that some more. I’m not sure how good programmers are able to look at other people’s code solutions and see how it fits in with their different code. I can look at examples all day, but when I try to relate it to my own code it’s just a confusing mess. Hopefully that will come with experience.

I expect to learn how the depth limiting works in my code! After that I’m going to fix bugs and figure out rspec tests for my tic-tac-toe.

Smashing Boxes apprenticeship: Day 6

I don’t have a SB-related picture today, but the cat we just recently adopted woke me up by booping me on the nose, which was adorable, so I’m sharing this. Also, I recently discovered that I enjoy coding to video game soundtracks, so I made a YouTube playlist of a bunch of ones that I liked and that work well for me. Let me know if you have any other suggestions!

Roque -- also known as Rokey-pokey, Crookshanks and Fatty.

Roque — also known as Rokey-pokey, Crookshanks and Fatty. He looks like he’s about to break some bad news to me right now.

And now…it’s question time!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday was a day of getting ahead of myself. I went ahead and started the Roman Numeral kata, only to realize that I had no idea what I was doing. When I asked for help, Brandon suggested that I go back and work on the Coin Changer kata some more, saying it’s more important that I have mastery over that one than that I accomplish the entire list. We also refactored my code to add a loop rather than the not-very-DRY code I had previously.

We have a series of projects that we have to finish in order to pass out of the apprenticeship and move to an actual junior developer job. Since the requirements to apply for the apprenticeship changed after I had already started the tic-tac-toe game, I’m a little bit ahead of the curve, so yesterday I started working on the 4×4 version. I went back to my minimax version, because I figured that would be easier, and once I finished that I would move on to the rules-based one. I copied all my code into a new Github repo, changing the parts I thought would need to change, ran the game in my terminal…and it worked! Sorta…it let me play the first move, but then when it came time to switch players, it just froze up. I spent like an hour trying to figure out what was going on; I installed ByeBug and put it a couple places in an attempt to see what I did wrong, I texted Kevin and he walked me though some debugging also (debugging doesn’t work super well when you’re not both starting at your computer screen, FYI). I never got an error message, which made the whole thing mysterious and annoying. Brandon got out of the meeting he was in, walked to my computer and diagnosed the problem immediately.

Turns out that the the minimax algorithm works by building a move tree of all the possible moves that each player can move, and then choosing the best one, or the one that will lead to winning the game. This works pretty well in regular tic-tac-toe, when a 3×3 board gives you a relatively limited number of choices. Moving to a 4×4 board increases that number exponentially, however, and my poor little MacBook Air was straining under the calculations.

So…today I’m going to learn how to write code that limits the number of nodes that my code searches ahead of making a move. Brandon suggested two options: alpha beta pruning, which he said would probably be way overkill, and a depth limit search — I can tell it to only search 5 moves ahead, for instance, instead of the whole game. I’m also going to work once again on the Coin Changer kata, so hopefully I’ll cement the latest version in my brain.

I expect to learn about depth limit searches! I’m kind of excited about this, it seems a little more computer-sciency, but actually relevant. 🙂 I wish I had taken computer science or coding classes in college, although since I went to a little art school I’m not actually entirely sure if they even offered any. I’m glad to learn any way I can.