Sunday, August 23, 2015

Day 135: Ch 73 Objects: Constructors for Methods

I'm starting today on Chapter 73 Objects: Constructors for Methods.  I read the chapter, but the material it goes over relies heavily on the information I went over in the most recent chapters, so I went back and read from chapter 69 all the way to chapter 73 again, to refresh the concepts in my mind.

So let's refresh.

Properties are simply variables attached to an object.  Here's an example of an object and property pair:

plan2.name

plan2 is the object, while name is the property.  Here's a straightforward way to define an object and its properties:

var plan1 = {
  name: "Basic",
  price: 3.99,
  space: 100,
  transfer: 1000,
  pages: 10
};

plan1 is the object name.  The properties within are in this format, "name: value" with a comma after each value, except for the last.

Here we are adding a property with an array as its value

plan1.discountMonths = [6, 7, 11];

So that would mean that July, August, and December are the discount months (remember that JavaScript assigns 0 through 11 for the months of the year).  This would refer to the "11" in the array:

plan1.discountMonths[2];

That's the object name, the property, and the index of the desired value in the array.  You could change the value of that value like so:

plan1.discountMonths[2] = 10;

That's it, that would change the third item in the array (index value 2), to 10 (November).  This works also:

plan1.name = "More than Basic";

That would change the value of the name property from "Basic" to "More than Basic."  To create an object without any properties, you can do this:

var plan2 = {};

You can insert an property into the object and give it a value of undefined, like so:

plan2.price = undefined;

Undefined should not be in quotation marks, because it is not a string.  If you want to delete a property of an object, you can do so like this:

delete plan2.price;

Note that that would delete the actual property (price), along with any attached value, such as undefined in the case above.  You can check if a property exists in an object, like so:

propertyExists = "space" in plan2;

JavaScript will return a value of true or false for the code above.  

When a variable is attached to to an object, the variable becomes the object's property.  When a function is attached to an object, the function becomes that object's method.  To do so, you would do the code like this:

 var plan1 = {
  name: "Basic",
  price: 3.99,
  space: 100,
  transfer: 1000,
  pages: 10,
  calcSomething: function() {
  }
};

The function code with any variables necessary, would be located within the function.  It's basically the same as creating a function, except for the property name and colon preceding it the function instead of setting up the function like:

function calcSomething() {
}

This is how you'd call the method above:

plan2.calcSomething();

You could assign it to a variable, like so:

var priceOfSubscription: plan2.calcSomething();

You could put an amount in the parens if you happened to set up the function to use the value within the parens as an input within the function.  When you make a function within an object (a method), you can refer to a desired value like so within the function:

plan2.name

For example.  But the author suggests that, within the function, we use this.name, and that JavaScript will know we are referring to the object within which the function is being inserted/defined.

Next I went over constructor functions, which prevent us from having to do this over and over:

 var plan1 = {
  name: "Basic",
  price: 3.99,
  space: 100,
  transfer: 1000,
  pages: 10,
  calcSomething: function() {
  }
};

Instead, a constructor function allows us to create dozens of these objects with much more ease, like so:

function Plan(name, price, space, transfer, pages) {
  this.name = name,
  this.price = price,
  this.space = space,
  this.transfer = transfer,
  this.pages = pages;
};

Note that plan is capitalized, if the name of the function is capitalized, that lets other devs know that the function is a constructor function.  Also, note the semicolon after the last value name.  What this code is doing is it's creating a function, and in the future, all you do is input the values for the properties in the function, and it creates objects with that information.  This is how you would create objects with the function above:

var plan1 = new Plan("Basic", 3.99, 100, 1000, 10);

So first you make the constructor function, then you call it with the code above to create new objects...now I'm wondering how you can insert a function as a property via the use of a constructor function, that is to say, a method...

So, once you've set up your constructor function, you could do this:


var plan1 = new Plan("Basic", 3.99, 100, 1000, 10);
var plan2 = new Plan("Cool", 3.99, 100, 1000, 10);
var plan3 = new Plan("Amazing", 3.99, 100, 1000, 10);

