Sunday, September 21, 2014

And Now Back to Our Regularly Scheduled Programming...

So about that long post that I was going to publish...yeah, that's not going to happen. :)

I had a little adventure going that didn't quite work out, but now I'm back to focusing on Ruby, Ruby on Rails, and the STE(A)M Truck app, which I plan to deploy for the initial test run at the end of the month. To that end, I have restarted my reading of  Pragmatic Agile Web Development with Rails 4, from the beginning and I'm on Chapter 4. I have also restarted reading Beginning Ruby From Novice to Professional, from Chapter 6. Because I've been learning so many different languages, I just want to make sure I have everything straight, before I start the actual coding on the STE(A)M Truck app, so I'm doing little small apps, exercises, and programs to test out my ideas. I'm pretty sure that I have it under control, the only thing that's really giving me a little trouble is allowing the users to add images to the projects and how to display them, but that's something that I'm going to work on after I get everything else in order. It would be cool if I had someone around my level to work with; It would be better if I knew someone who was already good at Ruby and Ruby on Rails that could answer my approximately 13 billion questions. Sometime I go on IRC to ask questions, but it's a little bit frustrating trying to get answers on there. Always helpful...but still, a little bit frustrating. Sometimes I think that people may not like that I only come on when I have a question, so that's a thing, too.

I started catching up in my Algorithms class, this weekend. I had only watched the intro lecture before yesterday, but I'm over half way through week one. I think that I'm learning a lot and some problem solving things are starting to clear up, but there are some math concepts that I really need to brush up on. I've also realized that I don't know enough Java to actually do the programming assignments for this class, but I'm going to still work through the class for the exposure to the material on algorithms and Java. It's not that I don't understand what's going on, I would just have to stop the video and figure it out, and I would rather start learning Java by reading books and doing tutorials, and take what I can from the class. I learned about Koans about a week ago, so I'm going to try those, as well. At this point I can take my time learning Java and just do the class for fun. I'm actually learning a lot about algorithms. I signed up for another Algorithms class at Stanford that starts in October, though. So I should definitely be ready for that. I just looked at my Coursera schedule, I have two more classes that start in 8 days. It's probably best that I'm not going to try to do the programming assignments and learn Java, too. I have a few Java books that I'm going to read. I'll probably start reading the first one on tomorrow; I want to spend today getting set up to get the app that I'm working on done in time.

OT: I don't know how I feel about the iPhone 6. I think that I have a free upgrade, but I'm just not excited about getting a new phone. For one thing, I don't know if I want the 6 or the 6 plus and I know, for sure, that I don't want anything that takes my fingerprints [pic related]. I don't really understand how people can still be so trusting of this kind of thing in the wake of the Edward Snowden leaks. Regardless of how you feel about what he did, we now know the types of things that our governments are doing with technology and surveillance and how companies are cooperating, forced or otherwise, with these efforts. While it may be unavoidable, I'm still not super comfortable with supplying bio-metric information to a large corporation that supplies governments and other companies with my personal information, know what I'm sayin'.

Another issue, is that Apple has been disappointing me since Steve Jobs left. It seems like I've been having all sorts of problems with my upgrades and iTunes. Last night, I upgraded to iOS 8. In order to do that, I had to erase all of my music...since the update required over 4 gigs of memory. I was okay with that. The problem was when I went to load my music back onto my phone, iTunes, on my computer, just assumed that I no longer wanted to enjoy that 4 gigs of music and deleted the whole playlist. So I would just like to thank the good people at Apple for allowing me to spend my Sunday morning rebuilding my playlist for the gym today: 'preciate that.

I don't know anything about Android phones, but I do know the frustration of trying do things on my friend's phones. I think that I'm probably not going to worry about trying to change phones, right now. I'm relatively happy with what I have since I got my music back on this one, for now.

In other news, this was pretty now I'm also reading The Soul of Man Under Socialism, by Oscar Wilde. I like this guy.

Sunday, September 14, 2014


I'm going to have a pretty big blog post coming soon that will encompass last week, this week, and next week. It's just not the right time to post. :) You can expect the next one in 7 days.

Friday, August 29, 2014

Learning Java...

I now know what they meant when they were saying that Ruby and Python are languages that are designed for the programmer vs. the computer, and how they make programming fun. Initially, I thought "how can programming not be fun?" However, after studying Objective-C and Java, I'm pretty clear on what they were talking about.

Java, from my understanding, so far, is a "lean" language, so you have to import "modules" that are already packed into Python and Ruby. In Java, you  have to write "import java.util.Scanner" to allow the user to input information, whereas you can just create a variable to accept the input in Ruby and Python. There are other little things like declaring types for variables and only being able to use one type of object in arrays, that make programming in Java...different.

The cool thing about declaring a type of variable, though, is that you decide what kind of variable you want to use ahead of time and you don't actually have to write your number in a decimal form, if they don't have numbers following the decimal. This is good for programming because you are thinking through the type of result that you want, which avoids using integers, when you want a float and having to go back and put in the decimals if you forget.

