Best order to learn languages in?

Personally I'd recommend you first learn a lower level language like c or c++ (c if your programatic, c++ if your an OO fag). Stay away from that C# bullshit.

why on earth would you choose c++ over c#? granted c# is only for windows, but if you're going to make a windows program, in what context could you possibly think of where c++ would actually have an over all better programming experience? we're talking a 26 year old technology vs a 9 year old one.

heh also what's your issue with object oriented programming?
 


Yikes... I would stay far away from C as a first language. Programming is hard enough to learn without also having to worry about memory management, etc. Although VB would be an ok start.

I think PHP is about the only option as a first "real" (non HTML) language. It is very simple, forgiving, and the results are immediate. Plus what you learn will be directly applicable to the web stuff you want to do.

As a programmer that first learned with PHP I would say I wish I had started learning in C/C++. PHP is practically designed to write really bad code and it doesn't do object orientated very well imo. I had to unlearn many of the bad habits I got writing php when I started learning C++.
 
why on earth would you choose c++ over c#? granted c# is only for windows, but if you're going to make a windows program, in what context could you possibly think of where c++ would actually have an over all better programming experience? we're talking a 26 year old technology vs a 9 year old one.

heh also what's your issue with object oriented programming?

Umm sometimes you don't want to make clients install .net framework although I would use Delphi over c++. C/C++ is going to be a much smaller sized program if that matters to you.
 
Are you kidding me?

PHP is one of the easiest languages you can learn because it's pretty straight forward. You don't worry about the stack, pointers, or defining variable scope.

Nope - not kidding. The thing is I haven't had a reason to actually do any hard core PHP. I can read it well enough when I have to edit Wordpress functionality or landers - that much is very straight forward. I could edit PHP about 10 minutes after I saw it the first time.

I could not write an app start to finish in it though - that's what I was getting at.
 
why on earth would you choose c++ over c#? granted c# is only for windows, but if you're going to make a windows program, in what context could you possibly think of where c++ would actually have an over all better programming experience? we're talking a 26 year old technology vs a 9 year old one.

heh also what's your issue with object oriented programming?

So your point was what? You shouldn't use an older much more proven technology? You should use the bastardized language Microsoft shells out to make some more dough? There was never any reason for the language to be developed in the first place.

What's wrong with writing Windows apps (or any program for that matter) using c++ over c#? C++ is faster, it'll compile smaller, people have been doing it forever, everyone wins.

Don't get me started on the uselessness of OO programming. You know there was a time where OO programming didn't exist. Then some fuckers think they come up with a way that speeds up development, but it doesn't. It's not needed, you end up writing more code IMHO, which means it has to be slower.

Keep drinking that MS Kool-Aid bro.
 
If you're into learning programming languages, then you should be starting with low level languages. Once you learn low level languages, you'll be getting an idea regarding how it would be and what all things you should be doing as a programmer. You'll be getting to know how to explain computer, in a language that the computer knows. Slowly you'll be learning how to tackle algorithms and solving tough problems. And this is something you should be targeting as a beginner to programming.

Now let's get into languages...

First off, you should be learning C. go for it !! Once you try to learn C, you'll be in a position whether to continue or choose any other field.

Then you can try C ++ , python, java, PHP, .net and the such.

All the best.
 
As a programmer that first learned with PHP I would say I wish I had started learning in C/C++. PHP is practically designed to write really bad code and it doesn't do object orientated very well imo. I had to unlearn many of the bad habits I got writing php when I started learning C++.

Thing is, I don't think OP is doing this with the intention of becoming a professional coder, but rather to help him make more money. I agree that PHP isnt the greatest language, but in terms of value to an amateur coder just looking to automate some stuff and make more money, it can't be beat.

If he was looking to one day get a job and start coding ps3 games or something, I agree with you for sure. But in the end, who gives a shit how pretty your comment spammer or blog scraper code is, you need to build it and move on. My :2twocents: worth anyway.
 
So your point was what? You shouldn't use an older much more proven technology? You should use the bastardized language Microsoft shells out to make some more dough? There was never any reason for the language to be developed in the first place.

What's wrong with writing Windows apps (or any program for that matter) using c++ over c#? C++ is faster, it'll compile smaller, people have been doing it forever, everyone wins.

Don't get me started on the uselessness of OO programming. You know there was a time where OO programming didn't exist. Then some fuckers think they come up with a way that speeds up development, but it doesn't. It's not needed, you end up writing more code IMHO, which means it has to be slower.

Keep drinking that MS Kool-Aid bro.
It's pretty cool to watch you guys arguing about apples and oranges, but even though they're both round fruit, it's not at all fair to compare C# to C++, in hardly any aspects at all.

C# is most similar to Java, in that both are memory-managed, staticly typed, object oriented at the core, and come complete with a very large library for interacting with the OS and various other applications, including garbage completion.

