Tracking the upstream branch in git
This is more for me than for you. I love Git, but some of the most useful commands are incredibly idiosyncratic, involving various flags or punctuation ("git push remote :branch-you-want-to-remove" to delete a branch, anyone?) in order to carry out something that really isn't that uncommon to want to do.
Okay, so whenever I add or checkout a branch, I usually want to configure Git to know about the relation. Usually I end up opening up my .git/config file and adding the lines manually:
[branch "branch-name"] remote = origin merge = refs/heads/branch-name
However (as a quick google search will also turn up), as of Git v1.7, you can "simply" type:
git branch --set-upstream branch-name origin/branch-name
It doesn't save you all that much typing, I suppose, but I like not having to involve the editor in such a common task (and you can always alias it to make it easier to recall). That's it. If the act of writing it down doesn't force me to remember, at least now I can save myself the google-fu in order to re-discover the syntax!
The Curious Case of the Backwards Touchpad
There's one small change that comes with OSX 10.7 (Lion) that I'm finding fascinating from a user interface perspective: the reversal of scrolling direction with the touchpad. By default in Lion, when you move your fingers down, your view goes to the top of the page, and when you move your fingers up, your view goes to the bottom of the page.
Huh?!?!?
At first, this feels incredibly awkward, and I was thankful that there was a setting to reverse everything back to normal. I mean, of course when I move my fingers down on the touchpad, I want to go further down the page, right? Why would Apple dare change something so obvious and intuitive?
But wait a minute... the obvious way wasn't the way I scrolled on a touch surface like the iPhone or iPad and I didn't remember those feeling awkward. So I decided to experiment with leaving the reverse (back to "normal") setting off.
A few days later, and now the crazy new way of scrolling feels obvious. I suspected that it might, that it just felt odd because I was used to doing things the other way. But I didn't expect to be able to switch back and forth between old and new easily, which is what happened. I now hardly notice the change from a 10.6 default touchpad scrolling style to the 10.7 default style.
Why is that?
Well, the best I can reason is that both are pretty decent mental models. To make the "old" way feel natural, you simply imagine that the portion of a page that you see represents your field of vision, and to see more beyond the last point at the bottom, you need to move your "eyes" (via the touchpad) down. To make the "new" way feel natural, you move the virtual page instead of your virtual field of vision. So, just as you would read the bottom of a real page if you couldn't move your eyes, you push up on the "page" (via the touchpad).
You could make an argument that the "page" model is the more accurate one, as you can actually see other parts of the screen (and thus the page isn't really just out of your field of vision, but rather it's completely obscured by other elements on the page or the bottom of your monitor). If you think of it, it seems like a lot less work to push one element up in order to see the bottom of it, as opposed to pushing all the other elements down. And that's effectively what you're doing with the "old" style of scrolling.
It will be interesting to see if Apple manages to push overall change in this area. I imagine they're going to have a few things going against them: (1) the option they provided to switch back is probably easier than forcing your brain to recalibrate its expectations, (2) most people will probably mistake "habit" (or "tradition") for "natural" (it's not like we don't do this in other areas of life), and (3) the touch interface isn't directly connected to the display like it is with an iPhone or iPad. I think the last of these is why this "new" method feels odd in the first place. When the touch interface is the display, we have to construct even less of a mental model. Most of it's just there for us. With a touchpad and regular monitor, our brain has to do one extra translation step, and that's just enough to make it a challenge to switch models.
To be clear, I think both ways are completely valid and don't think that one provides a huge advantage over the other when the touch interface and viewing interface are disconnected as with a laptop or desktop. But I think it raises an important question that should be on the mind of anyone designing user interfaces: are you adapting the machine to the person, or are you counting on their ability to adapt to the machine? The former can feel frustrating and nitpicky and far more trouble than it's worth, but after you get it right, it's hard to imagine settling for the latter.
Shaw UBB Followup
While the proof is still going to be in what they do with these discussions, I was happily surprised at how the Shaw UBB session I went to played out. Now, it's important to remember the purpose of this sort of discussion for a company. I would be incredibly surprised to see any exact implementations come out of any of what was suggested, even though the folks running the discussion seemed very enthusiastic and encouraging over most ideas. One of the major challenges for any business is to figure out the right mix of choice vs convenience. And it was very clear from hearing what other customers had to say that ideas of fairness and what constituted acceptable use varied. Sometimes a lot. And I think that some of the ways in which they varied were quite interesting.
The one point that everyone on the customer side seemed to agree upon was that transparency was essential in the process. Shaw doesn't think that the figures from folks like Netflix and Michael Geist, regarding the last-mile Internet delivery costs being anywhere from 1-3 cents per GB, are quite right. I had in my head the 10 cent or less per GB cost of Amazon EC2 machines. As someone else pointed out, adding more capacity for Amazon in this case involves running a cable across a room, whereas adding more capacity for consumer internet potentially involves laying fibre over miles.
Shaw's own introduction was an interesting look into the challenges of providing residential Internet. They're looking at having to do around 500 "node splits" this year. What's that? Well, you have cable going into houses, but the signal starts to get distorted with cable after a short distance, so you have that cable going to nodes backed with fibre optic lines. Those nodes can only handle so much before another one needs to be put in. I'm not sure whether that's due to the fibre optic bandwidth itself or the processing capacity of the router. Regardless, at that point, if I remember correctly, they'll "split" the node, doubling the capacity and moving half of the residents to the new node. Those nodes go to more and more central stations along the way, which eventually link to the vast web of systems we all know and love. Now, putting in another node means obtaining permits, equipment, and not-exactly-plug-and-play installation. From the decision to "split" to the actual implementation it sounded like anywhere from 6-8 months until the thing would actually be operational. Certainly not trivial by any stretch. From their perspective, they're worried that next year it'll be 1000 splits, the year after 2000, etc. They saw a 60% increase from July 2010 to now. They feel this is unmaintainable.
I work with algorithms and software design. If anyone has a better understanding on the above, please enlighten me. I'm sure there are more than a few errors in what I picked up on.
So that's their side of the story, and they laid it out rather compellingly. I walked in with the impression of the big cable companies and telcos sitting on their thumbs, watching the money roll in and crying that the sky is falling. I left with the impression that they were sincerely trying to keep up with demand.
That said, there was a lot they didn't say and/or couldn't answer. Where did congestion tend to be a problem, for example? At the nodes or more centrally? Was it in the capacity of the fibre itself or the speed of the switches? It makes a bit difference whether you have to lay a bunch of new fibre to double capacity as opposed to letting Moore's law do it for you with better components at the nodes. Was it their efficiency in processing/routing traffic at the more central hubs? Problems there can be solved by smarter design and opening up to competition like the telcos have been forced to do. So while they laid out a compelling argument that it's not easy keeping up with network demand, there was still a lot of room for debate.
Back to transparency. At the end of the night, this was surprisingly the thing that they seemed to feel they would have the most trouble with. I had walked in thinking it would be the easiest. If you can give me numbers that I can independently verify, showing what it costs you to deliver me that GB, then I can decide for myself whether or not you're being fair. I don't have to just take your word for it. And I'm more than willing to pay for my usage by the GB if I feel I'm being treated fairly and you're doing everything you can as a business to be at your best. We know Canada has different challenges than countries where the population is more dense. Just show us the numbers. From their point of view, though, keeping those numbers to themselves plays a big part in business strategy. And in this, they seemed a lot like most more established businesses these days. Transparency seems natural to us, but it's alien and worrisome to an organization. Hopefully they'll find a way to satisfy our need to verify their claims with their need to keep some stuff to themselves, though, as that seemed to be the single idea that united almost everyone in the room.
Going on to the other suggestions...
I found that a lot of people shared my feelings that if you've got a certain cap and you're under one month (and they've demonstrated that they can easily measure that), you should be able to go over by that amount the next month and not be penalized. It's really hard to argue that one, and they didn't try. In fact, they seemed to like the idea themselves. From reading up on other sessions, it has been a popular one.
Raising the cap to something like 250GB was also suggested, of course. For most users, that was equivalent to saying "don't cap me", at least for now. That's of course where my cynicism rears its ugly head, suggesting that something like this would just be too easy for us and too generous of them, given their initial offer. But who knows?
Not monitoring (or providing discounted rates) non-peak hour usage was an interesting suggestion. This would work for those of us who have started using online backup solutions and/or occasionally have to download really large files (full games, for example). Upon hearing about our use of online backup, they asked what we would think of if they provided an in house solution to that. A service like Netflix's was also suggested. I can see the benefit from their perspective. This would allow them far more control to make sure the service met their quality standards and keep it from interfering with more general Internet traffic. I do have monopoly-type concerns with that, though. There's a reason I prefer Netflix to Shaw on Demand. It's quite simply a better service. And though they might be able to copy it, I don't think they would have come up with it unprovoked. I want them to be a pipe. A very good pipe. And I don't mind if they do offer some of their own versions of these services. But I still want to feel choice. I'm intrigued by the backup idea, but if, for example, it didn't offer client-side encryption and encrypted-only storage (so that not even an employee could see what's stored), I wouldn't use it for backup. There's just too much of a chance for a bad employee to compromise personal data unless you're the only one holding the key. I'm able to choose between Dropbox (great interface and tools, but no real encryption - besides creating your own encrypted image and storing that) and Jungle Disk (not a great interface, but client side encryption) and any number of other similar services out there. If the cost of transferring data is prohibitively expensive in choosing anything other than a Shaw solution, that's not enough choice.
Decoupling speed from usage was also brought up, which was something I hadn't considered. Discussion of it also led to, in my opinion, a much more nuanced way of handling network congestion. I feel it's because it gets to the root of the "capacity" problem. See, the problem isn't so much in the number of bits as the number of bits being transferred at one time. That's obvious, you say. But that isn't the problem that caps would be solving. Someone listening to Internet radio all day is probably not hurting network speed for others on the same node, even though when the month is over, they could well be considered a "heavy user". Meanwhile, the person who decides to download a bunch of huge files at a peak hour could be causing a disproportionate strain on the system. The latter may be under their cap but be the actual source of the network capacity issues.
So, is it more important that any time you download something, you can get it at 100Mbit/s, or would you rather be free to use 500GB throughout the month at a rate that's going to be somewhere between 5-25Mbit/s? Personally, I'd be happy with the latter. Gamers or DB admins who need to transfer large database dumps might prefer the former. The one-size-fits-all approach is still necessary for the vast majority of Internet users, as most won't want to think about it. But more customization would allow customers with highly specialized needs to get what they need without being considered a scourge on the system. The guy who's using 100Mbit/s at peak hours and downloading a terabyte per month may be out of luck until that becomes the norm, but most people would probably be able to find something that suits them in the meantime.
Shaw Consultation about UBB
Oh the drama of the "usage based billing" debate! Or is it really a debate when one side is a few huge companies with a virtual monopoly on high speed internet and the other side is pretty much everyone else?
The sparring match between the Prime Minister and the CRTC seems to be concerned more with the telco providers than cable providers, as the latter falls under slightly different rules. Also, the CRTC ruling doesn't change anything about what rules can be imposed on end users – it's concerned with the relationship between the telcos and independent providers which need to use the same infrastructure. So it was a nice surprise when Shaw took some initiative and scheduled some discussions about their recent decision to start imposing bandwidth caps.
I decided to take them up on their offer of attending a consultation session and thought I might get a little feedback from my millions of readers on what I should bring up. I'm walking in assuming that they'll see "no caps!" as a non-starter for debate, so with that in mind, this is what I plan to suggest:
- A more reasonable overage charge. If Amazon lets me run a server at ten cents or less per GB of bandwidth, why does my ISP think charging me $1-2 per GB is fair?
- Allow banking of GB under the limit. Most months, I'm using less than half my cap. This month I changed online backup providers and went way over. But throughout the year, it would even out. I think a lot of people are in the same position. Even fairer would be to get money back for the GB you don't use, but somehow I see them less likely to go for that. Businesses like the subscription model for a reason: it makes them a steady income per customer.
- A higher cap. I seem to remember hearing that high speed internet in the U.S. tends to have around a 250GB cap (if anyone has a reference to this, I'd appreciate it!). This seems a lot more reasonable given the rise of services like Netflix, that cause people to legally use a lot more bandwidth. In fact, Shaw's initial decision to start imposing caps shortly after Netflix was introduced in Canada was rather suspicious, as the service obviously competes with Shaw's TV offerings.
- Netflix and Michael Geist have both talked recently about the real cost for last-mile internet delivery (which would presumably be the part where congestion was really a problem). The figure ranges somewhere between one and three cents per GB. If ISPs are claiming that UBB at $1-2 / GB over the cap is fair, they should provide some publicly available numbers to back that up. Otherwise, they shouldn't be surprised when customers think they're just trying to milk them for more money.
Anything I should add? Any corrections to make to that information, or ways that the argument could be strengthened and/or made more persuasive (recognizing the fact that they're in it to make money and are going to be balancing how much the anger of customers is going to cost vs. the amount any concessions are going to cost)?
No, I'm not expecting much from this, but as with voting, I feel that an attempt at positive participation secures a certain amount of the right to complain afterwards. Please get any comments in before 6PM on Monday, March 7th, as that's when I'll be attending. I'll be sure to report back on how things go.
on wikileaks and the speed of bits
It’s an interesting time to be involved in technology. We’re just starting to figure out how to appropriately compensate artists in the digital age, having finally come to terms with the ones and zeros that made fans more effective music distributors than record companies. Privacy has been completely reframed, from something we expected others to respect to something we’re expected to manage. And now the world’s last superpower watches helplessly as its secrets flood out day after day at the whim of a bunch of idealistic hackers.
Now, and into the foreseeable future, bits will travel faster than law. The sooner we accept that, the better.
For artists, new business models prove more effective than digital locks and battalions of hungry lawyers. In the area of privacy, a simple helping or two of empathy might do the trick. Look for yourself in the face of the kid you’re cyber-bullying. Think of your own wild weekend in Cancún before digging up e-dirt on a potential employee. Maybe her personal life has nothing to do with how well she does her job.
And what about national security? Perhaps Julian Assange and company shouldn’t have tried to usher in total transparency overnight just because they had the power to do so, but perhaps those entrusted to uphold the public good are being unnecessarily secretive out of a similar capriciousness.
Bits move faster than law.
Technology made secrets easier to keep before any sort of reasonable limits could be established. Like it or not, Wikileaks acts as a necessary balance to power. There’s every reason to hold it accountable for whatever damage it might cause, but to call for it to be prematurely silenced simply because we find what it says embarrassing is to betray the very democracy we’re claiming to protect.
(297 words)
Why frameworks are not a silver bullet for rapid development…
It had been a while since I'd worked on my current OSX app. The code seemed strange and unfriendly. But after a few hours of re-introducing myself to everything I'd written over the last year, I managed to find my groove again. That is, until I decided to try a new interface for one of the pieces of functionality. I'd actually done the same thing in another area of the application before, so it should be easy, right?
The coding gods were not on my side.
I was trying to simply turn a div inside a WebView into a contenteditable div. This basically meant putting:
contenteditable="true"
on the div tag. Try as I might, I could not get that content to be editable. To make it even more frustrating, copying the same generated HTML content out of my application and into a regular HTML page allowed me to edit the content I wanted to without issue.
There were no error messages. I whipped out the google-fu on "WebView contenteditable" and other variations and could find nothing. I tried explicitly setting the WebView component to be editable. Nothing.
By luck, I ended up stumbling on the following in my code:
- (BOOL)canBecomeKeyWindow {
return YES;
}
which must have been how I made the other contenteditable area work. Sure enough, that was it. You run into problems like this often with frameworks. Simple things become incredibly difficult because you haven't flipped the right switch. You haven't flipped the right switch because no one said you had to. No one said you had to because they didn't predict you'd try to do this specific thing with the framework. But I did. And now after endless hours of frustration, I know not to make that mistake again. Onto the next one!
(297 words)
Brevity, my elusive friend…
I have fallen prey to one of the many clichés of blogging, developer friends. In the beginning, there seem to be far too many spectacular ideas and so little time, but before you know it, there's just this nagging thought in the back of your mind: "Oh yeah... I haven't done a post in a while, have I?"
Now, there are always several reasons any good procrastinator can give you for putting things like this off, but probably the biggest for me is the apparent inability to be brief.
Just today I told myself I was going to fire off a concise email about a design issue I wanted to discuss with my co-workers. Straight. To the point. Just the facts, m'am. And, after about a screen length of text, I figured I'd pretty much covered it.
Was it helpful for me? Undoubtedly. Writing helps me to work through ideas. I notice problems and solutions more easily than if I was just sitting there thinking. But did my co-workers need to go through the same thought process? Probably not.
When it comes to writing a blog post, something I don't really have to do, knowing that I'm probably going to go on forever about something is a good recipe for stalling.
On the art side, I've been exploring setting arbitrary limits in order to be able to still make stuff in this world of infinite possibility. I think I'll apply that to this blog as well. So here goes: this and the next 10 posts will all be under 300 words, no matter what. There, I've said it. Give me brevity, or give me backspace! (272 words)
How to make Parallels and IE8 Snappy!
At last, I have conquered thee, Parallels! So, initially, I had really long load times when launching a Parallels VM from a suspended state. I looked at my disk I/O and it was fighting for a measly 6 MB/s. I tracked that down to an issue with Mozy, which is the cloud backup solution that I use. One part of the solution was to upgrade my client from 1.7.3 to 1.8.0 (not incredibly obvious since they only had the 1.7.3 client on their download page, and you had to read through forum posts to find a link to the 1.8 beta – though looking at their downloads page now, it looks like they've finally put up the 1.8 version). The other thing I had to do was tweak the /Library/LaunchDaemons/com.mozy.backup.plist file to ad:
<key>LowPriorityIO</key>
<true/>
Finally, after shutting down and restarting the Mozy Home Backup daemon via:
sudo launchctl unload -w /Library/LaunchDaemons/com.mozy.backup.plist
sudo launchctl load -w /Library/LaunchDaemons/com.mozy.backup.plist
And voila, Mozy was no longer sucking up my disk I/O, and Parallels (along with anything else that was disk I/O intensive) improved dramatically.
Ah, but once I had Parallels loading fast, I was still faced with a problem. Internet Explorer seemed to have an extremely long lag, not due to the responses from a web server, in loading a page. I'm talking 6-8 seconds before even trying to grab anything and practically freezing the application until that time elapsed. For a while, I was okay with this because it was at least better than the previous state of affairs where Parallels would kill my whole system while trying to load due to insanely poor disk I/O. But as The Paradox of Choice points out, us human beings adapt to any good thing much too quickly to enjoy it for long. I whipped out the google-fu and first started looking for Parallels/IE related topics, figuring this sluggishness has to be something many people are annoyed about and that someone would have a workaround for. No luck. Lacking an actual dedicated Windows box to test on, I also foolishly thought it might have nothing to do with the fact that I was running Parallels. Maybe it was any Windows 7/IE8 combo? This was sort of backed up by the fact that Firefox worked just fine on the Parallels machine. But I should have considered that even Microsoft wouldn't be so silly as to give their users such a huge performance hit with using their browser. And, of course, my searches proved fruitless. Anything I found was about turning off plugins, etc. which I had already done.
So, I gritted my teeth and dealt with things the way they were a while longer. Then at work, I was using VMWare Fusion, and I noticed that once I got everything loaded up (load time not being quite as nice as Parallels 6), Internet Explorer was actually pretty snappy. With that in mind, I went back to my Parallels install and looked for the most likely suspect: Parallels Internet Security, which Parallels prompts you to install as part of Parallels Tools.
I started by just turning off everything. And, what do you know? Suddenly that 6-8 second application freeze was gone.
Not wanting to leave my VM completely unprotected (it was a Windows install, after all), I applied the equivalent of a binary search to the process of disabling things. First I disabled half the stuff and left the other half running. Then whichever half seemed to be the culprit, I disabled half of that. And so on.
It got down to two things.
1. The Anti-Malware: Files and Memory scan (in particular, the inclusion of at least the main hard drive in the scope); and
2. System Security: Proactive Defence (I tried disabling individual items here, but after exhausting all possible options for disabling, things were still sluggish, so it looks like the speed hit must be somewhere in the three options (to do with trojans, worms, etc.) that they don't let you uncheck.
Important Note: I had to disable both of these. I'm not entirely sure why. But leaving one disabled and the other enabled would result in the same drastic performance hit as leaving both enabled. If you're not going to do both, you might as well leave things as they are because you're not going to see any improvement.
Now Parallels Internet Security will not like this so much. You'll see that it's gone to level Yellow (medium risk of something bad happening?). I don't like yellow. I like green. And I was able to go into the status messages and hide the "Some components are disabled" message to give me back the wonderfully (and falsely) comforting "green" status. Here's my thinking behind this... warnings are only good if they're distracting. Had I left things at yellow, and some other warning appeared that didn't affect performance but meant I should update something, etc. I likely wouldn't look at it because I'd assume it was just those things I'd turned off. But hey, if you want to leave it yellow, go ahead.
NOW FOR THE REALLY BIG DISCLAIMER: I'm not entirely sure how much more susceptible to attack this system will be now. If you do the same, you will be taking a bit of a risk, and I claim no responsibility for what happens to you when you click that "ClickMeRightNow.exe" file that your friend just sent you (because you totally trust your friends, right?). But as we all learned in the insanity that followed 9/11, more security usually requires less liberty (in my case, liberty from horrible performance), and well, some of us just think life's better with a little more liberty, even if we take on a bit more risk. I'm a web developer. The only reason I need Internet Explorer in the first place is that half of the damned internet doesn't know there are other (better) browsers out there (that said, kudos to the IE9 team – I hear it's great, meaning it's more like the other browsers, and once I can actually install the thing, I'm sure I'll enjoy the better browsing experience). I suspect that that the craptacular nature of Internet Explorer throughout history is the reason most people install Parallels – in order to test their websites with it. And if you're only going to be visiting your own websites in your Parallels session (or ones that are completely trustworthy), there's probably a lot more than this that you could do away with.
All that said, I'll be sure to let the Parallels team know about this issue and if a lot of other people are affected, they might end up fixing it in a new update. Right now, I hear, they're working hard on updating the software to be able to handle the IE9 install, though still no word on the progress of that one either.
Eclectic Ruby, MIDI, and Dr. Von Funk
One of the things I like about the Ruby community is that it seems to attract and even encourage eclecticism. I suppose it was only a matter of time, then, before a book like Practical Ruby Projects: Ideas for the Eclectic Programmer was written. I'm interested in particular in the chapter on using Ruby to drive MIDI. Someone's even hooked it up to Reason. This is, of course, awesome.
So, my grand plan is to turn my iPad into a step sequencer for Logic Pro. To do that, I'm going to need to figure out how to send MIDI signals to it, but also how to receive MTC from it. Even better would be to figure out how to send a note with particular timing information (i.e. "Play this note here, and this other note there, etc." instead of just waiting for a particular time and saying, "Play this note now!"), but I'm not sure that's possible at the moment. It's kind of daunting when I haven't done any audio programming before, but Ruby makes it a little less daunting, because it allows you to strip away a lot of the hassle of programming and get to the point quickly. One of the hardest things with any project is proving to yourself it might be possible. Possible enough, at least, to start hacking away at it.
Also, I started a new job. I have a view with a window, and I get to make software in Ruby on Rails that helps people make cute cartoon characters to help welcome and guide other people through cyberspace, all the while avoiding the perils of the uncanny valley. That's a lot of helping! Everyone here has a window seat, which is great because I've never really had a good view before (well, once I did, but the whole time I was there, people would walk by and say, "How the hell did he get that desk?" and I never really got to enjoy the view because I was too busy trying to figure out what it was that I did – apparently whatever it was, I did quite well at it, which was somehow even more unsettling). So having a view that everyone else has that can give your eyes a break every so often from the computer screen is great. Working with other people in the same physical space is also great. I didn't realize how much I'd missed that until now.
Here's something (I think) I'm learning about creativity. I'd spent several years looking for more and more freedom. Less structure, more blurry lines, less certainty. That's good to a point. I think it helps you to be creative if you're comfortable with those things. But creativity can also use a good dose of structure and space every now and then. Walking to work. Coming and going at regular hours. Glancing up at the awesome view when you've hit a roadblock. Being able to leave work at work. I'm also working with a great team that I think I'll learn a lot from and contribute a lot to. My girlfriend keeps asking me, "Are they the ones behind The Paperclip?" I don't think so, and that's also nice, because I think enabling The Paperclip and its plans of world domination would be much more taxing than working with cute cartoon characters like Dr. Victor Von Funkalicious.
What my dad taught me about my career in software development…
My dad knows a little HTML. That's a lot more than most people his age. But whenever I get too involved in relating something about what it is that I do for a living, he just smiles and patiently waits for me to finish. And I realize that while I might be entertained by whatever problem or design it is that I'm talking about, he's entertained by how involved I get in it – how much it may anger, irritate, concern, or inspire me. And while university and my career may have taught me things that he doesn't (and likely doesn't care to) understand, I'm just beginning to understand what he's been telling me for years. Like a lot of kids in the west, I've probably spent more time differentiating myself from my family than finding similarities with them. The need to constantly prove your individuality in our society might be better classified as a sort of neurosis instead of something we should aspire to. But the more I think about it, the more I realize that the traits that have helped me most in my career, all the way from learning my trade to the day to day business of it, were – you guessed it – taught to me, very patiently, by my dad.
So without further ado, here are ten of those things:
- You won't learn if you don't get your hands dirty and do the work.
- Just because you don't understand it, doesn't mean it's not important. That said, you don't have to understand everything RIGHT NOW.
- Admitting your mistakes promptly, endeavoring to understand them as fully as possible, and taking steps, however small, to learn from them will serve you far better than making no mistakes at all. People will also respect you more.
- Doing what makes you happy is the most practical and down to earth way you can live. That doesn't mean you won't ever have to make what you've been convinced to think of as a sacrifice in order to do what makes you happy. (Both my parents used to tell me they'd be just fine if I chose to dig ditches for a living, as long as I was happy. And I wouldn't knock ditch diggers. The movers and shakers on Wall Street may get to live a much more comfortable lifestyle, but at the end of the day, I'd rather lay claim to a ditch that served a purpose than a fat salary that helped drive the world economy into recession).
- You can only control what you put out into the world, not how the world chooses to react to it; however,
- You can and should consider the consequences, even if they don't change your mind.
- Frustrated? Stressed? Life treating you unfairly? Try and make it easier for the next guy who finds himself in your shoes.
- It's easy to let ego get in the way of happiness. Try not to. (Still learning, Dad).
- Speak your mind and do what needs to be done. Sincerity and a good work ethic will serve you better than brains and luck in the long run. The right people will understand, even when they don't.
- Your career might be what drives you, but it's your friends and family who give you the fuel to do it and who help you fix the things that occasionally break in your life. Ignore that to your own detriment. (Still a novice here, too. Fortunately, my friends and family are very forgiving).
- Question authority (politely, if authority has a badge and gun). Rules aren't ends in and of themselves – they're means. It's okay to break some – even your own – when they stop making sense.
As I'm sure you've decided by now, this post really has nothing to do with software development. Or does it?


