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.