Ask HN: Have I lost my skills in programming?

76 points by amirsarancoder ↗ HN
I am getting really angry. What is happening to me?

I am literally getting worst at programming. When I was a beginner I could solve any problem those "coding challenge" websites, but now I simply can't. I haven't stopped coding since then, I was doing it every single day and I still got worse. Maybe I am just overcomplicating things when programming.

I feel like the thousands of free (not good quality) tutorials that I watched online are now showing their flaws. I just have piles of trash "programming knowledge" in my head that I don't know how to clean or replace.

How do I relearn programming? Relearn it in a way that I don't have to watch or read tutorials with the stuff I already know. Cuz I seriously can't watch another video of someone explaining what a variable or function is.

Do I just have to go heads first and it will all just "fit in place"? I will finally become a good and confident programmer one day?

I wanted to share this because I don't want someone wasting two years learning programming and get to the state that I am in. :(

If someone had this problem before or has advice to get back on track please reply.

75 comments

[ 5.1 ms ] story [ 116 ms ] thread
> Do I just have to go heads first and it will all just "fit in place"? I will finally become a good and confident programmer one day?

You have to build things without tutorials for this. Just take something and then build it without a tutorial. For example, you can build space invaders. How would you build that without a tutorial? Here would be my process:

1. Space invaders has graphics, do you know how to do graphics in your environment of choice? If not look up documentation for some draw API and try to draw things moving around.

2. Space invaders has images, look up documentation how to load images and implement. Make sure that you can draw the images and move them around like in 1.

3. Games need user input, look up documentation for how to listen for keystrokes, make the things that move around from earlier controllable.

4. The rest of the game is just implement some boring logic like tracking score, tracking aliens, checking collisions, killing the player, winning etc. This is fairly straightforward to implement.

This was just an example, you can do most things in similar ways. Like building a forum, building a text editor, building a web server, building an interpreter/compiler etc.

Agreed on the project instead of tutes, but a simple crud app would be much more typical than a complex game.
A good developer starts out by planning, not coding.

When you have a good plan, the next step is usually obvious.

Also, you only learn by doing, and luck favors the active.

Learn the very minimum by tutorials, make up a project and go - learn as you need...

That is my go-to plan (and I have been working as a developer for 20+ years)

Is it possible that the anger you are experiencing is due to a fear that you have no other skills you can rely upon other than programming? Maybe you feel pressured to only express your creativity and intellect through programming. Worth considering. You're probably only a few small adjustments to your goals away from being happier.

P.S.

If you're putting in the time, you're probably getting better - plus, you are likely a good judge of whether or not you have actually wasted time.

Stop sharpening your tools and just use them for a while to do something fun or interesting. Different parts of your brain are trained by different activities: study, play, taking tests, competing, working with other people, fighting for your life, etc. You've probably done the equivalent of an athlete who spends all of his time on drilling certain basics without spending much time actually playing the game.

Go play the game. Put projects before skills for a while and your skills will improve, too.

You don't need programming skills what you need is engineering skills.
(Could do with context: how old are you? Are you doing this as a job? As a student?)

> When I was a beginner I could solve any problem those "coding challenge" websites, but now I simply can't. I haven't stopped coding since then, I was doing it every single day and I still got worse. Maybe I am just overcomplicating things when programming.

How has this happened? Probably you are overcomplicating things. I would say that one good tutorial is better than a thousand bad ones. I would also say to skip video tutorials entirely.

Can you find a mentor or colleague? Or even just fellow learner? Not everyone is an autodidact, it's quite rare.

I'm 18 years old, I don't have a job. I am going to school right now (Electrical Engineering).

I live in Bosnia and Herzegovina, it's not a good place to live if you want to pursue an IT career. I don't have any friends that do programming that I can talk to and create programs together. I would love to have a mentor or a colleague to work with me. I've tried learning with other developers, but it didn't work out that well.

I really want to find a open source project that is meaningful to me and is on my skill level. I'm bored of doing stupid todo apps and calculators for learning.

