contact us

Use the form on the right to contact us.

You can edit the text in this area, and change where the contact form on the right submits to, by entering edit mode using the modes on the bottom right.

           

123 Street Avenue, City Town, 99999

(123) 555-6789

email@address.com

 

You can set your address, phone number, email and site description in the settings tab.
Link to read me page with more information.

blog

The moment before the shutter opens

Shahriar Haque

Portrait photography was my first passion right after jumping on the DSLR bandwagon. There's something beautiful in the way a lens blurs out all the unnecessary details and captures the raw emotion of a person. For a long time I used to think that the background blur, or "bokeh", was what made portrait photography so alluring. But after spending countless hours taking photos of different subjects, I couldn't pin point what made the experience of taking portraits so satisfying. But finally I figured it out.

The beauty was never in the photograph to begin with. Neither was it in the lens.  It was in the viewfinder just a fraction of a second before I pressed the shutter button. For a fleeting moment, all other distractions of the world gets blacked out leaving just you and your subject. It's an intimate moment where you have the person's complete and undivided attention. That smile, that anticipation in the eyes, is for no one except you. It's a sensation so intense that it feels like the first moment you fell in love with someone.

On weddings and childhood memories

Shahriar Haque

You know that age when everybody around you starts to get married. Well, I am going through that right now. This has brought upon a flood of old memories from the deep recesses of my mind. And the aftermath has been nothing but heartache and sense of undeserved desolation.

Dear friends who are getting married, I know you all have moved on with your lives. You have formed new social circles in your colleges and workplaces. Maybe you’ve even held on to a core group of friends from high school. But how hard can it be to send a message to your old pals on your wedding? It’s not like we are out of touch. When you post pictures of your wedding on Facebook, I can see them! Don’t get me wrong, I am genuinely happy for you. But my heart breaks in to a thousand pieces wondering what I did wrong to not even deserve a message. Note that I am not even asking for a wedding invitation because you might have fixed seating arrangements and I understand that. Just drop a line on Facebook, or send an SMS saying that you are getting married and we’ll catch up later when things are less hectic.

Growing up in Qatar, most of us never had the chance to attend our own family weddings. For many of us, school friends are even closer than our own flesh and blood. I’m not talking just about classmates. I have very fond memories of my junior mates too. I’ve known some of you for a decade now and over the years the age boundaries have become blurred. We’ve laughed together, bunked classes together, went through the ups and downs of life together. At least, that’s how I would like to imagine those awesome moments of my childhood. But clearly your mind doesn’t go back that far.

Call me a sentimental fool, but if I don’t even get a moment’s thought on one your biggest life events, I feel an emptiness devour my soul. It feels as if all my memories were fabricated and I’m just living my life like clockwork.

Have pity on this fool. Drop me a line, the least I could do is to wish you well.

Love

Shahriar

A tribute to awesome women

Shahriar Haque

I know I’m a bit late but I wanted to remember International Women’s Day by paying tribute to the most awesome women I’ve had the privilege of knowing…

Marjorie… Looking back at my college days, you were one of the few people who have truly influenced my way of looking at the world. Just being around you is intellectually stimulating. I don’t know any other person with whom I can have a conversation on any topic, be it literature, philosophy, religion, or science. You and Justin together make the world’s most awesome couple. The world needs more of you before it can become a better place.

Tessa… Having known you as a very close friend, I am overwhelmed every time I think about how much you’ve struggled in your personal life to pursue your dreams. You are the most fiercely independent woman I have ever known and your track record as a computer scientist is impeccable. I sincerely hope that life rewards you with all the happiness that you thoroughly deserve.

Urmila… I’ve always regarded you as my superhero because you are the one I personally aspire to become. Most of the people I know who have achieved success have done so at the expense of their health. But you are living proof, that one can master health and career at the same time. You truly are a role model for men and women alike.

Samreen… To me you are an embodiment of the idea of “Women in Computer Science”. The way you have shattered the notion of male dominance in this field through your hard work is simply awe inspiring. You are a role model for the entire “Desi” community. I hope more young women follow in your footsteps to success.

