#ruby, #rails, #OOP, #javascript, #ember

Showing posts with label self education. Show all posts
Showing posts with label self education. Show all posts

1/13/16

Resume, LinkedIn, Portfolio and Updates from this Week

Past few days I have been all over rubymonk.org, Lynda.com, guides.rubyonrails.org, Rails 4 Way (3rd edition) and some treehouse videos. I also have a portfolio page up here, updated resume, and linkedin ready to go.

I never considered myself to have attention deficit disorder until I began to learn to code, not because I constantly struggle with looking at my phone or scrolling my FB feed, but because of the sheer amount of things I want to learn it's hard to decide where to focus my attention. I have decided I am going to finish the month of January out strong and begin seriously looking for work in February. In the mean time I am continuing to practice ruby, study rails, read everything I can, and see if I can find some freelance or open source projects that I can contribute to.
White Board | Check List | Recent Goals

Here a summary of the past few days:

Ruby Monk-- Finished ruby primer and am 2 1/2 chapter into Ruby Primer Ascent. I have found this site very helpful with brushing up on things I have forgotten and also teaching me a lot of new things about the way Ruby works. New things I have learned include: converting implicit blocks to explicit, how a class instance variable can be beneficial, the difference between puts and p, and how to use the splat method.

lynda-- finished RSpec course and have a good grasp on how the framework works and why it is so important. Learned how to write model specs (usually the most important specs), helpers, controllers with the HTTP requests, and views.

RubyonRails Guides and Rails 4 Way-- I have spent a few hours today reading over how routes work and was amazed at how it really cleared up a lot for me. Even though I have been feeling good about rails this was super helpful to be reminded about HTTP and route names and how 'resources :name' works.

Tree House-- signed up for a trial (I know, getting spread thin) but am really interested on their take on how ActiveRecord works. I am currently finishing up their Database Foundations tutorial working with sqlite and Work Bench.

When I first decided to learn to code I was attracted by the lucrative salaries and job security. That part of the industry seems less important to me the more I learn. In the past five months I have developed a different way of interpreting things and that is really rewarding. It's amazing because I have been putting in long hours (10-12 hours a day the past 8 days) and am genuinely enjoying the process. My focus is on being a great programmer and I have never felt better.

-John

12/28/15

Tech Talent South Complete, Now What?

Outside of Class
Learning to code is a journey. Let me first acknowledge that I am not at the end of that journey, and I that is a good thing because learning to code is a process, not a means to an end. Looking back, everything that I have learned at TTS over the past 8-weeks is amazing and I am beyond thankful for the opportunity. Last night I was going over my personal notes from the first week and it feels great seeing where I was then and where I am now. Over the course of this class I have built over 30 apps, learned git, github, Ruby, Rails, JavaScript, HTML, CSS and even a few things that werent on the lesson plan such as testing.

Of all the cool things that we did during class, my favorite and most rewarding would definitley be our final project that two classmates and I completed during the final weeks. We were told to make an app using the things we had learned in class; no guidelines. While brainstorming we decided our favorite thing about class was working with api's, so we looked around the web and found some we liked. We eventually choose a weather api and an event api. Two weeks of wrestling with our code we created Drink Weather, a silly web app that takes a users current location and returns the current weather, an adult beverage recomendatioin based on that weather, and also an activity according to weather and location. Working from scratch really helped cement what we had learned throughout class and the all the mistakes that were made during our creation of Drink Weather made us better coders now. We also became very familiar with working on github as a team, and how to deploy a rails app to heroku. I know it's not perfect, but we all took pride in the creation of Drink Weather.

TTS is now completed and here are the next things on my agenda:

  • Test, test, test. Pretty much every dev that I have had the pleasure to talk with over the past month has mentioned the importance of testing which is one of the areas that TTS did not cover in depth (we only spent one day on testing and really only provided a basic introduciton). I understand why it is important and know I will need to be comftorable with the practice in order to land a job. 
  • Learn VIM- I know that there are mixed opinions on vim, atom, sublime, etc. but after talking to some pros it does seem that learning vim could really improve my proficiency and help with job placement.
  • Sharpen my Ruby- I am most familiar with Ruby of all languages with JavaScript coming in second. When getting advice from people in the industry, one of the things I was most interested in was whether I should focus on learning one language really well or spread my self out and learn the basics of a few languages. Most people said to get really good at Ruby first which will not only help with a job but also with the process of learning a new language in the future.
  • Sharpen JavaScript- Like Ruby, I am familiar with JS and want to continue to improve on it. 

I officially quit my previous job at the end of August and aimed at securing a job within six months. That means I will be employed be the end of February, wish me luck.

-John

11/9/15

Tech Talent South Week 2 Update

