Algorithms & Data Structures: My Journey.

journey path of algorithms

Some years back I had a dilemma that led me to never study algorithms and data structures as a computer engineering student. I am the type of student that always goes above and beyond. One thing that I did during my studies is take courses that were 1 year ahead of my class. For example, if I was a Freshman (1st year), I would register in classes from the Sophomore year (2nd year) with any remaining credits (my university system is one of which you are given a fixed amount of credits for each semester, but passing courses ahead of time made me have an excess). I reached a place where one of the courses I passed was removed from the curriculum so the next year, which was the year on which I was originally supposed to take it, I was eligible to swap its grade for a future course. Due to my inexperience with being in university or studying computer engineering, I had little to no experience on which was the best course to switch my grade with. My background was science oriented, biology, chemistry, you name it. My experience with computer science was very minimal, hence my knowledge of it was lacking foundations. I had no advisor, so I resorted to asking people, in specific classmates in the same or an older year than me, however, I never thought of asking any professor. In my naive brain I thought that a student is more likely to know the answer based on rumors from other students or if they have done the course before. That sometimes holds true but not all the time.  After asking around I was advised to assign that passing grades to “Algorithms and Data Structures” because that course was hard, and even the ones that did pass it say they barely understood what was going on in that course. I strongly remember that there were 2 students out of the several I asked that told me it is a fundamental course to take. I did not take that word seriously, I did not understand why it is fundamental, I looked it up a bit online but I still did not understand what it was about. I decided to go by the advises of the party of opinions that were the most resounding. I assigned that not-so-awesome grade to algorithms and data structures and after that day I was not eligible to join the lab classes of it anymore because on paper I had already passed it.

Years after I tried to look for internship openings, and I realized that…software engineering internships which was what I wanted to try were asking for “algorithms and data structures” as one of their requirements. Later, I learned that, that is one of the fundamental coding interview must-know in order to become a software engineer or ace the challenging coding interviews. For top companies it seemed to me that no matter how intelligent or smart I was, all that mattered was how much I possessed that hard technical skill. That was depressing. Right there the dream of being a software engineer started to fade. I once more went online and tried to ask the search engines to show me the way. Show me the way to learn this skill! I did get an answer, but not the answer I wanted. I read some books, checked out series of recommendations on the right and best book to read for this subject but it looked so complicated. It looked very confusing, after a point these resources hardly made any sense and I will call it quits for several months, try again, temporarily quit, and repeat; I struggled.

I developed a phobia on data structures and algorithms, one that told me that it is so hard, and I would not be able to learn it. Eventually, I felt that the tech industry does not have a place for me. I felt that I needed to have known what code is at the age of 6 so by my early 20s I would have the necessary coding experience needed to do well in a coding interview. Life doesn’t go back and by the age of 6 or 12, I had no computer anyway.

 

The Turning Point

Over the months I changed my focus on being able to build some skills on other areas I was lacking. Several things happen till It lead me to decide to learn it again. It happens that I had the wrong goals in mind. I wanted to learn algorithms to do well in a coding interview to get a software engineering internship at an awesome company, when instead I should be learning it because it is a skill worth knowing and it is something that is bound to make my brain think smarter.

This time I was fortunate to get to know a wonderful person who is there for me in this journey of learning. That is very comforting. You can also join us in this journey of learning, a never ending cycle, having in mind that we are walking the same steps together in asynchronous times and paces.

I want you to join me in this journey. If you are struggling to learn this very important fundamental knowledge feel free to follow me in this path. This is a skill you can learn, and you need to start believing you can. That is the first step and that is how I am starting myself.

Task 1: Believe you can learn it. It might take hard work, but believe you can.

Read more

The Outreachy Experience – End – Project Overview

Outreachy ended few weeks back. I however didn’t write a closing article and that is, because I was preparing one with an overview of what I worked on and about applying to Outreachy.

Without further delay, those asking about my experience or interested in Outreachy/Mozilla / Open Source / Tech can check it out here: https://hacks.mozilla.org/2015/09/implementing-air-mozillas-related-events-feature/

Outreachy Internship Week #11 #12

So this week ended well, I was stuck with some minor bugs for quite some time. After discussion and pair programming with my mentor those were very tiny mistakes that caused huge problems. However after finishing resolving that and me thinking “Oh great now I can move on” the next day I got some odd error!

I am proud to say that my project involved a lot of code but a lot more debugging! Getting stuck is very common and I learnt that is one of the aspect of programming. Before I thought it was all about, getting a project to do. Flawlessly coding it and it works! Not hours of debugging. Eventually, when you try to add a new feature into a huge code base and the major tool you are using is new to you. This stuck – unstuck cycle gets pretty common.

If you followed my previous posts, I have to tell you that the code  I showed back then is totally changed. The same with how it all looks like.

On Saturday I decided to do some work. There are few weeks left! Actually less than 2 weeks so it is time to accelerate.

I fixed all the pyflake errors but I now seem to get a “cucumber” error. I didn’t install cucumber testing tool, but I did do rebase and fetched the current changes from airmozilla master. Which leads me to think that, that is what cause the issue.

