Insight and Perspective

There was a flurry of debate on the internet the last few days about a blog post by Jeff Atwood. In it he made the argument that you shouldn’t desire to learn to program because it’s hard. And that we don’t need more mediocre programmers. And that you shouldn’t want to write code at all. Let’s say it didn’t get a positive reaction. 

http://influencehacks.com/why-i-desperately-needed-to-learn-to-code

This is a blog post that seems to be in response to that. I believe the lessons learned listed in this blog post are worth more than the whole debate about learning to program or not. 

I like the list. I like the perspective gained. I wish this was more pervasive.

OpenShift

Created an OpenShift account tonight. The application creation is pretty simple, but the cartridges that are available are pretty limited. And the Ruby apps seem wanting at only version 1.8.7. Don’t understand why that’s the case and why not 1.9.2? It seems to me that with RVM the version should be a choice. But who knows, there is likely an architectural nuance that forces their hand to limit it to 1.8.7.

Regardless it’s a rather clean and simple setup. The rhc client is nice and it’s extremely cool that the project starts with a template (at least the Node.js application I created did). The project template has README files documenting available cartridges and hooks for build/deployment cycles (nice touch).

I’m a big fan of Heroku. I have an account there too. Now if I’d only build applications to host on each of them :)

Changing how CSS works: Hitch

One of the most popular technologies in web development today is CSS. It’s a language that controls the presentation of HTML pages to browsers. It’s also one of the most complicated languages to truly master. CSS has a deceivingly easy syntax and rule construction, but is as close to any imperative/declarative language as can be in its execution.

To further complicate things, web browers (Chrome / Firefox / Opera / Internet Explorer) all treat the rules of CSS differently. Even though there are standards written on what should happen for certain features and constructs, they still each have their own nuances. Seemingly simple things like rounded-corners are handled differently by a few of these browsers.

Now you can reverse that paradigm: Hitch

Right now browser vendors (Google / Microsoft / Mozilla / Apple) control how CSS works in the browser you’re using. There are utilities out there that make writing CSS easier and better, while trying to minimize these vendor differences. For example, Sass is a CSS superset in which you can write CSS with certain syntactical features and Sass will re-compile your Sass into standard CSS and specifically for each vendor’s nuances. It does not however change how CSS works, and relies on the browser’s current functionality for CSS features. There is also LESS – very similar to Sass. (These are both wonderful utilities and you should use them.)

Hitch switches the control of the web page from the vendor to the developer. It provides true functional changes via CSS, not just syntactical extensions. The way Hitch does this is through a JavaScript API that hitches onto the execution of CSS, intercept it, change it and then let it continue. Specifically it’s designed to extend the CSS pseudo elements and pseudo classes by making them more like filters.

An Example

Imagine you need to style the links in your web page according to an information architecture where the nested level of the link’s URL path is important. For example the URL path /2012/05 is important because it represents a month and /2012/05/05 is important because it represents a day. The markup for these is very simple:

<a href="/2012">View 2012</a> 
<a href="/2012/05">View May</a> 
<a href="/2012/05/05">View May 5th</a>

With standard CSS there is no way to apply a style based on the path nesting. But with Hitch there is:

/* links with /-- should be black */ 
a:-links-local(0) { 
    color: #000000; 
} 
/* links with /--/-- should be blue */ 
a:-links-local(1) { 
    color: #336699; 
} 
/* links with /--/--/-- should be gray */ 
a:-links-local(2){ 
    color: #333333; 
}

With the Link Pseudo Class filters you can specify a style for any number of nested paths and even base the style on whether the path is local to your web page or external. The CSS rules are subtly different (but still very standard) while the functionality is extremely new and currently not doable without Hitch.

Not only does Hitch come with a few built-in features like filters, widgets and constants – it is also extensible by you. And this is where it breaks the current paradigm:

Now you can control your CSS functionality and not be bound to a vendor.

Note: Hitch is a rather new project. It has amazing potential and also a few things yet to be built. It’s open sourced and available on Github: https://github.com/bkardell/Hitch/. Fork it. Change how CSS works!

Things I’m working on

I’m listing out a few things that I’m going to spend more effort working on in my free time. Some of this I’ve already started. Most of this is entirely new to me and I’m treating as education.

Parsers

