Sunday, May 29, 2011

Gas + Commute = Bad: Before and After the move to Seattle

On March 21st, I left Overland Park, KS where I was driving an hour a day to work. Coming to Seattle, I wanted to live close to work, so I do. I can walk to work in less than 10 minutes. If I hustle, then it can be done in five minutes. I don't even need a bus. I'd like to share some numbers from my mint.com regarding gas usage.

January$363
February$402
March$293
April$39
May$0

The gas tank will be empty on June 1st, so I put $40 in it. I expect that to last until the end of june (at least). The only reason I have been driving recently has been due to my wife's check ups for her broken ankle. Beyond that, we can live in harmony without a car. Which is good because traffic in Seattle can suck it hard.

Now, you may be thinking, but I like saving the money by living in the burbs. OK, great. But, I get to have that smug feeling that I'm better than you because I don't use gas. That's way better. That combined with my wife's obsession to recycle means we are a green family with our heads planted firmly up our asses. It's awesome.

Saturday, May 28, 2011

Business for Programmers: Marketing Yourself with 10 steps

The nice thing about being in a start-up is that you work with marketers and salesmen close, and I had the pleasure of working with a fantastic marketer and superb salesmen. So, you may be wondering why a programmer needs to know anything about marketing?

Well, that's a good question. If you look at a business, then it breaks down into doing these four tasks:

Build Thing: Make a product/Offer a skill to service
Market: Find people that like said thing
Sell: Get money for said thing
Support: Make sure said thing survives customers

That's basically the entire understanding you need to understand business. If you can write a business plan in a page that addresses these four things, then you can build a business.

As a programmer, you are a business; ignorance of basic business fundamentals will own you in the future. You go to school or hack your projects out, and this will build your skill at building things. However, if you build something and no one uses it, then did you build anything?

Step 1: Have skills that fit the market
Do you have skills that you can market to companies? You need to have skills, and your product needs to fit the market. If you know COBOL, then you may want to upgrade to Java/.NET. If you know OCaml, then you may want to downgrade to Java/.NET. Learn PHP or Perl since it is a plague on web programming.

Step 2: Find a passion, pick you destiny
You need to be passionate about something, and you need to have an interest in computing. If you don't have passion, then you are not going to be a good product. This guide isn't going to be much help without passion. While you may be passionate about computing in general, you need to decide on one to build a career on. If you want to be a generalist, then you can free-lance or be a technical co-founder. If you want to be a specialist, then you need to find a company that needs that specialty.

Step 3: Join/start an open source project centered around your passion
Just get involved in the community or try to build your own. (a) it will help you network, (b) it will communicate your passions. Everyday, you need to be writing code on something.

Step 4: Have a github account
Make good code, and share it. I'll be honest, your resume compared to github is shit. Get something good on github that is tasty. Now, get 10 followers. Pick code to share is similar to the code you could stand writing for the rest of your life.

Step 5: Dedicate time to stackoverflow/quora/forums/linkedin/reddit
Make an effort to contribute/lurk every week. Scouring these sites gives you an idea about the entire market in two ways. It gives you an idea of your competition, and it gives you an idea about the current market conditions. Any site that clusters programmers is worth paying attention too.

Step 6: Build Karma on HN
If you don't have an HN account and consider yourself a hacker, then shame on you. You must be living in the cave. I get it; caves are fun. Now get an HN account and start contributing. Don't interject until you know you can add value to the conversation.

Step 7: Get over rejection
There is a new thing called rejection therapy, and I recommend it. I recommend buying some products and trying to sell it door to door, and you will understand the nature of sales. Understanding the nature of sales is critical to understanding the importance of marketing. You need volume.

Step 8: See the world as risk/reward and take bets.
Look at the newfangled shit that comes out of the industry. I remember betting badly against ruby due to it being stupid dynamically typed shit pie. I didn't take the risk on Ruby, and I lost out on the reward. There's a new thing now called node.js; is it worth the bet? I don't know, you decide.

Step 9: Put yourself in the business of your customers
The nature of programming is that the act is usually always helpful to someone. Who are you trying to help solve a problem? For who? You? Your Mom? Your friend's Mom? Your coworker? Your business partner? Before you can begin coding and solving problems, you need to know who you intend to help. If its just you, then fine. If it is your coworkers, then you should probably talk to them. Why do your customers need you? How do you make your customers more awesome?

Step 10: Meet people
We live in a new world where sites like meetup.com can trivialize the finding process. Everyone is looking to socialize with the right people. Once you find people. Don't fuck it up since that tends to make bitter people (i.e. you alone in your parents basement troll'n it up). Read "How to Win Friends and Influence People", and then try to apply the principles.

