Code Academy bugs

I finally realized today that I _can_ just continue with the exercises by merely selecting the next one from the drop-down choice and not just be stuck waiting to find out why my code is supposedly ‘wrong’.  I also found out that there is a bug in that particular exercise.  Two days and suddenly realizing that my code is just fine.  Talk about screwing up new people to learning code.

So, taking this new-found knowledge with me as I go, I find this little gem of a bug.

 

So yup, moving right along.

If you are new to learning programming, you need to understand that you will be using someone else’s programming to learn programming, and it is rarely perfect.  Document the error and move on.

Having made a couple of false starts….

I decided it would be worth putting together a review of the courses that I’d like to see and get people’s feedback on.  Sure it was inspired by my recent displeasure(and subsequent quitting) of the Coursera Interactive Python course but it is by no means, intended to denigrate it.  In fact, I have not even added my own response to this questionnaire.

So please have a look at the page and let me know your thoughts on learning Python!

 

 

I have officially quit the Cousera/Rice University course

I wrote a message in the forums and added a little bit at the beginning then posted what I posted here a few days ago.

“I posted this on my blog (http://cosmopolitangeek.wordpress.com) and I’ll repost it here.  I am finding no joy in this course, I am not learning here.  I have been doing nothing but beat my head against the wall.  This course only works for those who have programming experience before, or at least recent math/logic courses from high school and/or university.”

See this link for the in-depth post on why I was not happy with the way the course was structured.

I’m going to finish the Learn Python The Hard Way course (and probably even buy the pdf/video version and do it again…yes, it’s that good I found).  I have found a few other places with tutorials.  I’ll detail them if I get into them.

My brain hurts…and it’s because of Memory

This is because of 1 part headache brought on by two parts ‘staying up till 6am to get this weeks project done’.  Don’t worry, an Ibuprofen and a good mug of cold-brewed coffee will clear that up in about 30mins :)

The idea of programming is to learn something, then build some code, learn something more, add it to previous knowledge, build better/more elabourate code and so on.  This is something I think is a good process.  And a course that can coax it’s students along with the right methods is one you will never forget.  On the flip side, one that does this but kinda skips over various things with the idea of ‘you can find it online’ really irks me.  I really feel that the progression of learning is NOT linear with the Coursea/RICE University course.  There are major gaps in my understanding of what is happening within the code we are supposed to be writing.  I am getting lots of good help from some of the students who hang out in IRC, for which I am ever grateful.

I’d like to also point that their “Workload: 7-9 hours/week” claim is utter bullshit.  I mean seriously, where do they pull that number from?

This course is designed to help students with very little or no computing background learn the basics of building simple interactive applications.

Right, so here I am, a technician who has been playing with computers for 30 years, designed websites in the early HTML days (so I have a general idea of coding….very general), had fiddled with CSS and WordPress templates and I understand how computers/networks work and yet this course has been nothing but a struggle.  From the time I woke up yesterday till the time I went to sleep, I spent nearly 16 hours on the course.  This was just insane.

I am far from someone who has “very little or no computing background” and having this much hard time?  You think that their course needs a severe overhaul on how they progress their teaching?

Sure, I’m not expecting to be spoon-fed every little piece but when you are forced to program in an environment that is mostly non-standard(meaning most Google results for problem solutions will never apply because of  many restrictions in place.).  I do understand why they use CodeSkulptor, but I feel if you are going to create an artificial environment, you need to be much more involved in the students learning.  Notice I said learning and not helping.  Sure there are many avenues of help, the forums, IRC(sadly under utilized really, people are so missing out), the minimalistic docs they have, the ‘code clinic threads’ and such but that is all reactive.  In order to ask a question, we have to be knowledgeable enough to ask how to do something, not ‘what’ should we be doing.  Also, their assumption of ‘high school’ math requirement does NOT mean ANY high school math.  You have to have that knowledge and have it as recent in at least the last 5 years!  Anything beyond that and you will have a hard time because there is a lot of math in programming.  I highly recommend going through Khan Academy‘s math lessons.  They have an awesome way to track and incrementally increase the parts you are learning.

The instructors themselves have some cool character to them.  When they do their videos, they do them well, I find that they just don’t go far enough.  In my opinion, I think the course should be doubled in length and more time spent on each part.  I am quite fortunate to have as much time to spend on this course as I do.  If I was working a full-time job, I would have dropped out last week when I stayed up to 4am one day.

Do all students have such problems?  No.  One guy from IRC did this weeks memory game assignment in 4 hours.  He spent the rest of the week tweaking it to be pretty and fancy for the hell of it.  He is also one of the best people to help others and I can’t thank him enough.  This also means that since he did it in 4 hours, he is not a beginner to programming either.

After all this, I think that they should either change the course or change the description of the target market for students.  Easier to change the description and create a second course I think.

Now, from here on out, it will get interesting.  See, this week’s project I scrapped my first version of the code I was writing.  That was two days into writing it, getting up to 171 lines of code only to find out that the exact same thing, that works with no bugs, could be done in just 39 lines!  I saw this code and sat there….stunned.  I started over, took some cues and was able to focus on the mouse_handler function(which is the crux of this code) only to find out a day later that it was completely buggered as well.  That was when another kind individual on IRC so graciously spent 7hrs chatting with me to help me get it right and by 6am it was finally done.

Do you still think that 7 – 9hrs of workload is accurate?

Let me also point something else out.  If it takes you 4 hours to learn something, the next time you use it technically take you less time to construct the same code.  So let’s say you can do it again in half the time, 2hrs.  Let us then apply this to my taking 4 days to learn/write a program.  So now I might be able to do it in 2 days.  With the idea that the course is building upon the skills we have learned what do you think will happen in a few more weeks?

  • wk 4: 4 days to program
  • wk 5: 2 days(wk 4 code) + 4 days (wk 5 code) = 6 days
  • wk 6: 2 days(wk 4 code) + 2 days (wk 5 code) + 4 days (wk 6 code) = 8 days
  • wk 7 1 day (wk 4 code, getting better) + 1 days (wk 5 code, getting better) + 3 days (wk 6 code, slight improvement) + 4 days (wk 7 code) = 9 days

Well, ran out of days in the week it seems and missed the deadline.  I didn’t even count the time to watch the lecture and do the quizzes.  This course has so far consumed my nearly every waking moment each week and I am not even close to being a ‘slow learner’.  The way the material is presented simply isn’t enough for “students with very little or no computing background”

 

 

Pong!

So, spent a grueling 4 days on this.  Cursed, swore, laughed and tempted to put my hand through the screen on more than a few occasions but I got it done.  I created a pong game a per my 4th project in our Python class.  Hell, even got a beep sound on wall and paddle bounces!  Won’t get any bonus points for it but it did seem the right thing to do.

Best way to check it out is to go here, click on the little play triangle in the too left and have fun.  Player one uses “w” and “s” write player two uses the up/down arrow keys.

I’ll post the code here but you can’t use it outside of CodeSkulptor because of some libraries it uses.

It isn’t elegant, its definitely not pretty, it doesn’t work 100% perfect in a browser due to some outside issues that I have no control over, but out works well enough to go “that was nostalgic” and never think about it again.

How does no one see these things?

Again I keep running into annoying issues with poorly worded problems or answers.

First, the simple one.

I gave up on trying to finish that last ‘practice exercise’ because it was involving some ‘quadratic equations‘.  Those words scare me.  Big equations freak me out because they are so far beyond my level of mathematical comprehension that I simply cannot fathom.  More on that in a bit.  The simple problem is that when things are not consistent, it’s a little weird.  Our project gives us some decent outlines on how to do things without obviously giving us the direct answer.  The first outline says to “Build a helper function name_to_number(name)”  Ok, that’s easy enough for me to understand and figure out.  The second in the list says Next, you should build a second helper function number_to_name(num).  This too is easy to figure out.  For each of our exercises and this project, we are given an outline that gives us even more guidance. (This is a really good idea to help beginners speed along in their process of learning a new language).  The inconsistency happened when the project template has both of those functions outlined in reverse order.  While theoretically this does not affect the outcome of the program I learned, it is still one more thing I have to question because it doe snot seem logical to have code ‘out of order’, regardless of if it affects it or not.

Second, insufficient definitions.

There are a ton of websites that will give you a definition of a piece of code and what it does.  One would expect that official code documents to give thorough, if maybe overly techie in nature.  Well, how wrong this can be.  Allow me to introduce to the random.randrange(start,stop) function.  You might be able to guess that it creates a random number for a given range, and you would be correct.  You might even guess that the ‘start’ is the first number and the ‘stop’ would be the last number.  And you would fail.  Apparently the ‘stop’ means ‘stop before this number’, or at least that was what I was told.  Me, I think it means ‘count this many numbers and then stop.’, which seems much more logical…if you are starting at 0.  Maybe not so much if your range is starting at a higher number.  So let’s see what the Official Documentation says shall we?

random.randrange(start, stop[, step])
Return a randomly selected element from range(start, stop, step). This is equivalent to choice(range(start, stop, step)), but doesn’t actually build a range object.

I left out step because I wasn’t using it for my program.  Regardless, this really doesn’t mean anything because it doesn’t really define the code, at best it references an older(?)/different way of doing the same thing.  OK, I’ll bite and look up THAT code then.

random.choice(seq)
Return a random element from the non-empty sequence seq. If seq is empty, raises IndexError.

Ok, this still doesn’t explain what the code means, let alone how to use it.

I would like to also keep in mind that this course is aimed at beginners. o_O

It really is annoying when you have to Google everything.  It’s like people are simply getting lazy.  Well guess what, if I have to Google for most of my solutions, don’t bitch if what I find and USE is not all my own code.  I’ll do my best to follow the honour code they put on each page that you have to check-mark before each submission, but until you have a proper course that gives the students all the resources they need, everything is fair game.

There is more but I won’t bother.

Now, this may sound like the worst course in the world but it really isn’t.  I happen to be only focusing on the challenges I have run into.  I didn’t mention how much I have learned BECAUSE of these challenges.  There are 9 practice exercises, of which only 3 gave me headaches like what I have outlined above.  The rest I was able to  figure out and move on to the next one fairly quickly.  Heck, last week I even wrote a little program to help me figure out some things in this goofy little game I am playing on my Galaxy Tab.  Sure it was not much more than a coded spreadsheet but it was my first real stand alone program that I may expand upon to give it more functions as I learn more.

For those that play Galaxy Empire on their Android (or iOS) device, here’s what I got so far.  The rest of you can stop reading…unless you like looking at a whack of lines of code :)

http://bpaste.net/show/SCEawXIgk4BKJnCZ5mW2/

Learning completely new things

I am usually quite good at picking up new things.  Mostly because everything ‘new’ I see is usually related to something else I already know, thus I am merely extending something known with a method that is/was utilized by something else in my life and I am simply applying it in a new way.  When it comes to learning something that is absolutely foreign, this gets much harder to do.  Mind-state, level of difficulty, level of foreignness, previously relatable knowledge and enthusiasm all plays varying roles in how well something is accomplished.