Microsoft didn't write C# "for no reason", they wrote it because developing for Windows with COM and Win32 really, really sucks, and the alternative -- Java and JVM -- was draining their brainpool [developer following] by providing useful libraries for getting things done, and was cross-platform to boot.
Microsoft's strongest languages at this point were VC++ and VB, both of which are notoriously crappy and have a steep learning curve for anything useful. IIRC the C# compiler almost wasn't done in time for simultaneous release, and VB/VC++.Net were to be the original ".Net languages". .Net was created to provide a framework for writing great Windows apps, C# was created to make migration easy for Java programmers.

C++, as a language, is traditionally written to target lower level access to system components (memory registers, the call stack, etc) and allow the developer full, precise control over their data. Also, by forcing the developer to think about their data's size and location in memory, C++ encourages developers to use memory responsibly. This can be very important in performance-intensive situations. C#, in contrast, relies on the CILR and .Net's GarbageCollector to abstract away these implementation details and let a programmer focus on writing code, which will usually get v1.0 out the door faster.

To address the performance of unmanaged code (C++ without .Net) vs managed code (VC++.Net and C#.Net), take a look at Rico Mariani's blog -- Here's a case where two (popular/big-name) Microsoft engineers tried to write the same dictionary program, but the unmanaged (C++) version was slower than the managed (C#) version until the code was at version 5.
Rico Mariani's Performance Tidbits : Performance Quiz #6 -- Looking at the sixth cut

OOP is not supposed to speed up your development. It's supposed to organize your code into logical objects [and presumably logical file/directory/namespace structures, too]. If having organized code does speed up your development, then this is fantastic news for you, and you should develop exclusively in OOP. If having organized code also allows you to run unit tests, regression tests, code coverage tests and repeat your code less, then it's hard to argue that using OOP will not also result in faster development.

If you're talking strictly about speed-of-development, it's important to consider that the language you use isn't nearly so pivotal a factor as the tools that you use. UML code generation, an IDE with good macro support, and a robust set of frameworks related to the project you're working on will all GREATLY factor into your development speed. If I had tools for C++ as good as my python tools (django, pyunit, Aptana IDE), I could easily write my code in C++ very quickly, too. But these [same] tools don't exist for C++; I'd have to learn all about a new framework, a new[/similar] unit test suite, and a new IDE.
 
Don't get me started on the uselessness of OO programming. You know there was a time where OO programming didn't exist. Then some fuckers think they come up with a way that speeds up development, but it doesn't. It's not needed, you end up writing more code IMHO, which means it has to be slower.

.

OOP is more to ease maintenance than speed development.

OOP = invest now, get dividends later
Procedural Programming = get it now, pay later

So OOP is like an investment and PP is like credit. And we know what happens when you ride high for a long time on easy credit. :zzwhip:

But like I've said before for 90% of the shit that 90% of us at this forum would want to do, serious OOP probably isn't worth the time and effort.

Back on topic, I agree with kbless' and erect's modified list.

Also think learning the harder stuff first like C is probably not a good path for most people. PHP is basically C for third graders so why not learn it first?
 
OOP is more to ease maintenance than speed development.

OOP = invest now, get dividends later
Procedural Programming = get it now, pay later

So OOP is like an investment and PP is like credit. And we know what happens when you ride high for a long time on easy credit. :zzwhip:

I would completely disagree, I'm not sure how juggling classes and methods is really any easier than just straight up writing a function, and writing things procedurally.

Your whole credit analogy is probably the stupidest thing I've ever read.
 
Here's a list of 50 jquery widgets ... name one of them that are necessary for functionality.

When you say speed u...

programming? Really? A web fundamental?

Now, if you were talking about using JS to take over a users computer and load malware ... ok, I'd agree.


In that respect why even bother to learn CSS or XHTML, just stick with HTML 4 Transitional w/ SSI or PHP, since it's purely fundamental functionality, some people may not want to stay on the page though.
 
I would completely disagree, I'm not sure how juggling classes and methods is really any easier than just straight up writing a function, and writing things procedurally.

Your whole credit analogy is probably the stupidest thing I've ever read.

It really depends on what you want to do. if you want to write a simple calculator program, then yeah, just write some functions, attach them to the buttons, and be done with it.

if, on the other hand, you want to create a large, complex piece of software that is going to end up having hundreds or thousands of different functions, then juggling logically grouped namespaces and classes is going to be a lot easier to manage than juggling 1000 functions.

furthermore, it's just an easier way to think about large programs. whether working alone or in a team, it's a lot easy to tackle one concept at a time. it's easier to say, ok, this section is going to be for error logging. you can spend a week developing your error logging object and then never have to think about it again, except to make a simple call to errorlogger.log.

if it turns out that your program has an error, maybe it's logging something incorrectly, you don't have to go digging through mounds of code, but rather you know exactly where to go. if you want to add something into your error logging object, you add a member to your class and you're done.
 
It's pretty cool to watch you guys arguing about apples and oranges, but even though they're both round fruit, it's not at all fair to compare C# to C++, in hardly any aspects at all.

C# is most similar to Java, in that both are memory-managed, staticly typed, object oriented at the core, and come complete with a very large library for interacting with the OS and various other applications, including garbage completion.

Microsoft didn't write C# "for no reason", they wrote it because developing for Windows with COM and Win32 really, really sucks, and the alternative -- Java and JVM -- was draining their brainpool [developer following] by providing useful libraries for getting things done, and was cross-platform to boot.
Microsoft's strongest languages at this point were VC++ and VB, both of which are notoriously crappy and have a steep learning curve for anything useful. IIRC the C# compiler almost wasn't done in time for simultaneous release, and VB/VC++.Net were to be the original ".Net languages". .Net was created to provide a framework for writing great Windows apps, C# was created to make migration easy for Java programmers.

C++, as a language, is traditionally written to target lower level access to system components (memory registers, the call stack, etc) and allow the developer full, precise control over their data. Also, by forcing the developer to think about their data's size and location in memory, C++ encourages developers to use memory responsibly. This can be very important in performance-intensive situations. C#, in contrast, relies on the CILR and .Net's GarbageCollector to abstract away these implementation details and let a programmer focus on writing code, which will usually get v1.0 out the door faster.

To address the performance of unmanaged code (C++ without .Net) vs managed code (VC++.Net and C#.Net), take a look at Rico Mariani's blog -- Here's a case where two (popular/big-name) Microsoft engineers tried to write the same dictionary program, but the unmanaged (C++) version was slower than the managed (C#) version until the code was at version 5.
Rico Mariani's Performance Tidbits : Performance Quiz #6 -- Looking at the sixth cut

OOP is not supposed to speed up your development. It's supposed to organize your code into logical objects [and presumably logical file/directory/namespace structures, too]. If having organized code does speed up your development, then this is fantastic news for you, and you should develop exclusively in OOP. If having organized code also allows you to run unit tests, regression tests, code coverage tests and repeat your code less, then it's hard to argue that using OOP will not also result in faster development.

If you're talking strictly about speed-of-development, it's important to consider that the language you use isn't nearly so pivotal a factor as the tools that you use. UML code generation, an IDE with good macro support, and a robust set of frameworks related to the project you're working on will all GREATLY factor into your development speed. If I had tools for C++ as good as my python tools (django, pyunit, Aptana IDE), I could easily write my code in C++ very quickly, too. But these [same] tools don't exist for C++; I'd have to learn all about a new framework, a new[/similar] unit test suite, and a new IDE.


Well said. I have to admit that probably half the reason I like .net is that the visual studio ide is probably the best thing that ever came out of microsoft.
 
objects? We don't need no stinkin objects - if you can't do it in 3 lines of code or less, it isn't worth doing:

Code:
char a[80];
int e[4],g[5],c=100,h,i,j,k,b,f,s,t,p[4][1000];
int main(char*d){
return main((char*)(srand(time(&h)),
setjmp(p[2]),
(k=atoi((gets(a),
a+strspn(a," -"))))
&&(b=k),
b||++b,
j+=-j,
d=(char*)(&j),
setjmp(p[1]),
1<<1>j&&(k&=4>>3,
i=1<<k,
h<<=i+j,
setjmp(p[0]),
(h+=*d++-h)&&(-'1'^(h-='1'))&&(i<<=4,
setjmp(p[3]),
(i||!++i)&&(h--||(k|=i),
i/=2,
longjmp(p[3])),
longjmp(p[0])),
k^=-1,
k+=1<<037,
setjmp(p[3]),
k&&((--i<5&&1&k)&&(s=(rand()>>9)%0x4,
setjmp(p[0]),
t+=(rand()>>3)%015-t,
e[s]&(1<<t)&&longjmp(p[0]),
e[s]|=1<<t,
g[i]=t|++s<<"\004"["\004"[1]]|t),
k>>=1,
i+=1<<1,
longjmp(p[3])),
setjmp(p[0]),
putchar(0x20+!putchar(012+"(.7-A,G+@*J)/"[(017&(i=g[4-k]))*013%13])),
++k^005&&longjmp(p[0]),
putchar('\n'),
setjmp(p[3]),
putchar(0x1F+!!putchar(("BCDHS"[g[--k]>>4]))),
k&&longjmp(p[3]),
putchar('\n'),
j+=1<<0,
1^j||(d=(char*)gets(a)),
longjmp(p[1])),
s=1==(f=0),
i=0<<1,
setjmp(p[3]),
i<4&&(j=i+1,
setjmp(p[1]),
j<5&&((017&g[j])>(g[i]&15)&&(k=g[i],
g[i]=g[j],
g[j]=k),
j++,
longjmp(p[1])),
i++,
longjmp(p[3])),
setjmp(p[0]),
i--&&!((g[1+i]^g[i])>>4)&&longjmp(p[0]),
setjmp(p[1]),
--j&&(!(k=(g[j]&15)-(g[j-1]&017)+1)||(!(j-1)&&(8==-k)))&&longjmp(p[1]),
s+=3*!j|!(++i^17),
(j*=i*=4)&&(i=1),
setjmp(p[3]),
5-j<2&&(j=0,
setjmp(p[1]),
5-i>j&&((g[j]^g[j+1])&0xf?g[j]^=g[j]:(s+=((g[j]&0xf)>8&&f++,
!!g[j]*i)),
j++,
longjmp(p[1])),
i++,
longjmp(p[3])),
s=1^s?"AACEDJQZHello World"[s]-'A':!!f,
s+=(!i)*(6+12*s-!!s*(g[2]&017^0xa?8:-192)),
s--,
s*=b,
printf("$%d (%d) \n",
c+=s,
s+b),
i=0,
setjmp(p[0]),
6>i&&(j=1,
setjmp(p[1]),
0<=j&&(e[i+j]^=*(i-j+e+(j<<1)),
--j,
longjmp(p[1])),
i+=++i,
longjmp(p[0])),
longjmp(p[2])));
}
code comes from:

http://www.ioccc.org/2004/burley.c
 

I once asked a software engineer about the consequences of cutting corners in the design/modeling stage of an app and he said something to the effect of "borrowing against the future". My version may have come out sounding more retarded but it's suitability holds. Of course I'm really only talking about enterprise level apps, not 400 line scrapers.
I also have a feeling that rage thinks OOP is about putting functions in classes. It's much more than that. And it takes years of doing and reading to actually "get it".
 
It really depends on what you want to do. if you want to write a simple calculator program, then yeah, just write some functions, attach them to the buttons, and be done with it.

if, on the other hand, you want to create a large, complex piece of software that is going to end up having hundreds or thousands of different functions, then juggling logically grouped namespaces and classes is going to be a lot easier to manage than juggling 1000 functions.

furthermore, it's just an easier way to think about large programs. whether working alone or in a team, it's a lot easy to tackle one concept at a time. it's easier to say, ok, this section is going to be for error logging. you can spend a week developing your error logging object and then never have to think about it again, except to make a simple call to errorlogger.log.

if it turns out that your program has an error, maybe it's logging something incorrectly, you don't have to go digging through mounds of code, but rather you know exactly where to go. if you want to add something into your error logging object, you add a member to your class and you're done.

Your theory is based on writing bad procedural programming. If a program was that long, it would be as easy to get lost in an OO environment also. You act as if it's not possible to write bad OO code or something. OO is a waste of time and resources. I been programming procedurally since I started programming, because that's how I grew into it, there was no OO syntax. My best times ever where writing 32 bit assembly for Windows XP apps, which compiled to 90%+ exactly what I wrote initially. Yes you can still write 32 and 64 bit assembly for Windows and it'll blow everything out of the water.

You can say speed of development all you want, and I'll still cry "speed" because MS doesn't release a language that would be anywhere even close to the level of c/c++ or assembly. Which is so sad. I wonder why on general versions on windows run like shit? Yet there are plenty of developers that eat that shit up, which is why computer resource usage has gone up so much in recent years.

This has been Microsofts main focus over many years, at very least since the early VB days (believe me I was there and developing).

This may even sound crazy but the only language I would ever write OO code for is Java. That's how it has been from the beginning and it's cross platform.

Whether or not you want to defend C# is pointless. It can never compare to c/c++. It really is another attempt at getting developers to give in to MS and not care about coding for other systems. You have to look closer than what MS spews in your face. If you don't think MS is making money on it somehow you just ignorant.
 
I once asked a software engineer about the consequences of cutting corners in the design/modeling stage of an app and he said something to the effect of "borrowing against the future". My version may have come out sounding more retarded but it's suitability holds. Of course I'm really only talking about enterprise level apps, not 400 line scrapers.
I also have a feeling that rage thinks OOP is about putting functions in classes. It's much more than that. And it takes years of doing and reading to actually "get it".

Well I've never been an Enterprise level developer, thank god I'd blow my brains out. However your probably talking to a developer that came up through the OO standard, and works in it every day.

I would also love to know how procedural programming is "cutting corners"? Please enlighten me.

Company's don't develop procedural style and they haven't for a long, long time. These days it's REQUIRED to know OO style programming. So I'd say his point is moot.