Monday, May 23, 2011

The Engineer and the Artist

I've noticed a pattern emerge amongst my friends and myself.

Many of my highly technical friends are computer scientists, mathematicians, scientists, and engineers. They would be the canonical examples of left-brain thinkers. Most of them have married (or in an active relationship) with an artist of some kind. The significant others are the canonical examples of right-brain thinkers.

The pairing is perfect.

Since I'm most familiar with my wife, I'll share some things I've learned about my wife and life in general.

My wife inspires me.

Before my wife, I was a methodical machine producing code. I try to change the world and make it better. Engineering, science, math are the ways we organic clumps of meat transform reality to make our lives better. Life is messy, and its our job as engineers is to clean it up. Why?

Once I've constructed the perfect reality where I sit in the middle of a vast plane of mathematical perfectness sitting on my throne of enlightenment, then what? Seriously, once I achieve the perfect state of the universe, then what? Once I've made all the money in the world, then what? Once I've built what I wanted to build, then what? Once I've built the ships to carry us out to conquer the universe, then what? Once I've conquered the universe, then what? Once I've reduced all existence to a single dense form, then what?

Explode, break it, and fuck things up. That's what.

Engineering is the way we improve our lives, but it is not the answer to the meaning of why we live. People find meaning in all sorts of ways. This is when I discovered art. Why is that pretty? Why does that move me? Why does a song sound beautiful? What are these emotional things? Why are the cracks in the pavement interesting?

These questions are the ones that turn a black and white reality into a messy pile of grey.

Who employs my wife? me. Now, if I could just get her to sign the damn employee agreement! Artists!

Seriously, I love my wife. Everyday, she teaches me what it means to be human. She breaks the mechanical barrier that I have around my heart, and she inspires me to be better. Not better in the engineering sense, but better in the sense of being a human being. Without my wife, I would probably turn into some troll.

Life needs more love.

I think engineers are attracted to artists for this reasons. If you are an engineer, then you have to deal with the shitty facts of reality. Like the speed of light. The speed of light is a mother fucking bitch. I hate it. Laws of thermodynamics suck too. Gravity, oh its a mother fucker! Seriously, life is full of shit that some engineer has to go in and work around.

Why do we deal with all this shit? Well, because life is harsh without engineering.

Now, I'm not saying that engineering is devoid of art, engineering can be an art. However, at the end of the day, the things engineers build have to work. This means that engineers can not wave around magic wands and make life better. It's slow methodical work that requires team-work.

Art fundamentally does not answer the ultimate question of life. This question, which spawns religion, is in my mind unanswerable using any formal reasoning system. I have no methodical way of exploring this question, so I don't. Art however is a great way to keep our minds off that question.

Meeting an engineer's significant other generally will generally tell you everything about them. My wife is the kindest person I've met. She feels bad for stepping on flowers. She's sweet and kind. She changes my world view much to my infantile protests. I swear, she doesn't have a mean bone in a body. She even recycles hard-core!

She inspires me to try to write poetry, and she opens my heart in a way that I can't express. I can't engineer a feeling, but her existence is like poetry.

Sunday, May 22, 2011

Instead

of hacking away at some bitcoin-bazarr, I spent the majority of my day making my wife happy, writing a love letter to my wife, and reading.

What did you do today?

Me the philosopher

I'm thinking about life and death and stuff; does that makes me a philosopher?

Yeah?

Sweet! I'll add that to website.

The dream that was our first failed start-up; start-ups are hard; the future is bright

I've recently discovered the awesomeness of bitcoin. Some years ago, me and some friends did a start-up before it was really super cool. The dream was simple: enable artists to buy and sell their shit as content is king.

There was a sub-text to the dream that was simple: FUCK MIDDLE-MEN.

We were building a in-system currency for enabling micro-transactions so people could sell things for fractions of a penny. We wanted to get prices to a point where indie artists could create and stimulate market demand by using low prices. In theory, it was awesome.

I fucked this up by being an academic trying to build a transaction system that would abide by all the rules of VISA/MC/banks, and then scale to the size of 10x facebook (Transactions are hard!). I say I fucked up because I think I put us in a position where we needed investment. There were lots of legal problems around our dream, and this was a big barrier to investment; so, we watched the dream die a slow and painful death. At least, in Kansas. Gauh, why did we try to do it in KS!

Now, the perfect solution is available via bitcoin. I'm honestly glad we didn't succeed because bitcoin + a weekend hack project could have put us out of business. We live in a bold new world with this internet thingy.

