Skip to content

Instantly share code, notes, and snippets.

@GraySmith00
Last active April 17, 2018 18:14
Show Gist options
  • Save GraySmith00/95acb282d29c98004a88170b832b7cb5 to your computer and use it in GitHub Desktop.
Save GraySmith00/95acb282d29c98004a88170b832b7cb5 to your computer and use it in GitHub Desktop.

Gray Smith Professional Development Pre-work

Directions:

For the activities listed below, please put your reflections for each of these 3 parts in your PD pre-work gist that you'll submit in the survey here.

  1. Read through 29 Behaviors That Will Make You an Unstoppable Programmer

    • Approximate reading time: 20 minutes
    • Pick out 3 behaviors that resonate with you in the list and describe why they resonate with you in a reflection (4-6 sentences).

    (3 behaviors goes here)

    #1 Use Google very aggressively.
    I've quickly realizing that great google searching skills are imperative to web development, especially when you are learning on your own and you don't have anyone there to help get you unstuck. First you have to know what exactly to type into the search bar. Sometimes if you're getting a specific error, like in Rails about 90% of beginner mistakes are the same 3 errors we've all seen a million times, then you can just copy/paste that error into google and chances are you'll be able to find about 10 stack overflow results with your exact same problem. So once you find the results it is important to be able to read the other person's code and make sure that he or she is getting the error in the same context as you and that you fully understand the solution that is being supplied and not just copying it into your code. There may be one or two subtle differences or things you need to change in their solution in order to make it work in your code. The kicker is that when you do find the solution to your problem, keep notes and write it down! That way when you inevitably run into the exact same problem later on, you can just refer to your notes and you're off to the races!
    Another example of when I use google, not for just a specific error, is when I want to figure out how to do something. So in that case I am basicall just searching in basic terms what I am trying to do and then usually finding what that thing is actually called and then searching that. For example, I might search "Javascript declare multiple variables on a single line" and this may lead me to some result saying "You can declare multiple variables on a single line in Javascript using destructuring." My reaction is usually "Ohhhhhh ok thats what thats called" and then I would proceed to search "Javascript Destructuring".

    #3 Acknowledge that micro-decisions matter.
    Naming is one of the most important things in the readability of your code. If your naming is terrible, how is anyone supposed to look at your code and have any idea what is going on? Whenever I am writing code I always try to imagine myself comming back to it after not having seen it for 6 months. If the naming is terrible and there are no comments, clearly I'm going to be completely lost and have no idea what is doing what. This led me initially to leave tons of comments in my code, which I think sometimes in the beginning stages and when following tutorials can be a good thing. I read an article recently though that said, if you are leaving tons of comments in your code, that means your naming isn't good enough. Thats probably true as good naming can really clarify things and a lot of comments can make your code very cluttered. So now I try my best to use really descriptive names and only put comments when I think it is crucial to me remember what is going on down the line.

    #9 Always analyze the clues found in error messages
    When you're really hoping everything is going to work perfectly and instead of a nice beautiful website, you refresh and get a big red error, its easy to scream "Nooooooo", throw your hands up and run away, we've all been there. Getting used to seeing and reading errors is very important to programming as debugging will inevitably be a very big part of your day to day work. One thing that set me up well for this when I first started leaning Ruby on Rails was practicing 'Error Driven Development' in which I would basically type in a URL and then work through the errors until I got to where I wanted to be. First it would say 'no route for /about' so I would build a route, then 'no controller action' so I would build the controller action, then 'no template' so I would build the view, and so one. Next thing you know, I had worked through a bunch of errors and I'm where I wanted to be. Error driven development is also kind of a good precursor to test driven development.
    Another thing that helped me deal with errors are only trying to do one thing at a time in my code before checking whether its working. You don't want to write a hundred lines of code fully refactored before you make sure its working. This will lead to probably lead to you having a bunch of errors and not having as tight of a grasp on where they're coming from. Finally, I set my expectations low and almost expect some type of error to occur and then I'm pleasently surprised when things actually do work on the first try! I am also still working on how to do proper debugging instead of just console.logging where I think the problem might be. I'm sure once I'm further down that road, things will be even much more clear.

    #12 Become a power-user of your development tools.
    Nothing can increase efficiency like knowing how to use you're tools. For a while I used Cloud9 as my developement environment, which is amazing for beginners and I would highly recommend it to anyone getting started who is scared to touch the terminal on their own computer. Cloud9 gets you up and running fast too as many things come pre installed. More recently I have been using VS Code as my developement environment and it is really amazing. There are so many great extensions that can help with everything such as easily implementing live reload to making sure you are writing clean, up-to-date, professional code.

    #16 Absorb massive criticism with ease
    This is something that I became very familiar and learned how to take in my music career. Writing music is very personal and its almost impossible not to form an emotional attachment to a song you've been working on. So then when you send it out to you other band members, manager, and record label A&R and get back a ton of feedback on things you need to change, its easy to be like "These people don't know what they're talking about! ahhhhhhrghh!" This is when you need to learn to trust the people that you're working with and know that everyone is on the same team and everyone wants collective success. Its best to then try to understand why that feedback was given and how it could make the song even better and go and at least try to implement their feedback and see how it sounds. This will leave you with two conclusions, "I implemented your idea and its way better now!" or "I tried my best to implement your idea and I really think it still sounds better the original way because of X." Almost everytime I've gotten feedback and my initial internal reaction has been "Noooo its perfect", once I calm down and try to implement it, I end up liking the song even more. The same goes for code I think.

    #17 Pair program with people with more experience.
    There is no better way to learn anything in life that to be in direct contact with someone that is better than you. Trying to learn how to play golf? Play with someone who shoots 10 strokes lower than you and ask them for tips throughout the round. There's so much to learn in coding that being in contact with someone further along than you is absolutely imperitive. I've made sure to reach out to anyone I know that is in tech to get either general advice or help with specific coding propblems. Its good to be around people that you can talk shop with too. The majority of the time people are more than happy and excited to share their knowledge. One of my good buddies from CU is a recent Turing grad and just hanging out with him and working on some things here and there has taught me a ton! I'm super excited to have access to other people that are better programmers than me while I'm at Turing. One of the things I'm most looking for in a job is to be part of a team I can learn from.

    #29 Move Fast and Break Things
    This is such an important rule for life in general. I have spent so much time in the past whether it be music or coding or whatever else, learning the perfect way to do something only to never get it finished or have it take forever. I know there is something to be said for planning things out and thinking through all the intricacies how your app is going to work before you start. Sometimes this can save you valuable time, but at some point you are just going to have to dive in and it probably will be before you've figured out all the secrets of the universe. Most times when I've solved programming problems, I didn't even know that problem was going to exist until I dove in and had to figure it out. The best way for me personally to learn and get good at something is repetition and failure. The more times you do something, the more it becomes second nature. I don't think its the worst thing in the world when you are learning, to write some inefficient code. Lately my gameplan has been to first just get something working, and later refactor, refactor, refactor.

  2. Organization is paramount to success both at Turing and in a career as a programmer. There are many ways to stay organized, but in this activity, you'll explore one system in particular -- utilizing a strong checklist. Read through and/or listen to this interview with Atul Gawande (author of the Checklist Manifesto). It includes an excerpt from his book, which is optional reading.

    • Approximate reading time (including the excerpt from the book, which is optional): 22 minutes
    • After reading, consider the idea of checklists. Write a reflection (4-6 sentences) on the benefits of a checklist and how an organizational system such as a checklist might help you first as a student and later as a full-time developer.

    (reflection on benefits of a checklist goes here)

    Wow, that is amazing that the average reduction in complications and deaths from surgeons using checklists was 35%! Although, I am certainly not surprised. A good checklist system is integral to any sort of productivity in my opinion. I have been using checklists and planners my entire career and attribute most of my success in high school and college to actively using my weekly planner. I am the first to admit that I can be forgetful at times, so when you have something to rely on that makes sure you won't forget what you have to do, it is invaluable. Having a good checklist greatly reduces stress as well. When you only have a mental checklist, you are putting much more pressure on yourself to remember everything you have to do at all times. This makes it almost impossible to deeply focus on one thing and to clear your mind when its time to relax. I am reading a book right now called "Getting Things Done: The Art of Stress Free Productivity" and in this book they describe drastic increases in productivity as well as reductions in stress in large part due to having a good checklist system that is written down. Personally I prefer to use a physical weekly planner with a pen or pencil for my day-to-day tasks and Trello for larger more long term tasks. Trello helps me break larger tasks down into actionable steps that I can get accomplished on a daily basis. Also, theres nothing more satisfying than crossing items off of your checklist!

  3. One tool we'll be using for your professional development at Turing is the Clifton StrengthsFinder assessment. Unlike other assessments, one of the hallmarks of StrengthsFinder is that it focuses solely on what you're already doing well in order to understand how to capitalize on those strengths.

Here is an excerpt from the above linked article about the purpose of StrengthsFinder:

The CSF is an online measure of personal talent that identifies areas
where an individual’s greatest potential for building strengths exists. By
identifying one’s top themes of talent, the CSF provides a starting point in the
identification of specific personal talents, and the related supporting materials
help individuals discover how to build upon their talents to develop strengths
within their roles. The primary application of the CSF is as an evaluation that
initiates a strengths-based development process in work and academic settings.
As an omnibus assessment based on positive psychology, its main application has
been in the work domain, but it has been used for understanding individuals in a
variety of settings — employees, executive teams, students, families, and
personal development.

You'll take this assessment in the first week of Module One, but this activity invites you to begin building an understanding of how learning about and developing your strengths applies to your success in your new career. Read through the following three articles and write a reflection using the questions listed below:

  • Approximate reading time:

  • After reading the three articles, answer the following questions in a reflection (4-6 sentences):\

    • What is your impression of strengths-based development? What questions do you have about this kind of development?
      (answer goes here)

    I think strength based development makes a lot of sense. If someone is passionate about what they're working on and feel that they are good at what they are doing, there is no question that the results are going to turn out dramatically better than with someone who is disinterested and wishes they were doing something else. The simple concept of asking an employee what they would be most excited to work on and what they think they would be best at seems like it would be extremely beneficial not only to the company's productivity, but to the employee's satisfaction and engagement in their work. Imagine if you were putting together an olympic team and didn't bother to ask what each athelete thought they would be best at. You may end up putting Shaun White on the curling team or Tiger Woods on the soccer team, it would be a disaster! Especially in tech where anyone can surprise you and come up with the next great idea, it makes so much sense to create somewhat of a level playing field within a company and enable anyone to shine if they so choose. The biggest demotivator in most companies is when employees feel like even if they gave it their all and really worked their hardest that they would still be stagnant. That is not an environment that maximizes potential and not somewhere where any highly motivated, highly productive individual wants to be. One question I would have is how do you hire and then align, but at the same time make sure you are only hiring for the positions you absolutely need and nothing else? Maybe this works for a big company with tons of extra cash like Facebook, but how does this work on a smaller scale with very limited funds like a startup? Say the only new employee I really needed was a video editor, and the best salesman walked in the door. If I only had the cash to hire one person, it probably wouldn't make sense to hire the salesman.

  • What do you feel are your top strengths? How do you know?
    (answer goes here)

    I think some of my top strengths are work ethic, confidence, and ability to communicate. I wouldn't really consider myself to be a super competative person in that I'm not usually trying to be better than someone else as something, but I do have a deep hunger to be great at everything I choose to do. When I decide I enjoy something and I'm willing to spend my time and money on doing that thing, I always strive to be exceptional and I think thats where my work ethic comes from. Self improvement is probably one of if not my favorite thing in life. Outside of work the two things I enjoy the most are Golf and Rock Climbing. Those things are all about self improvement, all you are doing is working to become better and thats why I love them so much. I felt the same way about school and I feel the same way about music (my current job) and now web development. This is how I was able to go from a nothing college band to headlining Red Rocks 5 years in a row in 3 years, it certainly wasn't from any random luck big break. Since I've worked hard and been able to succeed at these things, I have the confidence that if I put my mind to something, I will be able to get there and nothing can stop me. This is important, I think, especially in learning very hard things like coding. It can be easy to tell yourself that its too hard and maybe I wasn't cut out for this, but those are the moments that enable you to break through and come out on top. Lastly, I think I have an ability to communicate effectively, to talk to and engage new people, and to genuinely express my ideas whilst maintaining a positive and productive atmosphere. I consider myself to be a pretty good natured and positive person and I just try to let that shine whenever I am meeting someone new or in any conversation. I've had to have many conversations in business where I've had to convey feelings that maybe weren't exactly what the other person wanted to hear and when that happens I just try to be completely honest, let the other person know where these thoughts are coming from, stay positive and constructive, and communicate everything in the nicest way possible. Most of the time, if I do all those things, everything works out for the best!

  • How do you hope to develop your strengths for your new career in software development?
    (answer goes here)

