Wednesday, June 25, 2014

Programming for Everyone #PR4E

Last weekend, I did Goodie Hack ATL and found another project to work on: STE(A)M Truck. I like this project. My team is coming up with a technology solution to interact with the students, maximize the time at each school, and organize mentors; this is something that I plan to work on over the next few months, at least. We're going to start with a Ruby on Rails web app and an Android mobile app; it should be a pretty neat project to work on.

I really got back into Ruby on Rails, in earnest, this week. I restarted the Michael Hartl's Rails Tutorial, and I'm currently on Chapter 4. I'm finding that I'm able to complete a lot of the sample_app without using the code in the book for anything more than comparison. It's amazing how much more I understand what's going on in this tutorial the second time. I think that my biggest take away from learning to program, so far, is that no matter how enigmatic and mystifying something may seem when you first start, as long as you stick with it and do the work, it will eventually become clear to you. I was confident that I would be able to pick this up, but that doesn't mean that I'm not impressed by the difference in where I was when I started, and where I am now.

Dr. Chuck with one of his sweet tattoos

I also finished my first MOOC this week on Cousera: Programming for Everyone(Python) with Dr. Charles Severance. If you are interested in learning Python, or if you are interested in learning to program and you don't have a language in mind, then I highly recommend this course. The course was better than any of the other Coursera Python courses that I have taken because:

  • It was real world programming: there were no virtual environments. You set up Python on your computer and used it like you would in the real world. I have taken other Python courses that were based in controlled environments and didn't like it. In fact, I was taking one when this course started and I un-enrolled and concentrated on this course.
  • The assignments were appropriate: the assignments for this course were challenging and helpful without being so hard that they required an inordinate amount of time to finish. I only completed two exercises easily; one of them was the homework for week one.

  • Dr. Chuck is awesome: I enjoyed the lectures. He wasn't going over the top attempting to entertain the class, but he kept the videos pretty light and very informative. I also feel like he used the appropriate amount of time covering each topic, I'm not a fan of courses that go too slow and I have dropped courses for that reason. He also wasn't moving through so fast that the average person couldn't keep up [imo]. Another thing that I liked is that Dr. Chuck travels a lot and has office hours with the students in the cities that he visits. Although he didn't visit my city, I enjoyed the suspense of whether he would. If he had come to Atlanta, I definitely would have been there. [He travelled all over the would during this session]
Anyway, I finished the course, did all of the homework, and got 100 on my final. So I'm pretty stoked about the whole experience. The only draw back of the course is that there isn't a part two. If you are interested in taking this class, the next one starts on October 6th. 

Monday, June 16, 2014

Objective C and Other Distractions

So I've been working with Objective C since last week...and this is starting to get a little bit frustrating. Python was supposed to be my thing on the side and now I've picked up something else...and loving it.  I have found, and still find, Objective C to be a little cumbersome, but I'm also starting to like it. I  also feel like it's helping my overall growth as a programmer, but it's making me question learning languages like python and ruby, because you don't want to deal with languages like Objective C, afterwards.

I'm also being tempted by other Java and JavaScript...and getting better with HTML and CSS.
Going to all of these hackathons and talking to other coders is  piquing  my interest in other things and just really getting me excited about coding. Coming in, I didn't really know about the limitations of languages as far as what they could be used for. My biggest surprises/challenges were:

      • not being able to use any language to make mobile apps
      • having to have an MAC to make apps for iPhone and iPad
      • having to learn Objective C to make apps for iPhone and iPad
      • having to learn Java to make apps for Android
      • not being able to compile ruby and python into executable files

To be fair, I read/was told/heard that the best way to go about programming is to decide what you want to make, and then learn the things that allow you to do that. However, no one tells you the above. I think that a major problem with learning to program is that the people who really know how to code don't really think or rememeber what it was like in the beginning. When I started learning, I was fascinated by programming, in general, and I wanted to make things...all kinds of things. For me, it would have been much better if I could have just used python or ruby to do whatever. Something that I also heard, in the beginning that maybe threw me off a little was that you can use any language to approach a problem, which is true, but misleading [see above]. 

