My First Hackathon

As I’ve been progressing as an Android developer, and been venturing outside my comfort zone, people have suggested more and more activities to further immerse myself in the developer community. The main suggestion that has been floated around the most, was an event called a hackathon.

After, hearing the word “hackathon”, I didn’t think I would be qualified for such an event, after all, I don’t know how to “hack”. Well, some time passed, and I got a hint of motivation so I googled, “what is a hackathon”. For a quick reference, a hackathon is an event, typically lasting several days, in which a large number of people meet to engage in collaborative computer programming. Then I searched, “what experience do I need to attend a hackathon”, “what is a hackathon like”, and “as a new developer, should I go to a hackathon”. Luckily, these searches netted a lot of positive results and encouraged me, a new developer, to give it a shot. What’s the worst that could happen!?

A few weeks before I found a hackathon to attend, I started looking for software meetups in my area. I found a few, including Java Programming Basics and an Agile/Scrum workshop, hosted by the Guild of Software Architects. A few days later, I came across a local hackathon that was going to be held in Dallas, Texas. A short trip from my home, so I registered as a developer on meetup.com, and although I didn’t expect to actually attend. I filled out the forms, and I was officially registered as a developer (how cool!). I was nervous, and as the date got closer I was leaning more towards not attending.

Two days before, I began feeling like I needed to attend because it felt important. Yet, the thought of attending resulted in trying to find reassurance that I was “good enough”. Luckily, google helped appease my concerns, but if one of those searches would of came back negative, I don’t think I would of gone.

The hackathon is finally here, I’m heading out to Dallas with my laptop, and my stomach is full of butterflies. I got lost finding parking, I couldn’t get my google maps to load, and I start wondering aimlessly around downtown Dallas trying to find the correct building. It’s cold, windy, but perfect weather for the toxic thoughts to start rushing back. I think, “hey, just leave, just go home and watch tv, grab something to eat, relax, you don’t have to be here”. The internal battle is raging, but I continue, I find the building, I find the elevator, and I make my way up. When the doors open and I step off, I’m transported. There are hundreds of people, cards lined up on the front table from various businesses, name cards at the check-in desk, and everyone seems friendly and nice.

Finally, I breath a sigh of relief. I had this idea built up in my head that I would be the only one there. That I would be the focal point, and my inabilities would be personified amongst all of these judging people, and no one would accept me. But, it was different, I was one of hundreds, there were people of all ages, and experience levels, and I frankly could go completely unnoticed once I walked into the crowd. So just like a lost tourist, in a foreign area, I followed the crowd and the crowd was lining up for dinner.

Mexican food, was being offered for free, and I followed the crowd around as the line began wrapping around the hallway. I wanted to talk to people, but was still to shy to start up a conversation. Until, I made eye contact with the guy in front of me, and blurted out some type of greeting. This was all it took, and I was now fully engaged with a random stranger. He starting talking about his web development projects, and where he went to school. I told him about my Android development and how I was still new, but was making some progress. After, that short interaction he asked me if I would be on his team, which consisted of three web developers from the University of Dallas. I agreed, followed him to go sit down, and met the other members. At this point, it had only been about 30 minutes and I already had a team, I had some new friends, and I felt like I was part of something.

I think this is a good place to leave it, I’ll post the final part of my hackathon experience later this week (think Dec. 14). This was such an awesome experience, and I learned a lot. In hindsight, I’m proud that I had the courage to follow through, and put myself in a situation that was completely unknown and intimidating. Lastly, the hardest part was not finding a team, but showing up. So if you’re in a similar situation, where you don’t know what to expect. Just show up, you may surprise yourself.

Personal Challenge (Complete):

The last days of the challenge..

The challenge, to cut out all video games, tv shows, and social media for a single week. The goal, to force myself into programming even when I would rather sit on the couch and watch a tv show or play a video game. Well, it has been the full week, here’s some of what I learned.

