Personal: On learning to be healthy again.

It’s been a while, hackers.

Depression is a sneaky little bastard. At some point during the last two years–I’m not sure when–my antidepressant stopped working. Yes, that can happen. This spring, I had to sacrifice my classes to work on treating my mental health and finding a medication that works. Again.

Of course, I didn’t realize immediately that it had stopped working. After all, I’d been on the same one for three years. I just thought I needed a higher dose of what I was already on, because the winter weather was getting to me and seasonal affective disorder is like that grumpy aunt who always visits around Christmas and never has anything good to say about you.

I eventually had an epiphany: there wasn’t actually anything very stressful about the situation I was in, and there wasn’t anything wrong with me personally. I realized that the medication had actually stopped working somewhere along the line and I’d started running to keep up with what I assumed were more stressful external circumstances, and then berating myself for being unable to keep up with them. To be fair, I had been dealing with some nasty drama with the community college, then I was looking for a transfer university, then I was moving, then I was adjusting to having moved away from my family. It wasn’t an unreasonable assumption.

But the depression hung around, because somewhere in this mess I stopped getting the chemicals that I (and every human being on the planet, whether they buy store-bought like I do or their brain is capable of producing its own) rely on to have a functional brain.

It is not normal to get anxiety attacks when approaching assignments or going to class. It is not normal to lack the mental focus required to study. It is not normal to lack the physical energy required to leave your house more than once a week. It is not normal to struggle to eat a decent meal every day because you’re not at all hungry and forgot to eat. It is not normal to think, “I need to do this thing, I want to do this thing, I have the energy and ability to do this thing” and lack the executive function to actually get up and do it.

It is not normal for someone who normally has a programmer’s memory–you know, the kind of person who doesn’t use grocery lists–to forget most of what they did that day. Did I do this today or yesterday or the day before–or not at all? (Maybe I just thought really hard about it.) Have I taken my medication today? Have I eaten? When did I shower? What day of the week is it?

That’s not normal. See a doctor.

When I finally started trying new meds, I thought I knew the drill: you try one for 6-8 weeks, and it may work or it may not.

I was mistaken in a few different ways; the good news was that as long as I was trying new SSRIs, the trial period could be cut down to 4 weeks because when you go from one SSRI to another, the new one starts working faster. The bad news is that “working” and “not working” are not the only options. There’s also “backfiring.”

That was what happened with the first new medication I tried. I can’t remember if I actually got the flu during that month (depression memory is very foggy), but for several weeks I felt like I had it all the same. I barely had the energy–the physical energy–to stand, let alone go to class.

Fortunately, the next one actually worked. I was pleasantly surprised; I had been expecting to go through four or five duds. Not only did it work, I started feeling better in about a week. That’s what I’m taking now.

I’ve taken a retroactive medical withdrawal on all my classes (I’ll skip over the running around and bureaucracy and piles of paperwork I had to get through to get that done) and now I have actual energy and am making stuff and doing things again.

I had completely forgotten what being creative and energetic and functional was like. For a while, it was so different that I sort of didn’t trust my brain about it. I was expecting some kind of crash.

I’d been down for so long I’d forgotten what normal was, and coming back to normal confused me. Can I actually run on 8 hours of sleep instead of 12? Since when do I have the energy to do things all day instead of having to choose a maximum of three tasks to cross off my list? I was worried I was hypomanic.

 

It’s funny, because I do have a therapist through the school. I don’t really need her because I don’t have the kind of shame and unhealthy thought processes that plague a lot of people, mentally ill or not–and this is what a therapist works with patients on changing–and my depression happens to be purely chemical and genetic. (Though her services are free to me, and she was helpful in getting the mountain of paperwork to pass the office.) She’s off for the summer and I actually needed her more to help cope with being healthy than I needed her help to cope with being depressed.

You know, for a while I wondered if someone like me should not be trying to found a company. I’ve never really discussed that in previous blog posts, I know a few of you were probably thinking it, and I know some people on the Internet are like “I would never hire someone with mental illness in a startup.” But the thing about that is… founders end up with mental illness all the time. Depression, anxiety, bipolar, OCD, eating disorders… the stress of starting a company plays a big role in either developing or bringing to the surface all kinds of mental illnesses. You may not hear about it, but if you read enough books (not articles, books) in the industry, then you’ll run into this. (In particular I want to recommend this one. Not an affiliate link.) The difference is that I know what mine is, I’m aware of it, I know how to treat it, I even know what it looks like when treatment fails. This is not a defect. This is an edge.

Finally.

I’m doing stuff again, and I have several projects I’m working on now. I attended TechWeek in Chicago (I’ll be writing about it but spoiler alert: not worth it). I’ve also started learning React. And right now, I’m pretty stoked about the fact that I now have the funds to build my desktop computer. Yeah, you heard that right. I’m gonna tag the posts “box project”. Keep an eye out for it.

Let’s go make stuff.

Advertisements

Data Structures: a rant

