Reflexions on my 23rd year of life.

This post is written by me, to my future me, in a public way. Hopefully I won’t regret this decision

Hey Majd, this is your 23 year old self. Let me tell you about this year just in case you need a refresher. Hopefully you’ll have done this every birthday and if you don’t, what the fuck is wrong with you? This shit will come in handy when you write an autobiography about yourself.

22 was a good year. Following up the best summer of my life (Apple class of 2009 representin’!), I crammed 3 semesters into 2 so I can get the fuck out of school, graduate, and start my life. Winter 2010 was a busy semester, but it was also the semester I started drawing again, founded the iPhone Developers Club, was president of CSE Scholars, and took some awesome courses. Mostly, I spent most of the semester waiting for graduation. May 1st came, Obama spoke, and I walked.

After graduation, I started waiting to start my job. The team was so much fun last summer and I learned so much, I couldn’t wait to start. May 18th came along, and I head off to Cupertino. Two days later, I found a room in a house in the Castro and decided to move into it. I wonder what this experience will seem like to you in hindsight.

I’m 7 months into my job now and it’s a blast. My coworkers are my best friends and my managers are incredible. The work is challenging, frustrating, fun, and unpredictable, just the way I like it. I’m half way through losing 80 pounds (at 45 right now), and it has already begun to change my life.

So to recap: When I was 22, I graduated, moved to San Francisco, lost 45 pounds, released some of my best code yet. Like I said, it was a good year.

Now that the “what” is covered, I’ll dig deeper. Here are things that I’m thinking about right now.

Wait, before I start. I want you to remember this:

Here’s to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square holes. The ones who see things differently. They’re not fond of rules. And they have no respect for the status quo. You can quote them, disagree with them, glorify or vilify them. About the only thing you can’t do is ignore them. Because they change things. They push the human race forward. And while some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world, are the ones who do.
School. What it meant, what came of it.

Was school a waste of time? I haven’t decided yet. On the one hand, I know for a fact that had I not gone to school, I would’ve accomplished a lot more professionally. On the other, I really value the friendships I built during school, and wouldn’t trade them for anything. Besides, I didn’t end up in a bad place, so maybe it all turned out for the better. The thought of having left Michigan 4 years earlier than I did sounds amazing though.

Current Thoughts

What is going through my mind right now? Work, weight-loss, and girls, in that order.

Professionally speaking, work is going great, but I’m trying to figure out what my next move is. I’m happy where I am right now, but I realize it’s not a permanent gig. The more time I spend in the industry, the more I realize how much shit there is out there. Not just that, but how much people don’t care. I’m not the most technically impressive engineer, nor do I claim to be. What I am (or, think I am), is a craftsman. In terms of money and success, I’m starting to realized that I’m not really after “the big exit”. I want to be successful, to be sure. I want my income to satisfy my ridiculous lifestyle and then some, but that doesn’t require a hundred-million dollar bank account. The reason I say that is because I feel like given a more bounded business, I can focus on making products in a life where money is not a limiting factor. I might be an idiot for thinking that, and I may change my opinion. I want to build products, and sell them.

When I’m not working, I’m primarily thinking about weight-loss. I’ve lost 45 pounds so far, and I want to lose 35 more. I just started reading The Hacker’s Diet and it seems to align itself perfectly with my approach to dieting. I’m thinking of starting some kind of blog where I keep track of my stats and write about how I’m doing, hoping to influence someone else.

Thanks to my coworkers who first got me running in the morning before work and biking with them after work, I unintentionally lost 20 pounds, and when I saw the improvements, I kept going. Now that I’ve gone from shirts XL to Medium, and pants from size 40 to 34, I see the profound ways in which being fit and healthy can affect my life. Biking down a mountain, hiking up a mountain, running in races, these are all new experiences for me. These are all things I couldn’t have done no matter how hard I tried 7 months ago. When I go shopping now, I don’t leave depressed, when I go to the gym, I don’t have to keep holding the towel up as I go to the shower. It’s the little things. Things that to other people seems completely benign, are completely new experiences for me. Majd, if you gained back the weight, then FUCK YOU! You should first be ashamed, then on a diet.

