Thursday, October 13, 2016

Wartime Lifestyle & Earning to Give

One of the main reasons I am excited about my transition from teaching to software development is that I believe that I can do more good in the world as a software developer than a teacher because of my skill set and interests. A key part of using my life effectively for the good of others is using my money effectively.

John Piper talks about the idea of living a 'wartime lifestyle'. Rather than maximizing our own comforts and luxuries now, the way we live should be "based on clear biblical passages of love and sacrifice and suffering in ministry and the brevity of life and the lostness of the world and the suffering of those around us." We should "move toward need rather than toward comfort and security, toward generosity and simplicity." All of this is based on the biblical commands to love others and share the Gospel to the ends of the earth.

It was probably over ten years ago that I thought about the idea of setting a certain income limit and giving away anything I made over that limit. There is so much need in the world and so many lost people, I feel morally obligated to limit my comforts to help others.

A few years ago I came up with the idea of giving away all of my income over 200% of the federal poverty level. This is something my wife and I have committed to doing.

The good thing about tying my income limit to the federal poverty line is that it automatically adjusts for inflation and family size. My income has yet to reach 200% of the federal poverty line but we may get to that point this year. In the meantime, I have been trying to give away 10%. Basically, my family is committing to staying at our current standard of living.

For a long time I thought that I should keep this plan a secret from others because of Jesus' command in Matthew 6:3: "But when you give to the needy, do not let your left hand know what your right hand is doing."

While my desire to give is rooted in my commitment to Jesus, I first started wondering about the benefit of sharing my giving plan with others when I read an argument from a secular perspective. A blog post from givingwhatwecan.org makes the case that talking to others about what you give and the benefits of giving can motivate others to give. This will lead to more people being helped. That blog post starts off, "A five-minute conversation has the potential to prevent 40 lives being lost."

What really made me think I should be open about my giving plan was when I read "Is It Wrong to Let Others Know How Much We Give Financially to the Lord’s Work?" by Randy Alcorn.

Randy Alcorn is a best-selling Christian author who earns minimum wage and gives away 100 percent of his book royalties. He has given away more than $6 million to date. He is someone I have tremendous respect for.

Randy directly addresses the verses above from Matthew. He makes a very good case that the verse is mainly about motivation and that in other parts of the Bible it is a positive thing to share about giving. I will quote his conclusion in full and emphasize what I feel is the key point.

This is why in the church we need to take the risk of openly telling stories of what God has done for us in the arena of giving. In fact, what may force me to swallow my pride more than anything is talking about giving when it runs the risk of making it look like I’m patting myself on the back. (Our motive for not talking about our giving is not always humility. Sometimes it is fear, doubt and, yes, even pride.) To vulnerably express to others where I am in my giving pilgrimage can be an act of humility. Though we must always check our spiritual pulse, it certainly does not have to be an act of pride.
So, I shouldn’t be bragging about my Bible study or prayer or evangelism or parenting or giving, but I shouldn’t be covering it up either. It’s easier for people in our churches to follow footprints than commands. If we aren’t willing to openly and humbly discuss giving, how can we expect to raise up givers? The church has plenty of examples of consumers—we need to see examples of givers. (That’s why hearing all the testimonies is appropriate.) Hebrews 10:24 tells us to “spur one another on toward love and good deeds.” We can only be spurred on to by what we’re aware of, what we can see.
This commitment to giving has opened up a lot of freedom in my thought life in terms of my career path. I am about to hit my income limit. At this point, earning more money will not benefit me or my family. It will only benefit others.

Without the idea of money clouding my judgement, it is much easier to just focus on serving others with my life. Any career decision will be based on what is going to have the biggest impact on advancing God's kingdom on Earth. I understand the focus discussed here should apply with or without an income limit. It is just a little easier for me with the limit.

I will still be motivated to increase my income so I can give more. But I have to determine if I can help more people by using my time to make money so I can give more or using my time to serve people directly.

The current plan is to give 1/3 to spreading the Gospel to unreached people groups (the primacy of this was inspired by reading "Let the Nations Be Glad!" by John Piper), 1/3 to local causes, and 1/3 to high-impact charities fighting global poverty.

Something that this plan has already motivated is my web development company that currently gives 60% of all income to charities.

It is my hope that sharing about my plan for giving will motivate others to give more. I hope that this increased giving will lead to more people hearing the good news of Jesus and getting out of poverty.

Monday, October 10, 2016

Angular 2 vs React: Which one should a new developer learn?


