Monday, June 11, 2018

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 my time has been spent deep in documentation, trying to learn the key rules that govern Profectus RDM software, and I have even knocked off a couple of very simple testing and support cards.  My definition of a "work" pomodoro is time spent either in research or in writing, or put another way, time spent that I have something to show for afterwards, be it a completed card, communications with the team, or my own notes.  Breaks, chats, meetings, exercise, and anything that cannot be classified as productive work is not counted as a "work" pomodoro.

My daily average of "work" pomodoros for this cycle was 7.69, or a bit over 4½ hours, which taking into account time spent in meetings, stand-ups, and generally finding my way around the office, it's not too bad.  I predict that over the long term my daily average will sit between four and five hours, with the other two hours being taken up mostly in meetings of various kinds.

Everyone in my team is friendly and helpful, and although there is plenty to learn, I haven't been thrown in the deep end, and I am entrusted with the autonomy to chart my own path to proficiency.

We'll have to wait until August for my second pomodoro cycle, as I will be off from work after this week until I get back from my honeymoon.  Life is a lot brighter in light of a job to come back to.

Looking forward to doing plenty of good work upon my return.

Thursday, June 7, 2018

1,000 Hours in Code: What Do I Have To Show For It?





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, and long, painful experience had taught me that interviews in the offing counted for little.

So I saved this photograph in a draft of this post, wiped my board clean, and stenciled out the twenty-first matrix.  I intended to write a blog post about how far I've come in my coding journey and all the things that I can work with now, of which I had scant knowledge a year-and-a-half ago — Ruby, Rails, coding puzzles, HTML, CSS, JavaScript, etc.  Instead, I turned off my computer and went to the gym.

A career change is always hard, and these days no-one cares much for the travails of a married man who dreams of providing for his family.  Looking for work is laborious, thankless, frustrating, exhausting, and depressing.  But what's the alternative?  I had to keep on going.

So the next day I turned on my System76 computer, for which I am most grateful, and spent the next few days studying hard on Udemy.  I put thoughts of whether I might get a job out of my mind and concentrated on studying and writing code — which, despite all the frustrations, I enjoy for its own sake — and to cut a long story short, fortune smiled on me two weeks later.

Those of you who follow me on LinkedIn will have noticed a small, but rather important update in my profile:


It's been two weeks in the job and I've almost completed a full cycle of pomodoros of productive work.  After going to roughly twenty interviews, someone finally agreed to give me a chance, and I think my colleagues will agree that I've grabbed it with both hands.

So, it didn't take me exactly 1,000 hours, but rather 1,015½ hours, but what do I have to show for it?  A mission accomplished and a career change effected.

Of course, in an important way, my work has only just begun: time is limited and there's lots to learn.

But if there's one thing I'm good at, it's making the most of my time.

Tick, tock, and all that.

Wednesday, May 16, 2018

112 Things I Have Learned about Ruby Programming



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.

Thursday, May 3, 2018

Tuesday, May 1, 2018

Insight of the day: an IF statement relies on coercion


From @AnthonyPAlicea's course on #JavaScript, Lecture 27: https://www.udemy.com/understand-javascript/learn/v4/t/lecture/2237498?start=0
A real lightbulb moment for me.

Scope chain in Javascript

A global variable is accessible from within a function in Javascript.

#JavaScript execution stack



This explains so much.

Monday, April 30, 2018

'Learn and Understand' NodeJS by @AnthonyPAlicea completed

var myStatus = { 
  courseName: 'Learn and Understand NodeJS',
  author: '@AnthonyPAlicea',
  completed: true,
  satisfied: "very true ++"
}


Don't rely on JavaScript hoisting



Even though the #JavaScript engine pre-loads functions before executing them, that's no excuse to rely on hoisting. I'll declare my variables upfront.

@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.

Saturday, April 28, 2018

JavaScript on both ends



After 4 pomodoros on @AnthonyPAlicea's NodeJS course, Lecture 90, I think I understand how JavaScript code runs on both front and back-end.

Looking at this code, I can see how the array of JavaScript objects is declared on the server (/app.js), then passed on to the view (/views/index.ejs), converted to a JSON string, is made available to the AngularJS controller, which then manipulates the JSON object in the client.

As I go through the code line by line, I ask myself continually:

Where does the program get this from?
Where is the variable declared?
How does this part of the program have access to it?

In this way, I can always see, piece by piece, how it all fits together.

