I agree with the basic premise of the parent of this thread. It definitely has a lot to do with the sacrifice that developers make in regards to their programming language of choice.
There are a lot of entry-level positions in the commercial software industry where people with no real experience in programming are expected to be able to use powerful unsafe languages like C and C++. A strong theoretical foundation in these languages are a good complement to knowing how to write C or C++ code because it keeps one cautionary in the development of an application.
The analogy that C and C++ allows the programmer to blow his whole foot off is something that should not be underestimated. Poor software can be written in any language, but proper engineering techniques for developers who use unsafe languages will prepare them for real world applications and prevent many of the most common software programming errors. More thorough testing and analysis is good, but the worse programming errors are logic errors, and inexperienced programmers using unsafe languages always results in serious logical errors. Legislation is not answer, better education into the design and use of programming languages in application development is the answer.
I've been in this type of situation and the problem is that the managers had no prior programming experience. If a corporation places "IT" managers, above true programmers and software engineers in the Software and Engineering departments, then they will have problems anyway. It is best to allow SE's to work with programmers, and keep the business IT people in the marketing departments. Some managerial types call sharp programmers who dislike their ignorance Prima Donna's because they do not like being challenged on subjects that they are invariably inept to solve. It is one thing to tell a programmer to do his job, and it is another thing to assume that all because you can replace the person, that you are qualified to judge the quality of assurance that the programmer brings to the company, team, or product. This is the classic "Commandos" syndrome. Most big successful companies leave their commandos alone to be creative. Apply the rules after the products get finished right.
The major underlying support of.NET for "web services" will be based on XML and SOAP. These are open protocols that do not require any type porting. All of the other stand alone programs on Windows, will be no different from writing a Windows app today in C++. If you don't use MFC, you can port ANSI C++ code to other platforms. Dot Net will enable developers to write GUI applications using Winforms that can be distributed stand alone or for the web.
All Microsoft is doing is creating an IDE with tight integration to make development easier. Some of the features will probably encourage bad code design.
The ability to inherit without regards to the language the class or component was written in is fine. But it does not encourage good design for use without a CLR runtime. So there will be a continuous gap between academic programming that encourages software engineering principles and "Windows Programming" that will require adaptation.
The idea is nothing new. It is one of the topics you learn in a "Introduction to Programming Languags Course" if you are a CS or CE major. Languages such as C++, Java, and BASIC, are said to have their own "virtual machines" regardless whether or not they are called that. The compiler and linker act as a virtual machine for compiled languages.
Conceptually every language is represented as a virtual abstract layer for the human programmer. At the machine level there is either a compiler, interpreter, or hybrid of both before the code is translated to interact with specific system hardware. All the CLR does is take this concept to a higher level of abstraction.
So now languages like VB, C# and C++ are being linked on the CLR and it handles the low level translation. You can even effect the way the CLR handles low level translation through the use of what Microsoft calls "Assemblies". Nothing new here, most programmers will not have to go that low-level. Microsoft is introducing.NET as the next computing platform to do distributed computing. A true port to any.NIX variant is unlikely. They will allow interaction between applications, but you will need a Windows enabled machine to use it.
They are providing a higher level of abstraction. Instead of learning low level machine language, you can make adjustments to "Assemblies" written in XML syntax. All of this is intrinsically designed for the Windows Operating Systems. A real port to other Operating Systems means that.NET is no longer the only "virtual machine" for all standard end user applications and distributing computing. They do not want that. But on the bright side, the same distributing computing can be accomplished using SOAP, XML, and PHP on a FreeBSD server with a better uptime than any Windows box, especially those new XP servers.
Microsoft is a company and their business strategy has always been to make computing easy for those who are not as technical. For instance, there are businesses who have to use computer software, and that doesn't mean they are efficient at using computers.
For instance, I have an associate that works for MS, and he uses EMACS on FreeBSD to prototype code. He doesn't handle GUI development, so he doesn't have to use Visual C++ or VB to polish up the code. I'm sure you all know that MS coders are not complete idiots? Now we all know that EMACS is a true editor for the professional programmer.
However, my mother would have no use for EMACS. But she can use Word easily enough. I think we have to be realistic and assess the value of computer software and tools based on the utility of them. In countries that are developing, I would recommend Linux, and all it would require is some good coders and the willingness to produce software.
I always find these posts to be amusing, because my colleagues and I use PROLOG to write out software, and many of the C/C++/Java/VB crowds are none the wiser. All of the buzz is around Java, C, and VB. But anyone that understands Computing Science can tell you that there are far more superior languages available. Languages such as Scheme and Prolog come to mind.
Many of the programmers of today do not come from an academic background, most of them are straight out of trade school or MSCE training. They have no real use for a language like PROLOG. Even though PROLOG is by far more logically suited to the human mind and a 4th or 5th generation language now. It works extremely well in a procedural or object oriented context if those styles are needed. Yet it is powerful enough to produce complex Expert systems and Knowledge Bases that can "deduce" information through the matching of other information. Microsoft is not a threat to those of us who are either students, or career Computer Scientists.
I think you're forgetting one important factor. Microsoft is going to outsource most of the work for this console, and by the time they are done. They will have a standard team that can tweak and push the Xbox to its limits.
I think a lot of people are afraid of what Microsoft can do if they do get a strong hold in the video game market. They should be afraid, if there is one thing about Microsoft that reigns true, they do not like to lose, and they will go to any extreme to crush their competitors.
I think the other major players need to focus on improving their market positions, and maintain superior products. They will not be able to compete with Microsoft in regards to sheer muscle, and they should not try. Nor should they buy into the myth that the Xbox is destined to failure, that is a joke.
Technology is one of those fields where "public awareness" is next to zero. However, there is no such thing as a machine that cannot be altered, and given the implications that this type of control policy could have, we could see a definite shift in the paradigms of computer scientists world wide.
We'll always have innovative computer scientists, and I think that what we do as consumers, and computer enthusiasts is very important. We cannot sit by like sheep without informing people about the actions that they can take to prevent this type of thing from becoming widespread.
The music industry lobbying groups, computer manufacturers, and software companies are all feeling the bite from a decline in consumer spending right now. We have the power, not them. If consumers don't feel the need to support the companies that are inclined to impose these types of restrictions on machines that we pay for, these companies will be forced to change their policies.
More and more I'm seeing a defeatist mentality coming from a lot of people who are supposed to be very involved with the industry of computers. The power of the DOJ and the corruption of congress are so prevalent because the people have become like sheep.
I agree with you. Programming in VB has its limitations due to the verbose nature of the syntax which results in a lot of bloat. However you could avoid the bloat if you properly designed it by using modules. I prefer C and C++ over most languages including Java. But I know how to code in C, C++, VB and Java.
Here is the problem with your code. Even though you make a good point, your comparison is really not pointing out the weaknesses of VB, it is pointing out the weaknesses in your knowledge of coding in VB.
Your code is not carefully detailed enough. You could have saved time by declaring those variables in a structure in VB, and not attempt to write it as you would write a program with a C-Like syntax.
For example:
Type example
i as Integer
s as String
t as String
td as String
sd as String
End Type
Now initialize those variables in a sub to display the result.
Like this:
Private Sub Command1_Click()
Dim myExample As example
i = 4 'On the fly intialization
s = "VB String" 'On the fly initialization
t = "Another String" 'On the fly initialization
sd = Mid(s, i, 1)
td = Mid(t, i, 1)
If sd = td Then 'Assign the value of td to sd then display the 4th character in the string.
txtDisplay.Text = sd
Else 'Otherwise display the 4th character in the string td as a reminder
txtDisplay.Text = td
End If
End
The result is t based upon my remake of the code. It returns the 4th character in the string t. You could set it to read and display a whole string or word with a little modification.
If you look closely, the code is more organized, and you can make changes more easily. You can also "reuse" the code now. At first you could do none of these things without retyping. In VB6, it is better to create structures when you want to manipulate small amounts of string or integer data. Don't just code in a sub. Use class modules if you want to manipulate larger amounts of data more efficiently.
It is a different way from doing things in Java, but the very same thing can be done in VB with elegance and style if done properly. Your code won't be bloated when you use structures. You can create an instance of the type where you need it and then initialize the variables on the fly. There are more words, but it is easier to read and it does the exact same thing as cryptic looking Java code. A high level language is supposed to be closer to human comprehension. Languages like XML demonstrate this perfectly. VB is not so different in effect.
I've been using VB.NET beta, and these problems have been addressed. But in this case, you could have easily created a structure in a module and just referenced the code to keep it clean and organized. When using type structures in VB, the memory is handled automatically so you don't have to destroy it as you would an object instanced from a class in VB to keep things tidy. You could have used an array and cut all that stuff in half. I like whitespace, so it looks longer and I decided to show you based on what you typed.
This may appear to be a big blow for Microsoft, and a win for Sun. However, as developers there should be more of an emphasis placed on teaching programmers how to choose the right tool for the job. Since MS Java was not compatible with Sun Java, then it didn't
necessarily deserve to thrive.
Forget about the personal fued between MS and Sun, as developers we're not capitalizing off of their egos. Our job is to create rock-solid deployments for our customers.
At the same time, developers for the Windows platform should be familiar with most of the development tools for Windows and know how to choose the right tool for the job. Developers for the *nix variants should be able to do the same.
Visual Basic, Visual C++, Delphi, and Java are all mainstream languages that can be used for application development or "enterprise" development on Windows. C, C++, Cobol, and Java can be used on *nix variants.
All of this "enterprise" talk is only relevant if the developer knows how to be flexible. A good programmer could create a rock-solid enterprise deployment using Visual Basic "webclasses" and create a DHTML application on the server side if he takes the time to design it in a logical and clear fashion. It is a useful tool if used properly, with less time and overhead.
As a matter of fact, I was speaking with this guy the other day, and he didn't even know how to take advantage of using modules and classes in VB App development. It is a powerful feature of the language, and it keeps the programmer in tune when they do development in another language like C++ or Java.
Nevertheless, he was not taught the real value of learning how to write successful modules and classes. He was not taught how to design object-oriented apps, that can have linear algorithms within an event driven model. So his whole source code was just "event-driven" vb code with no coherent structure.
The problem today is everybody is bias, including Universities. These technical training courses are teaching their students how to create programs, but they are not teaching them the science and art of programming. Once you know how to program, it doesn't matter what language you use. The true potential of these tools are not being harnessed because of fanaticism. I'm a programmer, not some cult follower. I wish more of these young programmers would learn that, and stop following zealots.
I agree with the basic premise of the parent of this thread. It definitely has a lot to do with the sacrifice that developers make in regards to their programming language of choice.
There are a lot of entry-level positions in the commercial software industry where people with no real experience in programming are expected to be able to use powerful unsafe languages like C and C++. A strong theoretical foundation in these languages are a good complement to knowing how to write C or C++ code because it keeps one cautionary in the development of an application.
The analogy that C and C++ allows the programmer to blow his whole foot off is something that should not be underestimated. Poor software can be written in any language, but proper engineering techniques for developers who use unsafe languages will prepare them for real world applications and prevent many of the most common software programming errors. More thorough testing and analysis is good, but the worse programming errors are logic errors, and inexperienced programmers using unsafe languages always results in serious logical errors. Legislation is not answer, better education into the design and use of programming languages in application development is the answer.
SubtleSeer
I've been in this type of situation and the problem is that the managers had no prior programming experience. If a corporation places "IT" managers, above true programmers and software engineers in the Software and Engineering departments, then they will have problems anyway. It is best to allow SE's to work with programmers, and keep the business IT people in the marketing departments. Some managerial types call sharp programmers who dislike their ignorance Prima Donna's because they do not like being challenged on subjects that they are invariably inept to solve. It is one thing to tell a programmer to do his job, and it is another thing to assume that all because you can replace the person, that you are qualified to judge the quality of assurance that the programmer brings to the company, team, or product. This is the classic "Commandos" syndrome. Most big successful companies leave their commandos alone to be creative. Apply the rules after the products get finished right.
SS
The major underlying support of .NET for "web services" will be based on XML and SOAP. These are open protocols that do not require any type porting. All of the other stand alone programs on Windows, will be no different from writing a Windows app today in C++. If you don't use MFC, you can port ANSI C++ code to other platforms. Dot Net will enable developers to write GUI applications using Winforms that can be distributed stand alone or for the web.
All Microsoft is doing is creating an IDE with tight integration to make development easier. Some of the features will probably encourage bad code design.
.NET as the next computing platform to do distributed computing. A true port to any .NIX variant is unlikely. They will allow interaction between applications, but you will need a Windows enabled machine to use it.
.NET is no longer the only "virtual machine" for all standard end user applications and distributing computing. They do not want that. But on the bright side, the same distributing computing can be accomplished using SOAP, XML, and PHP on a FreeBSD server with a better uptime than any Windows box, especially those new XP servers.
The ability to inherit without regards to the language the class or component was written in is fine. But it does not encourage good design for use without a CLR runtime. So there will be a continuous gap between academic programming that encourages software engineering principles and "Windows Programming" that will require adaptation.
The idea is nothing new. It is one of the topics you learn in a "Introduction to Programming Languags Course" if you are a CS or CE major. Languages such as C++, Java, and BASIC, are said to have their own "virtual machines" regardless whether or not they are called that. The compiler and linker act as a virtual machine for compiled languages.
Conceptually every language is represented as a virtual abstract layer for the human programmer. At the machine level there is either a compiler, interpreter, or hybrid of both before the code is translated to interact with specific system hardware. All the CLR does is take this concept to a higher level of abstraction.
So now languages like VB, C# and C++ are being linked on the CLR and it handles the low level translation. You can even effect the way the CLR handles low level translation through the use of what Microsoft calls "Assemblies". Nothing new here, most programmers will not have to go that low-level. Microsoft is introducing
They are providing a higher level of abstraction. Instead of learning low level machine language, you can make adjustments to "Assemblies" written in XML syntax. All of this is intrinsically designed for the Windows Operating Systems. A real port to other Operating Systems means that
SubtleSeer
Microsoft is a company and their business strategy has always been to make computing easy for those who are not as technical. For instance, there are businesses who have to use computer software, and that doesn't mean they are efficient at using computers.
For instance, I have an associate that works for MS, and he uses EMACS on FreeBSD to prototype code. He doesn't handle GUI development, so he doesn't have to use Visual C++ or VB to polish up the code. I'm sure you all know that MS coders are not complete idiots? Now we all know that EMACS is a true editor for the professional programmer.
However, my mother would have no use for EMACS. But she can use Word easily enough. I think we have to be realistic and assess the value of computer software and tools based on the utility of them. In countries that are developing, I would recommend Linux, and all it would require is some good coders and the willingness to produce software.
I always find these posts to be amusing, because my colleagues and I use PROLOG to write out software, and many of the C/C++/Java/VB crowds are none the wiser. All of the buzz is around Java, C, and VB. But anyone that understands Computing Science can tell you that there are far more superior languages available. Languages such as Scheme and Prolog come to mind.
Many of the programmers of today do not come from an academic background, most of them are straight out of trade school or MSCE training. They have no real use for a language like PROLOG. Even though PROLOG is by far more logically suited to the human mind and a 4th or 5th generation language now. It works extremely well in a procedural or object oriented context if those styles are needed. Yet it is powerful enough to produce complex Expert systems and Knowledge Bases that can "deduce" information through the matching of other information. Microsoft is not a threat to those of us who are either students, or career Computer Scientists.
Peace
SS
I think you're forgetting one important factor. Microsoft is going to outsource most of the work for this console, and by the time they are done. They will have a standard team that can tweak and push the Xbox to its limits.
I think a lot of people are afraid of what Microsoft can do if they do get a strong hold in the video game market. They should be afraid, if there is one thing about Microsoft that reigns true, they do not like to lose, and they will go to any extreme to crush their competitors.
I think the other major players need to focus on improving their market positions, and maintain superior products. They will not be able to compete with Microsoft in regards to sheer muscle, and they should not try. Nor should they buy into the myth that the Xbox is destined to failure, that is a joke.
SS
Technology is one of those fields where "public awareness" is next to zero. However, there is no such thing as a machine that cannot be altered, and given the implications that this type of control policy could have, we could see a definite shift in the paradigms of computer scientists world wide.
We'll always have innovative computer scientists, and I think that what we do as consumers, and computer enthusiasts is very important. We cannot sit by like sheep without informing people about the actions that they can take to prevent this type of thing from becoming widespread.
The music industry lobbying groups, computer manufacturers, and software companies are all feeling the bite from a decline in consumer spending right now. We have the power, not them. If consumers don't feel the need to support the companies that are inclined to impose these types of restrictions on machines that we pay for, these companies will be forced to change their policies.
More and more I'm seeing a defeatist mentality coming from a lot of people who are supposed to be very involved with the industry of computers. The power of the DOJ and the corruption of congress are so prevalent because the people have become like sheep.
SubtleSeer
Here is the problem with your code. Even though you make a good point, your comparison is really not pointing out the weaknesses of VB, it is pointing out the weaknesses in your knowledge of coding in VB.
Your code is not carefully detailed enough. You could have saved time by declaring those variables in a structure in VB, and not attempt to write it as you would write a program with a C-Like syntax.
For example:
Type example
i as Integer
s as String
t as String
td as String
sd as String
End Type
Now initialize those variables in a sub to display the result.
Like this:
Private Sub Command1_Click()
Dim myExample As example
i = 4 'On the fly intialization
s = "VB String" 'On the fly initialization
t = "Another String" 'On the fly initialization
sd = Mid(s, i, 1)
td = Mid(t, i, 1)
If sd = td Then 'Assign the value of td to sd then display the 4th character in the string.
txtDisplay.Text = sd
Else 'Otherwise display the 4th character in the string td as a reminder
txtDisplay.Text = td
End If
End
The result is t based upon my remake of the code. It returns the 4th character in the string t. You could set it to read and display a whole string or word with a little modification.
If you look closely, the code is more organized, and you can make changes more easily. You can also "reuse" the code now. At first you could do none of these things without retyping. In VB6, it is better to create structures when you want to manipulate small amounts of string or integer data. Don't just code in a sub. Use class modules if you want to manipulate larger amounts of data more efficiently.
It is a different way from doing things in Java, but the very same thing can be done in VB with elegance and style if done properly. Your code won't be bloated when you use structures. You can create an instance of the type where you need it and then initialize the variables on the fly. There are more words, but it is easier to read and it does the exact same thing as cryptic looking Java code. A high level language is supposed to be closer to human comprehension. Languages like XML demonstrate this perfectly. VB is not so different in effect.
I've been using VB.NET beta, and these problems have been addressed. But in this case, you could have easily created a structure in a module and just referenced the code to keep it clean and organized. When using type structures in VB, the memory is handled automatically so you don't have to destroy it as you would an object instanced from a class in VB to keep things tidy. You could have used an array and cut all that stuff in half. I like whitespace, so it looks longer and I decided to show you based on what you typed.
Peace, SubtleSeer
This may appear to be a big blow for Microsoft, and a win for Sun. However, as developers there should be more of an emphasis placed on teaching programmers how to choose the right tool for the job. Since MS Java was not compatible with Sun Java, then it didn't necessarily deserve to thrive.
Forget about the personal fued between MS and Sun, as developers we're not capitalizing off of their egos. Our job is to create rock-solid deployments for our customers.
At the same time, developers for the Windows platform should be familiar with most of the development tools for Windows and know how to choose the right tool for the job. Developers for the *nix variants should be able to do the same.
Visual Basic, Visual C++, Delphi, and Java are all mainstream languages that can be used for application development or "enterprise" development on Windows. C, C++, Cobol, and Java can be used on *nix variants.
All of this "enterprise" talk is only relevant if the developer knows how to be flexible. A good programmer could create a rock-solid enterprise deployment using Visual Basic "webclasses" and create a DHTML application on the server side if he takes the time to design it in a logical and clear fashion. It is a useful tool if used properly, with less time and overhead.
As a matter of fact, I was speaking with this guy the other day, and he didn't even know how to take advantage of using modules and classes in VB App development. It is a powerful feature of the language, and it keeps the programmer in tune when they do development in another language like C++ or Java.
Nevertheless, he was not taught the real value of learning how to write successful modules and classes. He was not taught how to design object-oriented apps, that can have linear algorithms within an event driven model. So his whole source code was just "event-driven" vb code with no coherent structure.
The problem today is everybody is bias, including Universities. These technical training courses are teaching their students how to create programs, but they are not teaching them the science and art of programming. Once you know how to program, it doesn't matter what language you use. The true potential of these tools are not being harnessed because of fanaticism. I'm a programmer, not some cult follower. I wish more of these young programmers would learn that, and stop following zealots.
SubtleSeer