Daily Update #13
I don’t know why I didn’t sign up for CodeSchool earlier. The way the courses are delivered is excellent, the challenges are usually pitched at the correct difficulty level, and combined with the approach to studying I was talking about before, everything you learn is easily applicable to your own projects.
Yesterday I completed Ruby Bits 1, which looks to teach best practices and demonstrate how to write more readable and maintainable Ruby. I learned quite a few nice little tricks and idioms from this course, so it was worth the diversion. Some of the nice things I learned are:
- How to use methods from externally maintained modules
- Using include to expose methods as instance methods, and extend to expose them as class methods
- Namespacing methods, and why this is important
- Efficient use of blocks
- Basic of reviewing code to refactor it
- Using case statements - when/then
- Conditional assignment (when we call var ||= foo it will return contents of var if it has been set, or foo if it has not)
Some of this might be basic, some is a little more advanced, but it’s all “beginner” level stuff I was missing. There was some stuff in this course that I was less sure of, and I’ll probably go back and review them again at a later date.
For example, they covered method hooks and also ActiveRecord::Concern. Both of these made sense when I was doing them but I don’t think I could use them in my own project in a few months.
Today I need to do things other than sit in my study and learn, but I want to get a start on the Rails for Zombies course. The reason I’ve jumped back to tutorials is because after a brief jump into Rails on my own, I think I still lack some basic knowledge about Rails and Ruby itself.
I am sure I could work through this by working on my own projects, but that is a very hard and long road, and honestly, I have been on a long and hard road for a while now. There is an embarrasment of riches when it comes to up to date, entertaining and incrementally structured Rails courses annd books for very cheap or even free, and I really want to enjoy them.
I learned the basics of backend web development with Sinatra, and everything I found to learn about Sinatra was pitched at people who already knew these basics. I did this on purpose, so that I had to learn things “the hard way”. And this is what happened.
I’m fairly comfortable with my basic knowledge of REST and HTTP verbs and while I couldn’t write my own, I understand how user authentication works. I learned how to work with an ORM, session-based cookies, and a host of other smaller things that come in handy with Rails, such as routing, and the MVC framework.
By the end of this month, I’ll have completed the following courses (including those I’ve already done):
- Try Ruby
- Ruby Bits 1
- Testing with RSpec
- Rails for Zombies Redux
- Rails for Zombies 2
- Rails Testing for Zombies
This will take me to 60% on the CodeSchool Ruby path. The remaining courses are more advanced, and I do want to complete them, but I really need to jump into personal projects as soon as possible. This blog as been created with Jekyll, which took about a minute to install and deploy, and about 30 minutes to understand enough to start using it as a blog. I’d like to migrate all this content over to my own Rails blog with a CMS I’ve build myself. For future reference, here’s a number of other Rails projects I’d like to do:
- Sell my books online - I have loads of books I want to get rid of, enough to have my own book shop…
- UFC History - I want to create a blog and podcast around watching and discussing old UFC events
- Neo Brills.me - This is a great little tool, which I’d like to build for myself in Rails
- Value calculator - I want to have a completely private website that will allow me to enter all details about the projects I work on as a project manager, and calculate the value I have provided my company in cold hard cash. It would show the total cash value of projects between given dates, remove/add money based on over/underbudget then let me know the total, and give me a rating of underperforming/average/overperforming.
This last one will be my capstone project which I’ll deliver to my boss. The idea being I can negotiate a higher salary based on both the results of running this tool, and the tool itself! That’s the plan anyway.