Monday, April 30, 2018

operating systems for programmers

i've not written in a while because i've been focusing on school work. due to a series of conditions that lined up, i decided to get my "software developer" degree from Western Governors University. i decided to make a goal to get the 4 years degree done in 1 term. this is something that can be done because:

a) WGU uses a "competency based" assessment model. they don't want to waste your time in classes that you already know the material. as soon as you are able, you can take the final assessment and get the credit.

and b) i've been writing software professionally for 25+ years, so i should be able to show a ton of competence for a lot of the stuff in the curriculum.

as expected, i shot off like a rocket and was passing one class per day at first. i then moved to having a one class per week goal. then i ran across C191, the "OS for Programmers" course. when i took my first preassessment, i thought "maybe this is something i could really learn something about". what follows is my course feedback i provided to the university:

this was a weird course for me. as a working software developer with 25+ years of experience, i had been blowing through all the other courses with barely even looking at the course material. this course, otoh, i failed the first pre-assessment terribly. i couldn't tell if this was because i didn't understand the terminology or if i really didn't understand the base concepts of os architecture.

so, it was a great opportunity to learn something! i had a hard time engaging with the book because it didn't grab my attention. it seemed to be just mostly just facts and terms, but seemed to not explain concepts very well. as richard feynman was fond of saying, knowing definitions does not mean you know the thing and i didn't feel like the book was giving me true knowledge of the things that were being covered.

it was at that point that i went to the course chatter and saw several people recommending the video lecture series from UMass covering the same material. i started watching those videos and thought they were much beter than the book, but after about 20 hours of videos (i'm not sure i got all videos that matched with the course material), i took another pre-assessment and failed it miserably (but i did do much better on one category).

i then realized i needed to tough through the book to really understand, so i buckled down and read the whole thing making sure i understood the concepts. i then took the pre-assessment a third tiem and passed with flying colors, but to be honest, i mostly passed it because i had reviewed the questions and answers of my previous failures and had remembered the proper answers on some things without really understanding the "why."

it also seemed like some of the concepts and terminology in the pre-assessment was ambiguous on some of the questions in such a way as to make it not very useful. for example, in the General Concepts section, there's a question that says "Which OS service provides functions that are helpful to the user?" to which i responded "System Calls." as a long time software developer, i absolutely know that the System Calls provide functions that are helpful to the user. but, apparently, the "correct" answer to that question was "Program Execution." i can kinda see how that answer could be correct if you really stretch what is happening in program execution, but it really just led to my confusion and frustration about the question.

while my great score on the third pre-assessment didn't give me comfort that i was actually prepared for the assessment, i decided i needed to give the assessment a shot anyway because this course was taking waaaaay too long (comparatively).

so i got my assessment time and buckled down to study.

i found the study guide through the course chatter and decided to go over each item, if i didn't understand what the term/concept described was, i simply went to wiki instead of the course material. to be honest, i think i learned more doing this process than anything else i had done during this course. wiki was explaining things in terms/ways that i, as a software engineer, better understood.

when it came assessment time, i passed the assessment with almost exemplary rating. what was weird, is it seemed like the assessment covered a ton of stuff that was not covered at all in the study guide. it just so happens that a lot of what it covered is stuff i already knew well before taking this course (pretty much any category where i got an exemplary), but the one category where i got "approaching competence," which is "memory management," i felt like i studied a lot in the study guide. it just so happens that the assessment covered stuff about "memory management," that the study guide did not have.

it just feels like there exists huge disconnects between course materials (both main and supplementary), pre-assessments, and assessments in this course.

but, ultimately, i'm very glad i took the course. because i did learn a ton and the actual learning of things is what's more important to me than a degree or certification. a little bit of a success story about what i learned:

i have an UpWork (freelancing site) account where i put myself out there as a software engineer. i put my target cost high ($150/hour) because i know that means i'll get very few hits and the hits i do get will be challenging enough to make it worth my spare time (perhaps even putting my education on hold to fulfill).

during studying for this course, i got my first hit on UpWork that i had at my $150/hour price. it was a guy who wanted to know my experience with the linux kernel and Java JNI. as often happens in these things, his initial request was not very fleshed out and it took a bit of back-and-forth for me to figure out exactly what he wanted. he basically wanted a Java app that will monitor another Java app and send a term signal to the monitored app when the monitored app was in a system call.

it wasn't easy to get that out of him and it was due to my supplemental study (mainly through Wikipedia) that i was able to communicate clearly in order for us to figure out what needed to be done.

that alone tells me i learned valuable stuff in this course, but it's not a complete win because i didn't learn it through the course materials.

'Exemplary' for identifying what concepts should be studied
'Needs Improvement' for teaching those concepts
'Needs Improvement' for testing the learning of those concepts

1 comment:

  1. In a state of insomnia brought on by a chirping smoke detector that I do not have the required 9 volt battery to silence, I went down an internet rabbit hole which lead me to your Blog. I've read several posts as I've failed to slumber and enjoyed them. in particular, i missed your refusal to utilize capital letters. Anyway, I just wanted to say hi. I hope all is well for you. -ruup

    ReplyDelete