I have been learning both React and Angular 2 and have been wondering which one to focus on. They both are useful in front-end development, helping to manage states, and making it possible to create one-page web apps. However, there are some major differences. While both could be helpful to learn, this short article focusses on which one is best to learn for an entry-level developer.

Decisions
Angular 2 is a framework, while React is a library. This means that there is more of a set way of doing things in Angular. There is a lot more built-in to Angular. With React it is common to add other libraries to get all the functionality needed.

In some ways, this makes things easier in Angular since you don't have to spend as much time learning about the other libraries you need. Although some people may like that the core of React is a little simpler.

HTML or JavaScript
Angular 2 and React have different focuses when it comes to HTML and JS. One article I read sums it up like this: "Angular 2 continues to put 'JS' into HTML. React puts 'HTML' into JS."

React uses the JavaScript we already know while Angular adds a lot of Domain Specific Language to HTML. In this way, there is a steeper learning curve to Angular.

React's focus on JavaScript also means that the skills will transfer better to other JS libraries and frameworks.

Job Outlook
Since React is younger than Angular, there are very few developers that have much more than 1 year of React experience. There are a lot of Angular developers that have 3+ years experience. So if you start to learn React now, you won't be as behind compared to learning Angular now.

Most importantly, at this time there are more companies hiring developers for React than Angular and the hiring trend for React is still increasing while the trend for Angular is decreasing.

Conclusion
React seems like the best choice for a new developer to learn. However, it may depend on what job you want to get. For instance, one of the companies that I most want to work for uses Angular and not React. Because of this, I am going to continue to learn Angular.

Thursday, October 6, 2016

How to get a developer job in a small market, part 1


This is is the first in a series of posts about how to get a developer job in a small market. This series will ideally end with me getting a developer job in a small market. :)

I have spent a lot of time learning about web technologies and mobile application development. I have done some freelance projects and created many projects for myself. 

The problem is that I am coming from a career as a teacher so my actual work experience in the software field is low. Also, I like living in Saginaw and I would like to find a position nearby. At just under 50,000 people, Saginaw is a very small market when comes to jobs for software developers.

So how am I supposed to find a job in a small market with very little experience? I have found a strategy. I am following some of the suggestions in a blog post by Haseeb Qureshi titled "How to Break Into the Tech Industry—a Guide to Job Hunting and Tech Interviews". Haseeb is a person who went from knowing almost nothing about software development to landing a job at Airbnb paying $250k/yr in only one year.

Haseeb's advice for networking is to "just buy everyone coffee." He suggests offering to buy coffee for as many people as possible in the tech industry. I don't know very many people around my area who are software developers. 

Which brings me to a key idea he gives: cold-emailing people. 

I have spent a lot of time on LinkedIn and Google lately finding local software developers to contact. Just today I had my third meeting with a software developer in the area. I have been able to find out a lot about the companies they work for and about the application and interview process. 

Two of the meetings were for lunch and one was over Google Hangouts. Meeting for lunch definitely allowed me to connect with the people better. 

The Google Hangout meeting was exciting because it was with someone who works at Covenant Eyes, which is the company I most want to work at. He said Covenant Eyes was his favorite place he has worked. The interview process he described at Covenant Eyes seemed to be more challenging than what the other people I met with described for their companies. 

There was one question that all the people I met with seemed to agree on. I have been reading a lot about the importance of knowing algorithms and data structures for an interview. Everyone I met with said that they did not have to answer any questions about algorithms or data structures during their interview. I think maybe it is because these people work at smaller companies. I am still going to try to get better at algorithms but maybe I don't have to put the emphasis on it that I was originally planning.

I have definitely learned a lot from these meetings and I am going to continue to try to line up meetings so I can learn as much as I can about the industry in the area.

Sunday, October 2, 2016

History and Future of Programming

I watch a lot of YouTube videos about software and I came across a very interesting video by "Uncle" Bob Martin called "The Future of Programming". It is actually more about the history than the future. It was very interesting for a budding programmer such as me.

He starts by talking about Alan Turing who wrote the first code that we would identify as code in 1936. In 1960 there were a could hundred computers in existence and a couple thousand programmers. Just 5 years later there were around fifty thousand computers and a hundred thousand programmers. So in about 20 years we went from one programmer to a hundred thousand programmers. Just 5 years later again in 1970 there are over a million programmers. After this the number of programmers doubles every five years. That means half of all programmers have less than five years experience and the profession is in a perpetual state of inexperience.

Programming has only been around for about 80 years.



Wednesday, September 28, 2016

Better than I thought?

