I Know Nothing

I realize now, that although I can do some things, I can make some things happen, I can solve some problems, what I truly want to understand I do not know. And bizarrely enough, I just now realized the reason I don’t know is that I never learned.

So often as I’ve gone through attempting to learn how to program, how to be a programmer, I’ve encountered tutorials and guides. Learn Python. Learn Ruby. Learn Javascript. Learn to Program with X! But, none of them teach programming. None of them teach design. Patterns. Paradigms. Functions.

What is frequently shared between these tutorials is an understanding that they aren’t teaching those paradigms or they don’t know how to teach them in relation to also teaching a language, so they inform the student to copy things directly. If you copy it a bunch, you’ll just intuitively understand. And, maybe they’re right.

It makes me curious how many people try to pick up this skill later in life. I’ve often read about people who are still in my position, trying to learn, whose first introduction to programming is in their first college computer science course. However, that’s never the case for the tutorials I read. I’m sure they’re out there, but the number of people who have learned after being out of high school is dwarfed by those who learned while younger.

Nearly every tutorial I read mentions BASIC, or COBOL, or Lisp. These are the languages of their youth. They talk about starting to program when they were 8, 10, 12. Everyone was a child when they started. Does it mean I’m too late?

Is learning programming like learning a language? The earlier and more immersed a person is, the easier it is? My guess is yes. It seems obvious, but I wonder.

I would like to read more from someone who’s become an adept, capable programmer who started later in life. I’m sure they’re out there. I probably just need to search for them. I’ll writer again with my findings.

Programming

It seems every time I begin a new job I go back to dreaming about something different. More interesting. More consistently challenging. So it is and so I’m back to trying to program.

I read an essay about some hackers from back in the day stuck at the airport after a conference. The group included Bill Gates, Steve Ballmer, and others. One of the group decided to introduce Petals Around the Rose to everyone. Most of the group got what was happening after a bit, but some didn’t. I understood the game at the explanation of the first roll. For a second I thought, “Hah! How brilliant I am!” Then, I recalled that I was introduced to the game about 11 years ago while in college.

It made me wonder about how we acquire and retain knowledge. Why some things stick in the brain and others don’t. And it got me back to wanting to program. The desire has been with me for so long, but I don’t put in the consistent effort to achieve results. The progress I make isn’t rewarding enough to keep me coming back. So, I take breaks. The latest break ended about a month ago as I had made some updates to my Dad’s website. It’s badly in need of a total overhaul. Hopefully I actually get to that at some point.

The essay concluded with an anecdote about Steve Ballmer. Apparently, that game stuck with him as whenever he encountered a new programming language that interested him, instead of doing a simple ‘Hello World!’ he programs a version of Petals Around the Rose. I decided to do that myself.

https://github.com/joehalvarson/Python-Petals-Rose.git

I was surprised that I had retained as much as I had. I haven’t touched Python in almost exactly a  year and hadn’t done much other than read. But, I put together something that works. It isn’t perfect, but it works. And for the most part I slapped it together myself (maybe that part is incredibly obvious!).

My biggest hurdle was in getting the dice to print to the screen. Stack Overflow helped me get through those. I’m still disappointed, though. I’m not really sure I could have figured that out myself. That’s something that’s still a big hangup for me. I can’t consider myself above a beginner level if I can’t figure out how to do some of this stuff myself. It’s fine if I don’t come up with the most efficient method, but I need to be able to figure out some workable way of accomplishing a task.

I started reading some more on design patterns in programming. That will hopefully help. One of my biggest knowledge gaps is in how to organize things. I also started reading other people’s code. That will be a great help and something I’ve not done enough of.

Starting Over Today

As is frequently the case as I pursue knowledge on my own time I park it for a while until I get the urge again. I’ve got the urge again. I want to learn. I want to get this stuff so I can create. I have the brain capacity for it, it’s just a matter of setting and achieving goals. Cramming that stuff into my brain parts so it can leap from idea to fingers to workable code.

My goal when I started this journey was a both too ambitious and too vague. Learn enough Python to be able to make a game. I technically achieved that as I made a simplistic game using Python. It was really more of a hacked version of a step-by-step guide on how to create a Battleship clone using PyGame. I added win loss tracking, although I wasn’t able to figure out how to sustain that across game sessions. Every time the game was closed the wins and losses went away and restarted at zero. I tried to figure out how to export those statistics on close and import them when the game was launched, but was unsuccessful.