If you know any good open source projects that I can contribute to easily that would be awesome.

> Maybe I am just overcomplicating things when programming

This is probably the root of the problem. But there is good news because a) many people suffer from this and b) they tend to be good or at least experienced programmers

For example; we use FizzBuzz and some algorithm challenges to screen new hire candidates - the number of times an otherwise great programmer has submitted a 100 line behemoth (for something that should be less than 10) is unamusing.

As others have said; sounds like youve cracked programmig, you now need to hone your craft by learning engineering methods and problem solving.

This is best achieved by doing; try building something useful based on an ambiguous goal (if you let us know what programming languages/interests you have then it might help get more specific advice). Work your way up to submitting patches to open source projects - where youll get valuable feedback that will help hone your method

<rant>

> the number of times an otherwise great programmer has submitted a 100 line behemoth (for something that should be less than 10) is unamusing.

What are your requirements? Short, terse, untested code? Objected oriented code? Bullet proof, modular code capable of handling a never ending stream of inputs?

Interviewers like asking questions that seem simple, but then they like to pile on unstated requirements, or judge code that was written sub-optimally on purpose as if it were production ready. Interviewers also don't usually have empathy for how badly interviewees have been treated by other interviewers, and how easy it is to get nervous as an interviewee when you find yourself talking to yet another interviewer with unstated expectations.

tl;dr...

- garbage in, garbage out

- we're all damaged goods, so be nice by just saying what you really want

</rant>

Its a test given pre-interview to do in their time. 90 minutes, 3 questions.

It is a gateway; candidates we want to interview a) can easily solve the problem and b) realise that its a 90 minute gateway test and therefore probably doesnt need to be gold plated.

In baseline and control testing it has proven entirely effective in screening out the two extremes;those that cannot code and those that over engineer.

(btw I agree with your overall sentiment; I put a lot of effort into making sure our interviews are friendlier, more effective and clear)

- HTML - CSS - JavaScript - NodeJS - MongoDB - PHP - C# - Java

I've sorted the list as my knowledge is in them. HTML, CSS, JavaScript is where I'm best and PHP, C#, Java is where I'm worst.

Interests that I have are, Math, Programming, Electronics, Physics, Chemistry.

Thats a pretty big spread :) Id say focus on the web side of things and build a few apps - perhaps something you would find useful or rebuild an app you use.
Simly do what you like. Find some good idea and enjoy doing it as a side project without leaving your current job. Who knows maybe some day it will become a good startup.
With about two years of learning you are probably just reaching the stage where you start to understand what you don't know (stage 2 below). Keep at it and you will grow.

Stage 1: Unconscious Incompetence. Stage 2: Conscious Incompetence. Stage 3: Conscious Competence. Stage 4: Unconscious Competence

I had faced the same problem 4 years back, while working in a job for 4 years where my programming skill was used in very limited manner. I was pretty good during my college time, but due to lack of practice for 4 years, i was feeling almost the same.

The thing i did to overcome was to force my mind to do it or there is nothing else. This thought came to my mind when I started interviewing in other companies. During interviews you are forced to go into survival mode where solving a problem matters a lot. Interview experience pushed me to take each coding assignment like that only. I will put a pomodoro for 25 mins, and will try to solve it. If I can't, i will look at solution and try to implement in next pomodoro. You need to tell your mind, coding/problem solving is something you love so much that you won't do anything else until this gets done. You will definitely get a kick, atleast worked for me.

Sometimes confusion is just the integration phase of learning. Up to a point, it is completely natural and healthy. You have to feel mixed up when learning to combine so much knowledge.

But always consider the possibility that you are suffering a mild amount of burnout. After 15 years of coding I had a two year stretch when it became difficult for me to organize projects, and I found that taking 5 mg a day of Paxil really helped. Mild problems of concerntration sometimes arise, and you have to ask yourself the basics, are you getting enough sleep, are you getting enough exercise? If yes, consider the possibility of burnout, and pursue treatment.