The dream we had can now be concisely built and done without worrying about VISA, Banks, Hackers or other shit. In fact, a bigger dream is available. Shit!, bitcoin could end piracy! (Well, kinda)

We are watching the death throes of the music industry. Eventually, the movie industry will end too. See, its not that music or movies are going to die. The middle-men, executives, organizers, and overhead to get the music and movies to consumers. They are going to go away with all the licenses.

Well, they aren't going to go away in a #rapture sense. They are going to have to accept a new reality (which is painful because most people hate change rather than embracing it). They are going to have to focus on the new emerging market and learn a new aspect of the trade. Well, people will skill will. People with no skills, they are kind of fucked... They should become artists.

How? Well, imagine a bit-torrent like protocol that required a bitcoin wallet. Sharing would be restricted between those people that have paid for it. The artist would simply start to seed their product with their wallet. In theory, this would lower the price of the content, increase the artist share. Lower product price + greater artist share should mean increased demand and thus more value to the artist. The ability to control pricing on the fly would enable artists to effectively market.

Downloading a client would be the most hard-core version of this scenario, but it is possible.

The interesting thing is that bitcoin is unstoppable. It may go into the black market, but eventually, it will win and be a legal form of currency. At least, for buying digital content.

What I'm considering now is whether or not it is worth it for me to build an escrow service with a search engine. It would be fairly simple with Elastic Bean Stalk, S3, some EC2 machines for search via Solr. Shit, I should be building this! Next weekend, I'm going upstairs to be with my wife.

What this system is going to create is a place for amateurs to get to a point where they can take on patronage projects. Once people effectively demonstrate that they can make things people want, then they can raise serious funds. Look at KickStarter. I love kick starter.

This is how small time videos produces will go big. I watch a bunch of YouTube people, and if they tried to raise serious funds, then I would fund them with some pre-sales. Now, how this will turn into $1B budget for making movies, only time will tell.

I think it is possible, and that is step one.

A good problem to have (unless you are Sony)

"A good problem to have" is entrepreneurial way of saying, we are fucking this up and pushing shit out the door, but it doesn't matter if no one uses it.

For many people, it works.

For some, it fails. See PSN.

When you incur technical debt that puts people at risk, then you must pay it.

My role in life is not to create "good problems to have". My role is to solve them. I like solving puzzles. This will make sense as I'm writing a larger entry, but I wanted to throw some content out the door that was self-contained to my future main-point.

Saturday, May 21, 2011

WeUseMath, so do I; I love math

I like math, and I used to own mathsex.com; I was trying to sell math a long time ago. I used math yesterday to see if I was about to blow smoke up my own ass. I like math because it's not bullshit. Fuck, my alias is mathgladiator.

Now, here is what I understand. The US has severely fucked up math education. Like, SERIOUSLY fucked it up. What does math need?

A new fucking name! I mean brand. The brand is toxic, and we should dump it. People hate math, and this is a religious zeal. I don't think it can be saved by smart people; it needs to be solved by good marketing.

Let's re-brand it as "hacking the universe of truth" or something like that. I wonder...

I'm too old for node.js; maybe

I got up today excited to do a bit of hacking since my desk is now cleaned and workspace is optimized for getting into flow. It took longer than expected to get to a steady state due to the new job, the move, the wife breaking her ankle, and exploring the awesome city of Seattle.

I started sketching out what I wanted to do today, and it required good S3, SQS, and EC2 libraries. And, I wanted to do it in node.js. The thing I wanted to build, well, I can't talk about it. But it is super cool.

The library support I wanted from node.js wasn't what I needed, and so there I was with a decision. Should I

(a) roll up my sleeves and do the whole github thing and get shit fixed
(b) say "fuck all" to the community and write a better more awesome library set
(c) mock up with a silly prototype
(d) scrap the thing and give up

The answer is C, I was done in ten minutes with the prototype. The idea makes me happy, and I can go back to bed where my wife which would ultimately be a better move than dicking around with code on a Saturday morning (boobs > code, deal with it). Should I decide to commit to the project more this weekend, then I'll probably do it in Java. Why? Because Java has rhino which is good enough for what I need. And, eventually, if my idea pans out, I may just throw away rhino and use antlr to do the serious business of writing what I ultimately need (because me + antlr = magic).

Answer B is what I would have done before I did start-up #2 (the one that made money), and this tends to be the reason why there are so many half-baked things in the Open Source community. In fact, there is a phase when you are young and you are compelled to create things. You have to prove it to yourself. Until you prove it to yourself, you tend to make the worst code ever (and also, most potentially, the most innovative code). The proof that I could create was when my first "product" was sold for $60k. All my code before the start-up was shit even the first "product", and while I feel bad for selling shit. Most shit that is sold is, well, kinda shitty to someone (That's why you need marketing, to find people that don't think your shit is shit). All my code during start-up #2 is meh. All my code now, well, it's production-worthy.

