Weeks 08 & 09

160425 – 160508 — Total classroom hours: 29

Oh what a few weeks it’s been! My mentor took a vacation, which meant that my program was frozen for a week. I could have just taken the week off, I think I could have easily made the argument that I had ‘earned’ a week of just doing nothing and catching up on Netflix. But, I don’t sit around well, and the finish line for the foundation section is within sight, so instead of chilling for a week I decided to keep up the momentum and crank through some checkpoints.

There seems to be a rhythm starting. With just about every new checkpoint there needs to be either an entirely new table or a column added to an existing table. New models, new controllers, partials, polymorphic relations, it’s been pretty wild. I’m starting to feel confident in performing these repeating actions on my own. I’ll see what the coursework is heading towards and I’m able to work a few steps from memory, then confirm my actions by scrolling down the coursework webpage. Whereas at the beginning of the Rails work it felt like I was typing voodoo magic, now the connections make sense to me, I understand the logic behind the coursework code and the assignments are becoming a bit less stressful. I’ve heard many times that programming is about muscle memory and repetition. Its tough to trust that, especially at the beginning when everything is so new, but it seems to be working out that way.

If you’ve been reading the blog you know that I have a husband and wife power-programming team (Corey and Emily Davis) is  in my corner and they are eager to talk about my progress every time we get together. We’ve met up a few times over the past two weeks and it is so incredibly helpful to be able to talk to them about what I’m doing. They’ve given me some great input when I’m stuck on something small, but even when I’m not stuck on anything, to be able to just have a programming conversation is invaluable. It’s a bit of a confidence boost to be at a point where I can simply talk shop with other people. This also leads to discussions about different approaches to problems and challenges. Every school has a slightly different approach to teach programming, and having the input from other industry professionals -including my mentor- is making me a bether programmer than if I just had my blinders on and was cranking though the classwork.

The end of the the foundation block of checkpoints is in sight. I only have 5 checkpoints left, which in theory means that I could be finished by the end of the weekend. I’m definitely going to give it my best effort, but I’d be pleasantly surprised if I actually get it all done. I’m excited to get into the projects, this Reddit clone project had been a great learning experience, and Im sure I’ll be referencing it quite a bit during the projects. I haven’t really dug into any of them to see what I want to do first. I’m trying to keep my eye on the prize and keep my focus on this foundation block. I’d like to get some experience with APIs, as I’m interested in being able to take advantage of user-ready data. My mentor mentioned a path that he felt utilized Bloc’s project curriculum in the best way, so I’m also curious to hear his input on it.
All in all things are going very well and I’m eager to see what the projects will be like.

Week 07

160418 – 160424 — Total classroom hours: 15

This last week was as close as I’ve come to just smashing my forehead against the keyboard and calling the week good. That sounds a little dramatic, and it is, but the bright side is that I’m seven weeks into the program and its the first time I’ve been this frustrated, so I take that as a good sign. What caused this frustration? RSpec, seeds.rb, and before_action filters. Each were their own beast, and because I was trying to push past (around) the errors to continue making progress on the coursework, it was all a bit of a mess by the time I had my mentor meeting.

The RSpec and seed.rb errors were tied to each other. I could see from the test failure readouts that the tests were failing because of a validation error. I tried to just bypass the error by commenting out the failing test, but the next step in the coursework was to re-seed the database and that action was failing for a similar reason. It appeared this would have to be addressed. I assumed that there was a typo somewhere so I started working backward through the coursework. After digging back 6-7 checkpoints and not finding the error it dawned on me that it would probably be more efficient to work back through my git commits until the I could run a db:seed command and not have an error thrown. That was a much better use of my time, the kicker being that by the time I had found the general timeframe of the error I had to pick up shop and leave for work.

Once I got done with work (and thinking about this error for most of the day) I still had a tough time identifying what I had done incorrectly. At this point -for the sake of finding the error- I had commented out my own work and copy/pasted most of the coursework into my text editor. And still the error persisted. It was at this point that I decided to reach out to my mentor. We went back and forth with several messages. Me trying to accurately describe the error and the steps I had taken to resolve it, him trying his best to diagnose a problem of which he only has my error diagnostics to go on. We went back and forth for a few messages, and we came to realize that in my attempt at error diagnostics and commenting out lines I was commenting myself in circles and had actually ‘solved’ the problem very early on in the process. I guess the lesson is that at some point its probably not a bad idea to stop, keep any obvious errors that may have been found (typos, syntax, etc), un-comment everything and start those tests from scratch. That technique would saved me a lot of time. Now I know.

