Photo Source My Summer break has been wonderful and although I'm sad to see it go, I'm also extremely excited for what this Fall Semester has in store.  School starts tomorrow for me and I wanted to do a quick recap of what I was able to accomplish this summer.  I published an aggressive To-Do list earlier this summer and I thought it would be cool to see how much of it I was actually able to accomplish :) Here are the items that I wanted to accomplish this summer: Unity 5 Training & C# Learning Swift for iOS Learning Android Studio Blender Maya UX Design Foundation Sass Here are the items that I actually accomplished this summer: Learning Swift for iOS Learning to Test Code Effectively Practicing Data Structures + Algorithm Design Sass Foundation Speed Reading Techniques Memory Enhancement Techniques PHP Wordpress Development As you can see, I took some liberties with the list that I originally intended to complete. Mid-Summer, I felt that I needed to work on my foundational learning abilities. I have always had issues with my memory and I take copious notes to overcome that issue. I have also always had the desire to read more rapidly, although I never really thought that I could effectively become a "speed" reader, I discovered that improving my reading speed is actually a goal that I could reasonably accomplish. Since these are baseline skills, I felt that it was a great idea to work on them before the new school year began. Learning to test my code more effectively fell within the same category of foundational learning, because I felt as though enhancing this skill will be beneficial for my current internships and future ones as well! Although I didn't quite get done what I originally set out to do, I was still able to end my Summer break with a decent set of new tools that will help me along the way!
End of Summer Recap

Take a Look
I often like to read through some of Google careers information for insight into what I should be focusing on learning while still in school.  Recently, I stumbled upon Google's Technical Development Guide, targeted towards Computer Science students that are looking to get a job at Google.  This guide gives online supplemental resources for students.  In my opinion, this guide is intended to ensure that CS students understand that they will not likely be successful while relying solely on school curriculum to gain the knowledge necessary to be a developer. Let's take a peek at what they suggest... To say the very least, this guide is extensive with action items ranging from taking an Introduction to CS course to learning Artificial Intelligence, to learning Parallel Programming.  Their list seems to approach being a well-rounded developer from two angles: 1) Gathering technical skills and broadening programming language knowledge and 2) Gaining experience working in team environments and on teams outside of usual school structure. What does this list entail?
  • Take an Into to CS Course
  • Code in (at least) ONE object-oriented programming language (C++, Java, Python)
  • Learn other programming languages: JavaScript, CSS + HTML, Ruby, C, PHP, Perl, Shell Script, Lisp, Scheme. 
  • Test Your Code
  • Develop logical reasoning and knowledge of Discrete Math
  • Develop a strong understanding of algorithms and data structures. 
  • Develop a strong understanding of operating systems. 
  • Learn UX design
  • Learn Artificial Intelligence
  • Learn how to build compilers
  • Learn Cryptography
  • Learn Parallel Programming
  • Work on projects outside of the classroom
  • Work on projects with other developers 
  • Practice your algorithmic knowledge and coding skills
  • Work on a small piece of a large system (code base), read and understand existing code, track down documentation, and debug
  • Become a Teaching Assistant
  • Gain internship experience in software engineering
You may be thinking, "this list would take a life time to master".  In many cases, that is the truth, but I think the goal is to have a decent understanding of all of these areas then use that knowledge determine an area to master.  For instance, I plan to specialize in Artificial Intelligence in grad school, but it's still important for me to understand the other areas because they all work together.  Regardless, this list gives us a glimpse into what Google expects from future Software Engineer applicants.  Google accompanies their list with links to online resources that students can use to accomplish these tasks.  I've highlighted in blue the tasks that I have worked on since beginning my CS degree program.  I did this to demonstrate just how obtainable this list is, especially when tackled over time. Bottomline...  I believe the biggest takeaway in this situation is that students shouldn't rely solely on their school's curriculum to give them all of the knowledge they need.  I have been an advocate of supplemental learning and have mentioned it in many blog posts before this one.  What's more interesting is that supplemental learning has gone from being a way to be competitive while job hunting, to being an expectation for many successful organizations.  As technology advances, developers will need to have a broader skill baseline in order to be successful.  Personally, I believe this Technical Development Guide is a tool that any aspiring developer should use, not just ones that want to snag a job at Google!
Want a job at Google? Google’s Technical Development Guide!

