Skip to content
loading...

I know how to do it, but... in a way... I can't do it?!

twitter logo github logo ・1 min read  

Greetings!

I'm an 18 years-old self-taught programmer (I started learning programming alone like 4 years ago) and I focused on competitive programming. At the moment I know: C++, C#, Node, JS, Python, PHP, Pascal... and I can easily find my way through all of them. The problem comes now: every project I try to start I just can't figure out how to get it done. I finished like 4 courses, I understand how the projects are made but when it comes for me to make one, I get stuck from the start, because I don't know how to divide it and get things done part by part, and in which order. What tips do you recommend me? And, of course, if you can just give me some tasks or challenges, or even some project ideas, it would be awesome. Thanks a lot!

twitter logo DISCUSS (6)
markdown guide
 

You are not alone! I have had an experience with a few colleagues who just stare blankly at the chalkboard/screen/paper in front of them or would have trouble contributing until I started to get the ball rolling.

If you haven't learned what a Work Breakdown Structure (WBS) is, that might help you! My process is not explicitly as described by most WBS guides, such as this "WBS For Dummies" but my thought process is the same in many ways.

If I'm "done" doing a work breakdown but one of my tasks still looks like it might take a day or more to complete, I flag it as something that I need to think about and break down further.

Edit: I also use Trello during this process. It works for me but not everyone, but it's a very flexible free tool that provide "cards" and I find it very analogous to the old-fashioned "Sticky Notes on a whiteboard" or "index cards on a table"

 
 

I'd recommend picking out a project with a really short time-to-usefulness, but is also something you can keep working on forever. It should be kind of easy to put out there and then every incremental step will be building on top of that, so you're not "blocked", you're moreso working with an already-successful project.

Even if that means picking something extremely simple, I'd recommend scoping down and doing something extremely basic and then building on top of that.

What you need is time and experience and getting a win under your belt that you can continue to refine on an ongoing basis is big.

 

Thanks a lot! That win under the belt would take me to a next level, so I'm gonna keep my focus on it.

 

Don't worry too much about having trouble at the start, everyone goes through this in the beginning but a few things you can do that will help speed up your learning process.

  1. There is nothing wrong with using Google but spend a couple of minutes on figuring out the problem yourself and when you hit a brick wall, that's a sign that you need some guidance. Whether it's searching it on the internet or asking someone who would know the solution to your problem.

  2. Reduce the scope of your projects, courses usually cover every concept of a specific topic. Instead, what you can do is learn a single concept and try to understand that concept until you're really comfortable with it. Then move onto another concept and do the same thing. Rinse and repeat. Doing it this way will make it much easier to digest information and that will make it easier to start on a small project then gradually to a bigger one.

  3. First Principles Theory - You might have heard this from Elon Musk or someone else but this will make you think of how you boil things down into small pieces.

So for example, you have a project and you want to make a pacman game. Well in this game, you will need to have the board that contains pacman, the ghosts, obstables, the dots, and other things in the UI. Then you drill down each of these objects and decide what you want them to do.

For ex. pacman needs to go up, down, left and right of the board. He needs to eat the dots and be able to eat the ghosts if he eats the big dots, and die if the ghosts catches him.

Hope this helps and remember to just keep coding and eventually you'll become a master at it!

 

Sometimes where do you begin is always the hardest part. I remember my c# days working in visual studio and you would hit the various options of code first Vs domain first.

For me my mind actually works best working at the data level. I like to list out the conceptual blocks of data that will be used within my application. Some of these might be stored in memory and some might be stored in a database for long term. At this point it's conceptual so I don't need to worry too much about those things.

Once I have my conceptual model built I can start to group things and pick out the objects and classes. It is not until then that I start to code. This is conversely different to writing your UI first or your code and then discovering your data needs as you go along. Both ways are iterative but I do think this distinction is purely down to the project and also the way that the coder is wired. I find it really tough to mock up screens, but give me a data model and I can visualise everything I need. It's probably why I enjoy taking manual business processes and automating them in some way. Seeing paper or excel forms people are filling out give a clear indication of their data needs and from here it is a case of building that out in a way that means the minimum of input for the greatest gains.

As has been said, new projects are definitely a divide and conquer exercise. But remember you can split up a project both horizontally (modules, classes, folders) and vertically (front end, back end, storage). I think mixing across both the vertical and horizontal allows you to chew off pieces of code and the overall problem becomes much smaller.

Start out high level, don't be scared to learn and iterate. Fail fast and learn.

Classic DEV Post from Jul 30 '19

What's your favorite question to be asked?

Alin Pisica profile image
Full Stack developer @Equilobe