Hello~~
I am completely new to programming and I was just lazy to start even though I was really interested, so I forced myself into a C++ course even though my current college major is quite irrelevant. Heehee. So far I can write simple ones like using user input to calculate stuff (volume etcetera).
I started watching tutorials off youtube and was quite comfortable on Code Blocks, but then the class I am taking uses Visual 2008... So I had to download VS but I got 2013 which feels completely different! Most tutorials on youtube are about VS 2010 and the interface is very different and I find it hard to learn now.
So...
1. What is a good source of VS 2013 tutorial?
2. Am I starting from the right language??
3. Please share experiences on how you first started programming.
i cant attest to using vs2013 (linux developer w/ gedit; dont even use an ide), however c++ is a great place to start. it has its benefits and downfalls (i know because i started with it; well c rather). if you start with a simple language, say python or php, then it will teach you programming fundamentals that you will see in most other languages. however, making the shift to a more lower-level language where not everything is done for you (like c++ for example), can be difficult, since some new ideas are at play. if you start with c++ it is (at least in the cases of when ive taught people) more difficult to learn, but moving to other languages is a breeze
they are two very different things. vs2012, code::blocks, xcode, geany, they are ides. ides group tools like debuggers, editors, and compilers together. hence the i (intergrated). it sometimes provides code completetion, highlights errors, and has syntax coloring which is how you get the d (development) and then wrap it all together and you get the (e)nvironment. compilers read in a source file, analzye it, and spit out the equivalent file in another language. its not whatever. its like saying bananas and banana splits are the same thing
Recently I found out, that Lisp(I would choose either Common Lisp - which is fast and rich - or Closure - because it might be useful and semi-popular) could be nice learning material. Its syntax will make it hard for you to switch to other language(at least from Algol family), but at the same time... Somehow it's easy to grasp concepts of how things work in Lisp. Maybe it's all these parenthesis? ;))
If I were to decide now how would I start learning programming again, and then forget everything I know - I would probably go with Common Lisp and then C++... or maybe C++ and then Common Lisp? I believe these two languages are worth learning. Unlike Python, Ruby, Java, Javascript, Php, C++, C, and few more languages, Common Lisp is just different in terms of how it works, and how its syntax looks like.
But beginner should probably go with Python/C++(considering we're on cpp forum :)). These are more popular then Lisp, so there are more tutorials, resources, and so on.
I started learning C++, but I was younger, and didn't have much motivation nor patience(still don't have too much of it; anyway). Continued learning it slowly. Had to learn a bit of Pascal, but didn't like it too much. I also looked at javascript/java/ruby, but these languages seemed a bit boring to me - They almost worked like C++ with few major and many minor changes, but I would compare it to switching car from one to another - it's other car, you have to "feel" it, but it's still a car - so nothing new to learn. The moment I discovered Lisp was a fresh breeze. It's different. You have parenthesis, REPL, and while it may seem strange at first, when you get through initial shock, it's really nice and original programming language. You may never write any project in Common Lisp, but I believe it's good to know at least bit of it - if you know Common Lisp, you know basics of emacs lisp, which allows you to change your text editor(if you use emacs), and because Lisp is a bit different, it also makes your brain work. I recommend it!
Unlike Python, Ruby, Java, Javascript, Php, C++, C, and few more languages, Common Lisp is just different in terms of how it works, and how its syntax looks like.
I think you're unjust throwing all these languages into one bag. Python, Ruby, or Javascript are arguably closer to Lisp than to C, or C++. And I'm not talking about syntax.
Also, knowing Lisp is cool. But learning it as a first language? I'm not sure.
Python, Java, and C# are good first languages. C++ is still possible for a first language, but it is complex and can be daunting to learn due to its complexity. The thing is to pick a language and learn it by reading tutorials, books and, most importantly, program and practice. There is no point in learning it if you don't plan to program ever minute you can to use what you learn.
I'd recommend starting with Ruby. Its really simple. C++ can be a bit of a pain to grasp at the beginning if you are really new to programming since even your "Hello World" program will have some stuff like #include and a main() function and the return statement. Those stuff needs more explaining and can be quite confusing for beginners. If you start with C# or Java, OOP needs to be explained in your "Hello World" program because you'll see stuff like publicclass MyFirstProgram. Those can go above your head if you've never programmed before. So if you start with Ruby or Python, your first program will be as simple as: puts "Hello World!"
That won't need much explaining and you can (hopefully) get many new concepts in a short time. After that, learning C++ would be A LOT easier.
I would go with VS 2010, these newer compilers spoil the user.
They don't spoil the user. What if the user wants to use newer C++ 11 features?
Python, Ruby, or Javascript are arguably closer to Lisp than to C, or C++. And I'm not talking about syntax.
really? where did you get that from?
So if you start with Ruby or Python, your first program will be as simple as:
puts "Hello World!"
technically python would be one of the following:
[code]
print "Hello, world!" #python 2.*
print("Hello, world!") #python 3.*
sys.stdout.write("Hello, world!\n")
technically python would be one of the following:
[code]
print "Hello, world!" #python 2.*
print("Hello, world!") #python 3.*
sys.stdout.write("Hello, world!\n")
They are still simple as compared to the Hello World program in C, C++, Java or C#.
I know all those languages to some degree, and that's my opinion. I don't deny there are significant differences between Python/Ruby/Javascript and Lisp. But I think there are even more significant differences between Python/Ruby/Javascript and C/C++.
What is different about Lisp when compared to Python/Ruby/Javascript?
1) A program is data - there's almost no syntax, you just declare data structures which are interpreted as a program.
2) Macros. This is closely related to 1).
What is different about Lisp/Python/Ruby/Javascript when compared to C/C++?
1) Garbage collector.
2) Dynamic typing.
3) A concept of variables - all of them are effectively pointers.
4) A real function type. And in result, closures.
5) Reflection.
6) Eval. Ability to write self-modifying code, ability to generate code on the fly.
There's also an issue of statements/expressions. In Lisp and Ruby everything is an expression, but it is not the case for Python/Javascript/C/C++.
C++ has garbage collection... I think you meant forced garbage collection. Also, I think you meant functions as first class, which can be achieved in c++ with std::function.
C++ has garbage collection... I think you meant forced garbage collection. Also, I think you meant functions as first class, which can be achieved in c++ with std::function.
Well, I heard there are some garbage collectors for C++, but they suck big time. Correct me if I'm wrong. I think GC is something you must design from ground up. And RAII is not GC - you must sill think about object ownership, unless you use shared_ptr for everything, which is like, dumber and slower version of a real GC.
About functions - what I really had in mind are closures. In C++ you can simulate them with objects, but then again - in any Turing complete language you can simulate any feature, in the extreme case by writing an interpreter for higher-level language ;) Objects are just not as convenient in some cases.