Another New Year! (sort of) and Other Sources of Reflection

Happy Year of the Goat!  For the first time, I was part of hosting the Chinese New Year celebration rather than mooching food and butchering my knowledge of Mandarin to say thank you.  Much food happened, we made the best spring rolls of all time, then we ate them all with friends and family.  Everyone was happy.

This allowed me an experience I typically have twice a year.  Once during New Years Eve and again on my birthday in August, I typically have this moment where I reflect on where I was this time last year and realize what an idiot I was.  Without fail, I think about myself a year ago and always know that I’ve grown a lot and that if I met myself in the past and had a conversation, I would stand in disbelief staring at myself and my actions, regarding myself as ignorant, naive, and childish in comparison to the present iteration.  This is one of the many reasons I’m incredibly against any attempts at time travel and time travel movies just make me uncomfortable while I suffer through their infinite plot holes.

If I had to meet my past self, we’d inevitably get into a fight.  My present self would be frustrated that my past self didn’t know what my present self does even though they’re technically the same person, and my past self would feel my present self was awfully sure of herself and borderline arrogant.  This most likely would stem from the fact not enough time had passed that I feel like there should be a significant difference in our awareness, and given that it is essentially me who isn’t living up to my standards, I’d get irritated, where as with anyone else who doesn’t live up to my standards I’m generally pretty supportive and encouraging to help them improve.

If, however, I was able to meet up with a past self that was a significant amount younger, say a decade or so, I imagine we’d get along quite well and spend the time figuring out what age I actually was when something happened rather than assuming I was 8.  My present self would admire how dorky and awkward my past self was, feeling accomplished that as an adult I had managed to cover it enough that when I announce it to people who know me at a professional level they don’t believe it is true, but as soon as that boundary crosses into friendship they can’t help but be awestruck at how long I managed to cover and compensate for my social flaws thanks to a large amount of confidence making it appear as though everything I did was normal.  My past self would look up to my present self, proud of the fact I had a dog and finally started studying coding rather than hesitantly colliding with it before running away over and over again.  They’d be a bit perplexed about how the husband happened, but probably accept it if they happened to meet present husband as well.

So, yeah, time travel should never be a thing.

On Chinese New Year, I briefly thought back to where I was last year, and I, as always, just ended up feeling sort of weird about myself.  This time last year my husband and I had been engaged for a couple months and felt sort of weird about it (as a former commitment-phobic who didn’t like spending more than a week with someone), had a sinus infection thanks to one of my dear students snotting all over me in the most epic sneeze in the history of mankind during a math lesson, and I couldn’t imagine doing anything in my career that wasn’t teaching.  This year, I’m married to my dear husband and feel amazing about it, have a shoulder injury I spend hours each week at PT to resolve due to a very angry student, and really want to become a programmer.

Those are all some pretty big changes.  I’m especially grateful that my husband has been as supportive as he is about my desire to change careers, though I know the news has been very shocking to a few of my colleagues since I am very good at my job.  The reasons for it are pretty strong too.  With my injury, I’ve no longer been able to look away from the severe problems in the education system that when you’re working with students on a day to day basis you come across and bump heads with trying to get resources or assistance needed to work with severely impacted students with emotional and behavioral disorders from district administrators who do not respond to phone calls or emails.  I was pretty much shoved directly into it, both figuratively and literally, staring at it and observing it for hours on end every day with no way to ignore it, and those issues are ultimately what lead to the injury in the first place when I received no response.  I could write a novel about these challenges and their implications for the safety of children and teachers let alone the education of students, but I’ll save that for another time.

Since I was eventually placed on actual light work duty, the work I was asked to do was mostly paperwork and on the lucky days helping teachers improve their paperwork to make a positive impact for students.  This meant I was doing a job I no longer took home with me, and the hours extra beyond the typical day were nearly nonexistent aside from attempting to compensate for hours missed due to physical therapy.  I had a lot of time to think about and explore interests, particularly ones I could do without intense use of the right side of my body.  I tried something I had spent most of my life avoiding fully exploring: programming.

I was hesitant at first when I realized I loved it as I gained very basic knowledge of C++ and made silly little programs that did very basic things such as a calculator that no one but me would ever use.  I knew myself well enough to know what when I learned anything new my instant gut reaction was blind love and adoration but that this was caused largely by the novelty of the knowledge and when you first start learning something you see great improvement without much effort.  As I kept going though, even tuckered through scripting in HTML and CSS which were very less mentally stimulating, I still found I enjoyed applying what I learned to actual projects I could improve, make more efficient, and see the changes almost immediately.  Don’t get me wrong – I’m all for delayed gratification.  I love teaching where I wouldn’t see a student’s behavioral growth for at least a month after the initial intervention had been implemented, but that month was hard and often involved multiple instances of unsafe behavior in the mean time.  But the quick way of being able to test and  compile your code, find test cases that would potentially break it and making sure you’ve worked around it, it’s almost like the whole game-ification movement in educational websites.  You get little rewards for your success, but rather than being entirely superficial like the badges on those sites, your reward is simple, functional code.

I love it.  I love everything you can do with programming, the possibilities that can be unlocked, the way computers can do so much that as a human being would take me exponentially longer to process and compute.  I love thinking about a problem then making a simple solution and writing a program to implement that solution then addressing cases that break it.  I love the constant improvement, and adore talking to other people about solutions to problems to learn from what they have to share and how they explain their approach.  My poor mentors have no shortage of me staring at them with love and adoration as I show them my horrible scraps of code and searching the internet for other ways people have solved similar problems with their explanations to the approach.  The constant learning and problem solving is something I loved about teaching, and I similarly love it about programming.