(If you’re curious, the textbook from this class–and the source of the explanatory links I’m using in this post–is available online free here: http://interactivepython.org/runestone/static/pythonds/index.html)

– – –

I just got out of another Data Structures class. I zoned out halfway through, which is somewhat unusual for me. Happens more often in Data Structures, because the class starts at 8AM. (Fortunately, I think I found a less winding route to cut down on my time walking to class–hopefully the shortcut will make me less prone to lateness. I am not a morning person. I tend to dream about waking up and going to class. I’ve even slept through the 10AM labs, which is ridiculous and frustrating–but also kind of understandable, because they’re on the day after the 8AM class, and my brain is trying to get rid of its sleep debt.)

But that’s not really why I started tuning out the professor’s lecture today. It was the result of another impractical implementation on the projector, at which point a thought struck me:

If these data structures are so useful, why aren’t they part of the language already?

Python (which is what we’re using, 3.5 at that) is not a dinosaur, and most of the math for these data structures was done like fifty years ago. I’d understand if the point was to get C to be more efficient, but most people don’t even code in C any more. It’s not the right tool for very many of the jobs we have to do.

In fact, this class seems closer to a language design course than something practical to software development. I know that’s the point of the high-flown “computer science” department, but… come on. Even interviewers are getting the idea that this kind of question doesn’t matter that much in the real world. It seems more to me like something to be learned on the fly, when needed. Which in practice would probably just mean memorizing Cracking the Coding Interview because you need a job.

Why does this theory class have to be so… theoretical?

I wish the teacher would spend some time telling us when to use these structures, rather than just what they are and how they’re implemented. Otherwise I think this course may do more harm than good.

Why in the world would you ever use a singly-linked list? Most languages–and especially the ones most commonly in use–have array or list structures of their own, which are 1) optimized for you, 2) don’t require extra code, 3) have been tested far more thoroughly than your code ever will be and are thus more stable and predictable, and 4) don’t confuse the hell out of other people who come in and read your program!

Why in the world would you bother implementing a doubly-linked list either, unless you’re coding a programming language of your own?! None of this makes sense! We have a dedicated class for language design! We have a dedicated class for C programming! Why isn’t it in there instead?!

Ahem. *deep breath*

Hash tables are kind of cool, and so are binary heaps (although they’re less practical). My affection for their clever hackitude is rather stifled by the suspicion that, again, they’d probably be built-in structures if they were that useful. Like Python dicts–those are hash tables behind the scenes. Use those. Everyone knows what they are and you don’t have to code them yourself.

If you’re working with large amounts of data, hash tables and binary heaps could be useful. But the professor doesn’t talk about when, just how to use them. If you’re not working with big data, chances are you just need a dict or list, and can spare yourself and others the experience of trying to interpret your weird code later.

But the professor doesn’t talk about that kind of thing. I wonder if he’s getting homework assignments that use this stuff unnecessarily. He hasn’t been taking points off mine because my work still does what the spec asks for, as clearly/briefly/user-friendly-ly as possible. I haven’t been looking for ways one might use weird data structures in the assignments, so I don’t know if they’re designed to invite us to use them or what.

He also covered recursion, which I think is very useful–again, if you know when to use it, which depends both on the problem you’re solving and the language you’re using. I will casually use recursion to make my code cleaner-looking even if it isn’t always the most efficient option (in Python). But that’s for readability. Mostly I use it when I’m getting user input, and I stick the prompt in its own method and loop if I get bad input. That lets me put all the lengthy, messy error-checking off somewhere and the main program will get back a good value.

I think this practice is supposed to be kind of evil according to functional programming, because user input functions aren’t pure functions? Or maybe, because I’ve sectioned them off and make sure they return good values, they’re exactly what you’re supposed to do in functional programming. Don’t know yet. It works, anyway.

I still use “else:” almost exclusively for “Can’t Happen” errors. It saves me headaches when I screw up the recursion. That’s a minor change with using recursion, but it’s an issue only while writing; I’ll put in extra effort when I’m writing the program to make sure it’s easier to read later.

What I will not do is write code whose purpose is to make me look or feel clever for writing it a certain way. That’s insane. Sacrificing readability, even efficiency because you think it’s cooler to use some homebrew data structure code rather than a freaking built-in Python list? That’s absolutely insane.

When interviewers select for people who know how to do this, I wonder if they realize they may be selecting for a subset which includes the actual worst candidates: the smug “Of course I know everything, if you lesser mortals don’t, that’s your problem, Google it, and also I have very strong opinions about i++ vs. ++i and will totally correct you if you’re wrong.” Fools and incompetents may eventually learn. This person doesn’t think they have to.

(Of course, sometimes a person like that is useful to look impressive in customer meetings, but in my admittedly limited experience, they’re just as likely to insult your customers as to impress them. Ever seen a bunch of startups pitch? Some of those folks need an attitude adjustment. Of course, they’re going to fail; it’s hard to have enough empathy with customers to produce a good product if you have such scorn and disdain for their intelligence. Then they’ll claim they went under because they “failed to pivot.”)

Oh, one more thing. Big-O notation is pretty useful. Even if your main use for it is understanding what other people are talking about, and/or making yourself look impressive. It’s so you can find out which of two algorithms is more efficient, which will probably be something you’ll need to do eventually. It looks way more complicated than it is.

I could very well be wrong about this, and I’d be pleased to find out if I were. I’d love to find something that’d make me a better programmer. I’d be terribly pleased to find out I wasn’t learning something nearly useless. But I don’t think that’s the case.

The CS math course I have (enigmatically titled “Discrete Structures”… I have yet to find out why, unless the reason is “because it sounds fancy”) seems a little more practical at least. Logical thinking comes pretty naturally to me, but I know it doesn’t to everyone, so it makes sense to cover it. I know there’s also set theory, graph theory, and combinatorics later on in the course, and I’ve heard those are good things to know for programming. I guess I’ll find out.

