Tuesday, February 21, 2017

My Experience at GHA: Junior Phase

For the last six weeks, I've been a 'junior' in the Grace Hopper Program. Next week I'll become a 'senior'. (!!!) I spent most of 2016 working on my beginner javascript to get to a point where I felt comfortable enough to apply to some of New York's best bootcamps. Thankfully I got into Grace Hopper Academy in November and I can't believe I'm almost half way done. In some aspects, it's been like a dream come true, but it's also been one of the hardest things I think I've ever done. In this post, I'd like to talk about my experience so that maybe someone on the fence about coding bootcamps, or Grace Hopper specifically, might be able to understand what a day in the life looks...err, feels like.

Before applying, I thought the hardest part about a bootcamp would be getting in. I consider myself a pretty good learner, so I thought that once I was in a learning environment again, I would be fine. That's probably why getting into the program was one of the best feelings. I was at a wedding when I got the email and couldn't help but be that girl crying over her entree, (albeit for totally different reasons than the other wedding-cryers). Anyways, moving on...

For Grace Hopper you have four weeks of 'pre-work' that involves learning some more 'basic' concepts that the instructors want you to know prior to the actual start date. I put basic in quotes because for me, javascript got pretty hard, pretty fast. Some of the things covered included recursion, prototypal inheritance, and `this` keyword. All things I thought I would have had much more guidance learning, but I digress. Slowly, throughout the first four weeks my confidence began to wane. The checkpoints would come and not once (in three checkpoints) did I ever finish the entire test in the allotted time.