Ultimately, one of the aspects I love most about coding is the fact you get to have that “New Years” feeling of looking back and thinking, “I KNEW NOTHING!  I WAS SO FOOLISH!” on nearly a daily basis – sometimes even multiple times an hour.  In a world without time travel, who doesn’t love a feeling of constant growth every time they figure out a problem they were stuck on?

Some very good news: my physical therapist last estimated that we were just a few more weeks away from me never needing to see her again.  I like the lady, but I really would love not seeing her more than I see most of my friends and family.  On my last progress report day, I scored a “4 to 4-” on a 5 point scale, with 5 points being normal and no need for any interventions.  When I first went in back in December I was at a 2, meaning I had limited range of motion and couldn’t move my arm against gravity very well.  A 4 to 4- means I have most of my range of motion back and can handle some resistance, but still not quite the normal range.

Also the application for ADA closes tomorrow at 5PM.  It’s a web development bootcamp for ladies that would start up in May.  Their programs used to be 6 months in class and 6 months at an internship, but now it’s 7 months in class and 5 months at an internship through one of their sponsoring companies.  I think the extended class time in comparison to other boot camps would be beneficial since typically short term cramming doesn’t lead to long term retention for anyone.  On top of that, I like the fact they have an internship tied directly to it in order to get some experience in a work environment where it’s pretty well accepted that you’re there to work but also very much to learn.  After all, that’s why programs like University of Waterloo’s are so effective.  They place their students in internships constantly so they can apply what they know to real-world scenarios, or in my case work with legacy code.

I submitted my application last week after accepting that talking to a web cam was not my strong point and something I gradually grew worse at doing the more I practiced.  This was disconcertingly similar to my attempts of learning how to dance in middle school prior to our first school dance.  I hope ADA will find it in their heart of hearts to find out I’m actually marginally articulate in person.  If not, I’ll resign myself to continuing to explore other options.

Complete self-study is supposedly a reasonable option, but I would rather have more experience coding with people instead of in isolation since that’s more what the work environment is like in my experience, and I know you learn more from others than you will ever learn alone.  Other boot camps are on the table as well, but the Seattle-local ones typically advertise that in the same time frame it would have been to attend ADA’s classroom only portion but without support or colleagues for half of that time, you will be work ready.  In the mean time, I intend to continue independently studying as I have been in my free time after work and hope I will be contacted for an interview.

There isn’t a doubt in my mind that I will become a programmer; it’s really just a matter of how I’m going to get there rather than if I will.

Advertisements
Another New Year! (sort of) and Other Sources of Reflection

Chinese New Year (Goat version) & JavaScript Slide Shows

This past Saturday was Valentine’s Day, and I have to tell you, mine was quite wonderful.  I went on multiple walks by the beach since it was sunny and dry in the greater Seattle area, wore purple PJ pants with polar bears (there’s that alliteration again!) while working on my website so the “Father’s Photos” section would actually lead somewhere, and played some League of Legends with the husband where we died repeatedly in the most epic fashion possible until his little brother joined us to end our losing streak.

All in all, a very productive day, topped off by trying to figure out what exactly I’m supposed to cook for our Chinese New Year party after deciding my dear husband and I needed to establish a new tradition.  So far I’m at jiaozi (potstickers or gyoza for my Japanese-culinary related friends) for prosperity, oranges because it sounds like the word gold and tangerines for the word luck, long noodles for longevity, pomelo because it sounds similar to the words prosperity and status, spring rolls for wealth, tea eggs for fertility since I know a couple just had a bun in the oven, and a whole fish for prosperity again I believe.  I briefly thought about making jai, but it’s such a complicated recipe with ingredients I’m not familiar with that I’m a bit hesitant to try making it for the first time with a bunch of people coming over since it’s not very kind to feed guests mush!  Even if it looks amazing and would appease my vegetarian friends.  We’ve also made jokes that since it’s the year of the goat we should play the screaming goats videos in the background the entire time to set the mood.

On a nerdier note, following dedicating 4 days to completing my application to ADA (and accepting the fact that I was just getting progressively worse at talking to a webcam rather than improving so deciding to submit it), I had been struggling more than I anticipated at resuming learning JavaScript on Treehouse as part of their front-end web development track.  I think my biggest issue was that it’s enough repeat from what I’ve learned of Python that I felt like I could probably figure it out with some internet time instead of video time, but enough new material that I worried the end result would be slower.  Instead of avoiding it any further, I decided to see whether or not I was correct.  I had 2 sections on my website I hadn’t added yet – Father’s Photos which was intended to be a gallery of the pictures my dad has taken since he’s gotten his new camera for Christmas, and then another section which was either going to be a wedding photo gallery or notes from friends and family that fill me with warm fuzzy feels.  Currently it just has a place holder image while I decide what I want to do.  My issue with the track on Treehouse was that it wasn’t directly tied to what I wanted to do, and it didn’t look like I’d be learning the skills necessary to do it any time soon, and in the mean time it was a lot of repeat of basic programming knowledge I’d already gained elsewhere, so motivating myself was significantly harder.

So I plunked down, googled how to make a slide show or gallery, and came up with a bunch of options that were way over my head or were just downloading a script that used jquery rather than doing it myself.  Where’s the fun in that?  Finally, I found something that was a good starting point at Webmonkey.com.  This possessed a few issues, though.  One, while I understood the code while I went through it, I really didn’t want to type this line 32 times:

