Monday, February 28, 2011

Going Homeless and Living in the Computer Science Building

Story

Most of my friends know that during 2006 - 2007, I went homeless and lived in Nichols Hall at Kansas State University. Oddly enough, one of my friends at Kansas University went homeless too except he got caught after three weeks. I was homeless at K-state until I left graduate school (about a year).

At the time, I was both a graduate teaching assistant in Mathematics and a graduate research assistant in Computer Science. I had a full work-load, and I wanted to work more. I had a little cubicle in Cardwell Hall with other graduate students, and I had mine filled with books and my behemoth of a computer.

When I would retire for the evening, I would walk to Nichols and blow up my air-matress (had an automated pump) and lay my bones to rest.

In the morning, I would wake to the sound of students rushing about. I would head over to class and teach students some math and answer questions. After which, I walked or biked over to the Rec where I would take my shower (with a bunch of naked old guys).

Tip: old men are not shy and will wave/shake their cocks high and proud. Once, I was putting on my shoes and I got boxed in my two chatting old men. Too both my left and my right were two old cocks. While this was awkward, it did make me appreciate my youth and fearful of aging.. Eww.

After my shower, I would get on with my homework, my research, or my projects. Occasionally, a student would ask for help. I had the most hard-core office hours out of all professors and other GTAs. It was from 9am to 9pm. How can anyone not make those hours? Well, they didn't because they were lazy. However, one student did take my offer seriously and I mentored him from a D student to a B student where I gave him an A for effort. He then earned a righteous A in the next course. It is an awesome feeling to have actually helped another human being a serious setting as he was on the verge of dropping out; now, he is an electrical engineer doing amazing things.

Before I went homeless, I had stuff. I hate stuff as it just accumulates and then needs to be moved for no good reason. I developed an algorithm using a self-storage unit where I put everything into my unit and then would bring stuff I needed into my car. Beyond some books and clothes, I didn't need anything. After six months, I just started giving stuff away. Free 36" TV? it went to a gentleman by the name of Kyle. GameCube and a bunch of games? It went to a gentleman by the name of Brad. Salvation Army got about $4K of goods, and I sold $500 worth of stuff at a pawn shop. I kept my books, computer, and paperwork.

Having spent an entire semester homeless, I decided that it was stable. But then I decided to take the path of a start-up technology co-founder. So, I lived at our first office which was an apartment (that we kind of ran out of room). However, I was not on the lease, so I was technically still homeless.

I got my own apartment when I found my woman Effie (who is now my Wife).

Thoughts

All you need in life is an air-matress (which is optional if you tune your body to hard surfaces), food, a woman (or a man), two songs, and work. Sometimes, I would play, but play is just another form of work. A car is nice too.

I'm fortunate to find joy in Mathematics and Computing.

Sleeping outside is a lot of fun. Sleeping in my car was fun until my back started hurting. Sleeping on top of my car was very fun (again, until my back started hurting). Sleeping naked in a field is way awesome.

Blasting movies/music/video games in the Math building at odd hours is really fun. You can't do this at an apartment building.

When work ends naturally, taking time to smell the flowers and watch the world in motion is very relaxing. Going homeless enabled me to catch up on both my homework and my research, this gave me the time to go sit in the quad and watch the machinery of university and appreciate the groundskeepers.

Buying people lunch is fun.

Having plenty of time to enjoy campus is awesome.

Being able to be generous with your time to help other students is very fulfilling.

Final Observation and Why?

I was primarily using graduate school to prepare for an awesome career as a Professor/Super Developer/Ultimate Hacker. I was working really hard to become one because I reasoned that would be where I find happiness. Little did I realize that going homeless would make me happy and enable me to live in a way where I was rich in spirit.

Going this route enabled me to be selfless and find a new kind of joy. See, I changed when I knew that no matter what that I would be fine. I knew that I could be generous and helpful rather than hold on to what little I had. If you need lunch, then I will buy it. If you need a hug, then I will give you a hug.

This path in life changed me so much that it gave me a greater perspective and enabled me to find compassion. Compassion and selflessness didn't make sense to me since it seemed like I was voluntarily losing something. I saw life as a game where there are winners and there are losers, and I was competitive to a fault. Seeing the game, my goal was to win. The problem is that winning in every aspect of life is hard. What makes a person great at work can make them terrible in a social setting.

Professionally, I am a winner. Socially, i was inept.

