Showing posts with label study. Show all posts
Showing posts with label study. Show all posts

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.

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.

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.
It's been about a month-and-a-half since I started my internship at Gleam.io and now is as good a time as any to reflect on humility and gratitude.

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.

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.

Wednesday, August 30, 2017

First Successful Pull Request

The last three weeks have seen my eleventh pomodoro cycle (1,100 completed), and my first as an intern at Gleam.io.  My learning curve is very steep, for it includes, amongst other things:
  • 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.
Edging out the excitement of my very own System76 laptop — I've been on cloud nine since Gleam.io generously purchased it for me — is my first successful pull request.

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.

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:

  1. 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.
  2. 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.
  3. 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

Back to Rails and Heroku

Getting started with Rails is not a lot of fun, but I'm up and running again.


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.

2nd of January 2017 to 15th of January 2017 (100)



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

Rails Study, Day 1

Not much to report, got my Rails up and running, and worked through two chapters of Rails 4 in Action.

Rails Up and Running

There's nothing like the hum of a mint Rails installation starting up for the first time.


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:

  • 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:
  1. Create a city axis that runs (0..latitude) west-to-east and (0..longitude) south-to-north.
  2. Place the explorer at the coördinates (latitude / 2), (longitude / 2)
Positive and Negative Values
  1. Create a city axis that runs (-|latitude| .. latitude) west-to-east and (-|longitude| .. longitude) south-to-north.
  2. 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:


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