imageArray[imageNum++] = new imageItem(imageDir + "01.jpg")

Also, I knew about loops.  Beautiful, simplistic, time-saving loops.  I didn’t know how to do them in JavaScript, so I guessed at first and found out it worked without needing to look up syntax.  So while I mostly used the code described there, I made a few changes.  1) I used a while loop to make my image location array.  2) Instead of putting the script inside the HTML, I changed it slightly so it would locate the folder for the image files through the root directory and I could put my little JavaScript in a JS folder.  3) I wanted responsive image sizes instead of a set width and height, so I kept it set to 100% of its containing element.  After I finished, I stylized the CSS a bit so the options below the image for pause, play, previous and next where were I wanted them, rounded the corners on the photos, and called it good.  It didn’t take too terribly long, and I could definitely improve it with some buttons for the pause/play/previous/next buttons, but I sort of like how simplistic the text looks since it doesn’t distract from the photos.  I enjoyed this project since I learned a lot about how the script interacts with the HTML, and that was something that until doing this I didn’t quite understand – how to integrate purposeful scripts across html/css/js.

By the way, does anyone know if when you use Google as a verb if it’s supposed to be lowercase?  I feel like the answer is yes, but if you make a verb out of a proper noun, it feels like it may be appropriate to capitalize it.  Oh, linguistics and colloquialisms, I love you so.

Now, off to figure out what I want the last section of my website to be so I have another goal to independently study as I continue to improve the gallery section.  After finishing, I found the motivation to continue with Treehouse since I don’t feel like I’m avoiding working on something productive while I go through it.

Chinese New Year (Goat version) & JavaScript Slide Shows

Problem solving is an addictive activity

Did you see that alliteration in the title of this post?  My high school English teachers would have all taken some deep meaning correlated with that alliteration and tied it to problem solving, but in case anyone was wondering the author’s purpose, it’s just that I enjoy alliteration.  It feels right on my brain while I narrate what I type in my head.

Ahem, onto business.  So, life is pretty great for the Lady Liu currently.  Whenever I am looking at a new job, school program, etc…I always decide to google myself to see what’s out there.  My husband and I discovered that I am very likely the only white Stephanie Liu on the planet after spending an hour of trying to google myself on the internet and coming across an adorable Chinese Stephanie Liu who did informal modeling and was all over the first half of our search, a varied assortment of Asian ladies with the name Stephanie Liu, and finally a few white ladies named Stephanie who were photographed by a man with the last name Liu.  So, I went from having the most specific name in the history of mankind where I was the one and only to having a very generic name that only belongs to one of my race.

Now, my dear husband also had a multitude of theories about why this was probably true.  A few months ago we had gone to the jeweler where he bought my engagement and wedding ring, and while we were waiting for it to be cleaned and inspected, a young Asian American man came up to us to tell us how amazing it was to see another “Asian Male White Female” couple since he was convinced he and his fiance were the only ones.  He was absolutely adorable and ecstatic, and my dear husband and I were a bit thrown off, then immediately curious.  Our only regret was not chatting him up more about this.  So, my husband is also convinced that the reason for the uniqueness of my name with my race is due to the same observation the guy at the store made.

It’s possible, but more likely it was just hard to find due to the quantity of people on the planet named Stephanie Liu, and we didn’t try hard enough.  I couldn’t help but feel, though, that somewhere out there there was a computer program to help me resolve this issue and find another of my kind.

Why did I decide to google myself, you ask?  What job or school program was I looking at?  Well, as I’m sure you’ve noticed if you’ve read this blog more than just today, I’m trying to learn how to code, and then I gradually realized I love it because problem solving is addictive.  For example, I spent a few hours making myself a lovely abacus program in Python that would take any number through the billions and print out an abacus replication of that number.  It was likely incredibly inefficient, but after getting it down to 8 lines of code, I felt pretty good.  Trying to think of a simple solution to a problem that you can explain to a child then make a program based on that solution that’s equally simple to code is a fun activity – especially since I’ve noticed prior to this my brain had a tendency to make things far more complicated than necessary by taking in too many variables all at once.  Thinking through a single variable and its impact at a time before additionally complicating things is oddly fun for me.

So because of the above described love of problem solving which was still present prior to learning basic coding, I was drawn to it.  I think this is something I would really enjoy as a profession, especially after having a few experiences of working on my code with a couple other people.  It simulates a lot of my favorite aspects of teaching or even better it accentuates those aspects I love and makes them the focus.  Consequently, I’m currently applying to ADA, a year-long program for ladies with 7 months classroom instruction and 5 months of internship at a local Seattle company.

I’m enjoying the application so far.  Making my resume in markdown on Github was fun, and I finally put something on my Github account I had sitting there for quite a while and hadn’t spent the time to learn how to use.  The hardest part was likely that I had no idea what kind of information to include on my resume.  For example, on a traditional teaching resume, you are expected to include all your work history since you were 18 on some part of your application or resume due to background checks to make sure you aren’t a creeper.  Furthermore, for teachers with less than 5 years of experience including all your practicum and internships is typical.  Given I’m applying for a program I don’t technically have any related experience for, which is sort of the point, figuring out what to include was rather challenging.  Discussing this problem with a variety of people, I decided to go with my most recent experience, teaching, and technologically related experience, tech support from undergrad and a bit after.