Unless of course I'm using Rails, in which case one must have faith in its sugary magic.

Thursday, April 26, 2018

AngularJS makes more sense now



From the NodeJS course by @AnthonyPAlicea.  Important to me because I can go line by line through the code and tell you exactly how it all fits together.  Check it out if you're a junior web dev, his explanations are first rate: https://t.co/sq2aiS18UC

Tuesday, April 24, 2018

Controllers make a lot more sense now



I'm working through Anthony Alicea's "Learn and Understand NodeJS" and Lecture 79 helped me to make sense of the problem that controllers are meant to solve.



Monday, April 23, 2018

Added an HTML Escape keyboard shortcut to turbo-javascript Atom Text Editor package


A little bit of tinkering in Coffee script to make it simpler to type <%= %> in EJS and other template packages.  It works for me, so I cloned the source code from git and sent a pull request on a proposed branch.  It took two pomodoros away from my studies, but I think it's worth it in the time and effort and frustration it will save me.  Also, it's neat to tinker with a package to make it better — there's value in it for its own sake.

Sunday, April 22, 2018

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, February 26, 2018

900 Hours and Counting


This pomodoro cycle stretched out a fair bit.  At the beginning of the year my internship with Gleam.io came to an end (under the most favourable circumstances, for the very best of reasons) and I gave myself some time to review the experience and work out the next steps.

Life got in the way of my studies for a while, but I've been plugging away at various online courses.  One of the best things about my time at Gleam is that I have much clearer idea of what I need to focus on in order to improve most rapidly.

For the next while, my focus will be on front-end-related skills, especially HTML/CSS/JavaScript.  I'd like to get good at using Vue.js, which I know is a little niche at the moment, but I think it's the way to go for the next few years.  EDIT: In light of some advice from senior devs, I might focus on React.js instead for a while.

At the beginning of this journey, I joked that I'd have complete 2,000 pomodoros (1,000 hours) before I'd be a strong enough candidate to land a permanent junior role.  I'm now at 1,800 pomodoros (900 hours) and my joke may turn out more prophetic than I intended it to be.

Friday, January 12, 2018

A Word of Thanks to Gleam.io

I wish to thank Gleam.io for the invaluable experience of working as a junior software development intern from August 2017 until January 2018.

When I started my internship, I had about seven months' self-study of Ruby and Rails, with a smattering of HTML, CSS, Github, etc.  During my time at Gleam.io, I got to learn the ins-and-outs of a large commercial codebase, and saw first hand how an excellent product is built, maintained, and supported with intelligence and empathy.

I navigated the choppy waters of dependencies and got a complex commercial application running on my local Linux machine.  (I also updated the README to make life a lot easier for the next person)

I got a bunch of pull requests approved.



I made mistakes, and learned from them, in using Github.

I kept on using Rubymine until it made sense to me.


I spent countless hours reading the code, hunting for clues; Google and Stack Overflow were my constant companions.

I wrote tests that failed, then passed, then failed again, then passed.



I went mountaineering on a learning curve of Ruby and Rails, especially Rails; now I understand essentially how it fits together and is used to build websites that serve the needs of customers. 

A fair representation of the ardour and the rigour of studying Rails.

I got to pair program a bit and work remotely a lot — I enjoy them both very much.



In short, I was given every opportunity to learn from seasoned veterans, the value of which is beyond measure, and was treated with tolerance and respect by everyone on the team.

Chief amongst the myriad things I am grateful for is the self-confidence I am imbued with.  When I started my journey into software development, self-belief was one part reason, two parts faith.  But now I can say that someone saw the potential in me, even though I didn't have the requisite skills and knowledge for the role, and gave me a chance to fail and succeed, fall down and pick myself up.  

The guys at Gleam.io didn't have to take me on, but they did; they didn't have to invest in me, but they did.  They allowed me to see how I measure up against people who have been working with software for half my lifetime, and what I saw (although daunting at times) gives me great hope for my own prospects as developer.

Now that I have been part of a commercial development environment, I know for a fact that I can become a genuinely good developer with a reasonable amount of study, regular practice, and some guidance.  I will apply for junior development positions confident that the requirements of the role are well within my zone of proximal development.

Every time I turn on my System76 laptop (currently running Ubuntu 16.04.1 with Gnome Shell, but I might switch to Arch), I am reminded of the countless kindnesses shown to me, and take heart that the Next Big Thing in my journey is just around the corner.

Internship at Gleam.io told through Pomodoros






















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 ...