Posts from March 2015
My time the past couple days:
- Writing Project Euler solutions in Ruby, using the "get it done, get it fast, get it good" (alt: make it X) philosophy
- Realizing that I could no longer write the Python code I wrote less than a year ago
- Crushing it on phone interviews that I didn't plan on having anyway
- Faceplanting on an in-person interview that I should have been able to do better on
- Writing and analyzing algorithms with people at the office
- Taking on projects that sound interesting until you realize that you're trying to bite off way more than you can chew
It's important to stay busy with productive work, but it's tempting to think that what you're doing is valuable when in truth the marginal utility is pretty low.
In other news, it's interesting to see how natural writing Project Euler solutions is in Ruby compared to Python. I have many fewer head-scratching moments when it comes to the natural plan of attack—generally, I can just implement the solution that comes to mind, and it runs well enough. Project Euler is, I think, like Alaska: it's not where you learn, it's where you prove yourself. It just happens to be the biggest name in toy programming problems, and many people assume that it's good at teaching you… something.
Not sure what else to say. I'm trying to keep at good habits, and I started thinking about what I wanted to write on the train in today, but then I started thinking about how to build an Abstract Syntax Tree in Ruby (and whether I really need to in the first place, to do what I'd like) and lost what I was going to write. Oh well. More practice; back to the grind.
I don't know why this title made sense to me, except in that I haven't written in a couple days. It's been interesting, for sure—I've had a couple phone screens, which have been all over the map, but tremendously useful for learning how to better present myself—but I haven't felt like doing major work for a while.
Is this bad? The projects I'd like to do are hard to wrap my mind around at the moment; part of me wants to learn a systems language in more detail, but I know that it's not a close synergy to anything that's going to get me work, now. The only places that want systems languages want Java for the backend (or C#); learning C would definitely be a stretch in terms of immediate utility. Is that so bad?
Maybe statistical programming would be better. I don't know; there are so many things to learn out there, so many projects that could be useful to someone, and I could devote myself to them, but which? Will doing that make employers look on me more fairly? Do I want to work at a company where a single week of working in Angular would be the difference between me getting the job and not? (Probably not. A competent engineer could figure out what needs learned pretty quickly, and I don't know if I'd want to work for a company that would disagree.)
I want to have a job, so I can worry about more granular things, instead of whether I'll run out of money before this process finishes. I want to be learning a ton of new things about production code, and making my own projects on the side. I want to write a couple books and learn TeX and not feel guilty that I'm not working on finding work. Soon.
My mantra-in-testing right now is "Seek Pain." It's a reminder to always try to be doing something that is hard or causes you anxiety or stress, to make you better, so that the next level skills will come sooner and faster. So, do something until it becomes a habit, and then it won't be nearly as scary, and the harder thing won't appear insurmountable anymore.
Today I realized that I've been living my life in near-constant low-level anxiety for more than a month, and I haven't felt this good in a while.
So, to the world: You can't do anything to me that I'm not already doing to myself.
I've been thinking about interviews on a conceptual level a lot recently, and especially the question of what is my greatest weakness. Without exposing too many of my cards to people who might be interviewing me in the future, it's an interesting question, and one that's hard for me to nail down.
I have a hard time coming up with traits that are not both strengths and weaknesses. It reminds me of role-playing games: every skill point invested comes with an opportunity cost. Further, I have an outstanding question about real humans: to what degree are certain traits mutually exclusive? For instance, someone who looks really sharp all the time is probably not going to be the ultimate hacker; hygiene takes a non-trivial overhead cost on your mental processes that is (probably) incompatible with being a super-hacker.
We don't really know enough about how brains work to nail down everything there is to know about what traits are likely to manifest in a single individual. Does competitiveness relate intrinsically to violence or impulsiveness or something else? There's no way to know, yet.
So in light of all this, some things I'm not so good at:
- Putting down work when it's "good enough"
- Biting off small pieces of large tasks
- Trying to think through everything that could happen in an abstract situation instead of doing and seeing what happens
- Getting started
- Giving myself enough credit
- Doing things whose purpose I don't understand
- Doing things when I don't respect the desired outcome
- Attacking a task via the sides instead of the front
- Killing my darlings
- Writing concisely; respecting my readers' attention
- Accepting less than an optimal solution
On the flipside, I am super-tenacious and will see a problem through to the bitter end, if it's possible at my level (e.g. without a PhD in Math and six years advanced study).
These bullets seem to cluster around a couple personality traits. I'm slow to start, slow to transition, and absolutely dogged in the middle. I work very well when I am concerned with the process and not the purpose—what I refer to as "suspension of disbelief" tasks. To elaborate, when I started in the Army it was easy for me to just perform, because I was working against my former self, trying to become faster, stronger, more Army, etc. When I just started at City College, it was easy for me to give my classes everything I had, because my purpose then was to get the best GPA I could, acting as if the degree was the only thing that mattered. Later on, I saw what a clusterf*** the Army was, and how misguided leadership was; later on, I saw what a house of cards the world of higher education was, and couldn't stay in that world when there are ways of educating that are clearly better.
The act of identifying trends and clusters gives some insight on how to attack them. For instance, when I don't respect the desired outcome of a task, try to identify something in it that will make me better. If, some day, the answer looks to be "get enough money to go home and do something that I care about", that will be a sign it's time to quit that job.
So, the answer to the "real" interview question—"what is your greatest weakness and what have you done to compensate for it—for me would be … something like this:
"I am not decisive when I don't have complete information. What I do to compensate is to try to identify some complete task that I can tackle, and set my mental benchmark for success in such a way that I do what needs done and move on to the next thing. By the time I've gotten my feet wet on something I understand the scope of the larger problem much better."
It's a work in progress, obviously.