The part of the application I’m currently working on involves using a CSV data file to get different pieces of information then explain how you did it.  The one I’m having some slight difficulty with, likely because I’m over thinking it, is a portion about whether the market is on public or private land.  Now, after consulting with the internet, apparently no one agrees what is considered public or private land, aside that it’s generally accepted that roads are public and some parks are.  Given this was a problem, I decided to contact a couple lawyer friends of mine.  Turns out, they also had no idea and after one checked in with a buddy who did land law, he came back saying the response he got was that whoever could BS better would win in court, which told me they were likely uncertain themselves.  So…yeah.  More research, I suppose?  If more research doesn’t solve that problem, I will do what many teachers do when asked to answer a question they suspect could use slightly better definition – define it myself!

Another bonus – the application motivated me to get the basic, basic website I’ve had on my hard drive finally uploaded to the internet.  Head over to stephanieleighliu.com if you’d like to see a very, very simple sample of what I’ve been dinking around with between Treehouse, Udacity and the rest of the internet.  It’s pretty simple for now, but I’ve definitely learned a bit about different features by making it.

Also, robots are amazing.  Mine is currently vacuuming my floor, and it feels right watching it work while I sit and type rambling blog posts.

Problem solving is an addictive activity

Football: Catch the Fever but Not the Rash!

A couple days until Superbowl time, and given that I’m from Seattle, obviously this is very important to me.  First, I’d like to thank Richard Sherman for deflecting attention off of his teammates who are far more shy and for really rocking the crazy eyes this year.  Next, I’d like to thank Russel Wilson.  You seem genuinely like a good guy, and also you’re very easy on the eyes, which is odd given that you’re a football player.  And finally, Patriots, thank you for chronically cheating so that it’s super easy to hate you – even easier than hating the 49ers, whom I secretly like in very specific situations but will never admit verbally.  That’s right, Patriots, I always want you to lose.  Always.  Even if it would be advantageous for my team if you won, I hope for nothing more than your complete and utter defeat at the hands of men who are marginally more ethical than you.

Alright, nerd rage aside, let’s get to the point.  As per usual I’m going to go into some awkwardly revealing detail about my youth and then make some overarching connection to the impact it has had on my adulthood, since apparently that’s my M.O.  Let’s do this.

So every time I watched a beer commercial as a kid, either it was frogs croaking “Budweiser”, half-naked women and happy ugly white dudes, or a bunch of dudes watching football and cheering while drinking.  Fortunately, in my youth I was incredibly aware that frogs croaking a brand name was fun to mimic, and that women didn’t get undressed anywhere but in the minds of happy ugly white drunk dudes when alcohol was involved on their end.  The last motif just baffled me.  Men watched football?

Let me clarify.  I knew some men watched football.  My grandfather, for example, liked to lay in his bed and watch it every Sunday, and when I visited I would sit on his bedroom floor for a few hours to watch one game with him, shouting and cheering for everything because I didn’t really have any other outlet to get out all my noisy yelling child urges.  My grandmother never joined to watch football, and my sister didn’t, so I suppose this may have been a good indicator about why that gender stereotype existed, but that wasn’t my home.

At home, on Sundays, my oldest sister – 8 years older – would watch football avidly with my mom.  I found the games slow paced, so if I was eating I wouldn’t get distracted, so my mom often had a bag of chips and this amazing four-layer dip I dedicated all my attention to anytime a play wasn’t happening.  Nowadays, I have my cellphone, which is probably exceptionally better for my diet, but every time I watch football I still crave a little bean, sour cream, salsa, and cheese dip to go with my chips.

That was it.  My sister, my mom, and sometimes me depending on how focused my 8-year-old brain was.  My dad never watched football at the time, so clearly every time my brain saw the commercials for booze involving dudes and football, I figured they were trying to attract more men to the sport.  I made it my duty to help their cause, since it might be cool if my dad watched football with us.  And so, I set out to discuss football with men everywhere, telling them how great it was and why they should consider trying it out to enjoy it.

Every time we came across an adult male friend of my parents, I asked them if they liked football.  My uncle was my first recruit.

“Yes, of course,” he replied.

“What about the Seahawks?” I asked, staring at him with the eagerness of an Evangelist.

“Obviously.”

“Will you watch this Sunday?”

“I will be watching every Sunday so long as it’s on!”

SUCCESS!  Now, had I been maybe a year older, I would have realized this conversation clearly indicated he had been watching football all along, but instead I took this to mean that I was amazing and the perfect advocate of the cause.  I continued this same pattern of conversation with male teachers at my elementary school, boys on the playground, and after I had grown enough confidence, I figured it was time to try this talk on the most challenging of targets: my father.

“Do you like football?” I asked, staring at him like a tiger (which I had formerly believed to have eaten my father) about to pounce on its prey.

“Yeah, I love being at the games.”

Lies!  Complete and utter lies!  He had never been to a game that I was aware of, and I had lived with this man for 8 years!  Why would he lie?!  No, I knew this going in, he would be the hardest sell.  I had to continue attracting men to watching football so those beer commercials would go back to showing the reality of football – women with bean dip shouting and hollering, and maybe after all my hard work a couple men as well.

“What about watching games?” I asked, this time raising an eyebrow as I stared at his face, gauging whether or not he’d be willing to be persuaded to join the cause.

“Well, yeah, that’s what I do when I’m at games.”

“Great!  So you’ll watch it this weekend with us?  Perfect!”