I often listen to coding podcasts and watch coding videos on YouTube. One of the YouTube channels I watch a lot is called FunFunFunction. He has done a few pair programming videos.

One of his more recent videos is Cellular Automata - Pair Programming. This is an hour-and-a-half, almost unedited video of the host, MPJ, pair programming with another person. It was so interesting to watch what it is actually like to program with no editing. There was a lot of looking things up on Google, making small mistakes, and forgetting how to do simple things. MPJ is a developer at Spotify and has a very popular YouTube channel about programming. It was very encouraging to see him struggle to write a program.

Maybe I'm not as bad at programming as I thought.

Sunday, September 25, 2016

Using templates: Is web design a solved problem?

I purchased my first domain name back in the year 2000 while I was a senior in high school (November 27th, 2000 to be exact. Thanks whois.net!). But I think I made my first website on geocities when I was in middle school. The most exciting content was the "joke of the week" that got updated at least every two months. I'm not sure templates even existed back then. Since I started out with no templates, it took me a while to realize how great they are.

My life goals have changed a few times over the years. I wasn't always planning on making a career of web design and software development but I have been making websites for people periodically since my first site in middle school.

Thanks to the Wayback Machine, we can see one of my first websites created in 2001! Yes, that is my face on a cow's body in the corner. The first time I was paid to develop a website for a business was in 2006 and they haven't done any major update since! See it here.

It wasn't until about a year ago that I realized how great website templates are. Everything I created before that was from scratch. I have found that starting with a template makes things easier, makes everything look better, and allows me to focus on the actual content of the website. Also, most templates nowadays are mobile responsive designs so a template helps guarantee your site will look good on all devices. It is still important to have an understanding about what makes up the template. An understanding of HTML, CSS, and JavaScript allows me to make customizations so the site can be directly tailored to the needs of the client. Thanks to templates, my more recent sites look so much better than my earlier sites. Here is one I created for an organization called P.A.C.T.

All this makes me think about a quote from the most recent episode of the Shoptalk Show, a podcast I listen to about web development. The host was quoting an (unnamed) friend that said "maybe web design is a solved problem." The most important thing to most users is ease-of-use. Using common design patterns makes websites easier to use and therefore makes the website more effective. Trying to reinvent the wheel every time only hurts the overall project and wastes time.

Compare the first website I created for the Houghton-Jones Neighborhood Association to the current website I created for them. The first was before I used templates, the second was after. I am never going back.

Saturday, September 17, 2016

Learning Ruby on Rails: Pragmatic Studio vs. The Ruby on Rails Tutorial


I first started learning Ruby on Rails back in January based on the suggestion of a friend. We decided to complete the Pragmatic Studio Rails course together. I have now successfully finished both the Pragmatic Studio Ruby on Rails: Level 1 course and Michael Hartl's Ruby on Rails Tutorial. I am going to do a brief review of the pros and cons of each course. I found both the courses to be very well-done and professional and both would be good for a beginner learning Ruby on Rails However, that does not mean I would recommend people do both courses. At the end I will offer a suggestion for people trying to decide the best route to take to learn Ruby on Rails.

Pragmatic Studio Ruby on Rails: Level 1
This course costs $149. After some discounts I paid $126.75. Before completing this course, I also went through their Ruby course to learn the fundamentals of Ruby. The course is broken up into 26 different sections and each section has a video and exercises. Text within the exercises section goes over pretty much everything covered in the videos so it is easy to find specific information.

The videos are professional quality and they all feature a husband/wife team. The interaction between the two hosts make the videos more interesting. They break everything down so it is very easy to follow. In the exercise section that goes along with each video, they guide you through creating a project that is similar, yet still different, to the project that they create in the videos. Since the exercise project is different than the one they create in the videos, it forces you to think through things a little more instead of just copying and pasting. This helped me learn the material better.

The project for this course was to make a move review site. Check out the  website I made with this course.

Michael Hartl's Ruby on Rails Tutorial
I completed this course many months later, partly to get a refresher on Ruby on Rails. One of the best parts about this course is that it is free. This course is basically an online textbook and tutorial. The free version does not contain any videos. This course covered a lot of the same concepts as the Ruby on Rails course. However,  compared to the Pragmatic Studio course, it seemed a little more advanced and I got the feeling that the work-flow was more aligned with what it would be like in an actual job environment. I did not complete the Pragmatic Studio Level 2 course but this tutorial covered many topics from the Level 2 course such as users, authentication, and admin privileges.

