Hany Essam self-taught software developer

Open Source Society University Learning Progress

Those posts dedicated for my self-paced/Online Computer Science learning progress, inspired by the MIT challenge, i too going to learn what a CS student will probably learn in a typical university,"online for free", in case you don't know the MIT challenge, it’s when a guy finished Massachusetts Institute of Technology CS curriculum using YouTube and Free resource in 1 years.

So far, im at the second course Introduction to Mathematical Thinking by Stanford on Coursera, However the course's prerequisites is high school math(Algebra I,II and Geometry), and as someone who graduated high school +10 years ago, I decided to take a step back and fresh up my math skills on Khan Academy.

  • Completed Missions: Introduction to Computer Science
  • Current mission: Algebra I, II and Geometry
  • Next Mission: Introduction to Mathematical Thinking

Until next time!

Open Source Society University - OSSU

For the past few weeks i have been doing some thinking about my career path, whether should i go for an MBA or pursue another bachelor degree in Computer Science.
Luckly i found this great Computer Science curriculum OSSU, A free online resources for a complete Computer Science major curriculum "in order".

So this is a great opportunity for someone whos short on cash to learn a CS degree subjects and classes online, the crriculum is very up to date with today's technology and cover a lot of the Hot topics(Data Science, IoT) along with a solid foundation classes(Math and Algorithms).

Some of the classes as the following:

  • Introduction to Computer Science
  • Math (Mathematical Thinking)
  • Program Design
  • Algorithms
  • Software Testing
  • Operating Systems
  • Data Bases
  • Compilers
and more..

Im really excited and i believe this list might take up to a year and a half to be finished.

Binary Search

This is the first post in a series of upcoming Algorithms tutorials, Its very important as a Software Developer to learn and understand Algorithms, for one thing, If you want to join the kick ass companies such as Google,Facebook etc, As they barley question your knowledge of specific programming language or what stack you’re familiar with, rather how you think, your problem solving techniques and how you approach a particular problem, So most of the interview questions will be mainly algorithms based. The other reason is for you to advance your skills and your problem solving techniques as this is what sets a good developer apart from the other ones. I can’t emphasis enough how understanding Algorithms is important to you as a software developer. This tutorial series will be in Arabic language as im sure there are plenty of good resources out there written in English, so this is for our fellow Arabic speaker gurus.

الأول خلونا نبدأ نتكلم عن الالجوريثم بصفه عامة,
الألجوريثم هى عبارة عن خطوات بنعملها لحل المشكلات, أو الخطوات اللى بنعملها للوصول لهدف معين, يعنى مثلا اللى ب ي كس اس مديرو ف الشغل عشان يوصل ده بيستخدم طريقه معينه ف الوصول للهدف, أو حد تانى ابن ناس بيشتغل على نفسه و بيجتهد عشان يوصل ده بردو بيستخدم ألجوريثم, ف الخطوات اللى انت بتعملها عشان تحل مشكله او توصل لهدف هو ده الالجوريثم, كل ألجوريثم ليها كومبليكستى, و هى مقدار الوقت اللى انت بتاخدوا عشان تحل مشكله او توصل لهدف.

Binary Search

تخيل كده انك عايز تدور على رقم وسط مجموعه ارقام ف(اراي) مثلا, ف ممكن حضرتك تيجي و تمسك ال اراى دى و تمشى من اول انديكس فيها و تشوف هوا ده الرقم اللى بتدور عليه ؟ لا, طيب شوف اللى بعده, وهكذا لحد لما تلاقى الرقم اللى بتدور عليه, دى طريقه, او الجوريثم(ليـــنر ســيرش) بس مش ظريفه, افرض مثلا ان الاراى اللى بتدور فيها, فيها 100 رقم, و الرقم اللى بتدور عليه ف الاخر, ف انت كده هتضطر تمشى ف الاراى كلها تشوف رقم رقم لحد لما توصل للرقم اللى بتدور عليه, طيب افرض فيها 100 الف رقم؟ مش هياكل صح!
الباينرى سيرش بقي فكرتها ظريفه نسبيا, انا مش هدور من اول انديكس ف ال أراى, انا هدور من النص, ف خلينا نفترض مثلا ان عندنا أراى فيها 25 ايلمنت, ف هاجى عند ال انديكس 12 و اشوف, انت الرقم اللى بدور عليه؟

لا, طيب انت اكبر ولا اصغر من الرقم اللى بدور عليه؟ لو فرضنا انى بدور على الرقم 67, ف هنلاقى ان ال انديكس 12 شايل القيمه 41, ف انت اصغر وش, يبقي انا هستبعد تماما ومش هدور قبل الانديكس 12, هبدأ ادور من انديكس 13

و هكرر الخطوة الاولى اللى عملتها تانى, ( 13 + 24)/2 هيدينى 18, على افتراض اننا بنقرب الى اقرب رقم صحيح, يبقي هشوف ال انديكس 18 انت الرقم اللى بدور عليه ؟ اه , انا بدور على الرقم 67 فعلا.

بس, ده ببساطه ال باينرى سيرش, ده طبعا على افتراض ان الأراى مترتبه تصاعديا و الرقم اللى بدور عليه موجود . ده ال سودو كود:

  1. Let min = 0 and max = n-1.
  2. Compute guess as the average of max and min, rounded down so that it is an integer.
  3. If array[guess] equals target, then stop. You found it! Return guess.
  4. If the guess was too low, that is, array[guess] < target, then set min = guess + 1.
  5. Otherwise, the guess was too high. Set max = guess -1.
  6. Go back to step two.

Reading Other's Source Code!

One thing the Full Stack Web Development specialization on Coursera particularly do right, Is that, each week after we submit our assignments we have to review at least 5 students assignments and source code, And answer a few questions such as:

  • One thing this learner did particularly well..
  • One way this page could be improved would be...
  • If there is any additional feedback you would like to give?

I constantly come across the concept of reading other's source code as a way of learning and becoming a better developer, And the people behind the course understand that concept and support it.
Honestly, i learned a lot reading other student's code, every one solve the problem in his unique way, and it allows you to explore more approaches and techniques.

We are at the end of the first course Learning HTML,CSS and JavaScript, And im really excited to start the next one.

I really recommend this Course and want to thank “David Rossiter” for his outstanding work in the First Course so far.
Coursera Rock!

How To Use Your Mobile's Camera as a Webcam!

Part of Coursera's assignment submission is to verify your identity; they do that through 2 methods, your typing behavior and your webcam. well, what if I don't have a webcam or my webcam is broken!, That’s exactly what happen to me, i couldn't submit my assignment as my webcam is broken, but I do have a mobile that has 2 cameras(front and rear), is it possible to use them!

Immediately head to Google and it didn't take long until I found a solution, There is a mobile application called IP Webcam that allow you to use your mobile's camera as a webcam, All you need to do is download the app from the Play Store, have your mobile connected to a Wi-Fi network, and Your done.

Now im able to verify my identity and submit my assignment on Coursera, You can also use it with Skype or whatever.