Rather than waiting for him to clarify that the answer was actually no, I happily meandered off to go play on the tree in the backyard.  I’m assuming my dad later had a conversation with my mom about whether or not he actually had to watch football now, and the agreement was that due to how adorable I was in my youth and how happy I seemed about it, he clearly had to go along with it.  Fortunately for everyone, that cuteness wore off as I got older, so my blind enthusiasm was slightly less contagious.

That Sunday, there I was, successful in my mission, sitting with my oldest sister, mom and dad, watching football.

Glowing in my success, it was short lived as soon as I heard my dad shout, “I don’t understand why they aren’t kicking a field goal.  Kick the ball!”  I looked at the screen.  It was first down.  Fifty-yard line on the dot.  I looked back at my father.  Oh.  Maybe this is why he didn’t watch football.  He knew nothing about it, and for the next few years my mom spent most of the games explaining why it’s probably not a great idea to kick a field goal at the fifty-yard-line on a first down, and my dad kept joining us, and the frequency I decided game time was play outside time increased.

Learning is fun.

Football: Catch the Fever but Not the Rash!

Where to Learn Web Coding: Udemy, Codecademy or Udacity

Congratulations, everyone, you’re spared my MSPaint art!  For now…

Since apparently learning to code is some major fad right now (which I perpetuated in my classroom before my shoulder was busted), my greatest challenge with learning to code is how many options there are out there to learn  Too many is the answer.  Too many.  The very basics of good teaching are to teach both the “how” and the “why”, modeling, providing time for support practice, and providing independent practice so I can retain and generalize the skills learned.  The options I’ve found online all vary significantly in quality in these respects, and the quality seems to change and drop off at regular intervals.  For example, my Udemy.com class in C++ was a great place to start.  Initially, the e-instructor explained everything very clearly with his amazing thick accent.  Most importantly, he started with teaching “why” you do certain things before teaching “how”, which as a teacher I know is essential to ensuring someone can use the skills in the future to solve unique problems they never came across.  They’d have the tools to attack a problem that seemed foreign because they knew how their tools worked and consequently where they would be effective to use and the impact they could have.  Unfortunately, about half-way through the lesson, (as I mentioned with my issue involving fatty fingers and validity checks), the quality sort of dropped off and instead of teaching he just started to show how to do things without anything resembling why.  Thankfully, I’m pretty good at deduction and producing cases that can ensure whether or not something is working the way I suspect it is, and I can look information up pretty well, but what’s the point in paying for a class that I need to supplement with hours of trial & error + research to learn a basic functions actual functionality?  I want to spend those hours of trial & error + research learning how to solve my own problems instead!  Way more fun.

The other issue I had with the Udemy.com class I took was the lack of independent activities or homework to ensure I had learned what I was expected to learn.  There were two incredibly easy quizzes total, but that’s all.  Again, this wouldn’t have been a big deal if I had known the “why” behind what I was doing, because I could easily make up my own activities, but when you lack the “why”, independently structuring a problem you can solve gets a little trickier – which is how I knew I knew less than I had expected to by the time I finished.

Despite some major educational flaws involving my inability to generalize the skills I learned without hours of independent study and raking through the internet, I still believe C++ was a good place to start since it tied to a language I had some background in – even if it was nearly a decade ago.  I had taken C in high school when I first loved coding, but ultimately decided to go to college for something else because while I loved it, I wanted it to continue to be more of a hobby so that my love didn’t fall away.  In college, I continued to work in some scripting languages to make mods and additions to games I loved (Ragnarok Online, oh yeah!), but by senior year I was so busy being old that it dropped off.

In hind sight, this might have been a silly line of reasoning.  Why not pursue something that I love as a career?  The passion should have gotten me through all the normal ups and downs no problem, but for whatever reason I had a fear that something I loved to do for recreation would become tainted once it was a career.  Fortunately, years of tech support helping pay for my undergraduate school also made me realize I love teaching and going to Carnegie Mellon made me more than aware of the fact I’m totally cool with people who have disabilities.  Somewhat joking, but also CMU has an abnormally high rate of students with Autism Spectrum Disorder.  Which is awesome.

Anyway, on a less personal note, once I finished with my Udemy course, I felt sort of disillusioned and uncertain of what to do with myself.  I knew my next step was going to be learning languages that I can use on my old web domain after the fundamentals of coding were out of the way, but I felt like they hadn’t really been fully taught and my independent deductions left me hesitant to say I was correct in said deductions and standing on solid ground.  I looked at a few different sources as where to go next.

I tried Codecademy.com.  I had two major complaints.  While the format of the website was amazing and something I hope to be able to make one day with the instructions, code, then seeing what you build in real time all lined up in a way where it didn’t feel crowded, it was far too much like rote memorization and once again didn’t include the “why”.  I could figure out how by looking at source code and messing around with it.  My second issue was the pacing of the lessons was so slow that after I got a bit into CSS I decided to try something else. Also, I learn very well with audio, so videos would have been nice too, but this is more a personal learning style issue than actually a critique on the material.

I checked another Udemy course, but they all looked to lack independent tasks and explaining “why” as well.  There were a few Ruby online programs out there that were either free or charged very little, the online courses from Stanford and the like, and a couple things like TheOdinProject.com, which has a great information for reading and connects to a wide breadth of different resources (including Codecademy, TreeHouse, etc…) as well as laying what to learn out in a specific order, but a lot of it linked back to Codecademy for basic information.  Which, as I stated earlier, not a huge fan even if I want to cuddle their website at night.  Then finally, I found the one for me.  Udacity.com.  For now, this is the path I’ll be on until I likely wander over to TheOdinProject or FreeCodeCamp looking for more.