When it comes to social media, it’s a very little thing, but it can consume hours upon hours of my time. To stop wasting time scrolling through my feed, all I have to do is never log in (simple). This was extremely easy for me and I haven’t broke this part of the challenge once. However, it hasn’t been all forward progression, I woke up on Saturday, and felt like I had been hit with a sledge-hammer. I would have been better off if I had left the house completely, and forced myself only into continuing with my Android course. Instead, when it got a bit tougher, I turned back to tv shows and video games to numb my feelings of discomfort. 

Looking forward, I will be continuing with the absence of social media which for better or worse has shaved many hours off my total time wasted.  I will also be continuing watching limited amounts of tv. In regard to video games, I will take a similar approach to tv. The biggest reason for limiting, and not eliminating, is because I get a lot of enjoyment out of both of those, and I’m not as ready to give up those vices  quite yet. 

Overall, I think this challenge was an interesting experience and it helped expose problems, rather than fix anything. That is the first step in changing a behavior, identification. Moreover, I believe that this challenge could be improved by keeping a daily log of activities, this would allow you to see and calculate how much time was spent in each category. For better or worse, this method of documentation would be a much more effective resolution practice. Finally, I think challenging myself even for a short period, netted some fantastic results, but there is a lot to improve upon.

What did I really accomplish?

  • I have a better understanding of where I waste the most time
  • I was able to cut out ALL social media
  • I progressed more in my Android courses
  • I forced myself into thinking about my actions and how they could be better spent

Did I stick to the challenge 100%? 

No, but to be fair, if the problems I had were deeply rooted, it wouldn’t make sense to fix everything in one week. I would say I stuck to the challenge about 65-70% of the time.

Will I continue parts of this challenge and do a more effective one, later on? 

Yes, I believe that eliminating social media is a huge step forward, and next time I will focus on cutting out video games and tv shows,

You mentioned discomfort on Saturday, what do you think the cause of that discomfort was?

I’ve thought about this a lot, and the cause of that discomfort wasn’t due to being physically sick, but rather my brain sending signals of pain when I knew the course of my day would have been 10+ hours of learning.

How do you combat that feeling of pain, and move past it?

This is something I haven’t fully cracked myself. The only logical answer I would have is, completely take yourself out of the environment. Leave the house, go somewhere and return back ready to work or take your laptop with you and work anywhere with wifi.

Thanks for reading, and challenge yourself!

Personal Challenge (Halfway):

Mid-Week Update:

The challenge, to cut out all video games, tv shows, and social media for a single week. The goal, to force myself into programming even when I would rather sit on the couch while watching a tv show or playing a video game. Well, it has been a few days, and the results although lesser than what I had hoped for, are still positive. Before, diving into the results, I’d like to discuss some of the unforeseen difficulties, and how I coped to better fit my current situation.

Adapting to reality..

There were a few times, in the past couple of days, where I had to adapt my overall challenge to be more realistic. First off, I choose to make this challenge during the Thanksgiving break, which in hindsight was a poor decision. I found that choosing to isolate myself, over spending time with family was not worth it. Therefore, when family was around, I didn’t put in my headphones and go to work, instead I made that one of the exceptions. Exception one, if family is around then watching tv shows are okay.

Now, the results..

The main purpose of this challenge, as stated above, was to motivate myself into continuing my path with Android development. The primary method to continue my progress in Android development, finishing Udemy.com courses. I was able to finish a section of the course in the past few days, the topic of the section was integrating YouTube api to my app, and an overall introduction to the capability of utilizing api’s. I was also able to learn more about intents, interfaces for the View.OnClickListener, and apply those newly learned skills to my earlier apps. In this regard, I feel this challenge has been a success. Even though, I should have spent more time programming, I learned a fair amount. Also, I got some idea for what to continue doing, once the challenge ends.

Continuing what works..

Prior to this challenge, when I would be looking for something to do after school, I would turn to a video game or a tv show, even though I had enough energy to focus and put some time into programming. The problem, at some point in the past when I had all the motivation in the world, I was actually choosing programming over tv/games, but since then when the motivation has decreased, I’ve been choosing the opposite. Therefore, to be more consistent and constantly progressing at a rapid pace, I need to be utilizing my energy and focus better. This can be accomplished by turning on Udemy.com and finishing some of my course, immediately when I get back from school, and not waiting until it’s later in the evening and my focus has deteriorated. 

