The Road Not Taken

I probably spoke earlier in the year about my various disappointments regarding WWDC 2013. I applied for a scholarship and I did not win.

Someone I met somewhere I can’t remember who talks to me on Twitter told me about another conference happening at the same time, GLS 2013. GLS stands for Games Learning Society. It is an interdisciplinary group at the University of Wisconsin-Madison. It is made up of tech people and education majors who are trying to create a learning experience through games

This conference opened my eyes to a multitude of things I had never considered. They showed me tools that others had developed with the express purpose of teaching children how to code by creating their own games.

This spoke to two things that I hold very dear: Gaming and using games to learn.

I grew up playing “Where in the World is Carmen Sandiego” and “Oregon Trail”. I never had a video game console or any of the “fun” games my peers had growing up, but I had games. I loved games.

I can only learn is something is interesting to me. I am very compelled by story. The only reason I know anything about astronomy is because of the vast multitude of celestial object that are named for mythological characters.

For me, the GLS conference was a life-changing experience. It really focused my attitude towards not just becoming a developer, but becoming a game developer.

I wonder how different things would have been had I gone to WWDC.

There was some focus on gaming at WWDC, but the vast majority was focused on grand-master programming. They focus on people who want to scale a code version of Mt. Everest.

I go back and forth. Sometimes I really want to be an elite-grand master programmer who scales Everest because it is there. Other time, I just really want to share my thoughts and ideas with the world and create nice tools that other people can use.

I am beginning my last full semester of school for programming. I am on a track that I hope to continue to take. Right now I am kind of taking inventory of where I am, where I want to be, and who I am right now.

I had a very turbulent summer that I intend to write about at some point. It is still hard for me to talk about, so I hope that if you read my blog you will be patient with my lack of responsiveness over the summer.

I am planning to write here more regularly. I have been advised to keep a public blog of my projects for my development class and this one is already established. Stay tuned for the next few months. Where we’re going, we don’t need roads!

Plotting The Course

I finished my semester (yay) and I am off to explore a few months of being able to do whatever I want.

I have some intriguing prospects. The coolest one so far is that I am communicating with the founder of an iOS start-up in Austria about going there for a month and completing my internship requirement. I am super excited about this possibility.

I am being offered a place to stay and help getting there, so if I can break even on my travel and living expenses I will consider that a great achievement.

I am starting to figure out what I am going to learn and how I would like to do so. My initial, not-thinking-things-through plan was to master Core Audio. This is still a large goal that I have that I want to work towards as quickly as possible.

But now I am thinking about what do I want to do with it. I also have interest and experience in graphics. This seems like a good opportunity to do Game Design. I know most people who do programming probably want to do Game Design. I am certain it is probably like my experiences in the Audio Recording industry where the cooler a certain career path is, the more sexist and intolerant it becomes.

I would like to design my own games. I have several ideas that I would like to implement. One that I had was far too advanced for me to do on my own and I had to figure out what I would do. I could go to someone about it and risk them taking the idea away from me and cutting me out of the process. I could talk to other people I eventually want to hire about co-owning the game with me, but I did not think that would go well. I eventually was able to formulate a less-complex version of what I wanted to do and I believe I can accomplish that on my own in the next year or so.

But where does that leave Core Audio?? I made a personal commitment to learning that this summer. I know that if I go chasing after every single whim and interest I have I won’t get anything done. I need to really figure out what I ultimately want to do so that I don’t waste this valuable time spreading myself in too many directions and accomplishing nothing.

Another fly in the ointment is my husband. He is under the assumption that since school is over I have no commitments and I am available to do stuff whenever he has a whim. We went to Star Trek Into Darkness on Friday morning because he took the day off. I don’t think he understands what I am trying to do.

That would not have been so bad had today not been so difficult. I felt like I hadn’t slept and I wound up taking two naps today because I felt exhausted. So I did no work on Friday, Saturday, or Sunday. I made some progress in my C programming book today, but I feel like today was mostly a wash. I can have those days periodically, but if I am going to try and treat this as a real job, I can’t randomly spend my day playing Portal and napping with my dogs. I hope tomorrow works out better.

My progress through the Core Audio book is slow but steady. I completed the first two chapters. I could probably plow through them more quickly, but based on how hard it was to process the other information during the semester for iOS, I hesitate to go too fast through the book. I am trying to spend a few days on each chapter and go through them about two a week. The earlier chapters are probably easier, so I will reassess when I get further.

I thought I knew C pretty well, but there are a lot of commands I am using that I am not familiar with. I am going to go more in-depth with C while going through Core Audio.

I will give another update at some point soon since this is the first full week I have to myself.

