Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm in middle school at the moment and have been programming for about a year and a half. I mostly work with Python and Ruby, and am currently learning Rails. I know, you can never learn enough, it takes a looong time to master a subject, but I feel like I don't have much left to learn :(. I've learned many concepts in Python, learned basically the whole std lib and have written a ton of programs, same with Ruby. In Ruby I've also done a lot of metaprogramming. After I've learned all the concepts, and written a lot of programs, there is nothing really left for me to do! What can I do, now that I've learned all the concepts, and written some programs? I can't get a job working with real developers, and the programming camp I went to last year was far too easy.

share|improve this question

closed as off topic by gnat, Thomas Owens Apr 8 '12 at 21:48

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here. If this question can be reworded to fit the rules in the help center, please edit the question.

You learned everything there is to learn about Ruby and Python. Great! It is Sunday. Go out and play some basketball or hit on a girl damn it! –  Job Apr 8 '12 at 16:33
Even programmers need chicks... –  Rig Apr 8 '12 at 16:39
Because all programmers are either straight guys or lesbians .... –  TRiG Apr 8 '12 at 18:26
If you truly do know everything then why not combine building up your resume with building an interesting project? –  Darthfett Apr 8 '12 at 18:27
Gathering knowledge is great. Applying it is greater. You can make a problem as complex and time consuming as you need it to be. We have problems that take teams of skilled developers to solve. Pick harder problems to solve. Programming languages are just tools. You might know everything about how a hammer works, but you gain knowledge of effective usage when you actually start swinging it around ;) –  Matt Esch Apr 8 '12 at 21:06

8 Answers 8

up vote 31 down vote accepted

I'm in middle school at the moment and have been programming for about a year and a half. What can I do, now that I've learned all the concepts, and written some programs?

Not to go off topic here but there is no way this is true. In fact, there's a psychology term for what you're likely experiencing it's called the Dunning-Kruger effect. It has happened to every programmer at one time or another--you greatly over estimate your abilities when you're newer to something (whether in general or for a specific framework/language/concept)

enter image description here

If you don't believe this is true--think back to all the times years ago when you thought there wasn't much more you could learn, and how much smarter you are now.

Take a deep dive into computer science; find out what you really don't know. This field would not exist if it could be mastered by a middle-school student in a year. Unless you're an algorithms, relational database/ORM, and web development genius then there is plenty for you to learn.

share|improve this answer
+1: for Dunning-Kruger effect. Claiming one's learned all the concepts is usually quite far-fetched. –  jimmy_keen Apr 8 '12 at 16:25
Another +1 for the Dunning-Kruger effect. The thought of it has always scared me into working harder –  Adam Lynch Apr 8 '12 at 19:02
This blog post from Notch seems on topic. There's always something new to learn, for example do you really think you know good OO design? Good then something like Smalltalk shouldn't blow your mind. If that's easy, what about a language like Haskell? –  Azolo Apr 8 '12 at 20:55

This question reminds of the time I picked up a copy of my first MMORPG (WoW). When I first loaded up the game and began playing, I was blown away by the level of detail and the size of the environment I was in. First 10 quests were all in a starting area but it felt like a large, open world.

When I left the initial starting area, I realized just how small that area was because the next quest area was 10 times bigger. And again, I thought, wow this is huge and awesome. But then I discovered there are multiple zones and game got so big it was taking a really long time to travel. But then you discover there are trains, mounts and other ways of transport and initial 2-3 zones now look really small. But wait, there are other continents and they are just as big as the one where you started. But wait, there are other worlds.

I hate to bring you this news, but most likely you left the initial starting area and are now exploring zones 2 or 3. And the world of programming is almost infinite. It will scale much larger than WoW ever did.

You've learned the basic language constructs and you've learned how to make calls. That's great. Your next challenge is to scale out. You said you've written a ton of programs. How big (lines of code) were they? Try making something bigger. Applications in the real world can be 10,000 to 10,000,000 lines.

Try creating something useful and semi-polished that other people might actually find useful. What you will discover is there's a whole, higher level of skills that you need to master: software design. How do you organize your code so it remains manageable as it gets bigger? How do you organize your data or your classes?

My bet is you'll soon find out that even though you feel you know how to code and you know ruby/python very well, you will find that your application will be increasingly difficult to work with. At times it will be hard to follow and add features to. Sometimes it might get so bad that you won't even feel like working on it anymore and then you might get disappointed that you didn't finish it and don't want to finish it.

But that's ok, instead of getting disappointed, look back and evaluate what you have done. Think about why your code became difficult to work with. What would you have done differently? These are the best programming lessons that will make you a better developer. Your next large-scale app will be much bigger and cleaner but more than likely it will end the same way as your first app. You will learn more lessons and more ideas of what's good code and what isn't.

These high level skills are true programming skills and they transcend programming language boundaries (i.e. when you pick them up, it'll make you a better programmer regardless of what language you choose to program in). After you do several projects, you will look back and realize how insignificant it was that you simply learned how to write Ruby/Python code. Anyone can write code. Learn to build applications.

share|improve this answer
+1: apart from nice WoW analogy, your 2 last paragraphs (especially the last sentence) nail the problem: programming and building applications are two entirely different concepts. –  jimmy_keen Apr 8 '12 at 16:31
+1 largely for the WoW analogy, it's a great example of how things look small/easy once you move beyond them (and one that people still in school are much more likely to relate to). –  Izkata Apr 8 '12 at 18:17

Take a look at unanswered questions here or on Stackoverflow tagged to a subject you think you know all about, like ruby, and try to solve/answer them. You will very quickly find that you weren't as good as you were thinking at all and at the same time find specific subjects pointed out to you that you do not yet master, which gives you something to do again, perhaps (probably) even a challenge.

Another option: Think of a kind of program that requires a different approach than you have used until now. Maybe try to write a simple game (or if you did that, another type of game, RTS is much different from shooter or platform), or anything else you have always wanted to learn.

lastly, you can always improve the way you code. Take a look at design patterns for example, or Software architecture.

You've never seen it all, and the sky is the limit in computer science.

share|improve this answer

Few ideas other than quite common join an open-source project:

  • Try whole new approach to programming - like purely functional language (eg. Erlang or Haskell).
  • Dive into your main languages at really deep levels (compiler optimizations/code generation, resources management, runtime environment... stuff like that - SO can help here).
  • Develop stronger meta-skills (coding practices, design/architectural patterns, design for testability/OOP, unit testing - trust me, those are topics where there usually is no single "do it this way" answer and you can spend lot of time on finding out your own ways).
  • Attempt to develop application for your own use, from start to end. Start with specification/requirements, technology, frameworks. End with full-blown, functional application which you approve. Funny/tragic thing about that is, if you do it correctly - you'll never reach the end. You'll find yourself constantly thinking about new features you can add, old features you can do better, stuff you can improve or do differently... it's truly never ending story.
share|improve this answer

I would consider helping with an open-source project, not only it can provide good learning experience, but it will look good when you're looking for a job.

share|improve this answer

How about spending time building rep on this site and StackOverflow?

share|improve this answer

You could try to study algorithms and data structures. As you know Python language, you could try this free online book, and this one.

Another interesting topic is game development. There are Pygame tutorials and this book about it.

There is always a lot to learn!

share|improve this answer

You could spend some time on projecteuler.net to expand your knowledge of mathematics. After learning how to use databases, create basic GUI and network programs, and how to program with threads and processes, then the next step is to expand your mathematics knowledge along with data structures and algorithms. You could also spend some time studying discrete mathematics, it is very helpful for computer programmers working on non-trivial projects.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.