# Sticky  Getting Started v3



## Ninjaboi

*Version 3:* Getting Started​
Disclaimer:

This thread, including all previous, current, and future revisions, was made as a way to get both new programmers started, as well as bring some light to topics that even moderate programmers can't seem to get adequate insight on. This thread is NOT a tutorial thread, and is more of a reference/start-up thread. This is not a complete reference, and should not be seen as such. I do however accept any PM/Reply/Email that either comments on what I've already put here, and things that you ( the reader ) feel would be good to add ( or elaborate on ).​
This thread's resources section has links to tutorials/resources that *I DID NOT MAKE*. Credit goes in every way to their respective owners. This is by all a reference thread, and it by convention will sometimes reference to things not created by myself. I do not claim ownership of the material linked off of this thread unless specifically mentioned so.

Preface:

This thread doesn't cover every single language, every single compiler, every way to do literally anything if it involves programming. No tutorial/book/article/website/library in the world has all that there is to know about everything ( if you have found one, please send me some more info ). I only touch on the ones I feel comfortable enough with to discuss. That's not to say I know and use them fluently, but I know enough about from experience to give personal information regarding them.

As the disclaimer mentions, I'll take any advice, comments, suggestions, criticism, and so on for this thread via PM/Reply/Email. With Email though, I'd like to mention that if your message is sent into my spam folder, that I will not see it. So for simplicities sake, take the latter two options. Please do not ask me to include information on other languages directly in the thread. If you have a link that I can simply add in that discusses topics of a language or several languages, please give me that instead. I don't want this to be the ultimate source of information, but merely a reference to such information, and to provide insight on topics that I feel need to be readily addressed.

Thank you for reading both the disclaimer and preface, and please enjoy the thread.

What language to use:
 ​​ A language in computer programming is the exact same thing as a language in our society. It's used to communicate between two objects ( living or not ). Just as we have speaking languages such as English, Spanish, French, Japanese, Korean, etc, we have programming languages such as BASIC, C, C++, Ada, Python, MATLAB, etc. We use a programming language to communicate with the hardware and software of the computer/device to tell it what we want it to do. Some languages are harder to learn than others, some have more power for the programmer at the expense of simplicity, others give up lower level features for the programmer to make it easier to both learn and accomplish tasks.

The questions every beginner programmer should ask themselves are:


What am I trying to accomplish?
Do I want simplicity over efficiency?
What platform am I aiming to develop for?
What language suits my style and needs?
 *C/C++:* Created by  Bjarne Stroustrup, C++ is a super-set of the original C language. C++'s goal of creation was to add more flexibility, more readable code, and to allow the programmers to use Object Oriented Programming. This is the industry standard language for Windows programming, as well as game programming. It is considered a mid-level language, as it has both low-level and high-level features. Low-level features such as direct memory manipulation. This may be a harder language to learn for most, but it's power and efficiency still draws new programmers in. However, it's usually not recommended for starter programmers.

*Java:* Created by Sun Microsystems, this language has been the preferred language for the beginning programmer. This is due to it's ability for your code to be platform-independent, which means you don't have to worry about your code only working on Windows OS's or whichever platform you work with. It's considered a high-level language, due to it taking care of many tedious and closer-to-the-hardware tasks. It's performance is slower than lower level languages, but with all the benefits it provides to the programmer, it hardly matters unless your working with a project that requires heavy system resources.

*C#:* Created by James Gosling, and another split from the classic C, this language has features from both C++, Java, as well as it's own flare. One of the most notable features it takes from Java is garbage collection, which is a weird way of saying that the memory is managed for you. Everyone that I've seen that's used this language always tells others that it's very fun to use, and they enjoy using it. The language has become more of a fast and efficient game designing language, but it has more potential than just this field. It's still disputed whether this is a high-level language or a mid-level language, yet I always interpret it as high. C# has several features that allow rapid project development, so for time vs efficiency issues this language divides these two up nicely.

*Python:* Created by Guido van Rossum, the goal of this language is to create applications very quickly with minimal low-level maintenance. This obviously put it as a high-level language, and has been used in many major projects. The latest craze for this language is rapid game development for Indie developers. The Python community provides plenty of libraries to create several programs very quickly with very little knowledge of the "hows" and "whys". This may not be the best to learn programming, but if your wanting your experience to be fun as well as productive in a short amount of time, this is definitely your language.

There are other languages that touch on specific topics more, such as MATLAB for math-based problems. You really have to decide on what your overall goal to program is. Research on the details of a language you think fits this criteria, and then compare it with other languages. Once you find the one that's right for you, use it as your primary language for your solutions. Once you get proficient with the language, then you can move on and check out other languages using the knowledge you've gained from your primary. Knowing 2-3 different programming languages isn't uncommon. However, you have to ensure your proficient with one in order to greatly aid your understanding of others.

For a far more complete list of languages, try going  here.

Compiler:
​
Once your language is selected, it's time to get your language's compiler. The compiler allows your code to be transformed into machine language. Some languages use interpreters, or use both. However, for simplicity's sake, I'll just call them all compilers. The following is a list of compilers for the languages I've mentioned above. There are many more compilers that exist, so if your wanting a more complete list, try going  here.

*C/C++:*​ --------------------
Microsoft Visual C++ Express:  Here
Cygwig:  Here
MinGW:  Here
BorlandC++: Here
--------------------

*Java:*​ --------------------
JDK 5.0 Update 22 with NetBeans IDE:  Here
Java SE:  Here
--------------------

*C#:*​ --------------------
Mono C#:  Here
Microsoft Visual C# Express:   Here
SharpDevelop: Here
--------------------

*Python:*​ --------------------
Python 2.7.1:  Here
Python 3.1.3:  Here
--------------------

The difference between a compiler and an interpreter are quite defined. A compiler goes through all your code, followed by execution. An interpreter goes through each part of your code, executing as it goes. There is advantages and disadvantage to both. Ultimately though, compiling provides a much faster program execution than interpretation. However, an interpreter-based language can show you that it's code is easier to become platform-independent.

More information on what the difference between the two lies here, and here.

IDE:
_*I*ntegrated *D*evelopment *E*nvironment_
​ Though this is usually optional, a nice IDE can be very useful in managing your development. Several come with compilers built-in. Again, due to the vast amount of them, a much more complete list can be found  here, and here.

*C/C++:*​ --------------------
Code::Blocks:  Here
NetBeans:  Here
Eclipse CDT:  Here
Bloodshed DevC++:  Here
Microsoft Visual C++ Express:  Here
--------------------

*Java:*​ --------------------
NetBeans:  Here
Eclipse:  Here
--------------------

*C#:*​ --------------------
Microsoft Visual C# Express:  Here
SharpDevelop:  Here
--------------------

*Python:*​ --------------------
Eric:  Here
PyDev:  Here
Komodo:  Here
--------------------

