|
LATEST POSTS
Friday, February 12, 2010
My daughter’s report card came home last week. The grading system is as follows: - E: Exceeds expectations
- A: Achieving expectations
- P: Progressing towards expectations
- N: Needs support
There are also a couple of places for comments, which is what I’m usually most interested in. Before I continue, there’s a very good chance my opinion is clouded by a certain “back in my day” attitude. That said, I have given this some thought, enough to start a discussion at least. The confusion I have with this grading system is the word “expectations”. It sounds kind of benign but what’s missing is context. Is it the expectations at this current moment in time or is it year-end expectations? If it’s year-end expectations, then does she need help to bring her up to speed? Or do they continue to get taught the concept throughout the year? If they don’t, what’s the plan to bring her up to expectations? All this boils down to a single question for me: Is there anything actionable I, as a parent, need to do? This is something I posed to the teacher and she was very helpful. She explained the rationale behind the grades and clarified my questions. In the end, I left feeling like I was doing my job, which was basically to support hers. (Side note: I’ve come to expect this level of professionalism of the teachers at my daughter’s school. Despite the somewhat new-age grading system, she has had some fantastic teachers through the years. The first month of each year is always a little anxious for me because I keep thinking her streak can’t continue. But I guess if Pixar can bat a thousand, so can a school.) But still this system nags at me. If my kid is progressing toward expectations in a concept and yet, I don’t need to do anything different, then what meaning does the grade provide? Worse yet: what if she’s still progressing toward expectations at the end of the year? What are my options at that point? I get the impression that this grading system wouldn’t identify the problem earlier in the year. There’s another angle to this. If your child is a good student and is grasping the concepts and is basically on the right track, there’s a psychological hit you take seeing P’s on the report card. It gives the message that your child is not quite at the level he or she is supposed to be at. The counter-argument, of course, is that this is mid-term. There’s no reason to expect them to be at year-level expectations yet. But again, if they’re on track, what good does it do to tell me “she’s not there yet but we have high hopes”? This psychological aspect also affects parents. For me personally, I have a good idea what kind of student my daughter is. I help her with her homework and know what she’s good at and what she struggles with. So all I really needed was to have a chat with her teacher to see if there were any problem areas and to see if I needed to do anything differently. But I can imagine other parents putting undue emphasis on the “lower” P grade, and perhaps pressuring their children to work harder, even if they are already good students. I suspect the grading process is a stressful one for teachers. Particularly for students whose parents are more apt to blame the teachers for their child’s poor grades. Maybe this system was in response to that. Or maybe the old, A, B, C, D, F system had some inherent problems on its own. But I’m picturing a report card that has a bunch of As and Bs with one or two Cs. That, to me, is something I can do something about. It sends a clear message of where your child needs support. “At this exact point in time, your daughter is pretty good in all these subjects, but she could step up her efforts in comprehension.” To re-iterate, this is mostly moot for me because I have a decent grasp on my daughter’s education and on how she’s achieving my own expectations. I just wonder if this grading system adds an unnecessary level of stress when a simple twenty minute conversation with the teacher would tell me what I need to know more than this report card. Kyle the Graded
Monday, January 04, 2010
I’m going to pretend a whole bunch of you have asked where the Coding Hillbilly nom de plume comes from instead of just one or two. Though I love the name, Hillbaley Ho Down and Extravaganza, it actually reinforces a common mis-pronunciation of our last name. It’s buh-LAY, not BAY-lee. One of my resolutions this year is to enforce with military precision (though it may be based on the Bahamian military, rather than, say, Germany) the correct pronunciation. Which is something I’ve become lax with since moving to a country where I have trouble understanding the local populace's tendency to omit key parts of speech. Like verbs. For several years, my brother and I ran a website, the remnants of which can be seen here. (I’d recommend turning your speakers off before clicking that.) It debuted auspiciously almost ten years ago under the name The Hillbaley Ho Down and Extravaganza. My brother came up with the name as a play on our last name. The website was an absolute blast to write and did its thing for a few years until it dawned on us that very few of our family, in fact, read. But during that time, I started the technical arm of the Ho Down and used the name of the parent site as the basis for this one. But the name Coding Hillbaley would make sense only to my family who, again, don’t read. So I chose a more mainstream version. Next question. The avatar I use, seen at the left. This I also stole from my brother. My grandmother has this knick-knack thing she bought from who-knows-where (our money is on a Mexican border town but I shan’t elaborate). My brother took some photos of it, did some touch-ups, and voila! The original photos of the item are below: The nice part of the photo is how much it aligns with both the theme of my blog, my general attitude toward software development, and my family in general. Ya, he looks like a hick but damned if he ain’t having a good time. And look like he’s been into the dandelion wine. Kyle the Ancestral
Thursday, July 23, 2009
We’re in a bit of an odd place with our project now. We’re behind schedule, yet the development team has little to do. But we can’t call our tasks done because they haven’t been tested and approved. In short, we’ve hit the grey area of software development called “process”. I’ll skip the lecture on bottlenecks because I didn’t do very well on the Operational Management course in university where I was first introduced to the concept formally. Instead, let’s focus on one of the factors that led to it. The project I’m on now is an IT initiative. That is, it was the IT departments idea to create a bunch of applications to replace old ones. As such, the IT department is footing the bill, not the business. Yeah, I heard those some bells when I first discovered that, too. Now, I’m not privy to the factors that led to this so it would be judgmental of me to comment on why the decision was made. What I can talk about is the effect of it. In a typical scenario, when a feature comes up to be developed, there are inevitably choices to be made. Should we use a dropdown list, which is easy but cumbersome? Or a look-ahead textbox, which is easier to work with but harder to develop? If I’m the business and I’m not paying the bill, the choice seems pretty obvious to me. You go with the one that looks nicer. That’s the obvious problem. There are more far-reaching ones. Because our client doesn’t have a financial stake, the project isn’t a high priority. They have their other regular day-to-day duties to attend to; coming up with functionality and test plans for us has to be fit in where it can. If it doesn’t fit in, well, then we can deal with problems in testing. What does it matter if we have to send it back to development because it doesn’t meet our needs? This is not the fault of the client, mind you. This decision process I described is natural and, in fact, healthy. They have goals and expectations to meet. This project is actually an impediment to those goals. Every time I ask them to clarify something and they respond with “I’ll take a look when I get a chance”, I’m disappointed, but I can hardly blame them for it. This has almost inevitably led us to our current situation, where we’ve been humming along with the development, but are not delivering value to our full capabilities. So the moral of the story, I suppose, is to ensure the person you’re building for has a high enough stake in the project. Seems like obvious advice but it can easily be overlooked. Maybe you have some downtime and want to use the opportunity to train up your staff while still delivering something. Maybe you need to retire old applications because they are hindering an infrastructure upgrade. Maybe the bureaucracy is such that you *really* want to update the old apps but you’re meeting resistance from the rest of the organization. You may have noble intentions but don’t forget your own budget. Kyle the Stakeholder
Thursday, June 11, 2009
I got an e-mail from someone wondering why his ASP.NET page was getting bigger and bigger and what this huge hidden INPUT tag was in the source. I smiled knowingly and went about my reply. That’s not the reason for this post but it is the context which led to it. If you have an iTouch or iPhone with auto-correct turned on, here’s a little typing exercise for you. Type the following two words without having to press backspace to correct them: Capitalization doesn’t matter. If you have the same issue I have, this will be impossible. In any application, whether it be Safari, Notes, Lucky Ladies of the Ozarks, or Twitteriffic. As soon as you type “viewst”, it is impossible to press the A or D keys. Similarly, when you type “redw”, the next key can not be I or J. In order to type these words out, you must enter some other letter, then backspace to correct it. Then it will let you type the one you want. A quick BinG/oogle didn’t provide any answers but the iridescent Scott Reynolds provided one clue by suggesting that auto-correct was the culprit, which, of course, it was. That said, I’ve never had auto-correct actually prevent me from typing anything, only suggest. No solution for me as yet except to turn off auto-correct, which I should do anyway, given the number of times I type tunderin’. Of course, the fact that it’s trying to prevent me from typing ViewState in the first place suggests that this is actually desired behaviour. Kyle the Touched 1Those of you who know about my knowledge of sports may wonder how I discovered this one. Easy: I didn’t. Twas the mighty @HuntJason.
Friday, May 08, 2009
I struggle with a lot of things. No, no, it’s true. I’m not the infallible coder of the earth that my online persona may have you believe. There are things in this world that I have trouble with. Saran Wrap, for example. It is one of my life goals to be able to tear off a sheet of it without having it stick to itself, forcing me to fiddle with the edges until it’s a mangled ball of cellophane and I have to summon my nine-year-old daughter to tear off another sheet for me. I just don’t have the required food storage skillz. But I’m learning. Another point of potential improvement is meeting preparation. In my current assignment, we’re test-driving scrum. I’ve worked in a scrum environment before but I came in partway through and the existing team was already long practiced at it and I was able to merge in pretty quickly. In this one, we’re all kind of getting a feel for it. Part of the process involves meetings. The daily stand-up, of course, but also code reviews, retrospectives, demos, and planning sessions. And I don’t feel like I’m as productive as I should be in them. The reason for this is that I’m used to meetings being interruptions in my work. The two-hour eye-wateringly detailed recap of the project plan. For these meetings, I’d work until the last possible moment before another conscriptee passed my desk and said, “you coming to the meeting?” at which point I’d lock my computer and saunter into the meeting, usually a few minutes late. And I wouldn’t be the last one in. These are mindless meetings. Ones where you don’t need to put in any thought before, during, or after. You’re there to grease the project manager’s wheels. But the scrum meetings seem to demand more discipline from their attendees. They don't work as well if everyone walks in with a “switch-on” mentality. That is, they turn their attention to the meeting task as soon as they walk in the door. Consider a retrospective meeting, where you discuss the good, the bad, and the physically unattractive of the most recent sprint. Very often, the question will come to me, “what was good/bad about the last sprint” and I’ll have to sit and think for a few minutes before coming up with some lame contribution just because I didn’t want to look like an idiot. (“Well, I really liked the colour palette we chose.”) Wouldn’t it have been easier if I did that thinking beforehand so I didn’t waste anyone’s time? This is even more critical for code reviews and planning sessions. Almost anyone that has attended a code review has had everyone walk in, sit down, and the leader says, “So what do we want to look at today?” Ideas are thrown out, some code is plastered on the page, and everyone looks at it for a few seconds before tossing out ideas off the top of their head. Ditto for planning sessions. “I’m thinking we should handle the admin screen to add customers?” “Hmmm…that might be a good idea…actually, no wait, we should do the invoice screen first, then we’ll have an idea of what data we need to capture.” “But if we do the invoice screen first, we’ll have to wire in the calculation engine.” And so on and so forth. This is the type of discussion I think is worth *starting* over e-mail. I.e. An e-mail that says, “The planning session is on Monday, the features under consideration are: 1) admin screen for customers, 2) invoice screen, 3) easter egg page showing the after effects of the company Christmas party. Let me know your thoughts before the meeting.” Then, come Monday, everyone has (presumably) contributed to the discussion, some issues have been brought forth and we’ve got a head start. For code reviews, it’s the same thing. A generic review where the class-at-hand is decided on the spot leads to developers wondering if they’ll have to end up spending the meeting defending their code. But if the code being reviewed was decided beforehand, he could take a look at it and maybe get a sense of the issues that maybe be brought up. And presumably, the issues that *are* brought up are more substantial than “shouldn’t you have an underscore at the beginning of your variable names, Sparky?” I’m already doing this in some respect for the daily stand-up. It’s not very mentally demanding because you generally have a good idea what you did the day before and what you plan to do today, but I still go through the mental exercise before the meeting. But that’s because the expectation has been set that everyone should know what to say and get to the point. The same expectation usually isn’t held at the more involved meetings. The latent English professor in me says that this is an awkward place to end the post but for the life of me, I can’t think of anything else to say. So…ummm…start the discussion before the meeting, I guess is the overall takeaway here. Kyle the Prepared
Friday, January 23, 2009
This is a managerial update that I’ll include now so as to double my post count for the month. I have resurrected my old blog over at http://kyle.baley.org. Those of you who subscribe to my personal feed (and lord knows why you do when you can get all that and more with the CodeBetter one) have probably received a whole bunch of duplicates of recent posts, assuming I’ve configured everything properly. As I’ve mentioned before, I am staying put at CodeBetter for the foreseeable future. I mean, what kind of guy would use CodeBetter to boost his exposure, then bolt? But sometimes, I don’t feel like coding better. Sometimes, a guy just wants to sit down at his keyboard and code adequately (or, code worse). You know the feeling. You’ve just had a bad “experience” at a family gathering and you just wanna vent on the stifling rules society places on the more enlightened of us. Plus, the Hillbilly has amassed more than a little knowledge in the Open Text Livelink arena (yeah, I hadn’t heard of it before either). But it’s rather specialized and has only a very little to do with what I consider CodeBetter material. So I’m using the old homestead as a random dumping ground of even more random thoughts as well as an outlet for the very closed world of Livelink. (Those of you who are even remotely familiar with the product will probably understand the attraction to it by someone with very liberal views of family trees.) It will also be a nice little chronicle of my BahaNET adventures which I also feel has a more limited scope. If you’re interested in joining me over there, I’ve updated my FeedGoogleBurnerAnalytic-type link to point to it, I think. Everything I post here will be posted there. The cross-posted material will be stuff I think is relevant to .NET and programming in general. So if that’s all you care about from me, there’s no need to adjust your set. As for the rest of you, well, like I always say: You can’t save everybody. Kyle the Debunked
Tuesday, December 30, 2008
As the year lurches to a close, I'ma gettin' all reflective and stuff. The last two years have been pretty key for me career-wise. Looking back, you'd almost think I had a plan. In general terms, 2007 was learning hillbilly as I put some effort into a learning regime. More importantly, I got on track for continuous learning. 2008 was community hillbilly as I started connecting more with my online brethren and sistren both in attending, and speaking at, conferences and user groups. I'd enumerate them but if you care that much, you can click on the Community category to get a summary. Plus I don't want to give my wife and daughter any ammunition for the "you're never home" discussions that have abated of late. It also marked the launch of the Bahamas .NET User Group which is something I'm particularly proud of. And this segues nicely into my 2009 plans. The coming year will be introvert hillbilly but not in a bad way. I won't be withdrawing from what I like doing, which is to connect with other people in the industry. But looking over my travel schedule of the last year, and it wasn't nearly as intense as many people I talk to (especially my co-author, who essentially toured Canada coast-to-coast, as well as India, the US, and somewhere in Europe, all for community work), I'm looking to put some direction to my efforts. So my two over-arching goals are: continue doing community work, and travel less. Luckily, we work in an industry where this is not even possible, it's viable. Community comes in two flavours: global and local. For the last year and a bit-ish, I've been skewing more on the former. For 2009, my focus is going to be on the latter. The Bahamas is an untapped treasure trove, I think. The proximity to the US certainly helps and it's a nice, small, manageable market. The industry is so young here that it would be remiss of me not to take advantage of the opportunity. The people want to learn but don't yet have years of bad habits ingrained into them. Not two weeks ago, I kid you not, I had a request on how to access data without using stored procedures. I just about cried with joy. I'm planning to have the e-mail bronzed and framed. So the intent is to spend more time closer to home. Along with regular user group meetings, I'm hoping to try some half-day to day long seminars on various subjects, almost certainly starting with fundamentals. And for those of you following my attempts at a conference, keep your Bermuda shorts on. This winter is too early but it's still a possibility for 2009/2010 winter. Which is not to say I'll be ignoring the global aspect, at least not altogether. As much as Brendan wants to maintain his subscription level, I plan to stick around here for a while yet, if only to see if I can top my single favorite post which I made so early in my tenure. I also have a raft of Dimecast ideas to sift through as well as a few other plans, each more nebulous than the last. Finally, while I recognize that there is little by way of "official CodeBetter" advice here, I'm posting this anyway. I mention this partially to pre-empt the inevitable "stay on topic" comments because responding to them requires more thought, tact, and, most importantly, time than you might think. But mostly because I think there is a parable or two buried in here somewhere for others. In any case, I have no intention of turning this place into a BahaNET bulletin board (other plans are afoot in that arena). Just taking advantage of the latitude usually granted to year-end bloggers. Kyle the Communal
Thursday, July 24, 2008
It has been only four days since my self-imposed, month-long incarceration in the prison known as Corporate Calgary, but already the three walls of my cell close in around me. My oppressors continue their assault on my psyche with inhuman tortures such as "Death by 1000 Quick Questions" and "Let's Talk About Weather" and "We Meet Because We Can". My jailors mock me with bizarre acronyms and epic tales of projects past. Yesterday, I nearly screamed in terror when I caught myself chuckling knowingly at one such anecdote. During a meeting to review progress of a system I didn't know existed, let alone used, no less. I fear I may be going insane. Two things keep me alive. One is the presentation I give next week on ASP.NET MVC to the Calgary .NET User Group on the 29th and the Edmonton .NET User Group on the 31st. During status meetings, I surreptitiously pull up my VM and review my code and notes, ignoring the sidelong glances at my insolent giggles. These presentations are my one tenuous grip on reality and I shall protect them with, well, not *my* life but probably the life of someone close to me. The second is the one ray of light in my task list: a throwaway application I pull up when I need an extra dose of lucidity. Just this morning, I discovered an error that made me nearly leap for joy for the mere mental exercise, slight as it was: private void ConvertFile( string converterName, string sourceFile, string destinationFile )
{
IConverter converter = FindConverter( converterName );
converter.ItemProcessed += converter_ItemProcessed;
int recordsProcessed = converter.processFile( sourceFile, destinationFile);
}
This (much simplified) piece of code contained an error. The first time it was called, it ran fine. Each subsequent call appeared to process the file multiple times. I.e. the second time it ran, the file was processed twice, the third time, thrice, the fourth, ummm...quadrice. And so on and so forth.
Alas, the solution presented itself all too quickly. The file was not actually being processed multiple times. Rather, a brand new ItemProcessed event was being appended to the event handler each time through. So the second time the file was processed, the ItemProcessed event was called twice each time an item was processed. The third time, thrice. Etc, etc.
Unfortunately, the fix was trivial:
private void ConvertFile( string converterName, string sourceFile, string destinationFile )
{
IConverter converter = FindConverter( converterName );
converter.ItemProcessed += converter_ItemProcessed;
int recordsProcessed = converter.processFile( sourceFile, destinationFile);
converter.ItemProcessed -= converter_ItemProcessed;
}
And now I am left to ponder my decision to work onsite for the next month in this soulless place. Left to wonder why I left my safe haven. To toil between a woman whose radio is always slightly off-station and a man with a cruel tendency to squeeze his squeaky, rubber duck at inopportune moments.
Pray for me, readers. Pray. For hope.
Kyle the Indentured
Saturday, June 28, 2008
Technically, I said I'd get technical. But there has been a spate of negativity lately and it's making my rose-coloured glasses tingle. Typically, this causes me to shut down for a little while until it blows over but I'm going to try to spread a little optimism this time instead. The word "no" has been bandied about for the last week or so. Specifically, "no confidence". And regarding that particular debate, I'm steering clear because I can't make an informed opinion either way. (I have a strong inclination but it's based on what others I respect have said rather than my own investigation.) I don't want to detract from the efforts of those involved because, like I said, I can't make an informed opinion. I just don't like seeing all the pessimistic fallout on both sides. Accusations of negligence, foolishness, ignorance, and community disservice makes me feel awkward. I'll admit freely that I'm an optimist. Disproportionately so. Some (including my wife) call it naivete at times. I'm more than happy to assume that the person I'm talking to has my best interests at heart in the absence of evidence to the contrary. And even with evidence, it has to be more than circumstantial. I admit all of this freely. But here's the thing: historically, this works for me. Luck, karma, faith, give whatever name to it your religion prefers, generally speaking, I like the results I get from assuming the best. For all the times I got walked upon, there have been a hillbilly family tree's worth of instances where I've come out ahead. So that's why I feel all icky when I catch myself reading about hypocrites and backlashes when I know I should just skip over to the next item in my RSS reader. It makes me wonder what went wrong that led to this point. Now, I'm glad their are people out their who are passionate enough to put themselves out there for their beliefs. And I'm glad people are willing to listen and provide some balance to the debate. I'm even glad for those that prefer to argue with rhetoric rather than facts. I'm not really any of these people (except maybe the last one - it's more entertaining). Call it a character flaw if you like. All I know is, I'm having a blast doing what I do. And that's pretty much the only point I want to make in this post, I guess. That it's okay to look around once in a while and say, "y'know, for all its flaws, this industry kinda rocks". About a dozen years ago, I abandoned what would likely be a decent career as an actuary to become a software developer because, hey, it looked like fun. And twelve years on, despite these little bumps, I can honestly say, it has been, still is, and shows every sign of continuing to be. So I'm making a vote of confidence. Not for any side in the debate whose specifics I've so pointedly avoided mentioning. But that it will be resolved in a satisfactory manner, for both sides as well as for the industry as a whole. And if it doesn't, what's the worst that could happen? Kyle the Rhetorical p.s. I reserve the right to reverse my position if I ever get audited.
Wednesday, May 21, 2008
Here's a true story from the other night that I'm going to masquerade as a lesson in listening to your clients and understanding their perspectives. Mostly, though, I just think it'll provide you with some entertainment at my expense. In this case, the client is my eight-year-old daughter and the application is a homework assignment. The feature under consideration: If you could be any person in history, who would it be and why? (Side note: It's telling that a question from a grade three assignment is also featured prominently on the Miss America Pageant.) Client: I want to be Samantha Superior Consultant: Who? Client: Samantha, the American Girl from the 1800s SC: I think they need you to put down a *real* person. Like Santa Claus or the Tooth Fairy or Chevy Chase. Client: She's a real person! Her parents died when she was young and her grandparents raised her and she spent her summers at her granny and grampa's estate in New England and had lots of adventures! SC: Honey...she's just a doll someone made up to make money. Like Barbie except not as pneumatically proportioned. Wouldn't you rather be Janis Joplin? At this point, the stunned client suddenly ran upstairs and went to her room. I didn't think much of it so I let her work things out in her head for a little while. After twenty minutes or so, I went up and heard sobbing from the other side of the door. Cautiously entering the room, the first thing I noticed is a pad of paper on her desk. At the top of the page, she had written: "American Girls are not real." Except that she crossed out Girls and wrote Dolls in its place. She followed this up with "American Dolls are not real" which she wrote another 37 times down the page a la Jack Torrence. I know it was 37 times because she numbered each and every instance. At this point, the sobs sounded less like "My daddy won't let me do my homework the way I want" and more like "Everything I have ever known is a DIRTY, TREACHEROUS LIE!" I slumped downstairs and quietly informed Mrs. Hillbilly that she had to clean something up while I fed some more money into the Rainy Day Psychiatric Fund. There are a number of lessons to be learned here, the first of which is: never help your children with their homework. Only slightly less important is: Don't mess with your client's belief system. Granted, in my experience, only about 15% of clients will run away crying like little girls if you disagree with something they believe fundamentally to be true. But even the ones that don't will harbour some form of resentment. And any good will you've amassed won't always be bought back easily (although in my case, all that was required was $30 and a batch of fresh-baked cookies). By the way, I later learned that American Girls *are* actually based on real people. Kyle the Parental
Tuesday, April 01, 2008
I have a little secret. Well, more than one, but there is only one that I'm going to share today. By day, I'm an average (below average some would say) C# coder from the Great White North. Like most Canadians, I'm pretty quiet, and relatively polite. I spend my days consulting for local companies. I take the odd trip to code camps (Victoria, Calgary, Phoenix to name a few) and user groups to speak about vario us things - TDD and Mono in particular. I even blog occasionally about various things related to .NET developing, but nothing to offensive because that wouldn't be... Canadian (eh). And yet, by night, after the samoyed has been walked and the kids are put in to bed, I fire up my RSS feed aggregator and start making notes on so me of the things I read. All kinds of notes. Not always nice notes. Some of these notes get blogged. Now, how can I blog these not-nice things and still maintain the facade of a nice, quiet Canadian? Why, I use a nom-de-plume (yes, here in Canada we have French too). Yes, today I confess to the greatest mystery in modern times. No, I was not on the grassy knoll on November 22, 1963. Even more diabolical: I am the Alt.Net Pursefight blogger. Yes, I am claiming to be the diabolical genius behind that blog. For those who were/are offended by the blog, you now can now Blame Canada for your displeasure. Apologizes to Scott Bellware, who I understand is living in fear now due to everybody thinking it's him. The next time I see him I shall have to make amends with a bottle of Laphroaig. I'm sure that the presence of this single-malt will cause the Igloo Coder to crawl out of the woodwork, but this is the price of penance.
Tuesday, March 25, 2008
There are a number of reasons I use the nom de guerre that I do. Primarily, it's because I like being self-deprecating. Hard to bruise egos when the one you're mocking is yourself. But it also adds some levity to what appears to be an increasingly somber industry. The software industry has a tendency to take itself too seriously. Holy wars range from operating systems to programming languages to development platforms to frameworks to implementations of patterns. People take potshots at others for jumping on bandwagons, for being hypocritical, for being a "slave to tools", for their choice of text editor, for wearing white socks with shorts (hey, my feet sweat in Crocs, okay? It's a documented condition!). That's not to say we aren't valuable. Software can do some amazing things. And I'm not talking about carte blanche to be outright negligent in your work. It's good to be passionate about what you do and to foster that passion in others. But let's not imagine you are more important than you really are. I'll teIl a small anecdote that involves JP Boodhoo, not because he falls into this category but because I consider him a pretty well-known person in our circles. Chances are, if you're reading this, you know him better than you know me and "holier than thou" is not generally a phrase you'll hear used to describe his attitude toward his work. At the South Florida Code Camp, I mentioned some technique I learned from him. I asked the crowd of about twenty to thirty if anyone had heard of him. No response. Granted some people may just not have put up their hands but I'll ignore them because they run counter to my argument. On this blog, I usually talk with more confidence than I feel. The reason being: there are better ways to do pretty much everything. And the reason for that: there are plenty of people who are smarter than I am. You're probably one of them. Or at least I like to assume that and have you prove me wrong. I'm far from an expert on anything (except Text Twist of which I AM LORD MASTER OF ALL!!!). But as a group, we often have a tendency to assume we know what's best for the client and even for each other. I've heard stories of shouting matches for something like how to implement "Print this page" functionality. And you could make a drinking game out of the number of snarky, condescending comments I read in blogs and discussion groups. You could get drunk by noon if you just limited it to variations on these: - No offense but...
- You (totally) missed the point of...
- I don't mean to be rude but...
- I don't understand how you people... or I don't understand you people who... or basically any comment with the phrase "you people".
(Sidebar: The last one actually makes me laugh whenever I read it. There's a running joke that's been in our family for years. When someone is being mocked mercilessly but good-naturedly (and believe me, this happens *VERY* often), the mockee responds with "I hate you people" prompting a hearty renewed round of laughter. We include it as a default response in all the reader polls in our all-but-defunct family newsrag and have even had t-shirts done up with the phrase on it accompanied by a family photo.) When it comes right down to it, I am paid to do what I'm told. Many clients will defer to my (or the team's) expertise for a good many decisions and in varying degrees. And I do make suggestions based on past experience and on professional opinion. But in the end, if the client says they don't have time to write unit tests, that is their decision to make and all I can do is give it the ol' college try and continue on under protest, but good-natured protest. And I'm fine with that. To borrow a line from Bill Cosby, "I've seen the boss's job. And I don't want it." Although the danger here is if you are held accountable for decisions that you didn't make. What can I say? People will do that. Best you can do is document your concerns and hope you don't go down with the ship. Maybe I've been lucky in my career but this hasn't ever been a concern for me. I'll close with some facts about you, personally. Apologies if I'm shattering egos. I'm a hillbilly. I deal in reality**: - You are not in charge
- You don't decide what the application does
- You don't decide when the application can be released
- You don't get to hold back on demo'ing the application because "it isn't ready" (and in fact, it was in talking with someone about this very idea that prompted this post).
Passion is good. Good-natured ribbing is nigh on the most entertaining form of communication known to developerkind. But condescension and self-importance are a major turn-off to this hillbilly. Kyle the Nihilist ** Hillbillies also deal in generalities. I'm well aware that there are exceptions. But still, you're not one of them.
Tuesday, March 11, 2008
Got myself a delicious problem but there is another discussion to be had so I will leave you hanging on that one until a later post. I've already hinted at the software I'm working on for the time being. It's essentially something to help manage a land surveying office but what it does isn't really the point. What *is* the point is that it has some major domain object that needs to be managed. In this case, it's a Job (to use the domain term). A brief history: Jobs in land surveying office have always historically been a paper-based entity. There is a lot of physical information to collate. Land titles, plans, deeds, even the sketches the crews make in the field. These are all key pieces of information that need to be kept organized in some fashion. And it's all either visual information or third party data that they have no control over (and sometimes both). So to think that all of this information can be moved into the digital world is a little ambitious at this point. So historically, they tend to organize them into a Job. And naturally, a job must be assigned a number. And typically, companies will use a numbering system that will convey some information in the number. This can be something relatively simple, like M070123 which indicates that this was the 123rd job in 2007 for the Montenegro office. Or it could be somewhat more complex like BLC-08-A31 which might mean it's a BLC (domain term, don't ask 'cause I don't know) from 2008 from zone A of the city and it's the 31st job in that zone for the year. However it is generated, the fact remains that they need to maintain a running list of these numbers in a "book" (another domain term, again don't ask 'cause I've never heard of it either) so that they can generate a new one easily. As a new job is ordered, the person recording it must take care to record a new number in the running list so that there are no duplicates. Now here comes the consultant (i.e. me, and seriously, do NOT ask about this one) to automate some of this data. And as I start working, the inevitable question arises: Why are we still using this archaic process of generating job numbers manually? Computers *love* generating IDs automatically. Databases do it natively. NHibernate can get you a GUID in less time than it takes to remember what the acronym stands for. And so it was that I made a suggestion: Why not ditch the current mechanism and start over with something more computer-friendly? Like starting with an ID of 1 and going up from there. They can still refer to jobs easily. And though we're losing that tiny bit of metadata embedded in the previous version, we can glean that information (and a whole lot more) in the form of reports on the system. My job's easier and they've saved money during development. This being a family business (and my family's business to boot), they have reservations but defer to the "expert". There's a lot of "well, there may be some pushback from the others but if you think it'll be easier, go for it." I'm happy at a job well-done. So confident am I that I think nothing of an e-mail from my brother asking me to contact one of the "others". That is, someone outside the family but who is actively going to *use* the system. She has some reservations but is leery about bringing them up. She's young, inexperienced. What could she possibly say to sway the mind of the big, bad consultant? "How do we enter in existing jobs?" An honest question that deserves an honest answer, rather than the back-pedalling one I gave. Which basically suggested we'll have a field for OldJobNumber to handle legacy job numbers. And even as I spoke the words, the whole idea kind of unravelled in my head. Because the old job number is important. They've got cabinets and cabinets filled with files referring to them. And all of a sudden, I'm suggesting they create a whole new filing system. And that's just the physical aspect. Even within the application I'm writing, I'd have to present the job number differently. I had visions of: if ( old job number exists ) show it, else show job ID peppered throughout the code. So I swallowed my pride and admitted I hadn't thought of that. After which case, the floodgates opened and it was admitted that no one was really looking forward to it. And after some questioning, it turns out there is a very good reason for this, though not an obvious one. There is something psychological in having metadata in the job number. Sitting in the office, you'll notice that they are constantly bandying job numbers about. "What's the status of job M080050?" "Where are the plans for job V070758?" And when they call the jobs out like this, they can make a mental filter as they try to remember which job it is. You can imagine the thought process: "B-07-C98, that's that BLC from late last year in the Soho area, I've got those plans right here." Compare that job number with another that has an ID of 78945 and it suddenly becomes a lot harder to create that mental filter. In essence, it's more than an identifier. It's also a name. And a filter. And even a kind of mini-report. The lesson learned: Don't subvert your client's domain with all this new-fangled computer jargon. The net result is job numbers will still be auto-generated but they will be generated in the form that they're used to. It's not quite as automatic as an auto-increment but it's still very much algorithmic and can be done somewhat easily by the application. But I have *seriously* simplified how they generate them for the sake of this post. The reality is the tasty problem I referred to in the opening paragraph. By way of foreshadowing (or even foreboding), they have not one, not two, but *six* methods of generating a number for a job based on various factors, some of which require intimate knowledge of a map of the area. Stay tuned! Kyle the Auto-generated Final closing point, because someone may comment on it, is that I have no intention of dropping the auto-incrementing ID. But like most IDs, it won't be as in-your-face as I originally expected.
Tuesday, February 19, 2008
When my daughter was born, and even during the nine months leading up to it, my wife and I read a *LOT* of books. On pregnancy, on child rearing, on labour, on how to cryogenically freeze the blood from the umbilical cord. But when it came down to the really hard questions, I did what almost every new parent does: I called an expert I trusted. I.E. My mother. See, books can take you only so far when you're learning. Yes, they're important to get a general sense of things but nothing beats a proven expert's opinion and, even better, good old-fashioned experience. I remember a conversation I had with said expert. At the time, I was asking about some stupid little thing that new parents worry about. After she calmed my worries, I asked my mother: How do you deal with all the conflicting advice you get from people and books and magazines? She said: Do what you think is right, then find a book that says you did the right thing if it'll make you feel better. Now, eight years after the birth, I'm a little more seasoned as a parent. I've gained some experience and can handle most anything she throws at me (though she still surprises me). There are more than a few cases when I'll consult with peers on things like study habits, social skills, symptoms for illnesses, but for the most part, I leave it up to an intuition that has been honed over the years. It's about time to bring this back to software development and hopefully, you'll see the parallels. If not, well, they can't all be gold. I'm not suggesting you call your (or my) mother the next time you need to figure out how to resolve a dependency. But chances are, you have a network of peers and experts (sometimes the same people, sometimes not) that you turn to when you have questions or just want to discuss software in general. That, coupled with the aforementioned old-fashioned experience, is how I become a better software developer/parent. Books and articles and blogs and even discussion groups are good for giving you a sense of what's good and bad. But if you're faced with a situation you've never seen before, or if you've done the "right thing" and are feeling something's off, it's time to break out the free will, baby. This is important for people who are just starting out in software development or even in an area of it they haven't much experience in. It can be overwhelming trying to figure out what the "right thing" is. Or worse, you get into a situation where the "right thing" doesn't actually apply to your scenario specifically and you start fretting about whether you should deviate. I've been putting "right thing" in quotes because, well, you can't see me making quote-y motions with my hands a la Dr. Evil. But rest assured, I'm making them. And the reason is that the "right thing" differs from one situation to the next and, more importantly, from one person to the next. All it takes is one look through the altdotnet discussion list to find an example. Even given the exact same conditions, one person's preference may not match another's. And both may be equally valid. So if you'll feel better having a second aggregate root in your domain, by all means do it. But make sure it isn't simply a quick fix so you can go home. Maybe a single aggregate, lazy loading, and a unit of work will solve your problem. But then again, maybe it won't. In the end, a little confidence goes a long way. You're smart people. Like the title says, if it feels good, do it. But make sure you are always questioning what feels good. Kyle the Enlightened
Tuesday, February 12, 2008
Saturday, February 09, 2008
I think there are a few "standard" controls that are in serious need of revisiting/refactoring. One of them is the splitter control. Below is an image from Word 2003 with a document on the left and the thesaurus on the right. This is probably more obvious on standard monitors but on my laptop, the space between the dark grey bar and the side window appears almost as a single colour. I've placed red lines around the actual "clickable" area for the splitter. Here's another example with a horizontal splitter in Word 2003. And yet another, this time in Visual Studio 2008. Note that there is also a darker grey bar outside the red lines but just to add to the confusion, this is not, in fact, clickable. I'm still primarily in Windows XP/Office 2003 so maybe this has been addressed in Vista/Office 2007. If not, it needs to be. I've seen other complaints over the years about having to hunt for pixels in order to control the splitter so I don't understand why it is still an issue in 2008. Even the Apple guidelines state that a 1-pixel splitter is the most common. Or maybe it's just my eyesight and motor skills deteriorating. The Hillbilly is gettin' too old for this #*%$. Kyle the Myopic
Wednesday, February 06, 2008
The topic of this post is pretty much the polar opposite of what I was hoping to achieve when I came to CodeBetter since it is about as technical as your average Teletubby but it's here by popular demand. So if you aren't interested, this will be the last I say on the subject for a bit unless Microsoft decides to open a branch office down the street tomorrow. And it's a long one because I already feel self-conscious about writing one post on the subject so I don't want to break it up into two. I'll start off focusing on the negative aspects of the island life because those are what have always kept us on the brink of moving back. And they will do so for you, too, for at least the first year you live here. Especially if you start out with high hopes. But I'll segue into the positives just like I started to do after giving the place a chance. First and foremost, safety is a factor. Especially for me growing up in rural Manitoba in a town where the only rule of hide 'n seek was "You can't hide outside the town limits". In the second month we lived here, the babysitters that watched our daughter were robbed at gunpoint in the house they were housesitting while they were watching our daughter. This was in a gated community in the middle of the afternoon with 24-hour security at the gates and security cameras. If you ask me today why we didn't pack up and go home after that, I can make up an answer for you but the fact remains, you have to be conscious of it. Of course, these things happen in any city but it seems more prominent here because it's not a very high population. There are multiple ways you can give yourself the illusion of safety, most of which are common sense. This will keep the punks at bay but not anyone who is more determined. Again, just like any other place. Luckily, the punks are usually more common and the more determined people aren't typically that high on the evolutionary chain. But it still factors into your decision-making. The next topic is tradespersons. There are very few direct repercussions for plumbers, carpenters, and the like if they come to your house and say, cut through your main water line. There are codes in place but they are not enforced. (By the way, the same goes for drinking and driving laws which I'll leave for you to decide if that's a positive or a negative.) So you don't phone someone up in the yellow pages and expect a minimum level of service. Instead, you need to network. Talk with other people about who is good and who isn't. Namedrop those people that recommended the company when you call. Offer the tradesperson a drink when they come. Tip them when they leave (assuming you plan to call them back). Like a good CI process, it's all in the name of reducing future friction. Another bee in my bonnet used to be the lack of variety in food and regularly-purchased goods. It's not quite as bad as it was five years ago mostly because the supermarkets have finally started stocking Multi-Grain Cheerios. But I've had to solicit visiting family and friends for things like Ichiban noodles and toilet levers for side-mounted toilets over the years. In short, there ain't no Home Depot or Wal-Mart to "pop out" to. Related to that is the cost of living. It's high but in my opinion, not prohibitively so. The reason things cost so much more here is because there are import duties on anything that's imported. And as I've probably mentioned before, EVERYTHING is imported. The import duties are high because it's the main source of income for the government. Because there's no income tax and no sales tax. So yes, things cost 30% - 40% more here on average. But by the same token, you don't have to pay 30% - 40% of your wages to the government every month. It doesn't quite balance out because salaries here are lower than their counterparts in North America but that's why you'll want to look for a job working remotely. All in all, whether you consider the cost of living high depends on where you come from. Side bar I've heard tell that in the eyes of the IRS, once an American, always an American. I.E. You're pretty much taxed for life no matter where you live. Someone will have to verify that for me but if it's true, well, I feel for ya, man. Last major sticking point is one where your mileage may vary. That's a lack of easily-accessible activities. If you're in the mood to do something different, you're flying or boating to it. There are times when you just get sick of walking around Atlantis pretending to be a tourist. On the other hand, if you're a beach person, this won't affect you too much. In my experience, though, everyone gets island fever eventually. We get away a few times a year just to get a regular dose of civilization. So with all that cathartic negativity out of the way, let's get to the good stuff. And we'll start with the elephant in the room. It really is awesome to go rollerblading at six in the morning in the middle of January. That sounds bad for those of you stuck in snow but there's no getting around it. Rounding a corner to be met with the sun coming up over the ocean does not get old. Ever. Ditto for sitting out on the balcony listening to the waves and drinking tea. It took me a long time to realize it, but I will forgive a country a lot of things to be able to do that. That said, I have a tremendous respect for all you people sticking it out in the -40 weather up in western Canada. Brave, brave coders, the lot o' ya. Next stop is healthcare. I have absolutely no complaints about it and compared with my experience in Calgary, would recommend it to anyone. I can call my doctor at 8:00 in the morning for an appointment and he'll apologize if he can't see me before 2:00 that afternoon. When my daughter fainted unexpectedly one day while out with my wife, by the time I got to the hospital twenty minutes later, she was already in a room and had had a blood sample taken. Before we left two hours later, she had seen two doctors, had another sample taken, and had an ultrasound. Before the week was done, she had seen her regular doctor, who gave her a thorough exam including some other ultra-sound-ish test, and had received an EEG. I have had similar experiences myself, most notably with my hernia operation last year (maybe I should have put a disclaimer at the beginning of this post), which occurred a mere three weeks after diagnosis, and only because the missus was away and I wanted to wait for her to return before I had it for maximum dotage. I've heard horror stories from others but I haven't seen any evidence of it from my end. There is a caveat to all this. We pay approximately $600/month for health coverage for a family of three. And when we left the hospital after my daughter's fainting spell, I was extolling the virtues of the healthcare system and my wife just said ominously, "yeah, well money talks". Sounds vaguely capitalistic but hey, we're talking my daughter's health here! Besides which, that's also a nice little example of, shall we say, reducing friction, which is a very effective technique for a variety of purposes over here. But I shan't elaborate. Earlier I mentioned a lack of quality tradespeople. The other side of that argument is that when you do find someone you like, you get pretty quick service. Same day most of the time and rarely longer than two or three, unless you're dealing with government-run utilities, in which case the universal "three to six weeks" applies. I could go on in both categories but I think that about covers the high points. Plus I have some other topics in the wings that will hopefully bring me more in line with the "Code Better" moniker. The underlying message here is that moving to the Bahamas is not like moving from one city to another in North America where there's always a Starbucks within shouting distance (although there are five on the island). Expect a good dose of culture shock and pack a lot of patience with your sarong. But again, don't pack yet. I'm still working on the industry. Kyle the Indusrial
Thursday, January 17, 2008
This is a bit of a departure but what is a blog if not a dumping ground for random thoughts? This isn't really the point of this post but I've never liked Arial. It's too "squished" for my tastes. I prefer the wider letters of Verdana or Tahoma. But my current favorite font is Century Gothic with it's big round letters that harken back to when I first learned how to print. I was reading over Jeff Atwoods latest post which discusses, in part, the Helvetica font. I following the links to its relationship with Arial and finally, How to Spot Arial. I've never considered the difference 'twixt Helvetica and Arial before so I did a little experiment in Microsoft Word 2003 and Windows XP. The results are in the image below (click for larger version): Here's your quiz. Comparing with the notes in How to Spot Arial, which block of text above is Arial and which is Helvetica? And once you answer that question, here's a follow-up: What gives? Kyle the Rhetorical
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent
my employer's view in any way.
Copyright © 2010 Kyle Baley. All rights reserved.
|
|
|
CATEGORIES
|
|
LATEST POSTS
POPULAR POSTS
|
|
ARCHIVE
| March, 2010 (1) |
| February, 2010 (8) |
| January, 2010 (2) |
| December, 2009 (3) |
| November, 2009 (2) |
| September, 2009 (5) |
| August, 2009 (4) |
| July, 2009 (2) |
| June, 2009 (5) |
| May, 2009 (6) |
| April, 2009 (5) |
| March, 2009 (6) |
| February, 2009 (2) |
| January, 2009 (6) |
| December, 2008 (5) |
| November, 2008 (2) |
| October, 2008 (5) |
| September, 2008 (9) |
| August, 2008 (5) |
| July, 2008 (7) |
| June, 2008 (6) |
| May, 2008 (11) |
| April, 2008 (13) |
| March, 2008 (13) |
| February, 2008 (12) |
| January, 2008 (19) |
| December, 2007 (16) |
| November, 2007 (8) |
| October, 2007 (23) |
| September, 2007 (15) |
| August, 2007 (8) |
| July, 2007 (6) |
| June, 2007 (11) |
| May, 2007 (19) |
| April, 2007 (14) |
| March, 2007 (3) |
| February, 2007 (4) |
| January, 2007 (7) |
| December, 2006 (5) |
| November, 2006 (9) |
| October, 2006 (11) |
| September, 2006 (14) |
| August, 2006 (11) |
| July, 2006 (15) |
| June, 2006 (8) |
| May, 2006 (10) |
| April, 2006 (12) |
| March, 2006 (3) |
| February, 2006 (7) |
|
|
|