As far as I can tell, the Ruby on Rails Tutorial is the most popular way to learn Ruby on Rails. Also, Micheal Hartl is constantly updating it. I e-mailed him about a very minor error and he fixed it within a day. While I did not run into any major errors in the Pragmatic Studio course, I feel more confident about the accuracy in Hartl's course just because of it's popularity combined with very quick updates to any mistakes that are found.

One thing that could be a pro or con is that the current version of the Ruby on Rails tutorial focuses on creating a project through Cloud 9, a cloud-based IDE, while Pragmatic Studio suggests to use a local installation. So Pragmatic Studio gives a little more detail on how to install everything locally.

Both courses give instruction on using git, Heroku, and Amazon AWS.

The project for this course was to create a site similar to Twitter. Check out the site I made with this course.

What I would do differently if I had to do it again
Though they are both great courses, if I had to do everything again I would not do the Pragmatic Studio Course. In addition to going through Micheal Hartl's free course, I would join his Learn Enough society for $29.00 /month that includes videos to go along with the Ruby on Rails Tutorial. This subscription also includes other material as well. I did not do this so I cannot speak to how these videos compare to the Pragmatic Studio course but based on how well done the free tutorial is, I would assume they would be very good videos.

One last thing to consider is that the Pragmatic Studio course may be a little easier for people with little programming experience. While both courses give detailed step-by-step instructions, the Pragmatic Studio course breaks down some concepts a little better.

Friday, August 12, 2016

Stuck? Start!

I just finished creating a Roguelike game from scratch using React.js for a project in the FreeCodeCamp curriculum. It is called Internet Dungeon. Even though it was part of a curriculum, they do not give you any help whatsoever on how to complete the project. There is no tutorial. It's just: "Here are the objectives. Do it!" I suppose this is similar to a real job environment.

I can honestly say I had no clue where to start. I kept trying to learn more about React hoping that this would get me going. Here are some of the resources I used:


  • Thinking in React - Directly from Facebook, the co-creator of React.
  • Lynda.com: Learn React.js: The Basics - While I already finished my software development degree, the inculded subscription to Lynda.com is still active! I am actually getting more use out of it after graduating than before graduating because I have more time.
  • React.js Fundamentals - This is a great free course.
Eventually I realized that learning more was not actually helping me to know where to start on the project. I just needed to start doing something, anything. I already had a few more basic React projects under my belt. I decided to start by making some modifications to a project that had some minor similarities to the one I was creating. The previous app was The Game of Life. That app has a grid of squares that change color based on set rules. My first step to making my Roguelike game was to use the grid from 'The Game of Life' and see if I could make a square that you could move around the grid using arrow keys. 

After I finally just started programming more ideas came to me and I was basically able to make the rest of the game without getting stuck for too long. I still had to do more research about things such as creating a randomly generated dungeon and creating a 'camera' that followed the player but once I just got started these things came easier. And the interesting this is that I used almost none of my original code from 'The Game of Life' that got me started.

Now I want to recreate the entire game using Angular 2 instead of React!

Thursday, July 7, 2016

Reader Mail

I've received my first reader mail! He asked a good question that I still haven't completely figured out the answer to.

Hello,

What made you decide to change careers? Was being a special education teacher draining? I currently work as a programmer/IT Support and I’ve been contemplating on making a move to teaching. Was finding a teaching position difficult with a WGU degree?
-Tony 

 Below is the response I sent to him:


I am still figuring out why I decided to change careers. I know some of the reasons, though. I don't know if they will apply to your situation.

Being a teacher is very stressful. (It is also possible that being a programmer will be stressful.) I have taught in an urban school district. Maybe some of my challenges as a teacher would not have been so bad in a different setting. One of my main struggles as a teacher has been classroom management (getting the kids to do what they are supposed to do). There are people out there that say that anyone can become good at classroom management with the right techniques. That could be true but personality seems to play a big role. I feel my personality makes things more challenging in this area. It is easier for me to understand how to become a better programmer than how to become a better teacher.

Also, while it is nice to get summers off as a teacher, there is very little flexibility in a teacher's schedule. We get two personal days per year. So while we do get more time off than other jobs, we do not get to choose when the time off is. Also, I will never be able to have 'flex time' as a teacher. And as far as getting summers off, most teachers I know, including me, work during the summer as well. Teachers often work well over 40 hours per week during the school year so that kind of makes up for some of the extra time off.

