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.

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.

Judean People’s Front

Monty Python Life of Brian

Men dressed as women dressed as men to throw stones

Last semester I was having some minor coding issues that I wanted to talk through with someone but I didn’t want to bother the teacher about. I reached out to him to ask if there was anyone he knew about who would be interested in pair programming with me. He told me to look into NSCoder.

NSCoder, for the uninitiated, is a night that you set aside to meet up with other programmers to work on code, usually at a coffee shop. This is traditionally on Tuesday nights.

So I looked into NSCoder and hey, there is one in Madison! I kept planning to go to their meetings, but the winter has been pretty brutal. We have had snow storms most Tuesdays and it takes as long to drive from school to downtown as it does for me to drive from school to home.

I decided to create an NSCoder group at Madison College. I reached out over our group mailing list to see if anyone was interested and days people could do. I did not get any response. The few people I talked to couldn’t do Tuesdays.

So I had another person pick up the ball. He sent out an email telling everyone to meet in the cafeteria on Tuesday afternoon any time after 2:30. A couple of us from the afternoon iOS Development class all went down after class at 4:30. No one there, including the guy who initiated the NSCoder meeting. We all stay for about 40 minutes. I left early because I had a brand new puppy that I didn’t want to leave for too long and everyone else had obligations.

I found out later that the initiator did show up a half hour after every one left and just coded on his own.

So yesterday I get an email over the mailing list from yet a third person saying he thinks this is a great idea and we should really start an NSCoder group at school that meets on Tuesday nights. He tells all of us grandly that he will be in the school cafeteria all day coding and welcomes us to join him.

This is a person who dropped out without finishing his degree, so he was unaware that this is Spring Break and no one would be there. He was informed of this fact by someone so he pushed it back by a week.

I pointed out that we have already been doing this and that Tuesdays are not a good night for people that I have spoken to who would like to do NSCoder. I propose we do Wednesday night. The only other people who seemed interested but weren’t trying to reinvent the wheel all said that day worked better. I immediately got smacked down by most of the people responding on this thread that you have to do NSCoder on Tuesday because that is the way it has always been done and that you can’t please everyone.

I feel like I am in Monty Python’s Life of Brian. I feel like no one wants to just belong to the group and code, they would rather bicker about who is the chief and whose idea it was and who is the leader. So now we have the Judean People’s Front of coders and the People’s Front of Judean coders.

I don’t care! I just want to meet up with at least one other person outside of class to code. Who cares what day it is? Why do we have to do things a certain way because someone unilaterally picked a day out of a hat that doesn’t happen to work for anyone several years later in a different state?

I do not understand the mentality of some of my fellow students. A large group of us went to CocoaConf Chicago together. We did an NSCoder night there and were able to meet up with some new people. My fellow students only wanted to talk among themselves.

I went to some amazing talks there. One of them was the Core Audio talk by Chris Adamson. One of my fellow students went to it. I went up to him after and gushed about how amazing the talk was. He said, “Oh, I wasn’t paying attention. I was coding my project and I tuned out what he was saying.”

Why bother paying hundreds of dollars to go to a conference if you are just going to do things that can be done at home more efficiently for free?

Most of them also skipped the keynote speech by Dan Steinberg. I felt pressured to not go to the keynote, but I was on Twitter and I saw all the enthusiastic gushing about how amazing it was and I realized I was being stupid and I jumped ship. I hope one day to get to see the whole speech in its entirety.

I went up to Dan and told him how much I enjoyed his talk. I also went on Twitter to say I wish I had the talk on video. He asked me why since I’ve already seen it once. I was too embarrassed to say I missed the first 10 minutes because I was trying to prove I was cool to a bunch of people I probably won’t be dealing with a year from now.

That is the other thing I don’t understand. These people we are going to school with aren’t important in the grand scheme of things. After you leave school you will have other coworkers and a whole community of professional developers that you will interact with, so if one fellow student is being a piss ant, ignore them. They don’t matter.