The Day I Became a Programmer

I have spoken a little about my first introduction to programming. It was five years ago and the language was Perl.

I did not progress very far with Perl. I got confused about functions and I did not have anyone to really talk to about my confusion, so I kind of forgot about it and got distracted by other things.

Nearly four years ago I began taking programming classes. I figured that if I had people to talk to and deadlines to meet it would be easier to keep from being distracted.

That worked somewhat well for a while. I took programming classes but I couldn’t remember how to do simple things from memory since we only did them once before moving on to another topic. I found “for” loops confusing because I could not remember what each slot in the parenthesis was for. I had to look it up any time I wanted to do one. I didn’t understand why people wouldn’t just do a “while” loop because it felt so much more straightforward to me.

So I kind of stumbled through programming classes for a few years. I would take the into course to a language and go over arrays, for-loops, and other things another time. Every time I heard it things made a little more sense. I was turning my homework in and I sort of understood it. I had a bad feeling that there was a lot more to it than I was processing, but I was trying to tread water to keep from drowning.

Finally I slammed into a wall: Object Oriented Programming.

The first language I learned, VB.Net, did not talk about OOP in the first semester I took. We kept getting further and further behind and we did not talk about it. When I took the second VB.Net class, the teacher assumed we knew it. The first time we saw classes, we were like, “What’s going on?! There is more than one document! How do they communicate?!”

I had to drop the class because I had absolutely no idea what we were doing. I wanted to take a semester off. I felt burned out and depressed because everything was so hard. Everyone else I talked to seemed to have be programming for years and already knew this stuff. I felt like a failure.

At some point around a year ago, I started using the web site “Code Academy”. They went over these introductory concepts again, but I could do the tutorials over and over again and things began to click. I felt comfortable with these concepts and I knew I could learn this.

I decided to take Java in the fall because the teacher I had had for my first programming class designed the curriculum and I knew that I could learn from him. He had since moved on to designing the iOS curriculum, so I followed him to that program too.

The “Intro to Java” class was the best programming class I have ever taken. One of the first things we did in that class was learn OOP. By tackling it immediately and using it over and over again we were able to process what programming is and how it works.

I consider the day I finally understood OOP to be the day I became a programmer. I have been messing around with it for five years, but it wasn’t until nine months ago when I had that first breakthrough.

I have all kinds of concepts that I have encountered that I did not understand. Delegation in iOS has been one. It is easier to keep working at something you don’t understand once you have had the experience of having a breakthrough and finally getting something that was hard.

I feel that I have made so much progress over the last year. I hope that this is just the beginning of a long period of productivity for me.

I know a year ago I felt very unsure of myself. I did not want anyone to ask me any questions because I was afraid they would figure out that I didn’t actually know anything. I don’t feel that way anymore. I feel like I can learn anything I set my mind to and I am up for the challenge. Bring it on!

Summer Plans

I am writing out how I plan to spend my summer so that I can formulate a plan of action about the best way of utilizing my time. I also, from past experience, know that when I put in writing exactly what I plan to do, within 13 hours the Universe steps in and thwarts all of my plans, so I want to give myself enough time to adapt to whatever changes will invariably be throw in my path šŸ™‚

This is my last week of classes. Next week is Finals Week. I am signed up to take a Linux scripting class over the summer.

After I get done with my finals I anticipate doing the following:

– Mastering Core Audio. I will work through Chris Adamson’s wonderful Core Audio book and the Apple documentation for it. I plan to spend every morning from the time I wake up until around noon working on Core Audio.

– Take a lunch/cleaning break. I then plan, around noon each day, to spend some time cleaning the house. I have gotten very far behind on my chores and I need to schedule time for myself to do these things.

– Learn Linux. This will happen later in the summer when I begin taking this class. I plan to spend two or three days working on Linux.

– Possible other skill. I am contemplating learning more about Cocoa Drawing or Cocos2d gaming. I realize that learning Core Audio is a pretty sizable endeavor, so I am not committed to doing this third thing. I may also modify my plans to only learn Core Audio in the mornings. I worry that I will burn out if I only work on one thing. If all else fails, I will simply keep working on the skills I learned in my iOS class this semester and work my way through a few of my iOS programming books in the afternoons rather than trying to learn a second large skill. The more I type about this, the more committed I am to that course of action.

My goal is to see if I can make myself work a regular schedule on my own without having a job. Roald Dahl says that being a writer is the worst job in the world because you have to make yourself get up and sit at the typewriter and write a book. If you have a job where you are expected to be there at 8:00 in the morning and you get paid even when you are surfing the Internet reading Dilbert comics, it can be difficult to motivate yourself to work hard when there is no immediate financial reward.