Through Codecademy I completed the entire jQuery track, except for the final challenge, which was to make something. I did write a bunch of code and was trying to create a simple version of Pong. I made it pretty far and was proud of what I’d done, but it was never quite complete and working. It almost worked, except the ball had a tendency to get stuck to the paddles if it hit the top or bottom edge. I couldn’t figure out why that was happening, so never submitted it as completed. It had score tracking as well, but I couldn’t get the placement or display to work correctly. The score wouldn’t update even though I did verify that the variable itself was updating on scoring. Well, I verified that if 7 points were scored the Game Over/New Game screen would appear. So, I knew it was tracking it, but couldn’t figure out why it wasn’t displaying correctly.

Anyway, that’s stuff I did. I have a lot to learn and get better at. I haven’t touched this stuff in some time, unfortunately. I started playing Dwarf Fortress again after the .40 update and it made me want to get back into learning. I want to create. I want to troubleshoot and solve problems. Part of the reason I stopped was I got busy with other life stuff. Wedding, writing, improv. Improv takes a lot out of me. I love doing improv, but my mind reels when I do a show I felt wasn’t totally successful. I hold myself to high standards and if I don’t achieve them it’s difficult for me to excuse myself.

So, I’m starting over. I’m starting at the bottom. My goal is simple and attainable. Program for 2 hours everyday. Go through each Codecademy lesson. That is my goal. I will achieve this by November 1st. In November I plan to edit the novel I wrote for NaNoWriMo in 2012. Every time I start editing I get intimidated and put it down. I’ve been editing the first chapter for two years. I mean, I haven’t sunk a lot of time into editing, but it’s time to forge through that and really edit and hone and expand where needed. I have a lot of good stuff in there, but I need to sort it out, find the weak spots and improve it.

I’m excited to get back to learning. I want to program for a living. I know I’m capable. I need to set realistic goals and achieve. It starts over today.

An Outstanding Article on Systems Used for Learning

This essay, by Bret Victor, is excellent. I feel that I consistently hit roadblocks and humps the size of mountains when learning to program and I couldn’t quite figure out what I was butting against. Victor’s essay,  
http://worrydream.com/LearnableProgramming
 was not only interesting in its criticisms of current learning environments for programming, but also answered some questions I didn’t even know I had about programming. A great read!

Minimum Four Years Experience Required

So, 90% of the reason I’ve been learning programming is simply because I want to learn. The other 10% is the hope that I can learn enough that if I lose my current job (the company is having certain troubles that are well-documented) I might be able to transition into a new career path. However, as I get older and older without any real, relevant experience in the field will it matter how much I know or can do?
It would be nice if there was some kind of collaborative mentorship place for people to program. For example, maybe I start programming a website, and someone else can come in and fix things, make comments, that sort of thing. Treat it like a real, collaborative project with the emphasis on learning, breaking, destroying, fixing, and understanding.
This would have to be a process where people are matched on similar learning interests and similar skill levels. Or, perhaps two people of similar skill are matched with one person of a higher skill level.
If two are matched with someone of a higher level they can learn and develop and better understand the process. This may be something I explore. I believe I understand the principles behind a site like this, but not the storage and account management aspect. I’ll have to add this to my pile because I think it’s an idea worth exploring.
So, the point here is that it’s difficult at a certain distance from college to gain practical experience necessary to understand a potential career environment. I suppose if you’re knowledgeable enough most people will understand that and be able to overlook the experience gap, but I believe something like this would be helpful.

Goodbye June

I’ve been doing a lot Codecademy over the past month. It’s gone well. I have a much better understanding of JQuery and in turn, Javascript. I’m completely caught up on their lessons for Code Year. I even came up with a t-shirt idea, $(‘i’).animate(‘theDom’); or $(‘i’).manipulate(‘theDom’); something like that. Perhaps I’ll actually put that out there somewhere. Now that I have so much JavaScript experience (SO MUCH) I’d like to explore using MelonJS again. Javascript is quirky, but with a better understanding of the basics I feel more comfortable diving in.