Once I actually started the on-site portion of the program, things escalated even more quickly. A typical day starts off with a lecture about whatever you'll be learning and working on that day, usually about 1.5 hours. Then you are paired with another student for the remainder of the day to go through a workshop that explores the concept even further. These workshops are what make up the heart of "junior" phase (the first 6 weeks of the program) so there's a lot to be said about them. (That being said, these thoughts and feelings are just that of one slightly anxious person, not everyone who's gone through the program.) The workshops are designed to be challenging and they are not designed to be completed. Of course there are people who do complete them, but from my understanding most do not and that's OK. This was hard (and still is hard) to deal with when you're used to doing well in school and in general with the tasks put in front of you. What makes the workshops even harder is that you have to be able to communicate with your partner and work with someone who has a different style of learning than you. I was paired with people that I felt went too fast, or were too aggressive about the way they wanted to solve something, and people who were so concerned about learning every minute detail that by the end of the day I felt like I learned nothing at all. All of those experiences overwhelmed me and at times, made me doubt myself/bootcamps in general. Was this the right style of learning for me? Am I actually learning anything?!

The answer is yes (in case you were wondering:). Bootcamps are true to their name, so a lot of the time you might feel overwhelmed or exhausted. Every single day we learned something new and had a new assignment. Some of the workshops built off of each other, but there was, and is, always something new to learn. These programs work not because they  hand feed you the tools you need to get hired as a developer (although I may have hoped for that..), but because the people in them put in an incredible amount of work both inside and outside the classroom. They're popular because inside the classroom you have these crazy insightful teachers who are so smart and even better, answer all your "silly" questions in a way that makes you think they weren't so silly after all (and even if they were, it's totally ok because they just want you to succeed). That was a crazy run-on, so to summarize: the support system is wonderful.

Looking back over the last six weeks, I realize I have learned so much. When I get anxious about not knowing all the things I have learned really well, I try to remind myself that I've only been learning and using all these new technologies and tools for six weeks and that's nothing compared to 10 years or even 1 year experience. I know I'll get to where I want to be, and I know it would have taken me a lot longer without Grace Hopper.

P.S. I'd like to thank my boyfriend and cat, Oliver, for taking care of me when I was also at my craziest. <3

Tuesday, January 10, 2017

GHA: W1D1

Today was my first day at Grace Hopper! Aside from the subway having crazy delays, it was amazing!! The instructors all seem so incredibly knowledgable and helpful and watching them talk about things that everyone in the room is so passionate about is probably one of the coolest things I'll be a part of. Sorry for that run-on there. Too much excitement, not enough time.

We're starting off with lessons on data structures; today, specifically we touched on queues and linked lists. A queue is like a line to buy movie tickets. The first one in the line, is the first one to leave the line, visa versa, the last one in the line is the last one out of the line. You can enqueue, add to the list, and dequeue, remove from the list, as well as report the size of the queue.

Linked Lists are a little more complicated. Nodes, each with a value and pointer connected to other nodes. We had to create methods to add and delete nodes, which makes you, in the end, appreciate and love Javascript array's and all the methods built in.

An example:
So you have the 'head' which points to the first value, and the tail which points to the last. The upside to this (as opposed to arrays) is that an array's length is fixed. BUT in order to say, see the size of the linked list, you'd have to traverse the entire list. You encounter the same problem when looking for a node in the middle: you'd start at the beginning and go through every. single. node. until you find what you're looking for. Now, I don't know much, but I know this sounds crazy. But alas, the programming challenge presented to us today was creating a linked list and being able to manipulate it: remove head/tail, add head/tail and search.

Tricks: tracing the next and previous values on modified lists
What helped me: drawing things out on paper and making sense of it that way.

Tuesday, November 8, 2016

Moving Forward

I recently got invited to attend and finished App Academy's Jumpstart program: a free two-week in-class prep course of sorts. The really awesome thing about it was that if you passed one of two assessments, you would be forwarded to the last behavioral interview for App Academy. Pretty incredible seeing as the technical interviews can be difficult, not to mention hella intimidating. Yes, hella.

Anyways. I finished the program and regretfully I was did not get a qualifying score despite being very, very close. That being said, I came out of it learning a lot. So much in fact, I'm coding mostly in Ruby now, more so I kinda love it (although Javascript will always be my first love). That being said, most of the practice problems I do on here will be in Ruby now.  I'll probably write a longer post on my experience with JumpStart and maybe things I'd recommend or do differently for anyone considering doing it too.

Until then, friends.

Wednesday, September 28, 2016

a/A Practice Problem: Third Greatest pt.1

This is the first part of this question/answer series because the answer I came up with was very easy only because I was able to use methods to help me solve it quicker than I think they (a/A) wants. They didn't explicitly say it in this problem, but in previous challenges it said to refrain from using methods like .reverse, which I used here. SO because of that I'm going to show you my short code and talk about .sort, and then another day I'll post a longer more confusing answer that shows your know how to harness the power of loops and variables with the wrath of Aphrodites. Or something. Idfk.

The problem:
# Write a method that takes an array of numbers in. Your method should
# return the third greatest number in the array. You may assume that
# the array has at least three numbers in it.

My Solution:







SO. Let's talk about .sort! Here's my wacky explanation, but please avail yourself to some of the links at the end of this post.

.sort is an array method. It'll work beautifully on arrays containing words and will alphabetize it the way you would. However, it will not do that with numbers. the computer would consider 100 before 2 because 1 is less than 2. So when it comes to numbers, we use this comparison function that you see in there.   return a-b; will sort your numbers from least to greatest, while return b-a will sort your numbers from greatest to least. To avoid saying the wrong thing and causing someone out there (even if it's me at a later date) a massive headache because what I said was gobbledegook, this is as far as I'll go.

Next we want to reverse the array, because when we do that we can easily pull out the third number which by then should be the third greatest!

Make sure to check out these links:
http://www.w3schools.com/jsref/jsref_sort.asp
http://www.javascriptkit.com/javatutors/arraysort.shtml


How would you solve this?!

Tuesday, September 27, 2016

a/A Practice Problem: Is Power of 2?

Truth be told: I definitely looked for help on this problem. And that's OK!! (At least I think it is.) Part of the whole teaching yourself how to code (or anything really!) is learning from others. That means looking at solutions and understanding how that person got there. Not copy-and-pasting their code into the answer box and saying "DONE!", but writing it out yourself, a hundred times if you have to. I looked at a/A's answer to this (in Ruby) and was able to translate it into a working JS program.

Here's the problem:

# Write a method that takes in a number and returns true if it is a
# power of 2. Otherwise, return false.
#
# You may want to use the `%` modulo operation. `5 % 2` returns the
# remainder when dividing 5 by 2; therefore, `5 % 2 == 1`. In the case
# of `6 % 2`, since 2 evenly divides 6 with no remainder, `6 % 2 == 0`.

My Solution















That first if statement, tells us what to reject right away -- if the number passed in isn't divisible by 2, then we know that two things: that it's definitely an odd number, and that it cannot be a power of 2.

The while loop portion was something I picked up from Codewars. Let me try to dissect and explain: The (!num) portion only, excluding the first exclamation mark, is basically saying num is false. The exclamation mark acts like negation (I think-- please feel free to correct me!). So the outer exclamation mark (!(!num)) is a double negative and is basically saying while num is true.

A while loop still needs the same components as a for-loop: the initiation (num), the condition(while num is true) and termination (num is false).

  • The first if within the loop would break us out of the loop if and when num is equal to 1 (which would be our 2 to the 0 power case. If we get to this case, that means it is a power of 2 and we should return true, which the code states!
  • The else if scenario checks if the remainder of num / 2 is equal to 0. If it is, divide it by 2 again.
  • The last else case will handle the other cases and if the number hasn't passed the first two cases, it's not a power of two, so we should return false.

What do you think? How would you solve this problem?!

a/A Practice Problems: Two Sum

It's been a minute. A New York minute, if you will. Cheeeese.  Today we're back with another App Academy practice problem.  Here it is:

# Write a method that takes an array of numbers. If a pair of numbers
# in the array sums to zero, return the positions of those two numbers.
# If no pair of numbers sums to zero, return `nil`.

A couple things beforehand: nil in javascript would be null, so I return null. I came to a working answer through trial and error, but I'm pretty sure there is a much better way to solve this. I tried a couple other ways, but nothing worked so any advice out there would be more than welcome!!


I started the first loop off at 0 and the second loop at 1 because there's no need to add the first index to itself.  Just remember the way nested loops work : the second loop will finish an entire iteration (from 1 to less than nums.length before the first loop moves on to i = 1.

That last line there was my test case, so don't mind that! :) Usually when I solve problems, I write everything out. I'm working on being more concise with my code, which is why I didn't declare an array and then push the values to it (even though I definitely tried this a billion times). But I gotta say, I kinda liked just returning i and j in an array.

That's all for today.
Happy coding! :)

Saturday, August 27, 2016

More Free Resources

I recently got a hold of some questions asked by the schools I want to attend during their preliminary coding challenges. Let's just say some were very, very hard.

I did one set of problems for one school and felt great! I was able to answer all three with very little effort and time, which of course was a huge relief. However, on the other exam I was able to fully answer ONE out of FIVE. I was almost done with the second and was able to write some pseudo code for the third, but by the end of my time I barely understood what the last two were asking from me. It was a huge blow.

Since then I've been researching, practicing, learning everything. From refreshing on my basics from 'A Smarter Way to Learn Javascript', to exploring completely new topics that have helped me solve the problems that once bamboozled me.

All in all, things have been progressing over on my end and I hope they are on yours as well! Today I just have a couple more links I've found while trying to learn on my own.

funfunfunctions: This guy is a little goofy and he codes using ECMA6 which at times is a little confusing since I'm still learning vanilla javascript, but he explains things pretty well and hates fibonacci sequences more than I do (which I didn't think was possible). He has some great videos covering more "basics" of javascript that really help push your code to the next level.

