Wednesday, March 30, 2016

Start on what you're going to ship on

I've seen it a thousand times before.  Don't try to use jboss/glassfish/websphere/apache/proprietary web server now, that will take forever to set up.  You need to bring up services for the front end guys to start working!  To be clear that's more often than not myself saying that.  Each time I think I've learned my lesson.  Once in a while I even did.

But once again I made that old mistake.  I was running on plain node server instead of passenger/nginx.  Changing over late in the game was nasty and caused downtime.  Luckily no code changes necessary, but the change slowed the entire team.  Luckily we were in a good place schedule wise so no harm done, but let this be a precautionary notice:

Start on what you're going to ship on.  No-one gives a shit if it takes 3 extra days to get the server up the first time.   They do care when they're in the last couple weeks of a project.

Thinking about it there were 2 mistakes made in this case.  I was learning a new stack.  I didn't know that passenger was a thing until 2 months into the project.  I should have pumped the brakes and made the change then because that would have been better than late in the game.

Wednesday, July 9, 2014

My Bro's Going to Be A Programmer! Episode 1: The Soft Things

I'm reviving this blog because I found out recently that my brother Jake is going into the programming field this fall!  I couldn't be more proud of his decision to explore this field and was thinking of all of the bits of information that I'd like to pass on to help him on his journey.  The problem is that if I were to spout them all at once it'd look like a Cairn Terrier trying to drink from a golf course sprinkler.  So instead Jake, I'm going to leave this right here.  For anyone else who stumbles in, good luck in your journey!


The most important attribute that you're going to need in your journey is persistence.  Ridiculous persistence.  There will be times early on that you will spend inordinate amounts of time trying to find a silly bug or error in your logic.  This will not go away.  Just today I fought a problem for 10 minutes that had to do with a misplaced exit statement in 5 lines of javascript.  This was an easy one, and I am far from a novice.  There will be times that you will spend hours, days or possibly even weeks trying to track down a problem.  Most of the time it will be something minor you can work around in a few characters or a few lines, but there will be other times other times where you are so terribly off on the wrong track that you'll have to rewrite large sections of your program.  At all times you must persist!  Fight through it.  Take a break and come back to it, but always come back.

Check your ego at the door:

You will be wrong, or at least less than optimal, so very often.  There is rarely one right answer to any given problem and many will believe that theirs is the best answer.  Sometimes they are right, and sometimes they are convincing.  These two things are not mutually exclusive.  Even instructors give bad advice.  Even novices produce eloquent solutions.  Evaluate all solutions on the merit of the solution regardless of source.  Apply this doubly to yourself.

Don't fall in love with your code:

That part that I mentioned about being totally on the wrong path:  it happens.  A lot.  Get used to it.  I read somewhere that you shouldn't fall in love with any of your code, and that is solid advice.  You should rarely assume that you've found THE optimal solution to any given problem.  Don't allow any work that you've done to block any work that you need to do.  If something is making the next task difficult, it will probably make the task after that even more difficult.  If something needs fixing, right now is the easiest time to fix it because when you build on that crooked brick the whole wall will lean.  Taking down a wall is a whole lot harder than removing a single brick.

Learn the rhythm of learning:

Progress when learning to program is anything but linear.  You will have larval times when you consume gigantic amounts of information about programming or an individual sub topic.  You will read book after book insatiably.  You will write things that you didn't think you could ever wrap your head around.  You will absorb new languages like a sponge.  These times are so very enjoyable!

There are also plateaus where you don't feel like you are going anywhere.  You may not feel like learning new things.  Or you might try and nothing seems to click.  Your confidence will sag and you'll feel like giving up.  These times suck.  The cause could be just a bug in your wetware, and taking a break and coming back to it is sometimes the best solution.  This time a weekend away or more is needed instead of a coffee run.  Other times you may be suffering from a confidence issue and you are moments from a solution.  Learning to tell the difference is a matter of experience.  Take it on faith that either way this is temporary and you are about to hit the next phase:

Breakthrough!   This is the moment when the dam breaks, the code compiles, the angels sing, the promotions come out...all of the above or something else entirely.  This is the hit that keeps us coming back!  Celebrate these times and cherish them for they are fleeting.

Learn about thinking:

The more you understand about how your brain works, the more you understand how to work with it.  Don't try and cram or force as you will lose this battle.  Learn to take advantage of the way your brain works naturally in order to get the best results.  Some people plan meticulously then execute.  Others dive into problems and plan after they get an idea started.  Some work better at night, others in the morning.  Some like music on, others wear silencing earphones.  Expiriment and find what works for you.  Read and learn what works for others.

Have fun!:

At the end of the day we're kids playing with fancy toys.  We don't till fields or fight enemies.  We're just star stuff doing some future shit.

Episode 2:  Learning Tools

Monday, March 31, 2014


I'm testing the release patch for Cleo's newest software offering as we speak.  And it looks good.  Waiting on pins and needles for our QA guys to do their thing and give it the official ok.

This feeling never gets old.  I love shipping software!

Thursday, October 17, 2013

Why the Hell Are We Teaching Excel To 11 Year Olds?

So my daughter's computer class has progressed now from typing Word documents to Excel spreadsheets.  What the hell does a 6th grader need with Excel?  Is she realistically going to balance her piggy bank with a complicated spread sheet formula?  Or is that meant to inspire her to enter the Future Excel Drones of America(c) club?

When I was in 6th grade I was learning HyperCard.  We were animating stick figures and making choose your own adventure decks.  You know, the kind of things that are appropriate for a 6th grader.  In the process the groundwork was laid for my programming career.

So seriously teachers, administrators, boards, pta's and all others involved, let's let our kids be kids.  Teach them how to be curious and playful and intelligent.  There's a whole lifetime ahead to learn to do boring office tasks.  And besides, people like me are trying to eliminate those boring office jobs any way.

Saturday, September 28, 2013

To a Great Friend

On a day not unlike today almost 12 years ago you came to my wedding and made a profound observation that I've never forgotten.  When Megan and I lit our unity candle it went out as we walked away.  We turned around and lit the candle once again and the show went on.

Later that day you pointed out the metaphor that happened.  Megan and I had our plan fall through and silently went back and lit the candle.  You said "Remember that."  You pointed out that that's like life.  Something doesn't work out and you just go back and do it again until it does.

Today at your wedding you and Beth blew out your unity candle.  You handled it much the same way, just with a bit more humor than us.  Remember that.  That's like life right there.  And as long as you and Beth keep laughing you two will have a long and wonderful journey together.

Congratulations, Mike.  May love and laughter grace your life always.

Friday, August 23, 2013

Student's Perspective, Part 2

This post is in reply to Zuleyka Zevallos's comment on a previous blog post.  Perhaps I've gotten a bit long winded as I've violated Blogger's char limits.

Hello Zuleyka,

The problems with discussion boards in online course work go beyond a matter of poor moderation. The problem is structural in the way that discussions are conducted in online courses. I only have the experience of the schools that I've attended to gauge from, but these problems span 3 organizations that I've personally taken classes from.

The problem breaks down into 3 issues:

1. Technology. The boards themselves are based on dated BB technology, and much harder to follow than a G+/Facebook linear comment style or a tiered approach such as Reddit/HN. (Blackboard has undergone a major revision at my current school that I haven't yet had access to, so this may not be relevant any more.)

2. Student engagement. Whereas good online discussions happen all of the time organically within self selected groups, students are often engaged in coursework that they are taking simply out of requirement. I would guess that the forums of any MOOC classes out there would be much more lively than a required college class. The students of a traditional course are most likely not any less competent or driven, they just don't have the same level of intrinsic motivation as someone who pursues a course on a completely voluntary and relatively uncompensated basis.

3. Instructor Requirements. In response to lack of student engagement, the instructors and/or departments set forth grading rubrics to force students into the board for lack of a better word. They reward the desired behavior extrinsically thus further reducing the chance for organic conversation. Beyond just motivational factors, there gets to be such a volume of repetitive conversation on the boards that a student cannot parse it fast enough to meaningfully participate and often ends up answering blindly into the crowd to satisfy the rubric.

I understand the need for students leaving college to have interpersonal skills. As a professional working in the field for which I am currently pursuing my degree, I've been able to climb the ladder and get ahead of those who've completed their studies in part due to my ability to communicate ideas effectively. These are for the most part skills that I've attained through personal pursuit rather than traditional schooling.

I brushed upon it before, but the process of taking a course from the physical realm to the network involves a bit of translation. Like any transformed work there are trade offs involved. Consider the following two continuum:

Interpersonal interactions(traditional) ---- Independent Works Skills(online)
Instructor/peer face time(traditional) ---- Greater course accessibility(online)

With online course work, you trade off interpersonal interactions and instructor face time for enhancing one's independent works skills and greater course accessibility. I've developed a higher level of independent abilities because of the time that I've spent pursuing coursework without the classroom time. I was able to get within a few credits of acheiving my degree while attending to other life requirements because of the accessibility of online schooling. If you adjust the way courses are translated and have hangout discussions you are moving the needle on both of the gauges. You get back more of the interpersonal interactions at the expense of a minor amount of independent work skills. However to get that face time you are most likely going to have to place in time requirements, and for that you will pay a price in course accessibility.  This isn't to say that making such a change wouldn't be worthwhile, just that it wouldn't come without cost.

No matter what avenue a student uses to pursue a degree there are going to be skill and knowledge gaps when that student graduates. It will be up to the student to choose if and how to round their experiences through continued or supplementary educational opportunities. The challenges are different for online or traditional students, but that fact remains that a student should not consider themselves done with their education simply because they've attained a degree.

Thank you very much for having this discussion.

Thursday, August 22, 2013

A Student's Perspective Regarding the Quality of Online College Coursework.

The following is a response to Zuleyka Zevallos's post on Google+.  Because of length and potential benefit beyond the G+ discussion I chose to post here rather than comment.

As a student who's about to finish a degree cobbled together between in person and online classes, I can say that not all online classes are equal, or even close.  I've had painfully difficult online courses that taught me little and easy ones that have taught me much.  And every color in between.  It depends on a number of factors.

The best umbrella I can give for what makes a good online class is the manner in which the course is "translated" from the in person course work.  Every institution that I've been to attempts to copy the model of lecture, discussion, lab/in class work, and traditional deliverables.

The most beneficial courses spend more effort translating the lectures and labs than they do the discussions.

Good online courses I've had either limited the amount of effort spent on discussion boards or dropped the discussion requirement altogether.  In most cases the discussion boards in online classes are an echo chamber in which a rubric is fulfilled rather than a valuable discussion.  They serve largely to assure administrators that online students are getting the 'college experience'(which they are not) and to pad the student's.  Losing out on peer discussion is just part of the trade off of attending school online.

The effort that an online instructor may spend reviewing mandatory discussion is much better spend on lectures and lab work.  Courses that I've attended with recorded lectures are much more engaging than those without.  Courses without recorded lectures can still be very high quality if the instructor creates valuable lecture writings.  Some of my best courses did not include multimedia, just really good content delivered in a reasonably well written format.

Lab work is an often overlooked tool in the online instructor's toolbox.  Self guided lab content for minor amounts of credit encourages students to work through concepts that they will encounter in other coursework. This occurs in an example format much like an in person instructor will white board through concepts during a classroom discussion.  This is the part of the class room discussion that deserves the most effort to replicate.  Instructor to student interaction is more valuable than student to student, particularly when the peer content is contrived.