Okay, that wraps up the mid-week update. I will finish this challenge on Wednesday the 30th, and end it with a final post about what has taken place over the past week. Thanks for reading.

Personal Challenge (Overview):

Taking a week off of social media, video games, and tv shows.

The goal of this mini challenge is to see whether I fill that extra time effectively or whether I find some other outlet to waste time with. Of course, this is over the thanksgiving break so I’m not making it easy on myself. However, I believe that I will rise to the occasion and choose to program over staring at a wall.

This is the initial post, the first day of the mini challenge, I will do a second post on Sunday the 27th, and a third post on Wednesday the 30th. I haven’t calculated how much time I usually spend with tv shows, social media, or video games per week. Frankly, I’m a little scared what those numbers truly are. So why am I doing this?

Lately, I’ve seen a sharp decrease in how much progress I’ve been making with my Android development. Recently, I was accepted into an Android/Java coding bootcamp in downtown Portland. Since then I’ve dropped the ball in constantly improving as a developer. Therefore, extreme actions need to be taken to relight the fire. So what does NO social media, video games, or tv shows look like for me?

Video games:

  • Rocket League
  • World of Warcraft
  • Other Steam games

Social Media:

  • Twitter
  • YouTube
  • Facebook

TV Shows:

  • The Walking Dead
  • WestWorld
  • YouTube (this is the biggest time dump)

There we go. All of the items listed above, and any that I couldn’t think of, but fall into those categories are banned. Now, there are some exceptions to this rule that will involve watching videos, but they will strictly be centered around solving a programming problem or continuing my Android courses. Any missteps will be recorded. Here are some exceptions to the challenge.

Exceptions:

  • YouTube, if google and stack overflow don’t solve my programming issue first.
  • Udemy.com, is where the bulk of my time will stem from as I work through my Android Dev courses.

Okay, this should be an interesting week. I will post a mid challenge update on 11/27 (Sunday), to share what this experience has resulted in, good or bad. See you then!

TV Shows About Programming

As a new developer myself, I come across lapses in motivation that push me into idleness, and although pushing through in these moments is what I should be striving for on every occasion. Sometimes, I cave and I give into that part of my brain that is whispering things like, “you can finish it later” or “don’t worry about it”. In these situations, I’ve found the best way for me to “get back on the horse”, but fulfill some level of wanting from my brain, is to fill that time with tv shows centered around programming. I love tv, but I know that watching television is wasting time. Yet, I love tv all the same, so when I want to compromise I try and make it serve some purpose. Which I feel these tv shows help do by reinforcing things like why I program or what programming can accomplish.

TV Shows..

First off, we have one of my favorite tv shows called Silicon Valley, this comedy series follows the misadventures of introverted computer programmer Richard and his brainy friends as they attempt to strike it rich in a high-tech gold rush. They live together in a Bay Area startup incubator loosely run by self-satisfied dot-com millionaire Erlich, who lets them stay in his house rent-free in exchange for a stake in the projects they invent there. But when Richard develops a powerful search algorithm at his day job, he finds himself caught in the middle of a bidding war between his boss — whose firm offers Richard an eight-figure buyout — and a deep-pocketed venture capitalist.

Silicon Valley, has always been a motivator for me, I love the idea of working for a startup where you’re a “big fish in a small pond, rather than a small fish in a big pond”, and you get to build something that could potentially be huge. There is obvious risk there, but that’s where I ultimately want to be, working for a fortune 500 company would be great. However, a small company where I’m more valued and can make a bigger impact is too attractive. Silicon Valley depicts exactly that, and it’s the first tv show I recommend to people when the topic comes up.

My second recommendation, is a show called Halt and Catch Fire. It’s the early 1980s, and the spirit of innovation in personal computing is about to catch fire. Hot on the trail is a renegade trio — a visionary, an engineer and a prodigy — who risk everything to realize their vision of building a computer that can change the future.