Now I am doing a type article + code session, to resolve the problem live.

>> ImportError: No module named celery

My solution was to install Celery: pip install celery

THAT happened to NOT be the solution because as soon as I installed that, I got…

>>ImportError djcelery: No module named djcelery

My solution to that was to install django-celery: pip install django-celery

Now my tests run but come out failed. Did I say it was working the day before Saturday?

The most interesting thing of all is, things were working well a day before then I turned off the laptop and the test were not running the next day.

Isn’t that odd?

Well, it’s time to get off and try to resolve this so I can move on with writing tests.

 

Brief Progress Overview – Week #9 #10

This week i’ll give another brief overview. It is getting more and more busy which makes long blog posts pretty challenging,

at least till the internship starts getting towards a successful end. I really hope things go as well as I want them to, in the next weeks.

 

What have you accomplished this week (list specific items accomplished)?

 

– Went back to basics. Stopped working on what I was working and instead tried to make it work in plain python.

– Things seem to be functioning well in the plain python file.

What issues or roadblocks have you encountered this week?
– I have been having some errors while trying to run my simple unit test

–  Trying to get the most relevant posts appear higher.

Have they been resolved, and if so, how?

– The unit test errors which was there last week is on its way to being resolved.  In the next week or so.

– The most relevant post issue seems to be fixed, but needs further testing. It was resolved by implementing  a negative boost in elastic search more like this query.

Do any of the issues or roadblocks still exist and what steps have been
taken to resolve them?

– Yes I need to fix some bugs that lead to wrong related results i.e. use analyzer

I have discuss it with my mentor and  so far we decided I first get the unit test working, then

I work on fixing the bulk indexing and lastly we work on the analyzers before we move on

to anything additional that might come up.
How does your progress compare to your project schedule?

A bit behind of where I want to be I think. It is time to speed up kind of.

Brief Progress Overview – Week #7 #8

Today I am noting a very brief overview of what I have been working on in the past two weeks…

What have you accomplished this week (list specific items accomplished)?

– Make sure the new feature is rendered in the template

– started writing test cases
.

What issues or roadblocks have you encountered this week?
– I have been having some errors while trying to run my simple unit test

–  There are a lot more fixes I need to work on than I thought.

Have they been resolved, and if so, how?

– The unit test errors are still there but I am working  on resolving them

– I need to find a way to properly use analyzers just for the tags

Do any of the issues or roadblocks still exist and what steps have been
taken to resolve them?

– Yes I need to fix some bugs that lead to wrong related results i.e. use analyzer

I have discuss it with my mentor and  so far we decided I first get the unit test working, then

I work on fixing the bulk indexing and lastly we work on the analyzers before we move on

to anything additional that might come up.
How does your progress compare to your project schedule?

On schedule I believe, but I have a lot more things I need to soon complete.

Coming up with a rough prototype! – Week #5 #6

These past two weeks I have been able to come up with a rough prototype.

There are a lot of things to fix and polish. It happened that my elastic search query is kind of buggy and not returning the expected results, so I need to tweak some things right there and make sure it is functioning as expected. I now officially see events in my view sorted out nicely based on their relevance scores.

events in display
Displaying the relevant events in the view.

If you check the URL you’ll see the event I am looking for related content on is called something like “Club Firefox Australis”. Based on the elastic search query I showed the previous time.

I said “The query above scans an index and returns files that have a minimum of 1 similar term frequency and a maximum of 5, in the event titles.” The query I am currently working on looks a bit different because it was refactored and I had to write it with a more appropriate syntax.  The way it is now written, it checks for similarity in the title, channels and tags of the event. Here is a snippet of how that has changed. Read more

Adventures with Elastic Search – #week 3 & 4

Last week I did not blog about my outreachy internship. That is because I was stuck with elastic search.

I have the feeling of being Alice in the Wonderland. I was lost in the maze last week, and no, there was no special rabbit to help me, no special potion to get me from novice to advanced! However there were bugs,  and the bugs were my enemies.

I got some feedback from my awesome mentor Peter and we decided I change approach.

I usually use to go with small snippets of non functional code seeking for some help to unstuck. However that might have not been the best approach. I mean, I am learning something new, sometimes I have to allow myself to be stuck and get unstuck on my own. It is part of the process, but I have my deadlines and I really did not want to go past them so I resorted to that approach. Now I am shifting from that to shipping some functional code on which I will be asking feedback on instead. That is a great leap. It made me worry initially, being stuck is never fun, but this is worth trying.

Last week there was no functional code. This current  week, I finally started seeing some light in the tunnel. I am optimistic about that.

First of all my elastic search queries work!!! That is a progress that happened yesterday. Read more

Outreachy Internship week blog #2

