DEV Community

Cover image for Moving Past Tutorials: a course on problem solving for programmers
Ali Spittel
Ali Spittel

Posted on • Updated on

Moving Past Tutorials: a course on problem solving for programmers

In my experience working with programmers at beginner and intermediate levels, the most difficult part of programming is putting the pieces of the program together and knowing which pieces to actually use. And, most programming courses don't teach that part. They teach the pieces individually and then expect students to put the pieces together. So, I'm building a multimedia course that will focus entirely on problem solving, how to move past tutorials, and why certain choices should be made when you're programming.

This course will take the format of a DEV series, so it will be totally free and accessible to anyone. I will be releasing a new post each week so that I have time to get any feedback from the previous week's post and incorporate it into the next post, as well as balance creating content and the rest of my work.

I'm a strong believer in making content accessible to people with different learning styles, so this course will be very interactive and use different mediums to reinforce the material. Most of the concepts will be written and diagrammed. Then there will be example problems within the concept for you to solve, finally there will be videos explaining how to solve the practice problems after you attempt them yourself.

This course will be mostly language agnostic, though I will be solving my problems in Python since it's pretty understandable if you know a different programming language. This course won't teach the fundamentals of programming, though. Before starting, I would learn the fundamentals at least at a basic capacity. The fundamentals needed prior to this course are: variables, lists/arrays, hash tables/dictionaries/objects (whatever they're called in your programming language of choice), loops, conditionals, and functions. If you're looking to get started, here's a list of free resources for learning those.

The topics will include breaking down problems both for coding puzzles and for more realistic business problems, debugging, thinking abstractly, pseudocoding, what to think about when optimizing code, refactoring, approaching problems, edge cases, and what to learn outside of code that will help you code.

I'm really excited to work on this project, and would love your ideas and feedback through out. Feel free to comment below!

Latest comments (96)

Collapse
 
joshuamwolfe profile image
Joshua Wolfe

As a new software developer, i'd love this. I feel weak at the problem solving. At the current moment, i just practice puzzle at codewars to hopefully improve problem solving.

Collapse
 
jasterix profile image
Jasterix

This is such a great idea for a series! Can't wait to check out the other posts

Collapse
 
johnkazer profile image
John Kazer

I'm late to this but have found learning functional programming to be very useful in teaching how to think about problems. It has a thought process that is independent of the language you use and really helps to focus on function and data.

Collapse
 
grantralls profile image
Grant Ralls

As someone who only just recently got out of tutorials, I couldn't agree with you more. The path I take when learning something new is, tackle the docs first. If I really can't make sense of them, look up a general explanation to the new topic, then go back into the docs. When I exclusively used YouTube tutorials, I was scared of looking at docs but now I like them way more than YouTube tutorials. YouTube may be outdated, the content creator might've talked too much, or maybe the content creator was flat out wrong. I can always trust the docs!

Collapse
 
kamranayub profile image
Kamran Ayub

This is great, looking forward to reading this.

One thing I see new devs do quite often is try to figure everything out themselves. There is a balance here. On one hand, yes you should try to problem solve on your own. But to me there is a difference between trying to understand something by yourself and solving by yourself. I don't believe you should just try to understand things on your own. Why? Because that's what senior devs on the team are for. They probably built it, they should be able to explain it. Asking tons of understanding questions will challenge everyone to ensure they all know how a thing was built. If they can't, there's an opportunity for learning from other members of the team. This is a great way to build shared knowledge and I encourage people new to a team to ask away.

When it comes to problem solving, say being tasked to fix an issue, this is where you may want to go on your own before asking. If it doesn't require business knowledge or know-how of the codebase, this is good to explore on your own organically.

I haven't put a ton of thought into this but it could be termed intrinsic knowledge versus extrinsic. Intrinsic knowledge is internal to the team or business domain. You should absolutely ask tons of questions to understand the context you're working in. Extrinsic knowledge would be things outside the team, either simple or complex knowledge. Rote things that are a Google search away all the way to solving a complex problem. That spectrum is wide but I'd encourage you to feel safe getting help for the complex issues and to tackle the rote/procedural stuff yourself. Being able to know the difference is important and comes with experience but you should always feel safe leaning on others to help solve problems. Being a lone wolf sounds enticing but can lead to you going down a rabbit hole that ultimately wastes time and causes the team more angst than if you had seeked help earlier.

This is a incomplete thought but maybe it helps!

Collapse
 
searge profile image
Searge Boremchuk

Email subscription to the course? Telegram channel of the course?

Collapse
 
islam profile image
Islam Sayed

Hey @Ali. Waiting for the next article in this series.😊

Collapse
 
mrwildeixa profile image
mrwilde-ixa

Sounds awesome, can't wait Ali.Thanks

Collapse
 
alwinao profile image
Alwina Oyewoleturner

This is awesome! Looking forward to taking part in the course!

Collapse
 
swfisher profile image
Sam Fisher • Edited

Hi Ali!

I spent the weekend digging up resources for this same purpose. However, I’ll just recommend what I already know and have personally found fruitful.

The most effective (by personal anecdote) and general framework I know of is polya problem solving. In practice, I find that this technique is especially good at getting beginners (and experts) to slow down and plan the implementation rather than rush to a shaky implementation: en.m.wikipedia.org/wiki/How_to_Sol...

I highly recommend checking out the wiki page and, if interested, picking up “How to Solve It.”

A second, more in-depth set of tools I’ve found for problem decomposition is in “The Art of Insight in Science and Engineering” by Sanjoy Mahajan. The applications in this book are all towards approximation questions in physical sciences, but I argue that they are also a beautiful articulation of several key foundations for computational thinking.

Lastly, “The Algorithm Design Manual” by Skiena gives some excellent advice on how to think about finding counter examples to a heuristic in the first chapter (think small, think exhaustively, try extreme cases, etc.) I find this to be a common skill set for assessing the correctness of an algorithm you think you up.

Lastly, since problem solving is a practice before it is a theory, I highly recommend “A Mind for Numbers” by Barbara Oakley as a practical manual on what constitutes effective practice for mathematical subjects.

Collapse
 
terrilhall profile image
Terri Hall

Looking forward to the series. When will it start and where do I sign up?

Collapse
 
aspittel profile image
Ali Spittel

It will be on here! You can get notifications by following me, and it will be starting this week!

Collapse
 
caticatt profile image
Alex Ferreira

Hi Ali! Have you started with this yet? Not sure if Im visualizing the right way. Thanks

Collapse
 
codemekathy profile image
Kathy

Congratulations Ali! What a great idea that is sooo needed. I am super excited and cannot wait! Beyond looking forward to it.

Thank you for giving back!

Collapse
 
aspittel profile image
Ali Spittel

Aw! I'm so excited too! Yay!

Collapse
 
marktennenhouse profile image
mark tennenhouse

I think you've hit on a problem that has not been solved well so far. Did you know most courses/tutorials on coding don't actually help junior coders? And in college, coding has always been one of the courses with the lowest survival rate. So, I'm curious how you'll teach junior coders to apply their "coding tools" to solve problems. Do you have any pre-release content or links?

Collapse
 
guitarkat profile image
Kat

How to find information on solving bugs. Letting sometimes intuition being a guide when searching or looking for a solution. Letting go.

I have reached far and wide sometimes to explain why something happened or an enlightened workaround.

Useful skill and I'm finally really applying it in a productive fashion.

Collapse
 
ewoks profile image
Beeblebrox

Great idea 👍
How is going course preparation for now?
Is it enough just to follow you here or there will be some dedicated page with overview?