Hacker News new | comments | show | ask | jobs | submit login
Advice for a 17 years old programmer
20 points by toutoutastro on July 8, 2012 | hide | past | web | favorite | 35 comments
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 !

If you're 17 and already a decent programmer, my best advice to you is to have some fun and exercise. Seriously you'll undoubtablely be a great programmer if you keep at it. But you might have regrets about how you spent your adolescence only programming. Get out, go to the gym, and learn to talk to different people. With the advantages you have of having your knowledge so young, it's best to focus on how you can compliment that to become a great, well-rounded person and also a great programmer.

Although I wouldn't jump to assume that he isn't already an active person, I will share a bit of my own experience (as someone who recently turned 18):

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 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.

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 ;-))

Just to pile on another "me too" here. I fully agree that you should limit what you do, no matter what. I, for example, always tend to overdo things. For example I once was heavily into Starcraft 2, but played so much that after just 2 weeks I had enough and haven't touched it since.

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!

I fully agree that you should limit what you do, no matter what. I, for example, always tend to overdo things.

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 ;-)

Yeah I'm thinking that way these days!

Find something that really interests you, and work on it. Visible open source is fine, and maybe even preferable, but do not let visibility rule the decision. Do not let how common a language, or how familiar you are currently with it rule your decision. Without compromise, attack the problem. Choose tools and methods to attack the problem, and if you choose wrong then change.

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.

thank you for the advice

What is best for your career given that the future is -- by definition -- not knowable and that the past and present are not necessarily indicative of the future?

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.

Thank you for the advice !

I'm also 17, and I plan to focus on these things (not sorted by priority): * learning functional programming: starting out with haskell and scheme * learning to be a good salesman, to be able to sell my own skills to potential clients; you must be aware that you're 17. Some people would not take you seriously, some will be impressed by your age - anyhow, you must be aware that people's opinion will always be twisted by your age, either in a negative or positive direction. * maybe this depends on the way high school functions in your country, but in mine, most of my schoolmates cannot get good grades without studying/paying attention, but I can. So while I am at school, I have nothing to do, so I decided to read a lot of CS theory books. * creating social contacts - finding a lot of people, both like and unlike you, that you love spending time with; this is obviously important for your personal life, but can also one day be better for your professional life * try to learn graphic design - this is one of my personal goals - and I'm doing it because some programmers that I know believe that graphic design and programming are kind of mutually exclusive

And just to mention: NEVER create a website for your school :D

What's wrong with creating a website for your school?

Let me guess.

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.

> 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!

Or you can look at it another way; at 16 you simply didn't have the maturity to handle a client.

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..

I don't think there's anything wrong with making a website for your school. As you are not a "commercial programmer", your client is NOT a "commercial client", therefore you are (as per today) a hobby programmer and your client will like whatever you will make them (for free).

You are following hacker news, it is already a good step.

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!

I use vim :D. I'am thinking of learning haskell. I go to the beach very often in the summer. Thank you for the advice !

vim is a great tool ;)

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!

One thing I think you should do is don't just concentrate on the technical aspects of programming. Really great programmers aren't the ones which know more languages and more obscure features of a framework they work with. Really great programmers know the domain language of the problem they try to solve. They understand the people behind it (and sometimes they understand the processes better than the guys working on it).

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!

If you intend to spend time working in the U.S., spending some time improving your written (and perhaps oral) communication skills is probably going to serve you better than iterative improvements to your programming abilities.

Thank you for the advice!

Learn outside of programming. Learn how to talk to people, and how to understand them, and make them understand you (at varying levels of technical ability and knowledge).

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 learn outside programming.I already have a background in astronomy. Thank you for the advice!

Two things: 1. Broaden your knowledge as much as possible. Don't just find one thing that's comfortable and stick to it. The only way I ever found to do this is to implement real programs that solve problems that you have. 2. Once you're good at something, help other people. They'll remember this and it'll come back to you in the future when you're looking for work. I taught someone C programming when I was a bit younger than you and he got me my fist job after college. That made all the difference in starting my career. Even if it hadn't paid off in that way, I'm still glad I did it.

I think you need have to a better goal. Even as a programmer you have multiple directions.

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

Scratch your own itch. Create software YOU want that would be useful to you and you could learn something by creating. Don't worry whether it's a new idea or whether anyone on HN thinks it's cool. Other than that I would recommend learning different types of programming. Systems, applications and web programming come to mind. Use different types of languages too. This is the only way to get real-world experience on the different platforms, tools and programming styles. It's that experience that will move you along in becoming a great programmer.

I've already been at the same place as you are at the time, "learning" as many languages as possible and having fun coding and copying code from the internet, sometime without even knowing what each line of those copied codes really did.

The 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.

while I have to say that I'm not really qualified to refute your advice, being 16 myself, I disagree.

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.

I do not copy code except in really rare cases. Great advices both thank you!

I was a semi-decent programmer when I was 17 like you, now I'm 19 and pretty good. One thing that I'm doing is applying to universities to study CS/IT, because I want to back my skills with degrees. Maybe that'd be a good plan for you too!

Do you want to be good at code or do you want to create software? Those are two different things. For the latter, observe what people do and create software to help them do it faster/cheaper/easier/better.

great advice thank you!

Most of being a good programmer is conceptualization of large infrastructures and knowing enough language constructs to build that infrastructure in terms of code. The best way to get better at this is to build real, practical applications, server daemons, clients, games, injectors (modify existing software), etc. Also, don't forget about reverse engineering, because we all need to know the dark side if we are going to stake ourselves in the computer realm, there are far too many security-stupid programmers and they end up hurting us all. I was lucky I guess because as a kid I loved reverse engineering, making hacks for games n whatnot, I wasn't the nicest kid, lets just say that, I'm grown up now. I believe I am a great, not just good, programmer today because I made all this erratic, zany, cool, stupid, fun 'experimental' stuff along the way, while I learned, so I have a myriad of experience to build almost any kind of infrastructure. Actions like messing with Firefox and inspecting the %tempdata%/mozilla/user.profile, then looking at the code of extensions I had installed, modifying them, led all the way to me making an extension and it becoming highly acclaimed. I then used that extension as resume material for a job at a company fixing bugs on their Firefox addon. Not trying to brag here, I think this instance in my life shows just how important doing what you love is, because you never know when it will help you. Just make sure what you are doing has some value. If you are curious about the extension, it's ImageBot. I guess in summary, experiment by programming stuff for a reason. Learning through value is the best way to learn in my experience - don't just make arbitrary things, start making simple things that you will enjoy!

thank you for your advice!

Applications are open for YC Summer 2018

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact