I am currently in high school and I discovered programming 3 years ago but I am still not "good" and it is difficult for me some times to understand, especially about data structures, bytes etc...

Moreover, when I program I waste most of my time not creating but searching my syntax error, commas and all those things. I am very slow. I would love to be an expert is programming but I feel like I am too "dumb" to go threw those difficulties. At the same time, I feel passionated about Technology, Computers and Coding...

So, is it normal to be slow as I am even 3 years after discovering development or Am I just not made for this? Does anybody experienced the same feelings? Would it become better with college?

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.
If this question can be reworded to fit the rules in the help center, please edit the question.

11

Honestly, I've been doing this 15 years and I don't think I'm particularly good. :) Just focus on doing it, there is a lot of interesting stuff to learn, you'll eventually get it to click.
–
birryreeJul 14 '13 at 14:25

4

Well, how many hours a day/a week/a month do you actually program?
–
Doc BrownJul 14 '13 at 15:59

1

"I waste most of my time not creating but searching my syntax error, commas and all those things." Don't search for them preemptively. Deal with them when they happen, and you'll have the line numbers in the error output.
–
user16764Jul 14 '13 at 17:07

9 Answers
9

Moreover, when I program I waste most of my time not creating but searching my syntax error, commas and all those things. I am very slow. I would love to be an expert is programming but I feel like I am too "dumb" to go threw those difficulties. At the same time, I feel passionated about Technology, Computers and Coding...

You are not slow, but you seem to be focusing on syntax which I feel is wrong.

For starters, use an IDE -- this should reduce the amount of time you spent searching and fixing for syntax errors.

Note that mastery of syntax does not translate to becoming a good programmer. Using an IDE can help you focus on learning what's important: problem solving and design.

You are anyway going to use an IDE (and other tools) once you do programming for a profession, there's no better time to start learning these tools than now.

In my opinion, the best way to learn about data structures is to look at diagrams -- comparing different data structures visually is the easiest way to learn how they work (tree vs map vs list). Once you know how they work, it should be easier for you to determine when to use them.

Professional Ruby programmer here, I don't use an IDE - only vim with syntax highlighting. I can say that the more you program in a specific language the less you'll make syntax errors in that language. High-level concepts are more portable.
–
Daniel J. PritchettJul 19 '13 at 21:33

Mastery takes ages to achieve. You should probably be better by now than still not writing correct syntax etc, but that may depend on the languages you're using. Three years is not really long - think in terms of studying: That's the equivalent of a Bachelors degree, after which you barely know what the current topics and basic vocabulary of your profession are.

Keep on reading and creating, both are equally important for your skill. Take on new challenges and grow with the problems you face. Do what you love and you will be great at it, there are no shortcuts.

One debated rule of thumb is that it takes 10,000 hours to master any particular subject. Let's say your doing programming 2 hours per day, 365 days per year, and you've been doing it for 3 years. That's only about 2000 hours, 20% of the way to mastery. In actuality you are probably spending considerably less time than that. And, you're actually trying to learn more than one subject. You're learning the concepts of programming, you're learning a specific programming language, and you're learning about data structures, for example.

In other words, you're doing fine. Computer programming is a hard thing to learn, and it takes a long time to become proficient. If the subject matter interests you greatly, you will find a way to learn it.

In any new area I've gotten into, my personal experience has worked out like this: it takes me three years to become comfortable. Five years and my opinion matters to everyone else. Nine to ten years and I'm a master.
–
RobJul 15 '13 at 10:42

After many years, I realized that, at least for me, trying to force it, working like crazy to understand every little detail is of no use. Just being in contact with programming in general helped a lot more than reading a book while making sure to understand it all. Even though I don't understand something, I still read it without trying to make sense out of it. Then, a few months afterward, I read it again and it all makes sense.

The brain is a muscle, and just like when working out for the first time, you can barely lift. But then, after a few months of training, it works out great. Every new concept is a new muscle that needs training before being usable. Physical links have to be built to understand the new paradigms. That's why we're taught incrementally in school, our brains aren't able to learn certain things until some muscles are built.

Also, there's no such thing as dumb mistakes. It's hard to accept, but mistakes shouldn't be considered as failure in any ways. It's better to make mistakes and learn from them then not doing any and barely learning.

It's a totally normal feeling that will probably never leave as there are so many things to learn that you always feel behind. The important thing to know is that you do not know some things.