Oddly enough, it’s my English course that’s the most practical. The professor decided to forego the traditional giant clunky writing textbook and told us to order this list of like eight different short story collections, which we read and then write and talk about. That takes up about half our class periods. The other half (each day is dedicated to one or the other) is the professor talking about writing: elements of stories in general that are important (like what the stakes are–is war at risk, for instance?), writing style (like sentence structure, word choice, voice, POV), what it means to have universal appeal, what it means to capture an audience and how to get their attention–and especially the skills of critical thinking and backing up your claims.

This format is a little odd for a class called “College Writing and Research”–but it isn’t bad. I think it’s more effective than the normal route. No writer I know learned writing out of a big clunky textbook, or by doing essays on symbolism in Dickens or whether school uniforms are a good idea.

Since CS folks often point and laugh at the liberal arts, saying their study is useless bull and all those English majors should be studying something useful and practical (like computer science of course), well… I have an uncomfortable piece of news.

Not that I’m saying majoring in English is more likely to get you a job (although it’s better off than, say, Gender Studies). But knowing how to write effectively, which my English class will teach you, is far more practical than knowing how to invert a binary tree.

Sorry, prof.

Please read the comments.

There’s a new site I’m excited about

Hashnode – An open, friendly and conversational community for software developers

Remember when Atwood and Spolsky were developing StackOverflow, and their informal pitch was, “We’re like Experts Exchange, but without the evil”?

Hashnode is like StackOverflow, but without the evil.

Don’t get me wrong–SO is still a powerful resource, especially if you’re after something fairly simple and the question has already been asked. But the community is so huge that the moderators–who are supposed to be a result of Atwood’s valiant attempt at designing a system for the community to govern itself–have become Julius Caesar… and the system kind of needs a Brutus. If you know what I mean.

Basically, what I’m saying is: SO is a great resource, but not a great community any more.

Anyway, Hashnode looks to be more casual. It’s still a smallish community, or at least it feels small, and it looks like there isn’t so much policing.

I think SO’s problems are mostly just a result of its bigness, and also the fact that employers want to see a StackOverflow account on a dev’s resume, with as many points as possible. A tool meant for collaboration has become the subject of competition.

The solution to the bigness is the breakup of SO’s monopoly. I think there are several other sites cropping up to take its place, or at least take the load off; if you look in the comments on that article (which is where I found Hashnode), there appear to be a few different options that hopefully aren’t so dictatorial.

I suggest you join one, if you don’t belong to a forum or something already. Dream In Code is okay, if I remember right, but there was something about it that made me not stick around. Don’t remember what it was. Probably my own inexperience and inability to contribute; it was a while ago.

I don’t think Hashnode has that problem. They’re making a point of trying to welcome beginners. Anyway, you might want to check it out.

Happy hacking!

Greetings from University Town #214

Soooo.

Stuff I’ve done in the past two weeks.

  1. Moved. For the first time in my life; my parents have occupied the same house for longer than I’ve been alive, so I’d never moved before. That was my first time driving that long on the interstate, and I had a cat, a guitar, a ukulele, a younger brother, and a bunch of assorted stuff in the car with me. And people were being idiots on the road, changing their speed way more than was necessary, whipping around and doing stupid stuff. It was not a pleasant drive.
  2. Jacked up my foot. Sorry, feet. I wasn’t aware you could pull muscles in your feet??? But I think I did??? And I got a huge blister between my toes, and wow, yeah, no.
  3. Hauled loads of books, three fishtanks (two of them are small though), a heavy oak desk, a couch, a mattress, an armchair, most of my clothes, a working kitchen, and a whole bunch of other stuff into my apartment. My second-floor apartment. In a building with no elevator. I’m still missing a load of books.
  4. Signed a bunch of paperwork. Mom paid my tuition. I need to get off my butt and find the info I need to sign up for a parking pass for school.
  5. Discovered that I don’t have a dishwasher as I thought I did, but I do have a garbage disposal, which I thought I wouldn’t. This is a highly favorable tradeoff because of how much I cook.
  6. Cooked way more than usual because I do not own a microwave. This is turning out to be good for me, I think. I’m living mostly off of curry rice and stir fried whatever. I haven’t gotten tired of it yet. I did make sugar cookies and shared with my neighbors, though. Also a pease pie, although that’s a weird British thing done according to a recipe I made up inspired by a Terry Pratchett book, so I kept it to myself. It turned out saltier than I would have liked, but tasty all the same.
  7. Mostly re-set up my fishtanks. I still have a bucket of aquarium plants next to me.
  8. Worked on the YPN app. Did I mention that’s open source now??? You can contribute to it! Or just tell me how awful my code is! I know there’s crap in there I will very much hate in a year. Or a few months. Whatever.
  9. Read Lean In. I own both a GitHub account and bras, so it’s been heavily suggested to me for several years that I should read it. Despite the criticisms (and expecting them to be right), I read the book. It rather surprised me. I have a post under construction about it, but feminism is not one of my favorite topics to write about, and I find it hard to write about it in any sort of way I’m satisfied with.
  10. Discovered the cartoon Teen Titans Go! I watch easily more kids’ cartoons than any other kind of television. (British TV is up there.) It’s really funny and kind of brain dead, and that is all I ask of such things.
  11. The apartment smelled weird when I got here (I think they all do?), so I went all stereotypical middle class white girl on it with Bath and Body Works wall plugins and an assortment of scented candles. (I do like candles though.)
  12. Settled my cat in. He took the move pretty well; the biggest thing for him was the people who walk past our door, but he’s mostly gotten over that now. He still gives me the evil eye when it looks like I’m going to leave.
  13. Discovered the best Hy-Vee ever. It’s like a Whole Foods and a Schnuck’s in one building, but it’s a Hy-Vee. I bought some interesting food there to experiment. They had the Indian sauces I’d come for, but they also had legit, decent-quality ramen with no MSG, and some chicken apple sausages, and imitation crab meat (which means it’s mostly pollock, but it’s still tasty). The only things I left without that I wanted were lemongrass paste, which they were sold out of, and snack cakes, because they only sold one kind I didn’t like.
  14. Caught some kind of stupid virus that’s making me dizzy and faint and fuzzy-headed. My parents have caught it too, I think the stress weakened our immune systems. I can’t get work done in this state and it’s driving me mad.
  15. Despite that, watched a steady increase in the stability of my mental state. There was a lot of stress and anxiety floating around before the move, and we were all kind of feeding off each other. Let’s say–my tendency toward depression has a huge genetic component, and I’m glad Mom was there because even though she was pretty stressed out, she’s kind of always stressed out in one way or another and handles herself better than the rest of us. She knows when I’m having an anxiety attack, she knows what to say to make my dad stop being crazy and trying to move huge furniture by himself without even clearing a path first, she knows what will make my little brother feel better about Bekah moving away. Then she feels guilty for the fact that she can’t help us move stuff because of medical reasons, we all tell her that is stupid, she laughs and feels guilty anyway that she’s “not doing anything.”

Most of that was two weeks ago. We all survived.

The YPN app I’ve been working on is chugging along. Here, I’ll make a few screenshots to show you.

Screen Shot 2016-08-13 at 7.14.34 PM
Menu page
Screen Shot 2016-08-13 at 7.14.44 PM
Member discounts page
Screen Shot 2016-08-13 at 7.14.47 PM
Newsletter articles page
Screen Shot 2016-08-13 at 7.14.41 PM
Event calendar page
Screen Shot 2016-08-13 at 7.14.51 PM
About Us page

It looks kinda funny because it’s meant for a phone screen. It resizes just fine, I just forgot to resize the window for the screenshots.

Anyway, I’m the one who coded all this. Some other folks said they wanted to help over the summer, but they’ve forgotten, flaked out, or had Life intervene. (I know the feeling.)

Currently, my battle is with Kivy’s RecycleView: supposed to be a way to make scrolling lists of items using the MVC pattern. Obviously I need this for the discounts and newsletter pages. The problem is that RecycleView is a new and not well documented feature, and doesn’t actually even import properly yet, I assume unless you’re using the bleeding-edge dev version of Kivy. But that’s not for using–it’s too unstable for production use. So maybe I’ll have to use the deprecated (yes, deprecated even before the new one is out) ListView and ScrollView features. I know I’ve gotten those to work once before; I have old code to work from.

I really should merge back the mockups branch, now that I’m working on this. Note to self. I guess I still need to mock up the Search page, but I don’t even know if Kivy has features for that yet?

Also, I want to make it more obvious what page you’re on while you’re using the app. I think it’ll be a header in place of the search bar, in the normal page headers. That’ll be some goofy inheritance stuff to work with, though; I have the header as its own custom widget.

If you don’t know Kivy, the past three paragraphs may be incomprehensible. Sorry about that.

Anyway, the YPN people have no clue what I’ve been doing. I need to send them screenshots or something so they’re not afraid I’ve abandoned the project, too. Someone’s got to follow through on this thing.

I need a nap.

Back to crazy

It’s been a while, folks. I’ve had a long post drafted up for about a month, and several times I’ve gone back to write on it, and then abandoned it for another week or two telling myself I’ll come back to it. Well, I don’t think it’s ever going to be finished, so I’m scrapping it and giving you the gist.

What’s been happening?

I’m out of school, obviously.

I left community college in late May. I didn’t graduate. I’m two classes away from the degree, but I’ve decided not to pump any more money into these jerks’ pockets–the program is a real ripoff. Still carefully not naming the school.

Why’d you quit so close to the degree?

Community college is not a good option for programmers. It’s too hard to find people with all the qualifications to teach at community college–unless they’re either flipping insane, like my favorite professor, or so inept (technically and/or socially) they can’t hold down any other job in the field. And when I say socially inept, I don’t mean, “oh haha he forgot to shower and wears weird Hawaiian shirts all the time”–I mean he does stuff like say to the only girl in the class, “You want to start a business? Like what, a scarf knitting business?”–when she’s studying programming. (He threw some patronizing little remark like that at me every day. I could have written one of those calendars.)

You don’t want to end up with one of those.

The ones who don’t know what they’re doing technically aren’t always a whole lot better. The school is running out of teachers–they overwork their best people (the “insane” teachers who are there because they like teaching or something) and everyone else seems to be fleeing the place like a filthy cat who hears the bath running. Last semester they hired this networking teacher to teach web programming like, “oh she used to run this business’s… well, everything, and she made sites for bands and stuff, let’s just stick her in front of this class.” But she wasn’t a programmer. She was a networker. This wasn’t her specialty.

Then they gave her the worst textbook ever–horrible technical design choices, no sense of code beauty, and no sense of how to write a textbook either (poorly organized, puts crucial details in easily-overlooked sidebars, poorly explained instructions, that kind of thing). The code ran, but it made my skin crawl. It did something to my brain. Two pages of instructions would take hours to complete because I’d stare at the book, stare at the screen, stare at my fish, stare at the book again, stare out the window, stare at the screen, come to my senses and try to parse the instructions, get a headache because of the weird grammar or terminology or whatever it was this time, give up, stand up, and go get some food or refill my drink. Then I’d come back and repeat the process.

This is not an efficient algorithm to follow. [citation needed]

The problem was that I was expecting to understand the book, because–here’s the kicker–I already know how to do everything it was asking. I just couldn’t figure out what it was asking without serious effort. It was like a customer with bad requirements, or Jeopardy! questions that are designed to be tough to parse even if they’re not tough to answer.

But–the other problem was that I learned good design, from an O’Reilly book, on my own, years ago. So, invariably, the way I would approach the problem posed was always different from the book’s. The book always had some weird complicated thing it wanted to do, and once I figured it out each time, I thought, “This would be near impossible to document.” Obviously–they couldn’t produce clear instructions on what they wanted you to code, which is basically documentation in a different shape.

The teacher had no clue what was wrong with the book. This was what she’d learned from, and look, it runs. None of the other students are having problems like this with the book, so why are you?

Because I know basically what good code design looks like, and it’s extremely stressful to do it this far wrong. I make TONS of stupid design mistakes myself, but those are mine and nobody’s saying they’re some kind of standard–I don’t want someone else’s forced on me and proclaimed correct. The other students just think they themselves are stupid and can’t learn this thing everyone else is saying is easy. They think it’s the problems that are hard. It’s not. You’re just not being taught well.

Because reading the book doesn’t help. After the first few weeks, I stopped reading the chapter and just skipped to the projects we had to turn in. I relied on W3Schools rather than the chunk of expensive firewood assigned to me. (Actually it was a rental textbook–I had some foresight).

Oh, and because I’m spending half my time traveling and the other half managing a full load of classes. Because this is insane, and my depression is acting up, and I have three other classes which aren’t going a whole lot better because I’m spending all my time trying to catch up in this one.

This teacher made me attempt to explain this to her at 8AM, crying, because she was giving me blowback about dropping her class. She also wasn’t listening to a thing I said, because she made me repeat answers to the same questions. She kept trying to persuade me that dropping (as, by then, a third of the class had) was a mistake.

In retrospect? Still glad I did.

This shit is typical of this school. Something like this happened every semester, if I remember right–I’ve repressed big chunks of it. Depression is weird, it screws royally with your memory, and I can’t even pull up what classes I took each term off the top of my head.

Seriously? Every semester?

I’m tryna think–first semester, that was the sexist pig teacher… second semester I remember I was taking C# because that was what I was procrastinating working on when I was writing one of my early blog posts here. What else was I taking? I think I had a Linux class the latter eight weeks… time to go look it up.

Oh! Yeah! Second semester I tried to take the same web dev class as ranted about above, but it was online from a different teacher, and he went completely off the grid. Wouldn’t answer phone calls, emails, posts on the class web site, anything. Gave us links to malware-laden downloads for programs for class, too–not illegal stuff or anything, it was FileZilla we needed, and that can be gotten easily from the project site, which is a clean download.

Third was the Raspberry Pi project, which is kind of unofficially cancelled. I got to a certain point and then said, “okay, next step is we hook up the Pis to the Internet, how do you want to do that? here are three ways” and all of them were vetoed. Can’t put them on public WiFi because it’s insecure and also really weird to program and thus weird to document–not a good option, didn’t even ask. Can’t put them on the tablet network, the password is super secret and entrusted only to certain individuals… who can’t program Linux, so can’t program it into the Pi image. Can’t build a new network branch that’s connected to the Internet because it’s “too expensive,” whatever that means. And my networking guy who was supposed to be working with me cut out on the project after an evening of hovering over my shoulder while I set up an Apache server. Which also isn’t a good permanent option, because trusting the school with managing its own server is like handing a ten-year-old boy a baby to look after for the day. And he’s an only child.

They also handed me piles of paperwork, because this was supposed to be an honors project (I didn’t want to make it an honors thing, but I let it happen against my better judgement), and the paperwork was supposed to keep me “on track”–writing timelines and crap like that. You know the sort of thing.

I still feel like I should leave documentation or something for the project in case someone sane wants to pick it up–after all, they bought the RPis–but you can’t support a project halfway and then stop. I don’t owe them anything. The coding wasn’t that complicated–they can figure it out if they want to pick this up again. Anyway, that’s what happened with Raspberry Signage. Their digital bulletin boards still suck, and they’ll most likely have to pay someone through the nose to fix the system when it finally breaks for good.

Fourth semester was the nonsense detailed above.

So what happened finally?

I dropped two of my last four classes. I kept the other two because they were things I wanted to learn, and my favorite professor was teaching them. One was Mobile App Development, and the other was Server Side Scripting, which I was horribly behind in because I’d been focusing entirely on the web dev thing.

So much so that in the last weekend before the end of term, I had exactly 2 out of 14 of the assignments done, and they were pretty much the only thing we were graded on.

This resulted in a caffeinated haze of learning PHP over the course of four days. Oddly enough, I didn’t mind it anywhere near as much as I did the web dev thing. Hard problems aren’t so much an issue for me; it’s wrong problems I don’t like. It was grueling work and PHP is kind of weird, but I did about twelve weeks’ worth of work in four days and got a C in the end. …At least that’s what my professor implied. I should go check.

…Nope, their server’s down. Something with the programming, it’s not just down down. Geniuses. I am not making this up.

wow they suck

And they didn’t even make an error page like the config file wants, so their users get this ugly generated crap. My burning desire to see what they think of my PHP skills just kinda fizzled out anyway.

Oh, they’re back up. Ten minutes later.

…Nope, down again. I give. Where was I? Oh, yeah.

So, I passed my two remaining classes (presumably). The other class was the mobile app dev thing. I’ve volunteered to work on the production project we were working with, because the amount of development we’ve (…I’ve) done on the project is at that weird stage where if the next class were to pick it up, it’d be kind of weird and difficult because I used Kivy to help with time constraints, and at this point the design is basically finished and we were starting construction. But the blueprints are kinda hard to pick up. I need to finish the mockups and publish documentation on the customer requirements and design, and program in some functionality if I can–then it’d be a project someone else could pick up. There’s a real person waiting for an app. Actually, it’s a whole organization. They aren’t paying us, but we’ve (our teacher has…) promised to make this thing, so we should keep our word. And by we, I mean me, and one other guy who hasn’t showed up doing anything yet. Dunno what he’s doing, if anything.

The project didn’t make much progress while the class was running. None of us were too hot on the mobile app thing in the first place–the textbook was another dud, it was too outdated to be useful–so we already weren’t too confident. Then the prof is trying to be as hands-off as he can, which is admirable but nobody’s taking responsibility for the project, we don’t know the tech, and we have to code for two platforms, one of which we’ve never touched. So I pop up with Kivy. It’s cross-platform, it uses Python (which is easier to program than Java or Objective-C), and I already know roughly how to use it. I know introducing a new technology to base the project on means taking over responsibility for like the whole thing, but what else was I supposed to do? So, fine. I took responsibility for half a dozen coders.

Then I found out only one of them knows what git is, and most of them don’t have Python installed because they’re running Windows.

So I pull together a big documentation post–you can find it in the archives a few posts back. Instructions on how to set up a dev machine and resources for using the technology that weren’t cost-prohibitive–which, I might say, is more than the option of not using Kivy offered.

Still couldn’t manage to get things set up. I kept asking if people were having problems, so we could work them out. Nooo, we’re fine. Then–Why aren’t we working? The machine won’t set up! I don’t understand git! I don’t have time to look at the tutorials you linked!

Fine.

So we’re here. I’ll try to make something worth learning the codebase to pick up.

So where have you been?

I took a month off of coding. I picked up my ukulele. I watched some anime. I went on a couple dates with my boyfriend. I hunted for apartment furniture. I did paperwork for the school I’m going to this fall (a real school this time). I played some of my Steam games.

Right after the PHP thing and the semester ended, I had a long weekend at my older brother’s house in Chicago. We’re usually pretty laid-back when we visit there. We hang out together, play D&D, cook and eat good food, do a little shopping.

But my brain was still set on programming. It was like when you fall asleep reading Shakespeare and wake up thinking in iambic pentameter. (Anybody else? No? Anyway.) I brought Clojure for the Brave and True and kept trying to set up Emacs. I had gone crazy. It kind of felt good. Fortunately, Emacs was throwing a fit (looked like something with their network?) and I soon gave it up and rested.

I think it’s about time to return to the crazy. I have other stuff that needs to be done–there’s a math placement test I’m not looking forward to, for instance, but I should take it sooner rather than later so I can retake it if I’m not happy with the score. (You can retake it. It’s almost like this school is actively trying not to rip me off.)

But I do intend to keep my word and do some work on the mobile app. I’m working for free, so I’m choosing when to work, but I’m going to at LEAST get the documentation up on the GitHub repository. Then it can be forked and worked on at others’ leisure. (Yes, we got permission from the customer to use GitHub.)

I also kind of want to write a forum, and try to structure it to welcome nice people and discourage jerks, à la Jeff Atwood‘s various advice. I don’t know if that’s ultimately going to happen this summer though. We’ll see.

And I still want to learn Clojure. I also have a used copy of K&R C on my desk right now (a surprisingly small book!), but it’s going to wait a while before I get to it.

So what’s up with the new school?

I’m going to University of Northern Iowa. I feel comfortable saying that because the school has a fantastic reputation–I’ve heard dozens of people say great things about it, and nothing negative. That’s crazy. My old school couldn’t get that if they bribed the whole town.

I’m going part time to start off with, to see how difficult the classes are. I have this nasty habit of taking on more work than I can handle. I get excited about things, forget to say no, don’t know my limits too well (haha), and end up doing stuff like learning a programming language in a weekend and flushing the caffeine out of my system for the next week.

I have an apartment, which I’m moving into in August, and I have all my furniture because my mom subscribes to a local estate sale mailing list (an actual snail-mail list!) and we got a ton of stuff way cheaper than I thought we could. I even have a real couch! Okay, it’s a loveseat, which is like 2/3 of a couch, but still! I have a dining room table! I have most of my kitchen!