Answer A is what I would do if I was an active technology co-founder. Most old-school business guys don't understand open source. I'll write a blog post up on that one day. For now, just consider that this is a very good option provided the community lasts for long. That's the open source gambit. I think node.js is a young man's game. It's awesome and full of potential, but it will require a lot of work and reinventing many wheels to get to production worthy-ness. The libraries need to stabilize further before I can build on them (standing on the should of giants?) and do my research with them, and I'm not really willing to commit large portions of my time rewriting/fixing libraries that already exist in other languages. So far, beyond really awesome IO, node.js isn't that sexy for research.

Answer D is not really an option for me since I'm obsessed about seeing and feeling my ideas work and studying consequences. Until I get some half-baked crappy solution out the door, I can't be rational about and see it for the steaming pile of shit that it may (or the revolution of awesomeness that it could be). Until I test, taste it, and see it, I don't know. This is a fault about me. I also like to tell people about my steaming piles of shitty-code.

So, where do I stand on node.js? Node.js is awesome, and if I was a start-up CTO again, then I would be using it hard-core. Why? It is virgin territory and building with, promoting, and helping the community will build up your technology brand. Node.js helps a start-up more than established companies on two fronts: PageRank effort + recruiting. Google's PageRank is life-blood for many companies, and not having it can be bad and expensive. A link from the technology community is worth the weight of a fat baby in gold. Recruiting young-eager programmers is a key part of any companies strategy for growing and being successful. Building on node.js makes your company super sexy to young-eager programmers. For start-ups, this helps them rationalize a hit to their fair market value since they get to have sex with node.js on a daily basis (happiness is strange like that).

Now, I'm an old man with big and or important questions. And, while I find node.js to be that sexy chick at the programming bar, I find myself married to big and important questions which require mature and establish languages and platforms. So, when I fuck up, I know its me and not everything else (unless I've stumbled on a bug which should be rare, but more importantly easily observable in a mature platform). These are fundamentally more important than squeezing a bit more compute/io utilization out of a machine since I'm tackling problems that need to depend on a lot of production-worthy code.

Until you youngsters get your shit straight and make node.js mature, I don't have the time to fuck with it. So, I'm jumping back in the C# and Java camps with static typing and mature sexy code, and when I need awesome IO, I'll use erlang because erlang is awesome.

Thursday, May 19, 2011

Routine

Get up between around 8AM, deal with morning shit, walk to work, eat breakfast, get crackin' on work to set a context, walk to whole foods, eat an epic meal, walk back to work, get crankin' on work, go home, cook dinner, bed activities, sleep

Saturday, May 14, 2011

Adventure into Pike Place Market

OK, I am establishing my weekly routine/framework. Today, I'll post about my Saturdays. I'm on the slow carb diet, so every Saturday I eat some protein when I wake up (this wakes up the metabolism and prepares it for destruction), and then I head off to Pike Place Market for absolute destruction on some poor helpless carbs.

