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!

Oldest comments (96)

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
 
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
 
johnsamuelob profile image
John Samuel Obinna

I can't wait for design pattern 😍😍

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
 
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
 
fdevinar profile image
Fabrício Devinar

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

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

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

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
 
monejava profile image
Simone Rondeli

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

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
 
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
 
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
 
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
 
caticatt profile image
Alex Ferreira • Edited

Looking forward for this! Thanks!

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