Halt and Catch Fire, gave me a real appreciation for the engineers who “work with the metal”. They also do a great job depicting IBM as this overwhelming shadow that strikes fear in the heart of it’s competition and who isn’t afraid to lie, steal, and sue to maintain that status. In one of the scenes IBM’s lawyers walk into the office and you get an idea for what level of risk the Cardiff Electric team is taking challenging such a giant. Overall, IBM plays a very minor role, but the main story line follows the stages of bringing an idea into reality. Also, if you’re interested in game development this show will also take in that direction at some point.

Lastly, we have a show called Mr. Robot. Young, anti-social computer programmer Elliot works as a cybersecurity engineer during the day, but at night he is a vigilante hacker. He is recruited by the mysterious leader of an underground group of hackers to join their organization. Elliot’s task? Help bring down corporate America, including the company he is paid to protect, which presents him with a moral dilemma.

Mr. Robot, is a great example of the sheer power programming can have. It also has a rich storyline and Elliot is constantly solving problems using programming and other pieces of technology. One of the greatest things about this show is that the majority Elliot’s hacks or exploits can be duplicated in real life. I spent a lot of time contemplating whether or not I would take the plunge into cybersecurity, and all of that digging was because of Mr. Robot. If you’re interested in anything related to cybersecurity this will probably end up being your favorite show.

I know this is a small list of only three tv shows, but quality > quantity. Also, on a funny note, I often ask people if they’ve seen Mr. Robot and if they say yes I can kind of tell what level they are on. Thus far, I have only met one person who has seen the show and that one question lead into hours of conversation about Tor, Kali Linux, the Dark Web, etc.

Thanks!

Scrum – A Detailed Breakdown

How Scrum is organized..

With Scrum there is a Development team, a Scrum Master, and a Product Owner. Those are the 3 main roles that are involved with Scrum. There is also 3 artifacts that are used to be an effective Scrum Team. The artifacts are, Product Backlog, Sprint Backlog, and Product Increment.

Dev team role:

  • 3-9 people (avoiding cliques)
  • Team self-organizes and people can volunteer for certain parts
  • At the end of the sprint you need to be able to SHIP (working software)

Scrum Master role:

  • Coach for the Dev team
  • Facilitator that teaches how to max ROI using Scrum
  • Clears roadblocks for the Dev team
  • Defender of the Dev team

Product Owner role:

  • Single person representing the stakeholders and customers
  • Communicates what the customers needs are directly to the Dev team
  • Has final authority (and accountability) in managing and owning the product backlog

**Backlog is basically a feature list which helps identify higher priority features that the Dev team should finish first (highest priority goes on top)

Self-Organizing:

  • Within a certain boundary the Dev team has autonomy
  • Requires trust, and trust is built over multiple sprints

**Product Owner presents the problem a customer needs solved and the Dev team self-organizes to figure out how to accomplish the end goal. This in direct contrast with an older model which dictated each individual task to specific developers.

Scrum Artifacts (What you need to be effective with Scrum)..

Product backlog, what all do we need to complete the product?

    • The process of creating a Product backlog is kicked off by the Product Owner
    • This is the phase where the entire team, Product Owner, Scrum Master, and Dev team get together to figure out what will be required to complete what the customer is asking for.

Sprint backlog, what can we accomplish within the sprint?

    • Feature list you decided to work on, subset of items from the Product Backlog
    • The Sprint backlog can be adjusted while sprinting if something has a dependency

Product Increment, is the sum of all the Product backlog items completed during a Sprint and the value of the increments of all previous Sprints.

    • The entire goal of these Sprints is to get out WORKING software
    • New organizations will struggle with this until they have multiple Sprints under their belt

**The state of the backlogs can be looked at later on using an array of different charts that will help show whether or not you’re hitting deadlines, and how many backlog items are being completed on a daily/weekly basis, for example.

**The primary focus of the entire process is putting out working software by the end of the Sprint. One of the key reasons for this 1-4 week Sprint model is to use the working software you finished to get feedback from the customers quickly, rather than making the entire product then being told, “that’s not what we asked for”.

Charts..