But to get back to my original point, I have being hearing a lot of great stuff about JavaScript, like Angular.js and Node.js, and I'm really interested in learning more about it. At the same time, I want to learn about Java to make Android apps, and C/C++ so that I can make executable programs and because I also heard that execution was much faster than programs written in Ruby and Python...and this is just the beginning. My world is just opening up to this stuff. 

The frustrating part is that there is still so much that I still want/need to do and learn in Ruby, and like I said, I've just kind of been treating Python like a side project. I keep catching my self contemplating trying other languages [like the other day when I almost started that Angular.js tutorial]. 

I want to make an app or two using Ruby, and at the same time, I want to do some engineering things using Raspberry Pi. Oh well, I guess I need to just get back to it...

Sunday, June 8, 2014

Having to type "NS" and "@" is Front of Everything is Not Ok.

This weekend I attended a hackathon at the AT&T Foundry in Atlanta. As always, I learned some new things, got different perspectives on coding, and met some cool people. That was the good stuff, the not-so-good stuff was the way that the event was structured. This was only my third hackathon, but I have gotten used to all of the ideas being pitched and then being able to join that team and work on the idea that I liked the most. This was not that. When we got there, it was basically: find a team and make something, which meant finding someone to work with, agreeing on a problem to be solved, and then agreeing on the solution. I think that putting so much of the burden on the participants made for a much less productive event than it could've been.  Most of the people at the event spent the entire first night trying to find a team and come up with an idea. Personally, my team didn't even have a viable idea until 4 hours before the judging and we ended up not even presenting. 

One of the things that really struck me about this event, was people coming to the event in teams and being really secretive about what they were working on. This wasn't a widespread issue or anytihng, just something that stuck out. In an environment where everything is going to be open-sourced in the end, I think that this attitude in non-productive. I think that people do this for two reasons: a.) they want to split the prize "money" with as few people as possible, and b.) they overestimate their idea and underestimate what new perspectives and talents bring to the project. When people come to hackathons with this mentality, their time is wasted if they don't win a prize, and if they do win a prize they exposed their idea to others on the cheap. They don't learn anything new that they couldn't have gotten form just going to a coffee shop or other work-space and building the project, they open their ideas up to appropriation, and most importantly, they don't meet new people. Sucks to be them.

Anyway, I think that my most positive take away from this weekend was my need to either learn Java or Objective-C so that I can work on mobile apps. While I love Ruby and Python, I also think that being able to convert my applications to mobile apps is going to be important in the future. To that end, I have started learning Objective-C and I'm completely missing the point. I haven't gotten too far into it, yet, but from what I've seen, I can't understand Apple's decision to devote resources to build their own languages for their applications. Ruby and Python seem like way better solutions at this point and I just really don't see the appeal of Objective-C.

 Although, I am enjoying taking some time to look at a new language. I can't really see myself spending a whole lot of time on it, right now, but I'll be really ready to get something out of my study when I decide to. I'm going to start building stuff in Ruby and Python in the immediate future, but soon..

Also, I did manage to get some cool T-shirts from Crittercism this weekend, though. 

Thursday, June 5, 2014

Look, Ma! No Hands.

I wrote my first python program for my homework assignment, today, in about 3 minutes flat just going through and typing out how I think it should go. Besides accidentally using .strip(), instead of using .split(), I nailed it on the first attempt; when I looked at the output, I knew exactly what I had done wrong. My python skills pretty much just snuck up on me.

protip: .strip() was from last week's homework.

I've been focusing mostly on ruby and taking this python course and going to these meet-ups. It's funny looking back at how far I've come in my programming since January, but I also still have an amazingly long way to go...

Sunday, June 1, 2014

National Day of Civic Hacking [post-event report]

This weekend I participated in the National Day of Civic Hacking at the the Atlanta Community Food Bank. The event started on Friday at 6PM and was catered by Chik-Fil-A. The first night they also had veggie wraps, but for breakfast and lunch, on Saturday, I had to work around the chicken based diet. It turned out to be a little bit too much for one of my vegetarian friends: those delicious chicken nuggets. R.I.P. vegetarian diet. This is the second week in a row that I've had my vegetarianism tested.

