DEV Community

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

Moving Past Tutorials: a course on problem solving for programmers

Ali Spittel on February 18, 2019

In my experience working with programmers at beginner and intermediate levels, the most difficult part of programming is putting the pieces of the ...
Collapse
 
codingmindfully profile image
Daragh Byrne • Edited

Can I suggest:

  • problem definition - asking the right questions
  • proof of concept solutions
  • demonstrating code as a way to verify the problem has been solved
  • figuring out if parts of your problem have already been solved (avoiding not-invented-here syndrome)
  • generating and evaluating proposed solutions - hypothesis testing
  • structuring code in the large - laying out the solution for a non trivial system
  • solving a problem from scratch vs working with an existing code base
Collapse
 
aspittel profile image
Ali Spittel

These are great ideas! thank you!

Collapse
 
codingmindfully profile image
Daragh Byrne

Looking forward to the series!

Collapse
 
maxwell_dev profile image
Max Antonucci

Looking forward to this! Just curious, will this have any focus on the Gang of Four Design Patterns? I've read on them before and the specific problems they've solved, and seen them indirectly used in much of my job's code frameworks but still want to try learning about them more later on.

Collapse
 
aspittel profile image
Ali Spittel

Oh cool! I could totally write about design patterns in here. That’s a great idea!

Collapse
 
kashperanto profile image
kashperanto

I agree for sure. Design patterns and other best-practices are often not fully appreciated by newcomers because most of the simple examples are not big or complex enough to show off why you might want to use something like object orientation, the state pattern, dependency injection, etc.

Collapse
 
cben profile image
Beni Cherniavsky-Paskin

When exposing beginners to design patterns, it's important to tell them specific patterns are language-dependent. Many have more idiomatic solutions in some languages, or solve problems some languages don't have (or refuse to acknowledge as problems worth solving).

It's easy to hear about a pattern as "here is a good way to code" and try to use it everywhere. But a pattern has 2 parts: problem & solution, and one has to understand the problem first.

I think the specific patterns in the GoF book were Java-centric (?), although their deeper legacy was to show an organized way to talk about patterns.

Thread Thread
 
perty profile image
Per Lundholm

As you asked, the GoF book was written before Java so no.

Collapse
 
johnsamuelob profile image
John Samuel Obinna

I can't wait for design pattern 😍😍

Collapse
 
wbvtler profile image
Wesley Butler

As a product manager, I've found that the biggest problem new devs have is navigating and dissecting our fairly expansive codebase. It's one thing to know how to code, it's an entirely different thing to jump into a mature, commercial-grade product.

Collapse
 
audreydev profile image
Audrey Delgado

Absolutely! I am sort of a "newb", but I have worked on a few projects that I didn't understand all of the codebase even if I knew the framework/library. I am fearful of applying to jobs and so stuck in tutorial hell precisely because of that hinderance. Brilliant suggestion, Wesley.

Collapse
 
darrenfj profile image
Darren

Sounds like a great idea for another 10,000 foot approach to programming..

Rather than another 'Hello World!'

Collapse
 
tiffany profile image
tiff

This so hard. I really need to learn this.

Collapse
 
guitarkat profile image
Kat

Needed. My God the first time I was in a saas, it was terrifying. Been in other code bases before taking apart things, etc, but that was a whole other monster of 10 years worth of code.

Collapse
 
rhymes profile image
rhymes

Great idea!

Can I suggest a couple of things for the todo list? 😂

  • an awesome name (so that we can create a tag)
  • killer songs to include somehow (with "thank u, next" as a linked list you raised the bar)

💃
🕺

Collapse
 
aspittel profile image
Ali Spittel • Edited

haha yes! amazing! maybe the next course will be about data structures through the lens of pop culture... I just claimed the #movingpasttutorials tag!

Collapse
 
gavinfernandes2012 profile image
Gavin Fernandes

What I have trouble (or at least I think I have trouble with) is the actual design and architecture of programs, like how would you go about deciding what classes and functions to make, and how to go about writing code that's clean and extensible without being too verbose.

What you pointed out does ring true to me in that code is easy to write, but good code isn't always so easy.

Collapse
 
cben profile image
Beni Cherniavsky-Paskin

I highly recommend Sandi Metz's book Practical Object Oriented Design in Ruby (aka POODR). (The choice of Ruby is not essential to the content.) It deals with exactly the themes you ask, and gives ways to think about such decisions. The central criterion guiding the book is not "how to write perfect code you can set in stone and never change", but "how to write code that will be easiest to evolve".

The book is surprisingly concise but very clear. I've been programming for ~2 decades, and still it was interesting & refreshing to read.

She has many lectures online if you want to sample her style.

Collapse
 
gavinfernandes2012 profile image
Gavin Fernandes

That sounds like exactly what I need, thanks! I'll check it out soon.

Also, do you know any analogs to this for functional programming?

Collapse
 
monejava profile image
Simone Rondeli

You may want to take a look to SOLID principles and GRASP patterns.

Collapse
 
pavlosisaris profile image
Paul Isaris

Hmm, I am afraid I am not getting something; You are saying that this course will not teach the fundamentals of programming (like most programming courses do) but will focus more on problem-solving and analyzing.
But then you give an example of the course topics including variables, lists, and objects. Isn't these concepts what most programming courses focus on?

Collapse
 
aspittel profile image
Ali Spittel

So those are the things to learn before this. So study those elsewhere, then we will be using those concepts to solve problems.

Collapse
 
pavlosisaris profile image
Paul Isaris

Oh, OK! Good to know. Then I would suggest changing "This course will primarily focus on..." to something more explanatory, since "This course" seems to be referring to the course you will curate :)

Thread Thread
 
aspittel profile image
Ali Spittel

Done!

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
 
devdammak profile image
Damola Adekoya

wow.... nice one.... Although i am not a beginner Dev.... But I am looking forward to it... Learning is not limited, I love learning new things... I am sure i will be able to learn one or two things from it...

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
 
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
 
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
 
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
 
yordiverkroost profile image
Yordi Verkroost

Awesome, I'm looking forward to this series!

You're talking about learning the fundamentals of programming before starting this course, but I would say that problem solving is the fundament of everything else programming-related. The most important thing about programming is computational thinking: learning to think like a computer and how it would solve a problem. The programming language you're using is just a tool to aid you in solving that problem.

Collapse
 
johnkazer profile image
John Kazer

A functional programmer would probably disagree with the "learn to think like a computer" requirement. The approach has a stronger focus on identifying the problem and the required functionality to solve it. The specific mechanics or even language needed are not really relevant.

Collapse
 
maheshkale profile image
Mahesh K

Interesting proejct there Ali. I had those in past and still do. I think it'd be interesting to see where this goes. I like the problem solving approach. I think open source projects often help out in some way but with lack of reward from it, often I move out of contribution in it. Looking forward to your series.

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
 
richardhendricks profile image
Richard Hendricks

Performance has always been a pet peeve of mine.

It took some years, but I've finally beaten the "It must be X!" out of my system when I run into a perf issue. I've gotten disciplined enough to test a system, even if it means building a throwaway mockup simulation(ie github.com/richardhendricks/GT-sta...), to determine where the real performance problems are located and attack those instead of what other people or my gut tells me. I don't know if stories about improving performance on ancient Minecraft mods would be interesting to anyone, but maybe I'll write up the couple times I've done it.

Collapse
 
perrykahai profile image
Perry Kahai, Ph.D.

" . . . 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."

If you don't mind, could you please elaborate on "pieces of program?" What does it mean? I am very interested in what you come-up with. I will follow your journey and, hopefully, contribute productively if I can.

Collapse
 
zappy555 profile image
Alex Porobe

Been mostly self thought and having firsthand knowledge of the frustration of how to piece it all together, I can tell you this couldn't have come at a better time. Waiting patiently.

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
 
coderstravel profile image
Alice Clark

Looking forward to your project. Stuck at the moving past tutorial stage. Help lol

Collapse
 
maciekchmura profile image
Maciek Chmura

Yessss!!! Can't wait :D

Collapse
 
lucpattyn profile image
Mukit, Ataul • Edited

So, when does it start ? Where do we go from here and how do we follow the ongoing series ?

Collapse
 
aspittel profile image
Ali Spittel

It will be on here, and I'm going to be posting each week! I would just follow my account to follow along!

Collapse
 
georgewl profile image
George WL

suggestion:
testing your hypothesis - if there's two or three nearly evenly matched solutions, when should one take the time to test and compare them, and when should one just pick and stick to it?

Collapse
 
tinsoldier6 profile image
Jason Gade

Definitely looking forward to this series!

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
 
mrwildeixa profile image
mrwilde-ixa

Sounds awesome, can't wait Ali.Thanks

Collapse
 
johnwess profile image
Wess

I am new to programming and the dev.to community. This is just the thing I was looking for. Can't wait to participate.

Collapse
 
uncleartie profile image
UncleArtie

Looking forward to it!

Collapse
 
y6bt250 profile image
Srinivasa Chaitanya, Chaganty

This is the skill every Programmer should have irrespective of the programming language they know,Iam looking forward to your course...

Collapse
 
caticatt profile image
Alex Ferreira • Edited

Looking forward for this! Thanks!

Collapse
 
egmartins profile image
EGMartins

It's an amazing idea! I think that design patterns like SOLID, DRY, TELL DON'T ASK are good points to show.
If you need anything, count on me.

Collapse
 
emlautarom1 profile image
Martín Emanuel

Really looking forward to this. Sometimes, going back to the basics it's a good way to check your knowledge.

Collapse
 
tlgalenson profile image
Tom Miller

Thank you for catching my attention. This right where I am at in my transition. Tom

Collapse
 
the_hme profile image
Brenda 🐱

Looking forward to this Ali.

Collapse
 
otanriverdi profile image
Özgür Tanrıverdi

Looking forward to this!

Collapse
 
tonythetiger323 profile image
Tony Greeley

Sounds like a great idea and as someone that is just about to finish a full-stack coding bootcamp, plan on taking the course myself when available!

Collapse
 
andhop profile image
Andy Hopwood

This sounds like a great series! Looking forward to it!

Collapse
 
edwardholmes profile image
Edward Holmes

When are you looking at getting it off the ground?

Collapse
 
aspittel profile image
Ali Spittel

Next week!

Collapse
 
fdevinar profile image
Fabrício Devinar

Count me in to contribute w/ constructive feedback regarding the project!

Collapse
 
wlaboy profile image
Wilson Laboy

Awesome! I’m excited for this. I feel like I’ve been in tutorial purgatory for a long time now.

Collapse
 
redironraven profile image
RedIronRaven

EXACTLY, and taught by a woman for a change (for me anyways)

when ish would this be live? any ideas?

thks

Collapse
 
aspittel profile image
Ali Spittel

There will be a new post weekly starting next Monday!

Collapse
 
redironraven profile image
RedIronRaven

One thing comes to mind: if there could be a list of good resources, online and offline, free and otherwise specifically for this ourse(a list of books would be great)
Thanks

Collapse
 
aubreyarcangel profile image
Aubrey Arcangel

Dev.to keeps getting better and better! Can't wait!

Collapse
 
co27diane profile image
Diane Jones

So looking forward to this!!!

Collapse
 
imronlearning profile image
Michael Learns

This is great! Can't wait 😄

Collapse
 
madisonkanna profile image
Madison Kanna

This sounds incredible. Looking forward to this!

Collapse
 
shinyuy profile image
Shinyuy Marcel

Looking forward to that.

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
 
cristiano profile image
cristiano

Yes I need this! Looking forward to it, thanks! 🙇🏻‍♂️

Collapse
 
treddson profile image
Taylor Short

There is such a need for a course like this! Thanks, Ali!

Collapse
 
josephmaina profile image
Joseph Maina

Thank you Ali for creating this. I can't wait for the first episode next Monday.

Collapse
 
ryancraigmartin profile image
Ryan Craig Martin

Looking forward to this Ali, thanks for sharing with us!

Collapse
 
rattanakchea profile image
Rattanak Chea

Really cool and can't wait for the first episode/premier. Like to learn about the architecture decision, dev ops, choosing technology stack, how data structures are used in real world projects.

Collapse
 
jobrannm profile image
JobrannM

Yassss, Ali, my new hero!

Collapse
 
darrenfj profile image
Darren

Sounds great..

I study studying since I'm often thrust into a training role, so I like looking at different approaches to covering topics.

And this is a much needed one!

Collapse
 
sandyrlemay profile image
Sandy Lemay

I am really looking forward to those!!!

Collapse
 
tombyrer profile image
Tom Byrer

I'm looking for the subscribe form.... maybe that can be your first project? ;)

Collapse
 
iankurbiswas profile image
Ankur Biswas

Looking forward to the series 😁

Collapse
 
michaelbrave profile image
Mike Brave

how do i sign up to be notified when it comes out?

Collapse
 
jasterix profile image
Jasterix

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

Collapse
 
searge profile image
Searge Boremchuk

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

Collapse
 
islam profile image
Islam Sayed

I am looking forward for this amazing course.💚

Collapse
 
alwinao profile image
Alwina Oyewoleturner

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

Collapse
 
alexandertroup profile image
Alex Troup

Do you have a Patreon or something similar? I'd be more than happy to pay for a course like this.

Collapse
 
knight_r1der profile image
˗ˏˋ Տ ˎˊ˗

When are u starting the series?

Collapse
 
ewoks profile image
Beeblebrox

Great idea 👍
How is going with the course? 🤞
Will you just publish here and it is enough to follow you or there will be some dedicated start page with quick links to everything?

Collapse
 
paulc_creates profile image
Paul Caoile • Edited

looking forward to this! Where do I sign up?
Two cent suggestion, is it possible to include testing (I don't know if Python has something like jest).

Collapse
 
islam profile image
Islam Sayed

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

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?

Collapse
 
johnpaulada profile image
John Paul Ada

EXCITED! <3

Collapse
 
kritulrathod profile image
Kritz Rathod

👍🏻.. Looking forward to seeing your course..