Monthly Archives: February 2013

Podcasting

I woke up this morning all geared up to work on my coding, but I got sidetracked reading other people’s blogs.

Then I had an epiphany. If people write blogs they also probably do podcasts, so I did a Google search looking for good iOS podcasts.

Bingo! I found a nice list here. Most of these have at least a hundred episodes and all that I have looked at are still producing new content.

I am loading a bunch of these onto my iPod. I will come back later after I hear a few of them and I will give my opinion on which ones are helpful, which aren’t, and which would be helpful if I were not a beginner.

Okay! Time to code! I mean it this time!

Madison College’s Two Year Degree Curriculum

I have just realized that this blog may be read by people who are not current or former students of Madison College/MATC, so I am at this point going to give a brief overview of the curriculum to put some of my posts in perspective.

There are two Computer Programming degrees at MATC. They both fundamentally have the same curriculum, it is just more difficult to eliminate a program than it is to create one, so for all intents and purposes, there is one Computer Programming degree.

This is a four semester degree. There are some general educational classes required, like an English and a math. There is some study of databases and query languages plus an overview of web development with HTML and XML.

The part that is most pertinent to my posts are the programming language classes. Each student in their first semester takes and Introduction to Programming class. When I took this class in 2010, we were learning programming using JavaScript. This is so that students can learn about arrays and functions and conditionals before progressing to a more specialized course of study.

After this there are several languages offered and they are each three semesters long. When I began in 2010, there were three languages: Java, PHP, and VB.Net. Each of these had an introductory to that language, an advanced class in the language, and a class on some subset of the language. Java had Enterprise Java for it’s final class, VB.Net had ASP.Net.

In Fall 2012, MATC began offering a Mobile Development degree in place of one of the two programs I mentioned at the beginning of the post. MATC had offered iPhone development as a post-graduate elective and certificate, but these proved so overwhelmingly popular that they were brought in as an option for the degree program.

The first semester for the iOS class begins with “Introduction to C and Objective-C”. It then progresses to the “Intro to” and “Advanced” iOS classes. Android is also offered as an intro and an advanced after first taking the introductory Java class.

For the iOS classes we are using the Big Nerd Ranch books. For the Objective-C class we used the Big Nerd Ranch book about C and Objective-C. Right now, for this class and the advanced class, we will work through their iOS development book.

For the Introduction to Java class last semester we used Head First Java. This semester we are using the teacher’s slides and directly utilizing the Java API.

I have taken every single introductory programming class currently offered during the time I was here. I kept having issues that caused me to either drop the advanced version of a language or not progress past the intro.

This is the first semester I anticipate completing the second semester of three of at least one language. I am focusing on Advanced Java and Intro to iOS.

This is some background if I talk about what came before and what will come after. I am approximately a third of the way through my various language tracks and I am going to attempt to find employment for iOS.

Madison has a very large Java community due to organizations like American Family. It also has a large VB.Net community. I am learning Java as a back-up in case iOS does not work out.

So this is just a quick overview of the curriculum and my place on its path.

Where’s the Click?

Okay, I have pinpointed my source of confusion in completing the Rectangle project for iOS class.

If this assignment were slightly different, if instead of having the triggering event be a shake but a button click, I would be able to conceptualize this. When you create a button object, you can create a method called IBAction to do something when the button is clicked. So I would create a method that instantiates a rectangle with random parameters to be triggered when the IBAction gets called when the button is clicked.

So where is the click? I know that the phone registering that is being shaken is also an action, but as of this moment I am not aware of there being a specific method that is called when this event is triggered. I think there are a series of methods that get called, but when I look at them I feel like I don’t understand what it is that they are doing precisely.

So I have isolated the source of my confusion. Now I need to switch mental gears and work on my Java project.

Onward and upward.

The Emperor has no Code

So, as I mentioned in my first post, I attended my first professional conference this past weekend, Snow*Mobile. It was glorious! I was awake and out of the house from 5:30 in the morning to 11:00 at night on Friday seeing lots of cool things and talking to a bunch of amazing people.

But, as my mother says, when you dance you have to pay the fiddler. I spent all my time and energy doing that last week and I am behind on my homework. I did not look at the assignment that was due yesterday until about six hours before it was due.

I worked on it but I was horribly confused. The assignment is to create an iOS app that makes a random rectangle on the screen. The rectangle’s size, color, and position need to be random.

I approached this like it was a Java project. I understood the principle behind what is going on. I need to create a rectangle class that defines a rectangle which has random properties attached to its size, color, and position and then I have to instantiate an instance of this every time the device shakes.