Another built in feature in Ruby and Python is the error messages. Although, you can resolve that situation by using an IDE, it comes built in to the other languages and coding in Java requires you to *sigh* download a IDE like NetBeans, free of charge and install it on your computer, when you're first getting set up.

Things that you can do using Java that you can't use Ruby and Python for? Compiling programs into .exe and other files that you can run as stand alone software (I think you may be able to do this on python, with some extra effort...Cython?) and building native mobile apps for android, which is huge. I think that with the popularity of mobile devices, not being able to use a language to build native applications for them is a pretty big disadvantage...if you like making stuff for other people to use. Even though there are plenty of things you can still build for people who are sitting in front of computers or for things that use Raspberry Pis or Arduinos. For me, the most exciting thing right now, as far as development is concerned, is making things that can be used no matter where they are on many different kinds of devices. I really hope that something can be done about this...and soon [ yes, I know about Ruby Motion :) ].

Challenges with learning2Java that aren't about the language itself:
  1. The writers of the books. I'm not literary expert or anything, but the way that they write/speak is hard to follow. The way they say things is not fun, at all. I don't know if it's just me or what, but I had such a hard time reading the books that I decided to watch youtube videos first so that I could get a general understanding of what's going on. It's not like I don't like to read or I just picked books at random, either. I did an internet search to try to find the best books to learn with, but yeah...
  2. Leaving this hanging: public static void main(String []args). Yeah, you really can't do that. It's not cool to tell me that you're going to explain something later, and then wait to talk about it at the end of the book. Sorry. I NEED to know. [ note to self: why haven't you googled this, yet? ]  How about walking me through it and then going into more detail later. I understand that "public" means that it will be available to other code, they explained that "main" means that this is the operating class that the compiler will look for, and from studying Objective-C, I think that "void" means that a function will not return anything, but I have no idea what that means for a class or if this is even the same thing in Java, and "static"? I need all of this explained and I need to be clear that I'm thinking in the right direction on this. That "String []args" part also needs to be explained, especially since I keep seeing those square brackets moved to different places in different code. How am I supposed to concentrate on what you're trying to teach me if this keeps coming up unexplained?
This probably sounds like a lot of complaining, but it's just my growing pains. I'm definitely going to take advantage of all opportunities to learn new things. [ ...especially Java, since it's the dominant mobile platform and I definitely want to develop for it...even though I have an iPhone ;) ]. I'm just getting started with Java and Objective-C, so if I start saying things, in the future, like "I don't see what people's problem with Java is" or "actually, Objective-C is pretty cool, I'm glad I learned it before I started Swift" don't be surprised. :)

I think that I'm going to go study a little Ruby now. 

...because Ruby.

Sunday, August 24, 2014

Coding and Stuff...

Last week, I started getting a little bored with programming in just ruby, so I decided to go back to learning a few other languages. I watched the Google Class on Python and I picked up the Code School Objective-C tutorial, again. I find that studying other languages gets me a away from the syntax of the languages and more into the larger concepts involved in programming. In the beginning, I just thought that you should just learn one language and get really good at it, and then maybe pick up some others a little bit later down the line. What I have found is that once you think you have a decent grasp on the basics of one language, it's productive to pick up another language, with the same paradigm [i.e. object oriented, symbolic, functional...]. This is works for me, because it forces you to really understand the concepts involved, it breaks up the monotony of studying the same thing over and over, and, pretty much, without fail, every author brings a unique perspective which leads to new insights on programming in general. Recently, I've had a chance to start reviewing the code of other programmers who are just starting out and it's made me realize how important it is to learn to actually program versus just being able to code in a language.

Speaking of which, I heard back from the company that I wrote the Mars Rover program for and I am happy to report that I have done my telephone interview and will be visiting the main office next month for the final stage in the process. I think that I am a very strong candidate for this company and I am super excited about the prospect of working there. On Friday, I went to the Atlanta office and meet one of the developers there. He was super cool and made me feel really good about the job and my chances of actually getting it, so...that was positive. Among the things that I love about this company are lots of travel, flat management structure, the fact that you have a voice in the things that you work on, and the people working there are "my type of people."   I can't wait to go up there. My entire experience with this company has been awesome. I can't think of a better place to be for my first, possibly only, programming job.

Which brings me to: I just started learning Java. I have to learn Java for Algorithms I, as well as for this new position, should I get it. The algorithms class starts next week, but if I get this job, they will also teach Java in training. This will give me a leg up for the job and also allow me to develop mobile apps for android, which is something that I'm definitely interested in.

Java is an object oriented programming language, so it's not a big departure from what I already know. The syntax and the things that it requires, such as the requirements for declaring variables, are a little bit uncomfortable after starting [restarting] my programming education using ruby and python. I'm pretty sure that I'm always going to prefer ruby and python to any other languages, but I'm learning to appreciate Java and at the end of the day it's more about the applications and building cool stuff.

Friday, August 15, 2014

The Mars Rover Project

Last time I posted, I was talking about upgrading my professional marketing materials, i.e. LinkedIn, because one of my friends told me about an entry level programming position. Well, they contacted me the next day and the interview process has begun. My first tasks are to watch a video, fill out a questionnaire, and choose one of three programming problems to solve. There were three choices, the first was one involving a transit system, the second was one that calculates taxes and tariffs on goods and prints out a receipt, and the last one was to write a program where you hypothetically help NASA track rovers on Mars. I think we all know which one I picked. :)

