New to Programming, I Have Some Questions

So I'm sure you've seen a ton of threads on this, but what do I start with? Books? Web tutorials? I'm not really interested in web programming right now. I've heard that C++ and Java are great general purpose languages. But I'm just lost. What is a compiler? Which one should I use for Java/C++? I'm not really worried about the challenge of learning either language, I mainly just want to do this to kill time and be somewhat productive while doing it. So in short I'm not in a hurry to learn this. And the big question is, what the hell do I make? A rudimentary web browser? Idk. What are some somewhat simple programs or functions I can try and tackle?

Anyone?

Just quickly: DON'T LEARN JAVA; make a basic calculator; learn from books, internet tutorial, and anything else you can get your hands on.

Why? Java is actually a very effective language and I use it on a day to day basis writing almost as efficiently as C++. It depends on the programmer and what libraries you use.

I simply despise it without reason.

Like my feelings towards BitFenix. I don't hate them because I have to, I hate them because I want to.

So if I was to experiment with C++, what software should I use? My mom is buying me this book btw.

As a starter I would learn C#. Why? Because it uses the .NET framework ans is very easy to learn. Its syntax is also very similar to C++, so it will be easier to transition later. A good series for this topic (and many others) are the Head First series. They are VERY easy to follow and are very interactive. It will give you things to make. I and everyone I have talked to have had smashing success with these books.

As for your question about compilers... A compiler translates the code you write into something the computer can understand. The computer has no idea what the hell an "if" statement is alone and how to manage that. It is the compilers job to take the code you write and translate it into a language that the computer can understand.

 

Learn C++ and don't let anyone tell you that you can't and that you should start at an "easier" language. Honestly, you'd just be wasting your time studying something you'll never use. If you want to take it slow, learn C, which is a subset of C++ and has less features to overwhelm you with. But after that learning C++ will be cake.

Speaking from experience.

I would recommend learning C++, it is the most complex, rewarding, and overall powerful language there. once you learn C++ or learn the basics of C++ the rules of the language will transition to almost every language except the syntax (or keywords) will change. the compiler is what combines all your code into a running executable. it pulls in all the libraries that you need and turns it into binary code which the computer can understand.

This video is from a smart guy and he will explain to you the simple basics to get you started: http://www.youtube.com/watch?v=CDgtZSl_DII

in the startrek universe every cadet knows how to program.

It would not be a waste of time at all. First, you have to remember he is doing this because the is "bored". He is looking for a stimulus to keep him entertained that is productive. Spending hours pouring over code to make an interface isn't very stimulating to most people. It also takes time and discipline to stay focused to achieve the desired outcome. Now, if he were to learn something that is a little more automated and "easier" he would be able to see his results sooner and stay stimulated.

Secondly, he does not necessarily need the power C++ gives. Think about it, would you give someone a decked out desktop with 4 Nvidia Titan GPUs if all they are going to do is play Angry Birds or Farm-ville? No, that's ridiculous. Just get them something that's easier to manage. Same goes for this scenario, he can do everything he wants with C# without losing interest and also learn programing concepts which he can easily transition to other languages later.

Finally, contrary to popular belief, the world of computers is not made up of C++. There are thousands of languages, all with their niches. Saying you'd be "wasting your time" just because you learned one language over another is as close minded as saying that unless you build a $1000+ desktop, you're wasting your money and might as well just buy a $200 netbook. A good programer is familiar with an array of languages, not one and only one.

 

Spoken from experience.

 

I said he would be wasting his time learning something he'll never use. You must agree that learning something you will not use is a waste of time. Notice how he wants to learn C++ specifically. Why would he then go waste his time learning something that is NOT C++? I'll give you that C++ can be overwhelming to newbies because of it's extensive features and support libraries but it isn't impossible. I recommended C which is simple, straight forward and fast. Not to mention that ALL the skills learned in C will transfer to C++, as C++ is just an expansion of C.

Discussing whether learning C# would help him learn C++ is irrelevant in my opinion. Why not just learn C++ instead of wasting time? C# is similar to C++ but it has too many features that just don't translate over and could even make learning C++ harder for him later on. If he wants to make a GUI app by dragging and dropping buttons from a menu and call it "programming" he can use Qt Creator.