Codesmith.io: Codesmith is a dev bootcamp based out of LA. I discovered them while doing some research on course report and found that they offer **FREE** workshops titled 'JS: The Hard Parts'.
It's an in-person workshop you can sign into and participate in via youtube. You can even pair-program with a virtual partner (for which I am currently taking applications). The workshops are held weekly on Thursday nights and really tackled some of the tough stuff these coding schools would like their applicants to be aware of.

That's all for now! Stay tuned for the debut of an awesome website the boy and I are working on :)

Saturday, July 9, 2016

Whoops.

It's almost been a month since I've posted on here, and even worse done any coding at length. It's upsetting, but New York and moving and learning how to bartend have completely dominated all of my time. I promise to be back at it soon. In the mean time here are some pictures of my time here.

Thursday, June 9, 2016

Codewars as a Training Tool


In this post I wanted to stick up for CodeWars and help explain to the novice coder why this site is so fucking awesome.

First, a little backstory. My boyfriend and I are both just starting out in this whole programming world. He was the one who told me about it first and when I first went to the site, I could barely get past the mandatory (but simple) coding challenges you have to get right in order to gain access to the full site.

Fast forward to today and I am on the site at least once a day training. It has become the best learning tool for me thus far. It challenges me every day, reminding me why I like coding. My boyfriend on the other, while he can build out an entire rails app, absolutely hates the site. I think it's because he hasn't given it enough of a chance (which is true), but he says his learning style is different (which also is true). Either way, I happen to think that anyone who uses the system the right way will soon too become a true believer. So, herein this post I present to you my methodology to using the site so that even you can conquer and earn your honor.

1. Select your level.
On the left hand side you will find everything you need to make sure you are doing problems within your range. The levels are from easiest, 8, to hardest, 1. Truth be told, it's best to have gone through the basics so that you can attempt the problems, but even if you are going along as you learn you can customize which problems to do (see below). Start off with 8, and move at your own pace. Some of the problems within are going to be a lot more difficult than some of the others. But give yourself some patience and work through them, absorbing everything you can.