CocoaConf Chicago and Core Audio

Haven’t had a chance to write on my blog recently. I went to CocoaConf in Chicago this last weekend and it was an intense experience. I thought I would have more down time, but not only were the days long, they were packed with lots of content and by the time the end of the day came my brain had run out of available RAM!

I met a lot of amazing people. I saw a lot of amazing speakers. Among my favorites were Jonathan Penn and Daniel H. Steinberg. I went up to Dan after his keynote and told him he was my new career role model and he looked at me and said, “Oh God honey, why??”

However, the talk that made the most impact on my life as it is was the Core Audio talk by Chris Adamson. I bought his Core Audio book back in December. I took it on vacation with me between semesters because I thought I could read through it. That went fine until I got to the first code sample. It had code in it that had been deprecated. I discovered why the main method has the autorelease pool in it. It was because before you instantiated an NSPool object, did something, then called the drain pool method.

So, anyway, I got very confused about what stuff was deprecated and what was pertinent for Core Audio, so I set the book to the side until I learned enough to be able to make that determination.

I was super excited to see Chris’s talk. I wanted to go up to him and talk before the talk, but I didn’t really know what to say. At conferences I prefer to go to someone’s talk and then approach them later and talk to them about their talk. So far it has worked. The Core Audio talk was one of the last ones of the conference, so I saw him around for three days without talking to him šŸ™

When he started talking about Core Audio, it was a revelation. I noticed that when my brain sees a bunch of unfamiliar stuff, it runs away and hides. I usually have to look at something two or three times before my brain gets used to what it is seeing and is willing to process it.

I did not feel that way with Core Audio. The first time I saw actual Core Audio it was a revelation, an epiphany. I didn’t want to run and hide from it. I wanted to dive into it and absorb it.

I got to talk to Chris after his talk and he is super cool. He is the first person I have encountered in four years who knew the person I named my dog after (her name is Delia Derbyshire). I had a great deal of fun talking to him and I hope that I get to do so again at some point in the future.

After I got back from the conference, I felt energized. I felt like I finally had a grasp of what I am doing. I spent the whole next day coding. I was in the flow.

This is the first time I have gotten into the flow for Objective-C. Before this, I did my homework because it was something I had to do. When I would talk to people who said they would code for hours I was jealous because I wanted to want to code for hours, but I wasn’t there yet. I was afraid it would never happen.

I want to be part of this world. When I go to these conferences and everyone knows each other and they are all familiar with each other’s work. I want to be one of those people. I don’t want to be the nerd that goes to Comic Con once a year so that I can meet the people who create my favorite shows, only to go home and wait for the next year to come so that I can rub elbows with these people. I want to be one of them. I want to walk the walk rather than just be a fan girl.

When I got home I dug into Core Audio. I stayed up all night coding and listening to my internet radio while drinking tea. My husband kept yelling at me about when I was coming to bed and I yelled at him that I was busy and to leave me alone. My dog, Delia, was unhappy that I wasn’t cuddling with her, so she came to my office and gave me disapproving face.

It was glorious. I feel that I now have focus. I know what I want to do. I know what I want to accomplish. I feel confident that this is something I can do and do well.

I feel bad that I didn’t write more about the conference, but if you are reading this post you were probably there and don’t need me to say what it was like!

I am going to code now. Life is amazing.

With a Little Help From my Friends

Okay, my post a few days ago about being an iOS rockstar and doing the coding sample for Cocoa Camp, that was total posturing.

I rode down to CocoaConf Chicago with another programming student from another class. Her name is Emily. She is a decade younger than I am and a better coder than I am. She was showing me all this stuff she’s done and I had an awesome moment of depression. Oh my god! I’m old! I’m dumb! I’ll never figure this stuff out! I suck!