I became a teacher because I wanted to make a difference in the lives of others. I now realize that I can still make a difference as a programmer. I still enjoy working with kids and I plan to teach students programming in the urban area that I live in. The students in this demographic have almost no exposure to computer programming and it will be good to give them this opportunity. Also, I think I can have more of an impact on youth in a non-school setting. I have found that it is easier for me to form meaningful relationships with kids if I am not forcing them to do something they don't want to do (like math). My wife and I actually specifically moved to our inner-city neighborhood to try to show God's love to people in the neighborhood. We have tried to get involved with the great things that were already happening in the neighborhood. It is actually my hope that becoming a computer programmer will open up more opportunities to serve people in our neighborhood and city. My current dream is to get a remote software job that allows me to work a little less than 40 hours per week (it's not possible to get a job like this as a teacher). This will open up more time for mentoring youth and serving in other areas.

Besides the above reasons, another key reason that I want to switch to computer programming is that I am very interested in computer programming! I wrote my first computer program when I was in middle school and have been interested in it ever since. I actually took some programming classes in college (that I enjoyed) before eventually deciding I wanted to become a teacher. I think it is fun to try to solve programming problems. Hopefully it will still seem fun after it is a job.

You asked about how difficult it was to get a teaching position with a WGU degree. I got a position one month after a graduated. However, I probably just got lucky. My host teacher from student teaching got another job and I was hired for the exact same position where I was student teaching just one month previous.

-Beau Carnes

Monday, July 4, 2016

Free Code Camp Calculator

I have been cruising through the material at Free Code Camp.   I should be finished with their Front End Certification pretty soon. I recently made a calculator in JavaScript as one of my projects on Free Code Camp! Click result below to see it.



See the Pen calculator by Beau Carnes (@beaucarnes) on CodePen.

Tuesday, June 21, 2016

A program to help my marriage

Like many wives, mine likes complements. Unfortunately, I am usually pretty bad at remembering to give them. A couple years ago I decided I would send her an e-mail every weekday with three nice things. For a while I was pretty consistent and she really appreciated it. Eventually, though, I became inconsistent.

Programming to the rescue! I have used JavaScript and Google App Scripts to make the best program ever. First, I made a Google Form that only has one question. When I fill in the form with something I love about my wife and press submit, it adds it to a Google Sheet called "3 Things - Specific". 

I use that form to add things I love about my wife that are specifically related to something that happened in the last day. I also have another sheet that I manually add to called "3 Things - General". In this sheet I have over 250 things I love about my wife (many have similarities) that are always applicable. 

My program first checks to see if there are any new entries in "3 Things - Specific". It uses those first. However, if there are less than three entries, the program will pull entries from "3 Things - General". Once it gets to the end of the general list, it goes back to the beginning. The program will send an e-mail to my wife (from me) with those items. It is setup to run automatically run every weekday at the same time. The best part is that my wife gets an e-mail every day with three things I like about her and I don't have to remember to send it every day. Also, I can easily add things I like about her as soon as I think of them.

Here is the code from my program:

function threeThings() {
  var emailAddress = "tea......@gmail.com";
  var lastRowG = 257;
  var subject = "3 things";
  var thing1 = "";
  var thing2 = "";
  var thing3 = "";
  var cellS;
  var cellG;

  
  var ssG = SpreadsheetApp.openById("1vS9TBuT.......");
  var ssS = SpreadsheetApp.openById("1QdukK9t.......");
  var sheetG = ssG.getSheetByName('Sheet1'); 
  var sheetS = ssS.getSheetByName('Form Responses 1'); 
  var rangeG = sheetG.getRange(1,2); 
  var rangeS = sheetS.getRange(1,3);
  
  var startRowS = rangeS.getValue();
  var startRowG = rangeG.getValue();
  
  if (startRowG >= lastRowG-3) startRowG = 1; 
  
  cellS = sheetS.getRange(startRowS, 2).getValue();
  if (cellS != "") {
     thing1 = cellS;
     cellS = sheetS.getRange(++startRowS, 2).getValue();
     if (cellS != "") {
       thing2 = cellS;
       cellS = sheetS.getRange(++startRowS, 2).getValue();
       if (cellS != "") {
         thing3 = cellS;
         startRowS++;
       } else {
         thing3 = sheetG.getRange(startRowG++, 1).getValue();
       }
       } else {
       thing2 = sheetG.getRange(startRowG, 1).getValue();
       thing3 = sheetG.getRange(++startRowG, 1).getValue();
       startRowG++;
     }
  } else {
       thing1 = sheetG.getRange(startRowG, 1).getValue();
       thing2 = sheetG.getRange(++startRowG, 1).getValue();
       thing3 = sheetG.getRange(++startRowG, 1).getValue();
       startRowG++;
  }
     

  var message = "1. "+ thing1 +"\n2. "+ thing2 +"\n3. "+ thing3;
  
  MailApp.sendEmail(emailAddress, subject, message);
  sheetG.getRange(1, 2).setValue(startRowG);
  sheetS.getRange(1, 3).setValue(startRowS);
  SpreadsheetApp.flush();
}  
  

Sunday, June 19, 2016

Life Goal: Work at Covenant Eyes

I have been learning software development for awhile now but up to this point I have been a little aimless. There are so many programming languages and frameworks out there and it is hard to know which ones to spend time learning. I have heard many conflicting opinions as to which languages to learn first and which languages will be most in-demand in the future. I am excited to report that I have finally figured out a path forward. I have identified my dream job and I am going to focus on the languages and frameworks listed in a recent job posting I saw for the position. I already have some of the skills listed but I am going to strengthen the skills that I already have and learn the skills that I have yet to practice. One of my main life goals is to become a web developer at Covenant Eyes in Owosso, Michigan.

There are many reasons that I want to work at Covenant Eyes and specifically why I want to work there as a web developer. The main reason comes down to life mission. Though I have been interested in computer programming since a young age, I specifically chose to become a special education elementary teacher so I could have a positive impact on the lives of others. I have also been very involved in community service and volunteering over the course of my life. We even moved into our inner-city neighborhood with the purpose of showing God's love to our neighbors. Though I enjoy teaching, I have an even greater passion for technology and software. For some reason it is not until recently that I realized that I could combine my passion for technology and software with my passion for serving others.

I have determined that Covenant Eyes is the perfect place where I can combine these two passions. The company develops accountability software to help people fight against internet temptation. One of their slogans is "We bridge the gap between technology and relationships." I have seen first hand how accountability software can save relationships and help people deepen their relationship with God. I love their mission and I want to be part of the great things that God is doing through their company.

While I love the company's mission, I also love that they support the community involvement of their employees. Their career page lists this company perk: "Use normal work hours to volunteer around the community and help and serve others outside the workplace. No paid time off required!" God is doing a lot of great things in our neighborhood that I want to be a part of. Covenant Eyes is a company that will support me in this. This is another top reasons that I want to work for Covenant Eyes.

The next reason I want to work for Covenant Eyes is closely related in my mind to the previous reason. They sometimes allow their programmers and web developers to work remotely. I live 40 miles from their office so driving there would not be too much of an issue. However, the flexibility of working remotely would open up many more opportunities for service in my neighborhood. I am an extremely conscientious worker and would have no problem working on my own. This would save me travel time and allow me to get more involved serving others.

The final reason I want to work at Covenant Eyes is the job itself. I really enjoy web development and I would love for it to be a full-time job. I have had my own domain name since the year 2000 (www.beauvine.net) and created my first personal website even before that (on geocities!). While it is not until recently that I have started to keep up with the newer web technologies, I have always enjoyed web development. As I have started to get more into web development lately my interest and passion for the topic has continued to grow. I am super excited for the next phase of my life as a web developer and I am even more excited about the possibility of doing this for Covenant Eyes!

I have just started my summer break as a teacher. This is the first year that I am not teaching summer school or taking an extra summer job. I have decided that I am going to work full time this summer strengthening my skills in the areas listed on the web developer job description from Covenant Eyes. I am not sure yet if I will do one more year of teaching before trying to make the job switch to web development. Either way, my goal for the summer is to develop a few more original projects to demonstrate my skills as a web developer and programmer.

Friday, June 17, 2016

How I completed my entire WGU Software Development degree in 6 months (76 CUs)


I completed an entire Software Development bachelor's degree from Western Governors University in only six months. This school is unique in that you can work at your own pace so as soon as you finish the requirements for one class you can go immediately to the next class. I would like to explain how I accomplished this to hopefully help other students.


First of all, I should confess that I already misled you. I am not quite finished yet. But I have passed every class except the final project and I still have 1.5 months left until it has been 6 months. So I have passed every class except the final project in only 4.5 months! I am sure I will finish in time but I did not want to wait until I finished completely to post this. I have done this all while working full-time and spending time regularly with my wife and two young kids.


I am currently an elementary teacher (that degree also from WGU) and before starting I had very little experience with software development. All my general education classes were transferred in from my previous degree. Also, 15 years ago I got my A+ and Network+ certifications. While they did not initially transfer over to my WGU degree because they were so old, after I passed Security+ those other certifications were automatically renewed and then WGU allowed me to get credit for them. That alone took care of four classes for me. So that left me with 76 CUs (credits) to complete.


One of the biggest skills that helped me is being a good test taker. It is very important to understand questions completely. Also, many times one question will give hints to the answer of another question. It is also very helpful to regularly check the course chatter or reddit to see if there are suggestions from other students on how to do well in the exams. I spent time trying to figure out what things were most likely to appear on the exams so I could just study those things. For the most part, I only went through the entire learning resource for the classes that had to do with Java. For the rest I would find another way to learn the required material quicker or just skim. I also found study material that other WGU students made on Quizlet.com that helped me to just study the important concepts. Also, I was constantly reviewing upcoming classes to make sure I had all learning resources before it was time for me to start the class. I ordered books and reserved books from the library so they would be ready as soon as I needed them. WGU makes all the books available online but it was nice to not have to read everything on a computer.


I took all pre-assessments "open book". Usually the final exam asks similar questions so the pre-assessment helps to know where to study. I would usually take the entire pre-assessment without looking at the book and I would mark the questions I did not know. Then I would go back through and look up the questions I did not know. I would keep a count of the number of questions where I changed my answer. After I saw my final score on the pre-assessment I was able to calculate what my score would have been had I not changed any answers. This allowed me to judge how ready I was for the final. Sometimes I would leave a question wrong on purpose so my final score on the pre-assessment was not too high. I thought it may seem weird to my mentor if my final exam was always way lower than my pre-assessment. I took screenshots of all the questions I had trouble with so I could study those concepts further. I only retook a pre-assessment once. Since the second time had the exact same questions as the first time I decided not to retake anymore pre-assessments. It was easy to score high enough to not have to retake since I was taking them “open book”. It was not helpful to retake the same exam since I already had screenshots of all the difficult questions.


Another key thing that helped me get through quickly is that I made a schedule of when I planned to pass each class. I usually gave myself between 1 and 3 weeks for each exam based on reviewing what the course entailed. The schedule motivated me to put in extra time studying so I could pass the exam on time. WGU recommends spending 20 hours per week on coursework. I may have even averaged less than that. It does not take a lot of extra work to finish quickly. You just need to work smarter.


While I don’t remember everything I did to pass the classes, I have made a list of some of the things that were very helpful for me to get through the classes quickly. I also show how long each class took me and what grade I got on the exam. I do not give my grades on the projects but most of them I passed on my first try.


Network and Security - Applications - C178 Time: 3 weeks, Grade: 853
This class is all about earning the CompTIA Security+ certification. All classes that you pass by earning a certification have a lot of resources online that you can use to help pass. I read a lot of forums about different tips for this exam. I watched Professor Messer videos about Security+. Here is the first (of two) playlist: https://www.youtube.com/playlist?list=PLG49S3nxzAnkcKd71N4OjSv4cUXNhoPlQ


I watched all the videos at 2x speed. I also watched some of his study session videos and I purchased his Network+ notes for $10. I read the notes a few times. I took all the practice exams on uCertify but I did not read much of the material on there. I did read the sections that I scored low on when I took the practice exams. I also took some other practice exams I found online.


Introduction to IT - C182 Time: < 2 days, Grade: 81%
The only studying I did for this class is during my ‘open book’ pre-assessment.


Principles of Management - C483 Time: < 2 days, Grade: 71%
52% to pass? This is a joke class that they don’t expect you to actually do. Studied during pre-assessment.


Scripting and Programming - Foundations - C173 Time: 4 days, Grade: 89%
I quickly went through the learning resources on Udacity and Codecademy. This material is not very long, especially when you watch the videos at double speed. There are not actually very many videos they want you to watch on Udacity according to the pacing guide. This exam was pretty basic.


Scripting and Programming - Applications - C169 Time: 5 days, Grade: 82%
I read “Java for Everyone” completely. I was able to check it out from the library through interlibrary loan. This was the only learning resource I used. I watched a cohort recording that helped with the final project. Also, the course mentor sent me a file called “ArrayListExample.zip”. This contained code very similar to what was required in the final project. Looking at that code, along with watching a few YouTube videos from Derek Banas, helped me to complete this project quickly.


Operating Systems for Programmers Time: 5 days, Grade: 88%
The main thing I did for this class was to read the powerpoint presentations that are accessible in the learning resource. These basically provide a summary of all the important concepts. I also did the practice quizzes and read through the parts of the actual book that I struggled with. This is the class that I retook the pre-assessment. I was a little concerned about this class so I read through more of the book than I originally planned.


Data Management - Foundations - C175  Time: 7 days, Grade: 78%
As far as I can remember I just went through the entire learning resource for this class.


Data Management - Applications - C170 Time: 7 days, Grade: 86%
I think I went through most of the learning resource for this class. Also there was a pdf from the course mentors that was very helpful for completing the project.


Data Management for Programmers - C192 Time: 8 days, Grade: 85%
Don't be intimidated by all the reading. There are not that many questions on the exam and they are all about core concepts. If anything in the reading seems complicated (i.e. relational algebra and calculus), it is probably ok to just skip that section entirely. Just keep asking yourself, "Would they really use one of the 56 questions to test for this concept?" Also, keep open the study guide while you read. When you get to a new section heading, do a search in the study guide using the keyword from the section heading. If that keyword is not in the study guide, it is probably safe to skim the section very quickly and not read in detail. A lot of the exam involved actual SQL commands. Also, there are quite a few questions about schemas (star, snowflake, starflake). Some of the chapters in the in the pacing guide do not have concepts in the objectives. I skipped chapters 3,10,11,12,14,15, & 16. I probably read less than half the book in detail and skimmed the rest.


Organizational Behavior and Leadership - C484 Time: 1 day, Grade: 81%
Another joke class only needing 51% to pass. In the ‘course tips’ section there is a link to ‘Key Terms’. I read over this before the exam.


Data Structures - C189 Time: 4-5 days, Grade: 93%
I read through the entire learning resource. I think I got this book from the library through interlibrary loan. Videos and code samples from Derek Banas on YouTube really helped on the project.


Business of IT - Project Management - C176 Time: 9-10 days, Grade: 831
This class was for the Project+ certification. I mainly just studied notes that someone else made for the exam. You can get them at this link. http://www.techexams.net/forums/project/109567-passed-project.html
Besides that, I just skimmed uCertify (focussing on the chapter summaries) and did the practice exams on there.


Software I - C482 Time: 9-10 days, Grade: 90%
I read the book “OCA Java SE 7 Programmer I Certification Guide” by Mala Gupta. The book was for version 7 and I took version 8 so I did some additional reading, some through the WGU library, to learn about the version 8 concepts. I did not read any of the uCertify material but I went through all the practice exams on uCertify. These are the exact same exams as the Enthuware exams. The course mentor told me that if I could score at least 65% on the practice exams then I would be ready to take the final since the practice exams are much harder than the final. That was true.


Software Engineering - C188 Time: 4 days, Grade: 65% (minimum grade to pass!)
I read all the suggersted reading and I reviewed this a few times https://quizlet.com/95219442/software-engineering-wgu-c-188-flash-cards/
I don’t think I did the practice exam in the learning resource.


Business of IT - Applications - C179 Time: 6 days, Grade: 87%
The course mentors provide a fill-in-the-blank study guide. The following quizlet has almost all the answers. https://quizlet.com/112474086/c179-study-guide-fill-in-the-blanks-flash-cards/. I used just studied this quizlet and some other quizlets and the study guide and I was able to pass the exam.


Software II - Advanced Java Concepts - C195 Time: 20 days, Grade: 66% (1% more than minimum)
This is the most challenging class in the degree. I read through all the uCertify material. Instead of doing the practice exams on there I purchased and completed the Enthuware practice exams. Here are some other helpful resources I used:


Client-Server Application Development - C193 Time: 11 days, Grade: 80%
No secrets to this one. I just read the book and did the practice quizzes.


Mobile Application Development - C196 Time: 17 days, Grade: 80%
I watched the suggested Lynda.com videos, along with part of another Lynda.com video called “Android SDK: Local Data Storage”. I did not read any of the book from the WGU library. YouTube videos from Derek Banas and The New Boston were very helpful. I also used the camera tutorial from the ‘course tips’ and countless searches on Google and Stack Exchange.

Sunday, June 12, 2016

Programming Journey

I am currently a special education elementary teacher. I became a teacher so I could have a positive impact on people's lives. However, I have always been interested in computer programming. I wrote my first computer program almost 20 years ago in Q-BASIC and I took a few programming classes when I went to college the first time. After some life experience, I have finally realized I can have a positive impact on people while in a career I am truly interested and passionate about. I am now about to finish a degree in software development (my third Bachelor's degree).

This last Friday was my last day of work as a teacher for the school year. I have decided to work full time this summer on learning to become a better computer programmer. I have a couple projects to finish up for my software development degree and then I will be completely self directed. I will be using this blog to share what I am learning and thinking about along the way.