Thursday, November 5, 2015

Secret knowledge and the magic of color

Today's project is css.  Conceptually, it's pretty satisfying to see how the sausage is made.

One piece addressed in passing in the codeacademy track is hexadecimal color notation.  (For those who don't know, you can specify an exact color using a six-digit number, with each digit being 0-9 or a-f.)  The tutorial gave a few examples of different colors (#000000 is black, #FFFFFF is white, etc).
As different color codes were used on different exercises, I started wondering who decided which colors went with which code.  Was it a committee?  The first coder who designed the system? Coding and the physical sciences share a feature here: whoever got there first got to name things.  Or, to be more precise: whichever representative of the Western science paradigm got there first was able to pick the words that other people of the same paradigm used.  The people already living in the area probably already had a perfectly suitable name for the thing, after all.

The result is a system that is partially logical and partly arbitrary.  When you're a beginner in any field it can be difficult to tell a priori which things have a reason and which are "because fuck you, that's why."

One benefit of a life time in science is developing a well-honed intuition for the inner logic of classification schemes.  The color hex code seems arbitrary at first glance.  What naturally connects numbers and colors, after all?

The connection, of course, is the pixels on your screen.  Each pixel needs to be an exact color, and the technology is such that each pixel is a blend of three colors: red, blue and green.  Two of the six digits in the color code signal the intensity of red, two signal intensity of blue, and two for green intensity.  White light is composed of all three at equal intensity.  Black pixels have all three at zero intensity.  This article, the first result when you ask google for "logic of hex color names," lays it out simply and beautifully.

Yes, that's all basic color theory and I'm sure it's painfully obvious for some.  It's not something I'd ever come across independently.  Or so I though until I remember shopping for a second monitor.  Curiously, many offered "true rRGB" with 16,777,216 colors. That seemed an oddly specific number of colors, but wrote it off as another of those artifacts. 16,777,216 is also 16x16x16x16x16x16...which is all the possible combinations of the 6-digit hexadecimal color code. It's also 24 bits (=2^24)

As excited as I am for new trivia, the deeper discovery is that my own intuition is still working.  It's disorienting to be in a new field and learning new terminology and new patterns of thinking.  It feels good when the patterns start to appear.

Wednesday, November 4, 2015

The magic of HTML...or, So THAT'S why webpages looked like that in the 90s

It occurs to me that one benefit of having lived through the entirety of the Internet Revolution(tm) is that I can see where many of these tools came from.

Today's project is the html and css track on codeacademy.  The incredibly ugly, blocky, simplistic styling available with just html really brings back some memories.

Tuesday, November 3, 2015

CodeSchool Goals, or: Being Real

"In 20+ years of professional coding, I've never seen someone go from novice to full-fledged programmer in a matter of weeks, yet that seems to be what coding academies are promising, alongside instant employment, a salary big enough to afford a Tesla and the ability to change lives." -Stephen Nichols

The whole article is strongly dismissive of code schools.  The writer is a veteran programmer who cites a long history of teaching and programming.  His larger point is that code is like a foreign language where the natives (computers) have zero tolerance for ambiguity.  Teach yourself using free resources, he says. At best, he says, code schools are a way of uncovering people who have a native talent but simply lack exposure.

So why am I going to code school, and going in debt to do so?

The short answer is: mentorship and the gap between novice and journeyman.

I'm not new to technical fields.  I know from experience that when you're new to a field it's both intensely confusing and a target rich environment.  There is such a wealth new material that, at first, everything is fodder for the brain.  New words, new ideas, new paradigms.  Lots of the new things are confusing, though, and it can be hard to fit the pieces together into a new shapes.  That's ok, though, since the first task is just to get enough pieces together to figure out where you're headed.

What do you do when you've hoovered up all the loose bits, though?  After six months of self-directed learning using code academy and a few good books, that's where I'm at.  I can write a simple program, I can apply for-loops and iterators.  That's as far as the beginners materials go, though.  How do I make the jump to professional-level, though?  How do I take those simple pieces and make something useful?  Or better, salable?  There are specs, but learning to translate technical jargon is a skill in itself.

I could break the code.  I know I'm good at solving puzzles.  How long would it take, and what bad habits would I learn in the process, though?  From what I've read, there's more to coding than writing code.  No one produces code in solitude.  Programs are too big and too complex.  Working with others means making your code readable, compatible, and interoperative.  That's not something I can learn on my own.

Perhaps more important is the mentorship aspect of the school I chose.  The few months I'll have will be short, but in all my graduate program I never had the chance to work closely with an experienced researcher.  At GoCode, I'll have a chance to interact in a small-group setting with instructors who really know the business.

So no, I don't believe I'll be a full-fledged software engineer at the end of three months.  I do, however, think I will have crossed the gap from novice to journeyman.  I will have learned some essential web development tools, and the means of employing them in a production-level setting.

I'm playing a long-term game.  I know very well that expertise is not acquired overnight.  This is the start of a life-long journey.  Maybe, in ten years, I'll be able to say I'm a good programmer.

Monday, November 2, 2015

Changing Direction

Today was a glorious day.  Like legions of the oppressed who have risen up before me, today I gave notice that I would not be continuing as an adjunct instructor.  Some day, I would like to write a treatise on everything that is wrong with the adjunct system.  For now, however, let us focus on new hope sprouting, incongruously on the threshold of winter.


My goal is to add web development skills to my existing expertise in teaching, writing and biology.  The choice of web development is partially interest-based, and partly practical.  It turns out that writing code is a lot like solving puzzles.  I haven't written anything big yet, but I've been using free tools to train myself in writing basic programs.  I can recreate the Fibonnacci sequence using a simple algorithm, translate a DNA or RNA sequence to amino acids, and create simple games (like tic tac toe). 

If nothing else, I'm learning to use tools that are ubiquitous in our world.  If I only gain a better understanding of why those tools sometimes fail, my time will have been productively spent.  I plan to go much further than that, though.  There is a vast territory of science education that we can make more interactive and intuitive.  Massive tomes of highly-specialized plant identification can be made more interactive and user-friendly.

I'll admit to a certain amount of naked selfishness, too.  People, reportedly, will pay money for coding skills.  At 41, following my interests has never paid much above poverty-level wages.  If I can marry something I enjoy with something that pays me well, so much the better.

Now, the how:

As of a week ago, I am a member of the GoCodeNow.org class of late 2015.  I've spent the last 6 months researching coding bootcamps (as the short-course intensives are called).  There are dozens, and more are appearing all the time.  I picked GoCode for it's focus on python (a language commonly used in scientific computing), small class size (3 instructors for 8 students), and a certain gut-level feeling of 'rightness'.  Most bootcamps are started by motivated and experienced coders who rapidly move into administrative/executive roles while hiring others to do the actual teaching.  When it works well, the instructors are skilled in both coding and teaching.  More commonly, you get one feature or the other.  In the worst case scenario (which is all too common), you get canned video-based lessons delivered to 40-person classes, and interactions are with barely-trained TAs. 

At GoCode, by contrast, the founders are the teachers.  In reaching out to alumnae, it's clear that they are continually refining and adapting the curriculum (this cohort will incorporate more javascript along with full-stack python/django of previous classes).

(As a side note, I reached out to participants in my top 5 bootcamps via LinkedIn and other platforms.  80% (4 of 5) alumnae responded to my request for information.  No other school had more than a single response.  That level of repsonsiveness alone augurs well.)

Did I mention that GoCode is taught retreat-style...in Costa Rica?  I would have had to relocate for any code school I chose (online is an option, but not for my learning style).  The cost of living in Costa Rica is lower than most other locations, even including air fare ($400 RT from Dallas?!  Why haven't I gone already?!)  The school is in a beach side condo on the north west coast.  No commuting, no night life, no tempting cultural events...but plenty of chances to relax between work sessions. 

Yay vacation!  Actually, no.  I checked with the alumnae, and they all agreed that the work was intense - 60-80 hours a week for the 8 weeks in Costa Rica, plus 20-30 hours per week for the month prior.  The point of this approach is to combine hard work with an otherwise low-stress environment.  For me, it was the added element that was attractive.  I've never been drawn to purely practical pursuits, and thinking of this career change as an adventure makes the risk and uncertainty much more palatable.

And yes, my anxiety is through the roof with this.  I'll be finishing the semester out, and then taking off to Costa Rica in the first week of January.  I'll be living mostly on borrowed money and bulding up a signficant pile of debt to do this. When (not if!) I find a junior developer position, I should be in the 50-60,000 range in Dallas.  Even at 40,000, I'd double my current salary and pay back the code school debt in a year.  The bright side of making so little money currently is that my opportunity cost of code school is negligible.  The scariest part, though, is that GoCode is not as directly integrated into a hiring "pipeline" as some other schools.  The previous cohorts of students from this school made it work, though, and I will too.

So.  I'm excited to make things.  I'm excited to escape the adjunct netherworld.  I'm excited for Costa Rica.  Onward!