But then I got lost. Where does this get called? I can make a class that does these things, but where does it go? Am I fundamentally not realizing some large chunk of information?

So I go to class not done, but determined to figure out what I did wrong. I am sitting in the hall waiting for Eric the teacher to come. I look around me and everyone is on their Apple laptops.

I don’t say anything because I don’t want anyone to know I didn’t figure it out. I feel miserable and stupid and contemplate my existence on this planet.

Then, suddenly, I hear a whisper down the hallway, “…Hey, did anyone get this to work?”

“No.”

“No.”

“Trying to get it working right now…”

This instantly makes me feel better. I am not abnormally dumb! Other people are having trouble too!

It turns out we all did the exact same thing wrong. We all started with an empty project and we were supposed to open a single view application. I know we could have added the view later, but we are all still starting out and it was enough of a stumbling block that we all got tripped up.

I pleaded for more time on the project because I spent all my free time at the conference. This is the only reason that will fly with Eric, so I have a reprieve.

I have until tomorrow to get this working. I supposed I should work on it instead of updating my blog…

I am rolling the problem over in my head and letting my thoughts percolate. I am not procrastinating. Not really.

…Maybe a little.

Word Press Eccentricity

In one of my previous posts I was trying to use an example of a PHP script declaration. I was perusing my posts and I noticed that what I typed did not show up! The site saw the declaration and processed it as PHP.

That was unexpected.

Unfortunately, I am not using PHP as much as I would like, so I am at a loss as to how to solve this conundrum.

I tried using pre tags. This created a solid block in the middle of the page with no text. So that doesn’t work.