Girls. Girls girls girls….There aren’t a lot of Christian Arab girls around here, at least not that I can tell. I guess American girls are cool too, just not the crazy variety. Are you single still? lower your god damned standards! Right now I’m not “looking” to find someone. I’m waiting to lose the rest of my weight.

Attitude

Majd, you always look forward, never backwards. When you moved from Sayyidet Al-Farah to IISA, you learned to speak fluent English. When you moved from IISA to Livonia, you picked up web development. When you moved from Livonia to Ann Arbor, you got a job at Apple. When you moved to Apple…well I’m still here, I don’t know what you did but whatever it is, it better be a step up. Always look ahead.

Closing Quote

Heed these words, Majd.

There’s work, and there’s your life’s work. The kind of work that has your fingerprints all over it. The kind of work that you’d never compromise on. That you’d sacrifice a weekend for. You can do that work here. People don’t come here to play it safe. They come here to swim in the deep end. They want their work to add up to something. Something big. Something that couldn’t happen anywhere else.

Swim in the deep end. Always.

Another interesting IRC talk about MVC vs. Multi-tiered architecture

  • iwaffles: So you do form validation in the controller in CI?
  • mtheoryx83: well, they may not do well with bugs, but if it gets bad enough, it's easily and legally forked
  • mtheoryx83: iwaffles: yes
  • iwaffles: Interesting..
  • jtaby: mtheoryx83, ok, but what's the point, if it's not legitimit
  • mtheoryx83: it's totally logical
  • mtheoryx83: jtaby: what's legitimate and what's not?
  • iwaffles: mtheoryx83: So is doing it in the model :-P
  • jtaby: mtheoryx83, not legitimate in a legal sense, in a social sense
  • mtheoryx83: iwaffles: no, not in the model
  • jtaby: I guess "official"
  • iwaffles: Why not?
  • mtheoryx83: validation is logic
  • mtheoryx83: logic goes in the controller
  • jtaby: mtheoryx83, in Rails, the concept is that validation is done in the model, since that's where the data goes
  • iwaffles: I guess you could think of it that way
  • jtaby: and keeping validation close to the data ensures the firewall
  • iwaffles: It really depends
  • * bnewton has quit (Success)
  • mtheoryx83: jtaby: the real "community" of serious users wouldn't use a bug-ridden "official" one if there's a better option
  • * vang (n=repol47@65-205-124-91.pool.ukrtel.net) has joined #codeigniter
  • mtheoryx83: jtaby: validation isn't about the data
  • iwaffles: As long as you have consistency throughout your app it doesn't really matter
  • jtaby: i.e. you may be inserting data into the model from multiple places
  • jtaby: mtheoryx83, how so?
  • mtheoryx83: validation is rules on form fields
  • mtheoryx83: it's logic in the strictest sense
  • jtaby: or you can look at it as: validation is the set of invariants that the data must pass through
  • jtaby: it defines the data
  • jtaby: in a sense
  • mtheoryx83: jtaby: I don't think it defines the data. Your model could be perfectly able to deal with someone who has a first name that is 40 characters long, but in the context of a given controller, you may want to limit that input. that's logic.
  • mtheoryx83: crappy example, i know
  • mtheoryx83: i can see it both ways
  • jtaby: mtheoryx83, In true MVC, the model is application specific
  • mtheoryx83: but i think the controller is better because if your form data hasn't passed validation, it's not even "data" that your model should give two shits about yet
  • * el2ro has quit ("ChatZilla 0.9.84 [Firefox 3.0.8/2009032609]")
  • jtaby: But like I said, you can be potentially inserting data into the model from mutliple places
  • mtheoryx83: of course, I could be so accustomed to CI's loose mvc that I'm not sure how it's done elsewhere
  • jtaby: having the validation in your controller means you're only checking through that one gateway
  • iwaffles: :-P
  • mtheoryx83: yeah, i see what you mean
  • jtaby: i suppose it can work either way
  • mtheoryx83: I say we just take whatever from $_POST and put it right in the db
  • mtheoryx83: j/k
  • jtaby: mtheoryx83, here's why I think there's a confusion
  • jtaby: Rails, Symfony, CI, Cake, Django
  • jtaby: none of these use MVC
  • jtaby: it's a lie
  • jtaby: you've been cheated out of a design pattern
  • jtaby: it uses an n-tiered architecture, not MVC
  • mtheoryx83: It's just like the cake, it's a lie
  • jtaby: MVC is organized into a triangle
  • jtaby: it's not a linear pattern
  • mtheoryx83: I've been thinking about that a bit as well
  • mtheoryx83: calling models from views
  • jtaby: http://en.wikipedia.org/wiki/Multitier_architecture#Comparison_with_the_MVC_architecture
  • jtaby: The model is supposed to update the views
  • mtheoryx83: that's frowned upon, but should be allowed, no?
  • jtaby: the controller is supposed to be a mapper between the view and the map, thus it contains the business logic
  • jtaby: the model contains the application logic
  • jtaby: But in the context of web development, the model and the view are disconnected
  • jtaby: One is on the server, one is on the client
  • jtaby: so you can't have that third connection
  • mtheoryx83: Interesting
  • jtaby: Now, if you use something like SproutCore or Cappuccino, you can actually implement "true" MVC
  • jtaby: because the model is housed within the browser
  • mtheoryx83: I've been meaning to look at both of those
  • jtaby: and they do, you should checkout Sproutcore's bindings
  • jtaby: it's absolutely beautiful
  • mtheoryx83: Apple's iWork.com is a SproutCore app ;P
  • jtaby: and MobileMe.com :)
  • mtheoryx83: Yes, that too

