I recently got bronze in the South African Computer Olympiad, and won R2 000 that I could spend on anything (I'll be getting a 3D printer, specifically the printrbot makers kit, but that's not important) and an additional R1 000, or about $100, to spend on books about programming and/or algorithms.
The problem is, i don't know what books I should get. There's a whole lot of resources out there about good computer science books, but the problem is I'm not in university yet, and I don't know university level maths. The one book I do have is "The fundamentals of data structures in C++" which I got from a friend, but not only does it go WAAY beyond fundamentals, but it starts using weird math symbols and terms that I'm not familiar with, and I just get lost. I'm wondering if such books even exist without being too basic that I can't learn anything new from them.
So here's some perhaps useful info:
I'm self taught, so I know how to do some things but I don't know their real technical names
I know Java reasonably well, but I would love to learn proper C++. I've coded quite a bit in C for Arduino boards, though.
I don't understand university level maths, and while I would love to learn some along the way, I don't want to have to buy a book on calculus just so I can understand a book on programming
And here's what I would like a book about:
Some C++ tutorial that also goes over the C++ equivalent of Java's Java2D and Swing, and if possible for both Windows and Linux.
Something about learning how to make or use algorithms in Java or C++. By using algorithms I mean already known ones like D* pathfinding, and designing your own with techniques like dynamic programming.
Making code more efficient. Binary search trees, hash maps, etc. and ways to avoid "brute force" solutions.
So yes, any recommendations? I know this is a lot to ask, and a strange place to ask it, but It's the most active forum I know other than Stackoverflow, and I wasn't sure if this was a question appropriate for Stackoverflow.
I wouldn't bother, most of the stuff you'd find in books are already freely available online. Use the spare money and get yourself some decent programming kit.
Rollback Post to RevisionRollBack
Can you match my resolve? If so then you will succeed. - Monty Oum
I wouldn't bother, most of the stuff you'd find in books are already freely available online. Use the spare money and get yourself some decent programming kit.
A programming kit? There's such thing?
I did a quick search on amazon, all I found were Arduino and robot starter kits, and microcontroller programmers. What's a programming kit supposed to be anyway? I've already got a PC with keyboard, screen etc. and I've got compilers and IDEs installed. What else is there to buy that could help with learning algorithms? I mean, I could buy a professional IDE licence or the Intel C++ compiler but neither are needed and I think both are out of the $100 budget.
A programming kit? There's such thing?
I did a quick search on amazon, all I found were Arduino and robot starter kits, and microcontroller programmers. What's a programming kit supposed to be anyway? I've already got a PC with keyboard, screen etc. and I've got compilers and IDEs installed. What else is there to buy that could help with learning algorithms? I mean, I could buy a professional IDE licence or the Intel C++ compiler but neither are needed and I think both are out of the $100 budget.
Sorry, I mis-stated my point. Kinda notice that myself now.
What I meant was some new PC equipment that can help you with programming. Something like a nice keyboard. Heck, even spend that $100 on yourself.
Rollback Post to RevisionRollBack
Can you match my resolve? If so then you will succeed. - Monty Oum
I'm going to go the other way from Akame. I highly recommend buying books.
Not understanding a lot of higher up math may be problematic as a programmer. If you're looking to learn about C++, I'd probably recommend the latest edition of Bjourne Stroustrup's book "The C++ Programming Language." However, I'm not too familiar with C++, so learning from a different source may be better.
Other than that, find some concept you're interested in, such as data structures or design patterns, and read reviews on books about them. There's thousands of books out there that have relevant information. I recently started reading one on Behavioral Mathematics for Game AI, which isn't even the most specific book on the topic. Start with broader things.
I wouldn't bother, most of the stuff you'd find in books are already freely available online.
I disagree.
There is a wealth of information online. However, there is a lot of disinformation, written by, recorded by and vended by people who aren't in any position to be teaching anything.
The content of "generic" programming books such as Code Complete and Clean code are not subjects and information you can read by going to some crappy tutorial website, for example. Those are just two examples of must-have programming books IMO.
There is a wealth of information online. However, there is a lot of disinformation, written by, recorded by and vended by people who aren't in any position to be teaching anything.
The content of "generic" programming books such as Code Complete and Clean code are not subjects and information you can read by going to some crappy tutorial website, for example. Those are just two examples of must-have programming books IMO.
Very true, and also sometimes you just don't know what to look for, which you can find in books.
Google "David Malan Harvard " — he knows basically every freaking language by the looks of it.
Also, get an external monitor with your money, you'll thank me later when you realise that when programming, >1 monitor is useful as .
I already have a second monitor, and I can confirm it is super useful. I usually have the smaller one for documentation/google and the program being written, and the larger monitor for writing code. Would be nice to have 3 though, so I could have the program, code and documentation all at the same time. But I'm fine with 2 for now, my GPU only has 1 remaining port and it's HDMI, and none of the old monitors fit that. Perhaps I should get an HDMI-VGA converter?
I didn't find much on "David Malan Harvard", there's only 4 results on amazon and very few on Google as well when looking for a Java book.
Thanks BC_programming and BKRenz for the book suggestions! I'll have a look at them.
span>Unfortunately, I had to purchase this book as part of my data structures class, and everybody in my class agrees it is just a horrible book for undergrad students. Too much mathematical jargon, coded algorithms which often have mistakes in them, and not enough plain english to convey to the reader the idea behind these fundamental concepts. If you want to learn, DO NOT buy this book.
So, it isn't just me that's completely thrown off with the university level math! Good to know.
I also got an E-mail that I'm officially in the IOI training camp thing, and they mentioned this:
span>Candidates are expected to use the computer language C++ for the first training camp. Please familiarise yourself with the language. English is the official (human) language of the IOI, and will be used throughout.
So yea, new plan: learn C++ ASAP. By the 20th of February, 2015. I know, learning a language with a deadline isn't a good idea, but I don't really have a choice if I want to be part of this.
It seems "Accelerated C++" is a good choice for learning C++, it seems to consistently pop up on many recommendation lists I've found. If it helps, I'm familiar with C from Arduino already, understand intermediate level OOP (from Java, extend, implement, overriding functions and stuff).
I'm also thinking of, instead of just learning the language with provided examples, to actually get familiar with it by making something. Perhaps a simple game? I know there's countless "how 2 mak A gam?" threads of people who have no idea what they're doing already, but something small and realistic. Perhaps a basic 2D rougelike. I need to learn algorithms for the Olympiad, and there's plenty of algorithmic challenges in a Rougelike, such as randomly generated rooms, pathfinding, AI, visibility and all the stuff that comes with writing a simple 2D rendering system. Great way to learn standard libraries and objects in C++ too.
I recently got bronze in the South African Computer Olympiad, and won R2 000 that I could spend on anything (I'll be getting a 3D printer, specifically the printrbot makers kit, but that's not important) and an additional R1 000, or about $100, to spend on books about programming and/or algorithms.
The problem is, i don't know what books I should get. There's a whole lot of resources out there about good computer science books, but the problem is I'm not in university yet, and I don't know university level maths. The one book I do have is "The fundamentals of data structures in C++" which I got from a friend, but not only does it go WAAY beyond fundamentals, but it starts using weird math symbols and terms that I'm not familiar with, and I just get lost. I'm wondering if such books even exist without being too basic that I can't learn anything new from them.
So here's some perhaps useful info:
A programming kit? There's such thing?
I did a quick search on amazon, all I found were Arduino and robot starter kits, and microcontroller programmers. What's a programming kit supposed to be anyway? I've already got a PC with keyboard, screen etc. and I've got compilers and IDEs installed. What else is there to buy that could help with learning algorithms? I mean, I could buy a professional IDE licence or the Intel C++ compiler but neither are needed and I think both are out of the $100 budget.
Sorry, I mis-stated my point. Kinda notice that myself now.
What I meant was some new PC equipment that can help you with programming. Something like a nice keyboard. Heck, even spend that $100 on yourself.
Not understanding a lot of higher up math may be problematic as a programmer. If you're looking to learn about C++, I'd probably recommend the latest edition of Bjourne Stroustrup's book "The C++ Programming Language." However, I'm not too familiar with C++, so learning from a different source may be better.
Other than that, find some concept you're interested in, such as data structures or design patterns, and read reviews on books about them. There's thousands of books out there that have relevant information. I recently started reading one on Behavioral Mathematics for Game AI, which isn't even the most specific book on the topic. Start with broader things.
"Programmers never repeat themselves. They loop."
I disagree.
There is a wealth of information online. However, there is a lot of disinformation, written by, recorded by and vended by people who aren't in any position to be teaching anything.
The content of "generic" programming books such as Code Complete and Clean code are not subjects and information you can read by going to some crappy tutorial website, for example. Those are just two examples of must-have programming books IMO.
Very true, and also sometimes you just don't know what to look for, which you can find in books.
I already have a second monitor, and I can confirm it is super useful. I usually have the smaller one for documentation/google and the program being written, and the larger monitor for writing code. Would be nice to have 3 though, so I could have the program, code and documentation all at the same time. But I'm fine with 2 for now, my GPU only has 1 remaining port and it's HDMI, and none of the old monitors fit that. Perhaps I should get an HDMI-VGA converter?
I didn't find much on "David Malan Harvard", there's only 4 results on amazon and very few on Google as well when looking for a Java book.
Thanks BC_programming and BKRenz for the book suggestions! I'll have a look at them.
So, it isn't just me that's completely thrown off with the university level math! Good to know.
I also got an E-mail that I'm officially in the IOI training camp thing, and they mentioned this:
So yea, new plan: learn C++ ASAP. By the 20th of February, 2015. I know, learning a language with a deadline isn't a good idea, but I don't really have a choice if I want to be part of this.
It seems "Accelerated C++" is a good choice for learning C++, it seems to consistently pop up on many recommendation lists I've found. If it helps, I'm familiar with C from Arduino already, understand intermediate level OOP (from Java, extend, implement, overriding functions and stuff).
I'm also thinking of, instead of just learning the language with provided examples, to actually get familiar with it by making something. Perhaps a simple game? I know there's countless "how 2 mak A gam?" threads of people who have no idea what they're doing already, but something small and realistic. Perhaps a basic 2D rougelike. I need to learn algorithms for the Olympiad, and there's plenty of algorithmic challenges in a Rougelike, such as randomly generated rooms, pathfinding, AI, visibility and all the stuff that comes with writing a simple 2D rendering system. Great way to learn standard libraries and objects in C++ too.
- C.C.