Working for yourself isn’t for everyone. Most people I talk to about being an entrepreneur have this grand delusion of getting out from under the boot of the Man and setting their own schedule and being free. I see that to some capacity, but there is also something to be said about having a job where you get paid regardless of whether you produce something useful or not.

Since, as of this moment, my options are to work for free for myself or to donate work to someone else, I am working for the person who values my work more, which is me.

Status Updates

I have had a hectic week running around trying to get things completed, so I haven’t had a chance to update my blog on any of my activities. Caught my breath, now have a chance to give some status updates.

I got my WWDC application completed! Yay! It works and it has all of the functionality that I planned for it to have.

I created a portable wine journal. You go through, create wine tastings, and add wines to your wine list that you can then look back at later to figure out if you liked it or not.

I took it out for a test drive on Thursday. Middleton, WI had a Wine Walk that night and I went with some friends to try out how it works.

I have discovered some design issues that I need to address:

– The save function is flawed. I followed our textbook a little slavishly on the “save” function because I had not done it very often and had not sorted it out quite yet. I have the app set to save when you push the home button. So if you create a large list of wines and navigate off the page in any way other than to go back to the home screen, your wines do not get saved. For some reason your tasting gets saved, so I have a large list of empty wine tastings. Super counter-intuitive and annoying. I would be mad if I bought this app and it did this.

I figured out the save function was flawed when people would come up to me and ask what I was doing and where I got the app. I would navigate people though it, but none of my data saved and it did not go very well. Fortunately most people I showed it to were drunk and they won’t remember this and think badly of me! šŸ™‚

– I designed it for the iPad because I thought that more people would be using it on one. Going to the Wine Walk I realized that it was a pain to do so. You need two hands to type into the iPad and you are already holding your wine, so you have to find somewhere to sit down to type everything in. This would work far better on an iPhone.

I will need to, at some point soon, go in and fix these features. I got behind on my homework because I was trying to get this accomplished, so I need to put it on the back burner for a little while.

When I get this up and running I will put it up on GitHub.

I feel proud of the amount that I accomplished in the time I had allotted. I got something that works as designed. The design is flawed, not the code. I made it look nice. I included documentation about all of the features I planned to include when I have more than a week to work on it. I figured out a useful app to make that was limited enough that I could complete it in the time allotted. I successfully accomplished what I set out to do and I am okay with whatever the outcome is (but I would be far happier if I won the scholarship to WWDC!!).

Second Chances

I don’t remember if I talked at all about Cocoa Camp, but I did not complete my code sample. I figured out a few days before hand that I had designed it wrong in my head and it would look really bad. I wanted to use grouped table views with editable cells, but I do not know how to program those. I got too stuck in my head, panicked, then shut down.

I tried not to think about it, but now that I know other people in my program are going I feel disappointed in myself for not even trying. Even if I turned in something that didn’t win, at least I would have thrown my hat in the ring.

So hey! I get another chance! WWDC has student scholarships where you have to submit an app. Unfortunately, I have a week (5 days from now) to complete the app along with the application.

I have less time, but I am planning an app that is within my ability to code. I am not trying to learn a new skill, I just have to make something slightly more complex than I have been doing up until now. I feel confident with my grasp of the concepts I will be using.

Trying to manage my panic and stay focused without getting burned out. Going to ask for help much sooner than I did for Cocoa Camp if I need it.

It is weird trying to come up with my own idea and design for an app rather than completing an assignment for a teacher. This is the first time I have attempted to do anything like this.

If I get this done in a way that I feel good about, I will be happy with that. I would love to go to WWDC, but if I give my best and I don’t succeed, at least I will know I put out something I am proud of.

What Do I Want??

I am beginning to ruminate on what I want to accomplish with my career when I finish with school.

Here is what I know I DON’T want:
– Work for a large company doing enterprise-level programming.
– Work for a company utilizing a language that is for all intents and purposes dead but won’t be replaced because the company invested a lot of money in its architecture so if I ever get laid off or the company goes out of business I will never find another job again.
– Work for a bully
– Work for someone that tries to compromise my moral integrity

Here is what I DO want, both short and long term:
– Work with media (either graphics or sound)
– Write books
– Attend conferences
– Do talks at conferences
– Do trainings at conferences

I am uncertain how I go from where I am now to getting to where I want to be. I am assuming the Dan Steinbergs of the world did not graduate from college and start going out and doing talks. They had jobs that they went to where they honed their skills and acquired their hard-earned expertise.

I know that I need to learn either OpenGL or Core Audio. I want to learn Core Audio. I went to a conference two months ago where I got a taste of Core Audio. I came home and blasted through a hundred pages of Chris Adamson’s book in one night of glorious coding.