So, I walk from my place to westlake and mercer where I jump on a S.L.U.T (ok, SLU street car). I watch the road pass and see the space needle (pic). Getting out of the SLUS (not as fun acronym), I see a statue of some dude (pic). Walking down to the market, i see a nice sign and fumble around to take a picture with me in it (didn't see how with instagr.am to use the front camera). If you don't want to see my face, there here is a picture of just the sign.

Round one: Mac and Cheese (best ever). This mac and cheese is so good it makes all the other mac and cheese I've ever had a distant memory. This includes the mac and cheese from nicas cafe (very sorry byran...) and McCoys public house. Look at the picture again and tell me how it doesn't look amazing.

There is a cheese festival going on and I see a tent with a bakery (and this related to cheese how?). Ooh, brownie! That was tasty and sinful. Moist and fresh. That bakery services several places in town, but I've never had it that fresh before.

Round two: Since I managed to get out the door early today, I got to Piroshky-Piroshky early and had an Apple Cinnamon thing made by real Russians with really think Russian accents. Normally, the line is crazy big, so I'll come back next week to get things I've missed.

With enough carbs so far to choke a small child, I find a place to admire the view.

Moving on, need to destroy more carbs. I go look at the donuts, and I have a heartattack just thinking about them. However, today, I promised myself to try new things, so I moved on. After having a visual orgy of donut goodness.

Did you know that they have flying fish? Next time, I'll try to be quicker in dealing with my phone. See, I walk pass and see a fish fly. Then i wait and nothing happens, so I move on. I should take a chair.

Now, there is a hole here because I wander down the merchants. I also ate two chocolate covered pretzels. Unfortunately, they were consumed faster than I got get my camera out. My bad. There is some cool stuff that you can buy here. I fantasize about owning it, then move on realizing I'll have to carry in my next move. I got to the end of the street where there is a park. Pigeon!

The carbs have hit me now, and I need to sit down and stare. So, I look at the mountains. I get up and look over the side and HOLY SHIT A TRUCK. I also have the desire to own (or rent) a boat. The park (I suck as a tour guide, what is the name, oh well). A totem? Yes, a real totem. Also, there were some meditating Chinese people protesting in a non-violent way.

By accident, I discover that instragr.am has the ability to switch to the front-camera so I took a better picture of my head (oh, and the sign too).

Now, moving on, I get my wife some stuff. She loves seattle's food scene because it serves the gluten free market several orders better than kansas city. I get her two cookies.

Before I eat a cookie for myself, I drink some chocolate milk. That was the best damn chocolate milk I ever had.

Round Three: Cookie!!! NOM-NOM. That's a man size cookie. I eat one and get one to go.

Now, there are many interesting characters at pike place market. For instance, there is a metal man. Check him out. I give him a dollar and move on to buy some stuff for my wife.


The carbs take me down and I get tired, so I head on home on the S.L.U.T.

Now, dinner is going to be interesting...

Friday, May 13, 2011

Research Goals for 2011, Changed

Except I can't talk about them.

Trust me, they are super cool.

Sunday, May 8, 2011

Mastering programming and the role of deliberate practice

If you want to master programming and become the best that you can be, then it requires a lot of practice. However, writing lots of code or following lots of tutorials is not going to do it. You need to be deliberate. Being deliberate in your practices means you do the following four steps
  • Set a goal
  • Work
  • Reflect honestly
  • Pivot
and then you repeat...

Setting goals

If you don't have goals (and many don't), then you are going to fail. This is why I would say curiosity is a precondition to mastering programming. "How do I do ___ ?" Once you have a whole bag of those questions. Answering these questions and scratching the itch is how you set goals.

Setting effective goals

I think this is the hardest aspect of developing skills, and I think this is where getting a mentor makes the most sense. If you are fortunate, then you can set your own goals and figure out a strategy on achieving them.

Goals are recursive, and your ultimate task is to turn your goal into a series of actionable steps.

My general strategy is to pick the most ambitious goal you can think of that interests you and then start breaking it down. For instance, I wanted to build a computer algebra system. That's a daunting goal.

Daunting goals are good because they provide an end-game and generate many goals which you can iterate and improve on. You'll learn more from trying something big than trying a number of small exercises out of a book (This is my thesis statement for the future project I'm toying around with).

Let's say you've picked your daunting goal and you have no idea how to begin? This is the role of a mentor to look at your goal and say "first you need to do ___"?

Work

After you have your first goal, the next step is work hard. I'd like to say work smart, but that probably isn't going to happen. I say pick a time period and commit to working on it until that time period is up (or finish if it is going to be a success).

A combination of study, design, coding, testing will eventually pay off in either a failure or a success.

Reflect

Why did you fail/succeed? What was a complete waste of time? What felt like the most productive? What are you missing? Are those resolvable? A mentor can help you through these questions, but you need to first be ready to hear the results.

The more honest reflection you can give to your work, the better. Everything I do, I write postmortems for (both successes and failures). Some are one-lines and some are multi-page reports. I do this because I fuck up (a lot).

Pivot

Integrate your reflection and thoughts to help pick your next goal. Do you need to try something else? Do you need to try again after a refreshing bubble bath? Should you move onto to a different project? Did you get inspired to work on something else?

As long as you continue to practice something related to programming, then you will be successful.

Becoming a Master?

We often like to conflate being a master with being a monk like god where we have 1000 steps to reach our hut on top of the mountain. The reality is: being a master is more like being a self-aware student. You can look at a goal and then plan out how to tackle it. Being a master doesn't mean you can do it or accomplish it.

I think computing is becoming a lot like medicine where the things we build and study are escaping our grasp to fully comprehend. Instead, after some schooling and some resident program, we become practitioners.

Commodity Code

I prefer to think of everyone on the planet that makes money as a business that takes a pain and solves it for a fee. Compare hiring a coder locally versus out-sourcing to one in India. They both produce code, but is it the code that I want?

If I go local, then I'll spend 10% of my time managing employee and 90% doing my own thing. If I go remote, then I'll spend 30% of my time managing/spec writing and 70% doing my own thing.