Hello there, if you are wondering what Algorithm Fridays is all about, then look no further because you are in the right place.
A couple of questions before we get started:
- What is the first thing that comes to your mind when you hear of the word algorithms?
- What is the predominant emotion? Fear? Anxiety? Excitement?
If you ask a good number of software folks today some of the things they dread most in their careers, even the really good ones too, there's a high chance technical interviewing would be mentioned - possibly next to resolving merge conflicts and writing documentation.
And there are very good reasons for that.
Many would posit that the prevalent technical interviewing process employed by many companies is flawed. Asking questions about arcane and mysterious data structures that may never be used on the job is hardly a good indication of an engineer's quality and I agree.
However, while I believe that the current technical interviewing process is flawed, I also believe that there is a lot of value in having a good grasp of some computer science fundamentals especially if you are looking to solve problems from first-principles .
In my experience, though I have rarely had to use algorithms at work, there have been a few times where my knowledge of data structures and algorithms were useful on the job and those are some of the most interesting problems I have solved.
Before we talk about what Algorithm Fridays is, it is important to define what algorithms are especially within the context of Algorithm Fridays.
What is an Algorithm?
An algorithm is a set of step-by-step instructions to solve a specific task or problem.
For example, if you are running out of groceries and you need to restock, your step-by-step approach to solving that 'problem' may look something like:
- Determine what your budget is.
- Draw up a list of groceries you can get with the amount from Step 1.
- Choose the grocery store and identify how you'd get there (walking, driving, ordering online, etc).
- Go (virtually or in person) to the grocery store.
- Purchase the groceries.
That's your algorithm for solving the problem of grocery re-stocking.
An algorithm within the context of Algorithm Fridays will be no different in concept. It will be a step-by-step set of instructions, written in any programming language, to a specific task or problem.
So what then is Algorithm Fridays?
Algorithm Fridays is a community-focused initiative to help improve your technical problem-solving skills and reward that exercise.
How will this work?
For 39 Fridays, starting from April 9th up until the last Friday in 2021, I will be posting some byte-sized, not-so-complex algorithm questions on my Twitter handle @meekg33k using the #AlgorithmFridays hashtag.
You, along with other participants, will solve the algorithm problems in any of their preferred programming language. The goal here is not to test your expertise in a programming language but to improve your problem-solving skills.
Solutions to the algorithm problems will be available the following week in a blog post here on Hashnode.
The questions will be posted at 10.00 am PST every Friday.
What are the objectives?
The goal of Algorithm Fridays is to create value in the following ways:
- Create more awareness about algorithms and technical interviewing.
- Deepen knowledge of computer science fundamentals.
- Give participants exposure to practical algorithm problems.
- Help participants overcome the phobia of algorithms and technical interviews.
- Promote learning from one another in the community.
- Reward growth including the smallest wins.
What's in it for you?
If at the end of this program, you are more comfortable with solving algorithm problems, even if just a little, that's success for us.
In addition to the learning gains, there is a $20 appreciation award every week for one person.
How will we select the recipient of the award?
Since we mentioned that this is not a competition, the $20 award is not a prize.
That said, we will select awardees using the following metrics:
- Clean code.
- Code correctness.
- Most optimized solution.
This includes everything from choosing proper variable and function names, writing modular and easy-to-test code, code that follows SOLID principles etc.
Your solution will be run against a number of test cases. It should be correct for all kinds of inputs and not fail on boundary conditions or edge cases.
Most optimized solution
The solution scales well, in terms of memory and time usage, regardless of input size. We will be using Big-O notation to measure performance.
How will participants submit their solution?
For ease of management and transparency, we ask that solutions be submitted by providing a link to a public GitHub gist via a comment on the question tweet.
What happens when there are many correct solutions?
In the event that there are many different correct solutions to a problem, we will pick awardees randomly.
While we will try to be as fair as possible, we understand that there are limitations with every random selection process and request that participants should accept that.
Who can participate?
Participation is by interest and so Algorithm Fridays is open to anybody and everybody.
I hope this is fun and exciting for you, because it is for us and I'm also confident you will benefit a lot from this over the next 39 Fridays.
Let's solve technical problems together.
See you on Friday!