2. Select what areas you want to train.
Once you've selected which level you want to compete in, you can then choose problems that have been tagged with certain areas of concentration. On the left hand side, under Tags, you can select Arrays, Numbers, Bugs, Fundamentals, etc. When I was starting out I found that the best thing that helped me was completing level 8 "bug" problems. They re-familiarized me with syntax and some other basic concepts that helped me to solve some other problems without the worry of that. If you're working through the problems while trying to master one area of a certain language, this will be one of the best ways to use CodeWars to do just that.

3. Don't be ashamed to forfeit honor.
No one likes to lose, obviously. But sometimes, you need to suck it up. There are problems that for some reason will not pass the tests, but once you click submit will actually work. Save for these cases, if you can't figure out why something won't work, it might be time to just unlock the solutions to that problem. It could be something simple you overlooked, but if it's something you can't figure out on your own, unlock the solutions and see how other people solved it. Think of it as learning, not cheating if you happen to be so honorable.

4. Read other peoples' answers.
Whether I submitted my answer or forfeited honor, I always look at other peoples' answers. There will be things in there that look like straight up gibberish. Even when I finished my Javascript book, there were things I had never seen before. Methods that would produce the right code with a fraction of the lines. It was insane. But it's also insanely insightful. Whenever there's something I don't understand I look it up, and you can get the general idea of the way something works once you see it.

Going through the site without any sort of order can be pretty depressing as a noob. You can easily get that "omg-I'm-never-going-to-understand-this-and-I-better-get-back-to-my-dead-end-job" feeling, but I swear with time, patience and a little order CodeWars can and will open all sorts of doors.

Wednesday, June 8, 2016

a/A Practice Problems: Nearby AZ

Practice Problem 8 of 21 and the first medium! It's exciting stuff happening 'round these parts. Without further adieu...

Write a method that takes a string in and returns true if the letter "z" appears within three letters **after** an "a". You may assume that the string contains only lowercase letters.

This is a little trickier, but still employs the same methods and logic that we've already seen. A couple loops and if statements.

1.  Declare our function with one parameter, string.

function nearbyAZ (string) {
}

2.  I wanted to declare a variable, index1, that would hold the place of the position in which the letter "a" appears. This will be helpful later when determining if there's a "z" within the next three letters.

function nearbyAZ (string) {
   var index1 = 0;
}

3. We want to loop through all the letters in order to see if there's an "a".  The code block within the loop will be an if/else statement. If there's an "a", store it's index number in the variable, index1, and break out of the loop. Else, I want to increase index1 by one with each iteration of the loop. This way we will store the correct position number.

function nearbyAZ (string) {
   var index1 = 0;
   for (var i = 0; i < string.length; i++) {
      if (string[i] === "a") {
         index1 = i;
         break;
      }
      else {
         index1++;
      }
   }
}

4.  After the previous loop, I want another variable, index2, which will store the value of index1 + 1. This will be where our loop will start, and it should end at the third letter after the first a: index1 + 3. 

function nearbyAZ (string) {
   var index1 = 0;
   for (var i = 0; i < string.length; i++) {
      if (string[i] === "a") {
         break;
      }
      else {
         index1++;
      }
   }
   var index2 = index1 + 1;
   for (var j = index2; j <= index1 + 3; j++) {
   }
}

5. Start the loop at index2 because we are only concerned with the first three letters after the letter "a". Likewise, we'll want to stop the loop once it reaches that third letter. An if statement is the last part required to return true or false if there's a "z". 

function nearbyAZ (string) {
   var index1 = 0;
   for (var i = 0; i < string.length; i++) {
      if (string[i] === "a") {
         break;
      }
      else {
         index1++;
      }
   }
   var index2 = index1 + 1;
   for (var j = index2; j <= index1 + 3; j++) {
      if (string[j] === "z") {
         return true;
      }
   }
   return false;
}


Check out past problems here:

Tuesday, June 7, 2016

a/A Practice Problems: Palindrome

We have made it to the last of the "easy" problems. Rejoice!  Here we go...

Write a method that takes a string and returns true if it is a palindrome. A palindrome is a string that is the same whether written backward or forward. Assume that there are no spaces; only lowercase letters will be given.

 We know that we need a function that will take in a single parameter. We also want to declare an empty string that we can use to store the new word we will form by running a loop adding each letter from the string in reverse order. Lastly, we need a check to see if the original and the new string are the same, a palindrome, and return either true or false. Easy peasy.

1. Construct your function.

function palindrome(string) {
}


2. I declared a string that would hold the index position of the last letter of the string so as to use the variable in the loop instead. This isn't necessary. But you will want to declare a variable newString, which will be the original string in reversed order.

function palindrome(string) {
   var lastIndex = string.length - 1;
   var newString = "";
}