There are many ways I hope to develop my strengths in my new career. One of the main things I want to focus on is improving my work efficiency. As most of us do, I tend to get distracted from time to time mostly by Youtube, and even though most of the stuff I watch is directed toward improving my crafts, its not necessarily focused on the task at hand. One method I have recently implemented to try to combat this is by using the 'Flora' app on my phone. Flora is an app that encourages productivity using the pomodoro technique, which is basically focused working for 25 minutes and then a 5 minute break. Flora grows a virtual tree within those 25 minutes and if it notices you are on your phone it will kill the tree! The game is to build as many trees as you can in one day. I've also tried to improve my efficiency by keeping my checklists organized so that I am motivated to check things off and move things on my Trello board into the done category. Lastly, I am trying to really get to know my text editor, VS Code so that I am working faster and more efficiently. With music I use a program called Ableton Live. If I didn't have my Ableton shortcuts and hot keys down and my library was disorganized, I would probably never get anything done and writing a song would take 10x as long.
Another way I want to improve my strengths is just by continuing to push myself outside my comfort zone. The only reason my music career got anywhere is because my manager and I continued to push outside of our comfort zones and strive to acheive things that we didn't think we could possibly be ready for. With my web development career this will surely mean trying to get meetings with top individuals and having the confidence to seek them out as well as taking on personal project ideas that I know will be very demanding and seemingly mountainous at first.

Additional Optional Readings on StrengthsFinder:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment