Wednesday, December 30, 2015

Thoughts on teaching Java at home

My son is taking his first Java programming course in high school (an Advanced Placement [AP] course).  Since I am primarily doing Java work most of the time now, I figured some father-son bonding would be fun to do while teaching him some Java stuff.  The result so far has been fun at times and I think he has learned a bit but also causes me to pause to think about the timing and process a bit along with other items. 

Some thoughts/considerations/findings are:
  1. I question how much I should try teaching him in this situation.  Part of my reasoning revolves around the fact that his class is moving pretty slow (maybe the memory of how slow my first Pascal course was has faded) and the content is somewhat limited with focus mainly around the requirements of the final AP test.  I don't want to distract him too much from his teachers plans due to the chance he may not focus enough on the exam requirements.
  2.  I've never taught anything formal before and have no training as a teacher.  This in and of itself makes things difficult but I find it even harder when combined with how long I have been programming (using Java and other languages).  All my knowledge and experience helps me in day to day work but I find it hard to identify material at an appropriate knowledge level for someone just starting out. It seems that teaching someone that already knows the language fundamentals should be easier than starting from a nearly blank slate. There are three major areas where I run into this.
    1. Language features/syntax
      1. Try explaining functional aspects of Java (lambda functions) to someone that is just finishing talking about 'for' loops in class.  If you come up with enough examples you might get past the initial glassy-eyed stare but it will take a while.  I am thinking that after his current class, many of the more interesting ideas should be easier to grasp or at least provide an easier basis to start explaining things.
    2. Data structures
      1.  I work with reasonably complex problems and utilize many of the of common collection classes constantly. In examples for my son, I am finding it hard to limit myself to simple arrays.  I keep getting drawn into explaining the fundamentals of data structures along with the various collection classes.  Unfortunately, my main goals usually are not about data structure fundamentals.  It is almost funny as I pondered how to explain Java references and I keep wanting to utilize C/assembler/machine details to contrast them [aka pointer, memory address].  This may work if someone already knows C or understands the underlying hardware (things like Von Neumann or Harvard architectures) but I found myself on a slippery (but fun/interesting) slope trying to find the appropriate wording.
    3. Examples and Design considerations
      1. Coming up with an extensible example that starts like "Hello World" and gradually includes new language features/syntax while demonstrating (reasonable) design skills is likely harder than my day job.  While I may cringe on occasion at examples my son has from class, I am starting to understand why they are needed at times.  It is more effort and time to teach design skills concurrently with language syntax and usage.  I would love to come up with a really nice example program/project idea that scales from day 1 all the way through the Java 8 changes AND demonstrates a reasonable design strategy.  Maybe something like that is possible or already exists but I don't have the time to create or find it.
Another impediment which I wouldn't have anticipated as one is the use of an IDE (Integrated Development Environment).  I use Eclipse about 99.9% of the time.  In the high school class they don't use anything more than Notepad++ (and just plain notepad at times).  The impediment in this case is not their use of Notepad++ but my reliance on Eclipse.  I find that when I work on some toy ideas with my son (not using an IDE), I do miss silly mistakes now which would be obvious as you type in Eclipse.  With code completion, I don't usually have to memorize the specific order of parameters for most things, etc.  If you take away the code completion, it does slow things down and I find myself providing parameters in the wrong order at times and making other mistakes.  The problem is obvious when parameters have incompatible types but otherwise it does take extra time debugging that type of problem.  Debugging and analyzing error messages are good learning tools but it is somewhat an annoyance when that isn't part of what you are trying to demonstrate.

If I was a real teacher then there are surely many resources to help with planning a real curriculum but doing this type of thing mainly spur of the moment is not easily done.

Now that I mentioned a number of impediments, I should mention a few resources which I think have helped teach my son (and maybe my daughter later).  I think a couple old "Java in a Nutshell" books helped a little - he can thumb through them as needed and put bookmarks anywhere he desires.  I think an even better resource is my Java 6 certification book/study guide.  I don't think he has spent a lot of time with it yet but the fact that it contains oodles of correct/incorrect small code samples with descriptions of why they work or not should be a big plus.  If he starts at the beginning, with a little effort he should be able to pick up many of the individual concepts presented.  I probably won't quiz him with the sample test questions though.  It make take him a while to mentally put it all together but I think it could be a really good start.  If he digs into it more thoroughly I will document what i find.
 
The following is more of a side note related to myself.

On that note, after giving my son my Java 6 certification book/guide, I went ahead and picked up the "OCA Java 8 programmer I" and "OCP Java 8 Programmer II" study guides.  In the past, I had considered taking the tests but just never found enough time to fully prepare (cram for realistically).  There were API's that I rarely, if ever, need/use that I would need preparation (Threading comes to mind).  And my earlier comments regarding reliance upon an IDE like Eclipse resulting in a bit of laxness in reading what I write still applies.  I'm not a real fan of reading intentionally misleading and ugly code but I understand reason for it in the context of the certifications. Even so, the study guides are still really useful though because they do tend to describe things which might be uncommon but useful or items which you may have forgotten about.  I'll admit here that I had somewhat forgotten that you can specify "default:" in a "switch" at a location other than the end of it.  I, as a standard practice, always specify it at the end of the "switch" - I don't remember the last time I specified it anywhere else.  So the study guides provide good examples of valid syntax which you may not utilize due to existing organizational code standards or similar reasons.  There are also items covering new features which you may not be (highly) familiar with. 

I'm going to put more effort into actually getting the OCA certification in the near term.  I think this will be a wise choice related to employment over the next 4-6 months.  Hopefully I can find time for the OCP certification as well.  It appears to be increasingly import to differentiate oneself from others.  I just don't want to take away too much family time in the process.  Some prayers will hopefully help in setting priorities. 

Thanks for reading,
Scott

Sunday, December 27, 2015

The Deck - Saga continues

The Deck - the saga begins

Over Thanksgiving week I made some progress on the deck - all 6 holes dug and concrete poured.  I ended up working on it spur of the moment because the weather was good.  This was more work than I had hoped.   I didn't have time to get a cement mixer and hand dug the holes (about 24-26" deep).  I purchased 3 12" x 48" long concrete tube forms and cut them in half. I took scrap 2x10 from the old deck and made 14" square (interior) by 6" deep frames.  I placed and filled the open frames with concrete first. Prior to this I made plywood tops/covers (cut in half for easier removal).  I cut round holes in the tops and tacked the tubes to them. After I filled the frames I added the cover/tube combo and filled them.  After 1-2 hours, I put the anchors (j/l-bolts) in the concrete and smoothed it again.  I ended up using 25 80lb bags of 5000psi high early strength concrete.  I could have probably gone with a lower strength concrete. At this point it was the Friday after Thanksgiving and I needed to wait around 3 days for the concrete to cure.

Here are a variety of pics from the work.  Probably leave some of these artifacts on a disk for the new owners of this house once we sell (hopefully this spring).



Below is the hardware used to meet code for the railings; either one of these is used directly with each rail post or 2 are used on either side of a post (to joist or blocking depending on location).


Below is the box of bulk aluminum balusters I purchased from Lowe's. Buying the 64 packs was cheaper by a bit ($2 each versus around $2.50 from what I remember). There were other places on the internet with cheaper prices but I figured Lowe's was fairly reliable and quality should be reasonable which left me with less worries.  The only thing I *may* have done differently though would be using a face mount baluster - I think that would be easier to install than what I will have to do.  The face mount balusters may be more expensive though - doesn't really matter to me at this point since I am pretty much committed to my plan so I didn't look into it.

 Here are the connectors for the balusters (one shown) - they come with screws.

Here are the connectors for the balusters on the stairs.

These HeadLOK conectors were used to tie the 2 2x10's together to make beams and I also used them to connect the front rim joist to the other joists (3 vertically through face of rim into the end of each joist). I am able to sink these enough that I should not have a problem mounting the rail posts.

I used some #10, #9 and #8 structural screws for the various hardware connections (post bases, post caps, inner flange joist hangers, full hurricane ties, single side hurricane ties).  My links may not be to the exact ones I used but they are close - make sure you use Triple galvanized/G185 coated items.  I had some trouble sourcing hardware (finding it in-stock) so I had to shop around or order online for a few items.

Below are the collated screws for the screw gun I bought (shown farther below).  This is for the decking mainly.

I used these LedgerLOK screws to tie the deck to the house for lateral support.  In my case, the ledger isn't transferring any load to the house foundation but simple stiffens things up for lateral support.

Here is the collated screw gun I picked up.  I have not tried it yet.  I skipped the cordless model since I don't see heavy use of this after the fact and batteries tend to be dead (either discharged or just plain unusable in one prior case) when I do need to use tools.
Here are the concrete tubes I used.

Here is my first batch of concrete.



I continued working on a model of the deck using SketchUp 2014 (free/non-commercial version).  I had tried using this before and found it somewhat painful to use.  I had wanted it to work differently than it does.  I finally broke down and watched some how-to videos on it from their site and things improved.  There are still a number of things I don't like about it but for a relatively simple project it works pretty well. It doesn't look like they offer the free version any longer (I didn't check very hard) so I don't know if the newer versions work better.

Below is where the design is at right now.  It is a basic freestanding design using drop beam construction.  I did attach it to the house for some later support (which is in the building code). It is mildly over-engineered by choice and should last a very long time.  There are still a couple of minor adjustments to make with some due to the hardware for mounting rail posts.  I'll mention that more later.  I also don't have the steps included yet; I am still working out the details for that. According to code I will require more concrete work for the steps.


I took a couple days off to work on the deck before my parents arrival for Christmas. I was able to prep a bunch of stuff but rain prevented real progress. Now it is nearly Christmas and my parents are here.  My dad has helped out a ton to get the posts, beams and most joists in place.  I am grateful for that extra help - it is just a difficult time to have friends help with all the holiday planning and such going on.  Even with the extra help, I wasn't able to get as much done as desired since a huge amount of rain moved in.  It has been raining for 2-3 days now and our clay soil is impossible to work in; you sink well over an inch and it is slippery as can be.

So far there have been various challenges that we were able to overcome for the most part.
  • One of the early challenges was getting the 16' 2x10's home - for that I used our 5x10 trailer and made 2 upside down u shape pieces that fit against the side of the trailer and go 24" high to the top of the sides.  I bolted those to the sides of the trailer.  I took the tailgate off the trailer which then allowed my to hang 3' of the 2x10's over the front and 3' off the back of the trailer.  I used tie downs wrapped around the wood (centered in 2 piles) and attached to hooks on the trailer walls to keep it from moving.  This worked really well (and safe) - no problem with the wood hitting the truck while centered.  
  • Another early challenge included unavailability of various tools or hardware locally (without ordering or driving an hour or 2). 
  • After reviewing the tension ties along with my model I realized that the final 2 joists were going to be too close to allow the tension tie to fit between them.  I ended up moving the last interior joist flush with the exterior joist to provide the room.  I'm hovering around code compliance on the 16" OC spacing but it is real real close. The good news is this should strengthen the stair stringer connections quite a bit.
  • We also had some difficulty getting things squared (quickly) - this was due to both differences board to board and a huge amount of rain which caused some warping in number of places.  A large bar clamp helped get some pieces in the desired location before screwing together. 

The only bad thing so far was tweaking a knee while doing the concrete work.  Doctor indicates it is probably the meniscus and that I have about a 50% chance of it healing on its own.  After a cortisone shot the pain is lower at least.  It is slowing me down a bit but things still need to get done so..  As long as God grants me the strength, I'll continue working through this.  My bigger concern is my father overdoing things.  My parents have now headed home and I think my dad survived ok - but pretty tired.  Praying that the back-pain won't be too bad after he gets home.

I figure one more blog entry will cover the remaining work.  Off to Lowe's to measure the stair stringers so I can add it to my SketchUp model.

Hope you had a wonderful Christmas and were able to celebrate Jesus birth wherever you may live. I know some readers live in places where it is crime to worship Jesus and punishments are atrocities against mankind - my heart and prayers are with you.