There are tons of parsers out there. And frankly the field is quite big. But honestly I’m pretty humble about my expectations. I created a project called Peggy.js and I hope to get some activity in that library. I’d like to be involved in the many web projects out there that require their own grammar/parser. What I’m learning so far is that nearly everything in software development is some form of parsing (more than one might imagine). And it can be very difficult.

Sentiment Analysis

Sentiment analysis is another field that is rather big and actually becoming quite popular (or trendy I suppose). To be honest, I’m not even sure that the field has a name like that. It’s basically the study of emotion/attitude/opinion in content users submit to web applications. At least that’s my definition. Essentially I’m interested in the Front-End perspective. How do web/mobile applications handle sentiment analysis? Is there a way to do so on the Front-End that will add better user experience? Or is it really only suited in the post-content-submission perspective. I’ve started (I use that term very loosely) 2 projects for this. One in Ruby and one in JavaScript: Sentiment.js and Altimeter. I’m really hoping to capitalize these projects as not only learning experiences, but potentially career altering opportunities.

I have a ton to learn. I’m very interested in these things. Hopefully something will come of it.

Nothing goes as planned

This last week has been great and exhausting. It has reminded me that nothing goes as planned.

When you’re a kid you plan on big things. You believe in big ideas. Some time later you give up on a few of those. Then as age creeps up on you, it starts to remove the gloss on those shiny plans you had.

It’s so obvious, and yet very hard to really accept. Plans are meant to be broken. You just can’t control life. Fate or higher power, call it whatever you want, just understand it’s not you.

Willie wrote once: “We are not in control. And that’s Ok.”

If you let plans slip, and allow it to be Ok, life is much easier to understand. Otherwise you can waste a lot of time being frustrated and confused.

This week a one or two things didn’t go as planned and it caused me a lot of stress and frustration. My patience got really thin a few times. But I can look back to this week and be happy, because while my plans changed my life didn’t.

And that’s Ok.

1 week down

Finished a week of vacation. I accomplished most of what I wanted to do. Nothing for example was something I’d hoped to achieve. Check. There was a list of other things I’d hoped to do, and I did a little bit of each. I have 3 more days off. I think I’ll try to cram that list into these last few days.

Vacation

For the first time in a very long while, I have more than a 4 day weekend off of work. In fact I have more than a week. This weekend we’re going to Havasu to get out on the boat. After that however …

Just a quick list of hopeful things to do while I’m not working:

  • Get recpopulace out the door to beta
  • Finish porting of the Ruby Gem Citrus to JavaScript
  • Add 2 more projects to my Github account (citrus port and something else)
  • Spend a day with my sister and nephews and niece
  • Write a few more blog entries on something other than programming
  • Get A/C in the garage – money permitting

I’ll obviously spend a lot of time with the girls. And I’ll have the obvious chores around the house. And now that I’ve created a list I feel like I won’t have enough time.

Geez.

:)

Position yourself, then say “yes”

This morning my reading led me to 2 different blog posts about successful people. The first mentioned it was about becoming successful by actually doing something. The statement was when you decide to do something, opportunity comes.

The second post was about positioning yourself for success instead of relying on skill, luck or some other form of intangible. The statement was not everyone has equal skill or equal luck, however everyone can show up and position themselves.

I can relate to all that. I’ve done that a lot in my life. My baseball career in college was strictly positioning and doing. I didn’t get a scholarship right away. In fact I didn’t get recruited. Nor did I even get invited. Rather I just showed up to a coaches office and said “I’m Clint from Parker – I called earlier.”

Yes. I called coaches in Kansas (with the help of my high school coach: Thanks Coach Flax). I called and said I want to play. I was an average ball player from a 3A school in a small town in Arizona. Most phone calls ended with coaches saying sorry no thanks. Most had full rosters. Except for two teams: Dodge City and Garden City. They both nonchalantly said “sure come on out.”

I packed everything I owned into the back of the S-10 I had and drove to Kansas. I had $120 for gas and food. I had never been further east than Phoenix. I didn’t even really have an appointment with either of these coaches. I just knew they would be trying out other guys that they actually recruited in the next week. They said I could show up and try out.

The try outs were pretty lopsided. I wasn’t ready. I was scared. But I wanted it bad. I threw myself all over the field. Literally. I was the only player that had dirt on my jersey. I didn’t get a single hit during batting. I fouled off everything. I couldn’t see the ball. During strength and endurance I decided that I was going to be noticed. They noticed me because when it was all over I was puking all over the dugout.

