Advice for a 17 years old programmer
I'am a 17 years old programmer.
I code in python(love it),java,c#,php and others.
I read a lot about programming (code complete,the c programming language,stuff like that).
I contribute to open source but I'am not very active.
my question : what advice can you give to me to become great programmer say in 5 years?
PS : I'am not from USA !
37 comments
[ 3.1 ms ] story [ 92.4 ms ] threadThe best advice I can give to you is: Learn one language, and get pretty good on it. You do this by learning the language by creating simple projects like RSS readers, text editors, etc.
yes, learning languages is a fun pass time for me, but one thing I never do is copy and paste code from the internet without knowing what it does. If I don't understand how some code works, I don't use it.
But to address your actual advice: yes, being good at a single language/platform is important, because knowing the bare minimum of 50 tools isn't useful if you want to do something interesting. You have to have some toolset that you can turn to for big things.
But learning new languages and platforms (and I actually mean learning, as in working on at least one small project involving it) is really beneficial to your programming skills. And I don't mean learning python when you know ruby, or C# when you know java, that doesn't expand your mind at all. What I mean is learning Haskell, or Lisp, or FORTH, or an Assembly language (or C if you've been avoiding it for whatever reason) for someone that uses java mainly.
Such things will teach you new ways to approach problems no matter what environment you're in. For example, becoming comptant in Haskell or Lisp (or any primarily functional language) will teach you to separate large problems into many smaller, more approachable problems. Sure you can learn the same skill in other ways, but learning a new language is a completely viable way.
And also, nothing says that you can't have multiple platforms you're comfortable with. For example, if you enjoy web development, it's a great plus to be capable of full-stack development, knowing a reliable backend technology as well as the details of front end development is useful. I consider myself competent with the browser platform and with nodejs, and I'm working on familiarizing myself with the JVM.
This will teach you more, and faster, and make you great rather than competent. If you want more than landing a decent PHP job then this will help.
Try to limit your time working with computers. Really. I used to waste a ton of time installing new Linux distributions, customizing my desktop, learning how to use vim, learning new programming languages, etc. Not that this was bad in any way, or not enjoyable. But did I really need to spend as much time as I did?
I had a conversation with a few of my friends that got me really reconsidering a lot of this. One of them asked me, "What do you like spending your time doing?" To be honest, my favorite thing to do is be with other people. Or at least, the most rewarding and vivid memories I have were with others. Programming can very frequently turn into a solo journey that consumes hours of my time. It's fun, but also isolating.
If you limit your time with your computer (say, a max of 1.5 hours per day unless you're doing homework -- this will vary from person to person, but you have to be honest with yourself), you'll do more of what you actually enjoy doing while you're on a computer, and you'll also find opportunities to do more of what you enjoy off of it as well.
I surf Facebook less, I spend less time needlessly checking my email, and I only use HN or Reddit as a break from doing projects. That's how I make things more interesting for myself, and I also wind up going out a lot more than I used to.
I just want to balance out your generally awesome response by noting that they may not be wired in a way that your comment is good advice (despite it probably being so for 90%+ of people) and that that's OK if they want it to be.
Now in my 30s, I don't regret a single second spent geeking out or learning things on my own earlier in life, but I do regret the mental anguish of thinking I "should" do X or "must" do Y because "that's what normal/healthy/sane/whatever people do." It just turns out I'm introverted and love a lot of time alone working. Now I'm thriving having embraced that. (I'm happily married, have a kid and large family too, so I'm not a Hikikomori or anything ;-))
Limiting yourself can be refreshing and ensure that we will still like the things we do in 10 years.
And beeing also a fellow introvert, I have to say, not geeking around on the PC doesn't have to mean going out with friends (though it should occasionally... ;)). There are a lot of great books and websites out there with fantastic content. For example I never knew so much about the whole skeptics movement (and the science behind it) without limiting myself from geeking out.
Limiting yourself can be a great thing!
Luckily I don't have this problem anymore. Being married and having a daughter means there's at least several hours a day I'm chasing people around, changing nappies, cleaning the house or going out and about. Makes going back to work quite the pleasure in a way ;-)
Learn to deal with the fact you may not be as skilled as others in various areas, and realise that your skills are better than you think they are in other areas.
It's one of the big things I realised going to uni where everyone else is around the same level, and often more proficient than you. It can get you down, but you've made it that far so you have the skills you need, just ask for help and be curious and learn as much as you can from those who offer it.
I'll try to give you some tips that will help you in the long run:
First things first, using the right tool will help you, I suggest this one: emacs - http://www.gnu.org/software/emacs/
You will probably want to learn elisp(emacs lisp) to configure your emacs further.
Keep yourself up to date and don't lose your time learning VB, flash, java or outdated things like that. These are dying. Focus on languages that you think will be wonders in 2 years. I personally suggest these at the moment: D (dlang.org) Haskell
Think more about the programs you use, what makes them awesome and what could improve them, only thinking about it regularly should help you make better ones yourself.
At your age I was programming way too much and had an over optimizing approach with everything. While seeing how to optimize most things is great, don't do it. Productivity is far more important.
I'd suggest going to the beach with friends as often as you can.
Don't learn languages past your first from books, learn to search in documentation and try to answer questions on stackoverflow for that language.
Follow your passion, don't become a tool unless that's really what you want.
Never underestimate good communication.
Have fun!
Haskell is a good idea, and you might want to learn a new language every year (http://pragprog.com/book/tpp/the-pragmatic-programmer) but also learn about algorithms, complexity, and most of all continue having fun programming!
Go deep (specialize) just enough to be unquestionably proficient, but not enough to be one of the world's foremost experts. Go broad (generalize) just enough to be learned (well-informed) in discordant technologies, but not enough to be omniscient (all-knowing). I call this type of a person a "genspec", a generalist-specialist.
For example:
1. It's more useful to learn functional programming, object-oriented programming, procedural programming, etc., than to learn e.g., 3 different object-oriented programming languages.
2. It's more useful to learn embedded development, mobile development, web development, etc., than to learn e.g., three different mobile development platforms.
3. It's more useful to learn e.g., 3 different OSs than to learn e.g., 3 different distributions of a single OS.
Optimize yourself for change, adaptability, and continual learning of many materially dissimilar topics. That's what's best for your career.
And just to mention: NEVER create a website for your school :D
He offered his school to help create the school website because it would be fun and good practice. However, it turned out that creating a website for someone else isn't just doing the fun bits you're interested in or tinkering with the tech you'd like to know more about. Suddenly there is a client and this client has requirements and expectations. If you not used to this you might be in for a surprise.
For all the 17 year old's reading this thread; There is a big difference between programming for yourself and programming for someone else.
I learnt this the hard way when I was 16! Clients can be plain idiotic sometimes!
Don't get me wrong. I don't mean that in a nasty way. What I'm trying to explain is that there is a difference between being "technically" capable of something (building a website) and doing this as an assignment where someone pays you for it. This is known as "experience".
And yeah, sometimes clients are idiots..
List of directions I can think of: - building simple websites or apps - programming hardware (robots, operating systems, ...) - software architecture - computer science (algorithms, research...) - games or simulation
You have also the social side of programming. Working in a team, selling software to customers and helping them.
I do recommend learning about networking and operating systems. For increasing knowledge over everything that happens in the background - http://amzn.com/0136006639
So learn a lot, even if it doesn't have anything to do with programming. Find something else that interests you. And then solve a problem in that domain with your programming skills.
Good luck, you seem to be on the right track!