Ask HN: Have I lost my skills in programming?
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 ] threadYou 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.
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)
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.
Go play the game. Put projects before skills for a while and your skills will improve, too.
> 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 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.
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
> 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>
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)
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.
Stage 1: Unconscious Incompetence. Stage 2: Conscious Incompetence. Stage 3: Conscious Competence. Stage 4: Unconscious Competence
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.
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.
https://en.wikipedia.org/wiki/Occupational_burnout
If a job is killing you, the solution is not to numb the pain away.
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).
https://www.amazon.com/Code-Complete-Practical-Handbook-Cons...
You should read it.
The best thing you can do is to take on a manageable risk and build something. Approach it with an engineering mindset.
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.
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.
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.
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.
I'm not sure. :(
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.
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?
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.
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.
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
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.