Why you should read about computer history

I have been lately spending some good amount of time reading about the history of computers in details (networking, internet, transistors, microchips, etc..) and this turns out to be more exciting than I though, it provided me with great insights on how things started and why they are the way they are now.

I have been lately spending some good amount of time reading about the history of computers in details (networking, internet, transistors, microchips, etc..) and this turns out to be more exciting than I though, it provided me with great insights on how things started and why they are the way they are now.. I really believe that even if you didn’t use these info directly in your day to day job, it will still have an impact on your perception to computer and programming in general and it will still help you solve some problems in unexpected ways.

I am also a strong believer that the way to change things and to build better systems is to take a detailed look at how things started and about the pioneers in these domains and why they build stuff in a certain way.

Let’s say regarding computer architecture, I think most of us (programmers, and computer engineers) took computer architecture and logic design at university (CPU, memory, buses, truth table,etc..) but still what we learn in university is rarely about history, it is more about how things are currently engineered.. It is like we are learning about the “final DB schema” instead of the “accumulated migration files” that led to it..so for me, I had so many gaps about the history of computers (and of course I still do but at least now I know a bit more), but when the full picture becomes more vivid, I understood that it all started in different phases, and they were connected in an interesting way.

for example so much of our circuit design is actually based on the work of George Boole born in 1815 (<= boolean refers to him), where he thought that human decisions can be expressed in some sort of mathematical formulas and he wrote about that in details, what he wrote was mainly dismissed at his time, but around a century later this was the revolutionary idea to design computer circuits (boolean logic + logic gates,…).