So I swallowed my pride and I asked for some help on the assignment we have due on Tuesday. Emily was super awesome and talked me through a problem I was having. It wasn’t a coding problem, it was simply a logic issue. I felt silly for not figuring it out because it was exactly the type of stuff I was doing years ago.

She told me not to worry about it. She has been doing this longer than I have and she said she felt exactly the same way when she starting doing things for the first time.

So, the reality is, I am not the world’s best programmer. And that’s okay. I am learning. I am trying hard and there are always going to be better people out there in the world. I can’t get hung up on comparing myself to other people. If I make that coding sample, send it in, and I don’t get picked, it’s not the end of the world. I can think of a half dozen people just at my school that are better coders than I am and it was stupid for me to think that I was just going to be chosen because I am somehow inherently special and will do something brilliant that no one else has ever thought of.

So, expectations are reassessed and if/when I am not chosen, I won’t feel bad about it because I had a good experience learning how to figure stuff out and when to ask for help.

I will write some more posts soon about specific CocoaConf Chicago events!

How Picky do I get to be??

My first degree that I obtained was in Broadcast Journalism. On one of the first days of class the professor told us that in 10 years only two out of a hundred of us would be working in journalism because everyone else would leave. I looked around smugly, feeling sorry for those other 98 people who were wasting their time.

Fast forward 10 years, and everyone I know who did actually get a job in journalism is doing something else. I never actually got paid to do journalism. I had internships and I worked at a community radio station for three years during which the only payment I got was an autographed copy of Fahrenheit 911.

I keep hearing that hiring for programmers is insane. I keep hearing that we are not outputting enough programmers for all the positions available and that if you learn stuff like iOS, you will be high in demand.

Madison does not yet have a large iOS community. You can program in your basement and hope you create Angry Birds, but large scale iOS operations are few and far between.

I am bringing this up because I am being contacted by recruiters. Most of the jobs are completely insane, which get trashed. Occasionally I get one that isn’t perfect, but not bad either.

I have had two of these in the last few days. Both of them are at Microsoft shops where they want you to use Microsoft. They both pay okay. One of them is kind of far away.

Last summer when I was unemployed and had not dedicated myself to going back to school I would have jumped at either of these opportunities, but right now I am looking at them going, “Meh.”

I don’t know how picky I get to be for my career. I still feel the panic I had as journalism major who graduated right before the recession hit and saw all the newspapers and TV stations go out of business and having that as a paid career disappear. Part of me feels like if I turn down something that isn’t exactly right the hubris gods will smack me down.

I am just afraid that I am going to go onto a path that I don’t want to be on. If you take, lets say, a VB.Net job even if you don’t like VB.Net, it’s hard to find a job utilizing a different language because all your experience is in that. I don’t want to get stuck in a job using a language I don’t like because I am afraid that I won’t find another one.

I don’t have to worry about this an awful lot right now because I have school and can’t really commit to anything yet. So I get to pull a Penelope and weave my shroud while I keep my suiters waiting while I await my Odysseus coming home. Just worried about what happens when time runs out.

Cocoa Camp 2013 Code Sample first impressions

The application for Cocoa Camp requires you to create a currency conversion app for the iPhone. The only requirements are that the app compiles and that it converts one currency to another. Beyond that, you can make it as complex or simple as you like/can deal with.

I would like to extract the data in real time rather than hard code it in. Once you figure out how to extract the data, it isn’t that hard to scale it to more than one currency. I am currently planning to have ten different currencies.

I also plan to display the flags associated with each currency and to make the text green if the conversion is higher and make it red if it is lower.

So this project has a few moving pieces. I need to create a picker menu with the currencies I am planning to offer conversion for. I need to extract the data and apply it to my output. I need to use the data to determine what flags I output.

There is a big piece of information that is used by all parts of my app, and that is the exchange rate information. I need to take the countries selected by the picker, send them to the place to get the rate, return it, then send it to an output for the rate. I also need to send the county info to the output for the flags.