The other big hiccup for this last week were the before_action filters used to identify the role of particular users signed into the app. All I’m going to say is that these filters are kind of a beast. Most of the ‘unofficial’ documentation that Google concerned itself more with the strong opinions of people who have used it than the actual techniques to use it effectively. I get the sense that people are either all about these particular filters, or absolutely despise them. Being that Im pretty green I don’t have a strong opinion either way, but let’s just say I hope to not see another one anytime soon.

That’s a pretty thorough synopsis of last week. It was definitely an exercise in patience and error diagnostics. I was happy with how farI was able to get on my own in regards to error solving, so I feel like that’s solid progress. Here’s to a new week and fresh start!

Week 06

160411 – 160417 — Total classroom hours: 16.25

More Rails! Who would have guessed?! At least I’m starting to get comfortable with the process. That’s not to say I’m cranking through it now, but there’s a little less head-scratching. This week started off with associating the Posts and Topics. It was a long checkpoint, and the entire time I was thinking to myself “if the checkpoint is this long I can only imagine how long the assignment is”. The assignment wasn’t really that bad, it was long, but I basically followed the same process as the checkpoint and after a few hours I came out on top with ‘Sponsored Posts’ being associated with Topics. I must say, it felt like quite the accomplishment to make that all happen. It’s all about the small victories.

Next up was Validations, which was pretty logical coding and went relatively quickly. It was nice to knock another checkpoint out and move into something I was particularly interested in, User Models and Sign In capabilities. How do you know that I’m on the right track in the pursuit of a career in programing? I get excited about something called User Models, something I couldn’t have explained to anyone 3 months ago.

I’m excited about User Models because every website that you go to has a sign in, and I’ve always been curious as to what’s on the backend of that process. Its also something that has intrigued me about the digital environment we are all immersed in. We all have countless username/password credentials floating around the internet. I think it would be interesting to have a capability to scrub the entirety of the internet and accumulate all of one individual’s log-ins. I bet we have more personal information out there than we think.

Well, that was a nice sidetrack, but to get back to school, User Models and their respective authentications have gone relatively smoothly and I’m happy with the progress I’ve made so far. I’m still bypassing that last ‘Programming Reinforcement’ for now, hoping to find some time this coming week to chip away at some level 7 and 8 katas and chip away at that last set of challenges.

Week 05

160404 – 160410 — Total classroom hours: 17.75

Rails. Hours and hours and of rails. I don’t know why, but for some reason I thought that there would be a ‘break’ from the rails portion of the Bloccit project and I would have time to review it. That’s definitely not the case, I mean it’s all Rails until the end of the foundations block. But, what Bloc is doing with its curriculum is pretty helpful in that the rhythm is to work on a new section of Rails, then as the assignment you repeat those steps you had just worked on to implement another feature. I appreciate the teaching strategy, it allows me to do as much as I can from memory, and then when I get stuck I can review the checkpoint material. During the checkpoint material there are definitely moments where it feels like I’m not doing much more than transcribing into my text editor (I use Sublime with a bunch of add-ons that my good friend Corey helped me set up) what is in the Bloc browser. But, I’ve found that even doing something as simple as changing the letter used as the variable forces me to be conscious of what I’m typing and what the code is doing.

One thing I have had a little trouble with this week is the Codewar-based ‘Programming Reinforcement Checkpoint’. I spend 4 hours on only one challenge on Saturday and I still have some work to do on it before it’s even close to being done. After that I still have the other two challenges to complete. I don’t have a problem challenging myself, and I know that even the process of finding the resolution is making me a better programmer, but at some point there is a concern about how much time I am spending on each problem. I mean, 4 hours, that’s nearly one quarter of the entire time I have for the week, spent on one third of one checkpoint. Thats a lot of fractions in one sentence, but basically I feel like it’s taking me too much of my time.