Dodge City offered me a spot. Not a real spot. A walk-on spot. That meant they would let me continue to try out. But it came with the best circumstances. Coach called a financial aid office, then called the housing office and before I knew it I had a Pell grant, a loan and all my dorm room reservations set. I had school paid for and a place to stay. Over the course of 1 night coach had made all that happen. I didn’t hit the ball once in batting practice. But because I swung at everything and puked all over the place he felt I deserved another chance to try out.

I eventually walked on and got a full ride scholarship. I still have my NJCAA Letter of Intent. It’s the same letter that all of the “recruited” players sign. Same piece of paper. But I had to earn it over the course of a semester. Trying out every day.

That part of my life determined a lot of who I am today. It showed me that if I wanted something I could position myself to do anything. If I say “yes” that it means most of the hard work is over. Even in my work I do this. I get asked “is this doable?” and I usually say yes. Some people would say this is a detriment. I get in over my head quite a bit. In fact I fail quite a bit too. Most of the time the work is bigger than I originally felt it would be. But I work through it. I finish. Always.

And because I work through it, and because I position myself to be there, and because I say yes: I always win. I win because I get the experience, the knowledge and the opportunity. Others may see failure because I don’t hit the ball on the first at bat. I see success because I’m in the game.

Observations on expectations and praise

There are a few things I’ve observed recently that have made me understand work relationships a little better.

Regarding expectations, I’ve noticed that those who are expected of and feel they deliver on those expectations often get disappointed. This is usually due to the fact that what they delivered was expected and therefore not praised as some work of heroics. Or maybe they weren’t praised at all. Generally: do as you’re asked and nothing happens.

Put another way, those who continue to deliver as expected are generally asked to do more of the same. And with each delivery less and less praise is received (if at all). This is strictly because it is expected to be done. However this disappoints those who deliver on expectations because everyone could use a “pat on the back”.

Now consider those who deliver more than expected. This often receives some form of “praise”. Naturally praise is given when “above and beyond the call of duty” work is performed. For those who did the work ,this feels great. And sometimes it’s motivational. People will want to do it again.

Let’s then consider when “above and beyond the call of duty” work is performed again and again. That creates a new normal. A new expectation level. Above and beyond is now expected. Praise then wanes. Disappointment brews in those who do the work. This demotivates those doing the work. Sometimes indignation creeps into those doing the work.

In all cases bad blood is created between those asking for the work and those doing the work.

In my opinion there are things that each side can change that may prevent disappointment and bad blood.

For those doing the work: do it for yourself – not for praise from others. Remember that work is what you make it. If you are lucky enough to really enjoy your work, leave it at that. If you don’t enjoy your work, well that’s an entirely different problem. Expecting praise will lead to disappointment because it’s never enough. Face it, people are busy and what you do in the big picture is yours. No one else is going to really appreciate your work. Learn to praise yourself and learn to need only yourself to feel good about what you do. If you are happy doing exactly as you’re expected, good for you. The world needs more of you. If you want to do more and go beyond the call of duty, good for you. You should be proud of yourself for being a person who wants to do more. But in either case don’t get ruined when others don’t provide you some form of recognition. Recognize yourself.

For those asking for the work: remember what people are sacrificing. At work it’s easy to say that within the window of 8-5, people are willingly giving up life’s pleasures such as free time and leisure activities. But don’t forget that there are emotional and psychological sacrifices made all the time. Pride and ego are big things, and you shouldn’t inadvertently stomp all over them by simply forgetting to throw a little praise around. If people are delivering on your expectations, remind them that you know. Let them know that you’re paying attention. Rub their pride a little with an easy “thanks” or “good job”.

“No good deed goes unnoticed”. Bullshit. They do all the time. So keep doing those deeds for yourself and learn to notice others doing the same.

I’m not Clint J Hill

I have the fortune of having a historical figure’s name. However I’m not Clint J Hill.

I’ll never be #1 in a Google search – and I’m Ok with that. But for those that have left comments here at my blog believing I’m the other Clint J Hill, I apologize. You’ve found the wrong Clint J Hill.

The 1 big tip – I don’t go by “Clinton”.