I had tossed a few ideas around in my head, but most of them involved being in D.C., so by the time that I got there, I was just really looking for a project to join that would allow me to work on my ruby and/or python skills. When we got there, the food bank already had about nine specific issues that they wanted to have addressed and 3 other people pitched ideas of their own. I ultimately joined a group that was addressing the need of the smaller agencies of the food bank to have a presence online. Best. Decision. Ever.

When I joined my team the first person that I met was Josh, a designer. Josh worked with the Mathew to get the overall design together and he was attending the event with his business partner, Morgan. When I met Josh the first thing I said was "this needs to be a ruby project." Luckily, that was what they worked with, so I was on board with the project at that point. [I had considered working on another project first, but I didn't for reasons that I won't go into.] Morgan was the backend developer for th business that he and Josh were partners in: Polar Notion. Morgan had wayyyyy more experience than I did and I had got an amazing opportunity to learn from him and gawk at how fast he could get stuff done. The other members of my team were Greg, Cashif, Vivianne, Mathew, Ben, and Jeff. Jeff was apparent excellent with mapping technologies, but unfortunately he didn't show up for the second day, so we didn't have a chance to leverage those particular skills.

Once we had the basic idea down, we split up into three groups: designers,
 a think tank, and developers. Morgan, Greg, and I were the development 
end of the operation, with Morgan acting as the team lead.

Morgan easily did over 90% of the coding, and that's probably understating it. seriously. He was getting things done really fast, helping me with my code, and contributing to the overall project at the same time. Morgan, also knew a lot about gems and API's and had lots of great advice. He's one of the coolest people I've ever met and just meeting him alone was an awesome part of my experience. However, my entire group was awesome, as well as the people attending overall.

What we decided to build was something that I called "foogler", even though that name is under dispute, because several people in the group wanted to call it "foogle." The biggest mistake people make in marketing is putting marketing decisions to a vote among non-creatives, imo. I'm pretty sure I was the only one on our team with a background in marketing, but that's the thing about marketing: everyone thinks that they can do it. :)

Anyway, what we made was basically a search engine to be attached to the food bank's website, that allowed smaller agencies to make a "profile"that was searchable by clients using zip codes. Other than my disagreement with the name, I feel like my team worked together extremely well. Everyone did their parts and pretty much everyone involved with the event was impressed with our team performance.

When the judging started, I was pretty confident that we were going to win, but then a team that did a SMS based application that allows people looking for food banks to connect with food bank agents through text messaging. This was really good idea, and I think that something like that would be ideal for places like Africa, where people use SMS for many commercial activities, already. I had seen this TED talk, so I immediately understood the impact that something like this could have. My only concern about that project was whether or not it had already been done in Africa by someone else. 

When the judges had finally made a decision the results were as follows:
  • Fourth Place: Originally, there were only supposed to be three winning groups, but one team took on the inglorious task of patching up a few bugs in the SQL database system and they were properly rewarded with the "Honorable Mention" award. [I'm so glad that these guys didn't get overlooked. Their work went into effect right then and will have an immediate impact.]

  • Third Place: Went to a group that did an Internet of Things project that was pitched by Concrete Jungle that involved placing sensors on fruit trees to determine when the fruit was ready to be picked based on bending of the branches. This would have been a fun project to work on had they had python developers and implemented Raspberry Pi. The reason that I didn't consider this one is because of their lack of coders and my lack of experience. This was definitely an interesting project, but it may have been a little bit much to take on for a project that had less than a 24 hour turnaround.

  • Second Place: Rightfully went to the SMS group.

  • First Place:  Team Foogler!!!!

front row(from left to right): me, Vivianne, Morgan
back row: Greg, Cashif, Josh, Ben
not pictured: Mathew and Jeff

The whole team got these sweet $50 gift cards:

After everything was said and done, we had an extra card. We're going to use that when we get together on Wednesday for drinks! I can't say enough about my experience and I'm going to stop now, but if you have a chance, you should definitely participate in the National Day of Civic Hacking next year and get involved with Code for America...I had a great time. Learning, using what I've learned to give back, and meeting new people was awesome; winning gift cards was just icing on the cake.