Problem Solving

Problem Solving

  1.  Why do you like solving problems?
  2. What is the biggest challenge you face when implementing your solution?
  3. What can you improve upon while problem solving?

The responses to the first question are usually "I love algorithms" or "Designing systems is my passion". But I have never heard someone say : "Oh, I love checking for integer overflows!" or "Finding the maximum in an array is so awesome!".

The second question is often mistaken to be trivial. Writing code must certainly be the biggest challenge!

No. Coding an algorithm may be the most important task, but code that does not work is not too different from code that does not exist. More often than not, the meat of your time will be taken up by debugging. Especially if the algorithm was difficult to implement. We will be talking on mitigating this after discussing the last question.

The final question is a little vague. What can we enjoy doing simultaneously? Guitar lessons. Gym. Watching por- I mean, TV shows. But as software engineers, data scientists or algorithm designers, we have another responsibility. The job of communicating our ideas. And very often, all that people have to understand our ideas is our code.

As programmers, we are told: "you should be lazy". I disagree. Laziness is not a compulsion. It is a skill, and like any other skill, it must be used only when required. Being lazy while designing the algorithm and naming variables saves us 3 minutes of coding time and costs an additional 20 minutes through penalties/debugging. We need a better approach.

It is now time to look at the bigger picture.

Design patterns, programming principles, Github integration etc... are not core to problem solving, but they are core to software development. And because they help abstract out complicated processes, we save time in both coding and debugging our problems. Using tools, libraries and patterns in our code when solving problems is not only easier, it helps answer all the three original questions.

  1. We focus on facing the programming/mathematical challenge instead of other mundane tasks.
  2. Our testing and debugging time is greatly reduced when using library functions and following coding practices.

We come here for a purpose. To have fun, but also to learn lots. Parallel to the world of problem solving, lies that of software development. While honing the skills of algorithm design and data structure usage, we can learn how to write clean code. Writing functions that take only those parameters that they need and leave no side effects (A side effect is your brother asking you to clean the trash and you throwing away the dust bin too). Good variable naming may not be very romantic, but saves time which you can invest on the next problem

Thanks for reading! :-D

Husnain Khan

Catalysing Business Success with AI Recruiting and Automation: Revolutionising Hiring Results and Garnering Acclaim from 100+ Industry Leaders

10 个月

Gaurav, thanks for sharing!

回复
Sumit Lahiri

PhD (CSE) [Program Analysis, Testing, Verification, SE, ML & Web3], IIT Kanpur || YC SUS 2020 || Full Stack/Systems Developer

5 年

Nice Article and yes Design patterns are key.

Raju Kumar Singh

???????????? ???????????????? ???????????????? - ?????????????? ???? ???????? | ??????

5 年

Nice Article

Varun D

Software Engineer

5 年

A side effect is your brother asking you to clean the trash and you throwing away the dust bin too. Best definition ever. ??

要查看或添加评论,请登录

Gaurav Sen的更多文章

社区洞察

其他会员也浏览了