Oh, and the place is cat friendly. Jake, my Egyptian Mau, is coming with me. Egyptian Maus are kinda like tabby cats, but with some quirks. They’re patterned with more spots and fewer stripes. They tend to be possessive of one particular person, the hairs in their fur are individually striped, and they’re #@%^ fast and muscular–like, this cat has abs. I’m Jake’s person, so the mayhem that would ensue if I left without him… well, there’s this potted plant in the living room, and whenever he’s really mad, like when we were traveling to visit colleges and I left the house for a few days and left him behind, he pees in it. Right in front of us. He knows what he’s doing. If I left for college without him, the plant would probably die, and he’d have to find something else to do. We don’t need him to get creative.

That reminds me. I need to buy a philodendron before I leave. With a big dish under it. Just in case he gets mad at me.

I think that’s about it. My next big engagement is college orientation on the 22nd. Until then, this is a good enough update, so I’m finally done with this post.

 

Edit from the next day: That server-side scripting class with the PHP that I thought I’d barely passed? I just checked. My professor gave me an A. And I mean he gave me an A. Literally all my assignments were late, and I completed just enough of them to pass percentage-wise. He knew everything that was going on and why I was struggling so much, and he must have poked a loophole in somewhere.

I don’t know what to say.

Not Tame

A snippet from a post draft I wrote last week. This might explain pretty well why I haven’t been posting as much as usual, and why my last post was a veiled rant about my school.

But then, what am I? I’m letting my willpower be spent on the bullshit that is this web design class, which I am literally only taking to make some bureaucrats somewhere happy. The HTML and CSS standards have changed a fair bit since I self-taught web design five years ago, but I don’t even read the textbook and the teacher doesn’t lecture about it. I only read the assignments and W3’s documentation, and the assignments call for some weird conventions and structures that I wouldn’t use, because they’ll look weird when the browser is resized or when it’s viewed on mobile. This class has the heaviest workload out of all my classes, too, and I find it literally depressing to work on. It’s a pointless load of stressful busywork that teaches me nothing and that I don’t care about. Maybe if I were a better programmer, I’d drop the class and do something useful with my energy. But… I need it to graduate. If I have this degree, it’s a bargaining chip against future bureaucrats.

You know what’s a better bargaining chip than an Associate’s degree? A Bachelor’s. I think it’s time to move on.

 

I can count the number of staff [0] I actually respect at my college on one hand. [1] I see only two of those staff on a regular basis. Both are ridiculously overworked. Their accomplishments are regularly minimized and the credit claimed by higher-ups. They have Master’s degrees and could be working half as much for twice the pay if they chose, but for some reason they like to sit in front of a bunch of noob coders and remind them that = is not the same as ==. Why? Got me.

Even they sometimes produce classes that end up not so great, though. Which is understandable, because they’re trying to juggle nine of them at a time. Both are getting sick more often this semester than they normally do. (It’s just now, as I write this, that I realize how much it bugs me.)

While I haven’t lost respect for all members of staff, I’ve lost respect for the school as a whole.

I have gone through multiple classes where the college has promised, “We’re going to teach this”–and had that promise not followed through upon. I’ve had to drop classes where the online teacher went MIA, or the textbook and online documentation were so nebulous and/or buggy that it was impossible for the teacher to teach [2]. This school has instituted new, never-before-run classes as required; they’ve tried to force a teacher on me who harassed me; and they are taking advantage of people I respect and admire.

Now I’m taking this web dev class, because it’s one of the few I still need for my degree. What’s it like? See snippet above, but for the tl;dr:

  1. There isn’t a test-out. I know how to do what they’re trying to teach.
  2. The textbook is awful and teaches bad practices. (A friend who worked for years as a freelance web dev wants it burned.) I don’t even read it. Nor does most of the class. It was $120 though.
  3. We used to have like fifteen people. Half of them dropped. [Edit: About ten of the original fifteen or so showed up today, which the teacher remarked upon as “everybody’s here, what a full class!” So I guess only a third actually dropped, and the other people just don’t show up half the time.]
  4. The (overworked) professor doesn’t lecture, she just assigns and grades work. She’ll help if you’re having problems… but the textbook is just as cryptic and incomprehensible to her as it is to you. [3]
  5. It runs at 8AM.

I’m so close to this degree. But you know what? I can’t stand another semester of this crap. And trying to catch up with this class? I’ve been trying to do that all semester, but it’s not working. [4]

So, I’m thinking that rather than finishing my Associate’s and then not finishing my Bachelor’s, maybe I’ll finish my Bachelor’s and not my Associate’s. I think a four-year university is more likely to be run with some sanity (as there’s more free-market competition) than a community college.

And I have two good candidates to fill that space. They’re in a little town and a small city, which I don’t like, but the rent is very reasonable; Northern Iowa University has an awesome CS department head and a required curriculum that teaches things I think are valuable; Aurora University is nearly as cheap as community college when you factor in their standard GPA scholarships, will take a TON of my credits as transfers, and is an hour and a half from Chicago. I’m thinking about going to both, actually, because I want the first guy to teach me Lisp and I want the piece of paper from the other place. They’re both pretty darn cheap as colleges go.

I’m planning on re-visiting them. I really should quit stalling on applying, but for the past weeks it’s been another giant crazy thing on my to-do list.