Interesting conversation about web vs desktop development on ##c++

  • jtaby: not to be a jerk, but I think i'm going to be avoiding c++ post university
  • swmc: and if you think of virtual functions as tables of function pointers, =0 for pure virtual makes perfect sense
  • swmc: (not that you should have to)
  • aja: jtaby: If you want to be a professional programmer of any repute, hard to avoid it.
  • jtaby: aja: well, depends on the domain you work in
  • aja: jtaby: Not really. Even in exclusively java shops that I've worked it, the fellows with C++ background were the better programmers. They had a better grasp on the why, not just the how.
  • swmc: !ggl joelonsoftware "back to basics"
  • nolyc http: //www.joelonsoftware.com/articles/fog0000000319.html
  • aja: jtaby: And, other programmers will tend to judge you on the languages you can code in.
  • fow !fs painter's
  • nolyc Shlemiel the painter's algorithm is O(n*n) for no good reason--the same task can be done in O(n) easily. See http: //www.joelonsoftware.com/articles/fog0000000319.html
  • jtaby: Yeah i've read spolsky's essay on it
  • fow : )
  • swmc: I always spell Shlemiel wrong :|
  • jtaby: but that's not knowledge that's tied to c++
  • jtaby: c++ is just a language
  • jtaby: learning c++ doesn't mean your'e a more apt programmer
  • swmc: jtaby: C++ is pretty much the only systems programming language left, though, outside of perhaps ada for DoD contracts
  • aja: jtaby: True. But C++ is a very complex language that is used in a wide variety of high-performance domains. It's acceptable not to know it, but you will be judged by that fact.
  • jtaby: aja: The point I was trying to make is that in the web development world, c++ plays a much smaller role
  • aja: jtaby: True. But that's also a ghetto where you keep bad programmers, because everything is latency-bound.
  • jtaby: and it's true, learning the innerds of c++ will expose you to lower-level details that higher level languages just abstract away for you
  • jtaby: haha did you just diss all web developers?
  • swmc: jtaby: and the knowledge is what matters, but they only way to assess it, pretty much, is in programming languages that require it
  • aja: (correction: There are a lot of excellent web programmers. Unfortunately, they are a much smaller minority than in most other domains).
  • jtaby: but correlation != causation
  • aja: jtaby: Yes. But correlation is predictive.
  • jtaby: but not indicative
  • aja: jtaby: In other words, an excellent web programmer is an excellent programmer. An average web programmer is a poor programmer.
  • jtaby: aja: point taken
  • jtaby: but I feel like that's a result of high level languages, noit the web itself
  • aja: jtaby: Partly. But part of it is that, frankly, people don't seem to care as much. Google and Amazon are about the only companies, off the top of my head, that seem to truly care about high-performance and high-quality in web programming. Even Apple's cloud stuff is sub-standard.
  • aja: jtaby: Anyway, I tend to dismiss any programmer who hasn't seriously coded in multiple languages and multiple platforms.
  • swmc: jtaby: I think it's more due to the fact that web development is so dominated by thin wrappers over databases
  • aja: jtaby: Including higher level languages and web programs.
  • jtaby: aja: well, don't forget that the latency of web applications isn't in the processing time, rather with the fact that you're moving bits across the planets, as opposed to centimeters
  • jtaby: and the speend enhancements that amazon and google engage in are more in terms of load balancing and network setup rather than efficient programming, though that's very important for them
  • swmc: jtaby: when you have a medium where high latency and bad UIs are the norm and there's minimal logic required, there's less to attract the really good programmers
  • aja: jtaby: True. But when you start trying to handle millions of connections, not paying attention to that starts showing up. And there are damn few sites out there you can't take down with a well-placed posting to slashdot or reddit. That's unacceptable.
  • jtaby: granted, but that's almost always isn't a result of bad programming, rather it's because of hardware limitations
  • aja: jtaby: Agreed about the load-balancing. BUt it's not like distributed server farms are a new idea.
  • jtaby: granted.
  • aja: jtaby: Ah, but the bad programming shows up when you want to move to new hardware and the code won't handle it. Which is insanely common. Migrations that should take minutes take months.
  • gparent The funny thing is that Slashdot handles the slashdot effect every day, and I've never seen it down.
  • jtaby: aja: well yeah, if you don't program with scalability in mind, you can't just tag it on
  • jtaby: swmc: aja: but I know what your'e saying: The web enviornment attracks bad programmers
  • swmc: just like parallelism, extensability, and a whole host of other things can't just be tacked on
  • jtaby: aja: btw, why don't you like Apple's cloud services?
  • swmc: The fact that big professional web projects (are you listening, WebCT?) are also terrible doesn't help
  • aja: jtaby: I've got a mac.com account, and it's been "down for upgrade" at least twice in the last 24 months, syncing takes waaaay to long, and it's unstable for large binary files.
  • jtaby: aja: yeah when mobileme was released they had issues, but those have all been worked out
  • jtaby: webct == blackboard?
  • aja: jtaby: Agreed. It's been pretty good the last 6 months or so. And I do like my ipod syncronization stuff.
  • swmc: jtaby: yes
  • fow raji, I have to ask. Is your current approach /really/ the best way?
  • aja: jtaby: Yes.
  • jtaby: aja: do you liek the new interfaces?
  • jtaby: *like
  • jtaby: I really think MVC Javascript is the future of web apps
  • jtaby: ..but we're getting too offtopic now
  • aja: jtaby: Don't have a strong opinion one way or the other. Seems to work. I'm a console guy, so I get vaguely annoyed with anything that has graphics. :-)
  • jtaby: aja: same :)
  • aja: jtaby: Yes. I have a habit of going OT.