This week was better than last week. Last week it was a struggle both because my area had no internet and also because I was kind of stuck with ElasticSearch. I will be using pyelastic search instead and I can’t find enough examples of its usage in python/django projects online. I think several examples for an API or library are a good thing to have. It shows you how to use a tool and see it visually in action. In particular real life examples are the best. Maybe I’ll have to research some more for that. I submitted a non functional PR with what I had done so far for review. I mean, I knew it wasn’t working but it had a lot of coding involved and in some way I had to figure out how to make it work or if I was in the right path. I am glad I got a good amount of feedback on it but there is a lot more I have to learn, I hope as time goes on that I will get faster and better than I currently am. This week I also did a small bug fix just to break out from the ElasticSearch cycle I was in and have some break. Now I am back working on ES and then I’ll work on some other area of the project I am working on till I connect the dots. The time is flying pretty fast. I feel it is faster now that the internship started opposed to before where it looked like a long way. I am looking forward to having  a prototype soon.

Just a tip….

This week my mentor mentioned a wonderful tool by Mozilla that I didn’t know existed. It is called Firefox Hello. In fact I didn’t know Mozilla had so many products. I just knew of the Firefox browser and Mozilla Thunderbird.  I believe recruiters should be using Firefox Hello for video calls while recruiting instead of some other software’s because with that tool they do not need to add anyone on their IM list. So the connect/remove thing becomes less discomforting. That’s of course good for anyone of you out there that want to have a chat without necessarily adding someone to your video conferencing software for long. Some other perks of it are…

1. It works from your browser. Firefox preferably though I saw something about browser compatibility but I didn’t read that piece.

2. You don’t need to add anyone you just give them a link.

3. You do not need to download anything or sign up/in/out anywhere! I love no registration items haha because then I do not need to think of a password all the time or give out my emails and wish for no spam messages. I know we have password management tools but I have not tried any yet.

4. Super easy to use!

5. Your conversation gets encrypted

If you want more info about it you can check here => Firefox Hello

Anyways that’s it for today 🙂

Summer Internship Begins #Mozilla #Outreachy

This is more of a late announcement, well, it could be taken as an early announcement as well, based on which point of view you are taking.

* So I was selected to be one of Outreachy 30 interns! Yay. *

What is Outreachy?

Outreachy is the successor of the Outreach Program for Women (OPW). OPW was inspired by Google Summer of Code and by how few women applied for it. The GNOME Foundation first started OPW with one round in 2006, and then resumed the effort in 2010 with rounds organized twice a year. In the May 2012 round, Software Freedom Conservancy joined OPW with one internship with the Twisted project. In the January 2013 round, many other free and open source organizations joined the program. For the May 2015 round, the program was renamed to Outreachy with the goal of expanding to engage people from various underrepresented groups and was moved to Software Freedom Conservancy as its organizational home.

This program is a welcoming link that connects talented and passionate newcomers with people working in free and open source software and guides them through their first contribution. Through Outreachy, participants learn how exciting and valuable work on software freedom can be, while helping us to build a more inclusive community.

For more info on what’s Outreachy you can check here – Outreachy Info

Which company did I apply for?

In specific I applied for only 1 company and that is Mozilla. I believe Mozilla is a cool company to work for and contribute to and I like the way it supports the open web. My mentor from Mozilla is also super awesome! He really knows how to mentor from my experience so far, he is patient, welcoming, resourceful and knows how to keep people motivated. I believe other employees at Mozilla might be as cool, but I haven’t met many of them due to this being done remotely. However the few I have met on the IRC/bugzilla were all super nice, helpful and welcoming. So I am very happy working with them all and believe this will be a nice and productive summer.

So yes I am super happy for it. I might share on how it all went at some point down the road if I get asked a lot.

Day 1 started with memorial day which is a holiday in the USA I got the chance to meet other cool interns doing internships on other opensource projects. I learnt a lot from the few minutes we talked and it is nice hearing how we are all going through this experience.

How did I get involved with Opensource?

Prior to this I had absolutely no idea on how to contribute to opensource even though I really wanted to. I googled endlessly online just to find good but limited information. I couldn’t find something as succinct as I wanted that could help me learn to contribute as a “newbie”, but this whole experience up to this day has made me learn way too much than I knew back then and I am glad that I applied and didn’t let my doubts stop me from it.  If I get the chance maybe I should write a succinct “How – to” sort of thing, to make someone else’s life easier when it comes to doing your first contribution to opensource projects, and get more people involved with it. I’ll think about that, for now I’m focusing on learning and contributing to Mozilla. I have submitted several bug fixes/patches of code that have been merged and that was an awesome experience.

How has week 1 been so far?

This week was my first week, I downloaded elastic search which we plan using for this project I will be working on if it fits what we are looking for. If it doesn’t then it will be switched to something else. So far I have been trying to figure out how to get it to do what I want it to do based on its documentation. I wished  I could find more real-life examples on how it is used in python/django. I am still searching for such materials and trying to read more about it.

OK. What project are you working for?

I am working on Air Mozilla. Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community. Mozilla creates software that promotes the goals of the Open Web.

Wanna have a look on Air Mozilla ? Check here => air mozilla page

 

I am looking forward to the day I complete my project, I really hope that day comes soon so I can take a deep breath of relief that “I made it!”  🙂

In the next weeks I’ll be blogging more of my experience so if you are interested in it, keep an eye on the blog.

while True:

good_luck(“Gloria”)

Stay tuned!