Ask HN: I don't think I am a good programmer but I keep trying
15 comments
Well, you threw out a bunch of random thoughts, so here are some in return.
Firstly, double-check (no advice as to how!) that you're you're not just suffering from Imposters Syndrome:
http://en.wikipedia.org/wiki/Impostor_syndrome
You do write some code - are you sure it's not just a matter of insecurity and scale?
Secondly, do you really need to code? You've had great jobs doing things for which you receive recognition and praise - perhaps those things are your true calling.
But if you really want to code, find a mentor and get an honest opinion. Write something really, really small, and get advice about style and content from people who can code. Finding them is an interesting challenge, but there are a few here who might help.
Find something small that you feel will be interesting enough. Perhaps you just mostly suffer from a combination of procrastination and lack of focus. Perhaps you need to learn and work in really small chunks.
Perhaps you need to learn by doing, not by watching.
So here's a thought: Pick three languages that you've had contact with and in each, write FizzBuzz and post them here. And to prevent you from having the excuse to look it up on the net and getting clues from what you see:
Write a program that prints the numbers from 1 to 100, except that if a number is divisible by 3 print "Fizz" instead, if a number is divisible by 5 print "Buzz" instead, and if divisible by both, print "FizzBuzz" instead.
Just a thought.
Firstly, double-check (no advice as to how!) that you're you're not just suffering from Imposters Syndrome:
http://en.wikipedia.org/wiki/Impostor_syndrome
You do write some code - are you sure it's not just a matter of insecurity and scale?
Secondly, do you really need to code? You've had great jobs doing things for which you receive recognition and praise - perhaps those things are your true calling.
But if you really want to code, find a mentor and get an honest opinion. Write something really, really small, and get advice about style and content from people who can code. Finding them is an interesting challenge, but there are a few here who might help.
Find something small that you feel will be interesting enough. Perhaps you just mostly suffer from a combination of procrastination and lack of focus. Perhaps you need to learn and work in really small chunks.
Perhaps you need to learn by doing, not by watching.
So here's a thought: Pick three languages that you've had contact with and in each, write FizzBuzz and post them here. And to prevent you from having the excuse to look it up on the net and getting clues from what you see:
Write a program that prints the numbers from 1 to 100, except that if a number is divisible by 3 print "Fizz" instead, if a number is divisible by 5 print "Buzz" instead, and if divisible by both, print "FizzBuzz" instead.
Just a thought.
I got some great advice early on in my career:
"Spend just 15 minutes per day reading about your industry and within five years you will be in the top 1%"
I may not be in the top 1% but reading about programming has helped me come up with solutions that senior developers were not aware about. It has made me more interested in programming and had lead to more and higher paying opportunities.
I never programmed as a teenager. I took my first computer class in grade 11 and always felt out of place since practically everyone in the class had been programming for a number of years already. I got mediocre marks in university and even considered dropping out of Comp Sci because studying it didn't interest me. I also quit my first job after a year and took time off because I didn't know if I wanted to do programming. That's when I found I missed it.
It is relatively easy to find stories of naturally gifted athletes who amount to nothing. They end up going nowhere because they just rely on their natural "talent" and after a while, people who put in effort start to surpass them. The same is true of programming. Reading 15 minutes per day I finish 1-3 books per month. The average programmer probably doesn't read 1-3 books per year.
I should clarify that I mean read books (I have a subscription to Safari Books Online). Reading HN or Techcrunch for 15 minutes per day will probably not improve your programming ability.
Of course, perhaps this is not relevant for you and you are just in the wrong job but you do state that you want to be a good programmer. It sounds like you are. Programming is more than just writing code. It also has a lot to do with communication and understanding others which it sounds like you are skilled at.
"Spend just 15 minutes per day reading about your industry and within five years you will be in the top 1%"
I may not be in the top 1% but reading about programming has helped me come up with solutions that senior developers were not aware about. It has made me more interested in programming and had lead to more and higher paying opportunities.
I never programmed as a teenager. I took my first computer class in grade 11 and always felt out of place since practically everyone in the class had been programming for a number of years already. I got mediocre marks in university and even considered dropping out of Comp Sci because studying it didn't interest me. I also quit my first job after a year and took time off because I didn't know if I wanted to do programming. That's when I found I missed it.
It is relatively easy to find stories of naturally gifted athletes who amount to nothing. They end up going nowhere because they just rely on their natural "talent" and after a while, people who put in effort start to surpass them. The same is true of programming. Reading 15 minutes per day I finish 1-3 books per month. The average programmer probably doesn't read 1-3 books per year.
I should clarify that I mean read books (I have a subscription to Safari Books Online). Reading HN or Techcrunch for 15 minutes per day will probably not improve your programming ability.
Of course, perhaps this is not relevant for you and you are just in the wrong job but you do state that you want to be a good programmer. It sounds like you are. Programming is more than just writing code. It also has a lot to do with communication and understanding others which it sounds like you are skilled at.
What books do you recommend?
It doesn't matter. Just pick a topic that you are currently interested in and start reading. Go to amazon.com, type in the subject and find a book with the highest ratings that sounds interesting.
Sometimes I read about new languages I want to learn, sometimes about a tool I'm currently using but want to know more and sometimes just about programming in general.
Sometimes I read about new languages I want to learn, sometimes about a tool I'm currently using but want to know more and sometimes just about programming in general.
I was in the same state of mind as you are in. I am a college student majoring in CS. I thought that all my programming projects were easy and only took me a short time to complete each one. However, I also thought I was a average or terrible programmer from looking at other peoples code. Then I realized that there will always be a better programmer out there, either because they have been doing it longer or they are just naturally better. You have to see that you are still a good programmer, but there will always be someone better. Just keep programming, and try to set a schedule for the time management problem and reward yourself for sticking to it.
If you want it, go get it. Don't expect to master programming easily. Surely if you want to do something, and have been successful in the industry for 12 years, you can achieve it. Don't have the aptitude/analytical skills? Obtain them. It's all about motivation. It's your life, make of it what you will.
Be constant. Have a daily program. Ask others. AND TURN OFF THE INTERNET (or any other distraction source) while you are working.
Plenty of programming related topics bore me. I couldn't read a Java, SAP, Oracle XYZ tutorial without snoozing.
Maybe you just haven't found a topic that resonates with you. It's perfectly possible that includes all programming related stuff, but it could also be that you haven't found the right thing.
People often discover something that inspires them. Try a big variety of things. Maybe you will find embedded hardware hacking to be interesting or whatever.
I wouldn't try to force yourself into liking something that you don't like. Life is too short to do things you're not passionate about.
Maybe you should even change careers if there's already something else you're passionate about. Maybe programming could become a hobby.
Maybe you just haven't found a topic that resonates with you. It's perfectly possible that includes all programming related stuff, but it could also be that you haven't found the right thing.
People often discover something that inspires them. Try a big variety of things. Maybe you will find embedded hardware hacking to be interesting or whatever.
I wouldn't try to force yourself into liking something that you don't like. Life is too short to do things you're not passionate about.
Maybe you should even change careers if there's already something else you're passionate about. Maybe programming could become a hobby.
Most programming (maybe 90% or more, depending on what you're doing) is boring.
The exciting stuff comes when you're learning, debugging, or architecting. (Dealing with other people's horrible code, the build process, deployment, etc., can also be "exciting," but they aren't sexy.) When there's nothing challenging you and everything's just running smoothly, it's just really straightforward, simple stuff that will put you to sleep, and the downfall of a lot of programmers is to try to make it more exciting than necessary(amazing new architectures, savage optimization, burying everything in tests/types/patterns blindly).
So the key to learning, I think, is not just to "start small and work your way up," but to try to make the small projects exciting, and gradually build up to the big and boring ones, but always striving for some occasional challenges along the way.
I did bits of programming, off and on, from an early age, but did not have a major breakthrough until college, and still did not consider myself a "programmer" until fairly recently. The breakthrough came from getting a good formal treatment of CS topics(particularly data structures) in a lecture setting. I needed that to see the possibilities.
The exciting stuff comes when you're learning, debugging, or architecting. (Dealing with other people's horrible code, the build process, deployment, etc., can also be "exciting," but they aren't sexy.) When there's nothing challenging you and everything's just running smoothly, it's just really straightforward, simple stuff that will put you to sleep, and the downfall of a lot of programmers is to try to make it more exciting than necessary(amazing new architectures, savage optimization, burying everything in tests/types/patterns blindly).
So the key to learning, I think, is not just to "start small and work your way up," but to try to make the small projects exciting, and gradually build up to the big and boring ones, but always striving for some occasional challenges along the way.
I did bits of programming, off and on, from an early age, but did not have a major breakthrough until college, and still did not consider myself a "programmer" until fairly recently. The breakthrough came from getting a good formal treatment of CS topics(particularly data structures) in a lecture setting. I needed that to see the possibilities.
God bless you. I thought I am alone. I wanted to ask this question for a looong time but could not get it out.. I bet there are many more ppl like this.
I switched careers a few years ago and have often felt like this.
I also read Steven Kings book, "On Writing." Even though it's about prose, one of the most important things I took away from it is this: if I want to be a good ______ I need to show up, every day and _______. Usually, I won't know when I did good ______ until after the fact and if I don't ______, every day, I won't be able to measure myself and improve on my previous efforts.
This has helped me continue to plug away (at work, on my own time) and seek out interesting challenges that will help me to mark small, identifiable milestones of improvement.
I see this in many things, not just programming or writing.
I also read Steven Kings book, "On Writing." Even though it's about prose, one of the most important things I took away from it is this: if I want to be a good ______ I need to show up, every day and _______. Usually, I won't know when I did good ______ until after the fact and if I don't ______, every day, I won't be able to measure myself and improve on my previous efforts.
This has helped me continue to plug away (at work, on my own time) and seek out interesting challenges that will help me to mark small, identifiable milestones of improvement.
I see this in many things, not just programming or writing.
+1. Agreed, I'm bored in a security consulting career. It pays well but does not make me feel like a creator. Getting into some node.js as a place to start building things.
It would be impossible for anyone (but you) to untangle all the mixed emotions, motivations, expectations and desires expressed in this post. I get the sense that you are becoming aware of some facts about your career choices that you are afraid to face. Maybe programming isn't for you, maybe quitting your job wasn't such a good idea, who knows?
But you should have an honest talk with the guy in the mirror and figure out what you really like, what you are actually good at and then make a plan. Its true, as others advise, that some times you have to push your self to get to the next level or reach that important goal. But it is also true that such periods of effort and focus should not feel like drudgery. In my experience, if I like what I am doing that effort is work but not drudgery. When I start to feel drudgery creeping into my work life I know that is a sign to examine what am I doing and why. (Of course, every job has some drudgery elements such as paperwork or meetings but it can't be the whole deal).
But you should have an honest talk with the guy in the mirror and figure out what you really like, what you are actually good at and then make a plan. Its true, as others advise, that some times you have to push your self to get to the next level or reach that important goal. But it is also true that such periods of effort and focus should not feel like drudgery. In my experience, if I like what I am doing that effort is work but not drudgery. When I start to feel drudgery creeping into my work life I know that is a sign to examine what am I doing and why. (Of course, every job has some drudgery elements such as paperwork or meetings but it can't be the whole deal).
Have someone mentor you in ruby if you want to learn.
Start with smaller chunks. I'm 22 years old now and I have next to no programming skills, but I want to learn it. I was using computers since 12 but hadn't coded something real until now, so I tell myself all the time that I'm not meant to program, that I suck at programming etc., but I keep going and I re-discover the fun in it from time to time. The more you keep at it, the better you get.
Start with programming small apps you'd like to use, get on StackOverflow and ask all the questions that come to your mind, built bigger things, fail, start again, talk to other programmers, learn, build bigger things, fail again, build again, repeat until success.
Start with programming small apps you'd like to use, get on StackOverflow and ask all the questions that come to your mind, built bigger things, fail, start again, talk to other programmers, learn, build bigger things, fail again, build again, repeat until success.
I recently quit my job and started working on something that really requires hard core programming skills. I figured, I could manage it, if I sit at it for a month or so. However, I have been very ineffective in managing my time and honing my programming skills to be effective. Even when I was doing 9-to-5 jobs, even though I was exceeding the expectations of my peers and managers, I always knew that my productivity in terms of the amount of time I effectively worked, was always in the 25 to 40% range.
I want to be a good programmer, but I am starting to thin that it does not come naturally to me. I read on HN about how people started programming since they were 10 to 13 year olds and how it caught their imagination. Nothing like that happened to me when I was first introduced to computers. In fact, even though I really wanted to learn Ruby since 2004(bought my pickaxe book then), but never ended up learning. I didn't need it for my job then, but out of my own interest and wanting to learn programming, I picked it. However there was no proper follow up. That is just one example, there are many things I wanted to learn along the way and I never got good at anything.
May be I should just give up and go the management route, since all I manage to do with technology is to keep up with what is cool and current, but never able to get into any depth.
What I really want is mastery in programming, but I am somehow unable to put consistent effort to get there. Maybe I don't have the aptitude or the analytical skills required for being a good programmer. There are tons of programming videos online, but I feel drowsy and my attention shifts elsewhere within 20 to 30 mins. I however did manage to put one app in apple app store, but I took a ton of help from others to get it to the store. I know I am capable, but somehow am unable to put the consistent effort needed to get good at it. Not sure what kind of responses I am expecting, but just putting it out there is cathartic.