Ren… You are the most creative person I’ve ever had the good fortune of knowing. You are teeming with potential and I hope your first job is just the beginning of a wonderful and exciting career. You are the person every IS major should aspire to become.

Humaira… You are the smartest and most successful individual in our Bangladeshi community here in Qatar. Having been taught in the same high school as you, I cannot help but be amazed at the tremendous odds you have surpassed to become who you are today. Your success will continue to inspire our community for many years to come.

Waltz with a neutron star

Shahriar Haque

I am a lonely atom
I travel through space and time
Someday I hope to meet a neutron star
And ionize myself in her radiating beauty
Together we shall dance for eons
Until gravity takes its toll and turns us to dust

No Regrets

Shahriar Haque

A good decision is often associated with making the most of an opportunity. Be it choosing your major, proposing to the girl you love, or pursuing the right career. But sometimes good decisions involve knowing when to let go. Life has its ups and downs. Decisions that made perfect sense years ago, may not be good for you any more. Life is too short to cling on to old decisions for nostalgia’s sake. If you can honestly convince yourself that you have failed at everything you could do to make your life better, it is time to choose a different path. Just make sure when you embark on your new journey, you bring along all of the good experiences and none of the regrets. Don’t let hindsight fool you into thinking that you are a failure. If you took the path that was the best for you under the circumstances, walked it for several years, and outlived its usefulness, you have nothing to regret. Holding a grudge is the worst possible way to repay God for his infinite blessings.

As I write this, I am concluding a 7 year long chapter of my life. I am humbled for being rewarded with so much happiness at such a young age. It would be terribly ungrateful of me, towards God, and towards the people I love to consider these 7 beautiful years to be the outcome of a bad decision. I would like to thank everybody who supported me from the beginning. I couldn’t ask for better friends, and more importantly, I couldn’t ask for better parents who remained patient with me even when I doubted them.

I ask God to provide me with courage to deal with this new phase of life, and I ask all of you to keep me in your prayers.

When man becomes less important than machine

Shahriar Haque

Last Friday a colleague of mine had a heart-attack. He is in early forties and had no pre-existing conditions. Luckily for him, he survived the incident after a quick surgery. I’ve had relatives back in my home country who passed away in an untimely manner. But never before have I been in a situation where I was close enough to the victim to notice his absence.

Today as I stared at his empty cubicle, a sense of irony grasped me. My colleague used work on Turbine Monitoring and Diagnostics. What that means in plain English is that he analyzes data gathered from hundreds of sensors on a turbine and uses it to predict failures ahead of time and allow engineers to carry out preventive maintenance.  Day in, day out he kept working, pulling out fancy algorithms out of a hat to keep a machine chugging along in some remote Arabian desert. All of this work, just so that some billion dollar oil company won’t have to see a dent in their obscene profits.

We spend our whole lives perfecting machines while our arteries get clogged and bones become brittle. We manage to find 8 hours in a day to serve our metal overlords, but not 30 minutes to take care of our own health. What sense is there to trade human life to give immortality to a machine?

Pen Friends

Shahriar Haque

Feelings are best left in the hazy existence of the mind. That’s the motto I have always lived by. That’s why I rarely write about personal topics. But today is going to be different. Reminiscing is nice, but I feel I need to write in order to do justice to the memories of some wonderful people I have met.

I don’t know how many of you can relate to this. Back in the day, before Facebook and Hi5 existed, people could meet new friends on e-pal sites. I don’t even think such a concept exists anymore. We rarely interact online with people outside our circles. Even among those who do, most of them are only interested in people with provocative profile pictures. There was a time when people didn’t care how their friends looked. It was a time before short-conversations over twitter and chat. People used to take time out of their lives to actually write you an email, or even post a letter.

Although with time we have grown apart, I feel extremely lucky to have had a couple of amazing pen-friends. So here’s to you YanDream and Jhum, hope this post brings back good memories and smiles on your faces.