If I had continued what I was doing, I was going to be alone because I was confusing the social and professional worlds.

Going homeless and surviving on less than $6K a year enabled me to realize that no matter what life threw at me, I would be fine. This meant that I could devalue the need to be a winner in the professional circuit. This gave me the flexibility to study the social aspects of life.

My fellow peers were delighted and noticed my mood and friendliness changed, and they became my friends. I was generous with my time which enabled me to ad-hoc mentor computer science students.

Fast forward to the present day, I'm married to a woman who inspires me every day with her compassion, empathy, and delicateness. She is the flower of my life, and I'm working hard to separate my professional work and my life with her.

The change I made in my life enabled me to go from some social inept nerd to a happily married man with an abundance of friends.

Friday, February 25, 2011

What is Computer Science?

Is it an art? a math? a science? or engineering?

Well, strictly speaking. Everything is an art-form, so it is trivially an art.

There are mathematical models about computing and you can apply computers in math, so it is a branch of mathematics in both theoretical and applied aspects.

It induces complexity that can be studied and model. Problems can be studied in a pure fashion, and methodologies can be deployed to measure the unknown. It is a science. Debugging is 100% pure science along with good testing.

Is it engineering? Well. This is the tough one. By itself, it is not. It's too much art and not enough discipline. How many times can projects be rewritten? I see engineering as more of a way to overcome the limitations of reality. However, software and computing mostly have no limits except time and did it compile. Where as most other forms of engineering have limits like gravity, friction, heat, electromagnetic interference, collisions of matter, speed of light, and other limits. Recommend Reading: Why writing software is not like engineering.

Computing is very platonic and there are many ways to do things, so can computing be an engineering discipline?

This is where the role of the software architect comes into play. Take an expert programmer, give them a hat that says "software architect", and then task them with building an architecture that will enable a group of developers to build a business. At this moment, the software architect will cast the platonic world into the real world and introduce limits and constraints that enable the team to implement engineering methodologies.

This has some interesting consequences in industry. First, businesses diverge in their computing reality. Second, you see an order of magnitude increase in not-invented-here syndrome in software than other engineering fields. Finally, we will never agree on anything for long periods of time because it just keeps changing because we haven't come to agreement on "what is software engineering?". We haven't figured out a reality yet that makes enough of us happy.

Now, let's discuss how academics fucked up computer science education.

Thursday, February 24, 2011

A Mathematics Degree

When I was a graduate student at k-state, I was studying for all three Ph.D. quals in mathematics. This is part of the insanity that is me, but it also reflects my inability to make decisions between equally cool options. When presented with an OR, I choose both. This is also why after my Ph.D in math, I was going to get a Ph.D in computer science.

While my heart lives with computer science, mathematics is the fastest and most effective way to master problem solving in collegiate setting. Why? It's hard mode. When I get a game and start to play it, I put it in nightmare mode (hardest setting) and then play. I'll grind and accept the initial failures and learn from them. By the time I'm done, I'm a master. The same is true for math. If you go to college, then the math program is going to the toughest degree program. I have yet to meet someone with a math degree that wasn't successful in what they tried to do outside of college

The nice side effect of a math degree is that it lacks degree inflation. It's difficulty is more or less the same as it was 50 years ago.

A Computer Science degree is fundamentally half math and half programming, and many struggling Computer Science programs are churning out shitty programmers because they are reducing the math requirements and dumbing it down. This works great for many companies that have mountains of tedious work and managers who use management theory on programmers. Some programmers are cogs because someone figured out how to make that work for them.

For companies that depend on technologists (where typical management theory breaks down hard-core), I wager the talent war is going to get epic and qualified tech workers are going to win real big. The salary and benefits being paid to top-tier developers is a consequence of supply and demand, and it's going to tip even more in the favor of the limited supply.

Woe to computer science degree! Read On the cruelty of really teaching computing science; now think about market forces. When I was a student, I realized too things. People hate taking math courses and math is highly relevant to computer science/programming (at least, relevant to the fun kind of programming, not the boring kind where you push boxes 2 pixels left and 1 pixel down and change colors from sky blue to cornflower blue).

Keep in mind, its not the content of math that matters the most; it's the process that math induces. Getting a math degree will build an iron fist of reasoning that will enable you to write very clean and tight code. It will also get you knee deep into the abstractions that most people will not have exposure to in their entire career. For instance, when I took Introduction to Topology, it blew my mind.

The first day of topology, my response was "WTF is this?" On the second day, I was excited "omg, he just turned a coffee cup into a donut". It was that class that opened my eyes to an entirely new level of reasoning and abstraction that propelled me into the math degree. Also, much to my surprise, the class (and degree program) was also 50% women which is vastly different than the sausage festival of computer science.

I'm going to have an awesome career working on my calling which is entirely due to me making good decisions, and my best decision was to get a math degree. I recommend anyone that is able to go for it. Higher level math courses are actually a lot more fun than the lower level stuff. The lower level stuff is service to the college, but that's what pays the bills for the math department. The higher level stuff is where you will have a chance to see your professors glow like school children as they talk and lecture on things they find interesting. It's worth it.

That being said, if you take a math degree, then you need to make progress in your side projects in computing. Connecting your ongoing mathematical education to code will give you interesting insights. I'll shave an interesting perspective in five years when I finish my book titled: "A topologist walks into a database". Sounds exciting, yes? Well, it will be.

Now, I just need to write about how I was a homeless graduate student working 100+ hours a week.

If you want a more hard-core education, then you need to drop out of school and build a company like I did. This option is really hard-core, and it is the path of woe, humility, and ultimate success.

Saturday, February 19, 2011

The Dirty Truth about Functional Programming

The advice that I typical given young'ins in computing is this: "learn functional programming and solve some interesting problems with it; it will make you better". I'm serious when I tell people to learn LISP, OCaml, and Haskell. These are the most beautiful languages we have.

Mastery of FP makes you a better programmer and enables you to solve sophisticated problems fast. This is the crux of why they are not wide-spread.

Take two very talented programmers named John and Steve. Both are equal in every regard. Give them a difficult problem to solve. Both of them, being smart, solve it. Great, we have two solutions.

The solutions are going to be incompatible at some level. Each programmer has defined their own reality (which is very easy in a FP) and made their own language to solve it in a concise and precise way. But the realities clash and are ugly and obtuse to each other. In John's reality, the flowers are purple. In Steve's reality, the flowers are red. More importantly, John doesn't want to live in Steve's reality and Steve doesn't want to live in John's reality.

Fundamentally, FPs (which are reserved for smart and clever people) do not scale out in the business setting. The people smart enough to use FPs are tragically cursed to this reality as smart people tend to be like cats and are difficult to herd together.

Thursday, February 17, 2011

Techno-socialist vision of the future

I've developed my own socioeconomic viewpoint when I was homeless reading Atlas Shrugged, and I'd like to share it now.

In 2006, I wish I called it publicly with Peter Schiff, but the world economy is kind of fucked. Not for the vast reasons people speculate on it. It's because of ass-holes like me that automate. I love to build machines and write software to do stuff for me, and I'm not alone.

I'm a capitalist now because capitalism is the fastest way to innovate and optimize the total human system. Fundamentally, we each create a debt when born. We need so much food, so much protection, so much water, etc. Socialism is faulty on this front simply because the technology does not provide for everyone's needs to be covered very well. Over time, as capitalistic societies create technology, we converge to socialism.

We are in that process now.

Right now, technology has made us extremely productive and we are leaving people behind. Unemployment is going to get severely worse because the structure of the work is changing faster than people can adapt.

The society is going to change into morlocks and eloi.

How will this function under a democracy? Well, it will in the worst possible way.

To be continued...

Saturday, February 12, 2011

The learning equation

I view people as fairly complicated machines, and I look for patterns and derive formulas that explain their behavior. I'm very interested in intelligence, learning, and teaching.

I see people's intelligence as a combination of knowledge and ability to learn and process. When I meet people, I'm secretly building an equation of my head of how I see them. IQ always seemed rather stupid, so I write down something different.
I(person) = IQ + L t + A t*t
  • I is a persons total intelligence and knowledge.
  • IQ is what a person is born with and accumulates until about the age of 10.
  • L is the rate at which a person can learn.
  • A is the rate at which a person can teach themselves to learn something new.
When I classify people in this manner, I get a good feeling of who they are now and where they may go.

There are two things I like about this model. It means the IQ score you got in elementary school is crap, and it explains a lot of things I see in the world.

Let's assume your IQ via our current method is sound at the age of 10. How do we measure L and A?

L can be measured by giving someone a "Learn Ruby in 21 days" and "Structure and Interpretation of Computer Programs" and lock them up in a room for at least two months with a sufficiently hard task and say go. L would be linear to the total time to complete the task.