Another example is that, before transistors, engineers used vacuum tubes. then transistors were made and perfected, and then the microchip was invented (which was literally a revolution, since it helped to fix a problem know as tyranny of numbers, where you had to connect a large number of wires to transistors and other components (and this isn’t feasible from testing,reliability, efficiency and practicality point of view).

The above is just an extreme summary of what I learned, but my point is by understanding all that you will have a better sense of history, so when you look to an electronic device or a hardware, you can understand the stages that made it reach this point.

That’s about the “understanding” part, the other important part is about the “problem solving”, and by reading about computer history, you would understand the problems faced by the earlier generations and how they solved them, and how by actually solving them, they literally started a revolution in certain areas.. Currently, we don’t use vacuum tubes but rather transistors, so we don’t have a vacuum tube heating problems,etc.. but it is interesting to know, when there were a vacuum tube problem, how the engineers and scientist worked to solved it, though the problem doesn’t exist nowadays, the way and the method used to solve it is still invaluable, but what’s interesting that I personally think that so many problems today can/may be solved by using (or inspired by) similar approach or methods that were used to solve problems that are “extinct” now.

so I highly recommend you spare some time reading about that, and I can provide references for those who are interested.

 

How to relax when there’s no magic switch.

While checking my twitter account I encountered some “stress related” tweets by a fellow programmer, and a previous guest at coder voice podcast: @sarahSeoudan

And I wanted to reply, then I thought that I won’t be able to express my thoughts clearly in a tweet of 140 characters, so I am writing this post here with the hope to be beneficial for everyone.

First of all, I agree that there’s no on/off switch for relaxing, and there’s no secret method that will instantly help, because relaxing is simply a result, a side-effect, a by-product of many changes we actively introduce to our own personal behavior and lifestyle. when our friends, family, and even doctors! ask us to “be happy” or to “just calm down” it feels as if they are implying that the “magical switch” actually exist..

well..it doesn’t. and that’s OK.

relax

I am talking here about “releasing stress” and “relaxing”, but this actually applies to happiness, success, fulfillment, and even to finding love! and all other similar goals, and aspirations that many of us mistakenly assume, that they have a secret/magical solution that for some reason we are unable to reach, or if we are on the opposite side of the spectrum, we wrongfully assume the impossibility of reaching such a state because of who we are, so we don’t even try!

The solution is to understand that: “it is not a sprint, it is a marathon”.

And yes, releasing stress, happiness, having a fulfilled life are without any doubt a marathon and not a sprint. A sprint is shorter and requires a much higher running pace, running a marathon however, requires a more strategic approach, and a relatively slower pace to successfully reach the finish line.

Finishing my 1st Marathon ever (2015) - Photo courtesy: Beirut Marathon Association Facebook page
Finishing my 1st Marathon ever (2015) – Photo courtesy:  Beirut Marathon Association Facebook page

These are some tips, that helped me personally (in actually running a marathon! But also in releasing stress, and with life in general):

1- There’s rarely one single step: The understanding that there’s no single step to reach a certain goal, provides us with both a relief, and the strength to keep moving forward, even if the result isn’t instantaneous, for example, let’s say we are so stressed, burned out, and overloaded with work most of the time, in this case we can apply multiple actions/steps (preferably in a gradual and sequential manner), and after a while we will wake up one day and realize how more relaxed and fulfilled we’ve become (example of actions to take include: cleaning our desk, decluttering, organize our work, deciding what tasks to work on and also what offers we should reject, scheduling, sport, etc..)

2- Start slowly but be persistent: There’s no need to apply and try all the methods on day one, because you will usually end up exhausted, frustrated and most probably you will quit.. instead, and back to our “releasing stress” example, in the first week, maybe all you have to do is just keeping your workplace very clean, and organized.. even if you still didn’t see any noticeable effect yet, just be persistent and introduce more steps each few days (based on your comfortable pace)

3- It is worth it: do not postpone any activity that can improve your life and your state of mind, and if you find yourself busy all the time, then that’s actually an additional reason to find time for that.

I know I haven’t discussed in details how to actually release stress, you can find many practical steps online, but by considering what I mentioned above you will have the right mental set to actually apply them!

And it is worth noting that this may seem basic, and intuitive, but sometimes the secret of handling life is hidden in simplicity mixed with our persistence.

A message to a friend who is lost in the programming domain

lost

I have noticed for sometime now that you are actually lost when it comes to programming and to the whole tech industry and we have talked about that in the past, so I won’t start my comment by saying “you can do it!!” and all these bullshit sentences that will provide you with no real answer from people who aren’t even programmers in the 1st place!

Well, let me start 1st by the bad news.. if you continue this cycle of these toxic thoughts (“playing the victim”, “this is not what I expected”,…) and patterns of behaviors (“giving up after realising how difficult a topic is”,etc..) then I don’t think that you can actually do it!!

Now I am not sure why you exactly wrote this post, if you wrote it for pure venting then I can’t help you, but if you are seeking some real advice (as you mentioned in your post), then read on…

1st point, have you watched “Whiplash” and “the prestige”? I recommend you go and watch these 2 movies, what they teach you is subjective (to each person) and can be a bit extreme, but there are some strong messages there (in addition to being some great movies in general!)

2nd, I think you may have the potential, but you just lack the focus, you are expecting too much, comparing too much, yet relatively doing so little, or more precisely, you are doing so much but in so many scattered topics.. don’t get me wrong, I think you know many details about different technologies, trends, hardware, computer news, etc.. (and I noticed that in the mena devs channel) which is a really cool thing! but focusing is the key! but this may seem paradoxical to you! how you should focus while your exact problem is you don’t know on what you should “focus”!

Well, this is actually a topic in computer science called the “explore exploit problem” (for more info Google: “explore exploit” or “multi armed bandit” or “optimal stopping”), and this problem deal with the fact of knowing when to keep exploring your options, and when you should settle on an option (difficult but solvable problem,but won’t go into details here..), so till now I was talking a bit in general but these are some concrete steps:

1- Focus but don’t commit if you don’t feel like it: passion, motivation, vision, and all these stuff are important and essential, but let’s forget them for a second here.. start working on a project (let’s say a chat bot), and put some realistic time expectations (it can be 1 or 2 months [Yes at least this much, and not just few hours or day, then you close your laptop and call it a day!]), and keep working to finish this project (and let me emphasise on the following using caps lock: EVEN IF YOU DON’T FEEL MOTIVATED TO CONTINUE WORKING ON IT, AND EVEN IF YOU FELT TIRED AND YOU JUST HATED THE PROGRAMMING LANGUAGE.. just continue working till you finish this project (also set realistic goals, don’t build an OS as a 1st project! but don’t also make it a Hello world app!).. and after you actually FINISH IT (despite what you felt during working on it…) look back at the whole process, introspect, and then examine your feelings about the whole process (are you proud, satisfied, enjoyed what you built, etc.. or not <= and based on that you can decide if this is something you may enjoy doing or not), so let’s say if you built a full website (backend, frontend,…) and you still didn’t enjoy it much, then move to security topics for example and repeat (Note: spend at least 1 to 2 months on each topic)

2- Don’t blame/don’t compare: I know it is easier said than done, and we are all guilty of doing that from time to time, but try to control the impulse to do so, and even if you want to compare, use that as a motivation to improve rather than an excuse to quit and/or feel depressed.

3- About overthinking: this is a tough one, but as a 1st step, start to notice yourself when you are overthinking and try to break the cycle (again easier said than done, but being self-aware when you are actively doing that can really help)..

4- Learn the basics/go offline: going offline may seem counter-intuitive in this cyber “connected” world (especially if you are into programming/technology), but being online and staying up to date, may actually kill your chances of doing something great, I am sure those who built the coolest libraries and programming languages (as you mention something related to that in your post) didn’t spend their time checking the latest trend and blog posts all day long, stay up to date for sure, but keep in mind that trends may come and go, so focus on what matters and use different learning styles if needed (check 5)

5- Different learning styles: I am not sure what type of learner you are, but try different methods for learning (articles and tech blog post are good) but I personally prefer that if you want to dig deep into topics, I recommend books and youtube series (preferably a mix of both), and always remember to focus ! (check point 1)

6- Money: you mentioned money in your post and that’s a legit concern, but if you keep thinking about it without focusing on trying different projects/technologies for some time, then you won’t get either! so focus on trying different technologies 1st, and don’t eliminate the concern for money, just postpone it a bit.

7- Open source: no you don’t “have” to contribute back if you can’t, and it is not stealing, it is literally “open source” and those contributors are doing just fine! but if you also want to start from scratch for learning purposes, then that’s great too!

My advice may seem long but I barely scratched the surface here…

P.S: I hope this to be your last post about this topic, and that your next blog post has the title: “Here’s the project that I am currently working on”

And good luck, from one programmer to another.


Note: This is a slightly modified version of an actual reply that I sent to a friend, I hope its content to be beneficial to any programmer, but more specifically to junior programmers.

Back to photography – Photos collection 1 (Al Manara Beirut)

Lately, I have decided to go back to photography, I am not a professional photographer, but I used to take a lot of photos many years ago.

Below are some photos I took today at Al Manara – Beirut.

Feel free to use them however you want, the pictures are licensed under the Creative Commons license (CC-BY 4.0).

DSC_0179

DSC_0181

DSC_0182

DSC_0183

DSC_0184

DSC_0189

DSC_0190

DSC_0193

DSC_0195

DSC_0196

DSC_0201

DSC_0206

DSC_0207

DSC_0210

DSC_0211

DSC_0213

DSC_0214

DSC_0220

DSC_0224

 

 

 

 

A 3D world is worth a thousand charts

They say a picture is worth a thousand words, I believe a 3D world is worth a thousand charts.

Lately I was experimenting with BabylonJS (A 3D engine based on WebGL/Web Audio and JavaScript) , and I realized how powerful it is to build 3D environments inside the web browser! especially that we can now import data and visualize them inside a 3D world.

The possibilities are endless, and since we now have an additional dimension to present our data, we are able to gain new insights that normal 2D charts can’t easily provide.

For experimental (and pure fun!) purposes, I built a 3D app that imports chat messages from MENA Devs slack group and then converted these messages into cool 3D objects that you can view in a three dimensional space directly from the web browser!

I discussed the app’s architecture and I showed some demos at “The 3rd MENA Devs meetup”.

Watch the talk below, and let me know what you think:

Coder Voice: A programming podcast in Arabic

Few weeks ago, I was talking to my friend Oday Maleh, and we agreed to start a programming podcast in Arabic, we are both programmers so it felt like a cool idea to start a programming podcast where we share our (and our guests) technical knowledge with the programming community in the MENA region.

We were excited to start, but at the same time we were a bit nervous, since we’ve never done any podcast before and we had no idea whether the programmers will love or hate it! The good news is, we received some very good feedback from the community, and we are working to record more episodes and to keep improving the quality.

The podcast is called “Coder Voice”, you can check it here: http://www.codervoice.com

Facebook page: https://www.facebook.com/codervoice

Let me know what you think.

Oday and me after recording our first episode
Oday and I after recording our first CoderVoice episode

 

Why I started a Facebook page for this blog

Few days ago, I decided to start a personal Facebook page for this blog. Having my own page is a part of my objective to have a more balanced life, and its main purpose is to be able to connect with new people in addition to current site visitors.

This blog provided me with the opportunity to share my ideas and personal experiences with the world, and by sharing these posts on social media, I will get the opportunity to connect with genuine people that otherwise I may not have the chance to meet.

Here is how I see it, in the past few years I met a lot of cool people because I was attending more events, and I was socializing more, and it wasn’t easy for me at first, it was even a bit awkward, especially that I am an introvert, and because I didn’t use to go out much before, but with time and practice, interacting with new people and building relations started to become easier, and I was able to initiate and engage in conversations in a much smoother and natural way, which led me to hear cool stories, learn a lot and build connections.

My aim from the page is to communicate and connect, and maybe this will lead me to build new friendships or meet some awesome people, I really don’t know.. but what I do know, is I am putting myself out there by sharing topics and personal stories on my blog.. and if you would like to meet or connect, just leave me a message and I will be happy to hear your story, because everyone has something interesting to share!

You can check/like the blog’s new Facebook page by clicking here.

My journey towards a balanced life – Part 2 (The plan)

After writing my first post (My journey towards a balanced life – Part 1), I started setting a plan to move forward, to set a plan I specified non-work related activities that are important to me and that will help me create a more balanced life, and they are mainly divided into 3 categories:

  • Meeting new people and expanding my social circle
  • Re-connecting with my friends
  • Exercising

It wasn’t enough for me to say I am going to start, I needed an action plan, because I know myself, if I didn’t do that, I will just get super busy with projects and just postpone other stuff, the ‘intention’ alone is not enough, I think you can easily relate, let me ask you a question:

How many times you decided to start exercising or going out more and then you found yourself sitting on the couch months later and doing nothing (despite the fact that you are totally aware that these activities are beneficiary for you)?! (does new year’s resolution(s) ring a bell?!)

so, based on all that I knew that planning is totally the key to proceed.

What I did next is writing on a piece of paper what I want to do for this month, and I divided them by days, I ended up with this list:

  • Running
  • Cardio/Weight lifting
  • meeting a friend
  • attending non-technical event (because I already attend many technical ones!)
  • working on my blog

The above were important to me to create my balance and to feel more relaxed and energized, your list may be totally different but you get the point.

later on, I found a website to help me print a calendar (Link here), I organized the tasks into days and I printed a calendar of repeated tasks that I posted on my wall:

calendar
My “life” schedule for March 2016 – Click the image to enlarge it

I recommend you do the same if you are struggling to balance your life, and remember, the main key is to give these tasks the same priority as your work, or else, years will just pass by – and you will suddenly wake up wondering what have you done with your life!! well here is what you have done: You didn’t follow the advice on my blog !! (No Pressure 😛 )

on the other hand, if you decided to do that, and you would like some support, I would be happy to feature your progress in one of my posts.

The challenges and benefits of starting my own business

I always wanted to start my own business, to do something innovative and special in the domain of programming and technology. The thought of working in a big company, climbing the corporate ladder, was never a dream of mine, nor an objective I aspired to attain.

after graduating from university with a degree in Computer Science, I worked for around 2 years as a full-time developer, after that, I left to pursue a career as a freelance developer for few years, then I co-founded Menaversity and later I started Qualtech, a full-service digital agency.

The journey was never easy, my friends and family, were supportive, but many of them also shared their honest and genuine feedback, which was a variation of:

“What the f**k are you doing !!! Go get a REAL job with an income that doesn’t involve following up with clients all day long, and programming all night till the next morning !!”

For years I barely had enough money to survive, most of the income that I get from my early clients, I spent paying for my business expenses (rent, servers, etc..). Having hundreds of dollars as monthly expenses without any fixed income is no FUN at all !

Programming by itself can be very stressful sometimes (though I love programming), add to it the fact that I was working to build a business then add to all that sleepless nights and you can get a rough idea how messed up my life was ‘perceived’.

But, despite all that, I enjoyed what I am doing, because I have a vision and a goal and because along the way I learned a lot, and these are some of the great stuff I experienced (whether as a co-founder at Menaversity or as a founder at Qualtech):

 

1- Speaking in front of a crowd

Yes, talking in front of a crowd can be an intimidating experience, and no matter how much I am confident about my idea or performance, I always feel the stress and the fast heartbeats before speaking, whether the talk was in front of a large audience like at Arabnet (watch video here) or in front of a smaller crowd, but once I start talking, the stress starts to disappear and I become more confident and excited.
The moment I am on stage is very symbolic to me, it is a validation that it was totally worth it. All the working hours, the frustration, the sleepless nights, the anxiety, the excitement that is mixed with a feeling of whether anyone actually cares or not, all of that starts to make sense.

hassan-kanj-arabnet-2015-menaversity
Talking about Menaversity at Arabnet 2015 – Photo courtesy: Arabnet
2- Participating in competitions and winning them

While we were working at Menaversity, we participated in different competitions (Hackathon, PitchFest,…), The competition atmosphere is stressful, yet amazing, especially when we win 😎 !

menaveristy-hackathon
Presenting Menaversity at DevAppLB Hackathon, AltCity, March 2013 (we won 2nd place here)
3- The excitement of meeting people from different backgrounds

What I love about starting Qualtech digital agency is the diversity of my clients. I feel excited when I meet a new client, because I enjoy learning about new industries, this keeps me energized and motivated. In addition, it is always a good idea to be well connected with people from different domains and backgrounds.

4- Survival by continuous learning

The darkest moments for me were also the most crucial to my success. Of course I panic and get angry sometimes, especially when I work so hard and finish so many projects, and in the end, I look at my bank account and realize that I can barely pay the expenses for next month.. But in these moments, I become very creative, and I start to learn more and more, about marketing, sales, and I start to draw plans in order to get more income for my business to survive. These moments aren’t easy, but each time I overcome a new obstacle, I realize I am a step closer to sustain my business.

5- Applying my love for reading to the business

My close friends know how much I enjoy reading, from psychology to marketing to human behavior. I just love learning new stuff! And by running my own business, I was finally able to benefit from this curiosity in an applicable way. of course, I still delegate the tasks that are outside the scope of my expertise but it is always nice to chat and exchange ideas with people I work with in order to build the best solution.

 

These were some of the stuff I love about having my own business, you might have totally different ones, but that’s the beauty of it, every story is different and if having your own business is your goal, I hope this post helps you to proceed with your vision.

My journey towards a balanced life – Part 1

In the past few years, I achieved many things that I am really proud of, like co-founding Menaversity, starting my own digital agency Qualtech, sharpening my Marketing and Business skills, attending and pitching in conferences and events, in addition to expanding my business and professional connections and my programming and technical skills.

Starting my own business is a dream of mine but still, it  is a really difficult task, it requires working for long hours, communicating with clients, respecting deadlines, in addition to coping with stress and handling a lot of pressure while keep moving forward in steady steps (or at least as steady as possibe).

All that, made me realize how much I am neglecting my own social and personal life. weekends for me, are just like any other day and sometimes, in order to finish a project I work in cycles of work and sleep (and Netflix series), work and sleep (and more series…), to the extent that I finish a project on Wednesday or Thursday while still thinking if today is Sunday !! don’t get me wrong, I am not complaining, and no one has forced me on such a lifestyle.. I LOVE what I am doing and I am so passionate about all these techie/nerdy stuff, but at the same time.. I want to create some balance, I want to meet people, to go out more, enjoy the social aspect of life, because deep down I know that this is affecting me negatively.. and because I know that by doing so I will actually benefit both my personal and professional life !

The secret to achieve such a balance is taking the decision, we will always have work to do, projects to finish, and if we do not take a “conscious” decision about going out, meeting new people, having fun with friends, taking a break, relaxing, or even a time to “do nothing” we will end up with an unbalanced life, and that’s rarely a good thing !

I’ve made up my mind, and I hope this is going to be a new exciting chapter in my life.