It's irresponsible to suggest that burnout is treated with antidepressants and sleep. Burnout is an occupational health problem whose only solution is in the form of occupational changes.

https://en.wikipedia.org/wiki/Occupational_burnout

If a job is killing you, the solution is not to numb the pain away.

Probably you are just procrastinating. Procrastination has to do with anxiety emotion. Whatever creates anxiety, creates procrastination.

I have programmed for more than 20 years, but programming is never what I want. In fact it is an obstacle for getting what I want, like helping people.

You probably need real problems-challenges that you can solve.

I have created compilers because I needed it for something else. If I could get the same result with 0 programming I will do. In fact I proactively work to destroy programming in its current form in the future.

Programming is a dead end without something else as a goal. In fact, it creates a serious imbalance in your life: You spend most of your time thinking rationally(conscious mind), slowly,alone, static, in front of a computer(sit down?).

That is deeply abnormal for humans beings. We are designed for moving miles or kms each day, mostly use our subconscious mind(not thinking rationally)in a social way while hunting, fishing, collecting, making tools, pottery or clothing.

When you break the balance you don't need more of what created the imbalance in the first place. Spending your life only programming for me is the definition of a miserable life.

As I have to program, I will do whatever I can to restore the equilibrium, like going out each day, practicing a sport that requires coordination, meeting colleagues,friends and family regularly, meditating and never sitting down while in front of a computer(well I use a stool).

Perhaps a foundational course in data structures and algorithms would re-ignite your thirst for good engineering. Read a book on the subject or do one of the free courses on Coursera.
You could refresh your memories from the time before you started to complicate stuff by reading (or rereading) the marvelous book "code complete"

https://www.amazon.com/Code-Complete-Practical-Handbook-Cons...

Thanks, will read it.
I have just ordered a copy for myself. I haven't read this book in more than 10 years, but it is the best computer book I have ever read. I have always said, that if I had my own company, then I would place a copy of this book on the table of all new employees. Reading this book should be their first assignment. It is a truly amazing book that anyone, despite experience level, platform of choice, project type and size, will benefit from reading.

You should read it.

Stop trying so hard? It sounds like you're spinning your wheels and just getting further stuck in a rut. Find another activity, area of study, or topic of interest you can go deep in. The true masters of a given field are known for both depth and breadth. Find something else that sparks your interest that's NOT programming.
It's normal. I remember feeling the same way. Remember it takes way more than 2 years to become good at anything. This is a difficult uncharted profession and you are experiencing a transition.

The best thing you can do is to take on a manageable risk and build something. Approach it with an engineering mindset.

If you have any reasonable skills as a programmer (which I have to assume if you have been programming professionally for some time) then you should stop watching videos, etc. As you have observed many are poor quality and aimed at beginners. Many so called challenges are created by jerks who are trying to prove that they are "clever".

Why don't you pick up a well recognised book and learn from that instead. I'm thinking along the lines of SICP (Structure and Interpretation of Computer Programs)? Yes, learning a new programming language probably would also help with your progression.

I think SICP is way too hard for the amount of material it wishes to explicitly convey to you. If we were speaking thoroughly, what do people expect to get out of SICP?
SICP is one of the books that I've seen everyone recommend - and I never understood what is so special about it, until I finally read it!

It feels very similar to a mathematical book. Rather than learning about the syntax, or the programming rules It teaches a way of thinking. I agree it is hard - but I don't know if it could be simpler.

In the end programming is not about computers or programs - but people solving problems. It teaches people to solve problems using computers.

Fantastic explanation of the impact of working through SICP.

Scheme notation is effectively AST, thus you can mentally map any PL to it and at the same time avoid getting caught up in the syntax issues of any given language.

Agreed working through SICP is a non-trivial experience. However, what you learn will provide solid foundations for your professional future regardless what languages you end up using.

> When I was a beginner I could solve any problem those "coding challenge" websites, but now I simply can't.

Just something to consider - you might be trying to solve harder problems then what you solved easily in the past. Easy problems can be very similar in structure to hard ones - but are much less complex to solve.