Tech Talent South has greatly sharpened my understanding of many programming basics I thought I had already mastered. It has only been two weeks with the program and  I cannot not over emphasize how great it is to have an instructor to bounce questions off of. TTS runs four days a week, four hours each class and two extra office hours each day. So far we have covered the basics of Ruby (arrays, methods, hashes, and Classes), which I had studied when I first began to learn in August by reading Chris Pine's book, "Learn to Program". It was a good refresher on the Ruby language since I had not done anything with Ruby since I read Pines book and I also enjoyed being around other students during the learning process. I have also found it valuable to see how others work out the problems as they go; it ultimately helps me think about problems in different ways, something I could not duplicate working on my own most of the time.

Last week (week 2) we got into Rails which I was really excited about since this was essentially uncharted territory for me. I remember just starting out I wanted to try rails after finishing some ruby stuff but gave up after an installation fail. lol. Thinking back to that point I remember being overwhelmed with all of the information out there and not knowing where the hell to go. Being in this program really helps with that. Now I have a set curriculum with an instructor leading the way to help out when I get hung up on something.

This weekend I started going through the Ruby on Rails Tutorial by Michael Hartl, which is a great supplement to what we are doing in class. I have gotten through the middle of Ch 3, which is basically what we have accomplished in class up to this point. I have to say that going over this book after the work we do in class really helps me understand the concept of rails and how the MVC framework functions. In my own words, when you type something in the browser that then goes to the rails router and requests that page from the controller with the same name. That then, using instance variables, goes to the model which retrieves the information from the database, returns that to the controller which then goes to the view page, renders the html back to the controller and to the browser...and boom, web page.


We created some small rails apps so far including a mock university which uses a database to store classes, students, grades, and depatments. I have gotten a lot more familiar with the command line as a result of using rails as well as a general knowledge of git and heroku. I'm really excited to see what I can get my hands on this week as I continue to further my learning in and out of the classroom.

-John

Tech Talent South Scholarship

Since making the decision to learn how to program I have always been attracted to the idea of a coding bootcamp. The problem for me, however, was that I was unsure of how valuable a two or three month program would ultimately be compared to the cost. About a month ago I heard about Tech Talent South and that they would be teaching a "total immersion" course here in Jacksonville this fall and that they would be offering a 100% scholarship for the semester; I decided to apply. 

A couple of days after my application I received a call from there communications director for a phone interview that lasted about an hour. Over the course of the interview I talked about much of the material I had completed on my own, what I was currently working on, and why I had developed an interest in programming in the first place. I also referenced this blog and some general interests that I had such as volunteering and supporting the hometown Jacksonville Jaguars. Overall I thought the conversation went well, and I was told that I would be accepted to the 8-week program and would also be considered for the scholarship.

Two days later I received the good news: I would be awarded the scholarship for 100% tuition! I was ecstatic to say the least. I have just finished up my second week of class and will update with what I have learned so far, but I believe that the reasons I was awarded this scholarship are very similar to the reasons that employers higher new employees. Here's what you can do to help your chances at landing a similar scholarship or that future dream job:

Ask lots of questions- during the interviewing process the person being interviewed should be asking just as many questions if not more than the person conducting the interview. This not only shows genuine interest and the fact that you have done research on your own about the company you applied for but it also helps for you to decide if the company is a good fit for you.

This website does a great job of giving example questions and also explaining why they are important.

Write a blog- Especially if you are entering a new field such as computer programming, a blog acts as a modern day resume. When interviewing in person or over the phone, a blog will help cover in detail some of your accomplishments and progress that you may forget to mention. Don't worry about how many readers you have, writing shows comprehension, real time progress, initiative, and the ability to communicate. This post by Tim Ferriss goes into more detail about breaking into a new industry and the importance of blogging your progress.

Do your HW- Before applying anywhere, do your research That means check out the website, look up the CEO or founder, and reach out to any current employees or graduates.

-John

10/22/15

Friedman's "Schemer" and the Wonderful World of Recursion

"In order to be creative one must first gain control of the medium...In engineering, as in other creative arts, we must learn to do analysis to support our efforts in synthesis. One cannot build a beautiful and functional bridge without a knowledge of steel and dirt and considerable mathematical technique for using this knowledge to compute the properties of structures. Similarly, one cannot build a beautiful computer system without a deep understanding of how to "pre-visualize" the process generated by the procedures one writes." -Gerald J. Sussman taken from the forward of The Little Schemer

As I have mentioned in other blog posts, learning the programming basics on your own can be frustrating. Sometimes it feels like I'm wandering through a thick fog that I can't find my way out of. But alas, Daniel P. Friedman's The Little Schemer has given me hope.

This book is all about recursion, something that I did not understand but had used on websites such as Free Code Camp and Code Academy. There were many "ah-ha!" moments for me while reading this book, but most importantly I began to understand what the hell recursion actually is. In my own words, recursion is a problem that solves itself by referring back to its beginning after modifying at least one part of the original problem. In Friedman's words, "recursion is the act of defining an object or solving a problem in terms of itself."

I first heard of this book while going through Douglas Crockford's JavaScript lectures on youtube. He mentioned that every programmer should understand what this book teaches, and when Crockford recommends such things, young programmers should listen.

The book is structured in a wonderfully refreshing way especially for someone who intends to learn on their own. The text consists of simple questions that build toward more complex realizations. Instead of giving definition terms in English, the book works the reader to a conclusion on his/her own by using the previous question and answer to help define the next.

The Little Schemer is written in the language Scheme, something I have never seen before, but I had no problem picking up the concepts of the book because the language has many similarities to JavaScript. For example, a scheme function would translate to JavaScript like this:

(define phish (lambda (a b c) (body)))


//and in JavaScripst...


function phish foo(a, b, c) {
    return body;
};


As you can see the functions are pretty similar so for most of the book I just left the problems in scheme. One thing that really stuck out to me while going through this book is the functions that I have been taking for granted such as the simple .length property in JavaScript, or the very often used "rember" function found in the book. "Rember" takes two arguments, one an atom and one a list, and removes the first argument when it finds it in the list.

This book helped me understand recursion MUCH more, and is something that I will return to over the next few weeks when I feel I need a refresher.

-John

10/19/15

The Selfish Gene and Programming


This book is more of a reason behind why I am learning to program than biology. I first began reading this about a month and a half ago (around the same time I began coding full time) just out of curiosity. I soon began seeing all the similarities between natural selection and coding computers today. In The Selfish Gene Dawkins explains his theory that we evolved to the conscious beings that we are today by being programmed by the most basic life forms: genes. Dawkins starts at the beginning and describes how at one point a particularly unique molecule was formed by accident and “had the extraordinary property of being able to create copies of itself.” This resulted in the first gene which then replicated and mutated itself into more complex molecules… and, well, you probably know the rest of the story.

What is so fascinating to me is that the birth of genes is similar to the birth of computers. And, like Moore's law, evolution evolves at a faster rate the more complex it becomes; kind of like the way our technology evolves exponentially as we continue to build off of the accomplishments and research of the people before us. Now, like the way we program computers (writing code; then running, testing, and modifying it to see if it works) genes program us to survive. Dawkins calls the life forms they program ‘survival mechanisms.’

Genes are in all living things and at some point certain genes began to finding new ways to modify, or program, the survival machines that they inhabit (living things) in order to better deal with the ever changing environment.

“Genes are master programmers, and they are programming for their lives. They are judged according to the success of their programs in coping with all the hazards that life throws at their survival machines, and the judge is the ruthless judge of the court of survival.”

Enter the brain, and, more specifically, the consciousness of our species: homo-sapiens. With our highly evolved brains, we now have the ability to overwrite old programs from the past to better fit our world today. For instance, people experience approach anxiety when meeting new people. Back in the day this made sense because there was real danger in meeting strangers when living in secluded tribes. Today, however, that is not the case and with education and awareness we can overcome this uncomfortable feeling in order to better our chances at survival and the possibility of spreading our genes or finding a mate.

I like to believe the moment that we reached consciousness is exactly the same as the moment that technology will reach singularity (in theory). Once we became conscious we were then able to override our initial programming. We developed birth control, altruistic behaviors, and social cultures that typically go against natural selection. This leads me to ask the question that many today are pondering: What will happen when machines reach singularity (in theory) and are then capable of recursive self improvement? Will they defy their programmers as we have defied our genes?
Dawkins goes on to describe the cultural evolution that we are influenced by. He defines these influences as memes, which is an element of a culture or system of behavior that may be considered to be passed from one individual to another by nongenetic means, especially imitation. We are thus programmed by our genes and the memes that we have created via culture that is passed down from generation. “We are built as gene machines and cultured as meme machines, but we have the power to turn against our creators. We, alone on earth, can reel against the tyranny of the selfish replicators.” In this sentence Dawkins is optimistic about our species. He is hinting at the idea that we will overcome our natural selfish behavior in favor of deliberately cultivating and nurturing pure, disinterested altruism-- “something that has no place in nature, something that has never existed in the whole history of the world.” Will robots one day evolve in a similar way?

Besides artificial intelligence relations, there is also something beautiful about it’s implications that relate to programming. It’s extremely rewarding to have the opportunity to build something from the ground up, influencing and molding it as you would a child. Programming to me is just that, creating something from nothing that will evolve into a complex application that will influence the world (hopefully in a positive fashion). Dawkins book is a great reminder that even the most grandiose ideas, goals, and individuals have humble beginnings.

-John

10/17/15

Flexibility

