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.

Episode 3: كل شي بدّو تعب

In this 5 minutes episode I talk about the importance of effort in production and creative work.

To receive notifications about new episodes, subscribe on iTunes/Podcast app: https://itunes.apple.com/us/podcast/hassan-kanj-hsn-knj/id1159542942

Episode 2: العمى شو مسمّ

In this episode of my podcast, I talk about passive-aggressive people, why they are like that, and how you can deal with them, in addition to some tips to help you get rid of such a behavior in case you act like that sometimes.


Links:

– Overcoming Passive-Aggression: How to Stop Hidden Anger from Spoiling Your Relationships, Career and Happiness: https://www.amazon.com/Overcoming-Passive-Aggression-Spoiling-Relationships-Happiness/dp/1569243611

To receive notifications about new episodes, subscribe on iTunes/Podcast app: https://itunes.apple.com/us/podcast/hassan-kanj-hsn-knj/id1159542942

Episode 1: شيل من راسك وحط على الورقة

 

This is the 1st episode of my personal podcast, it is about “decluttering” your thoughts in order to focus more, I hope you enjoy it and benefit from the content.

To receive updates subscribe on iTunes/Podcast app: https://itunes.apple.com/us/podcast/hassan-kanj-hsn-knj/id1159542942

 

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.