I worked through the excellent introductory course to Ruby by Boris Paskhaver on Udemy.com (https://www.udemy.com/learn-to-code-with-ruby-lang). The following is a list of things the course has either taught me or refreshed in my mind, which I hope will be of use to others.
Showing posts with label study. Show all posts
Showing posts with label study. Show all posts
Wednesday, May 16, 2018
Tuesday, May 1, 2018
Monday, April 30, 2018
@AnthonyPAlicea's NodeJS Completed
@AnthonyPAlicea's #NodeJS https://www.udemy.com/understand-nodejs gave me a solid grounding in key concepts and included simple, useful code for review and analysis. I can now, from memory, write a basic web server in NodeJS and understand exactly what it does. Now for #JavaScript https://www.udemy.com/understand-javascript
Building an API on NodeJS with Mongoose
I spent a couple more pomodoros than expected, but I cleared up a couple of points of misunderstanding about working with MongoDB. Prima facie, NoSQL makes sense, and certainly seems more attractive than working with a relational database. I've heard from some people who are more accustomed to working with MySQL and PostgreSQL that MongoDB doesn't scale well, but I don't have enough commercial experience of the two approaches to have an opinion yet.
I find this approach, of writing the code out by hand, is an excellent way of forcing myself to slow down and meditate on the material. I bear in mind that I save myself time on Stack Overflow in the long run; and at any rate, it makes me more self-reliant and better at RT(F)M.
Wednesday, April 18, 2018
950 Hours: New blog name, JavaScript, NodeJS, etc.
Mission WebDev
Mission DevOps is now Mission WebDev. Nothing much else in the blog will change, but it represents the next stage in the evolution of my career as a software developer. Since I updated my online profile to reflect this, I have attracted more interest, which is always a good sign. I am working my way through a couple of courses online to lay a strong foundation for front-end development, so in this pomodoro cycle I have covered, inter alia, the following topics:HTML/CSS/JavaScript
- Basics of HTML
- Basics of CSS
- Basics of Bootstrap
- Basics of JavaScript:
- Control Flow
- Functions
- Arrays
- Objects
- Basics of DOM Manipulation
- Basics of jQuery
NodeJS (Mostly theoretical)
- V8 JS Engine
- Node core
- modules, exports, require
- Events and the Event Emitter
- Asynchronous code, libuv, event loop streams, files, etc.
Study Goals
My goal for the next pomodoro cycle is to complete the following courses online:
It's not an easy course because Alicea goes deep into the Node core and takes the time to explain concepts in exacting detail. Lots of gestalt moments to be had.
I'm so impressed by Alicea's treatment of NodeJS so far, that I trust his JavaScript course will give me the deep understanding I'm looking for.
A great educational framework. I've put it on hold until I complete the other two courses, and will probably park it at certain points in order to supplement my knowledge in other areas, but it's the best overall guide to becoming a web dev that I've found so far.
Coding Challenge
In addition to the course, I've set myself the challenge of working my way through last year's Advent of Code in JavaScript. If I can complete all these challenges, I'll be satisfied with my proficiency in JavaScript and be confident in mastering a web development framework.
React or Vue?
I'm still undecided, but it's probably not something I'll have to address before I hit 1,000 (!!!) hours in my mission to become a fully fledged (and employed) web developer.
See you in a hundred pomodoros.
Monday, October 2, 2017
1,300 Pomodoros: Humility, Gratitude, Motivation
| 650 hours very well spent, but hardly an excuse to rest on my laurels. |
Humility: Knowing Your Place
As a junior developer, all my considerations start from recognising the humbling fact that my company does not need me, yet.
So far, time and money spent on me have not profited the company.
As things stand, the company would be better off without me.
So far, time and money spent on me have not profited the company.
As things stand, the company would be better off without me.
If I do not significantly improve over the coming weeks and months, the case for terminating my position at the company will consolidate; reasons to keep me, evaporate.
Gratitude: Accepting Responsibility
In light of these discomfiting understandings, it is clear that a great responsibility is placed on my shoulders. In spite of my limitations, my boss sees potential in me, and has already gambled a substantial amount of time and money on helping me get to my present position. Even if I can't see how I am to cross over into profitable productivity, he can, and because I trust and respect his judgement, the onus is on me to find a way to come good.
The way I look at my internship is that the company — without really needing to do so — is giving me a gilt-edged chance to build a compelling business case for hiring me. I have access to the code base, I can ask for help, I have an excellent Linux-based System 76 laptop, and most importantly, I have a generous allotment of goodwill and trust.
Motivation: Hunger and Hope
So what does this mean for me in practice? It means staying hungry and hopeful.
It means getting up every morning with a strong determination to do my best right now, for the next twenty-one minutes, and the next twenty-one minutes, and the next, until the end of the day.
It means poring over every detail of my assigned task, taking notes, searching for key terms in the code, reading and re-reading the manual.
It means making sure I've done everything I can and have the best possible understanding of the matter before contacting a senior developer, and then asking the most specific, intelligent question I can put together.
It means overcoming the fear and frustration, the anger and anxiety, of not knowing the answer, day in, day out.
It means being honest with myself and making available a regular feed of how I'm getting along; not a sugar-coated status update, but an unobtrusive stream of reports by means of which those above me can realistically appraise my progress.
It means reminding myself of where I started and where I want to be.
And finally, it means that as long as I am in the game, I have everything to play for.
It means making sure I've done everything I can and have the best possible understanding of the matter before contacting a senior developer, and then asking the most specific, intelligent question I can put together.
It means overcoming the fear and frustration, the anger and anxiety, of not knowing the answer, day in, day out.
It means being honest with myself and making available a regular feed of how I'm getting along; not a sugar-coated status update, but an unobtrusive stream of reports by means of which those above me can realistically appraise my progress.
It means reminding myself of where I started and where I want to be.
And finally, it means that as long as I am in the game, I have everything to play for.
Wednesday, August 30, 2017
First Successful Pull Request
- A new IDE. (Rubymine instead of Atom)
- Tighter security settings around my Github account, which is rather a good thing.
- Getting a large and complicated server with many dependencies running on my machine.
- Getting a new System76 Gazelle Linux box. (Amazing!)
- Writing RSpecs at a level of complexity far above anything I've learned.
- Using Rubocop — really not hard, I actually quite like it.
To a seasoned programmer, it was a small thing, but it is a momentous occasion for me.
And may it be the first of many.
Thursday, July 6, 2017
Wednesday, June 7, 2017
HTML and CSS Is Suddenly A Lot More Interesting
I don't know why, but somewhere into the freeCodeCamp HTML/CSS foundations challenge, I suddenly found myself enjoying it. I am, of course, quite familiar with the basics of HTML and CSS, but I had never found it especially compelling; I was happily absorbed in Ruby for hours and hours, but couldn't have imagined that I'd enjoy the building blocks of front-end.
Nevertheless, something clicked for me, and I am going to focus intensely on HTML and CSS for a while, before moving on to jQuery and JavaScript.
Tuesday, June 6, 2017
Coming Back from Disappointment: A New Chapter
Review: Putting it all in context
After 700 pomodoros of studying, coding, blogging, and job-seeking spanning five months, I am still without my first job as a junior developer. The hardest part of it all is maintaining an optimistic outlook after repeatedly being turned down, especially after the excitement of performing so well in numerous interviews.But that won't stop me. There are identifiable reasons for my failure, and the good news is that all the things cited are eminently improvable and correctable:
- Quite simply, the quality of my code, into which I have poured so much effort, is still not good enough in the estimation of the interviewers. This is good news, for I can learn from their feedback and code to a higher standard.
- After one poor performance in a pair programming interview, I handled myself well in very similar conditions three days later. I know where I went wrong in the first one; I know what I did right in the second. I can build on this.
- I need to familiarise myself with the core competencies, frameworks, and tools of front-end development. My plan was always to give myself a solid foundation of programming in Ruby and a basic sense of DevOps with Vagrant and Docker, and although there is room for improvement in that regard, the task of getting really good at HTML, CSS, Rails, Heroku, etc is now a lot easier.
Add to that, I have gained a lot of contacts, spent plenty of time at meetups, made good impressions on many people, and have a highly sophisticated approach to learning and time-management.
So all things considered, I am many miles further down the road than when I set out on this journey at the beginning of the year.
Where to from here?
Rails
I think I'll muscle through Michael Hartl's Rails tutorials. Although there are many good ones, this one is updated to Rails 5 and seems to do a fair job of sticking to the core knowledge. The Odin Project looks good as well, but there's no point in jumping around from course to course.
HTML/CSS
Many experienced developers tell me that most juniors today are pretty weak on HTML and CSS, having jumped straight to boilerplates, JavaScript, and plugins.
As with other endeavours, I believe wholeheartedly in mastering the fundamentals. It is hard to make such a commitment to something seemingly outdated, but I believe it will benefit me greatly in the long run.
JavaScript
The debate between Ruby and JavaScript rages on, and I have heard it said from those in the front-end world that the only language you really need is JavaScript these days. I am glad I chose to learn through Ruby, and having gained a grasp of the fundamentals, learning JavaScript will be less daunting from here on out.
Summary
As much as I'd love to have been picked up by a company already, I am not really behind schedule at all, all things considered, and having taken some time to relax, recharge, and review, I am now keenly looking forward to the next couple of months.
Wednesday, May 31, 2017
Thursday, May 18, 2017
State of the Mission: 700 Pomodoros!
Update:
Now up to 800 pomodoros.
Pomodoro Count
Since the beginning of this year (2017), I have invested a total of 700 pomodoros towards the following:- Studying programming
- Coding
- Looking for work
- Self-promotion on social media
What Do I Have To Show for My Efforts?
I have a growing body of code: https://github.com/clockworkpc
I have interviewed strongly for junior positions at a number of companies:
- Envato (2nd round)
- Zendesk (1st round)
- reinteractive (2nd round)
- GreenSync (3rd round)
- MYOB (3rd round)
- BlocksGlobal (3rd round)
The feedback has been overwhelmingly encouraging, and with each interview, there is evidence that I am even closer to having the package of skills and knowledge that will distinguish me from other candidates. Moreover, most of the companies have pointed out to me the precise areas of improvement, and I have incorporated their feedback into my curriculum.
Do I have a job yet? No.
Am I moving inexorably in the right direction? Absolutely.
What Is A Pomodoro?
![]() |
| Italians have been bemused by this term ever since, I imagine. |
One pomodoro is 20 minutes of pure, uninterrupted, focused work.
For about 60 seconds before I start the clock, I orient myself; for about 60-120 seconds after the clock rings, I summarise my work.
Add to that the time spent getting up from my desk and making notes on the whiteboard, and that comes to about 25 minutes when all is said and done:
- Preparation: 1 minute
- Pomodoro: 20 minutes
- Summary: 2 minutes
- Whiteboard: 2 minutes
- Rest: 5 minutes
Thus, allowing five minutes of rest between a pomodoro and its surrounding activities, one pomodoro amounts to half an hour of productive labour.
Working on the assumption that about five hours of a software developer's eight-hour day are spent on his primary task (coding), and the rest is taken up by meetings, etc, this means that 700 pomodoros are the equivalent of...
- 350 hours of productive labour
- 70 working days of productive labour
- 14 working weeks of productive labour
Pomodoros: A Photographic Overview
Unfortunately, I did not record my pomodoro counts fastidiously from the outset, so some of the data are missing, but a glance across photographs of the completed pomodoro cycles, shows that the amount of time spent on each activity varied. Sometimes I was focused on my studies, sometimes on coding, sometimes on looking for work.
I spend the least amount of time on promoting myself through social media, which makes sense, because it is more important to me to learn how to code, to code, and to look for work, than to blog and network on LinkedIn and Twitter.
16th of January 2017 to 30th of January 2017 (200)
(Image lost to oblivion)
31st of January 2017 to 15th of February 2017 (300)
16th of February 2017 to 6th of March 2017 (400)
7th of March 2017 to 30th March 2017 (500)
1st April 2017 to 23rd April 2017 (600)
(Image lost to oblivion)
April 24th 2017 to 10th of May 2017 (700)
Friday, March 24, 2017
Thursday, March 23, 2017
Ruby Achievement Unlocked, Time for Rails
Having reviewed my solutions to the first three Days of puzzles of Advent of Code, I am now comfortably proficient in the fundamentals of programming in pure Ruby.
When presented with a problem, I am confident that I can do the following:
Thereafter, I am now confident that, given enough time, I can solve the problem. There is room for vast improvement, but that will come with time.
I really enjoy the daily solution of programming puzzles, and would love to solve all fifty; however, my duty is to prioritise my studies according to optimal employment criteria, and there aren't a lot of jobs going for junior developers who specialise in solving fun puzzles in pure Ruby.
Having passed this milestone in my learning, I am now ready to hit the books again. My study plan encompasses the following:
To gain experience in upgrading older Rails versions, I could probably clone the source code of an existing Rails to a virtual machine, on which an old version of Rails is installed. However, this is a lower priority.
As all who know me can attest to, I can learn and work quickly and efficiently, and am adaptable and resilient. I also take pride in managing expectations between multiple clients and communicating with both clients and colleagues.
For the next couple of weeks I will focus primarily on the Rails framework by working through Ryan Bigg's promisingly large tome: Rails 4 in Action. In this way I expect to establish a thorough grounding in Rails and also a gain a perspective on the changes from Rails 4 to Rails 5, which could come in handy if I ever work on a legacy codebase.
When presented with a problem, I am confident that I can do the following:
- Define the problem
- Describe the solution broadly in programming terms
- Denote the likely classes and methods to be used therein
Thereafter, I am now confident that, given enough time, I can solve the problem. There is room for vast improvement, but that will come with time.
I really enjoy the daily solution of programming puzzles, and would love to solve all fifty; however, my duty is to prioritise my studies according to optimal employment criteria, and there aren't a lot of jobs going for junior developers who specialise in solving fun puzzles in pure Ruby.
Having passed this milestone in my learning, I am now ready to hit the books again. My study plan encompasses the following:
- Build a website in Ruby on Rails to showcase my Advent of Code puzzle solutions. This includes the following:
- Deep knowledge of Rails
- Proficiency in Javascript
- Proficiency in JQuery
- Proficiency in HTML/CSS
- Proficiency in PostgreSQL and/or mySQL
- Writing automated tests in RSpec (my preference) or Factory Girl
- Host the website on Heroku
- Additionally, I will further my knowledge of the following:
- Coffeescript
- Haml
- Amazon Web Services: it would be good to know which services are of the highest priority, as one could spend a lifetime on there.
To gain experience in upgrading older Rails versions, I could probably clone the source code of an existing Rails to a virtual machine, on which an old version of Rails is installed. However, this is a lower priority.
As all who know me can attest to, I can learn and work quickly and efficiently, and am adaptable and resilient. I also take pride in managing expectations between multiple clients and communicating with both clients and colleagues.
For the next couple of weeks I will focus primarily on the Rails framework by working through Ryan Bigg's promisingly large tome: Rails 4 in Action. In this way I expect to establish a thorough grounding in Rails and also a gain a perspective on the changes from Rails 4 to Rails 5, which could come in handy if I ever work on a legacy codebase.
Monday, March 6, 2017
Creating a City Grid with Negative Axis Values
From the Toy Robot solution by Ryan Bigg, I learned how to create a table starting at 0,0 in the bottom left corner, which has valid positive coördinates only:
However, for the solution of Day 1 of Advent of Code, I had to make a modification. I don't know how big the city grid needs to be, nor whither the explorer will be taken by the directions.
The most practicable solution is to place the explorer right in the heart of the city, but that can be achieved in one of two ways:
Positive Values Only:
- Create a city axis that runs (0..latitude) west-to-east and (0..longitude) south-to-north.
- Place the explorer at the coördinates (latitude / 2), (longitude / 2)
Positive and Negative Values
- Create a city axis that runs (-|latitude| .. latitude) west-to-east and (-|longitude| .. longitude) south-to-north.
- Place the explorer at coördinates (0,0)
I opted for the latter, as the first option would could give me awkward starting coördinates such as (250.5, 250.5) if the city grid were initialised with odd numbers. (501, 501)
Also, it seems neater to me that west and south should be negative integer values, east and north positive.
So here it is:
Subscribe to:
Posts (Atom)
1,050 hours
It took me 13 working days to complete my first 100 "work" pomodoros as a Junior Software Tester at Profectus Group. Much of ...
-
It was not a happy day when I passed the official milestone of 1,000 hours of trying to become a developer. I was still without a job,...
-
If, for some reason, you need to familiarise yourself with AngularJS, i.e. Angular 1, I can strongly recommend this free course by Sco...
-
It took me 13 working days to complete my first 100 "work" pomodoros as a Junior Software Tester at Profectus Group. Much of ...

