Because the actual coursework is focussing on Rails, these three (Level 6) katas are the first time I’ve worked with Ruby since the last (level 7) katas a few weeks ago. I guess I have a hard time understanding the thought process as to how solving three katas at level 7 qualifies me for anything at level 6? Whatever reasoning Bloc has, its not working for me. The way I see it, there are several ways to approach a problem like this. I could just punt through the level 6 katas, probably having to run every step of the process by my mentor. I could just complain about it, how it’s not fair, too hard of a challenge, etcetera. Or, I could grab the problem by the horns and figure out how to resolve it. I’ll be doing the later. I plan on taking the next few weeks and working on more level 8 & 7 katas, on my own time, outside of class, until I have worked up the knowledge of Ruby to more efficiently solve the level 6 katas that Bloc has assigned.

No educational structure works perfectly for every student. I feel that curriculum is an outline of what needs to happen in order to accomplish a larger goal. Its up to the student to make that curriculum work within their own style of learning. So far I am very happy with what Bloc has had me do, and I will happily work a few extra hours a week on my own to fill some gaps. At the end of the day the goal is to get a job as a programmer, any and all experience I can obtain along the way will only help me achieve that goal.

Week 04

160328 – 160403 — Total classroom hours: 18.25

I was excited to start this week’s work with rails. I feel like I have a relatively good handle on Ruby (emphasis on ‘relatively’) and Im curious to see what this infamous Rails beast is all about. It started out, as most lessons into new territory do, with a few checkpoints of setup. What I find most interesting in this new endeavor is how even the most simple tasks can throw me for a loop. One aspect of the workspace was to set up an account and push the project to Heroku. It probably took me an hour to get a successful push to Heroku. When it was all said and done, and after abandoning the initial setup to start from scratch, I realized that I had not properly setup the git process (I added only the single README.md file, instead of add all) and that was preventing it from pushing properly to Heroku. So much of this whole programming ecosystem is about precision. Miss a comma, add an accidental spacebar stroke, give the monitor a weird look, and you’ll get an error. But what I love about it is that in almost all errors lies the solution to the error, you just have to know where to look.

Ok, so now everything is pushing to Github and Heroku properly, time to get rolling. Theres a lot of infrastructure to setup: controllers, routing, models, proper paths. To be completely honest, Im not confident that its all sinking in as much as Id like. There were definitely some points where I was typing what I saw in the browser into iTerm and crossing my fingers when it came to testing. About half the time the tests would fail when they were supposed to pass. But, as Ive come to learn, a failed test is a learning experience. When a test fails it forces me to ‘wake up’ from the copy/paste trance that I was in and find/resolve the problem. As Im digging through the last 5 minutes worth of code Im revisiting the exercise -usually multiple times- and its sinking in that much deeper.

I had some trouble with models (which are new to me) and git (which is not) this week, which was probably the biggest hurdle I overcame. The assignment for Checkpoint 28 was to take what I had learned in the lesson and create two new models that would reference each other. Sounds simple enough, after all, I had literally just spent the last hour and a half doing exactly that. I had some trouble, I tried to edit an existing table, I tried to remove a table, I tried to go back in git and start from scratch, but every attempt was failing. I was not surprised to be struggling with the models, but I really thought I had a handle on git and it was not responding the way I thought it would. The problem with the models was merely a matter of knowing how they can be manipulated, particularly the order of events that has to occur for edits to take place. And what I learned about git was that if you leave the changes you have made in the current branch uncommitted they will follow you around no matter how far back you go in the git history. Both resolutions came from my mentor

Don’t let the previous text fool you. As many problems as I have solved this last week I feel like my handle on Rails up to this point is weak at best. Once I complete the Rails checkpoints I plan on going back and reviewing the entire section again.

Week 03

160314 – 160320 — Total classroom hours: 14.75

This week the focus was on finishing the terminal-based address book app, address-bloc. Relatively speaking, it was a simple app, but it was a great example of the relationships between the specs, models and controllers. Having to make those elements and connect them to one another by hand (something Rails does automatically) helped drive home how each component worked contributed to the larger whole. This week’s checkpoints also dealt a lot with git and github, as every checkpoint and assignment needed its own respective branch. Its building good habits and muscle memory, constantly committing changes, pushing them up to github, and merging branches to master.