Tonight I ran into some code learning that I just could not grasp (I’m sure this will happen frequently for about a year I suspect…).  I finally gave in just staring at the online exercises and asked on the IRC channel.  Those guys there are pretty damn awesome.  Most are well aware that I am learning and simple do not give me the answer.  They try to guide me to the right answers after checking the exercises.  Most have either gone through them or are well aware of the website that I use (http://learnpythonthehardway.org).

They tried to give me some directions, some prods, one guy asked if I had learned a certain function yet (I hadn’t) and another suggested a function that is in a newer version of Python which I couldn’t use.  One guy wrote out some code that mostly filled in the blanks, it was an almost complete answer (he was mildly chided for doing so and he will be more reserved next time and I am fine with that, so was he).  It helped me get thinking in the right direction but was not complete.

Another guy sent me a pm (private message) with the exact answer.  Once I saw it, then I completely understood.  I lean best by examples and following those examples.  I was close but needed to add in a bit of knowledge from a completely different exercise.  Sure I didn’t figure it out on my own but once I saw, I really understood the function.  To me, that is just as valid learning as figuring it out on my own.  If I just took it, did it and ignored, then sure…it would a form of cheating.  Yet since that did not happen and I ‘got it’, it’s completely valid :)

I can’t stress enough how awesome the #python channel users are and how helpful they have been so far.  I’m pretty sure it’ll be a new online home for me :)

 

So far so good?

So I’m at exercise 16 (of 32) so far and seem to be slowing down as the exercises get a little more complex.  I still have a hard time just ‘doing things’ because I am still not knowledgeable enough to automatically know how to start.  It’s still a bit confusing to ‘just do X’ when you fully haven’t grasped it…or even mostly grasped this concept of ‘x’.

Still, it is good to have an active IRC channel to ask for guidance.  Sometimes they get easily confused when I ask about things that just ‘isn’t done’ in the real world but is important for beginners to learn because of where it is used and the understanding of what it is you are doing.  Think of it as learning to drive.  Sure your instructor told you to make sure your hands are in the 10 o’clock and 2 o’clock position on the steering wheel but when you get into the real world, you got one hand on the gear shift and on one the wheel.  Or one on the wheel and the other hanging out the window.

When I first started to learn to drive, my lessons where in the winter time.  I found my winter coat to be extremely limiting in my movements for controlling the car and such.  Now, it’s no big deal.  Eventually I’ll find these exercises no big deal….till then…it’s uncomfortable and that is where the learning happens.

 

New Endeavours

While I have been playing with technology longer than more kiddies have been around, there are things I still don’t know/never got into.  This includes programming.  Sure, HTML is a type of programming but not in the sense that most current people think when they hear the word.  To this end, I have decided to take up programming.  One of the biggest questions that people like us have is ‘where do I start?’.  Do I start with C++, Python, Java or how about LegoScript(yes, there is such a thing)??

I recall reading somewhere that it really doesn’t matter where you start, so as you start.  I did a cursory search and decided upon Python.   It seemed a reasonable language to learn, nothing to hectic or exotic as far as terms and phrases that are used to both describe and utilized it.

I am currently on my 3rd attempt to learn it.  Why do I say 3rd, well because besides on deciding what to learn, how is just as important.  After a few failed attempts, I am currently following Learn Python The Hard Way website.  Sure python.org has some tutorials, I even found some free PDF’s from O’Reilly Books but so far, this current website is working for me.  Heck, as far as I’m concerned, I have already learned more and better in the last 4 hours than I did in two days with the free books.  Here is a simply program that I wrote, my first :)

# Let's calculate how long it would take for me to get to 10,000 of programming

# represents total # of hours needed
master = 10000

# represents # of hours in a day of study
day = 24
awake = 12
forced = 4
personal = 2

# calculate # of days
mastery = master/day
practical_mastery = master/awake
forced_study = master/forced
interested = master/personal# print results
print "They say that to become a master it takes",master,"hours."
print "Mastery with no sleep would take",mastery,"days with no sleep."
print "Hard Practical Mastery would take",practical_mastery,"days at",awake,"hrs of study per day."
print "Real world, forced study Mastery would take",forced_study,"days at",forced,"hrs of study per day."
print "Personal interest study Mastery would take",interested,"days at",personal,"hrs of study per day."