Take a Look
Photo Source Two months ago, I spent a week or so learning how to build a Wordpress site.  As a part of my post-mortem, I identified some performance issues and things that I would have done differently.  As I'm taking some time to review previous projects, I am taking the time to tackle a big issue of my site so far -- performance. A major part of the lessons I learned after creating my site was how quickly a Wordpress (or any) site can become bloated and have bad performance.  I'd noticed that my site took a lot longer to load than I'd like, so this weekend, I am carving out some time to tackle the issues with the site so far. My benchmark...  I was pleased that Google rated my site 99/100 for User Experience.  This was a pleasant reward considering I had user experience in mind the entire time that I was building the site.  However, my Speed results were an abysmal 43/100.  One of the major issues was render-blocking CSS and JavaScript, with a few images that were uncompressed and unoptimized.  I was able to fix the image issues immediately, which bumped my score to 59/100 on both mobile and desktop.  However, the other issues require a big of digging on my behalf. Where to go from here... Now that I've identified the issues, I feel as though I am well on my way to correcting them.  Here are some tasks things that I will be doing in hopes of improving performance overall: 1) Reformatting my stylesheets:  I have one gigantic stylesheet that is a mess of issues, which was identified in my post mortem.  Although I usually code neatly and with a purpose, much of the piece-meal formatting of my style sheets came from me not fully understanding how Bootstrap + Wordpress works together. 2) Testing my CSS: I installed CSS Lint to run tests on my CSS code and the first test revealed 3 errors and 143 warnings.  I will fix these warnings and errors, but I will also take this time to re-organize my style sheets to make far more sense than it does currently. 3) Broken JavaScript files:  I have a couple of errors in my JavaScript files caused by updates to some plug-ins.  I will work on getting these errors corrected. I believe this is a really good place to begin.  From there I will continue to use Google Page Insights to increase my page speed.  I believe there is some serious refactoring to be done on my part, and use the knowledge that I've gained over the past few months.  Very exciting times, indeed!
Optimizing My Site: Google Insights

Take a Look
The situation... Recently, I have been preparing to get another internship to replace my Administrative position.  I am aiming to submerge myself into programming and put as many hours into coding as I possibly can.  I currently have a "spare-time" Internship on a game development team, as well as a part-time Administrative position that allows me to work from home or anywhere with an Internet connection.  But since I changed careers two years ago, I have felt as though I wanted even more exposure to coding, so lately I have been preparing to obtain a programming position to replace my current part-time Administrative position.  (Don't worry, my boss knows and supports me completely lol.) My fears... Over the past few years, I have read so many horror stories of hiring managers conducting interviews with recent Computer Science graduates, only to discover that they aren't able to code their way out of a paper bag.  I have heard stories of the dreaded programming tests that accompany many programming positions.  These fears, in part, are what drove me to do self-learning on top of my degree program.  Above all else, I read (A LOT) and practice 10 times as much as I read.  However, no amount of practice has been able to squash my fears around the dreaded programming interview test. What's my solution?... More practice. lol. However, I have been practicing with a purpose.  I have been focusing on interview-specific algorithms and timeboxing myself to overcome the shakes that I get with just thinking about programming on the spot.  I spend a few hours a day implementing different data structures, practicing kata on code wars, looking at the implementation of different data structures within different programming languages, and pretty much living and breathing programming. So, what about Python?... Yes, python.  I originally fell in love with C++ as my favorite language after taking a C++ last year.  But after a few different events, I was exposed to Python.  First, there was me joining Code Wars, which didn't have C++ as a language option for code katas.  Then, there was my interest in scripting languages in general after reading requirements of different job openings.  Finally, there was the announcement of one Maryland's major Computer Science programs moving to Python to teach new students. Armed with this information, I started to practice Python about 4 months ago.  I have read a bunch of resources for interview tests and just yesterday I made a repo for my solutions to these problems.  This repo is my means of tracking changes and bugs and making improvements along the way!  If you haven't gathered yet, my primary means of preparing for these types of interviews is lots and lots of practice.  Personally, I don't think there is a better way, and I also believe that Python is a great language to use for this purpose! Happy Coding :)
My Programming Interview Preparations

Take a Look
It's that time again... the usually dreaded time to return to classes.  This time around, I have mixed feelings regarding the start of my final Fall semester.  On one hand, I am holding on to the tiny bit of my summer vacation.  But on the other hand, I am more than excited to begin this semester, if only because of the classes that I will be taking this time around.  Here's my Fall semester lineup:
  1. Data Structures and Analysis
  2. Computer Systems Architecture
  3. Linear Algebra
  4. Advanced Programming Languages
  5. Object Oriented Concurrent Programming
I also plan to supplement my learning with a couple of free MOOCs:
  1. Algorithms 1
  2. Software Testing
As usual, I have piled my semester with tons of fun and plenty of things to learn.  This semester will be special to me because I will be taking the bulk of my Computer Science core classes.  As I took some time to re-read the course descriptions, I could feel the excitement rising because much of the gaps I've felt lately, will be addressed this semester. Let's discuss these "gaps"... A huge part of my studies has been self-taught.  Although I am attending a university in order to get my degree, a large portion of what I know now, has come from countless hours of practice, reading, and completing MOOCs online.  While stumbling working my way through my self-learning, there have always been areas that I felt would have been more clear had I gotten to that point in my formal education.  Or, in many cases, the resources available teach a watered-down version of a subject, which left gaps in general understanding.  In these situations, I found myself seeking different sources of information to fill in the gaps, but sometimes, the information still was elusive at best. I know that school will not fill in all of the gaps, but I do feel as though this semester will provide me with a more in depth guideline to follow in order to deepen my understanding, specifically around data structures and algorithms. So, onward I go to my next to last semester of school!  
Back to School: This Semester’s Classes

Take a Look