Contrary to popular belief you do not need to be hunched over your keyboard for hours to get a GUI app up in C++. There are a plethora of libraries that do this for you. Whoever uses pure Win32API for GUI programming is about as sadistic as people who program large projects purely in ASM and I've tried both! The SFML, GLWF and Qt libraries are great alternatives to windowing and event handling for Win32API by making their features simple to use and above all else, CROSS PLATFORM.

As for good programmers being familiar with an array of languages.. is well, quite frankly bullshit. Knowing more languages is not going to make you any better at finding bugs in the one of them! I can tell you from interning at one of the biggest tech companies in the world that most engineers only know two languages. That's C++ and Java (and oh how they HATE Java). Knowing C++, Java, C#, VisualBasic and ObjC is just redundant and stupid (especially VisualBasic). No project you ever take on is going to have such a diverse code base. Ridiculous. This is all irrelevant. OP WANTS to learn C++ and I intend to encourage him to do so.

You are projecting your experiences to much. How do you know he will never use languages other than Java and C++? Unless of course you honestly believe that those two languages are the only ones that have value... And if that is the case, please don't bother replying. The .NET framework is CRUCIAL to a majority of business  related programming. An employer in that field isn't going to care how many years of C++ experience you have if you've never touched the .NET framework.

My GUI example was just one of many things that make C++ development slower. It was not meant to be taken so literately. Ask any seasoned programmer and they will tell you that one can get a lot more done faster with the .NET framework compared to C++... It's one of the main reasons why it was made in the first place.

I was in the wrong by using the term "Good programers" that is true. However, you are being far to close minded when approaching the topic of programming. You will learn that there are companies outside your one internship that do NOT only know C++ and Java. What if the OP does web design? Rapid dev? Business dev? SaaS? Do you expect C++ and Java to cover all of categories of programming?

I have seen MANY people with an interest in programming try to take up C++ as their first language, and most of them quit. It just requires to much effort to keep their attention. This is why if you step into any intro to programming classes they first start off with some small IDE that does little to nothing or the .NET framework. It is a stepping stone to keep the individuals attention and allow them to grasp the simple concepts before tackling harder languages. I'm not telling the OP to master the .NET framework, just to take 2 weeks out of his life to read 1 book on the topic before moving on in his programing endeavors.

I'll second the "don't learn java or any other so called simpler language." If you go wash windows all day you won't be any more qualified to be a martial artist, you'll just be a professional window washer.

You need C++ 

It's easier to solve the problems you would face with C++ because it's a much more powerful language.

If you know C++ you understand other languages. If you come from java, you're likely TERRIBLE at C++

If you want to start at a basic level, you can try dipping into ruby so you can quickly build a console script if you ever need one, or jump into modding and such. Other simple ways would be anything to do with the web, build a website of sorts. If you want to make a game, then just make a game if that's what you're aiming for. Building a hello world or a really basic application is a flawed concept, since it just teaches you how to deal with really simple things and you won't be any less confused when trying to do more complex things. This is why we have "web programmers" "game developers" etc, do you want to be "the hello world developer"?

 

It's my belief that Hello World programs are just there for confidence boosting. You have no idea what the code is doing but it does things and WOO HOO! Hopefully seeing this simple program build and run will give you such a nerd boner that you will feel motivated enough to learn the whole language. Hello World programs have their psychological effects and I believe their purpose too.

Just two cents worth :)

I've been learning Java for around 8 months and I'm realy enjoying it as a language. You have the ability to achieve alot with java & I believe it is simpler to learn then C++ (correct me if I'm wrong).

A compiler in Java converts you .java files into code that a computer is able to understand. This will alow you to run your code after its converted into a .jar file.

Right now I just need a basic course of the terminology of the programming world and how to use a compiler like DevC++ until I can get my hands on a book. And a little more free time.

DevC++ is not a compiler, it is an editor. It manages your files projects and dependencies. Things like VisualStudios, CodeBlocks and DevC++ are called the IDE. The actual compiler under DevC++ (and CodeBlocks most of the times) is known as GCC.

Lots of good advise (and laughs) can be had from this video:

www.youtube.com/watch?v=csyL9EC0S0c

Personal advise: Don't overdue your first project. Try to find a task that you can accomplish in an iterative way. To write a web browser you need to understand a lot of different things, which might be challenging at first (networking and parsing html/css/javascript being the most obvious). I'd recommend trying something like a text editor and slowly evolve it into something like a mail client.

You can do that with almost every language you like - definitely with either C++ or Java. I'd argue that it is easier with Java (using Netbeans IDE and JavaFX for quick GUI-Creation) than with C++.