   Improving my programming skills
  Hello to the great GD.net community.I will go straight to the subject, I am currently attending a CS college, I'm attending 1st year. I've been programming since high-school, and by my own research I improved on my programming. But now at college, I feel I could do more, improve faster and better, yet I am not sure on what route I should take, what kind of projects I should try to join, what papers I should read, and issues along these lines.Another thing I should add is that I consider myself somewhere here ( here being our X ) : begginer ----x- intermediate ------ advanced / programmer Any feedback will be greatly appreciatedKudos to you all   
  My recommended readings:First you should read about basic programming.Then about basic data structure and algorithms (queues, stacks, linked lists, heaps, sorting, advanced sorting (quicksort/etc), binary trees, n-trees, balanced trees...)Then about complexity. Some automata theory and P/NP problems could be interesting at this point. Perhaps something about iterative->recursive and viceversa algorithm transformations too.Then something about advanced data structure and algorithms (graphs, salesman problem, divide and conquer, etc. I'm not sure how to translate most of the subjects to english, but I guess you got the idea).Now is the point when you should start with some basic AI.Then you could try a new programming paradigm. Functional or logic programming could be interesting if you just begun with AI.Nowadays, with all this hysteria about multicores, I think it is mandatory to read a formal book about concurrent programming.The order is not mandatory, of course, but I think it's adequate.But I think this is pretty much like 1/2 of a CS degree, so perhaps you'll want to just follow the program.Abour projects... When you read a book, try to do all the exercises. If they're too much and you have little time, try to do a couple of the easy ones, a couple intermediate, and the most difficult ones.The beginner/intermadiate/advanced is a stupid thing. I'm quite sure here's a bunch of people which totally think I am an advanced programmer, and another bunch which think I am a complete noob, or intermediate at most. I think the concept only makes sense when comparing books of the same editorial, so you can know how they compare to each other.But that's just my opinion.Edit: Just a little thought I want to add. You seem to be eager to learn as fast as possible. There's a zen tale about this man who one day met an enlightened master. He told the master that he wanted to get enlightened. 'How much it will take? I can work hard 8 hours a day, 5 days a week.''5 years', replied the master.'Well, I will work even harder, 15 hours a day, every single day. How will it take to me then?''10 years, then'The story ends here, but I think that after this, our friend said 'moron' and punched the master quite hard. That's what I would have done, anyway.The point is that, if you have time to work hard, you should probably concentrate on learning everything as well as you can instead of going forward faster. I have studied most of the subjects I said before, besides math (analysis, algebra, discrete maths, formal logic), some physics, electronics, etc (you know, most of a spanish CS degree) on my own, and man IT'S HARD. You should be glad you can enjoy the support of a classroom and teacher. If you think they slow you down, learn things as well as you can. You proably won't have a lot of opportunities to dedicate full-time to learn the basics (I'm guessing you don't have a work right now).So good luck any way you choose.Edit II: Just another random thought. One thing the university didn't teach me was manage projects. Yeah, we had a subject about software engineering but it was a shit. I didn't learn anything valuable. So perhaps you'll find useful to also study some serious software engineering and try to manage a large and growing project. That's a really useful experience.[Edited by - ravengangrel on May 23, 2009 8:59:49 PM];  besides practicing, the best way to improve your skills, is when a problem comes to you and you find (and implement) the way to solve it.Not just logic problems, but also problems including using some framework, or compiling some complex project (for example).Maybe you can make a list of some applications that you like and have no idea how to do it. Then search iformation about it and try to replicate them (at least a 'lite' version of them).Also learning different languajes/apis/frameworks/engines its a good way to improve your learning speed. And that certainly is important.cheers!   ;  As a recent graduate from college I think I can reflect and give a few quick pointers that will help your programming skill:- learn more math, specifically linear algebra. this has helped me a ton, especially with games- program in your spare time. I find myself rewriting game engines all the time, and each time I do it I learn new things.- read books and articles. I enjoyed books like Exceptional C++ and Design Patterns.- talk to other programmers. While I was on the programming team I met some really smart people, and I learned plenty by hanging out with them.hope this helps,-Steve   ;  This is a neat article: Practicing Programming. Neat author, too.Edit: You'll probably mostly be interested in the first half of it. Closer to the end he gets into specifics that are probably not relevant to you right now.[Edited by - theOcelot on May 24, 2009 12:09:44 AM];  Thank you all for your comments.Ravengangrel, you have sure given me a great list of subjects, I will surely try to read what I can from those, they seem interesting and it saddens me that some of them are on a first hearing for me.I am feeling a bit that I am slowed down ( my intention is not to sound like I consider myself very bright in the field, sorry if that is what is understood ), but I will take your advice and learn everything as best as I can.We had a subject this year, European Project Management & Scientific Research Methodology ( not sure if it's correct in english ) that taught us about project management. Blackwind , my basic problem is that when confronted with a bigger project I seem to freeze, I have no idea where to start my research, how I should begin. I have a thought about hacking some open source project, you know, tinkering with the works as to more understand a bigger project, but I fear it might overwhelm me. Steve, thanks for the input of a recent college graduate, I am trying as hard as I can at math, I am programming in my spare time ( whenever I can ) although not anything nearly as great as rewriting engines. And that being said, I come across another problem, there are so many books out there, so many reccomendations, that I am not sure which ones I should chose, and probably most of them aren't shipped in my country ( you would be surprised how many websites refuse my orders because of a huge ammount of fraudulent activities from my country ). Thanks everyone again for the comments, and I liked the article theOcelot suggested very much. We have a great community over here;  First, what I think can be helpful is to integrate exposure to many sides of programming in day to day to life. For example, on my iGoogle, I have Stack Overflow and Reddit's Programming Subreddit feeds. Also it doesn't hurt to check out tech related sites like SlashDot and Ars TechnicaAnother way to immerse yourself in programming (which this may hinder your game development, depending on the game you want to write) is to install Linux and tinker around in it. Ubuntu is pretty well polished, but you could pick up something where you have to do a little bit more manual work like Debian or Slackware. Or even compile your own kernel.I know it has been said before, but constantly reading books related to programming is important. For example, one of the first books I read right out of college was The Pragmatic Programmer. That book, I feel, is like the primer for a programmer's career.Not only is it important to read technical books but of course books about programming in general. Books that describe best practices (for example, use of source control and testing frameworks). Even if you don't decide to work in the game's industry, knowing different software development methodologies are important (Agile, Scrum, and even Test Driven Development).Best of luck.   ;Quote:Also it doesn't hurt to check out tech related sites like SlashDotI wouldn't list SlashDot as relevant. These days it's nothing more but pro-linux anti-MS (holy wars which got old in the '90s) collection of mostly meme-like discussions. Programming topics there are also very rare, and rarely offer anything relevant.There are still relevant topics or discussions there, but signal to noise ratio simply isn't worth the time anymore.   ;  Thank you for your suggestions, I have added Stack Overflow and the Reddit Programming RSS to my google reader, I will keep a close eye on them.   ;  Write a library other people will use ;-), it's what I do too and it forces you to learn C++ concepts (for if you come from C).   