My Python learning has been on the back-burner. Now that I’m all caught up for Code Year I’m going to go back through Learn Python the Hard Way and finish that up. I’m about half way through. I stalled once I got to the section on making your own adventure game. Instead of figuring it out and doing what I knew how, I tried to tackle too much, which is what led me to Pygame, and Invent Your Own Games With Python. There’s also a sequel that was written to IOGWP that I may get into soon called Making Games With Python & Pygame.

At this point I feel the best thing I can do is set myself on a small project and hack away at it until it’s complete. I’d love to have a mentor who could take a look at what I’m writing and offer guidance, but I’ve yet to meet anyone working in Javascript or Python. There are a lot of groups that meet about Python, but they meet on Wednesdays and I’m busy with improv at HUGE Improv Theater at that time. I still haven’t made a schedule, which leads to a lot of time wasted. I’m not a good scheduler or planner. Must plan. Must work. Must learn.

A Rough Programming Month

Unfortunately, the past month has been a bit of a let down as far as programming goes. I got behind on my Codecademy lessons, mostly because they were going through the very basics of html/css and it was a bit boring. The lessons have spiced up and I’m again learning a bit more of the finer details of why certain CSS works the way it does. I really need to get the box model memorized so I’m not just fiddling with settings trying to get things to appear nice.

My biggest concern with my html/css is learning how to do pixel perfect implementations across browsers. When I look at Seoul Players in an older browser, it makes me weep a little bit. It doesn’t look awful, but there are a few minor foibles that need to be cleaned up. Unfortunately, I haven’t been able to do so just yet. There is some issue with displaying our mailing list sign up form. I believe I know what the issue is, but the code is being pulled from the Mailchimp server and cannot be edited, as far as I know. I’m sure there’s a way to fix it, but I haven’t found the solution yet.

Hopefully these Codecademy lessons get to some more things I didn’t understand before, so I can fix up the site better. As far my Python learning. It has been stalled. I made good progress in my Udacity course, but failed to finish. I really wish I could take a year off of work and really concentrate on working through those lessons as well as other Python tutorials. There is so much free education available, but just not enough time to make use of it.

However, I can make time. I just need to implement that schedule I was talking about last month.

Too much

I stretch myself too thin sometimes. I end up with a lot of stuff I want to do and am unsure how best to pursue it. I started the Intro to Programming class on Udacity with the full intention of keeping up with it, but unfortunately I can’t do it at work, so I got very behind and wasn’t able to complete it. If you’re looking for a great way to learn though, the class has been great and I would highly recommend getting on it as soon as possible. New classes are starting next week.

What I am able to do at work is fix up the website I made last year,  Seoul Players. I’ve been attempting to clean up my very messy CSS. There is a lot of work left to do, but I’m getting closer and closer to finishing the site. I don’t feel too bad that it’s updated when I’m able as I did make the site for free. I do feel bad for whomever might have to take over the site in the future, so I really need to clean it up and comment it.

When I began the site I had every intention of commenting everything, but as I was building I realized more and more that I had no idea how to really use CSS. I had made sites before, but they were strictly HTML with some inline CSS. This was the first site I made with external style sheets and I was really happy with it at the time. I still am, but I really need to fix it up nice.

So, ultimately what I see from my development as a developer is that I am learning…however, I’m not learning the things I want. I want to program games. I will program games. I will figure it out. I need to schedule my life better.

Wow, what a difference some syntax can make

For the past month I’ve been focusing on learning Javascript through Codecademy. While the lessons have been great I’ve had some trouble getting used to the code as there was never a formal lesson on how and when to utilize braces, semi-colons, and white space in the code. When I began the Javascript lessons I was fresh off of a few months of working with Python and it just clanked like a lemon off the show room floor.

Today, I’ve returned to Python. It’s pretty. It’s clean. It’s user-friendly. It’s so much simpler to immediately see what’s happening in the code. Even after two and a half months of learning Javascript I still have trouble seeing the code for what it is. I just opened up a program I was working on in Python and, even though I’m a poor commenter (I know, I know, I need to get into the habit of commenting in my code), I immediately recognized and remembered the rules of the code. That made me excited.

So, I’m back to working through Invent Your Own Games with Python. I’m excited to be back working in Python as it really is such a nice language to look at. Javascript is like that ugly, dull girl who is really into you, but you just do not like. Python is the sweet, girl next-door who you’ve been friends with your whole life and accidentally fall in love with. Python makes the best kind of lady.

Boggle clone, here I come!