Yandream, I always knew that wasn’t your real name. But I remember you explaining to me that “dream” is what your name means in Chinese. 29 emails from way back in 2005 is all that I have to remind me of you. You were the first person to actually write me a letter. That was awesome of you. In this era, nothing spells friendship more than a hand-written letter. From what I gathered from Facebook and Google, you have made true all the things you used to talk about. Really makes me proud seeing all your fantastic photography and design. Keep up the great work Meng !

Jhum, Jhum, Jhum, I have many things to say about you. You are my oldest and longest running e-pal. Reading through my emails I realized how much of my life I have shared with you. I claim to lead a robotic existence and not share anything with any one. But with you I shared everything from my love life to career-aspirations. In a way, you were my first personal blog. You were the first (and only) e-pal I have talked over phone. You are always one click away on Facebook. I pray I can get off my lazy butt once in a while and write a good long mail to me.

That’s it. I feel much better already. I don’t know if I will hear from any of you. But just know that you are part of what made my childhood awesome.

Best Wishes

Shahriar

Paradox of a CS major

Shahriar Haque

  • We know how to write a History essay or an English research paper, but don’t have any clue when it comes to writing a functional specification document or a technical design document.
  • We can accurately measure the run time complexity of an algorithm but cannot reliably say how long we will need to write a piece of code.
  • We can make sense of an assembly dump, but cannot parse a piece of code written by someone else and proceed to rewrite it.
  • We learn how how to code the hard way with Vim and Emacs, but never bother to learn to use all the features of Eclipse.
  • We can do miracles while coding alone, but have no clue how to commit, checkout, branch, tag, and merge using a revision control software for a team project.
  • We excel at writing thousands of lines of code, but have difficulty compiling, linking, and creating executables.
  • We enjoy the challenge of a good debugging session, but hate to write unit tests and regression tests.

Pitfalls of Programming at Work

Shahriar Haque

As I slowly approach to the end of my second year of work at GE, I can sense how much I have changed as a programmer since I left CMU. In this article I want to put down my “lessons learnt” on paper. Chances are that in a few years I won’t even remember what it felt like to go to college. So before I forget I want to pass on the experience that no text book could ever teach me. Rather than a write a wordy reflective essay, I will just list some of the common pitfalls that you should avoid as a newly hired programmer.

Resist the urge to rewrite code

This is probably the hardest one. So it deserves some special attention. You will come across a lot of crappy code in your work life. There’s seldom any documentation. So your only option will be to read through code. And the more you read, the more you will feel the code has no structure, things are not done in a proper way, there’s a lot of repetition etc.. Well guess what? It might be crappy code, but it’s well tested crappy code. A lot of the obscure code-blocks are undocumented patches to bugs people found after months of testing. If you are new to the company, you will have absolutely no clue about all the bizarre edge cases of a program. Chances are when you rewrite a piece of code, you will produce a clean but buggy application. If you are unsure whether to rewrite or not, ask yourself these questions:

  1. Will cleaning up the code reduce development time in the future?
  2. Will it make testing easier?
  3. Will it make deployment less time consuming?
  4. Does #1, #2, #3 take more time the time it will take you to rewrite the code?

If the answer to all four of these questions are “yes”, try to see if your coworkers think the same too.

Not being satisfied by anything other than your work

This is also a hard one. If you are a hard-working and productive programmer, you will get a lot of responsibility on your shoulder. There’s nothing wrong with that. But don’t go overboard. Typically there will be others in your company who can also code. You may not think that they are as skillful as you. But practically speaking, given enough time they can also get the job done. So don’t lose your sleep trying to be a one man army. Be a team player. Learn to delegate. Document your code, so that others can fill in when you go on a well deserved vacation.

Get over the need for speed

Yes, changing that data structure to a tree will make lookups O(logn). But it will only reduce runtime from 10 minutes to 9.5. It’s usually very hard to give a find out the big O complexity of real life programs. So don’t jump at the first chance you get to apply your algorithm skills. Profile your code thoroughly. Get an understanding of what the real bottlenecks are and whether they are under your control. And even then, you should only optimize if your users are complaining about it.

