

Advice for a 17 years old programmer - toutoutastro

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 !
======
adjwilli
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.

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

~~~
petercooper
_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 ;-))

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

~~~
petercooper
_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 ;-)

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

~~~
toutoutastro
thank you for the advice

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

~~~
toutoutastro
Thank you for the advice !

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

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

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

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

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

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

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

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

~~~
AshtonFun
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).

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

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

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

~~~
toutoutastro
I learn outside programming.I already have a background in astronomy. Thank
you for the advice!

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

~~~
toutoutastro
Thank you for the advice!

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

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

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

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

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

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

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

~~~
toutoutastro
great advice thank you!

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

~~~
toutoutastro
thank you for your advice!