As much as the focus was on address-bloc, I spent nearly half the classroom hours on the Programming Reinforcement checkpoint, almost seven hours this last Saturday. Its pretty wild to think that it takes nearly seven hours to complete three challenges. When merely breaking down the numbers it’s a little crazy, but the time goes so fast when I’m actually working on the problems. Once again, the Programming Reinforcements are selected katas from the website Codewars, I see a pattern here and don’t expect that to chance any time soon. I appreciate the challenge, the first was titled Tube Strike with a math concentration and then a pretty standard if/then statement. The other two were Character Counter and Most Frequent Item Array, which definitely had me spending a lot of time on Google. After the Tube Strike kata, I believe I solved the frequency challenge first and was then able to apply a lot of that code to the character counting challenge. If anyone is interested, here are my solutions:

Character Counter: http://goo.gl/tLlsvP

Most Frequent Item Array: http://goo.gl/PCiphT

Tube Strike: http://goo.gl/f5JyBC

Since starting the program Bloc has changed the purpose of the Programming Challenges from purely extra credit to -what I gathered from the notification- mandatory, if I want to take advantage of their career placement assistance at the end of the program. Initially the change made me a bit nervous, but what it’s done is forced me to take the challenges seriously and push through any thought of giving up and moving on. Even as it is, it’s a little tough to spend hours on random challenges when theres curriculum to still be attempted as far down as the page will scroll. But I know that working through the Codewars challenges is actually more like the actual working scenario of a programmer than the classwork, so that keeps my drive up and the Google searches flowing.

Week 02

160314 – 160320 — Total classroom hours: 18.25

The first thing I did last week was physically write down my goals for the upcoming week. And when I say physically I mean clipboard, paper, and a sharpie. It wasn’t elaborate, only two items:

  • Complete Bloc up to Checkpoint 16
  • Upload blog post by Sunday PM

By Wednesday the list had been updated to:

  • Complete Bloc up to Checkpoint 16 17 20
  • Upload blog post by Sunday PM

The clipboard is on my desk, leaned against the wall, just above and to the left my eyeline to my laptop. Its always there, keeping me in check. I can’t remember the last time I’ve made and actual checklist for something, but I think it’s important for this program. I’m steadily keeping ahead of the course-designated timeline, so its good to have some kind of set parameters, otherwise it could seem like I’m just wandering around a dark cave of hashes and arrays with no flashlight.

I updated the goals as I progressed through the week because I realized that a majority of them were dealing with setting up a workspace, which I already had, so I knew I would cruise through them pretty quickly. At this point (Sunday AM) I’m just beginning Checkpoint 20, but I confident I will be able to complete it before end of day.

There were some solid programming challenges this week. I actually spent a fair amount of time on the ‘Extra Credit’ Checkpoint, which as of this week has been changed to Programming Reinforcement Checkpoint. In these checkpoints Bloc utilizes the website Codewars to reassess programming principles they covered in the previous checkpoints. They were relatively simple challenges, in that the ‘answers’ weren’t much more than 3-4 lines, but they kicked my ass a bit.

After spending 2 unsuccessful hours on one particular challenge I enlisted the help of the husband and wife super programmer team Corey and Emily Davis. Together we found a working solution and then I worked backwards to see where my attempts had failed. At some point -especially early on in the learning process- I feel that it is more efficient to be given the answer and then work through it to see where my attempts went wrong. Both Corey and Emily are great teachers who thoroughly explain every step of their thought process while helping me find the solution, they are an incredible resource to have.

I am starting to dive into the first project-based checkpoints where we build an address book. The foundation lessons are really coming into play, and writing the tests before the code to make the tests pass (TDD) forces me to fully consider what I want each block of code to do. I have done similar projects with another ruby education program, but it was a lot of just trying to mimic what they were doing into my own text editor and get the tests to pass. What I was actually having the code do was not sinking in. Both the pace of the Bloc curriculum, and having done something similar before, are big factors as to why I feel more confident in the application that I am building now.

I haven’t dug too hard into what will be happening next week, but by just looking at the roadmap it looks like I should be finishing up the address book app and complete another Programming Reinforcement Checkpoint. As the curriculum gets more difficult I doubt I’ll be able to keep my current pacing, but I’ve definitely given myself a solid start so I’m not too concerned about it.

Week 01

160307 – 160313 — Total classroom hours: 14