Since then, nothing.

We have been working on table views and modal controllers in class. These are such alien concepts that I have been doing our assignments over and over again until I can internalize what each line of code is doing and why it is there.

I keep thinking if I have a solid block of time with no obligations that I will learn a specific concept, but then life gets in the way and the time slips by without me getting a thing done.

I would like to spend this summer mastering Core Audio. I am supposed to get an internship for school and for my husband so that I don’t have a solid block of several months where I am earning no money. I don’t think I can sell the idea to him that the temporary loss of money is an investment in the future because I worry that I won’t get anything done.

So here is what I am going to do. I am going to dedicated a certain amount of time every week to Core Audio. I am treating my time at school like a job. I clock in, study programming, and at some point at night I clock out. I think that spending my summer setting my own hours and setting my own goals would be an invaluable thing to learn how to do, but I feel I must try to find paid work even though I think that in the long run learning how to structure my own work hours would be far more valuable.

The other concept my brain is bashing up against is the idea of “the long run”. I got journalism degree, but didn’t have any video skills, so I got a video degree. I found out that television journalism pays nothing but that doing sound for film is lucrative so I studied audio engineering. Then the recession hit and the whole bag of tricks blew up in my face.

Nothing in life is certain. I can’t plan on spending several years learning something that might vanish in a poof of technology. This is yet another reason I would rather spend my summer learning Core Audio, so that I can jumpstart my career when I get done instead of toiling doing something I don’t want while trying to eke out a modicum of time to work on the things I eventually want to do.

So, I am writing down here, that I am going to dedicate at least three afternoons a week to Core Audio. When noon hits on Mondays, Wednesdays, and Fridays I will finish up what I am doing and I will work through Core Audio. If I get on a roll I might up that to more days in a week.

If something is important you need to make time for it. I need to master Core Audio to the point that I can produce something impressive. I need to stop being distracted by all the other things I want to learn, even within the iOS environment. No Game Center, Storyboards, or Core Data. Just Core Audio. And the stuff I am doing for class.

I know that this epiphany will fade as all the rest of them do, I simply hope that by writing it down and putting it out there that I will make it happen and hold onto it even when I don’t feel like it or I have an assignment due.

Blog readers, hold me accountable!! šŸ™‚

Thoughts on Being an iOS Programming Student

We are about halfway through this semester and I just wanted to put down some thoughts on being a programming student versus being a liberal arts student.

I have a bachelor’s degree in journalism and an associate degree in video editing and graphic design. With those degrees there isn’t really a lot of “learning” per se. You read a book and write a research paper on it. You can plow though a book and you basically do a bunch of work. Read a lot, take notes, organize them, bang out a paper. That’s it.

Learning programming is considerably more difficult. You have to see the concepts over and over again. You have to code something three or four times before it begins to click in your brain about how all the pieces fit together.

I feel like someone gave me a box with a thousand gears in it and they told me that if you fit ten of them together, you get a watch. The first time they give you the ten, the next time you have to find them in the box and figure out how they work together.

If you do this often enough and reuse a few gears you start to get to the point where you can identify a few of the gears that make a watch from the box. After a while you figure out more and more of the gears you need. The goal is to get to the point where you can pick out all ten gears based on knowledge or memory or intuition.

Why am I bringing up the gear analogy?? It’s because there is this push and pull between the teacher and the student about how much work can be done versus how much work needs to be done.

I know that many of my fellow students feel we are being asked to do too much. I will admit to feeling like too much is being asked. I feel like I need to do the book work two or three times before I can even contemplate doing the written assignment Eric gives us. Eric calls the book work a “typing exercise”, but I need to do that typing exercise a few times before I understand it enough to even try doing the written assignment.

On the other hand, I understand that Eric would like us to do even more than he is asking us to do. The sheer scope of what you need to know to make a professional-looking app is enormous. How fast can you go through the material while satisfying both the teacher and the students, to say nothing of the prospective employers who hope to employ the students?

For myself, this class is very intense. I have done more work on this one class than I did during semesters of my journalism degree when I was taking 15 credits, but this is only a 3 credit course. I think the amount of work we are doing justifies being a 5-6 credit course.

I know that generally speaking if you are taking a 3-credit class it is assumed that you will spend about three hours in class and spend 3 hours outside of class doing homework. I am spending at least 30 hours a week outside of class doing the work and I don’t complete all of it. I know I am not the only one.

I don’t mind spending that time doing the work. I know many people don’t have that time to spend doing this work and that most people I am speaking to are planning to take this class again and to also take the prerequisite Objective-C class again.

