Posts from February 2015
Years ago, I was having a fight with a girlfriend, and when things had settled a bit, we had a level-headed conversation about what I needed to do.
One of the notes I wrote myself was to the effect of "Learning to ask for help, and getting it". Meaning, when I had problems, I expect(ed) to be able to deal with them myself, but that's not how being alive works. No one really get anywhere themselves.
A couple years ago, my boss sent me a curt email saying that I needed to start asking people for help earlier on in the troubleshooting process, because it can save time. There's a balance between being helpless and always asking others to do your work for you, and never asking for any help. This is, basically, knowing the right time to ask for help even though you could solve your problems on your own.
I was taking some pride in never asking for TA help on solo days, because there was never any problem that took longer than a couple minutes, but there were always more problems.
I write about the future of schooling, and how teachers and TAs are education multipliers: they help lead students to good avenues of attack, and know when to step back and let them struggle a bit.
Last night, I asked Jonathan for advice on an issue with the assets pipeline, and over the course of three quick interactions I was able to generate the behavior I wanted. (Why does every problem fix, including home DIY work, seem to require three tries? Is there some truth to fairy tales?)
There is no intrinsic virtue to being able to do everything on your own, because the guy who doesn't have that hangup will far surpass you, even though you might feel more self-reliant.
One of those things… I assumed Wordpress was a mature platform, and it is, but there's a bunch of weird interactions between, for instance, Markdown and post by email. In this case, the post I wrote last night cut off early, and it took me a second to figure out why, but I think I know.
There's an old standard for signature lines that dates back to Usenet and the early days of email. A signature would be demarcated by "– ", that is, two dashes and a space on a line by themselves. Wordpress is supposed to prune off email signatures… but.
Markdown uses multiple dashes on a line by themselves as a horizontal separator.
Google, I think, trims excess whitespace.
Can you guess where this is going?
I used post by email once a couple weeks ago, and my email signature got attached to the blogpost. I used post by email last night, and everything below my first horizontal separator got pruned. lol what?
Tumblr has issues, but their markdown and post by email were about all I could ask for—simple, clean, error-free. Wordpress is … leaving a lot to be desired.
For unto every one that hath shall be given, and he shall have abundance: but from him that hath not shall be taken even that which he hath. (Matthew 25:29)
Yesterday I was looking up an old contact (who is a lot like me, but much further along, and with enough money to not have to care), and the memories came back in a rush. It's hard to sum up what anything is, what any experience is like to people who aren't you, but I can mention one thing, the thing that I needed to read.
In this essay, he talks about how he writes. He has an easy writing style, and apparently people come to him and ask him how he writes so well. His response is that he deliberately writes what is easy and approachable (e.g. that which he knows a lot about), and in time the other things he wants to write get easier. He tackles those in their own time, once he has enough practice/warm up/etc. under his belt for those to be easy to write.
Like others, I write darlings, and it's hard for me to kill my darlings. It's pleasing to me that when others proofread my work, they point out problem points in the same places I see them ("Oh, this is no good… I'll leave it in for now, though…" "Yeah, this is no good, you should change this/take it out/jump in a lake"). That's not to say that I always know how something needs to be changed, only that I recognize weak spots.
Anyway, all this comes together into some thoughts about skill generation in general. Writing and graphic design and programming aren't so different in many ways, ways that could fill a book, which is not particularly surprising given my philosophy of "everything is everything". In keeping with the spirit of this entry, though, I'll point out that when you stumble in your craft, the best thing to do is keep working on something.
Admittedly, you will need time to let your brain process. When you make a typo and overlook it for an hour straight, that's usually a sign that you need to do something else, like run on the treadmill for an hour, drink heavily, and pass out. (By morning, all your problems will be much shallower.) There is a route to maximal learning and maximal skill development, and it doesn't typically involve doing the same dumb thing until you're too tired to do anything right, and by the way, you've just spent an hour anti-training by practicing bad habits.
It's been a long couple days, for no particularly good reason. I've actually made a lot of important progress—note here that I'm not saying a lot of progress, in an absolute sense—in getting my head screwed on straight and doing important work. I talked to a lot of people, in different contexts, and these low time, high value conversations are really great for figuring out what I want, and need.
I started sketching out a book that I want to write in parallel with the book I need to write (because my battery died and I had a long train trip, oddly). I think this book will feed into the book I've been trying to write for the better part of three years, if I can make some headway on it. Meanwhile, I have my eyes on a half dozen pet projects that can help strengthen my portfolio. None of them are small enough to sink my teeth into at the moment, and none of them are dire, but like writing, the act of thinking of pet projects leads to thinking of more pet projects. I still need to figure out how to have a brainstorming repository, since every time I start something it all just gets more fragmented, but that should come in time.
Ugh. In other news, I'm wrestling with some asset pipeline issues with heroku, and I'm about to tear my hair out. It's distracting me, and thus I'm not able to give enough attention to writing this. I know there's more I wanted to write, but I have a hard deadline tonight so I'll have to pick this up later, if I can find the track again.
I have to write for the book I owe in October starting soon, so I've been thinking more about writing in general and how things are communicated. (Perhaps this could be considered semiotic thought?)
The urge to try to tackle a different book has resurged, especially now that I'm writing here without the threat of fine. Writing is comforting; however, this style of writing is a bit too unrefined and "work avoidance" to really lead anywhere. If nothing else, the medium format stuff seems to be a good lead in to starting work, and getting into a good groove. I wonder if other people feel the same way, and that's why some people get to the office early and work on email?
(As a sidenote, perhaps that's reason enough to get out of bed early, other than the cat crying. Maybe I can find something to write about in a longer format and see what happens to my motivation/well-being.)
The segue here is that Tommy asked me for a progress update, and I described to him some of my struggles, and he was pretty good at reassuring me that I'm on the right path. But what helped, and is helping, most, are the short phrases—remember, when you came here, you were already above the top 95%; what's more important than the company is the team you'll be working with, etc.
I try to collect little clippings and reminders of things and hold on to them until they stick with me. This is one of my lingering problems, actually: getting all the clustered information out of my head and into a format where I can manipulate it. I was actually considering exploring some different technologies in order to make a Scrivener knock-off, because the plethora of similar tools never seem to quite mesh up with my needs, but I know that that's probably another blind alley. If I could figure out the interaction model or something, maybe it'd be easier, but it certainly wouldn't be trivial by any means.
It's surprising how much productive work relies around having the right information available in the right format and being able to manipulate it in an easy manner. This is probably the central problem of software, in short: while maybe 90% of apps boil down to CRUD, making interactions painless and contextually meaningful is the where interesting work happens.
There's a link here, though: getting the right "core idea" matters as much in writing as it does in software (or mathematical proofs, or… so many things). In most mental work, there's some foundational piece that helps you stay on track, and helps the audience get in tune with you. Good writing will have a rhythm, where a long description will build to a purpose, or a witty or touching statement, and that will stick with people. Good software has a clear purpose, I think, and should be similarly scrutable to an audience.
What are the relative demand levels for entry-level engineers vs. engineers with experience? Are they equivalent? Presumably, if the pipeline stays somewhat stable, there should be slightly fewer devs with 3+ experience at any moment than entry level devs; where are the demand levels?
If you just can't fill a slot for a mid-career developer, and you have a reasonably-sized team (i.e. not a single devops, a CEO, and a dude in sales), you should be able to take up some of the slack by hiring junior devs and managing/mentoring them adequately.
A company that can figure out how to do this will be picking up money that others are leaving on the table, because a lot of those Jr Devs will end up being the mid-career devs with (hopefully) a bit of loyalty.
Have I said these exact words before?
The more your name is out there, the more interest you can get and the more you can identify your market value. It's analogous to a stock market: a low-volume symbol will likely have a large spread, which is (analogous to) the margin of error.
I'm not intending to tip my hand too much, and worst case I can make some of these entries private in case I feel that they put me on a weaker footing in my search. But the cost of not marketing yourself, in my case, may turn out to be about $15-20k/year.
I know who I am, but without marketing, no one else is going to know that I've got a lot to bring to the table. But the fears that I have—of being judged, of not having others see me the way I see myself—while not precisely abnormal, are doing me a disservice in this process.
All I want to do is to work on coding projects, because I'm not my own best advocate, but I know somewhere out there is a company that really wants me, they just have no way of knowing it yet.
In related thinking: I am not as virulently against marketing as a lot of people out there. It's nice to just be able to research the thing you want, look through objective(ish) reviews, and then make an informed decision, but I honestly believe that only works for the barest minority of products. There is some threshold, before which a product is not getting enough people using it who honestly would want to. Tracking information about consumer preference and demographics is part of a process of getting sellers in contact with buyers who would lean in their direction; I think the common (unstated) fear is that the established brands have the money to drown out more fringe companies.
In turn, though, and especially when some fringe company is trying to generate network effects, sometimes no one wants the minority player. In the internet age there's not a ton of room for another full OS, because each one siphons off talent, and it's really hard to develop all the features people have come to expect without an existing technology base. I suspect the next major OS will supplant someone.
Similarly, anyone could have seen the Seamless/Grubhub buyout coming. I don't want to have to figure out which company my local delivery joint uses; I just want some damned food. And there are a lot of Grubhubs out there. You haven't heard of most of them, and they'll probably die, or stay marginal for a long time.
Which might not, after all, be such a bad thing. Most regions have at least two grocery stores, and those grocery stores have operating regions… fragmentation isn't always bad. They are a highly commodified market, though: every single one of them sells Cheerios, bananas, and Ajax, so they're not that different, whereas two different websites in a similar field might have completely different interfaces and data models, as well as corporate partners/networks.
I don't know what an area of technology that can support true competition over a long period of time looks like, or if it can even exist. And I don't know if I really want to work for a will-have-been… but I know that engineering jobs are so transient that it probably doesn't matter in the end.
The next two years are for straight up learning. Don't forget that.
Continuing on the idea of identity, I'm starting to think that in any practice as personal as job hunting, it's tremendously challenging to disassociate yourself from the process of searching. Meaning, largely, that you're never not looking for work for yourself, you're always thinking about what you'll be growing into in the (near) future when you're looking for work.
Perhaps the key, especially for someone as identity-sensitive as I am, is to pretend that you're looking for the sake of someone else. I can give good advice to others, and I know what I should be doing, but thus far I've been terrible at following through.
I can't imagine myself at a lot of these places, but I have to credit that at least partially to my lack of imagination.
In the meantime, I think my goal until I run out of ramen is to pretend that everything is about someone else, and that I've just been employed by this person to do the legwork of a hard-core job search, and that they're the one who is living in terror.
I have the easiest time not being a perfectionist when I'm working on something that I don't care about.
I think this is an extension of my thinking about identity. I identify strongly with my work, more specifically my work output, and when I don't feel that my work on things that I identify with is good enough I get tetchy.
Meanwhile, I can recognize a finished product, and get my work there much more easily, when the topic isn't something I have strong opinions about.
Each one of us means, with our words, exactly what we mean; no more or less.
When you are misunderstood it's often because the other's use of words places a greater significance on a given definition than you do.
Despite my half-vow last week to try to write more, it doesn't seem to have worked out that way. I only consider myself to have missed a single day (Friday), but that's enough.
Thursday I left off having torn out my user auth and dropped in
devise; I was getting frustrated with it by the late hour I left, whenever that was. I finally got it working today, and even though it's one of those things that's really powerful once it's up and running, there's so much going on with rails and devise metaprogramming that it was hard to pin down where the weird behaviors were coming from.
Long story short: getting ajax sign-in working is highly non-trivial in devise, because it has a lot of expectations for how you'll be using it. There's no easy way to shove the user's account data down the pipe when logging in via ajax, and it's not clear from the documentation what's breaking.
It turns out, though, that you can call
:locationargument, and rails does not respect that unless the
:formatis html. So when trying to debug what appears to be a straightforward statement, using the suggestions written by the devise authors, you're led to fixate on a couple small lines of code that actually have nothing to do with your problem.
This is the double-edged sword of using a framework. Once you figure out enough of the gotchas to get things moving, you get a lot of reliability and power for free, but you're forced to either use things how they intend you to (in the given examples and configuration options) or hack up enough of the framework to bend it to your will.
Oh, well; that's out of the way. I may have to generate a toy project using straight rails and vanilla
deviseauthentication to see how it's supposed to work, because I'm not entirely happy with what I've got now. That seems to be the way of this latest phase of my final project: I've been adding things and discovering the limitations of a lot of the more robust options out there, and it's annoying.
One of the things I added to my portfolio recently is a set of progress bars representing my knowledge of different tools. I was reluctant to do this, because any progress number seems quite arbitrary, but I'm willing to venture that one thing that represents knowledge level is when you begin to get frustrated with a tool.
In fact, I'll put this forward: if we're all being honest, able to use something while using the documentation might be 10% knowledge; 20% would, then, be, able to complete simple tasks without reference to the documentation. 30% might be the point where you start saying "oh, this is neat!". At 40% you feel at ease; 50% would be the point where you have the documentation open, but you don't rely on it. By 60% you forget to even open the documentation, but at 70% you've got it open again because you're trying to do something that the tool just doesn't make easy. At 80% you're saying "oh, for god's sake"… at 90% you're patching the tool.
It's rough, but it's something. With this framework, my resume is a bit of a lie, but it's close to accurate so I suppose I can leave it. And by this measure, I'm at 80% with some things I wrote as 70%, and 40% on some 50%s.
I'm okay with this, in the end.