The first week of Bloc is under my belt and I’m feeling pretty good about it. My mentor is engaging, enthusiastic, and timely to both answer my questions/comments and approve my submitted assignments. The infrastructure of the learning platform seems well thought out. The main homepage is referred to as the ‘Roadmap’ where it is easy to see progress and what still needs to be accomplished to reach the goals for the week (which is determined by the pace chosen at the beginning of the program).

The curriculum is setup as such: text-based explanation of the subject, code assignments to confirm understanding of the subject, then video ‘answers’ to the code assignments. Within the explanation of the subjects, as well as the assignments, there are often links to help explain things in more detail. They also encourage Googling any questions you might have during the process. To some this may seem like laziness on the part of Bloc, but every programmer I’ve ever spoken to has told me that Google is always the second tab open on their browser and that knowing how to search for answers is just as important a skill as knowing proper syntax.

I was able to surpass my weekly goal of 5 checkpoints, primarily because I have been doing a lot of prep work before starting the program with Bloc. The first 5 checkpoints were things I have learned before, and I was able to cruise through them pretty quickly. Then things started picking up and I was finding it pleasantly challenging. I was submitting assignments nightly, and my mentor typically had them approved and commented upon before noon the next day.

My goal with this program is to push as hard as I can, and not take a break until there’s a good stopping point in the curriculum, which is what I accomplished this week. I made it through checkpoint 11 (Ruby: Advanced Classes) which seemed to me to be about as far as I wanted to go before discussing my process with my mentor. I’m not simply blazing through assignments, just to check them off the list. I work a problem until I feel that I fully understand it, and at this point I’ve compiled enough questions that I feel it would be best to take a break until I can run all of them by my mentor.

I feel great about my progress so far, and as long as the meeting on Monday evening goes well, I’ll have some good momentum going into Week02.

Why the blog, why Bloc?

This blog is meant to serve two purposes, first and foremost this is a way for me to digest everything I have learned and experienced in the previous week. The second purpose is to shed some light on a learning process that is relatively new. Before I get into the meat of the post, a little disclaimer that this is initially going to be a bare-bones blog site, and I will be slowly improving upon as I go.

Code bootcamps aren’t necessarily new, people have been landing successful careers out of boot camps for years. Online bootcamps are also not a new concept, but an online curriculum with a dedicated mentor to accompany you from beginning to end is a relatively new business model, and let’s be honest, bootcamps are businesses. To be completely honest, I didn’t think a mentor-based online program would work for me, primarily because of the costs. I was convinced that I would be taking the hard road and teaching myself. It wasn’t until my girlfriend emailed me a page of links and syllabi from multiple programs after a morning of digging around the internet that I realized it may be a feasible option.

I had a lot of options, but after researching more extensively, three really stood out: CareerFoundry, Thinkful, and Bloc. CareerFoundry has a price that can’t be beat, but after looking at their program it seemed unrealistic that I would be a full-fledged Web Developer after 6 months of 15 hours a week. Thinkful looked to have a solid curriculum, but the pricing structure didn’t seem optimal for my situation. They have a monthly payment plan, basically pay until you finish, which at their rate and my timing structure, would end up being a pricey venture. So, as I’m sure you can surmise, that left me with Bloc. I liked Bloc’s curriculum, they had an appropriate pacing schedule for me (I’m still working a 40+ hours/week job while taking the course), and they give you access to the curriculum for life. It seemed -and still seems- like a good fit.

Coursereport is by far the best one stop resource for everything bootcamp research related. The one caveat with the reviews, particularly with programs that have an ‘accept everyone’ policy like most online programs do, is that the reviews can be all over the board. You really have to look beyond the star ratings and read the comments to see what the reviewer is commenting about. That brings me back to the second reason I’m writing about my experiences weekly. I had a hard time finding any detailed, relatable experience regarding any of the online mentor-based programs. Even after all the research I did, I still feel like I’m ‘winging it’ pretty hard.

And, finally, in case anyone is wondering, I am not being compensated in any way -by any company or institution- for writing these posts. These are my thoughts and my thoughts alone. This could ultimately be a series of posts describing my successful push into the programming realm, or a documented downward spiral into the abyss of an unsuccessful online learning experience. Only time will tell.