I will probably create a diagram charting this out.

I also want to get this done soon, like within the next week. The application is not due until April, but I don’t want to spend a month on this. I contacted Apple about this program before the information was released and they sent me the information about it. So someone there knows that I have known about the camp since the data was released.

I don’t want to half-ass this, but I do have very clear goals that I want the app to accomplish and how I want it to work. I believe the goals I have created for this app are attainable in the amount of time I have given myself. If I get stuck I have a few people I can talk to for advice about what to do.

I am not going to get into any details about exactly how I accomplished this on my blog until after the deadline. I highly doubt anyone who will be applying to this along with me even reads my blog, but it’s better to be safe than sorry.

I created my stub project. I included most of the classes I believe I will need. I have already started this once when I decided to come at it from a different angle. I have the old version of the project in another folder. Tonight I am going to review the different pieces that I need to use so that I can build everything once instead of putting things in the wrong places and wondering why my code doesn’t work.

I hope this will be enough. I can’t think of a way to make this more complex without creating app bloat. I am hoping that most people won’t do this much, or if they do that I did it better!

Canned Responses

I have mentioned a few times that I am searching for an internship. I would prefer one in Madison, but I have expanded my search to Milwaukee and Chicago. I would also prefer one in Mobile Application Development, but also have expanded my search to Java internships.

I did not think there were many places in Madison that do Mobile development, so I was pleasantly surprised when I learned of one I was unaware of. I immediately went to their website to inquire about an internship.

When I got to their website, there was no obvious “Career” link on the site. I looked at the links across the top, and nothing. The only contact I could see was for prospective customers.

On a hunch I checked the bottom of the screen. Hidden among identical links across the top was one that said “Careers”. Yay! I found it!

I clicked on the link and it brought me to a form. The form asked for my name, my email, and a brief description of what I was looking for. So I fill in my info, say I am a student looking for a mobile application internship.

A few hours later I received a canned response. The canned response said that all of their opportunities were filled but that they would keep my resume on file and if I cared to update it in their system I could contact them.

Now how did they get my resume?? I never gave it to them. There was no option to upload a resume. Did they get it by magic? Am I already so awesome that they were scouting me out waiting for me to ripen into a full blown rockstar application developer?

Nope. They were using a canned response. Further, they were using a canned response I already received from another Madison company I contacted a while ago for a different position.

Do I really want to work for a company that is so careless that they will automatically use a canned response that they never bothered to read to ensure that it correlated with the information that they gathered from my contact? Nope.

Clearly they don’t want to hire anyone in the near future. That is just fine. I ask if you genuinely don’t have any need to hire anyone, be honest about it! Don’t ask me to jump through a bunch of hoops in order to be blown off.

Also, my understanding of the job search process is that is a two-way street. If, by a lot of hard work and tenacity, I one day become a rock star developer, I won’t want to work with this company. I have a bad taste in my mouth about them. I won’t recommend them to someone looking for a company and I won’t work with them if given the option to do so.

I am one person, but if I notice this then I am far from the only one. Joel Spolsky of Joel on Software says about doing an interview, even if you are not planning to hire an applicant, you want them to walk away feeling good about your company.

He is a wise man and I am saddened that this company did not read this article or take that advice.

Cocoa Camp 2013

Every year Apple does a summer camp for programming students in Cupertino. The last few years Madison College has had several students who have gone.

They just released the application to us yesterday. We are required to send a resume, a letter explaining why we should be considered, and a coding sample. We have to program a currency converter that must work on either a simulator or an iOS device.

I am in a conundrum. I have a (slightly) late Java project to work on and I have some iOS homework to complete, but the challenge put forth by the Apple people is more interesting to me. Maybe it’s just interesting because it is new and shiny.

I have a month to complete the challenge and submit it to Apple. I will try to work on my other stuff for a while, but I might come back to working on this. I want it to be awesome.