Problem Solving
- Why do you like solving problems?
- What is the biggest challenge you face when implementing your solution?
- 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.
- We focus on facing the programming/mathematical challenge instead of other mundane tasks.
- 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
Catalysing Business Success with AI Recruiting and Automation: Revolutionising Hiring Results and Garnering Acclaim from 100+ Industry Leaders
10 个月Gaurav, thanks for sharing!
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.
???????????? ???????????????? ???????????????? - ?????????????? ???? ???????? | ??????
5 年Nice Article
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. ??