Reluctance to test your code

Admit it. We all hate testing. We hated in college. We got mad at professors who graded your test cases. And we still hate it at work. The only difference is, now the code may affect the lives of hundreds or even thousands of people. So get over it. If you feel testing is a waste of time. Write test scripts. Write modular code. Write unit tests as you code. Get your co-workers to test your code. The more testing you pile up till the end, the more repulsive it will get. And then procrastination will take over and you will end up shipping buggy code.

Those were the main pitfalls I could think of. Maybe someday I will write a part 2 for this post with all the small tips and tricks I picked up over the years. Anyhow, if you manage to start your career avoiding these pitfalls, you should have a bright future ahead.

CS Reality Check: Attitude

Shahriar Haque

I see CS kids bragging about their major everyday. Quite often bragging turns into insulting other people’s intellect. I used to be okay with this when I was a student. But after joining the workforce I see it as a mental disease spread by the CMUQ CS culture.

If you want a CS job worthy of your CMU education, a job that does not require you to be a code monkey, you will need to learn how to be respectful towards other people. Cracking a joke that makes a BA student look dumb doesn’t make you smarter, it only shows how arrogant you are. In real life, you’ll have to work with these people at some level, and if you can’t make them appreciate your work, you will find yourself replaced with more capable people.

As for IS students, don’t treat them as a lesser version of yourselves. Remember, the CS degree is focused more on the theoretical aspect of computing. In the workplace, IS students will have a competitive edge with their practical knowledge and communication skills.

Even if you get a technical job, you will be surrounded by people who are much older and experienced than you. If you are lucky, people will ask what major you were in, but never which college you went to. You have nothing to be proud of. So, from the next time on, watch that attitude !

CS Reality Check: Courses

Shahriar Haque

Freshmen often ask me what CS courses do we take in CMU. Sophomores and Juniors want to know which CS electives would help them in their senior thesis. Seniors want to know which courses are useful to get a job. To answer everybody’s questions I have a prepared a list of CS courses I have taken in CMU, a short description of each, and a rating indicating it’s real life value. Note that some of these courses may not be offered any more and the content of some might have changed.

Introduction to Programming (10/10)

Taught me object-oriented programming. Taught me Java, the language I use at work the most.

Intermediate Programming (10/10)

More Java, and lots and lots of data-structures: Trees, Hashes, Linked Lists. Once you get a grasp of programming this course will give you a toolbox to solve real world problems.

Concepts of Mathematics (4/10)

This course gives you a gentle introduction to the world of discrete mathematics and proofs. For some, this is the first real challenging course in CS. It’s not at all useful in real life, however, it does prepare you for upcoming disasters in discrete maths.

Data Structures & Algorithms (7/10)

Even more Java. At this point, it starts to get repetitive. Her you learn about exotic data structures which you will most likely never use in real life. The only reason this course gets a 6 is because of the various graph algorithms you will prove to be a useful addition to your toolbox.

Great Theoretical Ideas of Computer Science (10/10)

Rating this course is tricky. It doesn’t teach you something that you can directly use in real life. But GTI helps build character. It separates the curious CS enthusiast from the ones who are worthy of a CS degree. This course helps you build the stamina to solve difficult mathematical problems and write formal proofs to justify your solution.

Programming in C in Unix (10/10)

I am one of the lucky few who doesn’t work in a Microsoft dominated company. Our entire software architecture is Unix-based. Whatever Perl and shell scripting I learned in this class, I use it every day. On the other hand, programming in C made me a better man and prepared me to face Fortran which I often face at work.

Fundamental Principles of Programming (5/10)

Better known to CS students as “ML”, this course attempts to bend your mind by teaching you functional programming. It’s really fun, if you get it, otherwise you’ll feel that ML is just a twisted language. Not much real world application today. However, functional languages are coming back in fashion. So doesn’t hurt to have a taste of it in college.

Web Application Development (7/10)

This is one of those light-weight courses that doesn’t add to your workload, but gives you a lot to learn. You are introduced to the wonderful world of Ruby on Rails, the bread and butter of IS students. Regardless of whether you like developing web apps or not, writing code in Ruby will be a breeze of fresh air after Java, C and ML.