The first one, I skipped, because writing a program about a train system didn't interest me enough to stop there and the second one wasn't that exciting to me, plus I have two other friends in the process who are both doing that one. The last one was right up my alley: writing a program to plot the position of Mars rovers.

I love astronomy. The extreme speeds and grad scale of the universe is one of the most fascinating things that I can imagine. I took several astronomy classes as an undergrad and since then, I have kept up to date on most of what's going on in the field. So naturally, I jumped at the opportunity to pretend like I had a job with JPL. I've already started working on it and I am thoroughly enjoying it. When I first looked at the problem, it seemed a little bit overwhelming, but it is way too interesting and fun to not do it. Once I started working on it and breaking it down into smaller pieces, it became manageable and much less menacing and it is starting to come together.

I hope that I never stop getting excited when I get my programs working.  I like puzzles and I do many different types of them, but I never find myself getting extremely pumped because I solved one. It's way more fun to code. Don't get me wrong, I do feel satisfaction in completing puzzles, but when I make programs work, I get extra excited. It's more like scoring in sports, than solving a puzzle.

... I guess you had to be there.

UPDATE: I've watched the video and turned in my program and questionnaire.

Thursday, August 7, 2014

Pulling it all together...

I'm feeling good about where I am with my coding, I started a new book on Rails this week, called Pragmatic Agile Programming with Rails 4. I'm kind of wishing that I had done this before I repeated the Michael Hartl tutorial. This book is really enjoyable and I'm taking my time getting through it. I just finished chapter 6, today. The demo app that they started with in this book was different from the other tutorials and books that I have read, in that it was much simpler and clear.

I found out over the weekend that I can't dual boot Linux with my Windows 8. After being frustrated with the compatibility issues with Ruby Gems for Windows, I decided to do whatever it took to get Linux working. I spent the better part of Saturday morning and early afternoon working on this to no avail. I gave it a half-hearted attempt when I first got this computer,almost a year ago, but it didn't work out because, at that time, you had to disable the secure boot to get it operating and I didn't bother to do that. Apparently, this no longer an option. I really don't understand why Microsoft is doing this. Are they banking on all developers, that aren't currently using Apple or Linux, exclusively, to just switch over to using their development tools? I'm contemplating trying to switch my OS to Windows 7. At this point the only reason that I'm using Microsoft is because of Photoshop, Rosetta Stone, and the years of work that I have on my external hard drive that I carried over from the computer that had before this one.

A few months back a started taking a Stanford MOOC course on networking. I learned a lot about how networking works, in theory, but I started getting real world experience this week, when I had to change my password, because one of my neighbors has been leeching off my WiFi signal. I had been putting it off, because a.) it wasn't a serious issue, and b.) I didn't feel like resetting the passwords on every device in the house, but they finally forced my hand by hogging up all of the bandwidth, which led to additional googling and experimentation with my router.

I've also decided to start getting my professional stuff, like my LinkedIn and resume updated, so that I can seriously start looking for a job doing programming. I've been writing a real summary for my profile. Last night a friend of mine asked if I would be interested in interviewing for a position at ThoughtWorks, so that also forced the issue a little bit, although, I have been meaning to do this stuff for a while. The problem is that I enjoy programming so much, right now, that I just really want to keep learning it as a skill and I end up not devoting as much time as I should to the "career" side of coding. I'm starting to think that I may end up just doing freelance work.

PS- I didn't get that Code for America Fellowship. :(

Tuesday, July 29, 2014

Don't Mind me, I'm Just Being...Not Evil.

So...yeah, Google hangouts has some cool new stuff.

Earlier today, I found an excellent new book to up my programming skills. It's called Structure and Interpretation of Computer Programs, Second Edition and apparently, they've been using it to teach Intro to Computer Science at MIT since 1980. I'm only about 40 pages in, but so far, I'm really enjoying it. I hear the actual class is on youtube, but I have yet to confirm that information. I plan on confirming that information in a very soon.  [Update: information class on youtube confirmed and awesome]

The language used in the book is called Lisp, it's the second oldest programming language that people are still using and it's also supposed to be good for Artificial Intelligence.  So this should be fun. I'm actually appreciating the opportunity to get a look at a different language and actually working on my programming skills outside of web development and syntax.  

This week, I finished Michael Hartl's Rails tutorial, for the third time, and I am now learning about the carrierwave gem and using it to add user provided images to the Steam Truck app. I'm finally in a space where I am actually building stuff without training wheels, although mIRC #ruby has been a lot of help with my implementation of carrierwave. I'm still working on the finer points of using carrierwave on the app, but things are going well on this project. I'm currently in the process of setting up a meet up for the rest of the group this week.

[HEADS UP]: I got back in the gym, today.