Charts used to check how effective the previous or current Sprint is:

BurnDown – A BurnDown chart helps visually show the team’s progress as tasks are being completed

    • Ideal Tasks Remaining – what you hope to get done during the Sprint
    • Actual Tasks Remaining – what you have actually gotten done during the Sprint

Extra..

Brand new Sprint teams:

  • May not have any working software to release (normal not worth freaking out about).
    • This would result in a lot of “in progress tasks” and all of this will be examined in the Review stage of the Scrum model (which you will read about below). During the review, the team will decide whether or not they need to pivot or finish the “in progress tasks”.

Customers/Stakeholders:

  • Want working software, and this is the goal by the end of every Sprint.

Dev team:

  • Wants feedback from the customer, good or bad.
  • Some customers, may not be familiar with this style of approach and may not know to give criticism. Rather they will just clap and that is not beneficial.

An Event Board:

  • Having an event board, where you can visually see tasks getting done, is a great motivator for the Dev team
  • If you have seen HBO’s Silicon Valley, they used this same method.

Scrum events (1-4 weeks, mostly 2 week sprints, keep the sprints consistent)..

Sprint Planning, is a working session to discuss the work and effort necessary needed to meet their sprint commitment.

    • Two parts:
      • What can we do in the sprint
      • How will we accomplish the work we decided on

Daily Scrum, is a daily meeting.

    • Less than 15 minutes, and you’re usually standing the entire time (another reason it’s only 15 minutes)
      • What have you done?
      • What are you going to be doing?
      • Do you need help?

**The daily scrum is an event for the Dev team, and if no one has anything to say then spending exactly 15 minutes is not required. The entire point of a daily scrum is to quickly find out where everyone is.

Sprint Review, you want feedback, good or bad.

    • End of sprint (get together with stakeholders/customers)
    • Look at the product backlog (does it still make sense?)
    • Does the customer still want what you made or do you need to make changes?
    • Product Owner/Scrum Master will give the Dev team an idea for the budget and market climate while the Dev team has been sprinting
    • Collaborate on what to do next (customer -> Dev team)

Retrospective or review, leads to better behavior and improved work spirit.

    • The heart of continuous improvement
      • Inspect the people, process, relationships, tools
      • Save some time to talk about what worked (Celebrations are good!)
      • Celebrate what we built, what worked, and the good parts of our release

Final notes, Scrum does NOT solve problems.  It exposes them. You can then use that information to rough tune and become a more effective team. Scrum is a great tool that appears to be the direction most organizations are going. Therefore, it might not be the worst idea to become more familiar with the inner workings of Scrum.

Fun Fact, the creators of scrum named it scrum because of rugby.

Here is the rugby definition: Scrum is an ordered formation of players, used to restart play, in which the forwards of a team form up with arms interlocked and heads down, and push forward against a similar group from the opposing side. The ball is thrown into the scrum and the players try to gain possession of it by kicking it backward toward their own side.

Making Your Goals, Clear

One issue I came across when I was starting my journey as a programmer was that I didn’t make a plan of action. I didn’t clearly think through how I would go about accomplishing my goals and instead I was tunnel visioned. When you don’t create some sort of road map, you get lost along the way, and it’s hard to jump back into where you left off because you didn’t define what you were doing to begin with.

Research the language..

Assuming, you found what language interests you at this point, you should start thinking about what courses would help you grasp that language and increase your skill set as a growing developer in that area. For example, if I was learning html/css as my starting point into web design, I would start looking at JavaScript as the next step in my path.  I would research general information on JavaScript as well as what implementing JavaScript into my websites could accomplish. This process should help you in multiple ways, but most importantly it will ease the anxiety that goes into picking up something unknown and potentially intimidating.

Lets take a look at our schedules..

Now that you have a general idea of what the first few steps will be (don’t worry the rest will become clear as you progress and learn more), it’s time to take a look at how much time you will invest each day or each week. This is the part where we stop being as theoretical and more hands on. The second you start your course, you will probably scan over how long the entire course will take or how long each section will take. Once, we have that information we can start building a plan of attack. For example, simply writing down, “I will finish 25% by the end of the week”. Can do wonders for staying motivated and having some accountability as you learn. It also will help you remove some anxiety, and help you rough tune your own ability. If you feel comfortable putting in more than 10 hours a week, great do that. If you feel more comfortable putting in 5 hours a week, that’s fine too.

Don’t feel discouraged, if you don’t hit a deadline..

When you give yourself a time constraint, and fall short don’t feel discouraged. The worst thing you can do is be overly critical, some concepts will take longer than others and that’s completely normal. For instance, I spent 6 1/2 hours yesterday trying to solve a programming challenge and ended up only progressing 2% in my course that day. However, don’t just look at the course progress bar to determine how well you’re progressing. The course completion total, doesn’t count how much time you are investing on your own trying to make those concepts stick. And you should be investing some extra time in practicing what you’re learning because at the end of the day, we want to take what we are being taught and apply it on our own. So when you miss a deadline, think critically about why it happened, set a new deadline, and don’t feel discouraged. You’re learning about yourself as much as you’re learning to program.

Starting off as a Programmer

The difficult part is not having direction, and not having direction stems from not knowing what direction leads to what end point. You’re completely new, everything is being seen and read for the first time. So you do what most new programmers do and turn on YouTube. You play your first video about a language you heard mentioned a few times, and you follow along, take notes, and get some idea about what programming is.

My mistakes..

The biggest mistake I made when I began my current journey was not researching the terminology. What does full-stack mean? What does front-end, back-end, web developer, web designer, and *insert language* developer mean? So I did what I described in the first paragraph, I turned on YouTube and played a video about JavaScript, all the while not knowing that some concept of HTML (used for displaying content on a website) and CSS (used for making that content look good) was required to get the most out of what I was learning. Yet, I didn’t understand this so I decided to take a 14 hour course, and by the end of it I had no idea how I would go about implementing anything I learned (where does JavaScript even go!?).

Now, this is where I made an even bigger mistake. I stopped. I looked at this OOP jargon (Object oriented programming) I took notes on and it made some sense, but it didn’t transcend past words on a page. And thus I switched to a different language, SQL (think databases). I decided to learn SQL because there was about to be job openings at my work. Although, I didn’t end up getting that job I made a similar mistake to when I tried to learn JavaScript. I was back to understanding the syntax, but not able to make those words on my notebook into a database (again, where does the database go!?).

The solution was easy..

I tried to do too much from reading and watching. When the entire time I was taking notes, I could have built something and been learning at the same time. The biggest break through for me was when I started learning while building projects. And even though I didn’t know everything and got stuck a lot, I had something to show for it, which kept me motivated. It’s great to build your toolbox of knowledge by reading about the way something works, but beware of burning out. After, I had invested lots of time into JavaScript and had no real way of showing someone what I learned, other than describing what “could happen”. I lost the reason for why I started in the first place. So I began researching how other people learned to code, and that’s when I came across the best way for me. Build a project, while you learn the language. 

You can start building a project with zero prior knowledge using lots of different sources, but make sure you think about out how committed you are. If you are anything like me, you love free content, but you don’t want your time to be wasted. So my recommendation, is Udemy.com.

Udemy, isn’t super expensive as there are always deals, but it goes back to my earlier point. You don’t want your time to be wasted. If you are willing to invest in yourself then you should be fine spending a small amount of money. Free sources are great, but I learned more from a $20 course on Udemy (that had 47 hours of content) then ALL of my earlier sources combined. And by the end of it, I had a couple of projects to be proud of.

Final thoughts, JavaScript isn’t a bad starting point, so don’t walk away thinking that. It was just the way I went about learning JavaScript that was flawed, same thing with SQL. And if you don’t know what language to start with, look up “Top programming languages for 2016” and spend a little time researching salaries, openings, and what those languages primarily build. Let google searches guide your hand, and once you decide on a language. Find a course and start (whether it’s YouTube, Treehouse, Udemy, or any other site). The point is, you have a desire to program most likely because you wanted to build something. So build something, and learn while you do it!