Do note that an IDE is usually optional, and is only used for project management, organization, and simplification. You do not have to use them. In fact, you can usually just do your programming via a text editor and a command line ( or your OS's variation of ). You will still need a compiler/interpreter, but if you feel that you have no need for an IDE, you'll find that this way you'll learn better on how to:


 Organize your own projects better.
Structure your project better.
Understand how the compilation/interpretation process works a bit more "under the hood".
Compile and execute your program via a command line/variation of.
 If your choosing to not use an IDE, I'd personally recommend Notepad++ as your text editor.

Notepad++ : Here.

However, there is more text editors out there. A more complete list is located here.

Resources:​
These are links that will help you learn the language of your choice. Most are tutorials, but some are references that will be very valuable in the future. These links have tons of information, guides, references, tutorials, books, etc. However, it's up to you to learn the material. Try to do the suggestions I mention in the FAQ section for learning enhancement if you feel the need to do so.

Note that I'm only going to list resources for the languages I've selected to describe. You simply have to Google your language of choice to get plenty of free tutorials, references, book sources, etc.

Example with 'Google': "Ada programming tutorial".

*C/C++:*​ --------------------

_Free tutorials:_​
LearnCPP.com:  Here
XoaX.net:  Here
Tenouk.com:  Here
DevMaster.net:  Here
DevCentral.com: Here
Thenewboston.com: Here
Wustl.edu: Here

_Books:_

The C++ Programming Language: Special Edition: Here
C++ Primer Plus ( 5th Edition ): Here
Accelerated C++: Practical Programming by Example: Here
Thinking in C++ Volume 1 ( 2nd Edition ): Here
Programming: Principles and Practice Using C++: Here
Exceptional C++: Here
The C++ Standard Library: A tutorial and reference: Here
Effective C++: Here

_References:_

Cplusplus.com: Here
Cppreference.com: Here
C++ Quick Reference: Here

_Other:_

The Definitive C++ Book Guide and List: Here

--------------------

*Java:*​ --------------------

_Free tutorials:_

IntroCS.edu:  Here
Math.hws.edu:  Here
Oracle.com:  Here
Ibiblio.org:  Here
Tutorialspoint.com: Here
Thenewboston.com: Here
DevCentral.com: Here

_Books:_

Java Book List: Here

_References:_

Java Quick Reference Guide: Here

_Other:_

--------------------

*C#:*​ --------------------

_Free tutorials:_

Microsoft.com:  Here
Fincher.org:  Here
Csharp.nettutorals.com:  Here
Ssw.jku.at:  Here
FunctionX: Here
C#Station: Here
DevCentral.com: Here
Channel9.msdn.com: Here

_Books:_

Visual C# Programming Books: Here
C# In-Depth Second Edition: Here
Pro C# 2010 and .NET 4: Here
Head First C# Second Edition: Here

_References:_

Core CSharp and .NET Quick Reference: Here
C# Basics Quick Reference: Here

_Other:_

--------------------

*Python:*​ --------------------

_Free tutorials:_

Thenewboston.com: Here
Python.org:  Here
Sthurlow.com:  Here
Addedbytes: Here
Python4Kids: Here

_Books:_

Introduction Books: Here
The Quick Python Book: Here
Python 3 OOP: Here
Head First Python: Here
Snake Wrangling for Kids: Here

_References:_

AddedBytes Quick Reference Sheet: Here
Rgruet Quick Reference: Here

_Other:_

--------------------

If you have any other material that you feel would be great to add to the resource section, please send me the link/info if possible!

FAQ:
_*F*requently *A*sked *Q*uestions_​_
_Personally, I wanted to get to this section in this version for several reasons. First, I could answer many questions that others may be asking themselves that they may not have a definite understanding/answer of. Second, it helps weed out any questions that are ( as the title suggests ) frequently asked. Some however are questions I asked myself when I started, but had to look up for more information of. I'm cutting out that search and find process for you, so any questions you may have that you feel should be answered here, please say so via methods described in the Disclaimer and Preface section.



> Why is programming hard? I just can't figure it out!


--------------------

Programming can be challenging at times. My suggestion, go back to the basics, and work your way up. Don't stress yourself by starting large projects, or trying to remember every function you come across. Do the fundamentals, learn them, and work up from there to where you want to go.

--------------------



> Is there any way for me to study better? Some days I can focus, some days I can't.


--------------------

I usually check off a personal list in my head:

- Gotten plenty of rest.
- Have had a recent meal.
- Have time to kill.

When you study, try getting a snack that you can munch on throughout your study time. I'd prefer you eat something less fattening, due to sitting still all day, but that's more on diet that opinion. 

Also, I'd recommend getting something to drink while you study and drink well during. Dehydration can be a bigger factor that you realize. I'd again prefer you drink water for best results, but again, a matter of opinion. 

Make sure you've had plenty of rest. No sense trying to learn if your brain is already fried. There's no real amount of time you should sleep, but usually 7-10 hours is good.

Lastly, try to allocate time in your day to study uninterrupted. You'll want time that you can assure yourself that 95% of the time you'll be able to focus on the task at hand. If your having trouble focusing even with conditions set, try getting up and stretching yourself out after half an hour or so.

It has also been proven that someone that exercises focuses better and can absorb information better too. So, you can always hit the gym or do some morning running to clear your head and improve your mind.

--------------------



> When do you know your not a beginner anymore? When do you know your an expert?


--------------------

This is usually simply a matter of opinion, as well as based on the line of work you do. However, I suppose the default of such would be:

*Beginner:* One who has yet to become proficient in his/her language(s). This means they are still either trying to learn the in's and out's of their specific language(s), or are still trying to learn the fundamentals of programming concepts.

*Intermediate:* One who has become proficient in his/her language(s). They are able to use references and sources well, and can solve several problems using their coding experience. They can also use other libraries and documentation for programming correctly without instruction.

*Advanced:* One who has mastered his/her language(s). They not only use references and sources well, they create their own personal references of the things they feel they don't need to memorize, but still need to have around. They can solve many sophisticated problems with clean, structured code. They can use libraries and documentation well, and can also create and document their own libraries proficiently.

This is really a vague response, but it's to a vague question, so it balances itself out.

--------------------



> Am I supposed to remember all the data types, functions, etc that's included in *insert API/Library here*?


--------------------

Never! If anything, all you should try to remember when learning/using a new API or library is how to use it. The rest should be left to documentation and references.

Now some may protest against what I'm saying, so I'm going to stick my leg out for this one. Some will tell you that you should remember most of what you use, and only the ones you never really use you should not remember. With examples like the Windows API, it's far too impractical to do this. I agree that you should remember the ones you use the most, but that could easily be 1-2% of the whole API/Library at best.

In the end, just remember how that particular API/Library works, how/why that works, etc. The rest of the functions, data types, variables, classes, etc should be left to well-provided documentation as well as personally-made references of the parts you use frequently.

--------------------



> Why can't I compile my source code in one compiler, but another compiler it works fine?


--------------------

This is quite simple really. Every compiler treats your source with relatively the same effect, but sometimes does this in different ways. As well, some compilers may/may not come with the library functions you use in your languages' standard library. Though they are called 'standard', some compilers leave out or add to this library. A small amount of compilers might not even have a library at all included!

For this problem, check your compiler documentation. Other than that, try looking out any compile errors you may get.

--------------------



> What's your thought on programming teams?


--------------------

My thoughts personally? Avoid them. They are nice to have if made correctly ( with the right people, conditions, etc ) but those conditions often aren't met. I wouldn't start a programming team that you feel will make the next best OS out there, and realize half-way in that the friends/family/colleagues you invited in turn out to either not meet the criteria of the projects, or have different views that you that drastically affects the project/team as a whole.

If you have to create a team, do it for learning purposes only. Start a small group of people you know, and decide upon a small project to accomplish together. I personally would recommend a classic game such as Tetris for your first project. Being so that it's fun to make as well as challenging. Of course those conditions I mentioned earlier would go into effect when starting your team, and during your project. However, for learning purposes this is good for you. Getting different input on solutions to problems, working together, and overall having fun with a project while you learn is a great way to go.

Now, teams are also good if you have a very large project that requires others to help. Still, please don't just pick your friends/family just because they ask you or that you want them to. Make sure they have similar goals that you do, and that they have the drive and wisdom to do the project(s).

--------------------



> I want to make a game! Where do I start? Is there a tutorial that goes through the process? Perhaps a book?


--------------------

Woah, slow down there! Did you just say the 'g' word? This is no easy feat, and to be honest you shouldn't think it's so easy that it can be summed up in a book/tutorial. If anything along those lines, it would require reading and viewing several books/tutorials in order to get a solid foundation as well as the concepts you need in order to make such a thing.

Just to let you know, game design is a complicated breed. Sure programming is it's foundation and core, but it's by no means the main attraction. There are so many other things you have to take into account when making a game. You have to think about sound, graphics, storyline, game-play, and much more. You could of course get free sounds and graphics for your game, but that's not the best way to go if your trying to be unique and professional. Even if your sounds and graphics are worse, at least it's yours when you make it. You cannot, however, get game-play and storyline online ( unless you take some ideas from others for the storyline, and use an engine for game-play ).

Now, in a nutshell, this is what you'll need to do in order to make games from literally ->_Scratch_<-:

- A programming language.
- Knowledge of that language.
- An API or graphics library.
- Knowledge of said API or graphics library.
- Knowledge of game programming concepts.

That *is* the bare minimum of today. Unless your wanting to be highly impractical and make a game out of assembly, this is the plan you are destined to follow. Now, there are other ways to make a game that make your life much easier. If you still however prefer making a game from 'scratch', please remember and do the list I provided.

Now if your wanting to save time and get your game up and looking better easier, I suggest finding a game engine that you can work with. Working with a game engine at first looks rather difficult at times, but I'll be honest and say it's probably the better way to go in terms of it being far easier and getting far more accomplished. Not to say you'll never program, but it makes creating games much simpler.

A link to a large list of game engines can be found here. Find the one that has your preferred primary programming language, and that has the features you need/want. If available, I'd also try looking into getting some basic tutorials over the engine to get a quick jump start.

Aside from all that, the rest is just detail. Very important detail, but detail that I will not cover. Games are fun to make, and are one of the most entertaining and challenging things to create. Sorry if this wards you off a bit, but I'm really just trying to straight-talk it to you.

--------------------

Conclusion:​ 
Thank you again for reading this thread, and I hope it's helped you and others who've read it. Again, if you have questions, comments, suggestions, etc, please PM/Reply/Email me regarding this thread. However, I will not answer questions involving things outside this thread via those methods I've stated. Create your own thread in the appropriate section for help.


----------