I'm sure that if you'll start with easy problems and move on from there this skill will get back to you. Solving coding challenges is a different skill than your day to day programming.

Try to find other root causes. Anxiety, depression, vitamin/minerals/good fat deficiency. https://medium.com/@dr_eprice/laziness-does-not-exist-3af27e...
I think that anxiety or depression can be a factor. Because before programming was just a hobby for me. Now I'm doing a coding bootcamp where I pay about $100/month which is a lot for my family. I have a lot of pressure on me to be good to get a job, since I am going all in for a tech career. I am going to school in the day and doing the coding bootcamp at night and I'm learning from other sources too because I feel like I have to work 120% to be better than other to have a better chance finding a job.

I'm not sure. :(

To the extent that you can steer what you are working on at the coding bootcamp I recommend picking something that you are genuinely interested in as that will lead to greater satisfaction in both the minor and major achievements in programming. It will also give you something to talk about during interviews :)
Try to create products or services instead of trying to solving coding challenges. They are fine until one point. Puzzles can keep getting harder which might be increasing your frustration.

On other hand, when you solve real life problems (they might not need complex algorithms but you've to figure out a lot) the result is huge reward which is not in case of coding challenge. There's another puzzle harder than the one you solved.

Also the impact of product or service or the optimization that you did might save lot of time and money of others while paying your bills at the same time.

Forget puzzles! Solve a real problem with code. Read only as little as necessary and then build something you care about. Before you know it you have become a programmer.
Hey,

I've also noticed that my skill seems to be deteriorating a bit. I worry that I may have f'd my attention span. So I decided to run an experiment and see how high I can count in my head. Not out loud. Just count until you lose the thread as some other thought barges in.

I find that I only seem able to get to the low thousands.

I also find that I'm tired all the time. This condition seems to have developed slowly over the past year or so. I don't know when exactly and I have yet to find a doctor who can tell me why.

So I guess my question to you is, how high can you count in your head?

I am not a doctor but had some tiredness issues and found that low vitamin d or low thyroid could cause such. Other symptoms include dry skin, depression, inability to focus, muscle pain etc.
I got to 34 then got bored lol. My attention span is wrecked.
Try taking a sleep study.
Low thousands? Is that really worth your time?

Buy post-it notes, go momento and discover that all is well - distraction on details is part of creativity. Self awareness of it is key to directed productivity.

Wow, my focus is out of control. I started skipping numbers when I was on 50.
Pick a problem you have and solve it. Even if you have to start small, like a grocery checklist. Just do a few of those to explore a problem space and see it through to the end. Don't grind like "I must learn". Let curiosity be your guide and get curious about making something you need.

If you need help, refer to documentation in the IDE, then Stack Overflow. Read. Don't watch videos, you should be able to read faster than anyone can talk. Take notes. With pen and paper, not a text editor window. The muscle movement of writing is a different way to teach yourself. There are studies that say retention is much better when taking notes on paper vs. computer.

After that, move your problem space up, like maybe a video game and repeat. I learned I dunno probably 5 different languages by writing Space Invaders in the new language.

Revisit one of your programs and either refactor or rewrite it. Actually, refactor one, rewrite another - from scratch. No peeking at the original. And by rewrite, I mean design a new approach to solving the same problem set.

I find i do much worse work under pressure (real and imagined - as pressure is always imagined)

If there is a deadline I do all I can to remove it.

I do better work without the anxiety and i write cleaner code, add more tests, do more B work.

For me i think it is to do with ownership / control

I prefer deadline driven as I have an objective and date to meet. It makes it easier to push really hard to get it all done by the date as I always work smarter then. Unbounded causes feature creep and process to drift, in my experience.
Programming, in my view, is a craft more than anything else. Like blacksmithing or painting. You may learn some specific tricks by watching others but you'll only get good yourself by doing it.

Listen, if you're looking at your code and saying "this is crap", that's good- it means you can now tell crap from quality. So refactor it again and make it better. Fire up the forge and hit the hammer a few more times until it feels right.