+1 on dumb mistakes, being afraid to make mistakes is a huge impediment to learning. Failure only occurs when you stop trying, not when you get it wrong the first 10 times.
–
Peter SmithJul 14 '13 at 18:28

Don't worry it's just the impostor syndrome calling you out. It's a good thing because it keeps you on your toes and lets you try out new stuff to do. It may also a bad thing because it will make you feel like crap at times (for which I suggest you get help if you ever feel depressed).

After three years of programming, as you feel right now, I also felt like I'm the dumbest programmer alive because everything I did I perceived to go so slow. I was constantly making mistakes and wondered if this profession is something I should pursue at all.

After five years of programming I successfully worked on projects and still felt like I was a really dumb programmer. I felt dumb even though I actively used three or more programming languages for any project at a time. But things starts to pick up from there and mistakes started to become few as I learnt to be more smart and effective.

Heck, it's been more than ten years since I started programming and though I feel dumb at times because there is some new technology coming out and I feel that I've got no time to learn it. I have come to grips that I'll always be learning new stuff and have to prioritize with what I want to be good at. I still forget to add a semi-colon now and then but I'm quick at fixing it and go on.

The point I want to get to is that you will on occasions still make mistakes and feel dumb no matter what circumstance. This will happen all the time and that's a-okay.

What kept me going is my side-projects that interest me and help me learn. Getting stuff done is also a huge motivator, admittedly achieving this is something I've been struggling with for years when I first started out. Once I shipped my first product it was a huge thing.

Many people will suggest that you start using tools to help you get better, which is fine and all. However no tool will completely help you out with you calling yourself dumb or doing dumb mistakes, they will only mitigate this (except for code linting, it is designed to hurt your feelings). Some people will suggest that it will take time to get good at it, something like 10 000 hours to become excellent at something. But I've found that advice to be super depressing for beginners and be a big discouragement anyway... so ignore it for now... you'll get there eventually.

"To err is human". As long as you're aware that you're just human you should stop fretting over the minor details and continue on fixing and building things. If you ever do a mistake think of it as a challenge. A challenge to keep yourself from making those mistakes. As long as you keep developing you'll get better at it because practice makes perfect.

Just try to have a good work-life balance at the same time so you don't burn out. ;-)

As another answer already stated, use an IDE. It'll help you track your problems down before they stop your progress.

To help you fill out your knowledge, try using some linting tools (JSLint, CSSLint, StyleCop and Visual Studio's Code Analysis for C#, Lint4j for Java). You don't have to follow all of their rules, but it will be persistent in making you consider things you haven't been exposed to yet.

I'm not nearly as old or experienced as some of those answering this question seem to be, but I went to University to study programming from zero previous experience - the only "programming" I had ever done was some static HTML pages!

If you are struggling to figure out things like data structures and whatnot, remember that programming is a pretty abstract field, you don't have anything tangible to hold. In engineering you know if a piece of steel is long, strong, thick enough - in programming you only have what your intuition tells you and what your compiler confirms.

Think of everything in programming as little objects, if that helps, if you're programming an interface, imagine a dude at a desk telling the labourer to get Mr Smith's delivery.

While Programming is very technical, I consider it to be something of an art, as it is so heavily abstracted and difficult to explain to someone who isn't a programmer.

Like others have said, get an IDE to help with the basic syntax. Focus on paradigms and design patterns, not spelling. You may also benefit from looking at open source projects - I have always found programming with a hard and fast goal far easier.

Here are the steps I've taken to learn programming languages or technology

Start with a tutorial - tutorials helps you to learn incrementally a programming language, from simple to complex. Moreover, you can think of each chapter in the tutorial as you sub goal in reaching you goal to learn the programming language.

Use a good editor - practicing with plain text editor will kill your spirit, use good editor to assist you in coding with the programming language.

For programming languages which you can type in command console, you can test a portion of the code through a command console before incorporating in to the main code.

Try practice projects, start with simple ones, and develop it as it grows

And when the project in number 4 turns out unorganized and messy, learn where you did good or poorly, throw it and build anew.

Finally, I leave you with a good quote

The competent programmer is fully aware of the limited size of his own
skull. He therefore approaches his task with full humility, and avoids
clever tricks like the plague. -- Edsger Dijkstra

Mick West said it best on his Cowboy Programming blog. At any rate, when you feel like you've still got plenty of stuff to learn, that's a good sign. It's when you're getting that worm fuzzy creeping feeling that you know all there is to be known that you should worry of being "slow"/"dumb".