3. The loop starts with the index of the last letter, lastIndex, which we defined previously. It will continue so long as i is greater than or equal to 0, and will decrease by one each time. The code block inside the loop will concatenate each letter and form the new string in newString.

function palindrome(string) {
   var lastIndex = string.length - 1;
   var newString = "";
   for (var i = lastIndex; i >= 0; i--) {
      newString += string[i];
   }
}


 4. Lastly, an if statement that says if the original string and newString are the same will return true, else it will return false.

function palindrome(string) {
   var lastIndex = string.length - 1;
   var newString = "";
   for (var i = lastIndex; i >= 0; i--) {
      newString += string[i];
   }
   if (string === newString) {
      return true;
   } else {
      return false;
   }
}


Next up the mediums! **tingles**

Check out past problems here:

a/A Practice Problems: Count Vowels

Practice problem number 6 of 21. Here we go.

Problem: Write a method that takes a string and returns the number of vowels in the string. You may assume that all the letters are lower cased. You can treat "y" as a consonant.

This question was a nice and easy surprise after the time conversion mayhem. It's pretty straight forward, but let me explain how I thought to solve this one. I want to be have a function take in a string, and no matter how it is written, I would like it all to be in lowercase (there's a method for that). Secondly, I would like every letter to be separated so that I can write a loop to go through each individually to see if it is any of the vowels. If it is, I'll have a vowel counter and it will go up by one and I will be happy.

1. Declare your function with one parameter.

function vowels(myString) {
}


2. Let's convert myString to all lower case and split all the letters apart. You can put it all in one statement. We can also set it equal to the same variable and we don't need to declare it with var, since it's already implicitly declared in the parameter. We also need to declare another variable, vowelCount, and set it equal to 0. This is the variable that will increase if the loop finds any vowels.

function vowels(myString) {
  myString = myString.toLowerCase().split("");
  var vowelCount = 0;
}


3. Now we just need a loop to go through all the letters individually.

function vowels(myString) {
  myString = myString.toLowerCase().split("");
  var vowelCount = 0;
  for (var i = 0; i < myString.length; i++){
     
  }
}


4. If we were to put vowelCount++ as the code block for our loop, it would could every letter and increase the total by the wrong amount. We only need vowels, so we need an if statement. I know there's a shorter way of doing this, but I don't know what that is so this will have to do.

function vowels(myString) {
  myString = myString.toLowerCase().split("");
  var vowelCount = 0;
  for (var i = 0; i < myString.length; i++){
      if (myString[i] === "a" || myString[i] === "e" || myString[i] === "i" || myString[i] === "o" || myString[i] === "u" ||) {
        vowelCount++;
      }
   }
   return vowelCount;
}


The last thing to do is return the vowelCount at the end there. Make sure you remember to do this outside of the for loop, right before you end the function.


Until next time!

Check out past problems here:

Monday, June 6, 2016

a/A Practice Problems: Time Conversion

Back at it again today! My plan is to continue solving these practice problems till I feel that "Oh hell yes!" sense of accomplishment. Let's get on with it.

Your mission: Write a method that will take in a number of minutes and returns a string that formats the number into "hours:minutes"

In keeping with tradition,  think about how to solve this problem before doing any actual coding. I promise it's easier than Phoebe trying to teach Joey guitar cords without a guitar. #friends

The problem is asking us to convert any number of minutes given into the hours:minutes format. In order to do this there will have to be some math involved. Maybe set an hour counter equal to 0 and every time there's at least 60 that counter should go up by one. There should conversely be another counter that starts with the number passed in and decreases by 60 each time. Then it's just an issue of formatting, concatenating variables with strings and whatnot.

1. Let's go ahead and define our function with one argument. It is already provided in Ruby, but for Javascript it would be:

function time_conversion(minutes) {

}


2. I defined two new variables here: hours, which I set equal to 0, and min, which I set equal to the parameter, minutes. (This last step might be repetitive, but it was how I solved the problem and it worked so I'm keeping it for now.)

function time_conversion(minutes) {    
   var hours = 0;
   var min = minutes;
}


3. Every time min is greater than or equal to 60, I want hours to increase by 1 and I want min to decrease by 60. To do this, I used a while loop. Inside the while loop, I want it to do all the math I explained above. Remember to include the counter (i -= 60) or you'll find yourself in an infinite loop. The same three parts of a for-loop are contained in a while loop, just the formatting is different.

function time_conversion(minutes) {
   var hours = 0;
   var min = minutes;
   var i = min;
   while (i >= 60)
      hours++;
      min -= 60;
      i -= 60;
   }
}


4. Almost done! Just need to handle some special cases-- when there is less than ten minutes, you want it to read "06" or "0-whatever" not just "6". The second case you want it to handle is when there are 0 minutes, you want it to say "00". Sounds like an if statement.

function time_conversion(minutes) {
   var hours = 0;
   var min = minutes;
   var i = min;
   while (i >= 60)
      hours++;
      min -= 60;
      i -= 60;
   }
   if (min === 0) {
      min = "00" 
      return hours + ":" + min;
   } 
   else if (min < 10) {
      min = "0" + min;
      return hours + ":" + min;
   }
   else {
      return hours + ":" + min;
   } 
}


This problem sent me for a loop. Yes, pun intended. It literally sent me into an infinite loop multiple times. Despite having to come back to this problem on different days to give it another shot, that little victory kinda made it all worth it. It's a pretty awesome feeling of accomplishment figuring these challenges out, even if it may not be the most concise code or employ best practices.. I have to actually know how do it first, amirite? Here's to the small victories!

P.S. I move to New York in TEN DAYS. (!!!!!!!!!!!!!)

Check out past problems here:

Monday, May 30, 2016

a/A Practice Problems: Sum Nums

This one is pretty straight forward. The only thing to look out for: for loop starting with num and decreasing each time.

Problem: Write a method that takes in an integer 'num' and returns the sum of all integers between zero and num, up to and including num.


Game Plan: 
>>  function takes in one parameter, num.
>>  for loop to go through each number below (and including) num (i--).
>>  declare variable and set it equal to 0, will hold value from each iteration of loop.
>>  return total sum


Step 1: 

                                                        function sumNums(num) {
                                                        }

Step 2:

                                                       function sumNums(num) {
                                                          var sum = 0;
                                                       }

Step 3:

                                                        function sumNums(num) {
                                                           var sum = 0;
                                                           for (var i = num; i > 0; i--) {
                                                           }
                                                        }

Loop starts with num and stops when it is greater than 0, or 1.

Step 4: 

                                                         function sumNums(num) {
                                                            var sum = 0;
                                                            for (var i = num; i > 0; i--) {
                                                               sum += i;
                                                            }
                                                         }

You could also write sum = sum + i;

Step 5:

                                                          function sumNums(num) {
                                                             var sum = 0;
                                                             for (var i = num; i > 0; i--) {
                                                                sum += i;
                                                             }
                                                             return sum;
                                                          }


Check out past problems here:

Sunday, May 29, 2016

a/A Practice Problems: Longest Word

This problem was a tricky one. Despite its "easy" rating, I struggled with it for a little thinking of the most roundabout ways of answering, including multiple nested for loops-- which as you can guess was just a joy ride. Maybe possible, but that way would have taken me forever to write and would have probably been very error prone. The hardest part for me turned out to be knowing how to set it up. How could I solve this so that I didn't need to go through every character of a string? Well, you don't want to go through every character necessarily (my first mistake), but rather every word. But I'm getting ahead of myself...

Problem:  Write a method that takes in a string. Return the longest word in the string. You may assume that the string contains only letters and spaces. You may use the 'split' method to aid you in your quest.

Game Plan: 
>>  Function that has one parameter (string) in this example.
>>  How can you quickly separate each word? Split method. The result of which will return an array of all the words. You'll want to set this equal to some variable for easy access later.
>>  For loop to go though each word to determine if it's the longest.
>>  This is where I got sort of lost-- I knew I needed to do all the above steps, but I didn't know how to keep track of which word was longest. If you had one independent variable to compare each word to, wouldn't that be easier than making some sort of March-Madness bracket system where you compare every word to each other? Methinks yes. So in order to do that, I'll set a variable equal to 0. The way the loop will work : compare the first word's length to 0, if the word is bigger (which it will be since it will be at least one letter character), i'll save the length of that word to the variable. As the loop progresses it will compare each word to this variable, saving the larger of the two.
>>  if statement to compare lengths
>>  Return longest word

Step 1:

                                             function longestWord(string) {
                                             }

Step 2:

                                             function longestWord(string) {
                                                var words = string.split(" ");
                                             }

Make sure there's a space between your quotes so that it knows where to split the string. If you didn't include the space, you would get each individual character at each index.

Step 3:

                                             function longestWord(string) {
                                                var words = string.split(" ");
                                                var longest = 0;
                                             }

We declare this variable, so that we don't need to compare each word to each other, but rather one independent variable.

Step 4:

                                            function longestWord(string) {
                                               var words = string.split(" ");
                                               var longest = 0;
                                               for (var i  = 0; i < words.length; i++) {
                                               }
                                            }

Remember when you split the string, it results in an array of all the words so we can use the array's length.