A on the other hand is rather different. Unless you want to lock people up for a couple of years, then you can't really measure A analytically. Instead, I think you could do a classifier on what they have invented.

I suffer from Not Invented Here syndrome both for hubris and ignorance reasons (mainly ignorance), and I've found that my side projects and inventions help me learn a great deal more faster than anything else. I have found that the people I meet that have side projects tend to reach competency younger in life.

So, for developers, you could measure A by looking at their github profile? I think this is more or less valid until people start putting spam in their github profile. I think A also means the ability to invent and create new knowledge as I think this is a very good way to connect dots in your learning.

Anyway, I'm thinking about this today because I'm writing job descriptions. I'm crafting a job description to hone in on people who have L and A. People that have A are rare, but people with L can be found. It used to be that college implied L, but I think that college is easily gamed these days. It used to be that a Ph.D. implied A, but that is waning too given some of the shitty papers I've read recently.

Wish me luck in changing market forces!

Sunday, February 6, 2011

The economy of Free software

There has been some chatter on free software, and I've had thoughts I'd like to share and discuss these bits of knowledge.

Competing with giants

Due to Microsoft's and Apple's dominance, you can't expect to raise funding to build a competing operating system any time soon. You have a better chance to build a car company than compete with either of those companies. If you want to make an OS now, then you need to pick a niche and build it and hope the niche buys in or you need to give it away for free.

This is the nature of software since software is like cake with multiple layers compounded on each other. Once business gets in bed with a layer, its probably not going to change for a long-long time. So, if you want to compete and compel people to use your cake, then you have to give it away and think long term rather than short term.

Building a business off of support is long-term thinking. Most people think short-term, so we run into "oh, its free and solve my problems today? I'll use it". They don't know better, nor should they know better. If Free Software gets them to the next step, then awesome. Aside: I like this model best because I've never liked taking money from people who are going to fail.

This is how Linux has propagated to dominance in the server sector. Linux didn't have to make a sales effort on managers or marketers. Linux just had to sell geeks that would have to support this stuff in the field and transition their education into Linux. The people who build software on Linux then give back and support it by hiring people to maintain their shit.

It doesn't matter which route you go (Windows, Sun, Linux), the business has to foot the bill to pay someone to run it. Free software enables software via a community rather a corporate interest.

Free software enables communities to compete against companies.

Software as a marketing channel

If you are smart, then your work will speak for itself. Free software is a great way to sell yourself in the geek arena; it's your marketing collateral.

If you make something free and 10 people use it, then great. That's 10 people that know you exist. Now imagine if 1000 people use it? What about a million?

GitHub enables a geek hiring revolution; that's basically my resume now rather than some crufty document. The AppStore/AndroidMarket is the same for product/application developers. Get your product in the hands of people today and start learning how to make their lives better.

Me-too, Me-too

Many companies have "me-too-ism" where they want everything customized under the sun to fit their brand. I think this sucks. However, it creates a lot of IT jobs since that "me-too" usually requires re-inventing a lot of the same wheels.

Open source and Free software enables the IT workers to work collaboratively rather than competitively. While this may limit the "me-too-ism" on the business end, it does enable IT to save a lot of time and be really lazy (which is the point of computing, right?). To the point, there isn't enough IT workers in the world to satisfy the true desire for "Me-too-ism".

If you give software away, then other people will jump on it and support it for their organization and make it work. This will make projects go faster, and it will make everyone happier.

A perfect example of this is Ruby on Rails. If DHH didn't release it, then he would be in a cave somewhere writing stupid code to fix stupid problems rather than talking at conferences. Either that, or he would have abandoned it. By making Rails free, it enabled the community to endorse it, sell it, and support it.

That being said,

You get what you pay for.

If you don't know software, then you are kind of screwed. If you go with non-free software, then you have to hire someone that endorses that model. If you go with free software, then you have to hire someone that endorses that model. My pro tip: hire the best you can and let them pick.

HN as the open door, and why HN is so awesome.

When I found HN, I was delighted to get an interesting feed of new data. The signal to noise ratio is way better than anything I've ever seen.

For me, HN is the open door. Most of my life is researching in a cave solving problems that no one really has except me. I like my cave. Problematically, as Hamming said, when you have a closed door, then you get more done and can solve more problems, but are you solving the right problems?

Personal Aside:

I spent the better part of a two years writing a programming language in my cave. Some facts.

First, this was really fun.

Second, it went to production and was in commercial web sites (which I'm not supposed to talk about).

Finally, the problem I was trying to solve was "scalability" at the programming language level. Putting scalability and performance problems ahead of real problems is a prime example of why pre-optimization is evil. It never ends, and you can't ship it. This was a difficult lesson to learn (still, pre-optimization is a lot of fun).

I think there is something in the problem I was solving. Namely, I think if you go the static typing route, then you could in theory produce a programming language and a schema language that can solve your infrastructure and data needs given the right platforms (like S3, SimpleDB, riak, redis, etc).

Essentially, I was trying to make a "scalability solver" by looking at a statically typed schema and how that schema was accessed by the programming language.

Well, this is the problem with the closed door and being isolated. I doubt anyone needs a scalability solver. Fortunately, my quest to solving this problem was to find, classify, study all new NoSQL solutions/platforms as well as master relational databases. This is how I discovered CouchDB.

It is an odd thing to admit to yourself that you've failed and wasted a lot of time.

Generally speaking, I've got an open mind when I'm not distracted by geek-crack (writing a programming language is pure geek-crack). So, when I tried CouchDB I realized two things.

I don't need (nor does anyone need) a "scalability solver".

Static typing and schema suck. In general, I like some of the problems that static typing can solve (performance, type safety, contractual programming, proofs), but those are not the majority of programming problems. I think learning static typing is important to be a complete programmer, but I also think mastering dynamic typing is more important to getting things done. I feel the same way about schema, and I'm developing new tools around CouchDB centered on a forensic techniques using map reduce.

Back to HN.

Hacker news is like an open door uniting all organizations small or big of people who are opened minded enough to debate rather than argue an agenda. If you open your mind, then you can maximize the value from the HN community by treating it as an open door.

Namely, you'll get less done, but you can tune what you get done to what is more relevant. At least, in regards to technical relevancy.

Tuesday, February 1, 2011

Barefoot in a Blizzard; Vibram FiveFingers in winter

Those that know me know two things:
  • I'm insane
  • I wear the same clothes everyday (shorts + a t-shirt).
Just because there is a ridiculous blizzard out doesn't mean I'm going to change anytime soon (definition of insanity?).

Well, I wish I had pictures as my testimony will have to suffice. I'm a barefoot nut and a cold nut. I'm that guy wearing those fancy vibram five finger shoes, and I like to jump in freezing water. Today, I got to do both. Yay!

I was driving to my fiance's work so that I could pick her up since her corporate overlord decided the weather was bad enough to let people go home. Well, I lost control of the car and I went off the curb and I was half way between the street and some grass.

Fortunately, I had the good sense to have gloves in the car.

Unfortunately, my fiance brought the possibility of me being stranded in to the universe and the fucking universe obliged her. Well, ok, let's take a step back. It's basically my fault because I took her to work in a t-shirt and shorts and that prompted her to comment on my lack of survival sense.

So, there was I stuck. Since I slid into position, I had no forward or backwards tracks. I have to admit the actual process of getting stuck was very fun. Actually, it was the best fun I've had all year. That being said, the moment of "oh shit, I'm really stuck" was not exactly fun.

So, I go out in my handy-dandy five finger shoes (which suck against snow for periods of time greater than 27.3 minutes (again, I know these things)), and I start digging with my hands (note to self: get a portable shovel [editors note: how long have you fucking lived in kansas]).

So, after 34 minutes of alternating digging, trying to rock, pathetic attempts of pushing the car; I resign myself to failure and hang my head down low and call my fiance to tell her to get emergency road-side help.

After about 2 minutes of pure shame, I realize "fuck this self-pity bullshit, and I try some more".

I dug more, and I dug more. Here I am, a guy wearing a t-shirt, shorts, and basically barefoot playing in the snow. I have to admit, it was fun.

Final try, I get enough momentum to make serious progress. I go forward and then launch myself until I gain enough control and get off the curb. From here, it was simple patience that got me rolling.

The point of the story: never give up.

Look a quote:
"People think I'm crazy to put myself through such torture, though I would argue otherwise. Somewhere along the line we seem to have confused comfort with happiness. Dostoyevsky had it right: '"Suffering is the sole origin of consciousness.' Never are my senses more engaged than when the pain sets in. There is a magic in misery. Just ask any runner." - Dean Karnazes
Today was fun.