Stories
Slash Boxes
Comments

News for nerds, stuff that matters

Slashdot Log In

Log In

Create Account  |  Retrieve Password

Is Visual Basic a Good Beginner's Language?

Posted by Cliff on Tue Mar 07, 2006 04:36 PM
from the would-you-write-"hello-world"-in-it dept.
Austin Milbarge asks: "Ever since the .NET framework came along a few years ago, Microsoft had promised VB developers that their language would finally be taken seriously. To be honest, I never understood why some non-VB developers thought of VB as a 'toy' language, but that is for another article. Anyways, Microsoft made good on their promise and transformed VB from an easy to learn language into an object oriented power house, with lots of OOP functionality thrown in. The old VB has been discontinued, and the new VB is no longer a simple language. With all the fancy changes, is VB still the great beginner's language it once was? Would you recommend it to a beginner over C#?"
+ -
story
This discussion has been archived. No new comments can be posted.
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More
Loading... please wait.
  • still C (Score:4, Interesting)

    by engagebot (941678) on Tuesday March 07 2006, @04:41PM (#14869928)
    For a true beginner, I still say regular old C is the way to go. Learn how variables work, function calls, passing arguments, pointers... There's something to be said with starting out compiling a single .c source file with gcc.
    • Re:still C (Score:5, Funny)

      by beavis88 (25983) on Tuesday March 07 2006, @05:01PM (#14870142)
      *sniff* brings back memories of my first C program

      % ./a.out
      Segmentation Fault
      %
      • Re:still C (Score:5, Funny)

        by ignavus (213578) on Tuesday March 07 2006, @10:26PM (#14872256)
        Oh, you mean...?

        #include <stdio.h>

        int main() {
            printf("Segmentation Fault\n");
            return 1;
        }
        • Re:still C (Score:5, Funny)

          by iphayd (170761) on Tuesday March 07 2006, @06:37PM (#14870946) Homepage Journal
          Oh come on.  You know you commented it.

          #include    //Most people put <stdio.h> in this line after #include, but I can't due to a software patent.
          int main()  //Main function is run every time
          {           //Begin Main function
              printf("Hello world\n"); //Print "Hello World" and start a new line
          }           //End Main Function
          • Re:still C (Score:5, Funny)

            by cdrudge (68377) * on Tuesday March 07 2006, @08:26PM (#14871738) Homepage
            You forgot to put your name, class, and project number up at the top of the file as comments. You will also lose point for not properly documenting the method's in and out parameters and how they might be modified. Finally, you also did not declare the "Hello World\n" as a constant to ease modification at a later point in time.

            ...or at least that was the way my first Hello World program was graded (although that was in C++).
    • Re:still C (Score:5, Interesting)

      by Pseudonym (62607) <ajb@spamc o p . n et> on Tuesday March 07 2006, @06:02PM (#14870671)

      On the contrary, C is one of the worst languages you can use as your first language. I've tried teaching C to first year students. You end up teaching the syntax and vagaries of C and not very much programming or computer science.

      One of the first things that beginning programmers want to do is do stuff with strings. Do you really want to explain C strings to people who have never programmed before? (There's a reason that microcomputer BASICs got peoples imaginations working. You can do stuff in it straight away!)

      Amusingly, about the only worse mainstream language I can think of for this purpose is VB. C's syntax and semantics at least have the advantage of being consistent. (In its defence, VB wasn't exactly designed to be the way it is. It was a fairly inextensible language which nonetheless got extended as the years progressed. "Congealed" might be a better word than "designed".)

      Save C for semester 2. Semester 1 should use a language which emphasises the basics. A functional language (say, Scheme or Haskell, but not ML; ML is a cool family of languages, but the syntax is way too arcane for a first language) would be my first choice, but even Java is a better choice than C. Hell, even C++ is a better choice. The syntax is at least as quirky as that of C, but at least it has a decent standard library which lets you do stuff straight away.

  • by Anonymous Coward on Tuesday March 07 2006, @04:43PM (#14869936)
    Python is a great starter language.
    • by XxtraLarGe (551297) on Tuesday March 07 2006, @05:55PM (#14870599) Journal
      I would argue that Javascript is even better for a newbie. No special software (only a web browser & text editor are needed), no compiler, and it runs on almost every platform available. It uses variables, arrays, loops and functions. You can make changes and see results almost immediately. Just refresh the page!
      • by dancpsu (822623) on Tuesday March 07 2006, @09:05PM (#14871930) Journal
        The reasoning behind this is that C teaches a lot of basic (easy and complex ) things such a variable and memory, functions, types, stucture, control flow...After new programmers have done it the hard way, Python is great to...

        Why would you want to start with "the hard way"? Bringing students into a EECS program might benefit from starting out with C or even assembler, but for anything else it is overkill. Python teaches variables, functions, structure, and control flow as well, so I don't see the disadvantage of starting with Python. The main thing that Python does not teach is memory management and some of the more interesting bugs that C can produce.

        The main reason to introduce a student to more than one language is to begin without the more complex parts of languages like object oriented code, and even structured code. The nice thing about python is that you can start with procedural code, continue through structured code, and end up at object oriented code, introducing only a few concepts at a time.

        With C, you have the problem of explaining the main() function or doing handwaving before you get around to explaining functions. With Java, you have the problem of classes even before you get to a main function. When even the most basic program requires structured or object oriented code, you have a problem teaching it to beginners. Take the following examples:

        Java:
        class myfirstjavaprog
        {
        public static void main ( String args[] )
        {
        System.out.println ( "Hello World!" ) ;
        }
        }
        Student asks:

        What is a class?, What is that funny looking bracket?, What is public?, What is static?, What is void for?, What is main?, What are the parenthesis for?, What is a String?, What is args?, How come there are funny square brackets?, What is system?, What does the dot do?, What is out?, What is println?, Why are there quotes there?, What does the semicolon do?, How come it's all indented like that?.

        C:
        #include <stdio.h>

        main() {
        printf ( "Hello, World!\n" ) ;
        }
        Student asks:

        What is #include?, What are the greater than and less than signs doing there?, What is stdio.h?, What is main? What are the parenthesis for?, What is the funny bracket for?, What is printf?, Why is hello world in quotes?, What is the backslash-N doing at the end?, What is the semicolon for?

        Python:
        print "Hello World"
        Student asks:

        What is print?, Why is hello world in quotes?

        Get the picture?
  • by edremy (36408) on Tuesday March 07 2006, @04:43PM (#14869941)
    Dear Republican National Committee: Would Hillary be a good president?

    Dear Osama Bin Laden: Would you like to come to my bar mitzvah?

    Dear Eagles fans: Would you be willing to sign Terrell Owens again?

  • Not really. (Score:5, Insightful)

    by c0l0 (826165) on Tuesday March 07 2006, @04:44PM (#14869949) Homepage
    While Visual Basic leads to quick and early (limited) success, your coding style and habits, and your perception of how to solve problems when programming in general, will be badly spoiled for a LOOONG time. I advise you to stay the fuck away from it. Go learn an interpreted, really well-designed language, such as Ruby. -> http://www.ruby-lang.org/ [ruby-lang.org]
  • by joekampf (715059) on Tuesday March 07 2006, @04:44PM (#14869954)
    I think it depends on what kind of a beginner it is. It is some hobbiest, or is it someone who is going to code for a living? If the answer is, someone who is going to code for a living then I think your first language should be a language that does not have a lot of bell and whistles. It should be a language that doesn't have a built in string class. One that makes you create arrays of characters. A language that doesn't provide you data structures right out of the box. A good language would be C or Pascal. Unfortunatly, new programers are learning Java, VB, etc right away. They have no concept as to what goes on under the covers. What it means when I go and create 1000's of strings. Or what it means to have a Hash Table vs a Stack, etc. Thanks, Joe
    • They have no concept as to what goes on under the covers. What it means when I go and create 1000's of strings. Or what it means to have a Hash Table vs a Stack, etc.

      An important point to note here, is that most programmers nowadays don't need to be aware of this. At least not to the extent they used to.

      More and more, business and industry needs software to simply automate simple tasks. As processing power increases, as memory space grows, it's not necessarily the case that the basic tasks people need done will grow to match them. Thus it becomes less important for a programmer to optimise or worry about optimisation.

      In addition, although more programmers will be required to create software, they will not be required to delve into programmings basic complexities. It's not required you know about opcodes and memory addresses to write HTML, and soon it will be th ecase that you won't need to know when coding business apps. At all.

      In short, the future legions of greasemonkey coders will be using Ruby on Rails, not C and FORTRAN. When the job gets too big, complex and nasty for them or a hardware upgrade to handle, they'll call in the high priced consultants who can still code in low level procedural languages.
    • by sedyn (880034) on Tuesday March 07 2006, @05:15PM (#14870291)
      You had me until you said "It should be a language that doesn't have a built in string class. One that makes you create arrays of characters. " Strings are just an abstraction, string foo = "bar" is pretty simple to use, and when the student starts doing more complex things (and learns all about arrays), they will realize that foo[i] is just a character in a vector. It is a much more modular way to teach.

      I agree that bells and whistles increase a languages' barrier to entry, but if they can be ignored (like a lot of the Java library) then it is a moot point.

      C is not, nor ever will be a newbie language. By the train of thought that it is best "to [know] what goes on under the covers", then the logical conclusion of that is to teach a simple assembly language, quickly followed by a compilers and systems course.

      In math, we typically teach younger students how to use a function or expression before we teach them how to prove it (consider it to be the process of giving them the specifications).

      Disclaimer: I have helped and witnessed many students learn C.
  • I'd go with C# (Score:5, Insightful)

    by hal2814 (725639) on Tuesday March 07 2006, @04:44PM (#14869956)
    Well Mr. Millbarge, I was going to set up the Disney Channel for you for free but now I'm not going to. If you're looking to learn .NET programming, I'd go with C#. It has a C-style syntax which is makes it easier to pick up other C-style syntax languages like C, C++, Java, etc. VB's OO aspects feel to me like they were bolted onto the language as an afterthought. You can experiment with both on Visual Studio. If you want, it might be a good idea to build a few sample projects each way to see which one you feel more comfortable with. You'll learn programming with either one, but you'll learn more you can use elsewhere from C#.
  • I'd personally like to suggest trying out Python [python.org]. Not only is it more powerful than, and just as easy to code as – in fact, often considerably easier than – Visual Basic, it also has the advantage of running on many other operating systems such as Linux and Mac OS X. It can take a little while to get the hang of, but once you know what you're doing it's effortless (take a look [sf.net] for yourself [sf.net] at a couple things I hacked together, for example).

    And yes, despite being a Linux hacker now I once did use Visual Basic, and I have to say it took way longer to learn VB than it did Python.
  • Good ... for what? (Score:5, Insightful)

    by rongage (237813) on Tuesday March 07 2006, @04:46PM (#14869982)

    I guess this depends on what you qualify as "good"...

    • VB is good if you want to write apps for Windows
    • VB is good if you don't care about other platforms
    • VB is good if you don't care much about stability
    • VB is good if you want to learn the "wrong way" to code (who needs type enforcement)
    • VB is good if you want code that you can read but not understand

    I'm sure there are other reasons to consider VB to be a "good" language. Since I don't do VB anymore (thank God), I have lost track of those reasons. I think I'll stick with C and PHP, this way when I get a customer that wants something that'll work on Solaris or QNX or AIX or HP/UX, I have half a chance of success!

  • by Bogtha (906264) on Tuesday March 07 2006, @04:50PM (#14870015)

    With all the fancy changes, is VB still the great beginner's language it once was? Would you recommend it to a beginner over C#?"

    "Is kicking puppies still a great way of attracting women, or do you recommend kittens these days?"

    VB was never a great beginner's language. It's wrong all over. The only thing that got it a reputation for being a "great beginner's language" was that you could draw the GUI in later versions * before you actually learnt how to write code, so you could get visually pleasing results immediately, whereas the competition at the time meant you actually had to learn how to use a GUI API (and consequently, how to write code) first.

    You want a good beginners language, look at Python. It's been used successfully in teaching environments for a while now. It enforces good practices like indentation and prohibits easy sources of bugs, like if foo = bar: O'Reilly have an article [oreilly.com] about Python for teaching programming that you might be interested in.

    * Yeah, the first versions of Visual Basic ran on DOS and didn't have the GUI builders that later versions did. I'm not quite sure what qualified them as basic of the "visual" variety, it's not like you had to type your code in with your eyes shut in other basics.

  • D'oh! (Score:5, Insightful)

    by stuffduff (681819) on Tuesday March 07 2006, @04:51PM (#14870026) Journal
    Microsoft's language offerings are the result of some other people's way of deciding how things should work. While Microsoft is not alone in this practice, they are the topic of this article. I can't even count the times that I have seen the following: A programmer sits at an IDE, and on the screen is something like this:

    Private Sub Command1_Click()

    End Sub

    What they will do in the process is to go out and grab a bunch of someone else's code, paste it in there, and change the names of a few things. It really bothers me that the product of this process is even called software. At best shouldn't it be called 'macro-gramming?' Sorry to be such a stickler, but does that programmer have any idea what really goes on when that button is pushed? When the end users need a change that is not an exposed property or method of the pre-packaged object, what can they do? They probably have more creative skills when it comes to making excuses than they do at actually programming. Hell, we've all done it. It seemed like a good idea at the time to just slap together a few goodies, make it look pretty and ship it out the door. But what you end up doing is letting someone else make all the really important decisions for you. If you're lucky enough to be able to satisfy all the demands you encounter that way then more power to you.

    In order to learn the principles of computer programming, less is more in my book. The more computer science you know, the less dependent on any particular set of tools you become. When code is dear and time consuming to write debug test and maintain, you will be absolutely amazed on how little of it you can get by on. Take the same algorithm and implement it in a couple different formats, languages, compilers, etc. See how many instructions it actually becomes when it gets run. See where different efficiencies of speed or size become important. Try some Python to see what can really be done in an interpreted environment. Try a C compiler. Try looking for a couple of algorithms and see which one performs better and be able to describe why. Then, no matter what tools you end up using, you will have a much better idea of what is going on, how to make it both secure and efficient from the start.

  • It's decent. (Score:5, Insightful)

    by FishWithAHammer (957772) on Tuesday March 07 2006, @04:59PM (#14870120)
    VB4 was my first "real" programming language (I used QBASIC for years, but that doesn't really count). Since then I've used VB5, VB6, and VB.NET; I am also fluent with C/C++, Java, PHP, and a few other languages.

    The long and the short of it is this: VB ain't bad.

    People will say that Visual Basic is "unstructured," and they're clueless. People will say that Visual Basic is slow, and they're one step up from clueless (VB5 and VB6 compiled to native code and could, when used correctly, rival Win32 C++ applications for speed; VB.NET compiles to the same CLR the rest of the .NET crap does).

    My personal view of the Win32 API is that the inventor didn't like people. Window creation is needlessly masochistic. VB takes that hassle away. I've written applications where the entire backend of the program is in C++ and used the VB interface just to call C++ DLL functions. It's doable. It works pretty well.

    Basically--VB is a viable language if you want to get something done *now* and don't care all that much about whether it's pretty. Would I use it for game programming? No (once was enough, a 2D RPG for a school project in sophomore year of high school). Would I use it to write something quick and dirty that I need immediately? Sure, and I'll be done before a C++ coder even has a window up and running.

    VB also has some pretty nice features that YFTL lacks. You can run the program without compiling it, in interpreted mode--very useful for bug-ferreting. Its class system pre VB.NET was baroque at best, but its built-in garbage collection/memory allocation on-the-fly and the fact that all arrays could be dynamic without external references made it fun to mess with.

    ~Ed
  • by Stephen Williams (23750) on Tuesday March 07 2006, @05:10PM (#14870229) Journal
    VB.NET is not the same language as the VB of yesteryear. It's semantically the same as C#, just with a somewhat VB-like syntax to ease VB programmers into working with .NET.

    If you're learning to code using the .NET framework from scratch, I can see no reason to choose VB.NET over C#, unless you happen to like VB-like keywords more than Java-like keywords.

    -Stephen
  • by jcwynholds (765111) on Tuesday March 07 2006, @05:14PM (#14870274)
    Python has been suggested. I also fall in the camp that say that python is probably the best learner language. Interpreter is freely available for all popular platforms. Python has enough of the niceties of VB (no strong types, easy array/dictionary construction, etc) while having enough features of a "real" programming language (shared memory, forking, etc) to teach about the concepts.

    Developing in an IDE like VS obfuscates and distances the programmer from the code. It's a necessary evil for developing some things. But throwing a learning user at the bubbly GUI to figure out the wizards for him/herself is akin to putting a new pilot in the seat of a 747. There is just too much there that would seem confusing.

    For these three reasons I would suggest python:

    1. All you need is a free (as in speech) interpreter and your favorite text editor.

    2. Documentation, howtos, sample code is easily available (there are plenty of good VB help sites out there, but I have found many many many fantastic samples of python).

    3. The syntax of VB and python would seem similar enough to a beginner.
  • Where to begin? (Score:5, Insightful)

    by Theatetus (521747) on Tuesday March 07 2006, @06:09PM (#14870736) Journal

    This question is wrong in so many ways...

    • VB is badly OO and confuses the language and the library too much.
    • VB is badly OO and OO is a bad paradigm to first learn to program in (and those two wrongs don't make a right).
    • VB ties you down to using Windows, and Windows is a bad environment to learn to program in.
    • VB does memory management the wrong way from a learning perspective. Rather than specifying allocators and destructors when neccessary you simply let objects fall out of scope.
    • VB does not have first-class functions and cannot fake them: function manipulation and functional paradigms (whether direct or through hacks to fake it like function pointers or true reflection) is crucial to learning to program well and should be started as early as possible.
    • VB teaches bad, verbose naming and programming habits.

    Good beginners languages are:

    • Logo (still the best)
    • Scheme
    • Forth
    • Ruby
    • Python
    These all allow you to do basic, functionally-oriented programming and then "graduate", if need be, to large-scale OO stuff.

    I would say Common Lisp is the best, but if you start programming using Lisp you'll never truly appreciate it because you assume all languages are that well-designed.

  • by xjimhb (234034) on Tuesday March 07 2006, @07:14PM (#14871245) Homepage
    For a language to teach beginning programming, you can't beat Pascal. Yeah, I know it is not fashionable at the moment, but it is hard to beat as an introductory language. And there exist extended versions of Pascal (like Delphi) that do a great job on OO programmimg (beginners should worry about OO AFTER they learn the fundamentals)

      • Re:No! (Score:5, Insightful)

        by AuMatar (183847) on Tuesday March 07 2006, @04:55PM (#14870075)
        I'd go the other way- don't start with any language that has manual garbage collection. If you don't learn and understand pointers early, you never quite get them. And if you don't get them, you have no idea how your code actually works under the hood. Without that, you end up writing inefficient buggy code that those who do understand computers need to fix for you.

        The only language a beginner should be using is C, C++, or assembly.
      • by wizbit (122290) on Tuesday March 07 2006, @05:06PM (#14870200)
        and I can always tell the difference in code between a real programmer and Visual Studio Wizards

        So can I. The #Region " Windows Form Designer generated code " seems to be a bit of a giveaway, no?
        • by Mattintosh (758112) on Wednesday March 08 2006, @01:03AM (#14872864)
          I've never used any of those languages, nor do I forsee the need to.

          I learned Logo in middle school.
          I learned QBASIC (ugh), Pascal (ugh), COBOL (ugh++), and RPG (!) in high school.
          I learned C, C++, VB, and Java in college.

          Those landed me a job doing CAD drawings for a small company.

          Eventually, I learned PHP on my own.

          That gave me enough "experience" to get a PHP job.

          So what have I learned?
          - All the languages I was told were going to be useful "in real life" have turned out to be mostly worthless (perhaps I haven't reached the level of the C++ stuff yet... I'm reserving judgement on that one).
          - Concepts are best learned from pseudocode, not from any particular language.
          - Comfortable syntax is learned from languages that are built around a particular concept.
          - Databases are the real reason OOP is a necessity. Data objects are your friends.
          - Most programmers are not architects/designers. They're too impatient. They jump right in and code a plate of spaghetti before thinking about how long they'll have to support that code. Some of them do fairly well at making things efficient, though, so you can't fault them all.

          I don't know ASM, so I tend to disagree with the hardcore "I coded in ASM uphill both ways naked in the snow blah blah blah bring me my cane, sonny" crowd. It's time to pull the plug, gramps.

          I also disagree with the academics that sip lattes, listen to jazz, wear berets, and say that everyone should learn and use [insert obscure language here] and piss and moan that it's not happening. Man up, nancy. The real world uses real tools for real work. Your toy languages are not going to be used. So take your Smalltalk, LISP, and Prolog back to your local Starbucks where you can "ooh" and "aah" about how "advanced" they are.

          If you're going to teach concepts, do so. Don't use a language as a crutch. Teach in pseudocode. Give examples of "how-to" in multiple languages. If you're going to teach a language, don't teach concepts. Teach what that tool is supposed to be used for. PHP is for dynamic web pages. C++ is for, well, damn near anything, but not dynamic web pages. Java is kinda like C++, but slower (unless you fuss with compiling natively), and can be multi-platform with minor changes. Perl is great for a quick, unreadable script. VB is nice if you want to spend lots of money for the ability to build piddly-shit apps that only you will use.

          And remember that not everyone learns things the same way. Someone who "just gets it" with C, C++, Java, PHP, and similar-looking languages might have an aneurysm just looking at code in Objective C. (I did.) Sometimes a familiar syntax matters. And yet, that same person (now bleeding out on the floor) might have no trouble at all deciphering Visual Basic or Pascal even though they're different. (Again, me.) That should tell the designers of the aneurysm language that the syntax is annoying, shitty, and induces aneurysms. (Go Smalltalk and Obj-C!)
      • Re:Bad idea (Score:5, Informative)

        by Just Some Guy (3352) <kirk+slashdot@strauser.com> on Tuesday March 07 2006, @06:12PM (#14870766) Homepage Journal
        OK, that's just mean.

        I totally disagree. Difficult? Complicated? Sure, but not mean. People who have learned assembler are the ones who understand why

        for(int y=0; y<ysize; y++) {
        for(int x=0; x<xsize; x++) {
        do_something_to_pixel(x,y);
        }
        }
        will usually run faster than
        for(int x=0; x<ysize; x++) {
        for(int y=0; y<xsize; y++) {
        do_something_to_pixel(x,y);
        }
        }
        even though both are conceptually identical. There are many things that seem perfectly reasonable in high-level languages that turn out to be a really bad idea once you learn what's going on in the hardware. I'm sure it's possible to learn that stuff without hitting the metal a few times, but I've never, not one single time, ever met someone who's done so.
          • by TheRaven64 (641858) on Tuesday March 07 2006, @07:05PM (#14871181) Homepage Journal
            or that your compiler wouldn't just optimize the code in the first example anyway

            It probably wouldn't in a language like C, since it is very difficult to diagnose side-effects. If, however, you pick a (functional, or functional-style) language that supports a foreach statement then you could say something like:

            foreach({x,y} in image) ->
            do_something(x,y).

            You compiler / runtime would then pick an optimal number of concurrent threads to do this with for your target environment.

            A lot of the time, going to a lower level is a bad idea because:

            1. You throw away semantic information that the compiler could have used for optimisation, and
            2. Your high-level language compiler is better at optimisation than you.
      • Re:Bad idea (Score:5, Insightful)

        by Mr. Underbridge (666784) on Tuesday March 07 2006, @06:45PM (#14871028)
        I agree that clicking on a wizard is not programming, but for someone who's just starting, built-in IDE tools (like wizards) can really help. As an expirienced user, I have no problem manually typing

        Bad idea. A new programmer should start with small command-line programs, and grow into coding bigger things *by hand* at first. Only when they understand exactly what the wizard does should they start using them as time savers.

        That, I think is the point of wizards - to save you time, not to do for you things you don't understand. When new users start using wizards, bad code WILL result.

            • Re:No. (Score:5, Insightful)

              by Rei (128717) on Tuesday March 07 2006, @05:26PM (#14870384) Homepage
              I agree. I would recommend:

              1. (Insert favorite *simple* language here): simple meaning that you can't do much with it, and what you can do is very easy and obvious. Qbasic comes to mind, as that's what I learned with, but there are many which fit the bill.

              2. C: Turn the language from a magical tool that does what you want (poorly) into something that actually reflects the underlying architecture. Helps the programmer understand why their previous language performed so badly. Widely used (and mimicked), so they know a useful language.

              3. C++: Now that they understand what's going on under the hood, teaches them good coding habits - objects which clean up their own memory, const variables, object oriented programming, generic programming, etc. Widely used (and mimicked)

              4. Any other language(s) here: they already know the basic concepts, so it's just implementation details.

              You *could* have them branch out at any other stage, assuming that they've already learned the prerequisites. For example, once they've just learned to program (#1), they could do basic python. They won't be able to write maintainable or fast code, however. If that's not a problem, power to them!

              I haven't used VB since Windows 3.1. I understand it's really changed ;) Back then, I wrote a pi calculator in VB. It ran half as fast as the equivalent program in Qbasic. That's really saying something; I dropped VB as soon as I saw that.
        • Re:No. (Score:5, Insightful)

          by Decaff (42676) on Tuesday March 07 2006, @06:32PM (#14870910)
          Once they get to the point where they start prefixing every function with a module name, then its time to introduce them to OOP and Java.

          I disagree. This is the wrong way to introduce OOP, as it treats it as some sort of high level way of managing code rather than as a fundamental technique that can be used at all levels. My view is that the best way is to teach something like Smalltalk or Ruby initially in a procedural style, and then show that everything in the language is an object, with methods and properties. Then, perhaps, the compromises made in a language like Java can be explained. One thing that should definitely be avoided is C - for goodness sake teach a safe language like Pascal instead. Beginners should not be dealing with pointers to memory (most developers never need to anyway).

          OOP needs to be taught at the start, not as an optional add-on.
            • Re:No. (Score:5, Interesting)

              by PeterBrett (780946) on Tuesday March 07 2006, @07:23PM (#14871312) Homepage

              All fresher Engineers here (Cambridge, UK) have to learn to program 8086 assembler. Except they don't get an assembler, they have to enter the program using a hex keypad on the front panel.

              Yes, in 2006. And no, I'm not joking, I did it last term.

    • by object88 (568048) on Tuesday March 07 2006, @05:28PM (#14870394)
      On the other hand, I would not recommend a beginner to use Visual Studio or any of the IDE where you drag-and-drop to program.

      Yeah, because programming boilerplate includes, class, main, and event handling code (which does nothing on its own) is really going to get someone hooked. Screw that. Give that code to a new programmer for free and let them add in something that does something fun, obvious, and interesting right away. That's how you'll get 'em hooked.

      Look at it this way... no-one got hooked on pot because they liked making bongs.
    • Re:Why not both? (Score:5, Informative)

      by anomalous cohort (704239) on Tuesday March 07 2006, @06:08PM (#14870732) Homepage Journal
      code looks almost identitical

      There is a lot of devil in the details of that almost, however. C# has developer API comments yet VB.NET does not. VB.NET has more support for shadowing than C#. C# has useful convenience functions like using that VB.NET does not. VB.NET has convenience functions for late binding (considered harmful) and case-insensitive string comparisons that C# does not. C# has more object oriented features such as operator overloading that VB.NET does not. The list goes on and on.

      • Re:Why not both? (Score:5, Informative)

        by Samus (1382) on Tuesday March 07 2006, @06:34PM (#14870929) Journal
        Time to update to .net 2.0. A lot of the discrepencies that you mention are now gone.
        • Re:Why not both? (Score:5, Interesting)

          by lrichardson (220639) on Tuesday March 07 2006, @10:00PM (#14872162) Homepage

          I hate to jump on the Java/VB/C/C++ lovefest, but the question was about a teaching language.

          Why not something simple - like Pascal? Basic? A step up, but COBOL?

          Yes, there are advantages to learning a language like C++ that you will end up using, but it's not necessarily the best approach.

          One of the biggest complaints I have about a lot of the VB and C++ programmers I've been exposed to is a complete lack of fundamentals. Code that works, but sucks because they never bother to think of the background stuff ... memory, performance to name two. Multithreading is not a topic to start beginners on.

          OTOH, how many people here can take the Nth root of a number by hand? At some point, you have to accept that automation is here stay. The first time I hit VB, after doing a large project in CICS, I was really happy. Tons of things that were a royal pain became relatively painless. Then the downside ... performance sucks compared to CICS. Database interface sucked. Debugging really sucked. Generally, I like having my code in one place, not scattered over screens, buttons, rollovers ...

          Things are better now. SQL/SQL Server work really well together. A proper front end in some tools can be done FAST and painlessly (e.g. Brio (Now Hyperion Intelligence, to better play with the faster database around!)

          I've seen a couple of multi-hundred-million dollar projects die, because of innappropriate choice of languages (VB for one, VC++ the other). But management bought into the argument New=Better.

          Personally, I think C++ is a horrible choice as a starter language. Then again, I started on a virtual assembler language, designed strictly for teaching. Kinda like Pascal.

    • Re:Why not both? (Score:5, Insightful)

      by Durandal64 (658649) on Tuesday March 07 2006, @06:18PM (#14870826)
      It depends on what you're trying to teach the person. If you want to teach someone how to write programs using programming languages, then yes, things like VisualBasic will probably be good starting points. But if you want to teach someone the fundamentals of computer programming, including proper memory management, efficient use of resources and how the compiler is going to see the human-readable code, then I think that C is still the best introductory programming language out there.

      Basically, I'm saying that students of computer science shouldn't start off with VisualBasic. But if you're a hobbyist or a network engineering type who needs to be able to write working scripts and stuff like that, sure, VisualBasic is as good as any other ultra-high-level language, I suppose.
      • Re:Why not both? (Score:5, Interesting)

        by I'm Don Giovanni (598558) on Tuesday March 07 2006, @11:08PM (#14872441)
        C?? Pleas...

        If you want to learn the *fundamentals* of programming, Structure and Interpretation of Computer Programs is the best book I've seen, and it deals not at all with "memory management", "efficient use of resources", or other archane crap (since it uses Scheme :p). The issues that you're talking about are becoming more and more irrelevant, just as machine-language programming did (for 99.9999% of source code).

        Not that Scheme itself is used much beyond the academic. But a lot if its ideas are showing up in modern programming platforms that are much in use (memory management, closures, etc). I wouldn't tout scheme as a "beginning programming language" but I'd tout it as a "programming language to learn the fundamentals of programs for a potential CS major". I'd tout C for neither.
      • This is crap. (Score:5, Informative)

        by sultanoslack (320583) on Wednesday March 08 2006, @06:47AM (#14873864)

        Sorry, but this is a very wrong view of what computer science or programming really are. There are three things being mixed up here which are largely separate bodies of knowledge and any decent computer science program separates them out as such.

        • Algorithms - This is the core of Computer Science; learning to think like a programmer and to break problems down into logical chunks is tantamount to becoming a computer scientist. With this at the core, a language should then be chosen that most facilitates this. When I started college 10 years ago we used Pascal in our lab for our algorithms courses (which notably were just about implementing the theory we covered in the course), and that at the time was a very sane choice. Java's a pretty sane choice these days. Lots of things are really, but something like C forces people trying to learn how to think in algorithms to be side tracked by all of the tedious low level junk. (For reference, I'm a low-level C systems programmer at a large software company, so this isn't some "C sucks" wankery.)

        • Computer Organization - This is usually cross listed in electrical or computer engineering, and for good reason. This is where you figure out how hardware works. C and assembler (RISC works fine here) are appropriate in such a course. As this course naturally follows introductory algorithms courses, you can here put the theoretical constructs learned there in context.

        • Operating Systems - Memory management doesn't belong in either of the above and certainly saying that you learn "memory management" with C is pretty silly. You learn how to malloc and free stuff. Whoopee. "Memory management", in any sort of interesting way, is better treated in an Operating Systems course where you can track what exactly is happening down from the programming language, into the OS and finally at the hardware side. It can be put in context of what actually happens when you call malloc and what that means. Fundamentally, you don't understand anything more about memory management from a basic C course than if somebody tells you in a Java course "When you use 'new' some memory will be allocated, and when you're done with that object there's a thing called a garbage collector that will eventually come and give that memory back." Memory management is a non-trivial topic and one that certainly goes deeper than simple allocation.

        So, is VB suitable for any of this? Not really. VB is kind of orthogonal. Like you said, it's fine for someone who needs to solve certain sets of tasks, but doesn't want or need to bother with really understanding deeper concepts.

    • Java snobs? (Score:5, Funny)

      by PhYrE2k2 (806396) on Tuesday March 07 2006, @07:40PM (#14871437)
      for those of you C++/Java snobs that think VB/C# are for morons


      Please don't associate those Java users with us C++ (and C for the procedural of us) users.
      *shudders* I feel so dirty.
            • Re:Why not both? (Score:5, Interesting)

              by AKAImBatman (238306) * <akaimbatman.gmail@com> on Tuesday March 07 2006, @05:28PM (#14870395) Homepage Journal
              Rapid Application Development. Tools like Visual Basic and other 4GL langauges [wikipedia.org] were intended to improve software development speed and accuracy by providing tools whereby the computer automatically did as much of the work as possible. The most common type of RAD tool was GUI Builders like Visual Basic. (Though there were quite a few for database development, networking, gaming, and other areas.)

              The primary issue with such tools is that they tend to fail spectacularly as soon as they get outside their intended area of use. Visual Basic, for example, came along just in time to be abused for Client/Server development. Since VB wasn't designed with networking in mind, it was often faster and easier to do the code in C (and later Java). VB's life as a GUI front-end was extended thanks to the ability to link in COM+/ActiveX controls for more complex tasks, but GUIs eventually morphed into far more complex variants that the GUI Builder couldn't easily support. (Ever notice how you can spot a Visual Basic application visually?)

              At that point, most serious programmers realized that they were taking longer to hack VB to do what they wanted rather than just coding it from scratch in another language. So they gave up on it and moved back to C/C++/Delphi and the new-kid-on-the-block, Java.
        • Re:Why not both? (Score:5, Insightful)

          by Phisbut (761268) on Wednesday March 08 2006, @10:51AM (#14875420)
          Disclaimer : My experience with VB stops at VB6. I have steered away from all that .NET stuff since then.

          I may sound old-school, and then maybe I am, but "programming" and "writing a program" seem like two different things to me. If all you want to do is write programs, then I think about any high-level language could be appropriate because programs can be written in any language and high-level ones hide all the ugly computer part from the programmer.
          However, if you want to learn to program, then you need some serious commitment, and you need to learn (or at least understand) assembly language, and then work with C or C++ or a language that actually lets you play with bits and bytes.

          One of the lead computer people at one of the major oil companies told me once that all that their Visual Basic programmers do is to write meaningless little programs that noone ever uses.

          VB is a quite high-level language, and is easy to learn (or at least fiddle with). That lead to a whole bunch of VB coders who pretends they are programmers because they can write programs. However, all they do is write lines after lines of VB code (and most of it is *click* *click* *click* through the UI), with no understanding whatsoever of what is really going on when the program runs. It is really nice when, with little effort, a program can be made and performs the desired operation. However, when a bug arises, those coders that don't understand the low-level stuff might not understand the source of the bug (and then sometimes blame it on someone else), and therefore can't debug their own application.

          Every programming language is a tool, and when a job needs be done, one should use the best tool for the job. I suppose there are some jobs for which VB is the best tool. However, when someone claims to be a programmer and only knows VB, chances are he doesn't program, he just knows where to click to create a dialog with some buttons. If he knows VB and C++, Java, PHP, Perl, Python, etc., he's more likely to understand what he does, and will probably write a good VB program if he needs to.

          Know your needs and know your wants. If you want to learn how to program, don't choose a language that will hide all the ugly stuff from you, because you need to know about the ugly stuff.

    • Re:Yes. (Score:5, Insightful)

      by MythoBeast (54294) on Tuesday March 07 2006, @05:55PM (#14870604) Homepage Journal
      Sixty hours? A year? You make this amount of practice sound like a lot of time. I'm fifteen years into C++ and I hack kernel and could write my own compiler. Nonetheless, I'm still learning about some of the things it can do.

      I'm not a programmer because I love to program, I program to do a function, to make some part of my job easier.

      This is a truly key statement in his post. You have to ask yourself what you want to do with programming. If you want to write software that'll do interesting things for your own personal use, then VB is probably about right. It won't produce elegant code, but it will produce simple functionality fairly quickly, and you can build your own tools with it. In a society where computer illiteracy is becoming as problematic as written illiteracy, this kind of programming language definitely has a place.

      On the other hand, if you want to produce programs for OTHER people to use, you shouldn't flinch at spending a year learning how to make a programming language do what you want it to do. It's like mechanical or civil engineering. If you want to build a shed out back or a trebuchet then go ahead and pickup some parts at Home Depot and start nailing things together. If you want to design anything that ANYONE ELSE is going to use, like an office building or an automobile, then you had better figure out how to use something a little more sophisticated than 2x4's.

      A lot of people will come back with the argument that there should be something easier to learn than C or C++ for the beginners, but in my experience that's a flawed argument. Learning a language is an investment in time, and most people are unwilling to discard that investment. Instead, they've bolted on afterthoughts to the programming languages to make them more functional. For that reason, VB6 was always a horse designed by a committee. If you want to learn how to program like a professional then start with a professional language.

      The one exception is Assembly Language. Every time I try to teach people how to program I start by teaching them the Twelve Instruction Programming System (TwIPS), which is a simplified subset of assembly. With this they learn the bare bones of what any piece of software does, how algorithms function inside a computer, and what the instructions are really doing.

      And when they get around to learning C++ they find it considerably less tedious than if they had hit it directly.
    • Re:Bad idea (Score:5, Insightful)

      by dedazo (737510) on Tuesday March 07 2006, @06:40PM (#14870974) Journal
      Mmmkay, since I've noticed that you're some sort of shining star around here and your insight tends to get modded up regularly, I'll try to be as polite as possible, even though my first instinct is to say you're full of it.

      Your first problem is that you're mashing VB6 and VB.NET. They, for all the similarities in syntax, are really completely different languages with a completely different runtime going underneath. Now, since this is a question about a "beginners language", it's unlikely that someone would mistakenly rant off about VB6, since it has been largely deprecated. Anyone starting with "VB" now would use VB.NET, with or without the pretty IDE. I think that's clear enough from most of the posts I've seen so far in this article.

      Some of your points are valid vis-a-vis VB6. It was completely tied to the IDE (the preprocessor infact was the IDE) and it supported a semi-OO model, which is like saying "a little bit pregnant", but regardless, most of these limitations were related to the fact that VB6 was essentially a COM server and consumer platform. The lack of implementation inheritance is a good example of that - since COM is a binary spec, it does not support it. Polymorphism and aggregation OTOH, which permeate COM, were. So pre-VB.NET, "Visual Basic" was both hobbled and all the better off for being tied to intrinsically to the COM spec. VB6 didn't behave like it did because someone at Microsoft didn't have anything better to do, it did because it had to play by the rules - the rules of COM. You could either understand these limitations (if they were to you) and live with them, or just use C++. By the time Microsoft released ATL, COM-centric coding in C++ became extremely easy - I always chuckle at the quitessential "yeah I know C++ and VB sucks, but I don't know a replacement for the GetObject() function and my life suxx0rz" claim from people who think it's really cool to bash VB because it has a large following of hobby developers that know nothing about software design, as if it was impossible to do anything meaningful with it. But I digress.

      Along comes VB.NET, which is essentially the VB6 syntax ported to the .NET CLR. Like the other "mainstream" languages that target the CLR/CLI, VB.NET is essentially a full OO implementation, unless you're willing to call Python or Java "toys" because they don't support multiple inheritance or the concept of friend classed as implemented by C++.

      So you have a fully OO language (for all practical purposes) with generics, operator overloading, partial classes, etc. that can be easily decoupled from the IDE - all you need is a text editor and the compiler, though most people prefer the IDE route. It just happens to look like BASIC. Other than that, I think it's a good beginner's language. Wouldn't you agree?

      That's as far as VB currently goes... the rest of your rant is just the usual bashing a platform that is no longer supported or in active development, nor understood (obviously) by people like you.