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.

Advertisements

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.

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!

Programming it Up!

Lately, I’ve been on a bit of a programming upswing. Thanks to Codecademy I’ve been able to work on my learning throughout the work day as well. Python has been on a bit of a back burner while I concentrate on the JavaScript heavy lessons featured on Codecademy, but I am all caught on lessons with nothing to do!

So, soon it will be back to Python. I’m nearly done with “Invent Your Own Computer Games with Python” and it has been a fantastic break from “Learn Python the Hard Way”. It isn’t challenging and holds your hand the whole way through, which is what I needed, a bit of baby stepping to get me through some of the tutorials. I stopped “Learn Python the Hard Way” at the point where I had to create my own game. It wasn’t that I couldn’t do what it was asking me, but that I wanted to do more. I was trying to create a control scheme for my game and wasn’t quite getting it, which is how I ended up at PyGame, which is also how I learned about “Invent Your Own Computer Games with Python” in the first place. Wow, what a cicle!

Now that I’ve been working with a different language I can also more clearly see how the structure of a program doesn’t change much from one place to another. The JavaScript I’ve been learning is only going to help enhance my understanding of Python.

There’s another great game-making tool out there called Melon.js. It is a game-making framework for JavaScript. It’s still in development, but is quickly updated with new features and bug fixes. There is also a nice Google Group where questions can be asked and are usually answered quickly at MelonJS Google Group.

Speaking of Google Groups I have joined a number of them, which has also helped me keep up with the latest goings on of various people’s projects. Living in Minnesota I joined PyMNtos, which is the Python meeting group for Minnesota. I have also joined PyGame, Django, Google App Engine, and various others. And, I’ve signed up for some fantastic email lists like Hacker News, JQuery, JavaScript Weekly, Python Weekly, PHP Master (which I’m not sure if I’m ever really going to bother to learn), Sitepoint and others.

Basically, I’ve mostly been reading. Reading, practicing and reading. What I need to do is decide on a project and a language and just have at it. I believe once I complete “Invent Your Own Computer Games with Python” I will go ahead and do just that. I have grand ambitions for a game, but will start more simply. I would like to create a simple, graphical game based on a board game. I love Boggle (so much!) so I think I’ll start by making a Boggle clone. Awesome idea dude! Oh yeah!

Fight Against SOPA and PIPA

The following is a letter I sent to my Minnesota Senators concerning SOPA and PIPA

Dear Senators Amy Klobuchar and Al Franken,

I worry about the scope of both SOPA and PIPA. I know that you have both stated that you are against SOPA, but you are both co-sponsors of PIPA. I urge you to read a couple of articles about what happens when sites are found to be infringing. It might be an eye opener and it might require you to better understand and learn about how hosting companies and DNS, Domain Name Servers, work.

The following is an article about a website named Pajiba straight from the horse’s petoot. Their website happened to be hosted on the same hard disk as an infringing website that was shut down by DHS years ago. The hard disk which contained their entire website and all of their backups of their website was confiscated because a completely unrelated website was also hosted on that server disk.

http://www.pajiba.com/miscellaneous/the-department-of-homeland-security-has-shut-us-down.php

Imagine that happening to thousands of people if SOPA or PIPA passed. Thousands, perhaps tens of thousands. We don’t know how few or how many this bill might affect, but I guarantee innocent websites will face indirect consequences of this legislation.

Also, a blog dajaz1.com was shut down for over a year for hosting infringing content when, it turns out, they hosted no infringing content.
http://www.prisonplanet.com/dhs-shut-down-blog-for-a-year-on-false-pretenses.html

They were told they could go through the motion to regain control of their website, which they did, which took them over a year to prove they’d done nothing wrong before they could be operational again.

These are just two examples of what WILL happen if PIPA gets passed. Innocent sites will accidentally be targeted, shut down, erased, dumped. The government is not a tool of any industry. Stand up and fight for honorable people. We already have bad-enough laws, the DMCA, that allows the government to take these actions against infringing websites. Don’t make it worse.

In fact, you can make it better. Instead of removing these sites without a trace why not allow thirty days, or sixty days for a website or person to prove that they are not infringing. Drastically removing innocent people’s and companies’ websites before they’ve been proven guilty is foolish and will lead to terrible consequences for the internet and website operators and maintainers.

Please reconsider your stance on this legislation and all future legislation that aims to curb piracy. It needs to be written clearly, with the help of people who understand the internet and due process, and not by lobbyists in the entertainment industry.

I appreciate your time,
Thank you,

Joseph Halvarson
Minneapolis, Minnesota

Web Design and Development

Lately, I’ve been reading a lot about web design and development. I’ve seen some fantastic website designs lately and it’s gotten me reengaged with designing and developing websites. I made a website for Seoul Players and since I pushed it live sometime in February I have been slowly combing through my awful mashup of CSS code attempting to filter out the chaff and make things cleaner and more responsive. If you look at the Seoul Player’s CSS code, you’ll see I still have a lot of work to do.

What I love about web development is that it’s a constant learning experience. Maybe some would argue about that, especially veterans of the field who didn’t have a whole lot to learn between 1998 and 2004(5)ish, but lately there has been great potential unfolding with CSS3 becoming more widely implemented and HTML5 taking form. It’s a fun time to be in development but it also raises some questions:

1. Why in the world is it taking so long to develop standards to produce a proper layout on a page? http://www.dzone.com/links/rss/the_future_of_css_layouts.html

2. Why is so much fluff being added to CSS and by way, HTML? http://designshack.co.uk/articles/css/return-of-the-loading-bar-are-css3-and-html5-the-new-flash/

3. What is wrong with Apple that they help develop HTML5 and CSS3 specs only to turn around and attempt to patent what they try to implement? Apple HTML5 patent angers W3C and W3 Consortium to Invalidate Apple’s HTML5 Patents
I don’t know the answers, it’s just quite bizarre to me.

So, my Python learning experience is a bit on hold as I attempt to clean up my various website’s code. Once I get my head wrapped around that I’ll be diving right back into learning Python. While my Python experimentation is on hold I have been studying the Python library, which will hopefully be helpful when I get back to it.

What Have I Learned?

Now that introductions are out of the way, let me get into what I have learned. In Ruby, I learned that the syntax it uses is easy to remember. However, after not working with it for three months, ask me how to say Hello World, and I can’t remember. So, easy lesson number 1 is I’d better keep practicing, or I won’t remember how to do a damn simple thing. Alright, lesson learned, keep practicing, keep working, keep trying.

Well, now I’ve moved onto Python. I’ve been following a tutorial called “Learn Python| The Hard Way” and it has been helpful. I’m up to exercise 17. It’s titled More Files and it’s currently trying to get me to learn about the import function in Python. Import allows me to import other people’s code into my script so that I don’t have to code a bunch of stuff that’s already been done. Cool. I like it. It’s overwhelming.

There’s so much going on in programming that I don’t understand how anyone can master a language. I know I’ve read that no one ever “masters” a language because it’s constantly evolving, but to become so proficient is daunting. I’m in the baby steps of remembering how to structure my Python code and to get slapped with import just seems unfair. How do people even know when something has already been done for them? I suppose you just search, but how do you even know what it is you need from the code? Right now it baffles me. I believe I’ll get it. But, it will take time.

So, onto something a little more uplifting. In each of the exercises on “Learn Python| The Hard Way,” there is an extra credit section. Although I haven’t figured out all of the extra credits, which are extra tasks that can be done but aren’t explained, I have managed to wrangle out a few. Once I finish this tutorial I hope to go back through it and nail each and everyone of these extra credits. I’ll definitely update with my success later 😉

So, Python it is. Python it will be. This feels good. This feels right. There is a strong community, an active community, and a bajillion different tutorials I have found. I plan to go through each and every one until I’m confident and capable of figuring out this friggin’ thing!