Udacity explains things clearly, including why you use different parts of code or how functions work, and then offers quizzes and homework immediately requiring you to independently apply what was learned.  Also, there are videos, so that’s a plus for me, and you code things without them explicitly telling you exactly what to code to the point where you can probably copy and paste unlike Codecademy.  Some people may not like that it gives information not directly tied to the immediate skill you’re trying to acquire, for example a few minutes spent talking about Ada Lovelace, but I genuinely enjoyed the random tidbits of information.

The how, the why, modeling (lectures showing how to do something) and guided practice (quizzes that then walk you through the steps – I’m assuming this would be closer to typical guided practice if you paid, but I’m good with my freebies), and independent application (homework & since you have enough of the why you can set your own assignments easily such as working on that old domain!).  Udacity is the closest thing I have found to best practices in teaching online so far.

Udacity is perfect for me – at least for the time being where I’m still just getting off the ground and trying to solidify my learning from C++ into other languages.  I plan on starting with Python since it’s the closest to C++ (though so much simpler and more elegant), while I continue with HTML/CSS through independent study since they both so far have seemed incredibly direct while I was doing Codecademy.

I have, of course, also considered a bootcamp, but that’s a post for another day.

Thank you, mushiwulf, for introducing me to FreeCodeCamp.com and your blog always serves as good motivation (or is that a work distraction?!)

EDIT 1/30/15: I just finished Udacity’s HTML/CSS section, and I felt the need to update to say that while there are some portions where they explain how/why quite well, there are others where they return to the old school way of teaching code which is “look at this block of text – copy it onto yours – see what it does!”  At this point I can only really recommend their introduction to CS course, though I may recommend others as I continue or stop recommending that one if it gets progressively worse which seems to be the trend in MOOCs.

Which, again, I’m totally up for that, but don’t really need a video about the basics to send me on that path of using view source.  So I’ve resorted back to dinking around with things independently.  My husband has started using Treehouse, and I’m considering doing so as well, but it looks like it just goes so slowly.  Painfully slowly.  I love python so much more than HTML, though…

Where to Learn Web Coding: Udemy, Codecademy or Udacity

Pain: It Builds Character! (Or: Why I’m a Horrible Patient)

I would like to start this off with an apology.  Mom, if you ever happen to read this, I’m sorry.  I truly am.

First, I’m sorry that I doubted you would figure out how to find that I wrote a blog.  Another further apology for suspecting that even if you knew I wrote a blog, you surely would never actually find it.  I’m pretty sure you use the internet to play variations on solitaire and the occasional update to the space simulator I downloaded on your iPad (shout out to FTL!  My mom and I  both love you, so make an android version so I can play mobile too, please!) and nothing else.  So if it turns out I was wrong, and at some point you were doing a search about poodles and somehow you landed on my Ninja Poodle post and then you suddenly realized, “Wait, I know that little bastard who lies on clean laundry piles with his filthy, smelly, old dog poodle body…” you decided to start clicking around on my page and found this post, I’m sorry I ever doubted you.  I know you’re capable of many things, Mom, and at long last your web browser is one of them.

Second, I know if you read this you would take it as me insulting your statement, “It builds character!” every time I experienced pain and implying it was detrimental to my development.  I want to make it clear that I don’t feel that way at all.  I have just noticed that while it certainly did cut down on the amount of moaning and groaning I do in comparison to everyone I have met in my life, it has lead to some consequences whenever I do happen to need to visit a doctor multiple times and a physical therapist over a duration as part of my healing process following an injury – like say, for example, a student rammed me into a wall injuring my shoulder and kept swinging.  Not that that’s ever happened.  That sure would be weird.

Moving on, then.  When I was a kid, I had the most tangled, rebellious hair a blond kid could have when the hair otherwise appeared straight.  For the most part, this wasn’t a huge issue.  Why?  I personally didn’t feel hair brushing was all that essential as a kid, so it rarely was a problem.  My mom, however, felt differently.  Every time she did my hair, either because she happened to be around after a bath or was doing my hair for us to go somewhere fancy she figured my matted mess wouldn’t look so appropriate, she would brush it.  This sounds simple enough, but you have never had a tangle of interwoven, matted hair with a brush yanking down on your scalp if you think it’s silly to make any exclamation of pain.  I already was a pretty tough kid thanks to bigger sisters being less than gentle with me and getting into fights with the neighbor boys, so it was typically limited to a grunt, and on a particularly bad day, an “Ow, Mom, that hurts!”

To this, my mom always had one response.  “It builds character!” and then would continue on the current course.  (This may be why my response the first time a student for whatever reason decided not to follow a direction I gave was to wait for a moment then repeat the direction until it was followed.  This once lead to me saying, “Sit down,” in a monotone for 5 minutes while a kiddo with EBD ran around the room trying to find a way to get my attention.  Fortunately, he grew bored and eventually sat down, though that probably wouldn’t be how I’d handle the same behavior today now that I have a bit more experience and a lot more reading in on best practices in teaching students with EBD.)  My mom, every time I made any noise, would yet again repeat, “It builds character!” and keep going.  Bellyaching didn’t change the outcome, so I eventually just stopped bellyaching.

