Programming Languages
Hey everyone. I'm interested in relearning some programming, and wanted some suggestions about what language I should learn first. I know there are some programmers that frequent these forums, so now's your chance! I haven't done any programming in about 7 years, and that was with Turbo Pascal (6.
Hey everyone. I'm interested in relearning some programming, and wanted some suggestions about what language I should learn first. I know there are some programmers that frequent these forums, so now's your chance!
I haven't done any programming in about 7 years, and that was with Turbo Pascal (6.x?) for DOS.
I am not initially interested in compiling anything for Linux, just Windows. However, it would be a nice feature if the language was either the same of similar on multiple platforms.
I will be recieving a free eval copy of Visual Studio .NET 2003 from the Windows Server 2003 launch event at the end of the month, and unless I am mistaken, that package will include C#, C++, Visual Basic, and J#. I think that I would like to learn one of these languages, and I have heard great things about C/C++, so that would probably be my starting point.
I don't really recall any of the language that I learned years ago, but I do recall some concepts, so hopefully the learning curve will not be too steep.
I know that Java/J# will probably be highly recommended, but I am curious to the future of the language, with the ongoing litigation between MSFT and Sun, and what impact that will have on the language. Also, while I'm asking about expected life expectancy of the languages, I would like any input on other programming languages life expectancy as well.
I haven't done any programming in about 7 years, and that was with Turbo Pascal (6.x?) for DOS.
I am not initially interested in compiling anything for Linux, just Windows. However, it would be a nice feature if the language was either the same of similar on multiple platforms.
I will be recieving a free eval copy of Visual Studio .NET 2003 from the Windows Server 2003 launch event at the end of the month, and unless I am mistaken, that package will include C#, C++, Visual Basic, and J#. I think that I would like to learn one of these languages, and I have heard great things about C/C++, so that would probably be my starting point.
I don't really recall any of the language that I learned years ago, but I do recall some concepts, so hopefully the learning curve will not be too steep.
I know that Java/J# will probably be highly recommended, but I am curious to the future of the language, with the ongoing litigation between MSFT and Sun, and what impact that will have on the language. Also, while I'm asking about expected life expectancy of the languages, I would like any input on other programming languages life expectancy as well.
Participate on our website and join the conversation
This topic is archived. New comments cannot be posted and votes cannot be cast.
Responses to this topic
Well.. since you have some experiences with Pascal I would definitly recommend you Delphi.
It's cross-platform (latest edition for Windows is Delphi 7 and for Linux there's Kylix 3. Kylix has also C++ IDE, so you may just as well develope C++ applications) and you can get it for free from Borland's website.
Anyway, here're some free eBooks you might find useful:
Bruce Eckel's Free eBooks (Java, C++, C#)
Essential Pascal (Pascal)
Essential Delphi (Delphi)
Good luck!
It's cross-platform (latest edition for Windows is Delphi 7 and for Linux there's Kylix 3. Kylix has also C++ IDE, so you may just as well develope C++ applications) and you can get it for free from Borland's website.
Anyway, here're some free eBooks you might find useful:
Bruce Eckel's Free eBooks (Java, C++, C#)
Essential Pascal (Pascal)
Essential Delphi (Delphi)
Good luck!
For power and portability, C/C++ is the way to go. I have started playing around with C# lately though, and I really like the language (along with the .NET framework libraries).
For those interested in C# who don't have VS.NET, I would recommend the free SharpDevelop IDE. They're still calling it a beta, but from what I've seen it's really solid...
For those interested in C# who don't have VS.NET, I would recommend the free SharpDevelop IDE. They're still calling it a beta, but from what I've seen it's really solid...
I dig C#, and VB.NET is pretty easy to pick up if you want to fiddle with it. Plus, if you use the .NET languages you can write webpages in ASP.NET with them as well which is pretty nice. The debugging and server integration ability of VS.NET is quite nice. However, I haven't ever seen the free .NET IDE that's shown so I'll have to check that out. The comments on Delphi seem to ring true from what I have heard, and that there is very little to moving the code from Windows to Linux other than a recompile in many cases. However, I *thought* there was a C# compiler for Linux already, so in that case the language should have cross platform support.
Quote:.NET vs. Java is what it's coming down to I think @ least, here...
I seriously think Java will win out over .NET. The main reason for this is taht Java is already being used and tought in the Academic world due to the fact that it is powerful, easy to use and most importantly, free. You can download several powerful, free Java IDEs for free. Most have the drag-and-drop style for building windows aps like VB started. As far as I know there is no .NET developer kit that is free of charge, thus I have never used .NET. To be fair though, I know very little about .NET software. I think the academic use of Java will give it the boost it needs, much like it did C in the early days.
I seriously think Java will win out over .NET. The main reason for this is taht Java is already being used and tought in the Academic world due to the fact that it is powerful, easy to use and most importantly, free. You can download several powerful, free Java IDEs for free. Most have the drag-and-drop style for building windows aps like VB started. As far as I know there is no .NET developer kit that is free of charge, thus I have never used .NET. To be fair though, I know very little about .NET software. I think the academic use of Java will give it the boost it needs, much like it did C in the early days.
Quote:Java has a "RAD" style development environment? That's news to me...
Look up JBuilder. Excellent program for building java applications/applets. Unlike what I have seen in Visual Basic however, these tools for java require that the programmer know something about the underlying code to set up event handlers. Its quick and easier to set up.
Quote:
Thing is though, that alot of what you learn in academia does not really carry over in practice to the working world...
So, why do I say that you might be wondering.
Well, for me this is reaching back pretty far in time,around 1994 when I started working as a professional programmer!
I came out of MOSTLY a DOS/UNIX Operating System type, Assembler & C-C++ based background in school... w/ alot of Pascal & BASIC as well (other languages that I was taught like Fortran, & COBOL for instance, I have yet to use in the working world over a decade now).
I thought C was the best thing to happen to computers since sliced bread when compared to Assembler language @ least, & these two were my primary tools in academia @ least. They were decent to work with building character mode console apps in DOS/UNIX etc. but not so good for Windows apps I felt, VERY complex.
See, once I hit the working world however, BASIC was mostly everywhere though in VB/Access with "RAD" (rapid application development) tools & not in a DOS/UNIX character mode environs!
(First in Win16 code & shortly afterward, alot of porting it to Win9x OS' from Win3.x into Win32 code.)
The tools were VB & Access mostly for me (& later, linking that to backend servers like SQL Server, Oracle, & DB2), & it was a HUGE change from using DOS character mode tools that I liked in C/C++ & Assembler mostly, some Turbo Pascal!
I began to notice that for QUICK production, VB & Delphi were much better than building Information Systems @ least (the 'bread & butter' work out there for most programmers) & you could build working systems in 1/5th the time it would take in C/C++ in Windows @ least.
The point I guess I am trying to make is, that in academia, alot of professors & such are guys that may or may not have had actual out-in-the-working-world real world experience...
True some may have, some may have acted as consultants, but I would wager many have not.
So what they are teaching may or may not be in actual use out there... it may be good stuff, but the question is:
Does it prepare the student for the toolsets he may be confronted with out there in the real world?
* Most of what I got out of college @ least with dual degrees in this field, was principles... mostly.
Yes, the languages helped that I picked up on but by taking many of them by overloading my schedule, it was like taking diff. forms of martial arts I would guess as a sort of analogy... you started to see that what you can do in one, you can do in another (BUT, you have to know the questions first to ask from one language to another, thus what I meant about principles).
As far as teaching principles over specific languages goes, I think any respectable program teaches the concepts of programming as opposed to a language. However, you cannot teach the concepts without a language. In my experience, mosts institutions use C++ and Java. The fact that the folks coming out of school are familier with java is a huge incentive to use it because of familierity.
Quote:P.S.=> Personally, I think that for Win32 app building & Information Systems work that Access, VB, VC++, & Delphi are the tools to learn & use on the front end & later learn SQL Server & Oracle (if not DB2 as well)... For web fiends, it'd be ASP/.NET &/or Java... learn them ALL, be prepared for what is REALLY out there & don't limit yourself... apk
I agree completely. Java is not for Win32 application building. From my experience the performance is severely lacking, especially in the department of memory usage. Most of the Java IDEs are written in java and JBuilder would take over a minute to load on my XP1700 laptop. There are plusses and minuses to any language and like I said, I know very little about .NET. I don't see visual basic going away anytime soon either, nor should it. I am just making a case for Java.
Look up JBuilder. Excellent program for building java applications/applets. Unlike what I have seen in Visual Basic however, these tools for java require that the programmer know something about the underlying code to set up event handlers. Its quick and easier to set up.
Quote:
Thing is though, that alot of what you learn in academia does not really carry over in practice to the working world...
So, why do I say that you might be wondering.
Well, for me this is reaching back pretty far in time,around 1994 when I started working as a professional programmer!
I came out of MOSTLY a DOS/UNIX Operating System type, Assembler & C-C++ based background in school... w/ alot of Pascal & BASIC as well (other languages that I was taught like Fortran, & COBOL for instance, I have yet to use in the working world over a decade now).
I thought C was the best thing to happen to computers since sliced bread when compared to Assembler language @ least, & these two were my primary tools in academia @ least. They were decent to work with building character mode console apps in DOS/UNIX etc. but not so good for Windows apps I felt, VERY complex.
See, once I hit the working world however, BASIC was mostly everywhere though in VB/Access with "RAD" (rapid application development) tools & not in a DOS/UNIX character mode environs!
(First in Win16 code & shortly afterward, alot of porting it to Win9x OS' from Win3.x into Win32 code.)
The tools were VB & Access mostly for me (& later, linking that to backend servers like SQL Server, Oracle, & DB2), & it was a HUGE change from using DOS character mode tools that I liked in C/C++ & Assembler mostly, some Turbo Pascal!
I began to notice that for QUICK production, VB & Delphi were much better than building Information Systems @ least (the 'bread & butter' work out there for most programmers) & you could build working systems in 1/5th the time it would take in C/C++ in Windows @ least.
The point I guess I am trying to make is, that in academia, alot of professors & such are guys that may or may not have had actual out-in-the-working-world real world experience...
True some may have, some may have acted as consultants, but I would wager many have not.
So what they are teaching may or may not be in actual use out there... it may be good stuff, but the question is:
Does it prepare the student for the toolsets he may be confronted with out there in the real world?
* Most of what I got out of college @ least with dual degrees in this field, was principles... mostly.
Yes, the languages helped that I picked up on but by taking many of them by overloading my schedule, it was like taking diff. forms of martial arts I would guess as a sort of analogy... you started to see that what you can do in one, you can do in another (BUT, you have to know the questions first to ask from one language to another, thus what I meant about principles).
As far as teaching principles over specific languages goes, I think any respectable program teaches the concepts of programming as opposed to a language. However, you cannot teach the concepts without a language. In my experience, mosts institutions use C++ and Java. The fact that the folks coming out of school are familier with java is a huge incentive to use it because of familierity.
Quote:P.S.=> Personally, I think that for Win32 app building & Information Systems work that Access, VB, VC++, & Delphi are the tools to learn & use on the front end & later learn SQL Server & Oracle (if not DB2 as well)... For web fiends, it'd be ASP/.NET &/or Java... learn them ALL, be prepared for what is REALLY out there & don't limit yourself... apk
I agree completely. Java is not for Win32 application building. From my experience the performance is severely lacking, especially in the department of memory usage. Most of the Java IDEs are written in java and JBuilder would take over a minute to load on my XP1700 laptop. There are plusses and minuses to any language and like I said, I know very little about .NET. I don't see visual basic going away anytime soon either, nor should it. I am just making a case for Java.
Quote:As far as I know there is no .NET developer kit that is free of charge, thus I have never used .NET.
Actually, the .NET Framework SDK is free from Microsoft:
Microsoft .NET Framework Software Development Kit
It's just the IDE (Visual Studio) that they charge an arm and a leg for. Which is why I mentioned SharpDevelop, as it gives you a free IDE to go with the SDK.
Actually, the .NET Framework SDK is free from Microsoft:
Microsoft .NET Framework Software Development Kit
It's just the IDE (Visual Studio) that they charge an arm and a leg for. Which is why I mentioned SharpDevelop, as it gives you a free IDE to go with the SDK.
Quote:Quote:As far as I know there is no .NET developer kit that is free of charge, thus I have never used .NET.
Actually, the .NET Framework SDK is free from Microsoft:
Microsoft .NET Framework Software Development Kit
It's just the IDE (Visual Studio) that they charge an arm and a leg for. Which is why I mentioned SharpDevelop, as it gives you a free IDE to go with the SDK.
Thanks! I'll try to remember to check this out in a couple of months when I have access to a decent connection.
Actually, the .NET Framework SDK is free from Microsoft:
Microsoft .NET Framework Software Development Kit
It's just the IDE (Visual Studio) that they charge an arm and a leg for. Which is why I mentioned SharpDevelop, as it gives you a free IDE to go with the SDK.
Thanks! I'll try to remember to check this out in a couple of months when I have access to a decent connection.
Quote:However, I *thought* there was a C# compiler for Linux already, so in that case the language should have cross platform support.
This is probably what you were thinking of: Mono. I haven't tried it, but it's a cool idea...
Quote:Question 1: What is Mono exactly?
The Mono Project is an open development initiative sponsored by Ximian that is working to develop an open source, Unix version of the Microsoft .NET development platform. Its objective is to enable Unix developers to build and deploy cross-platform .NET Applications. The project will implement various technologies developed by Microsoft that have now been submitted to the ECMA for standardization.
Quote:Question 3: What technologies are included in Mono?
Mono contains a number of components useful for building new software:
This is probably what you were thinking of: Mono. I haven't tried it, but it's a cool idea...
Quote:Question 1: What is Mono exactly?
The Mono Project is an open development initiative sponsored by Ximian that is working to develop an open source, Unix version of the Microsoft .NET development platform. Its objective is to enable Unix developers to build and deploy cross-platform .NET Applications. The project will implement various technologies developed by Microsoft that have now been submitted to the ECMA for standardization.
Quote:Question 3: What technologies are included in Mono?
Mono contains a number of components useful for building new software:
- A Common Language Infrastructure (CLI) virtual machine that contains a class loader, Just-in-time compiler, and a garbage collecting runtime. A class library that can work with any language which works on the CLR. A compiler for the C# language. In the future we might work on other compilers that target the Common Language Runtime.
[/list:u]Windows has compilers that target the virtual machine from a number of languages: Managed C++, Java Script, Eiffel, Component Pascal, APL, Cobol, Perl, Python, Scheme, Smalltalk, Standard ML, Haskell, Mercury and Oberon.
The CLR and the Common Type System (CTS) enables applications and libraries to be written in a collection of different languages that target the byte code
This means for example that if you define a class to do algebraic manipulation in C#, that class can be reused from any other language that supports the CLI. You could create a class in C#, subclass it in C++ and instantiate it in an Eiffel program.
A single object system, threading system, class libraries, and garbage collection system can be shared across all these languages.
I am going to reveal my ignorance once again... What is C#? I have only heard of it here.
C# is a .NET language developed by MS, and turned over to a standards body (I can't think of which, but I remember it being funny that MS did something with a new language that Sun couldn't be troubled to do). It did receive final approval, which is something I am pretty amped about as a Linux user since now you will see more widespread use of it. I had a Java class and tried doing some of the same stuff with C#, and C# is much nicer to work with, and kicks out faster code even while using a heavy duty IDE like VS.NET that "helps" you out a great deal. I was using BlueJ and Sun's Java compiler in Linux and Windows while using the VS.NET compiler for C# in Windows. It was depressing to run any Java apps in Linux or Windows, since you had to hoist up the great weight of the Java VM in order to run anything. Plus, general issues with JVMs in Linux makes Java work a bit of a hassle. I did, however, like the language and it was much simpler than I thought it would be (I was, at best, a VB gimp with all my ASP code work). It's just slow. So very, very slow.
Quote:Java has that instant garbage cleanup, correct
Not exactly. From what I understand, there is a process in the VM that runs occasionally and deallocate any memory areas that are not connected with a pointer. I know for a fact that it is not instant. On several occasions, I have had to explicitly call the garbage collector.
Thanks for the info everyone!
I will probably mess around with C#, .NET and delphi as well this summer if time promitts.
Not exactly. From what I understand, there is a process in the VM that runs occasionally and deallocate any memory areas that are not connected with a pointer. I know for a fact that it is not instant. On several occasions, I have had to explicitly call the garbage collector.
Thanks for the info everyone!
I will probably mess around with C#, .NET and delphi as well this summer if time promitts.
ISO, QS, and other standardizing bodies have purposes that are way beyond making it easier to replace one person with another. I would go further as to say that it doesn't pertain to that at all. Generally, it allows for a supplier to state how it will follow a set of rules, and how it will deal with issues as the come up. This ranges from how quotes are handled, to the moving of engineering drawings, and as far out as HR with the tracking of personnel training. The point of being certified is to show perspective clients that you do, in fact, have systems in place to handle all aspects of business in a given standard. In my case, I am an internal auditor for our company as well, and we follow ISO 9001/QS 9000 standards. We are stating (in documentation) how we handle issues that come up from the customer, how we deal with suppliers, how we track documentation, etc and then prove this every 6 months via a 3rd party audit with our original certifying body. They look for major and minor violations, and can point out areas of improvement via "observations" that can be used by our quality and management team to modify and extend our existing systems.
Java and .NET both have garbage collection, and while I was told that explicitly calling it in Java is a pain it's supposed to be a little easier in .NET, but still frowned upon just the same.
Java and .NET both have garbage collection, and while I was told that explicitly calling it in Java is a pain it's supposed to be a little easier in .NET, but still frowned upon just the same.
OK, following the ISO standards mean exactly that; you are following a set of standards. Now, if you had two potential vendors to work with, and one followed the exact same set of standards that you do (or in many cases exceed it), which would you go with? Both offer the same thing for the same price, and have proven that they have fully documented systems in place for quality issues with any product that you receive from them along with how they work with their own vendors. We have several customers that come to our plant and audit us to make sure that we are doing what we claim to. They follow the QS standard as well, and just want to make sure that we are "up to snuff" as it were. It sounds like you might have been on the outside of this, and not in a manufacturing atmosphere where you would be more exposed to this. Generally, anything with a great deal of quality control benefits greatly from this. Documentation of anything is a good thing, and documenting what you do in the same way as others you work with is even better, and as a coder you should be able to relate. That's all this is, no conspiracy to take away jobs or anything like that.
Well, the topic has definately lost its point, but oh well. Basically, the point of being standardized is to make interoperability between companies similar, so that they speak the same language with respect to quality. If anything, having all this documentation *increases* workload and causes you to have more people for things such as "Six Sigma" (our HR manager pointed this out to me earlier when I was talking about this post). Being a properly documented and standardized company does *not* make it easier to replace people. This hasn't been the case with any of our customers, or any of their customers (you know, the Big 3, one of which made both the cars you bought recently). It just doesn't work like that. Work environments can be heavily documented to make training a position easier and have nothing to do with ISO. ISO standards are there as rules in some cases, and guidelines in others. They are not instructions on how to do jobs, nor do they require a company to make detailed directions on how to do every job so that a newbie can walk in and take care of it. Engineering doesn't work like that, Quality doesn't, Manufacturing doesn't, Materials and Accounting don't, nor IT or HR.
Quote:I was just hoping that their compilers engines during optimizations would match any & all NEW/MALLOC type memory allocating calls with corresponding FREE/DELETE ones etc. (like C/C++ have) & at least issue a warning to the coder... because the code will STILL run, no doubt, but will leak if those calls are not linted out or @ least matched 1 for 1...
This would actually be quite difficult (maybe impossible) to do reliably at compile time. Consider this (pseudo)code:
Code:
This may not be a good example of "real" code, but bear with me, I'm just illustrating a point. Here I really should have called free(...) on the pointer that wasn't returned, because it goes out of context. If the above "test" decided to return ptr1, then ptr2 should now be freed back to the heap. But it CAN'T free ptr1, because that will be used elsewhere. This being a simple example, maybe your extremely smart compiler could insert the correct free's right before my returns.
But then, how will it know when it's safe to free the other one? About the only way to do this is to insert a bunch of code in all your functions to keep track and check when that pointer can no longer be accessed. Only then is it safe to free. And all this extra code it threw in would basically be an implementation of garbage collection.
For lazy programmers (sorry, but that's the way I see it), garbage collection is nice to abstract yourself from memory allocation. But, there is definitely a performance penalty that comes with it. It is usually much more effective manage that yourself, because you can more easily find the opportune times to do the free's.
</preach>
This would actually be quite difficult (maybe impossible) to do reliably at compile time. Consider this (pseudo)code:
Code:
some_pointer CreateItem(int param1, float param2, ...){ PointerType ptr1, ptr2; ptr1 = malloc(sizeof(MyObject)); ptr2 = malloc(sizeof(MyObject)); (Do operations on ptr1 and ptr2) if ( test(ptr1,ptr2) ) return ptr1; else return ptr2;}
This may not be a good example of "real" code, but bear with me, I'm just illustrating a point. Here I really should have called free(...) on the pointer that wasn't returned, because it goes out of context. If the above "test" decided to return ptr1, then ptr2 should now be freed back to the heap. But it CAN'T free ptr1, because that will be used elsewhere. This being a simple example, maybe your extremely smart compiler could insert the correct free's right before my returns.
But then, how will it know when it's safe to free the other one? About the only way to do this is to insert a bunch of code in all your functions to keep track and check when that pointer can no longer be accessed. Only then is it safe to free. And all this extra code it threw in would basically be an implementation of garbage collection.
For lazy programmers (sorry, but that's the way I see it), garbage collection is nice to abstract yourself from memory allocation. But, there is definitely a performance penalty that comes with it. It is usually much more effective manage that yourself, because you can more easily find the opportune times to do the free's.
</preach>
OK APK, one sentence for ya: you can't document skill. If your talents can be simply documented away in a manner that anyone can do them, then you deserve to be replaced. If you have actually experienced this, then so be it. I have never seen this in any company I have ever worked at, nor have I ever heard of the ISO, QS, or any other process contributing to this. Yes, places may need customization because their individual items of production are different, but there are many processes that are the same regardless of what you do. Things like "What do you do when a complaint comes in?" or "How is a sales quote handled?" are what is documented, yet the people that even did this documentation 7 years ago are still at work because they do their jobs well. People that have skill are ones that can contribute beyond the daily tasks of a job. I have documented a great many things I do at work, yet I wouldn't have been fired to make way for a cheaper person. Documentation wasn't even much of an issue until I gave them my 2 months notice (yep, 2 months, I have a fair amount of respect for this company so I let them know as soon as I knew I was moving) and now I am training the HR manager in some of the things I do, and I am helping in the search for my replacement by going over resumes and sitting in on interviews. This is how all the other companies that we deal with behave, including our sister companies in Illinois and Switzerland that have certifications.
CUViper, I am in total agreement with you on garbage collection. I figured it was a lazy way to do things as well, and specifically asked how to destroy used objects. However, I was *strongly* advised (both in the text and in class/lab) not to adjust this behavior in Java or the results may not be what you expect. Not entirely encouraging, would you say?
CUViper, I am in total agreement with you on garbage collection. I figured it was a lazy way to do things as well, and specifically asked how to destroy used objects. However, I was *strongly* advised (both in the text and in class/lab) not to adjust this behavior in Java or the results may not be what you expect. Not entirely encouraging, would you say?