I tried to use an echo statement with single quotes, which is supposed to not interpret any code between the quotation marks. This did not work (it came back with the closing tag, but not the opening tag.

I tried using escape characters, but the code did not print, only the black slashes did.

I removed it for the time being, but I will discover a work around this issue! Mark my words!

Will follow up when I determine the issue.

Randall P. McMurphy

95% of Nothing is Still Nothing

[the inmates are playing cards and betting with cigarettes]
Martini: [rips a cigarette in half] I bet a nickel.
McMurphy: Dime’s the limit, Martini.
Martini: I bet a dime.
[Puts the two halves onto the table]
McMurphy: This is not a dime, Martini. This is a dime.
[shows a whole cigarette]
McMurphy: If you break it in half, you don’t get two nickels, you get shit. Try and smoke it. You understand?
Martini: Yes.
McMurphy: You don’t understand.

Ahh, those magic words that are the saving grace of most students: Partial Credit. You tried. You got most of what you were supposed to understand. We give you a consolation prize. Better luck next time!

That does not work for programming an application. Nintey-five percent of an application does not give you an application, it gives you a bunch of weird looking text.

An application either works or it doesn’t. It is boolean. It is either YES or NO.

That is a hard thing to process when you are a student. You are used to getting a C if you just show up a few times a semester. Most coding teachers will give you some credit for trying, but you know in your soul that if you don’t get your program to work, you don’t get most of a program, you get shit.

Atlas Not Shrugging

Brain Spongenitis

I will complete my two year programming degree in three years. I began pretty strong because I already have a bachelor’s degree and I didn’t need to take some of the prerequisites, so even though I was going part time I was still on track to graduate in two years.

I was working part time for the first year, but then transitioned to full time the second year and had to take night classes. This, paired with the increased difficulty of the third semester classes, completely killed me. I took an unofficial semester off by only taking one class but then dropping it.

I was at a crossroads. I really wanted to finish school, but I was going back in order to get a better job and the job I had at the time paid about what I wanted to be making and I thought it was stupid to kill myself trying to do both and equally stupid to quit a job when that was why I was going to school!

Well, the universe made a decision for me and I was laid off from my job. I spent some time trying to find a new one, but it dawned on me that this was the golden opportunity I required to go back and finish school.

Fortunately, I only had 5-6 classes I needed to take! Unfortunately, they were all of my programming language classes and three of them needed to be taken in different semesters.

So I only had one or two classes each semester that I needed to take. I thought I would have this utopian academic period of a year and a half where I could dedicate myself to doing all these projects I never got around to working on and learning all these things I wanted to know better, like shell scripting and regular expressions. I had all this time!

Things did not work out that way.

There is a reason my programming classes kept getting dropped when I got overwhelmed. They are HARD!

Right now I am learning Java and iOS Development. I am spending dozens of hours outside the classroom just trying to absorb the information we are having thrown at us. I used to do Pub Trivia on Monday nights with a group and I haven’t done so once this semester because I am overwhelmed by my studies.

I feel like my brain is a saturated sponge and I am trying to coax more liquid into it without having to squeeze out stuff that is already there!

Part of me wonders if I would still be this overwhelmed if I was still working, that I am making my work take up all of my free time and if I had less free time I would still do the same amount of work.

I just know it feels very disappointing to know I am supposedly doing so little, but it feels so overwhelming.

Blind Faith in Programming

Okay, so one of the hardest things I have had to deal with in programming is determining what I need to question or what simply is.

If you create a new Java project, you will see a method called “public static void main(String[] args)”. The first time I saw that, I was like, “What the hell is that?” My background prior to this was doing PHP and JavaScript and neither of them has this funky code that has to be there. For PHP, you just type the PHP script declaration and you’re all set. Why do you need this weird group of words to make a project work?

So you just kind of take on faith that there is a reason for it. You know if you don’t put this in your project the compiler yells at you until you do it, so you just learn to regurgitate it any time you are asked to start a new project.

There is a lot of similar things in Objective-C. The main method has autoreleasepool. What does that mean?? It makes no sense!

I did find out later after reading an Objective-C book from 2010 that it used to have an object called NSPool, which had a method called “drain pool”. Well now THAT explains a lot!

Does knowing this make me a better coder? I don’t know. I am inclined to think not, but it is possible that trying to understand why rather than just accepting will eventually mean something.

A better example of asking why came later. I knew from looking at the documentation for an object that it had a certain method, but I could not get it to show up in Xcode. So I went to the teacher and asked what about the documentation I did not understand. He told me to call the method and I was confused. I call a method by typing some stuff into the IDE and it shows up or it doesn’t. If it doesn’t then I don’t know what is going on. He said to call a method you need to use the straight braces “[]”.

I was floored. I knew that you use the straight braces in Objective-C, but I never processed why. I was like, “I use them because that is how they do it”. I never thought about what “it” even was. I got used to just kind of not understanding why I was doing something but doing it anyway because that is what I needed to do to make the program run. This was an epiphany that you call a method by using the braces. Everything I am doing makes so much more sense now.

Part of you may wonder why I would just passively regurgitate code without knowing why. The problem is that learning coding is so overwhelming that you need coping mechanisms in your brain to process anything because if you don’t you become paralyzed by things that are trivial. It is difficult to differentiate what is important and what isn’t when everything looks like an alien language.

I just feel I need to have faith that anything that is important will eventually reveal itself to me when I am ready to process it!

Red Queen's Race

Welcome to the Red Queen Coder

This past weekend I went to my first professional programming conference. It was Snow*Mobile 2013 in Madison, WI. I have been studying programming for the last few years, but this was my first opportunity to rub elbows with the people who will be a part of my professional community.

Besides learning about programming techniques, I also learned quite a bit about how the online community for programmers works. I learned the power of Twitter and GitHub. I also figured out I should create a blog.

I have tried doing them in the past, but I was never sure about what it would be about or why anyone would read it!

I now know that I am going to write about my learning process for becoming a programmer.

I am 31 years old. The first line of real code I ever wrote was in 2008. It was in Perl and it was the obligatory “Hello World!” program. This wasn’t the program that got me hooked on programming, it was a program that created an array and printed out each element of the array. It did not work immediately and I had to look through the code several times to figure out why it didn’t work.

When I finally got it to work I felt this awesome rush. I did it! I made it work! I tamed the beast and bent it to my will! I am a god!

I was hooked.

I am sure anyone reading this blog has had this same experience. Many of you probably had it at a younger age than I did. I was 27 when I discovered programming. I don’t know if this would still be as hard if I tried to learn it younger or if it would be this hard no matter what.

So this is a document about my journey through programming. I probably won’t provide any insight to experienced programmers about how to code, but I hope to give some insight into the types of struggles that exist for someone learning this for the first time and trying to find their place in this crazy, wonderful world.

The name of my blog comes from Alice Through the Looking Glass. The characters in this book are based on chess pieces, and the Red Queen is the non-White queen on this particular chess board. Alice sees the Red Queen running as fast as she possibly can. Alice asks where she is trying to get to by running so fast, and she says that she is simply trying to stay in one place, that if she stops running she will fall behind.

I feel this is an apt analogy for anyone trying to learn Objective-C. The language changes so fast that you have to learn as fast as you can just to keep up with the changes!

So welcome to The Red Queen Coder. Enjoy!