Overall, this was fine during my youth, except any time I was ill enough or long enough to warrant a doctor’s visit.  For some reason after you’d been vomiting for 2 weeks straight multiple times and then get to awkwardly tell a doctor you’re pretty sure you’re not pregnant because there’s a certain activity required to cause that to happen that you, as a minor generally traumatized by the “Miracle of Life” video’s birthing scene, had not been partaking in and had no intention of partaking in ever because that was not about to happen to your precious body, they aren’t really inclined to check into it further if your response to various motions that cause pain is to say, “It’s fine.”  Fortunately, the solution to my vomiting problem was to get about 5 years older, and then it worked itself out.

I take that back, there was one other time a more verbal response to pain would have been beneficial when I was a kid.  My neighbor boys and sisters sometimes liked to pull my hair.  Thanks to it building character to have my hair pulled by a brush, I assumed it also did when hands were involved in pulling.  I usually just sat there motionless, unresponsive to the tugs, impressed by my own toughness.  Except one time the neighbor boy was particularly mad at me in our game of LEGOs for taking the last steering wheel to make my mobile toilet car (I made many of these, don’t know why, but it was sort of my thing).  He wanted the last steering wheel, and when I refused to engage in that high-quality sharing I learned in kindergarten because sometimes get to have the last of something too and sharing also means the other person should share back occasionally instead of take-take-take, he yanked my hair.

Another example of the fact I'm not actually invincible.
Another example of the fact I’m not actually invincible.

Fine enough, my scalp was made of titanium for all I knew.  But when I didn’t make a peep, his eyebrows simply furrowed in rage as he glared down at me, holding the last steering wheel just out of reach.  He grasped, he hoped, he failed to get it out of my hand, and so he did what a little boy does to a little girl who isn’t sharing.  He pulled my hair harder, hoping pain would cause a reaction.  Nope.  Again, not a big deal, but he continued trying to pull harder and harder in hopes that I’d do something, and instead I just stared back at him blankly until finally he managed to tug a chunk of hair off my head.  When I still didn’t respond, he finally resorted to what little boys do when violence doesn’t work.  “MOM!  SHE’S NOT SHARING!”  Shortly after, I was yelled out of my neighbor’s house, LEGO-less.  The toilet car went incomplete, and I lost of chunk of my hair to show for it.  I imagine had I made some sort of reaction he likely would have stopped since he wasn’t typically malicious in nature, but it built character to be silent.

So, that leads me to my present issue.  Every time I go into the doctor, he tells me to “do as much as I can” while assessing the limitations of my injury.  Now, I have an injured right shoulder.  Typically, I use my left hand for writing, but nearly everything else is my right hand thanks to my elementary school not believing in left-handed scissors, left-handed baseball mitts, and yelling at me when I tried to move the mouse to my left hand.  So when I’m told to do as much as I can, my reaction is to much as hard as possible, even if I use compensatory muscle groups to do so and loose all sensation in my right arm due to nerves getting pinched.  When I lose sensation and can’t do the next activity, my doctor typically sighs and has to wait it out.

During physical therapy, I’m told to indicate when I lose feeling in my hand, but given that it’s a sign of having character not to vocalize any complaints, my poor physical therapist has to check in with me every few seconds to see if I’m going numb and stare at all my compensatory muscle groups to babysit my shoulder since I’m certainly not going to.  My poor PT has repeatedly asked me to speak up before it goes numb, and I really am trying to remember to, but after going years and years of not vocalizing a complaint about pain unless I’m asked about it, it’s fairly hard to do.

Actually, I suppose I have issues even when I am cued to indicate if I’m in pain directly,  but in the direction of underplaying it.  For example, my poor husband loves to hug all the time because our apartment goes from being a furnace to being a freezer in the period of 30 minutes on a regular basis, and hugs are a means of survival – not emotional connection.  However,  he is a very strong man, and I have a fairly impaired shoulder.  If he hugs me just a little too high or a little to tight it hurts until the next morning, and if he hugs me a lot too high and a lot too tight, it can hurt for the next week.

Now, common sense would say that if someone you love is accidentally hurting you, you should probably tell them immediately.  However, due to my slightly dysfunctional pain response system, my response is to continue on until they somehow manage to pick up on body language indicating I might be uncomfortable and then ask about it.  I then go into my next lesson from growing up: there’s no reason to make people feel bad about things that cannot be changed if they have already learned their lesson from them.  My husband already knows he’s hurt me, so it does no good to go on and on about it, so I usually respond with what I tell doctors, “I’m fine.”  Now, my poor husband then fixates on whether or not I’m actually fine, trying to gauge the impact.  He’ll subtly watch my behaviors the rest of the day, then ask me why I’m not doing something I normally do the way I normally do it.  That inevitably leads to me being in a conflicted situation where my value for honesty is pressed up against my value for not making people feel guilty for no reason.  The outcome is some long-winded, overly detailed response about exactly why in this particular moment I’m behaving differently with the hope that deciphering the long trail of words will distract him from guilt.

Hopefully I’ll just heal up soon so I don’t have to keep having awkward conversations with the people I love about how moderate physical contact causes pain!

Pain: It Builds Character! (Or: Why I’m a Horrible Patient)

Validity Check: Fatty Fingers and stringstreams

Remember how I said I’m studying coding?  Yeah, that’s still been completely true, I’ve just been puttering along without any real issue following my course on Udemy.com.  The e-instructor described things quite well through a nice, thick accent, and anything he didn’t describe I was capable of using the twin powers of my logical brain testing things independently and StackOverflow.com to resolve.