As I continue this journey I am reminded many times over that flexibility is necessary when aiming to achieve any goal. What I mean by that? It is important not to become discouraged if one process is not getting you closer to your goal. In fact, that is bound to happen. What is important is the awareness that a process is not working and then the flexibility to modify it so that it gets you back on track. I have written in a previous blog post that I have a hard time of staying on track with one thing and thus not accomplishing anything.

“Stay committed to your decisions, but stay flexible in your approach.” -Tony Robbins

In order to simplify my study strategies I am classifying my day into three parts: rise, learn, and plan. The rise part I have down, it consists of waking up, deep breathing, meditating, running 2 miles, and eating breakfast. This typically takes place between 6 and 7:30 a.m.

The learning part of my day is where I typically go astray. Should I code on 

codecademy? Free Code Camp? Read a book on JavaScript? Watch youtube videos on how to code? Or search for a new resource that I have not even discovered yet??? To help with this I am breaking this part of my day (which is anywhere from 8- 12 hours) into two parts:

-Morning: I will read theory or a book on coding but ONLY ONE BOOK AT A TIME! The goal is to finish and write a blog post at the end of each week detailing what I learned from reading said book.

-Afternoon: I will actively write code. This can be anything from codeacademy, freecodecamp, codeschool, or a project that I am currently working on. However, this will be decided THE NIGHT BEFORE. Which brings me to the third part of the day.

Planning will take up the late afternoon and evening of my day. This is where I will decide what I will be working on the following day and also research any new material, ideas, job opportunities, and anything code related that interests me. This time will bleed into what I will also call “free time” which will consists of reading fiction or watching a football game in order to relax before bed.

-John

10/14/15

Crockford on JavaScript - Part 5: The End of All Things

Video of Lecture

In this lecture Douglas Crockford talks about some of the security threats that we face today on the web. Many of the problems, says Crockford, come from the amount of diversity on the web. Mashups (which is the combining of programs with different interests), too many languages with separate encoding and commenting, and the nesting of these languages are just a few of the complications that a browser will encounter on a typical day. Because of this the browser must do heroic things in order to decipher many web pages that then give attackers easier access to sensitive data.
Crockford goes into much more in this lecture such as what an attacker can access on the web and how advertisers can compromise security. My full notes can be found here.

8/12/15

In the Beginning...

Why should anyone learn to code? For me it comes down to investing in an education that makes sense in today’s ever evolving technical world. When I was searching for a degree to major in during my first couple of semesters in college I generally took the attitude that I should study the things that I enjoyed the most, and, in theory, a profitable job would follow suite. I choose to study English literature and if I could go back and do it again I would not necessarily change that. For me, the education I received from studying figures like Henry David Thoreau, Alan Watts, and James Weldon Johnson was monumental in my development as a person. The thirst for more of the things that we studied in class became desire that I could not quench, and to this day I spend much of my free time in the public libraries throughout Jacksonville.

I would, however, lower my expectations of the exchange value a liberal arts degree merits from others, primarily future employers. Perception is reality, and education is only as valuable as that reality.

My goal since my sophomore year of college was to go straight to law school after graduation. That began to change once I started to research law schools and began debunking many of the myths that surround the coveted JD. After speaking with attorneys, professors, and current law school students, I realized three things: One, practicing law is nothing like what you see on T.V.; Two, the financial investment of a law degree can be crippling-- forcing graduates to work in environments that they hate simply to pay back what they owe in student loans; And three, I realized that many of the graduates passing the bar exam are another two or three years away from actually knowing the ins and outs of the law game.

After taking a "pause" after college, I began to search for a career I could fit into, and like many other college graduates, I had no idea what I was doing.

A few months ago a friend of mine introduced me to the website codeacademy.com and told me to give coding a try. I began on the “Ruby” course. My curiosity rose. The next day I researched the mass influence that computer languages have on our world and its potential impact on the future and my curiosity turned to intrigue. People say there is a moment in our lives that wakes us up; an awakening of sorts. A moment so significant it's like seeing the world for the first time. This was not that moment for me. In fact, I envy those who experience sudden "aha!" moments that change their life around in an instant. For me that has never been the case, however, the introduction to Ruby was my very first step in taking control of my future and making a decision to enter the tech world.

"A real decision is measured by the fact that you've taken a new action. If there's no action, you haven't truly decided." -Tony Robbins

I have officially taken action. In early August I gave my two week notice to my employer and agreed that the 21st would be my last day. Since the middle of July I have been researching the proper path for a self taught programmer and I have been overwhelmed with the amount of information out there along with the amount of people in the community that are willing to help. Simply put, I can't wait for the 21st to come around so I can begin this journey full time. Until then, I will settle for nights and early mornings.

Today, as I write this, I am taking action for a better future. Creating this blog, investing in my self education, and learning a computer language are all steps that will help me reach my goal of securing a job in the tech industry.

-John