But that’s going to change soon. I’m dropping this web dev class (assuming I still can–cringe) and I’m dropping the capstone project that’s only useful for my degree. That’s half my classes, but waaaaay more than half my workload. It leaves me open to work on stuff that’s actually useful, like the production app we’re building in my mobile app dev class, which is for an organization in a nearby city. We don’t have much time to build it, and I want to make sure they get something good from us!

I resisted taking this route for quite a while. It feels like giving up, when I’m so close to being done with this degree. But changing my goals is something I do a lot. I know I do that a lot. I’m eighteen years old; I’m supposed to. So I’ve intentionally left things flexible for myself. I’m not stuck to one path, so when I run into crap like this, I can just walk around it. I’ll take my chances with the next bureaucracy.

I do have one goal that hasn’t changed since I decided what I was studying in college. I want to be one of the best developers. I know that most programmers are pretty mediocre, and the top 5% (or so–this figure varies depending on the cynicism of the person talking) do all the really good work, and I want to be one of those. This is the goal I’m dedicated to. The other stuff varies depending on which path I think is the most practical and efficient way to get there, which is a problem that probably verges on NP-completeness.

 

I am patient with that goal. I know it takes a long time to learn to code really well, and I’m willing to put in the time and effort. What I’m not is tame. I have a rather short limit at which I’ll tolerate doing pointless things to make bureaucrats happy. I have boundaries on how much I’ll let people waste my time, because it’s not an infinite resource, and my energy, which (as anyone who’s ever had depression knows) is precious.

This post is mostly an expression of the clarity I’ve achieved on an issue about which I’ve been fighting with myself for weeks. If I get confused about why I made this decision later on, it’s also documentation as to what I was thinking.

But for you, it’s a warning about community college.

If you want to study in a field that’s in demand, think about the people who currently have credentials in your field. How many will want to teach? Of those, how many will want to teach in a community college? Are there better things for them to be doing? Could they be teaching in a four-year university just as easily, where they can work with colleagues they admire and/or teach more specific/obscure things they really like?

In other words, is your community college going to have a really hard time hiring and keeping good teachers?

I have no clue why my favorite professor is a professor. He’s worked at famous companies, developed really neat stuff with other really smart people, been all over the world to talk with all kinds of customers, knows at least one human language that isn’t English, and now he’s here in my hometown, running a little farm and teaching classes and telling silly coding stories to a bunch of college students. He seems to really enjoy his job, but he’s also gotten sick like three times this semester and I think the stress is getting to him more than he’s showing.

Is this likely to happen often? No. Most devs probably don’t think of full-time teaching as some kind of fun “retirement.” Why would they, when they could just as easily settle in some suburb of their favorite city and hack open-source all day long?

Just be careful, fellow larvals. I’m not saying community college is always a bad deal; just that it isn’t always a good one, and there seems to be a reason that makes this more than an edge case. Also, explore nearby four-year universities–even the private ones–even if you’re on a budget. You may find that they’re just as reasonably priced.

 

On a lighter note, I think my knowledge of Kivy is about to become useful again. Our time is pretty darn short in this mobile app class, and using Kivy could cut our work in half (as we wouldn’t have to code for separate mobile platforms). Although, since I’m the one who suggested using it, I have to come up with some sort of demo for it. This might be irritating for reasons you’d understand in context, except I like Kivy and I wasn’t expecting the prof to even consider it.

Anyway, I’m off to start building that.

I’m going to leave you with this very long thread of programmer jokes. (Make sure not to miss the one at the top of page 9.)

Happy hacking!

 

 


 

[0] in my degree; props to the tech support, janitors, and that really patient front desk lady with the rockin’ curly hair. Also there are some great profs in other departments–I had an awesome math teacher, and one or two of the networking folks are pretty neat–but the programming department sucks and that’s where I spend 90% of my time and money.

[1] In decimal. Although if I did count in binary, it makes a gesture that, while lacking in finesse, expresses my current attitude toward my education.

[2] That latter one? The textbook was more like a reference manual than something to learn from, and there weren’t any projects in it, so we ended up using like a third of our time to scour the Internet for tutorials. I never completed any of the projects we were trying to make work, so eventually submitted three chunks of unfinished, broken code at the very end of the class. I got a B, presumably because the prof was reduced to grading on a curve and the other folks in the class didn’t do much better. If I hadn’t hated .NET before that class, there’s no way I wouldn’t have started to hate it afterward.

[3] I watched her stand over a classmate for twenty minutes, trying to figure out why the feature in the tutorial wasn’t working. I went over and looked at the code and it was perfect. We puzzled over it, flipped back through the book, and eventually found a little note that said the feature was unsupported in three different browsers. We opened it in Firefox and it was fine. That guy dropped, I think.

[4] I wish I were writing this on a hand-coded web site, for maximum irony, but I’m too lazy for that when WordPress works just fine for my purposes. I suppose it’s ironic enough that it’s not even worth hand-coding my blog.

What college visits are like for CS students

These are actual things that actual colleges have actually said to me. I couldn’t make this up. And this is just a sample of the silliness–even lazy comics take time to make so I sure haven’t covered everything.

It felt good to write these though.

leadershipmeeting-cs-head

This isn’t what the guy looked like, by the way. I’m doing some minimal paraphrasing for length, but this is actually what I was told.

Later during that conversation, he would give me career advice that told me in no uncertain terms that he hadn’t left his ivory tower and looked at the job market–or even just kept up on his reading–for 15 years.

I’m not going there.