That is, until I ran into a data validation exercise.

The instructor hadn’t gone too far into detail about the actual functions behind a lot of the directions he was giving including the use of cin.rdstate() and cin.clear();.  I, and apparently a large portion of the inexperienced internet, believed that the latter function would clear the stream of console input.  We were wrong.  We were all horribly wrong.  All it does is clear the error tag on cin and allow the stream to continue being used.

What I was told to do - logically this was the equivalent of "did fatty fingers happen? Alright, let's forgive the fatty fingers, ignore half of what they did, wipe the screen to remove evidence of the fatty fingers, go back to listing our menu again, and let the fatty fingers know they were fatty if they didn't even enter a number!  Silly fatty fingers."
What I was told to do: logically this wasn’t a bad idea in isolation and was the equivalent of “Did fatty fingers happen? Alright, let’s ignore that and keep going!”

So, for example, if I had a line of code getting an input for an integer involved in my lovely while loop and instead of an integer my dog crawled on my keyboard and entered COWSARESKINNY, my program would pee itself and then pee some more as it kept trying to convince itself it was using a valid data type per my instructions.

The other thing my e-instructor had suggested doing is using cin.ignore(numeric_limits<streamsize>::max(), ‘/n’);.  This essentially told my data input to ignore everything after any valid data or until a new line.  This could have worked just fine, because if I entered 2ynuhdoaf4reay, I’d have an input of 2 instead, and everyone would be happy fatty fingers didn’t destroy the day.  Option two in my menu said to compute the area of a square.  Fantastic!

Well, this time, anyway.
Fatty fingers will NOT ruin my day!

HOWEVER, my particular program then needed another integer and finally a character that’s a y/n to know whether or not to continue running, so since my stream was still full of the rest of the input that was simply ignored earlier, here is what my computer would do in response to my rabid key mashing:

Take 2 to select to use my square function, then start looking for another numeric value in the stream to use that as the length of a side.  It came across a weird string of characters, which it was told to ignore and give an error message, which in my case said, “You and your silly characters!  I said an integer!”.  It kept pushing through this error message, clearing the screen so it’d look pretty and hide the evidence of previous errors, until finally it found what I had told it to look for.  A number.  The number 4.  My code did a happy dance and giggled excitedly, finally computing the area of a square.  16!  Hooray!  Then I sent it back to my main function where it asked whether or not we wanted to calculate the area of another shape, so it then looked in the input stream for a character.  r, e, a where all invalid being that they weren’t a y or an n, and so the computer spat repeatedly to enter the area of another shape until it decided to.  ALL this without a human being needing to add anything else in!

I had a problem.  A problem my instructor over the internet hadn’t even looked at because he hadn’t produced this case during the lesson, and while I was sure there would be a later point where data validation would be looked at further with a solution that didn’t cause my program to just auto-run itself into failure, I didn’t learn it yet.  Was I particularly attached to perfecting a program that calculated the area of a shape?  No.  But it worked incorrectly for what I had just been supposed to learn, and darn it, I wasn’t going to fail at acquiring the expected knowledge!  So I set to my problem-solving regime: a healthy mix of independent research and soliciting the aid of those I perceive as being better at what I’m trying to do than I am.

My first step was to test a few different cases to determine if my hypothesis about my error was correct.  It was.  Hooray!  My next step was to try to figure out a way I could clear the input stream after getting the data I wanted.  After trying many, many things, I finally enlisted my husband’s assistance in case he happened to know the information I was looking for.

While talking to him did further my understanding of my code produced with the aid of an online instructor, I unfortunately did realize that he didn’t know a command that would solve this problem either.  The next step was to hit up the internet again, and while the internet had a variety of suggestions, none of them met the program’s outlined perimeters – that is, accepting the valid input if they typed correctly the first time but just got fatty fingers afterward.  Not to say I’m against typically forcing people to enter their input correctly in order to get what they want.

My next step was to check in with my friend Michie who is a professional programmer who would like to ride off into the sunset with C++.  She, also, said she typically just refused any data input that wasn’t perfect.  So back to the internet I went.  I finally found a post at cplusplus.com‘s forums that addressed my issue.  It all seemed so simple now, but it required the use of a library I had never used before: sstream.

string input, stringstream iStream, and int choice lived together happily ever after.
string input, stringstream iStream, and int choice lived together happily ever after.

Here’s how it worked to the best of my knowledge.  I’d get an input from cin and dump it all into a string named input.  I’d then make a stringstream, which to my understanding is essentially a stream that can handle both input and output instead of just one or the other.  Since I get the input initially as a string, I dump everything in my cin stream directly to my input without having to worry about some extra stuff floating around, and since stringstream can input and output, I input the stream into my integer data until it can no longer input.  If it can’t add any of the stream to my integer at all, it breaks out, clears the screen, and lets me know I have another chance to try again.  If I can enter a number but then have some insanity afterward, it takes the valid input and then moves on.  this removed my issue of invalid information still being stored in the string afterward, because with a new input, the content of my stream is changed to the new input.  Unlike just cin, I can use the stream for input and output, so I can convert the data safely from my string input to the stream to my data type.  I no longer had to ignore the rest of my stream, only for my cin stream to vomit them up later when I least expected.

Thank you, stranger on the internet at the C++ forums, for helping me solve this problem!  My code, while still not completely elegant, is much more functional now and forgiving to fatty fingers everywhere.

Validity Check: Fatty Fingers and stringstreams