DEV Community

Why I am not getting good at Programming?!!

ikray on September 26, 2022

If you are on dev.to, It's a clear sign that you do or have love for programming. I mean it's what's talked about day in day out! Could you have s...
Collapse
 
bbkr profile image
Paweł bbkr Pabian

You got it backwards.

You are not getting better because you try to be a programmer for the sake of it.
While real good programmers got there because they were solving real world problems using programming as a tool.

Find something in your job that can be automated / optimized. Use ANY convenient language suitable for the task. Keep it simple. Proof your work by implementing it in production process. Repeat.

And do not overstudy ecosystems. You should first come to the conclusion why you need some framework, why you need Docker, why you need something from Amazon stack, etc. Do not try to master hammer theory before seeing the nail.

Collapse
 
aarone4 profile image
Aaron Reese

Pick one language/framework and stick to it. It would not be my preferred stack but React and Node/Express is probably the most flexible.
Find a problem you are interested in (I e. Not another Todo app) and learn how to build it on your stack.
What you will learn is how to THINK like a programmer: break the problem into smaller problems and fix them one at a time until you have a complete solution. Once you have done that, if you need to pick up a different stack, most of it will be Google driven. E.g. How do I extract and iterate a collection from a deeply nested object in language X. First you need to understand that this is what you need to do, then find the correct syntax for your object (JSON,XML,class,EDI file etc) and language (JS, python,ruby,c#, java, PHP)

Collapse
 
nikfp profile image
Nik F P

In addition to the other comments people are posting, I would add that you need to focus on learning to think like a programmer. The reality is that programming and building complex systems comes down to a collection of simple concepts used in the right way. So pick one language and / or framework to work with (probably Javascript / typescript due to popularity) and then focus on solving problems and building things. Your focus on learning should probably have the following language related skills:

  • Variable assignment and mutability (Critical to understanding how a language works)
  • Stack vs heap memory and value vs reference (critical to understanding how a language and your code will perform)
  • Control flow including loops and conditionals (Basic concepts every language use)
  • How to get data from external sources and transform it into the shape you need from (Whether from API's, users, or databases, you will be working with external data more than anything else)
  • How to validate and sanitize data from external sources (like user input)
  • How to work with code modules and split code up (So you don't end up with a single file of spagetti code thousands of lines long)
  • How to run the code and get something live in the world (Deploying simple web sites, web apps, etc.)

You should also work on the following concepts

  • Time complexity of operations (Big O notation, critical to understand how your code will scale)
  • Understanding data flow and how to structure data (critical to building efficient data pipelines and how to best access data)
  • Understanding design patterns related to your language of choice (critical for leveraging code to it's fullest potential)
  • Understanding how the things you are working on fit into a larger system (Critical to assure you are building the right things)

The goal is to get very proficient with one language, and also to learn how to solve problems. The problem solving thing is the important part. Once you are good at one language your skills become portable because you know what to ask, as in "How do I assign a variable" or "How do I break out of a loop if something goes wrong". But without that problem solving aspect you won't get anything really significant built.

This is where things like Leetcode and the problems they give you can be very helpful: they present you with problems you wouldn't normally come across, which forces you to stretch your problem solving ability and get better at it. So find a free tier of one of those kind of sites and work through some problems. It should get you thinking pretty hard about how to break problems apart into steps and solve them. And try really hard to avoid cheating and solve everything yourself first, then look at solutions others have provided. You will get a lot more out of it that way because you will often see many ways to solve the same problem - your way and the various ways others did it.

You don't need to chase every new tech, and don't worry about things like Docker, AWS, etc. until you need them. (And you will know when you need them, trust me)

And also, if you want to succeed, you have to really enjoy programming and solving problems. If you never got paid to write code and would still enthusiastically do it in your free time because you enjoy it, you're in the right head space.

Collapse
 
msiame1 profile image
msiame1

Please turn this into a full blown article with examples from your own experience if you have the time.. I mean that as a compliment!!
Cannot speak for others but took notes on your comment and sketched out a work plan. So even if you don't, thank you for this

Collapse
 
nikfp profile image
Nik F P

I took your advice and started an article, that quickly turned into a series. You can find the first article in the series here.

Thread Thread
 
msiame1 profile image
msiame1

Much appreciated!!!

Collapse
 
crowdozer profile image
crowdozer • Edited

My advice:

  • It sounds like you might have a bit of imposter syndrome. Read up about it, don't let it get to you. You might also be in a bit of a "tutorial hell" - also worth reading up on.
  • When they ask for "10 years of experience", they're not asking for 10 years of experience. They're asking for somebody who can do the job so they don't have to find another replacement. They put "10 years of experience" to scare off people who don't think they're confident enough in themselves, in their capabilities, to solve their problems. If you can demonstrate that you're an asset, they'll look past the lack of "professional" experience.
  • Stop hopping between the hottest framework on the block. They change too frequently to keep up with. Unless your goal is to create a blog or youtube channel focused on the latest and greatest, there's no point. Focus on what you know, get comfortable solving problems with it. Then, when you have a new problem and you want to try the next big thing, branch out. Let it happen naturally. You will discover at some point, that there is a lot more in common with each new language, new framework, new paradigm than meets the eye. Experience is the key that keeps you from becoming overwhelmed, intimidated. It will also help you cut through the hype (and illusions) about how necessary the "latest and greatest" actually is.
  • Don't worry about too much about "taking the baby steps" vs "what's professional", just worry about "does this accomplish the goal adequately?" - there isn't anything wrong with theory, but a bit of pragmatism never hurts, either.
Collapse
 
johongirr profile image
Jaxongir • Edited

Okay here's the advice to any new web developers:

  1. Choose any one UI library or framework. React, Vue, Angular. Choose whichever one you like and build a lot of small to complex projects with the chosen library or framework
  2. Choose any one backend language and build small to complex projects
  3. Once you are really good at one UI library or framework, you can easily switch to any other framework or library of your choice. And it's the same with backend language as well. Remember programming is all about problem solving using TOOLS like JS, C++, React, Angular etc..
Collapse
 
brense profile image
Rense Bakker

You have to make a decision on what you want to do. Do you like backend stuff? Pick a modern BE language and get good at it, do you like FE, pick a modern FE framework and get good at it, do you want to be all-round/full stack? Learn nodejs and docker and pick a FE framework to get good at. Once you're confident in whatever you picked, find a job that asks for those skills. Once you got the job, you can start learning random other things.

Collapse
 
errorgamer2000 profile image
ErrorGamer2000

I would definitely suggest tightening your focus. Pick a specific stack (SvelteKit is good to start if you're going into web development, since it takes care of most of the more difficult stuff) and stick with that until you've mastered it. You do not need to know all of those languages at once, since you are not an entire IT department. If you are going into web development, definitely try to keep up with JS and C++ (which can be used to make node.js libraries that have native functionality) and possibly take a look into using TypeScript rather than JavaScript, since it can help you find some smaller errors before you actually run the code, saving you precious debugging time.

Hope you found this helpful.

Collapse
 
pengeszikra profile image
Peter Vivo

I'm afraid you try every part of programming, and that is do not lead to progress. GIve a question to yourself: whic is your faviourite project, which is really exciting to make it. Then choice for the right languages for that, and take the time to deeply understand. Until you do not feel comfortable a little bit in a language you don't able to finish your task.

So what type of program do you really would like to make?

(Maybe I can give advice which is the right path to reach your - sort - goal)

Collapse
 
wadecodez profile image
Wade Zimmerman

It's not entirely bad to hop between languages. Sometimes seeing the same code written in multiple languages is the best way to understand underlying concepts such as data structures and algorithms.

At the same time, you should stick to a language long enough to complete a project. If you are avoiding challenges, you can't learn from your mistakes.

This is why seeing a project to completion is the best way to get real experience with a language. You have to push through the difficult problems.

Collapse
 
steelwolf180 profile image
Max Ong Zong Bao

Your asking for a unicorn if you don't focus on 1 part of tech. So go deep into 1 that is relevant to the work, job market and the type of company you want to work then spread out.