Showing posts with label Teaching. Show all posts
Showing posts with label Teaching. Show all posts

Thursday, January 18, 2018

Three Year Hiatus

So, here we are again. Another multi-year lapse in updating this blog. At least this time the reason for the update isn't that I'm migrating the blog yet again. No, this time, I have things to talk about again, and I felt this blog is actually the appropriate place to do so.

So, logging back in here, I see that I never even finished editing the few draft posts I wrote over 3 years ago. They were mostly me complaining about teaching and problems I ran into and how I swore I was finally done with teaching. It just wasn't worth the effort/time, etc, etc. Yeah, that didn't happen. I ended up caving and teaching another course. THAT course (which ended December 2016 I believe) IS likely my last formal course for the foreseeable future. I'm just very jaded with all of academia at this point. I see no point in furthering my own education, and the only way to make a decent living in academia is to have a doctorate, and since I just can't get excited about any academic topics long enough to want to go down that road, I think it's time to close that door.

Will I one day change my mind and venture back into academics? Who knows. I tend to change my mind quite often. For now though, I'm happier pursuing teaching at the small scale in the form of mentoring and providing internships.

So as to what I've been doing the past 3 years (besides not teaching, and then teaching, and then not teaching again)? I've been experimenting with entrepreneurship actually. I joined a startup as a CTO, for which I discovered that I was grossly unprepared. I joined another startup which was really exciting (I was just a cog in the wheel that time, not at all anyone of importance). That gig sadly coincided with the last time I attempted to teach though. So it ended badly when the time to develop my course materials eventually overtook my life and I found I had no time to devote to the startup, and so I had to leave. I did feel that I learned some very valuable lessons from that experience though, and so I'm glad I did work there, even if it was only for a short time.

Which brings me to now. I've been working slowly on bootstrapping my own venture, which is extremely difficult. I'm struggling with balancing my family responsibilities with getting some interesting projects off the ground. I'm also employing a few interns to help out, which is allowing me to learn so much about managing people. Mostly, I really enjoy the work, that is until I have to file paperwork, or get cryptic letters from the state, and then I panic thinking I didn't fill out some stupid form correct, or that I forgot to pay some asinine tax. I could really do without all of the governmental bureaucratic non-sense to be honest, and it truly is the worst part of running a small business so far (or technically a micro business).

Well, enough about all that. I may go back into my drafts and publish some of the things I never got around to, or I may not. I haven't quite decided. Either way, hopefully, I'll be writing more often in this new year.

Tuesday, May 13, 2014

My Past Teaching Experiences

I just wrapped up teaching for spring semester, and I wanted to take a minute or 30, to reflect on what I actually learned. Now this wasn't my first semester teaching. That was actually about 10 years ago now. Wait, wow, I think I just did that math for the first time. Nothing seems that long ago until it's at least 10 years ago. Ok, enough reminding my self how old I am. So I taught my first class 10 years ago, and I did it essentially for free. I was a graduate student at the university, and already had an assistantship doing systems admin work for the department. So technically I wasn't supposed to be doing other work too, and they couldn't pay me to teach since I was already on support doing another job. So I told them, fine, can I teach for free? I don't think they knew how to respond, and it ended up causing many hassles with paperwork because some one was teaching a class that wasn't in the payroll system, etc. I remember having a hard time getting into the grading system to submit grades and what not. I didn't care. I just REALLY wanted to see what teaching was like. I just felt this need to do it, like I should be a teacher. So I did it, for free.

Well, I think at the end of every semester that I try teaching, I come to the same conclusion. I like parts of it, and hate the rest. I really enjoy working with students, and teaching them about topics they've probably never thought of before. I also enjoy getting to explore topics that interest me more deeply. For example, that first class I ever taught, it was intro to computer programming, using python. I had never used python before, but had been meaning to look into it. Let me tell you, the fastest way to learn a new programming language is to need to be able to teach it to some one else. You'd be amazed at how fast you can learn something. It probably helped that I loved programming and was an avid C/C++ fan as well as very much into PHP at the time (I say at the time because after learning python, I stopped using PHP).

So I really enjoyed those aspects of teaching. But what I quickly learned, was there were SO many things that really suck. First, no matter what class I've taught, there are always students who just don't care and don't really want to be there. That makes sense for required classes. Especially, intro to computer programming, which was required by a very wide variety of majors (anthropology, flight management, etc). So yeah, they just keep thinking they're stuck in some dumb class that only computer nerds should be in, why do THEY have to learn programming. I get it. What I was surprised by though, was the number of students who take an elective course, and still don't seem to want to be there. What I started to realize is that even though it's elective, and they selected it over other classes, is that well, it was the ONLY elective they could take. So they were basically in the same boat. They wanted to graduate, it was the only thing left, they didn't want to be there.

The other thing I found that I really, truly hated. Grading! Seriously, it is horrible. Now, I know deep down that it really just is so hard because the classes I've taught aren't black and white. I mean, I could have been hard on the students and just said, no, this submission fails to meet my minimum standards, you don't get any points. But then the class would really be pass/fail and that wouldn't be so good. So you end up TRYING to figure out how to give partial credit. Not enough students turn in 100% working things, where you just look at it, run it or whatever, and go awesome, 100%. Even the best and the brightest students (actually especially those students), seem to not READ assignments fully. They're all like, Oh i know what to do, and just do what they assume I want, and turn it in. So even though they're doing well, well they didn't meet the requirements, so you have to take points off, because you took points off of everyone else, and you have to be fair. Or you start grading, you get part way through, and you realize you need to take points off for the way some student did something, well, so did a few you already graded, so now do you go back and adjust those previous grades? Sometimes it felt like an infinite recursive process.

Oh and then there's the dumb questions. Ok, I know the famous quote, there are no such things as dumb questions. Well, you haven't sat in some of my classes. It's not so much as the question is dumb, but it was asked 3 or 4 times in a row. What happens is, some students take a nap, or play games on their devices, or look up sports scores, or troll facebook. And one student asks a question and I answer it. Then I ask, are there any other questions, which prompts one of the students not paying attention to realize they weren't paying attention and then they ask the same question that was just asked and answered. So, I answer it again. Think everyone got it that time? Nope, some one else who wasn't paying attention then asks the same question. Rinse and repeat. Finally, you get to the student who was apparently paying the least attention, asks the same question again, and at this point, all of the students who were tired of hearing the same thing, and/or thought it was a joke, start laughing.

Don't forget the limited time frame! You get this usually broad area of knowledge you're expected to impart to students, but you only get 15 weeks to do it in, and only 3-4 hours per week. That's absolutely nuts. Now, this isn't completely applicable to all courses. I'm sure many subjects get split up nicely into multiple courses and it works out nicely. But for the classes I've taught, it always seems like a struggle to cover everything. Even something as simple as intro to computer programming. Most students don't even understand simple logic. Some need help grasping the concept of solving a problem using pre-defined steps. These are all things you need a firm grasp on BEFORE you jump into writing code. There really needs to be a class before you learn to program. Like intro to logic and problem solving. You know, after like basic algebra, where they need to start thinking abstractly about solving a math equation. In logic/problem solving, you can do stuff like, use google blockly to develop steps to get out of a maze towards the end of the class, which leads in nicely to more formal intro to programming.

Then, on top of all of that, there is the massive amount of work that goes into a class. There is a reason that instructors put their classes on cruise control after teaching it so many times. It takes an enormous amount of time out side of class to develop all of the material for a class. You're either spending hours developing notes, or creating a project for everyone to do. And then you need to know how to grade the project, so often times you do the project yourself so you know what to expect as far as pitfalls the students may run into, and what to expect your students to accomplish. Then you actually have to grade it all. I swear, this semester I had 25 students. I gave them the simple assignment to edit a file and commit it to git, just to get them familiar. Do you know how long it took to grade just that? All I did, was go down the list, open the link that they posted in the grading system, look to see that they did what was asked, then go back enter a grade and move on. Sounds simple right? Took maybe a minute or two per person. Quick right? Now multiply by 25. Yeah, that was a good half hour or more just to grade the simplest assignment. By the end, grading a single assignment could take from 15 minutes to an hour per student. I was in front of the class about 3 hours a week, but I was probably working on grading or some thing for class an average of a few hours every single day. It really adds up.

That brings me to the last thing I didn't like. The pay. On paper, it seems awesome pay, especially for computer science. If you only look at the in class hours, it's significantly higher than what I get paid in industry. Then you factor in the number of REAL hours you put in, and it's barely minimum wage. For me, it's NOT worth the money. I could put in a fraction of the effort "making a website" and get paid more. It's ridiculous.

But it's not about the money really. I started this journey because I really have a drive to teach. But all of the grading and tediousness just ruined it. I think that it is glaringly obvious, that I'm just not cut out for "traditional" classroom teaching. This focus on grades detracts too much from the actual learning. I'd much rather focus my entire time with the students making sure that they all learn and come away with valuable skills, not trying to figure out what grade they should get. If a student learned everything you wanted to teach them, they move on, if they're struggling, you work more with them. Grades and "semesters" just get in the way.

Looking forward, I just don't see a future where I continue down this path. I think it's time for me to go a different way. I want to still teach, but I think I'm going to look for an alternative environment, one that avoids the distractions of grades and semesters. If all else fails, I may just look into a mentoring program. In any case, I think 10 years was a good run, even if it wasn't continuous. It's time for a change. The only question now is...What's next?

Friday, March 14, 2014

Teaching about packing binary files with a financial motivation

Ok, so I wanted to cover packing binary files with my students in Systems Programming. Why you ask? It's good for them for starters. Until you read a packed binary specification and write a packer/unpacker, I don't think you truly understand what the low level systems calls like open(), read(), and write() are capable of. Plus, I wanted to foreshadow what we will be covering when we get to networking and we cover binary network protocols.

So I knew I wanted the students to either pack or unpack some binary format, but I struggled with what to have them do. Most of the students have had very little practical programming experience, even though they're all basically either seniors in computer science or masters degree students in computer science. I know, that seems ridiculous, and it is, but that's a topic for another post. So I started looking around. I thought it'd be cool to extract exif data from a jpeg. So I started reading up on it, and saw that it wasn't trivial. It's probably something seniors and grad students SHOULD be able to handle, but I didn't want to push it. They need to walk before they can run. Then I thought, tar...tar is pretty simple and it's been around forever and it's well documented. So I looked at tar. While it isn't THAT bad, it still seemed a bit steep for their first time out.

So, I ended up developing an extremely simple file format. It's in the same vein as tar, but much much much (did I say much) simpler. Basically it starts with a 4 byte header to declare that it's the format I came up with for the class, followed by variable length records for each file. The "variable length records" start with a 2 byte short declaring the length of the filename, followed by that many bytes which is the filename. That is followed by 8 bytes representing a 64bit int, which specified the number of bytes that file is, immediately followed by the bytes for the file. The next record follows immediately after. So yeah, super simple. No support for directory structures or anything...just file names and file data. Hopefully, this won't be too difficult.

Ok, so I know I mentioned a financial motivation. Among the miscellaneous files packed into the sample I plan to give the students, is a wallet.dat file. For those of you familiar with cryptocurrency, you know what that means. For those of you who are not familiar, it is basically where the encryption keys are stored for a "wallet". Basically, if you have the wallet.dat file and it's not encrypted, then you can spend any of the coins associated with any of the account numbers in the wallet. And yes, I put some in there. Now mind you, this isn't a bitcoin wallet, this is a dogecoin wallet. So the coins in there are not quite as valuable currently, but that's not really the point. The main point is, only one person can control a wallet. The first student who finds the wallet.dat, and realizes what it is, can transfer all the coins out of it to another wallet. Any subsequent student who looks at the wallet, it'll be useless. So it's sort of an arms race. More importantly, I hope for it to show me which of my students are the most committed and determined.

Oh, and due to the awesomeness of crypto currency, if anyone reads this who has a few dogecoin to spare, you can send them to:

DHHCc6kfpMCLE4FEaSaPGCTMpbNUWRmJi8

It'll be interesting to see if one of my students actually gets the wallet out and takes the coins. I'm also debating just not telling them and see if one of them figures it out on their own. Of course, the file is just named wallet.dat and so without knowing that it is a dogecoin specific wallet, it may be complicated. But I did include a picture of a shibe...so that should be a clue right?
I'll hopefully follow up after the assignment has been submitted by everyone.