How do you solve this issue? How do you give the students enough work that they are able to complete it while learning something without overwhelming people to the point that they feel it is necessary to take the class two or three more times?? I honestly don’t know.

I think that college shouldn’t be a one-size-fits-all model. If you are taking a math class or a computer programming class you should not structure it the same way you do an English class. If you have to spend over a dozen hours outside of class to master the material, then make the class worth more credits. Either that or change the curriculum where you are taking 6 programming classes instead of three, but taking them over and over again.

This would clear out all the students who drop the class the day before the drop deadline then take it over again with people who have never had the material before. I know that it is depressing being in a class full of people who already had the material who grasp it more quickly than you do. Most people are too embarrassed about being “stupid” that we won’t go up to people who already had the class who understand it faster because we feel like we need to “figure it out on our own the way everyone else in the class did”.

I know I don’t like having to explain to my husband about why I have to spend every waking moment of my life on one class while he lectures me about how he went to college full time while working a full time job and making straight-A’sā€¦(I usually tune out and nod at this point).

Again, don’t mind doing the work. I just wish that the credits or something would accurately reflect the amount of work required to succeed in the class the first time through. I don’t need the class to be watered down by a lot, just want something to reflect the amount of work I put into the class rather than have it be worth the same amount as a history class where you only have to show up twice a semester and take a multiple-choice exam.

Getting Ready for Midterms

Tomorrow is my Intro to iOS Development midterm. Huzzah.

I have been laid up with a cold/migraine/sinus infection for a week or so. I have a brand new box of Kleenex that I used half of already.

I did not complete my code sample. What I wanted to do was a few steps beyond what I am capable of doing. I am going back and forth on how to do outside work such as this. Should I try to stretch and do something I don’t know how to do yet or is it a waste of time because it is usually harder than I think it will be.

I wasted a bunch of time trying to figure out the UIPickerView without really understanding the mechanics behind how they work. I didn’t think it would be that hard. In PHP you can do the drop-down method in a few minutes. I did not realize that there were going to delegates and data sources and a bunch of other things that need to play nicely together.

I don’t know if trying to figure that out on my own before learning it was a waste of time. I don’t think I really understood anything out of it, but I learned how to look stuff up?

There seems to be two schools of thought on programming: You sit down and puzzle it out on your own or you ask someone for help because you can get something accomplished in five minutes that you might take days to figure out on your own.

I tend to generally cling to the second school of thought. I think that it is similar to the quote by Thomas Jefferson about the patent system: “He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me.”

I think as long as you are able to process the help you are given by someone who knows more than you do, you are not being a user. Everyone started somewhere. If you get help from someone when you are a beginner, then you have a responsibility to pass that information down to new beginners.

But occasionally I get stubborn and think that I can learn it on my own with no help from anyone. Sometimes, if it’s something that isn’t too far away from what I know how to do, I can figure it out. If it is something I have never seen before, it is usually way harder than I think it will be and I get nowhere.

Also have similar thoughts about tutorials. One could argue that tutorials don’t really teach you stuff because you are typing out what another person figured out and wrote. I find them to be useful, especially if I do them multiple times. The first time you do it, it just kind of works like magic. The second time you kind of start to piece together how everything works. If you wind up doing it a half-dozen times or more you really understand what is going on and you can apply it to other things.

So I agree if you do a tutorial once, it really doesn’t do much more than introduce you to a concept, but if you have the patience to do them multiple times they can really aid understanding.

Alright, I should be studying and not procrastinating on my blog :p

Hadn’t posted in a little while and I did not want anyone to think I had abandoned my posts!

Cocoa Camp 2013: (Almost) Final Countdown

Well, the application for Cocoa Camp 2013 is due tomorrow. I am in the last 30 hours or so that I have to complete a decent code sample and submit it for consideration.

I am modifying what I plan to do for my sample. I am planning to make the whole app a series of table views. In the root view you click on cells to select the data that you wish to submit, then at the bottom you navigate to a view that tells you the conversion.

I am eliminating my flag graphics. I figured out that what I wanted to do is more difficult than what I plan to do and would look substantially less professional.

There will be four cells in my root view. The first will prompt for an amount to be converted. The next two cells will bring up the same list of currencies to choose from. The last cell will navigate you to a view that has the conversion information.

I hope I have enough time to puzzle through it. It is an all-or-nothing thing at this point. I can’t submit it if I can only get it to partially work.

If I can’t get it done by tomorrow I will still complete it and put it in my GitHub “portfolio”, so it won’t be a total wash. It wouldn’t be anyway because doing an outside of class project is always useful.

I will keep you posted as to what happens!