Step 5:

                                             function longestWord(string) {
                                                var words = string.split(" ");
                                                var longest = 0;
                                                var longIndx = 0;
                                                for (var i  = 0; i < words.length; i++) {
                                                   if (words[i].length > longest) {
                                                      longest = words[i].length;
                                                      longIndx++;
                                                   } 
                                                }
                                             }

The tricky part-- if the length of the word at index i is greater than longest (0), then we change the value of longest to the length of that word. AND since we want to keep track of which word we are on, we can set a marker of sorts at 0 (longIndx) that will increase if the word at position i is greater than longest. The value will let us know the index number of the longest word so that we can call it later.

Step 6:

                                             function longestWord(string) {
                                                var words = string.split(" ");
                                                var longest = 0;
                                                var longIndx = 0;
                                                for (var i  = 0; i < words.length; i++) {
                                                   if (words[i].length > longest) {
                                                      longest = words[i].length;
                                                      longIndx++;
                                                   }
                                                 }
                                                 return words[longIndx];
                                              }


Try it yourself!

Check out past problems here:

Thursday, May 26, 2016

a/A Practice Problem: Factorial

Challenge Description: "Write a method that takes an integer 'n' in; it should return
n*(n-1)*(n-2)*...*2*1. Assume n >= 0. As a special case, factorial(0) == 1"

Quick refresher on factorials: say n = 5, a factorial would be the product of 5*4*3*2*1 or 120.

Step 1: Write out your plan of action:

                         >> make function with one parameter
                         >> declare variable and set equal to 1
                         >> for loop to take each number less than n and multiply to variable
                         >> if statement for if n = 0
                         >> return product

Step 2: Declare function. Same rules for naming variables.

                                                  function factorial(n) {
                                                  }

Step 3: Set variable and set equal to 1.

                                                   function factorial(n) {
                                                      var product = 1;
                                                   }

Step 4: For loop with descending counter: Set i equal to n because you want to make sure it's the first number to start with and is included. The loop should stop once it hits one, or when i is greater than 0. Decrement by one each time to include each number below n (and over 0).

                                                    function factorial(n) {
                                                      var product = 1;
                                                      for (var i = n; i > 0; i--) {
                                                      }
                                                    }

Step 5: If statement for if n is 0; else multiply i to the variable product. The loop will start with n and every time it will be multiplied to the variable product.

                                                     function factorial(n) {
                                                       var product = 1;
                                                       for (var i = n; i < 0; i--) {
                                                           if (n === 0) {
                                                              product = 1;
                                                           } else {
                                                              product *= i;
                                                           }
                                                       }
                                                     }

Step 6: Return the variable product: because you have to return the answer...

                                                     function factorial(n) {
                                                        var product = 1;
                                                        for (var i = n; i < 0; i--) {
                                                           if (n === 0) {
                                                              product = 1;
                                                           } else {
                                                              product *= i;
                                                           }
                                                        }
                                                        return product;
                                                     }

There you have it! Any comments or questions are all appreciated.

Check out past problems here:

Wednesday, May 25, 2016

a/A Practice Problems: Reverse a String

When I had first learned about App Academy I quickly tried to learn everything I could to solve those damned practice problems. Short story shorter, I could not wrap my mind around the first one. I came back to it the other night, however, and with all my new fandangled Javascript skills I was able to take on more than a couple. SHABOOYAH. What really helps me when I am learning something new is seeing the process someone went through to solve the challenge at hand, in this case reversing a string without using the reverse method. Because I found so few resources like that initially, I thought to do it myself and hopefully be that source for someone else.

Note, App Academy is a Ruby/Rails school, but if I read correctly they'll allow you to answer challenges in whichever language you choose -- obviously I'll be doing all these in JS.

Your mission: "Write a method that will take a string as input, and return a new string with the same letters in reverse order"

Disclaimer: This is my methodology, there are many other ways to do this; most likely there better ways to do this. But I'm a noob, so shut it.

Step 1: Write out what you need to do. It's like a game plan or blueprint to getting the answer. It helps me to really think about what the question is asking so that I can answer appropriately. This one is pretty straightforward.

     >> have to be able to accept input (function via arguments/parameters) 
     >> pinpoint last letter of string (1 less than length)
     >> run through & return letters from last character (loop with descending counter)
     >> return reversed string

Step 2: Define the function. Only rules that apply are the same for that of variables. (no numbers, symbols to start off; contains only letters, numbers, $ and _). Set up function to accept one parameter, "word" in this example.
  
function reverseString (word) {}

 Step 3: Find last character of string. I set the value equal to a new variable, lastChar so that it's easier to access. Remember indexes start with 0 (hence the minus 1).

                                                       function reverseString(word) {                                                  
                                                         var lastChar = word.length - 1;
                                                        }

Step 4: For loop with descending counter. Instead of setting i = 0, I set it to lastChar so that it would start with the last letter of the string; i >= 0 tells the loop to stop once it reaches the index 0, first letter of the string; i-- tells the loop to decrement by one each time.

                                              function reverseString(word) {
                                                 var lastChar = word.length - 1;
                                                 for (var i = lastChar; i >= 0; i--) {
  
                                                 }
                                              }

Step 5: Concatenate. If we were to give ourselves a test case, say reverseString("abc");, and if we were to console.log(word[i]) we would see that each letter would come back in reversed order. Hooray! But, (boo!) it wouldn't come back in one string, "cba". To fix this, I thought do declare another variable (empty this time) and then add each letter to it, aka concatenate it into one. The code block inside the for-loop is telling the function to add each letter to the variable newString. I'm not sure why you would use bracket notation for a string when they're reserved mostly for arrays, but I know it works and that they operate similarly and that's the best explanation I can give.

                                              function reverseString(word) {
                                                 var lastChar = word.length - 1;
                                                 var newString = "";
                                                  for (var i = lastChar; i >= 0; i--) {
                                                     newString += word[i];
                                                           
 // same as newString = newString + word[i];
                                                  }
                                              }

Step 6: Return newString. Now that we have all the working parts, the only thing left to do is to return the reversed string. Remember to put this after the function.

                                              function reverseString(word) {
                                                var lastChar = word.length - 1;
                                                var newString = "";
                                                 for (var i = lastChar; i >= 0; i--) {
                                                     newString += word[i]; 
                                                 }
                                                 return newString;
                                              }

If you were to type this into your console or whatever environment, you should get "cba". There you have it, guys! Comment with any questions or if you have any techniques that would solve this quicker, I'd love to read it. Good luck!

Friday, May 20, 2016

My 3 Favorite Free Resources to Learn Javascript

When I started this blog (a whole 4 posts ago), I was focused on learning Ruby. Since then I've switched gears because the school I will be applying to focuses solely on, you guessed it, Javascript. I hope to visit Ruby again in the future, but for now I'm all bout those curly braces. Woo.

I've had some success in learning the language. Thanks to the interwebs and all the free resources I've been using, I feel pretty good about where I'm at so I wanted to share what's helped me.

  1.  A Smarter Way to Learn by Mark Myers.
    This book was recommended to me by a friend and has since become the basis of all my understanding. The way Myers explains things is pretty straightforward and everything builds on itself almost perfectly. Every chapter-- only 89 --  lasts a couple of pages, 5 maybe at most and once you're done there are practice problems associated with each chapter to test your newly acquired knowledge. While the book focuses on many different concepts, it does so in pretty basic ways, but this is to ease you into the language and help you to actually understand the fundamentals.

  2. Codewars
    When I first heard of Codewars I was eager to sign up. Be aware, there are two problems you have to answer right to actually become a part of the site, but once you are it's great! It works like Karate in that you start at the beginner levels denoted by higher numbers (8 kata) and work your way down (or up) to 1, at which time you can be a self-proclaimed Jedi coding wizard. You can target what you want to work on: fundamentals, algorithms, logic, loops, etc, in every level and go from there. You earn honor or "kata" for every question you answer right and it's a great way to test or refine your skills. As far as negatives go, it can be really self-defeating. Sometimes the challenges themselves aren't written correctly and so you can't get the points even though your answer is right. Other times it serves as a humble reminder that you might be a long way from where you want to be. But don't get discouraged! If you can't solve a problem and it's eating away at you (a common thing 'round these parts) forfeit the kata and read some solutions (only visible when you forfeit or answer correctly). See what others have posted and you might find that the answer was well within your reach, and you will start getting better. Remember: wax on, wax off.

  3. YouTube
    My biggest struggle with learning to code on my own was a lack of resources out there after the plethora of pure beginner sources. I was having a hard time translating what I had learned into actual working programs. Step in YouTube: the world's best guidebook for any and all things. While I have had some trouble finding a video that explains the exact problem I'm working on, I have found some really helpful tutorials that lead me the right way. The user, kudvenkat, has been one of my personal favorites, but there are seriously endless amounts of people out there willing to help. Another personal fave: LearnCode.academy.
Of course this list is not exhaustive, and as such I have a few others I'd like to shout out: 
Honorable mentions: w3schools, devtools and stackoverflow.

My hope is that this helps someone else out there, but know there are so many other people and resources willing to help if this particular list doesn't work for you. Go and get on with your bad self.

Happy Friday, friends!