That constructor function would save a lot of work, as opposed to setting up the object and variables by hand each and every time.  "new" is the keyword that tells JavaScript to create a new object.

It's common to use the same name for parameters and properties, like in the code above, but you don't have to, you could do this:

function Plan(name, price, space, transfer, pages) {
  this.why = name,
  this.what = price,
  this.how = space,
  this.when = transfer,
  this.noidea = pages;
}

That would be confusing, though, so we should not do that.

Oh, cool, the next chapter, chapter 73, covers inserting methods into constructor functions!  Here's how:

function Plan(name, price, space, transfer, pages) {
  this.why = name,
  this.what = price,
  this.how = space,
  this.when = transfer,
  this.noidea = pages;
  this.calcSomething = function() {
  };
}

So there's no extra input in the parameters to deal with the method, the method is simply inserted at the end of the list of properties.

Once the objects are created, again, like so:

var plan1 = new Plan("Basic", 3.99, 100, 1000, 10);
var plan2 = new Plan("Cool", 3.99, 100, 1000, 10);
var plan3 = new Plan("Amazing", 3.99, 100, 1000, 10);

There is no input within the constructor function in regards to the method within.  We would find out the annual price (as in, we would input a value into the method) like this:

var annualPrice = plan3.calcSomething();

If the function incorporated a variable in the parameter, then we would enter the value for that variable when calling the function above.  So it's the object, followed by a period, then the function name, with the parameter within, if appropriate. 

So, if we're creating a method within an object definition, it goes like so:

calcSomething: function() {

On the other hand, when we create a method within a constructor function, the format is like so:

this.calcSomething = function() {

This is really neat!  Also, remember that if a function is being defined in a standalone fashion, there is no semicolon after the curly braces, but if a function(method) is being defined within a constructor function, because of the equal sign, there needs to be a semicolon after the closing curly brace for the method (but not for the constructor function).  Also, even if another property or method definition follows the method in the constructor function (that is, even if it's not last), no comma is needed (the semicolon is there anyways).  So, to be clear, no comma is needed after a method within a constructor function, regardless of it's order within the properties of the object being created.  Also, note that a method inside of a constructor function is not considered a property of that function, it is a method of that constructor function.

I finished chapter 73, and now I'm on Chapter 74 Objects: Prototypes.  A prototype statement is a way to avoid having the code for a method be included over and over in every object (remember the DRY principle, Don't Repeat Yourself).   

First, as you can imagine, we don't include the method in the constructor function (otherwise it gets repeated every time).  This is how:

Plan.prototype.calcSomething = function(someVariableIfDesiredOrEmptyIfNot) {
};

So, what that does is it includes the calcSomething function inside of every Plan object.  Everything except for the first line is the same as when the function is included as a method of the constructor function.

You can also create a prototype property instead of a prototype method.  You would do that like this:

Plan.prototype.price = 5.00;

So then every object created with the constructor function Plan would have the property, price, with a value of 5.00.  That would create a lot less code, and is useful when the objects created have a property (or method) which is the same for every object.  

You can also override a prototype for one particular object, like so:

plan3.price = 8.00;

That's the object name, followed by the property and then a value.  So then every object created with the Plan constructor function would have a price of 5.00, except for the object plan3, which would have a price of 8.00.  

In the same way, you can override a shared prototype method for individual objects.  

A regular function does not have a semicolon after the curly braces.

A constructor function also does not have a semicolon after the closing curly brace.

A prototype with a method does have a semicolon after the curly brace.

Okay, I finished that chapter and now I'm working on Chapter 75 Objects: Checking for Properties and Methods.

We can check to see if an object has a property within it like so:

var gotTheProp = "storage" in plan3;

The result will be a boolean, true or false.

Oh, and it turns out a method is a type of property of an object after all...

We could look for a method in the object Plan3 like so:

var gotTheProp = "calcSomething" in Plan3;

Just make sure to use the quotation marks, even though calcSomething is not a string.  Here's how to get a list of properties in an object:

var listOfProps = [];

We just made an empty array.  Then:

for (var prop in Plan3) {
  listOfProps.push(prop);
}

This is really odd code, because the loop stops by itself when it's out of variables.  The result would be an array with a bunch of property names inside (but not the property values).  Also, you can use any variable name instead of prop (in the first parens).  This array will include properties that were inherited via a prototype.  If you want to exclude those properties, use this code:

var listOfProps = [];

for (var prop in Plan3) {
  if (plan3.hasOwnProperty(prop)) {
    listOfProps.push(prop);
  }
}

Okay, I finished chapter 75, so now I'm starting with Chapter 76 Browser Control: Getting and Setting the URL.

window.location.href will return the complete web address you are currently on, in a string.  This is also known as the URL.

window.location.hostname will return just the domain name in a string, for example, "www.samplesite.com."    

window.location.pathname will return the path, which is the text after the .com (as an example).  If the browser is on the site's home page, this will return "/".  It won't return the anchor though.  The anchor is the # followed by text at the end of some paths.

window.location.hash will return the anchor, for example, #randomanchor at the end of the path.  If there is no anchor, an empty string will be returned, "".

Okay, I'm calling it a day, I'll continue with chapter 76 tomorrow!

SUMMARY OF CODING SKILLS

Total Treehouse Points: 5,385

Treehouse Points by Subject Matter (Miscellaneous not included): 
HTML:                                663 
CSS:                                1,599 
Design:                            1,193 
Development Tools:            747 
Javascript:                      1,120

Treehouse Ranking (%): "You have more total points than 94% of all students."

Treehouse Badge(s) Earned Today:



Treehouse Courses Completed:
How to Make a Website
HTML
CSS Foundations
CSS Layout Techniques
Aesthetic Foundations
Design Foundations
Adobe Photoshop Foundations
Adobe Illustrator Foundations (66% complete, switched focus from web design to web dev)
Git Basics
Introduction to Programming
Javascript Basics

Codecademy (& other) Courses Completed:
HTML and CSS (Codecademy) 

Books Read or in Progress:

Completed: "Head First HTML and CSS," by E. Robson & E. Freeman
In Progress: "Eloquent JavaScript," by Marijn Haverbeke (On pg 27)
In Progress: "Head First Javascript," by Eric Freeman and Elisabeth Robson (On pg 56)
In Progress: "A Smarter Way to Learn Javascript," by Mark Myers (on pg 255)

My Progress on The Odin Project:
1.  Introduction to Web Development             100% Complete
2.  Web Development 101                                29% Complete
3.  Ruby Programming                                       0% Complete
4.  Ruby on Rails                                               0% Complete
5.  HTML5 and CSS3                                           0% Complete
6.  Javascript and JQuery                                  0% Complete
7.  Getting Hired as a Web Developer                 0% Complete

Hours Spent Coding Today: 4
Total Hours Coding: 606

Friday, August 14, 2015

Day 134: Ch. 69 "A Smarter Way to Learn JavaScript"

Today I'm starting on Chapter 69 Objects.  Properties are just variables attached to an object.  Here's an example of how to define an object and its properties:

var plan 1 = {
  name: "Basic",
  price: 3.99,
  space: 100,
  transfer: 1000,
  pages: 10
};


The code above is very different from what we've done prior to this.  There's no semicolon at the end of every statement, only after the closing curly bracket.  Also, the last property does not have a comma after it, but all the other properties prior to the last do.  Note that the code begins with a variable being defined, as an object is a variable.  Note also the use of colons preceded by a property and followed by a property value.  You can add another property to the same variable, for example, like so:

plan1.discountMonths = [6, 7, 11];

The code above declares that July, August, and December are discount months (remember that arrays are indexed with 0 first, so item with an index value of 6, for example, would actually be the 7th item in the array).  To refer to an item in this array, you would use this code, for example:

var mo = plan1.discountMonths[2];

That statement would assign the third element in the array, the number representing December, to the variable mo.

Now I'm working on Chapter 70 Objects: Properties.  You can delete properties in an object like so:

delete objectName.propertyName;

You can check to see if an object has a property like so:

"propertyName" in objectName;

A true or false boolean value will be returned.

Now I'm working on Chapter 71 Objects: Methods.  A method is a function that's attached to an object.  This chapter was lengthier than most of the chapters and pretty intricate, as it dealt with functions.

Here's some of the code I worked on:

var theObject = {
  theMethod: function(x){
    if (x === 10) {
      alert("It's a 10");
    }
    else {
      alert("It's not a 10");
    }
  }
};


theObject.theMethod(10);


It's an object with a method that tests if a number is a 10 or not, and then produces an alert with a string that says it is a 10 or it is not a 10.

Now I'm on Chapter 72 Objects: Constructors.  The chapter went over something called a constructor function.  Here's a constructor function, it's really neat, it saves you from having to create an object and properties over and over.

function Plan(name, price, spare, transfer, pages) {
  this.name = name;
  this.price = price;
  this.space = space;
  this.transfer = transfer;
  this.pages = pages;
}


Note that the function name is capitalized.  It's conventional to do this to disctinguis constructor functions from regular functions.  Note that the name of the object hasn't been specified yet, in regards to what "this" refers to.  This is the calling code that creates the object for the Basic plan:

var plan1 = new Plan("Basic", 3.99, 100, 1000, 10);

The name of the object is plan1, while  "new" is the keyword that tells JavaScript to create a new object.  You could do this:

var plan1 = new Plan("Basic", 3.99, 100, 1000, 10);
var plan2 = new Plan("Basic", 3.99, 100, 1000, 10);
var plan3 = new Plan("Basic", 3.99, 100, 1000, 10); 

And then you'd have a bunch of objects produced quickly.  I love how the author of this books walks us through all of this step by step, it's an amazing book.  Presumably, your values would be different for each object.  It's common to use the same names for parameters and properties, but you don't have to, JavaScript assigns the inputs to the properties in the function by their order, not by whether the input variable name matches the name of the property, so this would work fine:

function Plan(name, price, spare, transfer, pages) {
  this.what = name;
  this.why = price;
  this.how = space;
  this.when = transfer;
  this.whatelse = pages;
}


Now I'm on Chapter 73 Objects: Constructors for Methods.
   
SUMMARY OF CODING SKILLS

Total Treehouse Points: 5,385

Treehouse Points by Subject Matter (Miscellaneous not included): 
HTML:                                663 
CSS:                                1,599 
Design:                            1,193 
Development Tools:            747 
Javascript:                      1,120

Treehouse Ranking (%): "You have more total points than 94% of all students."

Treehouse Badge(s) Earned Today:



Treehouse Courses Completed:
How to Make a Website
HTML
CSS Foundations
CSS Layout Techniques
Aesthetic Foundations
Design Foundations
Adobe Photoshop Foundations
Adobe Illustrator Foundations (66% complete, switched focus from web design to web dev)
Git Basics
Introduction to Programming
Javascript Basics

Codecademy (& other) Courses Completed:
HTML and CSS (Codecademy) 

Books Read or in Progress:

Completed: "Head First HTML and CSS," by E. Robson & E. Freeman
In Progress: "Eloquent JavaScript," by Marijn Haverbeke (On pg 27)
In Progress: "Head First Javascript," by Eric Freeman and Elisabeth Robson (On pg 56)
In Progress: "A Smarter Way to Learn Javascript," by Mark Myers (on pg 240)

My Progress on The Odin Project:
1.  Introduction to Web Development             100% Complete
2.  Web Development 101                                29% Complete
3.  Ruby Programming                                       0% Complete
4.  Ruby on Rails                                               0% Complete
5.  HTML5 and CSS3                                           0% Complete
6.  Javascript and JQuery                                  0% Complete
7.  Getting Hired as a Web Developer                 0% Complete

Hours Spent Coding Today: 3
Total Hours Coding: 602

Thursday, August 13, 2015

Day 133: Ch. 63 "A Smarter Way to Learn JavaScript"

I'm starting today off on Chapter 63 The DOM: Getting a Target's Name.  I learned about the node name property today, .nodeName.  If the variable it's targeting is an element, it will return a string that corresponds to the html tag, such as "P", "DIV", or "SPAN."  It will output an all caps string, even if the html itself is in lower caps.  If the node is a text node, the name of the node is #text, in lower case.  For a text node, you use .nodeValue to find out its value (its content).  The value for a text node would be a string with the actual text.  Meanwhile, an element node has a name, like "P" or "IMG," but no value.  If you try to assign an element node value to a variable, the variable will be assigned null.  

That said, .nodeValue is not the same as .innerHTML.  So, .innerHTML is a property of the parent element, such as the <p> element, while .nodeValue is the property of the actual text node itself.  Also, .innerHTML includes all the descentants of the element, including any inner element nodes like <em> as well as text nodes, while .nodeValue only includes that single text node.

All right, now I'm on Chapter 64 The DOM: Counting Elements.  We used .childNodes by itself (without brackets at the end) to gather all the child nodes of an element and place them in variables.  Note that this does not gather grand children or anything further, only children.

I'm now on Chapter 65 The DOM: Attributes.  When we look at code like this:

<div id="p1">
<p class="special">
<span style="font-size:24px;">

The first item to the left of the equal sign is the attribute name, and the item to the left of the equal sign, in quotation marks, is the attribute value.  An element can have any number of attributes.  We can find out if an element has a particular attribute like so:

var target = document.getElementById("p1");
var hasClass =target.hasAttribute("class");

The code above returns true or false.  To read the value of an attribute, as opposed to the attribute itself, this is the code:

var target = document.getElementById("p1");
var hasClass =target.getAttribute("class");

You can set the value of an attribute with .setAttribute, like so:

var target = document.getElementById("div1");
target.setAttribute("class", "special");

Now I'm on Chapter 66 The DOM: Attribute Names and Values. Attributes are nodes, so when we target them and ask for .nodeName, the returned value will be the name of the attribute, such as "onMouseover" or "src", for example.  .nodeValue used in the same way will give you the value of the attribute.

Now I'm on Chapter 67 The DOM: Adding Nodes.  We used .createElement(), .createTextNode(), and .appendChild() to add nodes with JavaScript. 

Now I'm on Chapter 68 The DOM: Inserting Nodes, which is the last of the DOM chapters in the book!  That's great, there's really no difference between completing one chapter or another, but it still feels like a mini-accomplishment to complete a series of chapters that deal with related subject matter.  Okay, I've completed that chapter!

Tomorrow I'll be starting on Chapter 69 Objects.

SUMMARY OF CODING SKILLS

Total Treehouse Points: 5,385

Treehouse Points by Subject Matter (Miscellaneous not included): 
HTML:                                663 
CSS:                                1,599 
Design:                            1,193 
Development Tools:            747 
Javascript:                      1,120

Treehouse Ranking (%): "You have more total points than 94% of all students."

Treehouse Badge(s) Earned Today:



Treehouse Courses Completed:
How to Make a Website
HTML
CSS Foundations
CSS Layout Techniques
Aesthetic Foundations
Design Foundations
Adobe Photoshop Foundations
Adobe Illustrator Foundations (66% complete, switched focus from web design to web dev)
Git Basics
Introduction to Programming
Javascript Basics

Codecademy (& other) Courses Completed:
HTML and CSS (Codecademy) 

Books Read or in Progress:

Completed: "Head First HTML and CSS," by E. Robson & E. Freeman
In Progress: "Eloquent JavaScript," by Marijn Haverbeke (On pg 27)
In Progress: "Head First Javascript," by Eric Freeman and Elisabeth Robson (On pg 56)
In Progress: "A Smarter Way to Learn Javascript," by Mark Myers (on pg 216)

My Progress on The Odin Project:
1.  Introduction to Web Development             100% Complete
2.  Web Development 101                                29% Complete
3.  Ruby Programming                                       0% Complete
4.  Ruby on Rails                                               0% Complete
5.  HTML5 and CSS3                                           0% Complete
6.  Javascript and JQuery                                  0% Complete
7.  Getting Hired as a Web Developer                 0% Complete

Hours Spent Coding Today: 4
Total Hours Coding: 599

Wednesday, August 12, 2015

Day 132: Tech Recruiter Meetup

Offhand Notes on the Tech Recruiter Meetup

I went to a meetup today for Austin tech folks.  The meetup was really fun, I was exposed to more of the Austin tech scene, and the person in charge of Austin Digital Jobs, Lani Rosales, was there. It was nice to see her in person, because I always see her posts and the posts from members of her Facebook group in my news feed, and the content is always high quality, tech-related/job-related content. I'm thankful for how much she contributes to the Austin scene.

In addition to Lani Rosales, there were representatives from OnPrem (Jessica Chavez), IBM (Anna McCormick), Agile Velocity (Brett Simon), and Luna Data Solutions (Lucas Mitchell), for example. I found out that Lani is also in charge of a website, www.theamericangenius.com, which is a website for entrepreneurs. I'll have to check it out.

The speakers emphasized over and over how big a factor personality-fit is in the hiring process, and also, once on the job. You have to be able to get along with your teammates, so no throwing bottles at the wall when some code wasn't able to be rolled out when needed, and you have to be able to deal with the firm executives, who may have type A personalities, according to the speaker.

Luna Data Solutions has 195 different clients in Austin, and some of those clients need remote work done. The speaker mentioned that when analyzing candidates, github accounts are looked at to see how active the candidate is, and also social media (such as linked in), to see how active we are in the tech scene.

Two of the speakers mentioned that the application process includes homework assignments that test how good you are at understanding a problem and using available resources to come up with a solution. One of the speakers mentioned not to be negative when you are rejected (common sense, but yeah, don't burn bridges). One speaker mentioned how a recruiter is able to influence whether you are hired or not, but does not actually make the call. The person with the money gets to decide who gets hired.

One of the speakers mentioned that his two best hires were a high school grad and a PhD, and that software development is a meritocracy, you will get paid what you are worth based on how much work you've put in. Another speaker mentioned that some corporations do look for a degree. Another speaker (Dylan Tano, Keystoke) mentioned that as long as the person knows his stuff, that's what's important. That said, the person needs to be able to sell themselves to others, people need to have confidence that you know your stuff. Another speaker mentioned that recruiters really look at what work you've done and who/what organization can vouch for your skills. Github or a personal website are both good at selling yourself.

One of the speakers mentioned that Google Hangouts is used as part of the interview process. A speaker mentioned, regarding code tests/assignment, "Did you run your unit tests? If not, that's a problem!"  I haven't studied testing yet, so I'm not familiar with how to do it, although I know that you're supposed to. Another speaker mentioned that a resume will not get you a job, it will be one piece, out of several, that can open a door to the interview. That speaker mentioned that as a candidate, you should know the realities of the job, so that you are not a bad fit for the actual job if you get it.

Another speaker mentioned that you've got to have an online presence, and if you don't, your resume may be automatically tossed out. Another speaker, regarding advice for transitioning from non-tech to tech, said that you really have to be intellectually curious about the subject matter you're intending to work on. Two of the speakers had bachelor's degrees in English. One of them said you have to be willing to work on your own, at home, on projects you care about. You've got to be passionate about this. You have to be passionate, especially anyone that's making the transition from a non-technical skill set to a technical skill set, because they've got a lot of ground to make up. Instead of trying to become an employee of the company, try to sell your skills to the company, for example, if you were an accountant before you learned to code, sell that part of you. Speak to the "why" aspect of why you should be hired.

Another speaker mentioned Austin has a very rich design community, and that they're looking for people that know other people, in person. This can be done via attending meetups and via other digital/design community events. Also, it's important to note that not a single web developer in the U.S.A. has a bachelor's degree in web development.

Another recruiter mentioned that it's o.k. to ask for things from other people, in regards to networking. She believes that the Austin community is very generous with networking opportunities. We have to continue to learn, so if we want to be in this field we have to be passionate about learning. A speaker mentioned that every Friday at her company they allocate 4 hours to presentations/learning activities, for example, one engineer may make a presentation for the company on a new JavaScript framework, and every employee will be upbeat about it, and you should too if you want to work there. One of the speakers mentioned we should always be working on our own projects, and to definitely consider starting your own startup, or several startups.  A speaker mentioned that mistakes happen, to not lose your cool whenever you crash things, which you will, especially as a junior dev.

In regards to breadth versus depth, the speakers felt you should simply represent what you're good at. If you can do everything, awesome, present yourself as a full stack developer. If you're a specialist at one technology, then make sure to highlight that on your resume. One speaker mentioned initial interviews tend to be 60/40 personality fit/technical expertise, while the later, 2nd, 3rd, 4th interviews (which often have tests) are then more technical. Several speakers mentioned, "Are you curious? Do you want to learn? What type of technologies do you not know that you want to learn? Will you be a good fit?" If someone on the inside speaks for you from within the organization, then that speaks for your culture fit and can fast forward you to the technical section. Also, in contrast to the other speakers, a speaker from a big company, IBM, mentioned that they look at your technical competences first, before you can even get an interview.

Many of the companies are small groups, so that's why personal fit is so important. One speaker mentioned that the members of the team do a survival style vote on new candidates. Another speaker mentioned she wants developers to be humble and nice, especially around non-developers such as herself and clients.

The threshold of skill level for entry level positions. One speaker (Lucas) said they have a team of three developers that did nothing but HTML for three months, and then they plan on keeping two of the developers at the end of those three months. A speaker said a new hire's code was not super good, but his code documentation was AMAZING, and that was why he was hired. She said that was super important because it let everyone know that he cared about communicating with other team members, about making sure other team members understood why he did what he did.

SUMMARY OF CODING SKILLS

Total Treehouse Points: 5,385

Treehouse Points by Subject Matter (Miscellaneous not included): 
HTML:                                663 
CSS:                                1,599 
Design:                            1,193 
Development Tools:            747 
Javascript:                      1,120

Treehouse Ranking (%): "You have more total points than 94% of all students."

Treehouse Badge(s) Earned Today:



Treehouse Courses Completed:
How to Make a Website
HTML
CSS Foundations
CSS Layout Techniques
Aesthetic Foundations
Design Foundations
Adobe Photoshop Foundations
Adobe Illustrator Foundations (66% complete, switched focus from web design to web dev)
Git Basics
Introduction to Programming
Javascript Basics

Codecademy (& other) Courses Completed:
HTML and CSS (Codecademy) 

Books Read or in Progress:

Completed: "Head First HTML and CSS," by E. Robson & E. Freeman
In Progress: "Eloquent JavaScript," by Marijn Haverbeke (On pg 27)
In Progress: "Head First Javascript," by Eric Freeman and Elisabeth Robson (On pg 56)
In Progress: "A Smarter Way to Learn Javascript," by Mark Myers (on pg 199)

My Progress on The Odin Project:
1.  Introduction to Web Development             100% Complete
2.  Web Development 101                                33% Complete
3.  Ruby Programming                                       0% Complete
4.  Ruby on Rails                                               0% Complete
5.  HTML5 and CSS3                                           0% Complete
6.  Javascript and JQuery                                  0% Complete
7.  Getting Hired as a Web Developer                 0% Complete

Hours Spent Coding Today: 2
Total Hours Coding: 597