Introduction to Computer Systems (9/10)

This is the first serious CS course in CMU where you really get your hands dirty. You get down to the assembly level and learn the basics of compilers, computer architecture and memory management. For sure, you won’t need much of this directly in real life. But the realization that “there is no magic inside the box” will help you understand performance bottlenecks of even the most complex systems.

Algorithm Design & Analysis (6/10)

This is the grand-daddy of all discrete math courses. While it’s not as mind-bending as its pre-requisite GTI, it’s still teaches you some useful stuff. Understanding how to determine the time and memory complexity of algorithms will help you design better applications. In a company where a lot of applications build on your work, demonstrating a sound knowledge of algorithm design will raise a lot of eyebrows

Algebraic Structures (0/10)

Really abstract mathematics. Simply pointless.

Formal Languages & Automata (3/10)

This is a course I really enjoyed, even though there is a lot of talk about abstract computational devices. Here you get to learn about regular languages, context free grammars, Turing machines etc. Nothing terribly practical, but very insightful nonetheless.

Foundation of Programming Languages (0/10)

More ML, but this time with a focus on formal analysis of programming languages. You get to write your own toy programming language every week. Sounds fun but terribly dry and useless.

Technical Communication for Computer Scientists (0/10)

This course has the potential to be a useful course. There is a variety of technical documents that a CS professional need to author on a regular basis, (e.g. Technical Design Document, Functional Specifications, Technical Requirements Document, Programmer’s Guide etc.) This course teaches none of them. I will write more about this point in a future article. CMU really needs to improve the content and instructors of this course.

Software Engineering (2/10)

Another course that had the potential to be very useful. But I guess there is no way to make students without industry experience appreciate the impact of good architecture and design. If I could go back to CMU and take any course, it would be this one. Any how, software engineering skills is what helps you climb up the corporate ladder and takes you from a code monkey to a software architect.

Computer Networks (8/10)

Another heavy duty programming course in C. A lot of new material. You learn networking from its dirty low levels of sending individual bits, error correction, collision detection & avoidance, routing, queuing, Ipv4, Ipv6, TCP/IP, and even some application level network protocols. The programming assignments are pretty demanding. You get to read the technical specification of the IRC protocol and build your own IRC server. You even get to write your bit-torrent client in the last assignment. The networking stuff isn’t that useful to me as a programmer. However, as a distributed systems programmer, the code from the assignments are a useful reference for me.

CS Reality Check : Deadlines

Shahriar Haque

University professors want you to believe that if you are failing to meet your deadlines you are “not managing your time properly”. This is not true for a number of reasons.

In real life people hardly shove deadlines down your throat. The way it usually works is the project manager first lists all the activities that needs to be done. Then all the “owners” of each activity gives an estimate on how long each activity will take. And then, based on the program’s priorities, the PM assigns deadlines for every activity trying to respect the estimated durations as much as possible.

In a way, professors are actually doing more harm to you by giving you deadlines in the first place. The most important skill for a developer working in the real world, is the ability to reliably estimate the duration of work. Deadlines are okay during the freshmen and sophomore years. There isn’t any significant amount of coding in the first two years. But from your third year and onwards, you are faced with 4-6 week long programming assignments. This is something that requires a bit of planning. Depending on the courses you take in your Junior year, the deadlines for your 4-6 week long assignment may not be compatible with your workload from other courses. In real life, you would first look at all your assignments from all your courses, set priorities to them, and then *plan* for a 4-6 week long slot at some point during the semester. This kind of project management skill is vital for a developer to succeed in real life. A pre-determined schedule is not guaranteed to work for every student.

Uplifting Demise

Shahriar Haque

I died as mineral and became a plant,
I died as plant and rose to animal.
I died as animal and I was human.
Why should I fear?  When was I less by dying?
Yet once more I shall die human,
To soar with angels blessed above.
And when I sacrifice my angel soul
I shall become what no mind ever conceived.