Is Visual Basic a Good Beginner's Language?
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#?"
Writing managed code in VS.NET using either VB or C# is mostly a matter of different syntax and control structures - most code looks almost identitical. This makes learning both a good idea.
And for those of you C++/Java snobs that think VB/C# are for morons, I just got done reading two articles on strategies for high-performance multi-threading of applications and sockets programming. Say what you want, but VB has come a long way from being a beginner language.
It is a completely unstructured language that promotes very bad coding practices and allows for poorly writen applications to run anyway.
MABASPLOOM!
Clicking on a wizard isn't the same thing as programming. To really understand what's going on and get used to writing programs, it's essential to type every letter of the code yourself. My first CS class taught me Java, which I'd say is a better idea than VB. I go so far as to say that it's a better idea to learn assembler first so that you know what's REALLY going on inside that computer.
For Christ's sake, stay away from that crap. I recommend you start with Python or C++, they're both extremely impressive languages.
Per Aspera Ad Astra.
no matter how much you modify it.
anyway, i don't see a point in vb. c# is very easy and if you really must take language for learing, why not chose delphi? pascal was always better than basic as a language for beginners and modern pascal dialects (like delphi) are as powerful as any other programming languages.
Conservatism: The fear that somewhere, somehow, someone you think is your inferior is being treated as your equal.
The question arises - do you want to program for any computer or device? If you do, you might want to avoid VB because you're likely to get too dependant on the admittedly great Windows ("forms") design software. However, if all you ever intend to do is stick with Windows, and all the people who are likely to use what you write use Windows, then VB is an excellent and easy to learn development environment. Just my two pence.
This tagline was transcoded to result in at least one smirk. If you experience failure to smirk, please consult your Gen
I have always recommended C# as a beginner language simply because it is very organized. VB (during the old days) was easier to learn because alot of it was behind the scenes, but now that everything is put out in the open with VB, C# is a better option because it's less confusing. It just has this "orgamizedly arranged" feel to it.
Viable Slashdot alternatives: https://pipedot.org/ and http://soylentnews.org/
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.
Han shot first.
No. That was easy. Nothing to see here, move along, move along
Yes this is my real UID. No, it was not bought from EBay.
Python is a great starter language.
20 GOTO 10
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?
"Seven Deadly Sins? I thought it was a to-do list!"
Building a form in NetBeans is just as easy as VB, plus Java will work on non-windows boxes. So I would say Java is a good beginners language.
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/
:%s/Open Source/Free Software/g
YTARY!
In my experience, no it is absolutely not. In my experience with freshman-level college programming courses, I actually find that the people with Visual Basic experience actually experience greater difficulty than the people with no programming experience at all. Persons who have used some language other than the one the course is targeted at essentially understand how to program, and simply must learn the new language. Persons who have used no language do not know how to program, and must learn. But persons who have used visual basic have a wrong idea of how to program, and must un-learn it, then learn what is right.
I counsel all newcomers to avoid anything Microsoft specific.
Retired from software... maybe. Sort of.
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
When a man lies he murders a part of the world.
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. 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 for yourself 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.
Creative misinterpretation is your friend.
I don't think that anything .NET, or VB6, is really a good beginner's language, just like I don't think Perl is a good beginner's language. I think you should start with a very general language that enforces good behavior, like Java.
.NET, VB6, or Perl basically for the added features and simplicities that each one brings to the table. .NET if you want to write a quick windows application, VB6 if you need a rapidly developed windows application that is mostly GUI, and Perl if you need to write a text parser. You take what you learned from Java and you can apply it anywhere else, and you know what pitfalls to avoid. If you start with a language for a specific application, you will always see all your programming through that lense.
You move from Java to
"I have never let my schooling interfere with my education." - Mark Twain
Q: Is Visual Basic a good beginner's programming language.
A: No.
Next!
In my opinion, any language is good for beginner, the idea is to get you started and hooked, and as you progress, you will find out what are good and bad habits, and you will develop your own discipline.
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.
Virtual Betting on Facebook for non-geeks.
I know I'm going to get bashed for this, but I really think Java is a great first language. It has far more regularity, all of its behaviors (even error conditions) are rigorously defined, which makes debugging easier, and it has a great user interface library in the form of Swing.
ZFS: because love is never having to say fsck
VB.NET is a lot closer to C# than, say, VB6 is to C or C++. In that respect, it is a valuable learning tool, since it eases the transition to a so-called "real" language (C#). Ultimately, though, VB.NET code compiles to the same PE format that C# does, so the "real language" vs "toy language" debates largely no longer apply. To those who say that VB "promotes" bad coding habits, I say "not anymore". VB.NET and C# are at least as well structured as Java...
I am alone, yet I also surf the universal backwash of undifferentiated Being, which is LOVE.
I guess this depends on what you qualify as "good"...
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!
Ron Gage - Westland, MI
Many of us started by using things like Applesoft BASIC, and we survived.
:-)
I am not familiar with VB beyond glancing through some code, but it could be worse.
Mainframe/UNIX Bit Twiddler and long time Windows/Linux Hobbyist.
The Theorem Theorem: If If, Then Then.
Really Short Answer: No.
.NET, for no other reason than because C# requires it) is that VB passes off this idiotic idea of grouped functions as "Object Oriented Programming". The fact that these "objects" can't be instantiated, nor can they be used as Abstract Data Types, makes them utterly useless for OOP development. I would even go as far as to say that VB's previous implemenation of OOP was misleading and dangerous.
Short Answer: Are you out of your bleeding mind?
Long Answer: Visual Basic is riddled with problems for those who are new to programming. The first problem that hits someone looking to learn programming is that he/she sees a pretty layout manager, but no code. It's quite possible to build an interface without ever writing a single line of code. When the entire point of the exercise is to learn coding, this is NOT a good thing.
The second problem is that Visual Basic doesn't clearly introduce the "programmer" to concepts like functions, interpreters, and compilers. Most of the functions in VB are automatically generated, giving the impression that these are magic incantations that shouldn't be touched by a "programmer". VB Studio has an interpreter, but it isn't interactive in the same way as BASIC interpreters. This makes it useless as a learning tool. The compiler is mostly a matter of setting a file name and hitting a button to produce an EXE. So the new programmer gains no understanding of how code gets translated into an executable. Concepts like linking, for example, are completely glossed over.
One of my personal beefs with the older versions of VB (which have been corrected in
VB also loses major points for failing to include typed variables. The automatic conversions between numbers, strings, and other types only serves to confuse a new programmer, especially when the auto-cast does the wrong thing. A new programmer should be taught to understand how data is represented by computers, not abstracted away so far that they can't understand how to fix problems.
Beyond that, VB tends to do a lot of confusing things that are not easily explainable. The lack of useful documentation and/or a good documentation browser only serves to increase confusion.
To be honest, I never understood why some non-VB developers thought of VB as a 'toy' language,
VB had/has its uses, but it's still just a RAD tool. As soon as you run into situations that the RAD tool can't handle, you should be using a real language rather than trying to hack it.
Javascript + Nintendo DSi = DSiCade
It has never been a good beginner's language.. I truly really recommend a C-family language. Why? Because most of today's popular languages are in the family (C, C++, Java, C#, etc). C++ is way over complicated for a first language. I would really recommend that you start with old fashioned C. Yes, its not object oriented, but it forces you to focus on the basic thing, OO is just a way to pack code together, its not a defining property of the language.. Then you can easily learn C++, Java, C#..
If you really want to start with a OO language, pick Java or C#.. But be warned, those are dynamic languages (Java, C#, Perl, PHP, Python, Javascript, etc) and they have some differences compared to "hard-compiled" languages like C. C forces you to understand how the computer works, and it will always help afterwards to know that. Python is also a good beginner's language, its clear, clean, easy to learn, easy to use. Stay away from Perl and PHP, they are very easy to use.. but they teach bad habits.
And VB is badly considered not because the language sucks (and it did suck last time I used it.. but that was many years ago), but because most VB programmers suck and are not very good. Often not formally trained and they dont really understand many important concepts. Its fine if you want to cook for you familly, but that's not how you cook for a large restaurant. A good formally trained programmer should be able to pick up any not-to-weird language in very little time (since they all have basicly the same concepts)... VB programmers most often can't. Where I work, I have to handle C, C++, Java, Perl, PHP, having a good base is important. The concepts are important, the syntax is just a tool. Get a good tool, dump VB.
TSIA
They are the same languaqe just different syntax and spelling. SharpDevelop among other dev tools has a menu item to translate between the two. That C# looks alot like Java so it get's you two frog with one stone.
Not that I like writting anything in either language anymore, give ruby any day.
Oh really?
VB gives me a headache just to look at. I can't imagine anybody's learning anything valuable.
VB is a good beginner's language.
I should know.
I started out with Java, and wasn't too impressed. After all, what could I do with it? Spend hours building widgets to do things didn't capture my interest, so about 60 hours into the language, I backed out.
So then I went to C++, in hopes of doing more, and was overwhelmed with the amount of possibilities. (The STL is huge, to say the least). I still have those books on my shelf, and while I'd love to take the time to learn more about the language, I don't have the time to spend to devote the next year to becoming even moderately proficient in that language.
Enter Perl. God I love perl. Such a neat little language, and you can do things quickly with it. Want to parse all of the instances of 'anonymous coward' from your daily slashdot discussions? Done. In 10 lines or less. Problem is, making the widgets and stuff still do not interest me, I hate to spend time coding that.
Enter VB. Sure, you pay for an IDE, and you also have to use Windows, but Microsoft has made it easy for the budding programmer to do something. I'm not a programmer because I love to program, I program to do a function, to make some part of my job easier. That's what VB (in all of it's flavors) does for me. VBA? Great for automating the small tasks (and already installed on my work machines) of doing office stuff, like automatically generating and emailing reports. VB.NET? Great for the time constraints of building an application for work.
I tell you all of this to say that VB is an excellent beginning programmers language, and for your non-programmer IT guy, it solves most of the problems that crop up. That's its' function.
War isn't about who's right. It's about who's left.
I like making hundreds of small buttons flash on an off. It gives people seizures. If a program can't give me a seizure, it probably isn't that good anyways...
why? I understand not starting people off with C++, I wouldn't suggest starting someone off with C++, but other than religous zealotry why java 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 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.
Bogtha Bogtha Bogtha
I personally began to code with VB4, and I believe that that was the perfect place to start. Everything is simplified, there are no pointers to deal with, and you can get "purty" programs done in a matter of minutes. The best thing is, while it is a lot like English, the actual coding is so similar to that of the major languages (C, CPP, Java, PHP, etc.) for every type of developement that once you are able to code in VB, you can code in anything. It is similar to learning to ride a bicycle: first you use training wheels, but after you finish using training wheels you can quickly learn the real thing, after only a small amount of bumps and bruises (pointers).
46487 466780 252994 376409 96920 39622 205366 244315 622115 512361 668040 63608 259203 955314 811176 652718 166330 23922
For that natural language approach, try COBOL. With skills in COBOL, I guarantee you won't be looking for a job in the IT industry very long.
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.
"Can there be a Klein bottle that is an efficient and effective beer pitcher?"
Structured programming is only one paradigm; and almost no-one says it's the best. Just because VB isn't structured doesn't mean it's bad.
If someone wants a language to get practical things done quickly, I currently recommend python on unix-like systems and VB on windows-like systems. Sure, neither are structures, neither are good OO languages, neither are functional languages --- but so what.
If someone wants to learn CS theory, then of course lisp (for concepts) and assembly or C (for understanding how CPUs work) and smalltalk or ruby (for OO stuff) and ML and haskell (for functional programming) are better.
Certainly Java and C# are an even worse choice than VB; since they're mediocre compromises of c-like languages with a subset of OO layered on top (but not as much as ruby/lisp/smalltalk); and are far more cumbersome than VB or Python.
But overall, VB's not as bad as it's reputation suggests.
Seems to me that any language can allow for poorly written applications to run...that's like saying that you shouldn't teach a beginner about photography using a point & shoot camera because it allows you to take crappy pictures. I used LOGO and VB to teach my nephew (he was a about 7 years old at the time) about programming. He really enjoyed it. Things that are good about it: its visual, its dead simple, the syntax is easy, the language is verbose (so its a little easier to explain and remember for a kid), there are relatively few nuances (like ending lines with ; or case sensitivity). Could you do it with Java, C#, Javascript, or Pascal? Sure, but that doesn't make VB bad for a beginner. Now, if by beginner, you mean someone who is intending to becoming a programmer and earning a living doing so, maybe VB wouldn't be my first choice. But if I had to teach a bunch of 10 year olds how to program, I would rather use VB than C# or Java (although LOGO is pretty fun).
Use C#. VB won't teach you anything except how to write ugly code. C# is a very easy language to use and almost seems more intuitive, to me, than VB. It will also teach you how to maintain a C/C++ style structure to your code and C/C++ style syntax. C# also resembles java pretty closely. You will have a much easier time learning those other languages (C/C++/Java) if you learn C#, rather than VB (which doesn't resemble any standard language, at all, except MAYBE delphi/pascal... two other proprietary programming languages). VB will just confuse the hell out of you when you decide to learn a new language.
VB was a great beginner's language (when it was version 1.0 and was clean and simple and fully documented in a couple of relatively thin manuals that came in the box). But now the beginner may be overwhelmed by the available functionality and the documentation is now hundreds of megabytes of text available electronically.
Of course the same thing can be said about Java 1.0, and early versions of pretty much every similar language. As people demand to be able to do everything in a programming system it will eventually be come almost unusably complex no matter how simple and clean the original design and the first version were.
If someone wants to be a Windows programmer, or especially a professional VB programmer, then they have to start somewhere and VB is probably a fine starting place for someone moving into the world of Windows programming.
If you're interested in programming in general with less of a "Windows GUI Apps" concentration then there are lots of (probably better) options.
One I like to recommend for kids to get them into the basics of programming is POV-Ray for Windows which provides a very nice little IDE for writing programs that produce beautiful pictures when run. You can give a kid a program that draws a shiny sphere floating over a checkered landscape and then show them how to code a loop to make it 100 randomly positioned spheres, etc. and leave them to experiment with making changes to the program and seeing how that affects the output. Way more interesting than your average "Hello World!" in a window.
It's free too
G.
You're going to get everyone throwing in their personal favorite reasons why C# is better or Java is better or haskell is better or whatever.
I reason it like this: What kind of beginner are you?
If you're a beginning CS student, no, VB is not the direction you want to go. There's many other languages that may have a steeper learning curve, but will reward you further in the long run.
If you're a forklift operator at a small company that gets forced into writing a small app to do this or that, simply because you're the most computer literate out of those of you working there, then yes, VB is designed for you.
I know many cases of programmers that never really intended to be, they got forced into it one way or another. If you don't have a full CS background, if you have no interest in computers outside of accomplishing the task at hand, if you just need to get something done quickly and don't have the background to do it properly..... then VB is the best choice.
I know there are plenty of advantages to doing things the 'right way', but out in the real world sometimes you just need to get things done yesterday and don't have the time or resources to do it the way a university professor would approve of. I'm not talking about writing shrink-wrapped retail software, but more things like internal apps and data transformation.
And, just to sound like a paid astroturfer (which I'm not), I must say that I have not seen anything anywhere ever that comes remotely close to the programming environment that Visual Studio provides. I'm usually on the anti-Microsoft side of the fence, but when it comes to the programming environment, again I haven't seen any other product OSS or otherwise that is even playing in the same ballpark.
burn karma burn!
Object Pascal is a good language for beginners. It has strong typing and object-oriented features, but the typing isn't strict to the point of being obnoxious like in Java. It is lower level, so you will deal some with pointers and memory management but it is harder to make a mess with than C/C++. You can also visually design the UI of your application, but the language isn't a disaster like VB (and doesn't run in a VM like C# or Java, so it's quick).
I use Visual BASIC (I choose to honor BASIC by capitalizing VB as I did), SQL, Fortran, C, Python, and Perl every week. I've written assembler for various CPUs, JCL, Smalltalk, various shell scripts, Pascal, Modula-2, MUMPS, and probably several others I'm forgetting in the past.
Every language I've learned has been useful on the various projects I've worked on and provided a perspective for evaluating what methods to use for new development.
Learn every language you can. You'll probably be surprised to find that you don't just get broad shallow experience, but each language actually gives you more in-depth knowledge of the others (and what they may do behind the scenes).
VB(A) is the scripting language built into many Microsoft products. Whether or not you harbor loathing for Microsoft, knowing VB(A) will be very helpful for many tasks and may be necessary to get a paycheck from many places.
"Flame away, I wear asbestos underwear"
It depends on your teacher. Honest! In highschool I learned qbasic. It was taught as an introduction to concepts like variables and loops. That was the whole point ..
You could learn some of the basic but crucial programming concepts required before getting so frustrated with syntaxial errors that you gave up the class all together.
Of course, if your teacher is bad you will not take much out of the class, as with any other course.
No, I am not an English major. My posts are subject to typos and incorrect grammar. Do not expect perfection.
I created a tool in VB to learn VB, the only thing I learned from VB is if you use VB, you regret that you did and wish you used Java.
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.
.NET crap does).
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
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
"You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
From that point of view- compilers are a bad idea for a first language. The student needs to learn the first rule of programming- the computer does just what you ask, never what you want. That lesson comes quickest in an intepreter, not in a compiler.
Oh yeah, and completely agreed. I'm a professional programmer who learned VB after college- and I can always tell the difference in code between a real programmer and Visual Studio Wizards.
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
:sigh:
This question is like the common cold. Just when you think it's gone, it comes around again.
Folks, LANGUAGE DOESN'T MATTER. It's irrelevant ESEPCIALLY at the beginner stage.
More important is to just find something that provides quick feedback so that they can work on something, then turn around and quickly see the results. Something that encourages exploration.
Far more important than that is a grounding in basic analytical thinking processes, logic, etc... The ability to think in abstracts, to model a concept, and to conceive of a solution. The language then just becomes the means of expression and the developer will be better equipped to choose the right tools for the job, rather than getting bogged down with ideology.
Ultimately it all depends on the end goal of the individual in question. Do they:
a) want to be a good software developer, or
b) hack out an application every so often?
If a then follow my advice above, otherwise sure, VB, VBA, or VB.NET is as good as anything else.
-- All views expressed in this post are mine and do not
-- reflect those of my employer or their clients
that object oriented languages are good for beginners. In the end, hardware is procedural, not object oriented. Beginners should work the way hardware does before they learn to think in more abstract ways (OO, functional, etc). VB6 might be a good choice, as it has a friendly syntax; however, there are lots of things about it that can really mess up a beginner - type safelessness being one of them (you can turn this off, however). C/C++ is how I learned. The nice thing about c++ is that it is procedural AND object oriented; so essentially you can learn the same language to learn both methodologies. Of course, you lose the coolness factor of having a RAD tool (unless there is one for unmanaged c++ now...I haven't been keeping track), which might drive some people away from programming. VB6, love it or hate it, captured lots of people's imaginations because you could make a professional looking app without much effort. Most people in c++ land were stuck with cli apps, which are significantly less cool for most student programmers.
Download free e-books, lectures, and tutorials at bookgoldmine.com
For starters, you just asked about a VB based syntax on /., you will recieve for the most part nothing but FUD and miss information and the pundits launch into tirades about how VB.Net is a toy compared to C# (which are both the same CLR language), Java, Ruby, PHP, Perl, and some whack job will likely even recommend Python.
.Net is not going to be your tool of choice.
//Code here
Next up. Right tool for the job. If you're interested in embedded applications, coding on linux, or high performance apps, going
And finally, to refute some pundits. VB.Net is a syntax option for coding in CLR, the same as C#, J#, PHP.Net and all the other screwy variations of *.Net. Vb.Net is every bit as Object Oriented as C# or Java. VB.Net by default has explicit and strict options off, turning those two options on makes its compiler just as strict as the C# compiler. VB.Net also has almost all of the functionality from C# (I have heard that there are some obscure pointer functions that are not in VB.Net's syntax, but I have never run into them, or the lack there of). Another one of those "What were they thinking?" items though, VB.Net has a "Hide Advanced Methods" option on by default that hides a lot of methods from the autocomplete lists, turning it off allows you to see all of the same functionality as in C#.
The only substantial differences from VB.Net to C# is syntax Things like:
VB.Net: Private VarName as String
C#: Private String VarName
VB.Net:
If Var1 = Var2 Then
'Code here
End If
C#:
If Var1 == Var2
{
}
-Rick
"Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration". -- Edsgar Dijkstra (and if you don't know who that is.... stop calling yourself a programmer)
For other possibilites: I'll suggest Ruby. Not because it's a great language (all have their own issues) but specifically because of this "Poignant Guide"
http://poignantguide.net/ruby/. I found it a wonderful way of approaching programming from a very NON-technical manner... not just that it's amusing (the author has the same off-beat humor as myself), but because it relates common Object Oriented concepts to real world examples better than I've ever seen before (specifically the whole section on English grammer: verbs, nouns, adjectives becoming methods, objects and attributes).
Don't think of the anti-VB sentiment as "throwing the baby out with the bathwater" think of it as "no matter how pretty the architecture... if the foundation is crap, the building will fall".
The OOP tools you need to write good, maintainable applications (inheritance, polymorphism, etc...) were not there in version of VB before .net. That is why it was considered a toy language. It really is much better now.
That said, I still wouldn't recommend it as a first language. I think C++ is a really good learning language. Failing that, maybe go with C# or Java.
The way I look at it is like this, though. If you learn to drive on a stick shift, when you get the hang of it you'll be able to drive any stick shift vehicle in the world with a little practice. If you learn on an automatic, you'll have a more difficult time making that transition.
C# and Java (and VB.net) are like an automatic. You don't have to think about important things like memory allocation and stuff like that, and it's much too easy to rely on code generated by visual studio, which is not a good programming practice.
My second programming language was VB 2.0 (on the heels of 2 months of QBasic). It was a great way for a self-taught and over-worked beginner programmer to knock out quick windows solutions. I stayed true to it, and developed amazing robust and stable applications, all the way until VB.net. VB.net is IMHO, nothing more than a copy of C#.net, that had it's syntax mangled in order for it to bare a passing resemblence to the VB of old. A beginner who uses it is not only going to wind up discouraged by it's complexity and rigidity; but led further away from other programming languages by it's pointless tributes to the once simple RAD. If you're going to start on the .net platform, start with C#.net. There a few minor IDE features missing that you'd get in VB.net; but at least you'll be able to read articles featuring C, C++, or even PHP and understand what you're looking at. VB was a great way let people get a taste of programming before they've committed to it as a career. If people want to get their feet wet like that these days; they're much better off playing around with VBA or something.
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?
Your post smells strongly of a troll, but I had to respond just in case you're serious.
.NET, or VB6, is really a good beginner's language, just like I don't think Perl is a good beginner's language. I think you should start with a very general language that enforces good behavior, like Java.
... .NET if you want to write a quick windows application, ...
.NET, and it's been running without a single hiccup for going on 8 months now. Only being able to do "quick windows applications" is a rather limited view of .NET's capabilities, and like the rest of your post, hints at a certain lack of experience with nearly everything you're talking about.
I don't think that anything
Do tell, what exactly makes Java a good beginner's language, but not C#? In fact, I'd be willing to bet that most developers that know both well would side with C# as being the easier of the 2 to get your head around.
If you want to write a quick windows application? How about if you want to write a high-volume tcp-based server daemon to run on Linux? Because, thats exactly what I'm doing with
Perl - $Just @when->$you ${thought} s/yn/tax/ &couldn\'t %get $worse;
Grain of salt: I haven't touched VB in about 5 years and use a mix of C, Perl, and Python for my programming needs.
Someone above mentioned assembly ... there's a good book called "Programming from the Ground Up" by Jonathan Bartlett out there for people who want to go that route. Start with assember (i86) and work your way up through c and perl, all in one book.
I learned BASIC "back in the day" (back when it was still spelled in upper case) using an interpreter. I still think this is the best way if you actually want to learn to program. If you just want to write something simple with a GUI, then yes, VB is probably the way to go. I wouldn't classify that as "learning to program", any more than "learning electronics" by building a crystal radio from a kit. Yes, you'll get results, but all you've done is put together some components someone else has made.
If you want to learn to program just to know how, I'd recommend setting up Squeak and playing with that. Or a good Scheme system, there are certainly enough of those around. Something that allows you to explore interactively, instead of having to wade through edit/compile/run cycles.
Just junk food for thought...
Starting a beginner off on Visual Basic is like starting off a virgin by butt-fucking her. YOU DON'T DO THAT. You start with something that isn't going to hurt her, like, you know, kissing and licking. Long-term, Visual Basic destroys a programmer's brain.
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.
.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.
If you're learning to code using the
-Stephen
Old coders hate VB because VB used to be shite. VB.NET is wholly new and redesigned from the ground up as a CLR dialect. I had given up old VB in favor of Delphi because it was easier to interface with 3rd party software, and of course much much faster since Delphi is compiled rather than interpreted. This is no longer true with VB.NET, which is now perfectly acceptable as more than just a RAD tool, yet still "easier" than C++ (hell, INTERCAL is easier than C++ :P)
-Billco, Fnarg.com
The short answer is yes, but in the end if someone is serious about programming, they will have learned multiple languages and paradigms, so much that the original language loses most of its influence. Every language has obvious good and bad sides, likewise every language will both teach good and bad methods to beginners.
.net/java) is he hurt? My guess is no.
A solid example is java-to-C++ programmers who allocate absolutely every object with new. Then forget to delete it. Garbage collection is a great convenience, but is it suitable for a beginner? Sure if they are going to be stuck making financial sector front ends, but not obtaining a firm grasp of memory management is detrimental for further language learning.
A second is the C or poorly taught C++ which is really C programmer trying to move to C++. There are countless examples of C++ and stl methods that people recode endlessly while still believing they are using "C++". Also are they people who make huge classes to handle absolutely everything in their program. No OOP, no abstraction, but because they've used classes, they have programmed correctly in C++. No matter which you start with (C/C++), adapting to the other is tough. They are extremely close syntaxally, etc, but are both extremely different languages.
VB is in a class of its own. I took a course in VB 6 this year and the first 3 chapters of the book were entirely using the visual editor and gui creation - No Code. This is not a way to teach good programming techniques obviously, but is it harming anything? If a new programmer does not go in depth into VB then takes a course in a more OOP language (read C++/any
C# is a becoming a very viable first language, but it too has some of the same problems as java, mainly garbage collection.
Finally, no one's mentioned it but what about good old assembly? You won't learn the OOP concepts, but the low level knowledge of a cpu's architecture will help indefinitely in some fields.
Is VB a good language for beginners? probably not. Is C++/C#/java/the next language? likely more so than VB, but not definite. There is no "best" beginners language as much as there is no "best" language. Infinitely more important is how well you learn. A poor C++ teacher will likely be more detrimental than a good VB.net teacher
The reason VB has been a "beginner's language" for so long is because of two things - garbage collection, and powerful (enough), easy to use standard libraries. While it still has these benefits, so does every other .NET language. The syntax of VB, while different, is not really any "easier." Learn C# - the underlying fundamentals and APIs are the same, it's just the syntax that's different.
And it's a syntax that'll make it easier to transition to another language (like C++ or Java) should the need arise. Not to mention you'll avoid the bizarre VB-isms that'll teach bad habits, like non-short circuiting conditionals and so on.
C++ is way too complex. I suppose it'd be fine to teach a beginner a small subset of C++, but in that case, why not teach them a simpler language like C or Java? Plus, when the beginner goes online and looks up how to do in C++, who knows what kind of horrible hacks they'll find?
Anyway, this ask slashdot question needs to provide more background info. If it is a beginner who plans to have a career in programming, I think they should be taught the languages that best teach them paradigms without confusing them. Also, Java has an extensive native API and online reference that lets beginners quickly get a gui put together so that they can interact with their program and get visual feedback.
Personally, if I were to each a beginner a language, I'd go for haskell. Hopefully they'd learn thorough and elegant problem solving techniques this way. Or it would leave them irreparably scarred.
-------
Incite and flee.
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.
It's only a toy if you don't know how to use it. I think that VB is excellent for a beginner, because most people will be able to quickly make a functional program, instead of getting frustrated with the 20,000 lines it takes to build a "Hello World" app in Java or other similar languages. I know that that's what happened with me. I tried to start with C++ and Java, but the amount of reinventing the wheel that was needed for even the most basic of applications was so frustrating that I dropped them both. I started with VB. I learned AND did functional stuff at the same time. Since then, I've picked up other languages.
There's no reason that learning programming should be a miserable experience.
And of course, it depends what you're doing. If you're trying to get work done, and VB will do that, then it's the right tool. There's no point in learning how to re-bore engine cylinders if you just want to be able to change your own oil. If you want to make action games, or deal with massive amounts of database transactions, then no, VB probably isn't the right tool. Of course, it still isn't a bad place to start.
Learning how COM worked was a hell of a lot more useful than learning about pointers.
I don't respond to AC's.
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.
Am I open minded towards open source, or closed minded towards closed source?
The #Region " Windows Form Designer generated code " seems to be a bit of a giveaway, no?
Not really. That's just boilerplate code, and is no big deal. Why would a "real programmer" care?
So can I. The #Region " Windows Form Designer generated code " seems to be a bit of a giveaway, no?
Well, some remove that- and #Region wasn't in earlier versions of VB at all. But the lack of any code other than in events was still a bit of a giveaway. As was the use of datacontrols.
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
History does not long entrust the care of freedom to the weak or the timid. ~Dwight D. Eisenhower
I don't think it matters much. Programming languages are a lot like girlfriends. Doesn't much matter where you start, but you would be well advised to sample more than just a few.
I work part-time for a distance learning university(Open University) which produces a number of computing courses from beginner up to MSc. The students we get often have absolutely no experience and are aged 18 to 108. About 5 years ago they redesigned there basic course and had to decide on a language to use. After considering a number of languages including Logo(the academic's farorite), VB and Java, they finally decided to use Javascript.
When I heard I was aghast, but thinking about it now Javascript has some advantages for the beginner.
Firstly the tools to develop and run Javascript programs are freely available. Secondly it is quite a forgiving languge being weakly typed(very important for a beginner), thirdly it is quite easy to get to the stage where the programmer has achieved something. This cannot be dismissed lightly, since we all probable remember getting our first program going.
Finally it teaches all the major constructs that they are likely to use in other languages.
After that they can move on to courses with Java, C++ and smalltalk
Choose your allies carefully, it is highly unlikely you will be held accountable for the actions of your enemies
BASIC is the best for beginners!
problem with C is, beginners don't even know a computer does one step, then another. block structured syntax blows beginners away... they need to know about stepwise execution before all the Algol-ish syntax/symantic issues.
10 PRINT "type your name"
20 INPUT A$
30 PRINT "hello, ", a$, "!"
40 END
BASIC for two - six weeks, then go to whatever you want, they'll be ready.
If by 'beginner' you mean someone who just needs to learn a language to do simple projects for their homework or something, and who has no aspirations of becomming a software engineer or computer scientist, then yes it's probably a decent 'beginner's' language. Lots of free stuff from MS, including their free (for one year) Visual Studio Express IDE's and free (indefinitely) SQL Server 2005 Express edition.
However, if by 'beginner' you mean an aspiring computer scientist or software engineer, then by all means no, it's a terrible beginner's language. In that case, start them out with Assembly, as someone suggested in an earlier thread. Or, if you want them to learn the two fundamental language paradigms, start them with C and LISP (preferably the Scheme dialect for starters). C teaches pointers, LISP/Scheme teaches recursion.
Flying is easy, just throw yourself at the ground and miss. -Douglas Adams
There's also MS's free Kid's Programming Language. Based on BASIC, but structured rather than linear.
Flying is easy, just throw yourself at the ground and miss. -Douglas Adams
Wow. What is this from, Microsoft's monthly newsletter?
quidquid latine dictum sit altum videtur.
If it's someone with a mathematical background who is planning on writing compilers in a few years time, then it probably isn't. But if it's someone who's initial goal is to link a few screens together with a bit of code behind them, and then maybe go on to more "traditional" programming, then it's an excellent choice - and so are Delphi, Java and probably lots of others.
Someone above said something along the lines of "people should start with assembler and then work from there". I don't agree - it's like saying that you need to be able to build an internal combustion engine from scratch before getting a driving licence. Speaking as someone who DID learn assembler programming (Z80, on the venerable Spectrum*) pretty early on, I'd have to say that assembler can be a really good way of teaching people really bad habits. The level of indirection that an "object view" of things gives you is a good idea - that's why it has stuck around!
* I suppose it's worth mentioning here that Z80 assembler was pretty rich in some ways - one instruction to "move this block of memory from here to here" for example. That, and the well-documented Spectrum ROM functions made writing assembler programs that "did something useful" (even though all they were really doing was calling lots of existing functions) was relatively easy. A bit like VB...
Well it wouldnt be called BASIC if it wasnt. :-P
I would suggest Python as a good beginner language. It's simple, easy to learn, but it also holds up well as you become more skilled. Best of all, its sytax enforces a lot of good programming habits that will carry on even if you move to other languages.
And with IronPython, you can even take advantage of all the .Net libraries, if that's what you're after.
I could think of so many reasons why VB is a terrible language and terrible to teach to anyone, both from the language itself and Microsofts runtime environment for it. But really I think Edsger Dijkstra said it best:
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
1 2 1 2 The Naken Crew
Don't go with VB, use VB.NET. There are a lot of reasons for this:
* unlike classic VB (version 6 or prior), the current version of VB.NET is fully object-oriented, supporting generics (templates for you C++ folks), interfaces, full inheritance, abstract classes and members, overloading (including operators), etc.
* the english-like syntax of old-school VB is still present and is now applied to the object-oriented aspects of the language (e.g. which keyword makes more sense for someone learning OOP? VB.NET's "NotInheritable" or C#'s "sealed"? VB.NET's "MustImplement" or C#'s "abstract"?).
* the relevant express editions of Visual Studio are currently free and very powerful.
My warning is related to the last item: resist the urge to use all of the IDE's bells and whistles at first. In my experience, those developers who rely on Visual Studio to do everything for them never really understand what is going on behind the scenes and have trouble later on. Use the IDE just for syntax highlighting and IntelliSense at first (i.e. start with simple console applications and develop from the "Empty Project" template, even building Windows Forms applications from this starting point...THEN use the snazzy designers and wizards).
VB let's you get productive very quickly, but it doesn't teach you to be a good programmer. Unfortunately, languages that teach you to be a better programmer generally don't let you build nice applications with a flashy front end.
I see a lot of posts talking about C and even assembly. I strongly disagree here. At university, the first language we were taught was a functional one (Miranda, which is similar to the freely available Haskell). Thought it was bunk at first, but after a while, I found it changes the way you think. You don't think of chars, or strings, but in tuples, concatenations, heads and tails. The higher level of abstraction is critical when you're thinking about algorithms. When designing your new kickass sort or indexing mechanism, you shouldn't be thinking about memory allocation or garbage collection - those things come much later.
Elegant, efficient algorithms are the meat of all applications. Try using Haskell (I recommend Hugs) to prototype logical aspects of your program. Then translate this portion to VB, Java, or whatever platform that suits your taste.
"Honey, you'll still be a virgin if you do it THIS way..."
Worked for me.
I learned some BASIC in middle school, and then when I got to C in college I was barely able to keep up, because virtually nothing I had learned with BASIC carried over. I gave up on programming. But then I started messing around with Perl and then Ruby. And then I took Visual Basic. Visual Basic is NOT BASIC. BASIC was wrong about everything. GOTO is obviously not a good default control scheme, just as an example. It didn't teach you anything about procedural programming that you couldn't learn in a better language. That's why VB is not taken seriously. Well, it's also not taken seriously because it's a confused language, trying for both the simplicity and readability of Ruby(so it can be a learner language) while trying to adopt all the methods and classes of C#, which isn't even vaguely a beginner language. It doesn't do any one thing very well except that you can make the most simplistic windows programs imaginable with it without any thought. In that regard it's actually fairly useful. But I don't think it's a good learner language.
--The universe will not be altered by forum threads, even those which are very wry. --Tycho Brahe (Penny Arcade)
Having trained literally hundreds of programmers, I must say the finest programming language to train up on is Perl. I know, I just heard an audible gasp from the majority of Slashdot viewers, but let me explain.
First off, these are programmers who had typically graduated from college with a Computer Science or Mathematics degree; the problem was, they had never worked in a corporate environment, and had no experience with the stresses and research requirements of corporate software development. After trying numerous methods of training, I eventually settled on Perl for a few reasons; one, a great number of our systems were written in Perl, and two, perl is a very expressive and forgiving language.
Expressive, in that you can do a great deal with it, with a minimal of fuss, and forgiving, in that you have (albeit ugly to OOP purists) an OOP environment without the ugliness of memory management. It is very easy to quickly get a working application together, and in my experience, individuals could quickly get up to speed on our internal systems written in Perl.
Now, that's not to say that Java couldn't do the same thing here (and, as C# is very simliar to Java, C# may be a great choice as well). When I was using Perl as my training facility, Java wasn't nearly as approachable as it is now - the tools have gotten much, much better.
You should also take into account the types of people you are training. Are they science majors? Or are they really people who are just interested in software development, but have no rigorous background in logical thinking?
Good luck!
Bryan Porter
==
Wizards can save you time, if used sparingly.
I totally agree with the statement about assembler.. So many kids today dont have a clue what their code is *actually* doing.
---- Booth was a patriot ----
I'm seeing evidence of a consensus here that beginner programmers should understand low-level details, as though this were axiomatic. I completely disagree. The LAST thing a beginner programmer should worry about is digital logic, machine code, memory allocation, and so on.
Beginners need to learn how simple logic is expressed, as this is the heart of programming. Variables and control structures -- abstract concepts -- are the basis of programming, much more relevant to a newbie than registers and flops per second. A beginner can write hello_world.whatever in any high-level language without knowing a single thing about hardware. And that's a good thing!
When a newbie understands what a variable is, what a type is, what if-then-else mean, what foreach means, he's made a ton of progress and is ready to apply that basic knowledge to any future task.
So the language?
Who cares? BASIC, Perl, PHP, Python, Scheme, LISP, Ruby..... doesn't matter. I prefer an interpreted language for quick feedback, but it's not a deal-breaker.
Here are some secrets I'll let you into, having written code in well over a dozen languages...
.NET applications, doesn't mean it makes sense to start out by learning to write in a .NET language.
.NET web developer in the long run.
1. Once you've learned to program in one language, you can pick up pretty much any other language much faster. By the time you've learned a handful, you can pick up a new one in a weekend.
2. Languages which are good for learning are rarely what's used in the real world. That's because conceptual simplicity has a performance penalty.
3. The language is the easy bit to learn anyway. The hard part is the standard libraries or OS API.
With this in mind, just because you eventually want to write
I would pick almost anything over Visual Basic. I write code in a VB variant almost every day, and after a decade I still find it painful. The type system is crappy, the syntax is fussy with lots of varieties to remember, it's hard to get an overall view of the code, the containers are crappy, and lots of modern programming conveniences are missing.
C#, as a clone of Java, is a somewhat better choice. If you're really limiting yourself to one of those two, I'd say go with C#.
However, I'd pick Ruby or Python over either of them. Ruby is great for getting out of the way and allowing you to actually think about the problem, rather than having to remember syntax. I'm told Python's the same way, except it likes to boss you around more, which is probably why it has started to get traction as a tutorial language.
I'd also actively discourage C++, Perl, PHP, and Common Lisp. C++ is a huge language that takes years to become proficient in, and it's very easy to shoot yourself in the foot with it. Common Lisp is bigger than C++. Perl is full of misfeatures for various historical reasons, and has loads of obscure syntax to remember. PHP is somewhat like Perl with cleaner syntax--just as many misfeatures you can run into, because like Perl it grew out of something much simpler, with no real forethought going into the design.
Actually, you could do a lot worse than learn to program using JavaScript. It's a fairly small and clean language, and it'd actually be useful to a
GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
Had you considered PHP? It has the huge advantage of simplicity (you can get started very very fast); it's also very powerful and widely useful (many many functions are available). In many ways, it is similar to C or Perl, so it's easy to migrate. The online documentation is brilliant. Also, you can use it as a scripting language (php-cli), for a simple GUI (php-gtk), or even for network-socket programming.
0 0.htm
P.S. Visual Basic is, and always was, utterly horrid.
http://www.ddj.com/documents/s=1503/ddj0001vs/jan
Forget all the other languages. Lazy evaluation is the future. I am not trolling, I am serious. As I programmer from 1986 who played with almost every programming language around, Haskell is the best programming language ever.
2nd best is Eiffel.
VB is has way to many things that makes the programmers job easy.... It hides a crap load of code from you - to learn you need to learn how to make the wheel not just how to put it on a bike - C++ if you ask me is the best one to start with -
The question was about Visual Basic, not VBScript.
Visual Basic has normal typed variables but with VBScript everything is a "variant" data type.
It is flat-out wrong to say that objects created with Visual Basic cannot be instantiated. How can you say that VB objects are utterly useless for OOP development when they can implement multiple interfaces?
Just because you couldn't be bothered to read the help file or buy a book doesn't mean it is impossible!
Oh, and I'm talking pre VB.Net here.
The question that should be asked is: Does the person learning programming want to become a professional programmer and get his/her fundamentals down? Or do they want to just be able to build applications that aren't too complex to handle their own type of work. In this case then yeah, VB and some scripting language, if you want to get the basics down, I'd probably start with assembly or C++.
If you've got a Mac and want to play with making nice desktop applications, I can't recommend RubyCocoa enough. It's a Ruby/Objective-C bridge that allows you write Cocoa Mac applications in Ruby.
VB creates boatloads of crappy habits as well as the notion you need a windows box and a driver letter to get any work done. the world has plenty of this developer already.
imho, VB is a destructive virus
Easy to learn but powerful. Schema is a good followup language.
Sorry my bullshit sensor overloaded.
Hi, My first programming experience was with GWBasic long time ago. We did several things but the goto's and gosub's left any program a mess. Then I learn Pascal (Turbo Pascal) and everything look structured and make sense. I think Pascal should be the first language people should learn and pratice. Maybe C#/Java is a good alternative too.
that and a lot of the documentation being built into the interpreter.
If other reasons we do lack, we swear no one will die when we attack
Monolithic API, limited GUI capabilities, bastardised Javascripty syntax, Windows-only, one must pay Microsoft to use it. Give me Glade and Gedit any day. This is the kind of language learnt in English secondary schools by A-level students who are fully aware that whatever job they get it won't involve VB.
No... right clicking and selecting "New Form" is a nicety, and far from making someone a non-programmer. Eclipse and other IDEs have wizards as well - a developer using and IDE does not a non-developer make.
Excuse my speling.
Making The Bar Project
I wouldn't let a beginner anywhere near either VB or C#
They would get the idea that the way Microsoft does things is the way everything is done.
Much better to let them learn a cross-platform language like C, Python, Ruby, PHP or Perl.
OOP is OOP no matter what pair of gloves you're using to learn it.
I'd recommend going to
http://greenteapress.com/
and reading one of the "How to think like a Computer Scientist" free PDF books (and if you really love it, buy a dead tree copy)
Intro to real programming in Python, Java, or C++ with emphasis on WHAT you're doing, not HOW. Almost every language out there is just a rehash of a few basic concepts. Once you learn one, it's just a matter of learning new syntex and a few cool "Hey, this language makes it really easy to do X" things.
Don't concentrate on a language- concentrate on the concepts.
Actually that wasn't the question.
Ok the answer is no. Visual basic is platform dependent, ugly and limited.
Basic should have been put out of its misery decades ago.
A beginner working with visual basic will not have a ground up perspective of programming, and will find that transfering their knowledge to other languages is terribly difficult.
On the other hand pyhton is simple and acessible enough to teach as a first language, and avoids the annoyances and pitfalls associated with pointers and other beginner unfriendly constructs. On the other hand python is powerful enough to serve as a primary language, has fantastic data structures, is bound to just about every known API, and allows the beginner to do serious programming almost immediately. Finally python is cross platform and free 9 as in speech, beer and sex) .
Is this really what using those wizards has brought us to. What happened to using descriptive names? Button1 is definitely not descriptive (well.. at least I know it's a button).
Personally, I started programming with just using markup languages like HTML (which isn't programming if you ask me) but then progressed to javascript which ultimately lead me into VB. I can honestly say that I do regret the path I took as I sometimes have trouble wrapping my mind around some concepts that are foreign to IDE driven languages. I do feel more in tune now that I have pushed those languages aside and took the time to learn real coding languages like c/c++. I almost feel a sense of shame for taking the easy way back then and using those IDE's, but what the hell, I was like 15 when I started and didn't know any better. Ohh, so young and ignorant...
I will forever be a student.
Mod parent down -- FUD! VB doesn't have anything to do with "wizards" more than does C# or C++ (as presented in Microsoft Visual Studio 2005 IDE) or Java does (in Eclipse, or IntelliJ).
Sure, when you first create a project, a wizard comes up asking (for C++) "Do you want a GUI or Console? MFC, ATL? Precompiled headers?". But that's not doing any *programming* for you; that's just setting the project up. As a professional developer, I consider such things a time saver.
In Visual Basic, just like in every other language, you do the programming yourself. All that happens for you is project set up and the insertion of hooks, such as:
User: *double click*
IDE: here you go, this empty delegate will be called when a user presses that button
It's pretty hard to many any sort of "real" application all the while only relying on what's generated for you.
Learn Java or C#
They are probably a little harder to learn the basic concepts, but there is countless materials for learning it.
I would also consider learning Python or Ruby if I was to put myself through a crash-course in programming with Hindsight.
This question is wrong in so many ways...
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.
All's true that is mistrusted
C'mon who didn't make this mistake at least once learning C on a UNIX system. At least those of you whose universities didn't put '.' at the beginning of the path. And those who did get the hand-holding from the uni probably ran into it later in less forgiving environments. How long did it take you to figure out what was going wrong? I think I spent at least 2 or 3 hours trying to figure out what was going on (And why it magically worked when I renamed 'test' to 'hello' heh heh heh) To this day I run without '.' in my path, even in Windows.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Function calling is not uniform - Some calls are "Call Foo()" and others just "Foo"
If you delete an array of pointers (which are set to objects), it deletes the objects too - I use this in mouseover code. I have to manually set them to Nothing before deleting the array.
Several controls just don't work if you have them disabled.
Array subscripting - you can DIM Foo(X to Y) where X is non zero
Option Base - no better way to confuse people than for some modules to use 1 and others 0 in the same project
Windows - the damn event model is inconsistent.
Timers - the docs say interval=0 is the same as disabled. Not true. interval 0 sill allows it to fire 1 more time.
& - it does strings as well as speficy hex
+ - adds a space _sometimes_
No epoch seconds - impossible to do simple date calculations. Timer() is seconds today. All other date funtions are ascii strings MM/DD/YYY or DD/MM/YYYY depending on locale.
Theres more but time for home.
Oh yeah. Python? Consistent and extremely flexible. (Ruby too)
Slashdot's rate-of-post filter: Preventing you from posting too many great ideas at once.
I learnt originally on QBasic that was in DOS back in the day. I can't say that I'm particularily fond of basic, it feels like I lost my virginity to an ugly girl I never wish to see her again.
As with .net, sure it could be taken seriously, it's just a little bit of syntax difference, but the complexity of coding the equivalent app in c# or c++ is pretty much equal. I think basic should have been left doing basic applications though, because the language just doesn't format all that well, and I really dont like to read it. Other then that, it's a matter of syntax preferences, all managed languages are ~=.
I played with VB a several years ago when I was still doing programming.
.NET was, but have not been motivated to go look. Is .NET what they are now calling VB?
I have wondered what
Steve
A work that expires before its copyright never enters the public domain and thus enjoys eternal copyright protection.
The fact that you can use C#, VB.net or Managed C++ illustrates that it's not the language that matters. It all winds up being the same CLR code in the end. Every programmer can feel free to use the one that makes the most sense to them.
For me, the choice would be C#, because it's the one whose syntax makes the most sense to me (and I have used all 3).
The problem is not language. The problem is the class hierarchy. I much prefer Java because the Microsoft one is a mess. That, and the platform-tie-ins are skillfully camoflaged to insure that (like Microsoft's Java) though you may think you're writing OS independent code, you're not.
Either PERL or JAVA.
Both are cross-platform, powerful, and its easy to learn the basics but takes a while to learn the more advanced stuff.
Michael "TheZorch" Haney
thezorch@gmail.com
http://thezorch.googlepages.com/home
One of the advantages of VB for the complete beginner is the ease of building a GUI for an application without having to pick and learn a toolkit that would be needed with Python / Ruby / C etc.
This means that people can quickly get results and hopefully gain an interest in developing and move onto learn other languages and proper design and development techniques.
It's a bit like going back to eduation in the 80's and comparing Basic with Logo. Logo could do pretty things very easily and get people interested. Basic took more skill and effort to achieve a similar thing.
VB.NET has decent RAD tools and doesn't require expertise in order to begin creating useful applications. So it is good for a beginner in that they can quickly become productive. It is bad for a beginner in that they will never learn complex programming concepts that are not encapsulated in pleasant little clicky-draggy-things.
If your goal is to become a programmer, learn absolutely anything else instead. C# or Java would be better, but so would C, ASM, Lisp, Scheme, Smalltalk, Objective C, C++, ML, Haskell, Python, or Ruby. Anything. Then you may still wind up using VB for certain tasks, but that's your business.
If your goal is to program something without becoming a programmer (Not a bad idea!), VB.NET is great. VisualStudio.NET 2005's RAD tools are fantastic.
There are no trails. There are no trees out here.
VB is not a decent structured language and bears little resemblance to one. I agree with the posters that say that using a wizard is not the same as programming.
I would recommend Java instead or, better yet for a beginner, Borland Pascal. Notice I didn't say Delphi. If you want them to actually focus on coding and not on making buttons pop up windows, start the beginner off with structured, object oriented concepts, then work your way up to GUI IDEs. Java comes with more widgets and networking goodies, but is less forgiving.
The point being to put the person in front of a clear, concise, readable language implemented in an easy-to-use compiler without distractions like GUI controls.
Just my $.02.
*** *** You're just jealous 'cause the voices talk to me... ***
i would recommend either VB or C# to a beginning programmer (but of course i would recommend a score of other languages first, but that's beside the point).
you're trying to teach a beginning programmer (in order of priority):
0. prequisite: general problem solving
1. if they will enjoy being a non-beginning programmer
2. beginning programming
just about any language is sufficient for task 1 (well, maybe not Perl. we aren't sadists...) task 2 can be accomplished with any number of languages.
the problems with teaching VB or C# are:
1. the cost of licenses for the single-source operating system
2. the costs of licensing for the development environment
3. the expense of powerful enough machines to run the above development environments
if you have a lab of reasonably powerful windows machines, by all means, bring out the VB and C#. you can, however, teach beginning programming with a room full of BSD or Linux 386 or 486 machines just fine. in honesty Perl would do nicely to accomplish the principal task of instructing a beginning programmer: demystifying what programming is, so they can decide if they might like to learn more. after that, the language is only a medium for communicating your problem's solution for the computer to compute, and that can be done in any language.
MORTAR COMBAT!
VB represents all that is soulless and wrong.
:P
VB.Net is better, mainly because it is C# with different syntax that requires more typing. If you're going to do that, just do C# in the first place; the syntax will translate better to other languages.
Someone suggested Javascript, I think that's a good idea, though it can be hard to debug. PHP might be good too.
I think GW-BASIC is a good starting language, it worked for me.
Quidquid latine dictum sit, altum sonatur.
I wouldn't be so sure of this. One of my first tasks in my first job out of college was to optimize some incredibly slow code. The code was creating large XML text documents to send to other components. I share the mentality "start with C", or at least "fully learn C", but it was obvious the guy whose code I was fixing did not.
Needless to say, the C# code I was working on looked something like this:
I changed the code to use "StringBuilder" (which grows a buffer rather than allocating a new string every time) and sped up the code by something like %10,000. My manager was quite pleased.
But yes, I think knowing "what's going on under the hood" will always be important...
Actually, Java and C# have nearly identical syntax. I would suggest learning Object-Oriented to start, and concentrating on what OO is, rather than all the power of a specific language. OO is definitely the future, but many people who transition from procedural or don't learn the power of objects from the beginning just use Java or C# as procedural languages.
I have found that in programming, taking a class will cut down on the time spent banging your head against the wall because there's someone to answer your questions, even if they're stupid newbie questions. Programming teachers are usually far more responsive than other teachers (systems analysis, database, e.g.) because it's more practical.
If you're just learning how to program, I wouldn't worry about pointers immediately. Visual Basic is powerful in that you can write applications quickly and learn really fast.
Visual Basic: Schneider
Java: Barker
C#: Barker
Whatever your choice, there are free IDE's for all this now from Sun and Microsoft, and part of learning will be learning how to navigate the IDE. It's a great time to learn to program.
Where I live, people can't find enough VB or C# programmers, and not enough Java programmers with a security clearance. Before you buy the hype of the next great programming language, check out the want ads on Monster or Dice and see what people need now.
And remember, the highest-paid programmers (not team leaders)still write COBOL for Mainframes, because nobody else knows how to do this, and the big companies still can't get all their systems off of them.
But it depends on what your goals are!
With VB, you may manage to display a window on the screen quite quickly, but you're not going to learn anything regarding programing.
In the school where I work, the first programming lesson is taught in parallel both in C and ocaml.
The course end up with a practical that consists in writting a small C compiler and a microprocessor simulator in ocaml. After this course, the students are completely aware of how a processor executes code, what registers and ALU are, how a compiler work, what preprocessing and linking mean and what a langage is (like what is a grammar, a token). Another inovative technique in this course consist in a slight change in the specifications a couple of day before the work is due. This helps to show them why it is important to write well structured and maintainable code.
just my 2c though
% ./a.out
Segmentation Fault
% go to hell
sh: go: command not found
%
I feel that VB scripting is an excellent way to INTRODUCE people to programming. They can learn to create variables, set constants, create sub routines, read and write a file, read and write to the registry etc. None of these things use the same syntax as say C++ or Java but they do provide a starting point to build off of.
It can provide instant gratification to the user by seeing what their work has done. Sure you cannot build a program with VBS but it is a great tool for sys admins, it is free and you can get thousands of examples off the internet.
Slashdot +1 funny -4 Insightful +1 informative -2 Redundant
Karma: Somewhere between SCO and Microsoft
Use C# as a starter language to get your feet wet. Then move to (non-Microsoft) C or C++ to learn how to manage more intricate things. Then migrate you knowledge to other platforms (Unix, Mac OSX, Linux, etc..) to see the need for such things.
it's case insensitive
c# and java endeavour to catch common c++ gotchas, and they've done a good job, mostly, all except for one legacy of the c language i will never understand: case sensitivity
what is the point of case sensitivity? simply because of how the human mind works, it can lead to nothing but confusion. anything you can tell me as a positive about case sensitivity i can reply with the simple observation that case sensitivity burdens the human mind with an extra level of attention that is not necessary and would better be reserved for attention to other aspects of your programming
i wish the next major c-derived programming language would try to remove case sensitivity, and would also thereby remove the last attractive thing about vb
intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
Any programmer should be thorough with basic fundamentals and once they master the fundamentals its not a big task to learn new languages. I strongly recommend C because it exposes programmers to certain details that improves his understanding on why certain things like garbage collection, object oriented programming etc. are needed (or atleast why they were invented).
Short answer: NO. NOOO!!
You should never teach OO (And esp. something so no-standard and cluky as VB) to a beginning developer. Use something like C.
Teach them about pointers, and make them do the low level work themselfs. Without it, crappy thrown together code comes about (no matter the language!) & when true problems arrise, they are completly stuck.
depends on who is learning
i started to understand programing in java
vb made it easy to implement making me truly understand java
if you are going to teach someone, vb.net has a free starter kit java is free
most scripting languishes are free so teacht te free ones
making 6 helo worlds doesnt take that long and your student has time to see what is hapening in the difrent languishes.
yes it will take a bit longer but it's well worth it
... by about 6 weeks.
Not to say C# expensive, need unbelievable amount of memory and often weird in their error message and behaviors, it just mix up a lot of concept to make the simplest things hard. For example: how to hide the OO aspects of the language when you come to teach scope ? How to hide classes when you need to draw a button, a textBox, and use Convert.ToDouble just to get a number out of the GUI ? Why you have to mess with objects, properties, and often functions, to make the program write a single thing in a GUI ?
:= instead of = (look more of an arrow, giving an idea of the sense of the affectaction) and finally, iteration is a lot clearer: "for i := 1 to 10 do" or "if a = b then" are much clearer than any C based language constructions.
If I had choice, I would use any free implementation of DOS 6.22 and borland turbo pascal 7 for teaching the first course of algorithmics. Why ?
- You get real easy drawing system using 320*200 256 colors systems, while having great shell user demanding system
- You get a language which make lot more sense than C based system, using begin and end instead of { and } (more expressful), = instead of == (less dumb errors),
- You get strong types as in C, which help a lot dealing with variable scope
- You use ; as in c
- You get clear compiler message
- You can give out bootables disks of the compiler and OS, without caring about the computer they use at home.
- You can make fast conversion to C language at the end of the course, once the concepts behind all the structures are clear. At this point, they'll get irritated by the formal begin end, but will bet harassed by C[++|#|] weird syntax.
Visual basic is a "real" OO programming language, but VB6- was not going from writing code in java C++, to VB6 was a huge pain in the ass due to the limitations of the language itself.
In plain C or other procedural programming languages, you can use function pointers to get most of the functionality, if not the maintainability or uniformity of implementation of OO languages like C++ or Java.
autopr0n is like, down and stuff.
Is VB a good beginner's language?
/. - is that people are fanatical about their language of choice. Many times to a fault.
Sure, why not? But, it depends on what you want to accomplish.
If you want to write a windows app, a script, do some office automation, connect to a database and shuffle data around, create a Web site, or do other practical business-oriented tasks, then absolutely.
If you want to write an operating system, then you'll want to look elsewhere.
First, I would ask "What do you expect to accomplish and what do you ultimately want to achieve?"
What I've learned over the years - especially from reading
When I was in the military, the old timers were so proud of the way things were when they went through basic training/airborne/ranger/sniper school and how difficult it was "back then". They used to wax poetic and tell tribal stories of when they were at NTC, the drill sergeant that used to dump bunks, or the 100-mile road marches. "Things are so easy nowadays" they'd say.
As a rule, people are very proud of their accomplishments (rightly so, I would think). Generally, people are both proud and nostalgic about their conquests, overcoming adversity, and place high value on extraordinary achievments.
You'll read many posts here admonishing VB while extolling languages like C or C++ for what they "teach" that VB doesn't. The real trick is interpreting the value of those statements. Are they saying it's better because it's harder? Or are they saying it's better for pragmatic reasons?
The world changes. Technology changes. Most things evolve and grow and change. Programming languages change, and it's a good thing too I should think. Could you imagine what the Web or economy would look like today if all we had was BCPL or x86 assembler? The fact that a language hides or automates certain implementaion details such as GUI layout should not necessarily be viewed as a detriment or deterrent. On the contrary, any language that can save time while still accomplishing the task or solving the problem is quite effective. Visual Basic, is relatively easy to learn, can solve many problems and many different types of problems, and dramatically reduces the time it takes to implement a solution. Due to that fact it has, directly or indirectly, facilitated a lot of economic growth by enabling companies to effectively solve problems, create software solutions, implement change, and reduce time-to-market. The fact that it's not a "difficult" language is what makes it so attractive to businesses. Difficult != Good (Difficult Good).
Personally, I don't particularly *like* to code Visual Basic. While I've solved many problems with it, I wouldn't choose it over C# or Java. That's just me. I'm used to curly brace languages, so that's my general preference. Having said that, I would evaluate the problem I'm trying to solve before I choose. I might very well choose VB over C++ if the solution warrants it. However, I don't think my personal preferences or opinions mean much to the next person choosing a language.
My advice is, choose Visual Basic if you really want to. Ignore the posts that tell you it's a "toy" language and remember the millions of VB programmers and tens of thousands of companies that have chosen it. I've seen some rather amazing things done in VB by my friends and colleagues - I would say it's far from being a toy. VB didn't become so popular because it's hard to use and doesn't do much. VB.NET is a fully object-oriented language. That puts it in the same terms as C#, C++, Java, Smalltalk, Ruby, Python, et al. It's not cross-platform, so you can't develop for Linux or OS X, but there may be enough challenges just learning an object-oriented language without learning the nuances of each platform at the same time.
If you do what you always did, you get what you always got.
Heh heh heh, seriously though, I'm not that much of a geezer despite having done all those things. Anyway... Logo was a good starting language. Well structured, iterative and graphical, allowing the student to get instant results after changing a function. PASCAL was a good starting language, you could learn the basics of structural programming and the language was powerful enough that you could learn recursion and other goodies in an uncluttered way. Smalltalk would probably be a good starting language, teaching solid OO principles in an environment that seems very similar to Logo. BASIC was a very different beast in those days and was a very bad starting language. Don't get me started on COBOL or ADA...
These days you could do worse than Squeak or some other Smalltalk environment. I like Ruby but it strikes me as being a little too syntatically bizarre for a total newbie. Not that the total newbie has to dig into the bizarre syntax. Or closures...
It's really kind of funny, though. Talk to someone who has very little idea of programming and the most interesting part of the program to them is usually the user interface. Talk to an experienced programmer and the least interesting part of the program to them is usually the user interface[**]. If you want to put something together today then VB or some other happy GUI builder might work for you, but don't mistake that for learning how to write a program.
[*] Except for the Sun guys, they had X11 back when Microsoft's biggest product was DOS 3.3
[**] Except the human interface and usability guys, that's their cup of tea.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
As you say, those are not real Computer Scientists or Engineers. They're sysadmins with delusions of grandeur. Exactly. I read about using multiple threads for networking back when java 1.0 came out, when I was in high school.
autopr0n is like, down and stuff.
Yeah everyone hates VB. VB.Net is the same thing as C#, but with different syntax. (OK there are a few differences, like optional parameters and operator overloading.) Anyone that says VB.Net is a toy doesn't know what they're talking about.
Scripting is a great way for a new programmer to get their feet wet. Check out AutoITv3 (hiddensoft.com) for example. Also, programming JavaScript on web pages can be fun for beginners.
Next up would be the classic compiled language, C. The syntax can be ugly but it is very concise and elegant when you start to learn it. Great things can be done with little knowledge, and K&R's "The C Programming Language" is a great primer.
Once a beginner knows the basics of all languages (loop structures, variables, functions, error handling, debugging, etc) then they can start learning OOP languages. My recommendation for right now is C#. The syntax is easily understood from C. It has garbage collection, automatic reference counting, it's OOP, and an extremely robust framework class library. Oh yeah, and you can make decent money programming in it.
A good beginners language should be more than easy to learn syntax. A good beginners language should introduce the learner to multiple programming styles. The beginner should not be forced into a given paradigm, and should be exposed to how things actually work- things shouldn't be hidden to the extent of VB. You might not use the internal workings knowledge on a daily basis, but understanding it will help.
I'd advocate C++. C++ has direct support for several programming paradigms, and the features can be used to support other styles as well without undue difficulty. The syntax and some of the minutae can be rather challenging for a beginner, but it does expose many programing and design strategies and doesn't inherently hide details needed to understand how things work(except for the hardware specific stuff- but that isn't too important. some behind the scenes understanding is good, but you don't need total understanding)
From what I understand of Delphi it might be better, but I don't have more than passing familiarity with it so I can't really advocate for or agaisnt it.
Back in the day, its IDE was pretty good compared to all the rest. But as C++ builder, Delphi, Qt and others came along, even the IDE didn't stand out of the crowd.
The VB language itself, as well as BASIC, are not good beginner languages. They make easy things harder, and hard things impossible. They have a lot of special-case rules that only make it harder for beginners, and they have no room for growth.
To top it all, VB creates non-portable programs on a non-free platform.
Most CS people just end up doing programming, but the stuff you learn later on (like algorithm running time, and sometimes language and complier design, sometimes functional programming with XSLT) do come in handy.
When you consider how many "programmers" barely even know how to do OO, a real comp sci person can do things no mere programmer could ever dream of.
autopr0n is like, down and stuff.
By the time they offer the general population the tools they need to be "current"...."current" is OLD! You have to be a deep pocket player to get into the game (ie Symantec). It has always been ... just as you thought you were there the game changes completely requireing retraining and recertification...remember how NT4 was "ELIMINATED"! Sheesh! Oh yea...VB 1-6 ELIMINATED! Give yourself a break and stop chasing your tail.
..... VB6 [deprecated]
... IT MUST BE CHANGED! Otherwise we break to many chairs and that gets costly.
... LAMP... shine on!
VB6 NATURALLY COMPILED CODE... who hooo no C+++
You must remember you are fighting against a group that makes money selling you development software so when it is "good enough"
I had held out hope for Kylix but it seems they made a pact with the devil themselves.
My last resort
I'd say python. Most of the simple programs that you run through when teaching someone to program (hello world, calculators of various sorts, sorting, simple search, etc) are all very easy to read in python. It has a rich library (like you would get with .NET), which makes it fairly simple to write more interesting and more satisfying programs sooner. Also, you might occasionally see it in real world software. Indeed, there are tons of open source samples to look at once your student is ready for that.
====
Crudely Drawn Games
I could see where Visual Basic 3.0 would be considered a good "beginner's langauge" because it was easy enough for folks to put together useful programs, and it introduced the concept of component-based development in a pretty straight-forward way. The introduction of classes was the beginning of the downward spiral for "hobbiest" type developers who just wanted to write simple, useful programs and didn't want to have a computer science degree to do it. Start talking about issues like polymorphism, inheritance, operator overloading and virtual methods and their eyes just glaze over. They're the engineers, the business people, the ham radio operator etc. that just want to write something that's personally useful for them. As for teaching programming, it's information overload (no pun intended). You can't just sit someone down and from scratch start throwing even basic concepts like classes at them and expect them to have a clue. .NET in general has made the learning curve impossibly steep for folks who are completely new to the programming world.
"Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." --Albert Einstein
As a programmer who started on the command line languages, I'd say starting with an interface centric language like VB might be a bad idea. I'll admit it is powerful, but that's a seperate issue from whether or not it is a good beginner language. It has several important beginner-friendly features.
1. Drag and drop interfaces remove the pain of being bogged down creating user interfaces. In traditional languages, this part can take up half your implementation time.
2. A great library that does 95% of the things you might need on a daily basis. In other langauges, these libraries exist, but they aren't necessarily part of the compiler or default installation of that language.
3. Hit F5 to immediately see how you're doing. Might take a little more work in other languages (such as FTP => browser => F5).
4. Auto code formatting to make all your code pretty like a pro
That said, I believe VB spoils you in certain ways that can be extremely detrimental. This is because programming in VB is nothing like programming in PHP/Perl/C++/Python/etc. Part of being a programmer is being able to pick up new languages down the road, which may be less managed than VB.NET. Going from HIGHLY managed code to unmanaged code, in my opinion, is much, MUCH more difficult than the other way around. There are many things a VB programmer may do by accident when programming in another language that could cause serious bugs or security holes simply because they are not used to covering all the bases the compiler would otherwise deal with. Additionally, the ease of the language may promote programmers to start coding without fully learning or understanding important programming principles (such as good class implementation, naming standards, common logic shortcuts, etc). This ultimately will produce a lower quality programmer in the long run.
So, yes, it is a good language for a beginner to pick up, but it also makes it harder to jump into a lower level language down the road. Of course, you want to be careful about what language you start at since if you start at assembly you'll probably kill yourself. C and C++ are traditional favorites, but only because they are the industry standard. I have programmed in many languages for many years, and I find PHP to be my favorite because it balances basic OO principles without overly complicating things (aka Java). It is also easy to learn and an easy step to or from C++. I have recommended many friends to try it as their first language and have seen positive results.
And one more comment, why has no one mentioned C++?
Yes its ugly and a syntactical mess, but it's arguably the most practical language out there. It's multiplatform so that avoids the "windows only" issue. A person teaching C++ to a student can also choose a small subset of its features to keep things initially simple. And any way one wants to mold this future programmer is possible because C++ covers most of the basic design ideas. It's got OO, templates (algorithm driven programming), a full featured STL, functors and it doesn't force garbage collection at the language level. Ideas like const references, const members, pointers, stacks, etc. is an important principle to learn early on.
Having said all this, I like the idea of teaching higher level languages early so programmers don't get too narrow minded. Concepts and design are important and typically high level languages handle these things. Chances are that 20 years in the future many programmers won't have the slightest clue whats happening at the architectural level because it won't matter with the language they use and problems they solve.
"Recursive bipartite matching"- try it!
It's proprietary, runs on one platform only, and it's basic (on steroids).
'Once scientists, even the dim-witted social scientists, get muzzled, the Western Civilization is finished.' - oldhack
Well, that assumes that you have a memory mapped, square image to work on, which might not always be true, otherwise it would crash since you typed it wrong.
Not that it matters either way. Can you tell me how to rig up logic gates in order to implement that function? I can, it was required in my CS program to take an introductory digital circuit design class that went all the way up to building whole CPUs.
You can always go to a lower level, that doesn't mean that your smarter then someone, or that your compiler wouldn't just optimize the code in the first example anyway.
autopr0n is like, down and stuff.
I've been using MS compiled basics since Professional Basic back in the late 80's. I've used VB, VB.NET, etc. I've used variants of it like vbscript and lotusscript. I've used turbobasic and qbasic.
:-)
I also write in Java, and sometimes C, C++, and C#.
Issue #1. If you're starting from scratch, why pick something owned by a single vendor?
Issue #2. VB.NET isn't even remotely like old world BASIC. Even Quickbasic and Visual Basic were pretty much still very much like working with the original language. VB.NET just isn't. Starting fresh, there is very little difference in time and skill required to learn Java or C#.
Issue #3. VB is the only language in common use that I'm aware of which is NOT case sensitive. That means you're going to pick up REALLY bad habbits by learning with it. Personally, I think it stupid that modern languages are case sensitive -- it smacks more of arrogance than anything else and I just don't believe it matters that much at compile time. Still, why learn the bad habbits?
Issue #4. Personally - purely subjectively - I find Microsoft's documentation terrible, and their own support of VB to be secondary. If you don't already know what you're looking for, finding something entirely new is a nightmare with the vs.net languages. You are in a maze of web pages which all look the same. There is a mushroom growing on the way.
My recommendation would be to pick up Kathy Sierra's book "Head First Java" and download Eclipse. Eclipse, as an IDE is fantastic and fun to work in. Kathy's book is the best learn-to-code book I've ever seen, hands down. Between the two, you can be doing good work very quickly.
Hope this helps.
The problem with quotes on the internet, is that nobody bothers to check their veracity. -- Abraham Lincoln
As fun as it is to be pejorative, what makes VB.NET "still a toy"? Are you aware of its functional overlap with C#? You know that you can more or less do automated code conversion between the two, right?
:)
I have a soft spot for Pascal - that's where i really cut my teeth programming, with borland 5.5, 6.0, and 7.0. Hell, i wrote a multi-threaded OS/2 program in BP 7.0 with some secret compiler from germany. I wrote a _lot_ of borland pascal code for DOS back in the day.
However, none of that compared to the rapidity with which you could crank out working code in VB6. IIRC, VB6 was Microsoft's biggest money-making developer product. VB6 turned all BASIC programmers into Windows COM programmers, and if you've ever done COM in C/C++ you know that you really want to be using something like VB instead
VB helped bring non-expert app development to the Windows platform in a way Delphi never did. Not because Delphi is necessarily bad, it just didn't work out that way.
VB is beautiful because it works in the real world. Somebody really smart must have thought "everyone learns BASIC as their first programming language.. let's make an environment where you can write real GUI programs that do real useful work in the language even school children can learn" (i started writing applesoft 3.3 basic programs as a 5th grader.. it wasn't until jr high that i got into pascal on a 486)
When I hear people being snobby about VB they're usually pushing something where someone else will be snobby about _that_ (that person is probably pushing "haskell" or "eiffel" (sp?) as the "one true faith". Yet I'd speculate that VB has made more people more money (and i dont just mean microsoft - i mean the computer industry) than all other languages/environments combined.
My opinions are my own, and do not necessarily represent those of my employer.
I just recently got into Ruby, but I wish I would have started learning programing with it. Its got the OOP learning curve to get over, but the way that nearly everything is an object in Ruby gets you over that pretty quick. Besides, its best to get the whole OOP thing done with so you can learn good programming. Ruby has been useful to me in the common areas I deal with - shell scripts for sysadmin tasks, graphical applications using various toolkits, and web application development.
Ruby also gives some great tools for beginners to the language, or programming in general. Irb, the interactive ruby shell, gives you instant feedback while trying out new(-to-you) features of the language. Erb, embedded ruby, is great for the web, but also allows you to create templates for non-web files. All without needing to learn another templating language. And while we're on it, Erb allows you to move your programming skills onto the web. Most newbie programmers who ask me about programming either don't understand the difference between classic applications and web-apps, and are mostly interested in the latter. By giving them a way to immediately see the results of their programming efforts in a familiar way gets them deeply interested in expanding their knowledge.
While there isn't a flood of books and online resources for Ruby, there is one coming. The current market is thankfully filled by such excellent texts as the Pragmatic Programmer's Guide (maybe if I pimp them enough they'll hook me up with some free books) and the entertaining Why's (Poignant) Guide to Ruby.
Ruby provides the perfect mix of logical syntax and language features to make it a great beginners language. Starting with Ruby will give an up-and-coming programmer the skills needed to work with OOP and create clean, beautiful code.
I haven't even talked about Rails yet... and I won't. It rocks, thats all I'll say.
Besides, Kylix3 sucks ass and is unsupported, so Delphi remains Win32-only-area.
'Once scientists, even the dim-witted social scientists, get muzzled, the Western Civilization is finished.' - oldhack
Wait....you mean that line isn't mandatory? I've been typing it in for years!
-g.
VB does give a good framework for learning programming languages, and understanding the concepts required for computer programming.
It has two major disadvantages though. First, since it's not an open standard, you'll be limited to learning on Windows Based platforms. While a lot of people won't see that as a disadvantage, for someone like me who uses no Windows systems, it's a drawback. Second, you have to pay for it.
As an alternative, consider some of the advanced scripting languages like Perl or Python. They're free, well supported by large user communities, and run on nearly everything.
It's good to use your head, but not as a battering ram.
Visual Basic was my first programming language, and it's a powerful language and Microsoft is a powerful platform.
The problem is that to do anything in the Microsoft family requires continual financial investment. Visual Studio itself (standard edition) is $299. As you learn to program, you'll probably want to program what's called "Client / Server" applications. You'll probably want to buy SQL Server ($6000 for the Standard Edition), Windows Server ($1000-ish). As you develop, you'll always find that you need other products that you don't have, and you'll always be trying to decide is it worth buying the product to learn how to do things.
Alternatively, you can learn how to program in the open-source environment. You'll find wonderful, free development tools. You'll find a community of people eager to help you learn (rather than paid support options). And, once you learn how to program this way, you'll be able to deploy real applications, without paying high licensing fees.
I remember, when I started my first company, we were a Microsoft shop, and I wanted to give away some of the technology I had written to non-profits, but I couldn't because they could not afford the licensing fees.
If you want to program a web-based application, I would install linux and apache-ssl and learn PHP. If you want to program an application to run on a client-computer, I would learn python. Both are very elegant languages that are easy to learn and have huge developer communities that are very helpful. These environments are very good investments of your time, easy to learn, and will prepare you to not have to change courses later on.
In my opinion, you should begin strictly conceptually. A man who was friends with my highschool programming teacher wrote a program called Alice, which is intended to teach programming on a strictly conceptual level. The user creates an environment in which they can create animations with 3d objects. It introduces concepts of object oriented programming, if statements, else statements, functions, for loops, while loops, recursive loops, data structures, and virtually every other necessary concept in programming, without ever having to look at raw code. Once someone has these concepts under their belt, they can generally move to any programming language, only needing to work on syntax, which varies from language to language anyway. I really feel that Alice is the best way to learn programming concepts without having the concepts be tied to a specific language.
Another plus about Alice, is that because it's intended as a teaching tool, it comes with a set of prepared lessons. If you missed the link in the middle of the last pargraph, here it is again. Hope it suits your needs.
It isn't used much anymore but it was one of the very first object oriented programming languages. OOP is very important for modern programming. If you're applying for a job most companies will require that you do OOP. Its very easy to learn and it teaches you the fundamentals. If you want to jump right into the thick of programming start with C# or C++. .NET is a good bet for a job right now. Most places will expect you to have a computer science degree.
Read my short stories - You won't regret it.
I learned more about OOP in my Java programming courses at LSU than I did in any other class I had while I was there. It was just cleaner than any other programming language I learned in and not near as hard for me to debug as C. Visual Basic was an experience and I felt I didn't learn much. I noticed that the other students in the class learned primarily just how to be lazy through use of VB. It promoted programming that was lazy, clunky and bad interfaces.(However I haven't programmed in VB since 2002.) I wonder why they don't initially teach students control structures, functions, data structures etc. on something like PERL at first since its so much easier to debug or PHP since it can be done from most any computer and works with web pages easily. Then again I'm not a teacher so I suppose there's a perfectly good reason for doing what they do.
For some reason I refuse to use either spell check or the spacebar properly.
I don't really buy into the idea that languages are good for beginners or are expert only.
A programming language is good if it is easy for you to express powerful ideas in. Any language will cause you to become comfortable with it to the exclusion of others for most people; therefore, you're far better off sucking up the learning curve of a language you want to keep using, than learning Logo and Pascal and throwing them away. If a language forces you to use conceptual language that you can't get your head around, that is not the right language for you.
It's also a good idea to pick a language that's actually used if you want to have a career in it, or others will support your code later. If you don't know what language to learn, the cutting edge is probably not the place to start.
I recommend: perl, python, C, lisp. Maybe C# or Java, but my personal bias says that if you want to go that route, python is a better language. They're reasonable languages, though. If you know you have a particular need to write utility scripts for windows applications, particularly MS Office, you probably should consider VBScript, but once you've used something else, you'll never be able to go back.
If your goal is not to have a programming toolkit in your back pocket, but instead to understand programming languages, I'd recommend basic understanding of: Assembly (to really know what's going on behind the scenes), Lisp (to really see what a powerful abstract language can do), C (to have a low level control in a high level language), and perl (to have a useful blend of high level abstractions of things you don't want to worry about (memory allocation, strings) and still have a more natural syntax than pure lisp.) Once you can write a non trivial program in all four of those languages, you'll have a good understanding of what you value and don't in a language, and can make informed decisions.
(I've done all of those, and a few others, and found I like perl the best. Different problems and different people are suited towards different solutions.)
(However, with this many parenthesis in a post, you'd be right if you concluded that I also think lisp is nifty.)
-- Kate
That will just raise another generation of programmers who confuse pointer arithmetic with efficient programming. We already have too many of those, and that's why applications keep crashing left and right, and why software releases keep getting delayed.
People need to learn about pointers, but they need to learn about it understanding that's it's a special purpose technique to be used rarely. C# is a good language for that, since it has pointers but discourages their use.
Or you just want to get some work done? If you really want to learn something, you should do it with PASCAL. Some people told you do study C, but after trying to teach it to a few people, I am fully convinced that C is not a beginer's language. PASCAL is different because you won't need to know about pointers to do quotidiane stuff, but still have manual memory allocation to study.
To learn how to program, use PASCAL on a CLI. Don't worry about the time investment, you'll learn VB much faster after you know what you are doing. Just to finish, I'd like to put here a very true quote from Dijkstra:
Rethinking email
- Smalltalk
- LISP
- Prolog
These teach different styles of programming and a lot of useful concepts. I might throw Pascal into that mix too. The next languages that they should learn are C (for when you really want an assembler, but need to be cross platform) and Erlang (for when scalability is king).If more people learned real languages before jumped-up assembly languages like C and pseudo-OO languages like C++ then we might see a bit more innovation in the language design community. Oh, and all three of the languages on my list run in an introspective environment.
I am TheRaven on Soylent News
I say Logo ;) Think of the cool pictures (or goto staements :) ) I did Logo, old school BASIC, years later I did a little C, then Z80 asm, then C/C++, then steped back into Modula (blah vs C). If I were starting today I'd probably go with Python as a first...
I use VB.NET and its a message. Ehe programs are huge, slow and can't be distrubuted without a 100 megs of addition binary. But enough bitching, you asked for a solution, here's what I have IMHO:
VB/VB.NET - Good at teaching GUI concepts. A little clunk at some of it OOP.
C# - Its Java with a nice GUI
C/C++.NET - Its nice, but for someone learning I think its overkill.
I would recommend:
Freebasic - Its free and compatible with most QuickBasic code. It compile to Window, Linux, DOS platforms.
Bloodshed Dev-C - Its free, makes small binaries, and actually is a VERY nice gui for MingW/GCC. Oh and you don't have to worry about setting up GCC, it does automatically for you.
You say things that offend me and I can deal with it. Can you?
This question has no answer unless you specify why the beginner wants to learn how to write code.
Is the beginner trying to start a career path towards becoming a programmer? I would definitely recommend they start with Java, preferably by taking a class at a local community college. It's not as easy or enjoyable for an introduction to programming - but enjoyment isn't the goal.
On the other hand, if the beginner is simply interested in the field and wants to tinker around a bit in their spare time, by all means start them on VB.Net. A complete beginner can be running applications of their own making that have text inputs, clickable buttons, menus, and shiny picture graphics... in their very first session. This has an enormous effect on their confidence and enjoyment, and they learn about variables and procedures very painlessly. Most importantly, this will have the strongest real world applicability for them. Not many people I work with would write their own java application for something, but a significant amount regularly use VB macros.
For the beginner, learning C is the best thing. Just what is memory? What is a pointer? Referencing? Dereferencing? Variable types? Get all that, and learn the functional paradigm, and make the poor bastards program some.. AFTER that teach them about the OO paradigm. The most important thing, in the beginning, is to get visible results. THEN explain how those came to be. And so on. Keep them clear away from proprietary, dead bullshit like VB.
OO is not the end-all either. It all depends on where and how the end product is used... I can use /bin/sh and netcat for most stuff :-)
'Once scientists, even the dim-witted social scientists, get muzzled, the Western Civilization is finished.' - oldhack
I've been told that at some universities, such as Waterloo (Ontario Canada),they start their students with Scheme as the introduction language for Computer Science. Although definatly not a great standard for learning other languages that would be helpful in Application Development, after exploring the language for quite sometime now, I find it really pushes you to think in creative ways, (recursive functionality is big in Scheme), that are important in learning how to make clean code.
I've heard proponents at Waterloo describe the transition between Scheme and other languages like java and c++ seemless, and you end up with better programmers.. I don't know if I'd go that far, in Scheme you don't have to worry about typechecks, you're dealing with lists of data all the time.
I don't know really, I just though I'd throw that out there.
If you want to really learn how to be a good programmer, Scheme is a good place to start. It's extremely simple, and a great way to learn recursion, etc. If you just want to be a code monkey, maybe something else would be better though. I know learning Scheme substantially improved my programming abilities... The fact that Berkeley, etc. use it as an intro programming language is another good argument in favor.
No!
There is so much talk on what's a real language, what's not, blaa blaa. I actually think M$ has done well with vb.net. Granted syntax is pretty much all that survived (along with a bunch of add-on's for old timers) Personally I've come down the path of Ada -> C/C++ -> Java -> C# -> vb.net -> as well as a few other wieldo lauguages along the way. I'll say it.... VB.NET is pretty good. Yes VB6 sucked balls but this is not the same environment and it should not be viewed in the same light. As long as you understand how to program and what the hell is going on behind the scenes it holds it's own for the correct application environment. This mentality of real programming really gives me the shits, but I understand it as I was once there. Market forces in rational thinking won me over eventually. Bottom line whatever. I've got a job to do and this tool works.
Those who disagree are toy developers.
no
no
no
I like squeak if you want to have fun learning programming and are creative use squeak. If you like math and logic and learn some theory (lambda calculus) use scheme or lisp. if you want to make somthing that works for windows use vb. if you want to be a system programmer learn c . if you want to automate a workflow on a mac learn applescript. python and ruby are very usefull and general languages. if you ....
But learn to write in a good style from the first moment. Try to disect the problem at hand in smaller problems.Try learn some theory and be always critical.
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)
Teen Angel - a Ghost Story
Programming is more than this crap ...
I have more than a decade of coding experience; I had a brief VB stint (maybe 1-2 months), and it took almost 6 freaking months to get the corrupted brain patterns it encourages out of the head.
I'd actually go for smalltalk.
I use VB daily at work. However I still believe that in order to learn programming techniques properly, I would suggest still learning: C++, C#, Intel Assembly, and Java. VB is something that comes VERY easily after using those languages.
-- Josh
"Whoopie! Man, that may have been a small one for Neil, but that's a long one for me!" - Pete Conrad
Funny- that isn't that different from my suggestion that interpreted languages come first. Lisp and Prolog are both interpreted languages- as is Scheme. I haven't had a chance to play with Smalltalk.
However, I'd point out that innovation isn't actually required for 95% of the coding done today- basically the way to earn a living right now is to take a paper business model and turn it into a client-server database. I've never quite figured out how to break into professional programming in LISP or PROLOG- and near as I can tell, only the military uses Smalltalk.
If more people learned real languages before jumped-up assembly languages like C and pseudo-OO languages like C++ then we might see a bit more innovation in the language design community. Oh, and all three of the languages on my list run in an introspective environment.
True enough- though I might actually throw REAL assembly in there, but a microassembler rather than a macroassembler. Some of the most innovative programming I've ever seen was back in the 1980s trying to speed up graphics routines on an Apple IIe in 64k of memory; that was the first time I was exposed to self-modifying code.
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
VB is an excellent choice for mediocre programmers who already have a basic grounding in CS. Unfortunately, VB tends to mask the basic CS skills a developer needs to acquire to grow beyond it. I've worked with several people who had great potential, but were forever stuck in a VB frame of mind. Java and C# are nearly as easy to learn as VB, granted they are lacking a bit of the syntactic sugar. I would recommend Java over C#, simply because the class library adheres much more closely to the standard "Gang of Four" design patterns, which equates to exposure to good design principles for a new developer. Don't get me wrong, .Net has a good class library as well, but I find that it isn't as consistent in its interface definitions as Java is.
.Net class library, and as such is no different from C#. Having spent the last few months cleaning up after VB.Net developers, I would argue that it would be, if they used it as such. Frankly, when a new or unskilled programmer picks up VB.Net, they immediately use Trim$(myString) versus myString.trim(). Granted, it does the same job in the end, but it is training them to avoid OO methodologies.
Now, the argument that will probably pop up to correct me is that VB.Net uses the
My next big rant would be that VB.Net will spoil a new developer on expecting everything to read immediately like plain English. Don't get me wrong, now, that's one of the nice things about VB. If Then... Gotta love that, except... If they get spoiled by this, then they are forever stagnated in VB. I have one developer I work with, every once in a while, who simply refuses to transition to any other platform just because he is locked into VB's syntax. A syntax which is unlike 90% or better of any other languages out there.
Java, C#, even PHP and Perl, share more in common in syntactic terms than VB does. Start a new developer out on a platform that will foster a better understanding of other platforms, instead of locking them in like VB tends to.
<Disclaimer>I made my living for years doing VB, but not by choice. I'm a dyed-in-the-wool C programmer, who prefers Java these days.</Disclaimer>
As a great coder once said: "Teaching BASIC should be a capital crime. It ruins a programer forever."
Dijkstra was a "great coder"?
Great computer scientist, sure, but when was the last time he even touched a computer?
All beginners should learn something simple with C-like syntax like perl.
Oh, you were trying to be funny. Ha, ha.
The quintessential beginner languages!
Ok, why do people still mention VB in the same breath as actual work for money? Did Microsoft write Excel in VB? Did Microsoft write ANYTHING in VB except for HORSE and WUMPUS? Did Sun write Java in VB? Is VB written in VB?
``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
VB is not a good first language, or a second. If you learn something like Java or C# at least your code (and skills) will be portable to other non-MS worlds. C# and Java are both easy to learn; it's the libraries that require vast load of grey matter.
If you want to have quick success and your goal is to write simple, small tools, then yes. RAD tools like VB are exactly what you're looking for. They offer the ability to reach quite far with very little intimate knowledge about the inner workings of your machine.
It is also a good tool when you plan to work on small to medium projects that might have to be maintained by programmers with little experience. Most people who can write some kind of code can write code in VB. No matter what language they come from. You can code in C, you can code in VB. You can code in Perl, you can code in VB. It's not necessarily true the other way 'round. This makes VB an interesting language for projects and companies with a very high fluctuation in their programming teams.
The drawbacks are dramatic, though, if that's not enough for you. When you want to write larger programs, especially if those programs should be portable and/or using lower level routines, you will sooner or later hit the brick wall with VB. And then VB gets back at you for taking the shortcut to success. You don't know anything about indirection, you don't know anything about window classes or window handles, you don't know a thing about object oriented programming (and what you know about it is wrong in the eyes of C++).
In other words: Go back and start over.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
Learn to program *what* exactly?
If it's writing pretty programs on the PC, then why not VB?
If it's to learn how to write software for embedded computers, then no, C would be better.
Personally, I'd say assembly language is the best. But thats probably just my age.
Open Source Drum Kit, LPLC deve board - mjhdesigns.com
Granted, you can't use it outside of Second Life but Linden scripting language is
pretty simple (C-like) to learn, and a starter account is free, including integrated modeling and scripting tools.
And what's more fun to write, a text version of "Guess a number from 1 to 100",
or a donut that turns into a 30 foot tall flaming monkey when you say "Impeach Bush"?
Chris Pine has written a book, which is also available online, called Learn to Program which uses ruby to teach basic programming concepts. In addition to the book, he offers his thoughts behind introducing students to programming, and why ruby is a good language to choose. I enjoyed his book, and I generally agree with his ideas on teaching.
I still think that if the student wants to understand how a computer works, there is much insight to be gained from using a low level declarative language like C, and this should probably be the next language she learns. However, as a first language I would go with ruby (and definitely not VB). With ruby, the introduction is easy, with intuitive syntax and no steep learning curve, and yet as the student's skills progress, she is free to experiment with more advanced programming concepts like lazy evaluation and currying.
Not that I post on slashdot or anything.
That, or they should be forced to cut out their own entrails with a rusty spoon. Let's face it, Python can't be beat for interactive, interpreted power _and_ simplicity.
-- Let him who is without spelling error ignite the first flame --
First of all unless you want to rid yourself of a potential competitor find a language with a relatively simple syntax, with a decent set of builtin functions. Visual Basic was probably never a good starting point either, except that it let a novice do somewhat flashy stuff without knowing how exactly to code a form box. After programming for many years, I bought visual studio 97 when it was still the rage... only to find that visual basic was perhaps one package in it that actually worked close to the advertizing. Much of the code is hidden from the novice, which makes it deceptively simple to navigate - until you bump against its limitations or encounter some other problem. When I was in computer science school at vpisu (vippysu) we started with PL/C (a pl/1 subset), then assist (an assembler subset) then on to the real PL/1 compiler. My opinion is you need to start with something the student can actually get to work, see progress, and not get so bogged down in details of the environment, that nothing is ever accomplished. The final comment I have is why would someone want to learn a language anyway? With all the development work being done elsewhere (Im a developer out of work four years now) there really is no point except perhaps for maintenance, which you can pickup on your own if you are relatively intelligent, with a decent book. Our response to the outsourcing has be to build the next generation, of next generation "CASE" tools. This will eliminate coding, maintenance, outsourcing, recruiters, agents, IS departments, and etc., ad infinitum. These tools will not pretend to operate in any of today's languages. Of all the languages in use today, only a few emerging languages like "C--" and perhaps a few assemblers will even be relevant. I have worked on the software tools used to design and build telephone networks, swithches, as well as computers. Building computer programs is not an order of magnitude more complex than any of those hardware systems. In this new age the idea that a language is needed to communicate with a computer will be fog in the quest to make use of intellegent technology. If you insist try D.
I am glad I cannot relate to this bottom feeding devolution. I doubt that you are describing anything you have experienced in real life. But if you are it is a sad commentary on the influence marketing forces in programming education. So many brilliant people have worked so hard to make learning programming rewarding and fun, and they are ignored. Alan Kay and Squeak. Abelson and Sussman with Scheme... Instead we get enthusiastic discussions of Bill Gates and Visual Basic.
an ill wind that blows no good
Java is superior. First of all it is likely to be the language you will use at daily basis in the future (2/3 over 1/3 C# on the market), or at least something close related to it. It is easier to read than C# because you have to define thing more strict. (I think it is easier to learn C# after Java than the opposite). Java Apps is also funny for students, and you can move it around on "all" platforms. Java is more flexible. C# is easier for larger projects (needs less configuration), but not for teaching.
VB is a good beginning language. VB makes it easy to do certain tasks that can be very annoying in other languages.
It is terminally broken for most real development (at least as of the last version I used a few years ago--this may all be out of date).
The ability to work as a group was nearly nonexistent. You must be able to build an interface that sits between any two pieces and allows independent development on both sides of the interface (including compiling). It must be easy to check the code in and out of version control. You should be able to scan the source code without an editor. You would NEVER give your ability to modify your code over to a single-source vendor or tool!
That aside, as I said, if you only have 3 or 4 people in your group and your work is fairly independent go right ahead and enjoy VB.
However, basic is a horrific language for training.
It is way too abstract from underlying implementation. For instance, it doesn't teach you to understand the difference between stack and allocated variables, pointers are completely gone, and the event loop--critical in all languages--is completely hidden. Great for lazy development, but sucky for training.
It's inflexible. For instance, Java was able to implement Swing without modifying the language (an entire graphical display system.) Eclipse was able to re-implement the entire thing (SWT) independently. Creating a dynamic form from code (rather than the form builder tool) is (was?) amazingly annoying.
It's inconsistent. Do you put parenthesis after a keyword or not? Well, depends, how was it defined? Why would you allow both SUB and FN? They are the same thing but with arbitrarily different syntax!
It doesn't teach OO concepts. People think that because controls use dot notation, they are "good at OO". Polymorphism and inheritance are the keys to OO, the stuff that was in VB is simply an organizational short-cut. (MS may have added to VB since then)
To put it another way, I have NEVER met ANY engineer who would hire a programmer that had never used any language but VB in their business projects. Only C# maybe, only Java all the time, but never VB.
I find it interesting that lots of suggestions have been thrown out there without anyone actually asking who this "beginner" is. Is is a young student with an interest in computers who you're trying to get interested? Is is an intro to programming student in college? Or is it someone out of school, in a completely different field who's just trying to automate some of his more tedious computer tasks?
Now i've been all 3. I grew up with BASIC on the commodore and apple....writing simple little programs to play music and scroll text on the screen. I think what makes BASIC good here is that it's about the closest computer langauge to English there is, so it makes it easy for someone interested to jump right in.
In college (I'm an electrical enginneer, not CS) we took a few intro to programming courses using C++, though I heard that soon after they've now switched over to java. These sound reasonable to me because they introduce you to a large number of programming concepts, in a generally well designed and highly popular language for large projects.
As an intern, I worked for a collections agency. At the time this agency and many of it's clients were still using database systems from the early 80's....essentially using flat files. Information was emailed back and forth between agencies in flat files and every day we'd have to open a bunch of them....and manually add up a bunch of numbers to generate checksums for the clients, and reports for the managers. These reports were generally created in Excel and took about 2-3 hours each day to complete. I learned a bit of vba, and created a spreadsheet that could select the flat files and generate the report automaticly...cutting the time from 2-3 hours each day...to 5 minutes. They wound up using the spreadsheet for a few more years until they lost that client, though the amount of time saved over the apps lifetime was still several thousand times what it took to write it.
Today I work for an engineering company, and VBA has been invaluable in automating and extending AutoCAD to make our lives easier and save time. You have to remember, Dozens of the most popular office apps can be automated by vba...and increasingly VBA.NET. Generally these are all small projects, many of them with very limited lives...but they're very usefuly, and there's tons of them out there.
I'm shocked that everyone has glossed over this point. I guess most people here assume that everyone wants to grow up to be a top notch open source programmer, ignoring the fact that it represents only a small percentage of all the programming going on in the world.
-Chris
--an unbreakable toy is useful for breaking other toys--
At lest I know which language NOT to teach anyone new to programming. Perl is horrible, but genius at the same time. You can almost invent a new language inside Perl.
No, Period
If you are going to run on Windows at least get free tools direct from Microsoft: http://msdn.microsoft.com/vstudio/express/default. aspx
VB is definitly a good language if you need to code tools and have little time to do so, however as a learning language i would recommand ADA http://www.adahome.com/ Very good for teaching beginners especialy to learn how to handle variables.
Damn your luck Maxume. You've been hit by the one female slashdot reader with mod points. (Damn you, Taco's wife...)
While I can chuckle, I can't say I agree with the less complimentary adjectives.
But the leadership doesn't. The DNC political advisors merely want to keep their high paying salaries, and depend on the good graces of big business to do that. Media consultants merely want to skim off the top of those political commercials that can only be funded by big business. Politicians merely want to stay re-elected, and pander to big business for campaign finances and post-congressional lobby jobs. Winning control of the House and Senate is secondary to these people, as it is to big business.
This is the reality we live in. We will either have to erode the relevance of the Democratic Party and suffer continual Republican victories until a replacement party can squash both, or you will have to shoot DNC operatives until all of the traitors are eliminated.
They don't stand for anything. Unless you count their self-interest as a principle. Which is what the Republicans stand for. Hell, they jettisoned fiscal responsibility in gov't, adopt invasions of convenience, destroy the economy so foreigners call the shots, and is more than happy to abandon US servicemen and destroy the US military.
It should be freaking obvious that Hilary does not have a snowball's chance in hell of winning a presidential election, because she doesn't appeal to the Red State cretins that voted Bush over Kerry. Kerry never inspired the hatred Hilary does. So yes, I agree, the RNC would love Hilary as the Democratic candidate for President.
There is no America. There is no democracy. There is only IBM and AT&T and DuPont, Dow, General Electric, and Exxon
Please don't associate those Java users with us C++ (and C for the procedural of us) users.
*shudders* I feel so dirty.
when you see the word 'Linux', drink!
seriously. You'd want to move on pretty quick, but a lot of good stuff is there. Syntax is very c-like. Usual suspects for operators, loops, tests, exceptions, try-catch. Don't need any expensive proprietary software. Lots of documentation. Garbage collection. Loosely typed. Object Oriented.
The kicker is it's very safe. You're likely not going to hose your hard drive or lose a tic-tac-toe match to wopr. You'll have a head start on AJAX and will be able to read c and java well enough to start learning those as well.
"Let him go, Ralph. He knows what he's doing." --Otto Mann (simpsons)
I guess the only difference between any two languages is syntax--that's what a language is. The rest is just API.
However, if you're going to program for .NET and you're not an old VB programmer, don't learn VB.NET, learn C# instead. VB is a syntactically ambiguous language, which is why C# to VB.NET translators are easy to come by, but VB.NET to C# translators are a bit more problematic. For example X=A(5) could refer to a function call, an array index, or a number of other possibilities, depending on what "A" is, which you may not know based on just that one .vb file.
Add to that the classic "bad habits" problems associated with BASIC, and you've got yourself a crappy starting point. For example, BASIC uses a single equal sign for both assignment and testing equality. BASIC uses 1-based arrays, and horror or horrors, allows you to change that behavior. I could go on, but other people will probably cover this subject adequately.
If you're doing .NET programming, which is a perfectly valid place to start, use anything other than VB.NET. E.g., C#, J#, Python, or one of about 20 other .NET languages. Don't bother with VB 6, it's going away.
"With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea...."
RFC 1925
Here's the issue. pay attention to this one fact that you are all ignoring...
NOBODY WANTS TO LEARN PROGRAMMING WRITING A CLI APP!!!
Nobody wants to do "Hello World!" (or "This is not Hello World" for the Java-Idiot-Savants out there)
Visual Basic 6 was the single most propular language in it's time...Why? Because in 10 minutes you had a full grasp of what was being created, and how to change it's functionality.
Ok, so I've taught you C++...great. You know variables, functions, objects, flow control, and all the trimmings.
Now show me a nice GUI in Windows that says "Hello World" ala VB style.
This is why RealBasic is starting to take off. MS abandoned VB6 simplicity for this pile of crap called NET.
You want people to learn Java as their first language? Fine, show me a way to get a GUI up and running quickly after I learn the basics.
* VB is badly OO and confuses the language and the library too much.
.net, and other .net iumplementation i.e. Mono
Not anymore
* 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).
It is nolonger bad OO and OO is a good paradigm to learn to program with.
* VB ties you down to using Windows, and Windows is a bad environment to learn to program in.
Acutally, it ties you to
* 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.
Which is how things are done now. However, you can implement garbage collection for those time when it is critical to do it now. However that is an indicator of either poor design, or that you should be using code that is clser to the machine.
* 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.
You can do this in VB
* VB teaches bad, verbose naming and programming habits.
That has nothing to do with language, however accurate verbose naming is far better then short obscure names.
Verbose programming habits in application development is a good thing. Not the best, but certianly better then implementing somme little know technique that is hard to deciphire jsut ecasue it saves a 1/100 of a second.
Funtion oriented programming languages are a poor place to start. The habitrs generated in those create very bad habits in OO programming.
All but two of your recommendations are total useless for real worled practicality.
The Kruger Dunning explains most post on
In the open-source community! The Free Pascal Compiler is a working command line compiler for the Delphi language, Object Pascal, and a graphical IDE called Lazarus is available to step in for Delphi itself.
Beholdeth the Open Source Power, that it doth keep languages from the grave!
With .NET 2.0, this is no longer entirely accurate. Even with 1.1, you could have used Array.Copy instead of the loop like someone said. Beyond that, with 2.0, you have access to Array.Resize:
// populate x
VB.Net:
Dim x(10) As Integer
'populate x
Redim x(20) As Integer
C#:
int[] x = new int[10];
Array.Resize(ref x, 20);
Personally, I'd have to say the C# variant is the simpler one now.
Perl - $Just @when->$you ${thought} s/yn/tax/ &couldn\'t %get $worse;
I know I'm going to get shot for saying this but I think Logo still is the best choice.
1) You can start writing programs instantly.
with just 3 keywords: forward, right and repeat you can do quite a bit and by the end of it understand looping structures, subroutines, computer organization, state.... And that can all be taught and understood in about 2 hours using logo.
2) Logo has a pretty good subroutine system. From there you can learn about variables and recursion vs. iteration...
3) Logo is a LISP and like every lisp there was enough lisp left behind to do anything. So from inside of Logo you end up having a good language to learn every other paradigm
4) Modern Logos have multiple turtles interacting and thus you can learn the event driven paradigm and how to program in a thread safe way
Aren't there any other Windows Only(tm) languages you could teach them? There ought to be plenty of other languages you can choose to lock them into the Windows enviornment.
Who would win this election: Andrew Weiner vs Andrew Weiner's weiner.
Keep in mind that VBA is used with MS-Office applications, and VBScript is used on IE designed web pages which are related to Visual BASIC. Learning one, can help you learn the others.
.NET Framework, and it is turned into native code in the final compiltion. Visual BASIC.NET no longer has the bottleneck that Classic Visual BASIC had, and as a result it runs faster.
.NET framework. Visual BASIC can be used as a stepping stone to a different language, or it can be used for main development.
Visual BASIC.NET was a rewrite of Classic Visual BASIC, which added in C++ type error trapping, objects, and other things that many have criticised Classic Visual BASIC for not having. Many VB developers want Microsoft to continue to support Visual BASIC 6.0 or Classic Visual BASIC, but Microsoft wants to move on.
BASIC stands for Beginners All Symbolic Instruction Code, the first word is for beginners. It was not designed to be anything but a learning tool, like Pascal, Pilot, and many other languages were designed to be. Microsoft used it for early Microcomputers, and then made a GW-BASIC version of it for MS-DOS and then later QBASIC or Quick BASIC for MS-DOS 5.0 and above. Many considered GW-BASIC and QBASIC to be free versions of BASIC and developed for them. Microsoft released Visual BASIC 1.0 and many BASIC developers adapted to it. I recall learning MS-Access 1.0 and using a form of Visual BASIC for applications for it, which they called Access BASIC or something.
Borland picked up the Pascal craze, in colleges they taught Pascal for data structures courses. There was UCSD Pascal, but Borland came out with Turbo Pascal and it worked faster than most Pascal compilers. Object Pascal became Delphi by Borland, and it is still popular and a competitor to Visual BASIC. Free Pascal tries to use Object Pascal to be more like Delphi and the Lazarus project uses an IDE with Free Pascal to work like Delphi or Visual BASIC.
I think there is an XBASIC out there that works like Classic Visual BASIC. Someone made a GNOME BASIC. The Novell Mono project has a Visual BASIC.NET language which is used on Windows, Linux, Mac OSX, *BSD Unix, etc.
The whole argument against Visual BASIC is now moot. Classic Visual BASIC lacked proper OOP, but Visual BASIC.NET fixes that, but at the cost of learning new programming methods and syntax for Classic Visual BASIC developers. While designed for beginners, Visual BASIC has extended itself. Visual BASIC.NET uses a compiler very much designed like C# or C++ to compile into IL (Interprited Language) code (which is like assembly language) to run on the
You will be shocked to find that most businesses use Visual BASIC.NET for the same reasons that they used to use COBOL, it is easy to learn, uses English words, and almost anyone can learn it.
Still don't discount C#, C++, Java, Python, Perl, and many others, they can interface with Visual BASIC via the
Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
When I learned VB a couple years ago, it was cool because I could see some great results after a couple hours of lecture. The other C-based languages were meant to be started out in the console environment, then working your way up from there. But VB let you have a window with buttons, and stuff happened when you clicked, and it was pretty simple. From the way it sounds, Microsoft has kept that ability, while giving VB enough power to do more advanced things...
Yes, but one has to keep in mind that at one point everything was assembly. These days even [most of the] kernels are mostly written in C. Why? Even some of the best assembly programmers can't match the optimisations performed by a good compiler on complex jobs. Anything complex could really benefit from a good compiler with its optimizations.
Decompile the libraries, or since you already have the C source, just compile to the assembly stage:
gcc -O2 -S -c inputfile.c
This will create inputfile.s
If you want to see both the C code and assembly code mixed together (as comments)
gcc -c -g -Wa,-a,-ad inputfile.c > inputfile.lst
Just because your profs don't know what it's doing in the underlying layer, doesn't mean you shouldn't. Install binutils/gcc and download the source to the glibc of your choosing and see what the assembler output is. Try and follow it.
You're complaining about the _lack_ of control with C? C being probably the language that gives you the most control over all of them (less asm of course)? C being the language of choice for operating system kernels? C being the one that lets you screw up as much as you want, just going ahead and overwriting memory and not doing this stuff for you like some languages that will remain nameless? C doesn't offer you enough control? Then you must be hardcore.
-M
when you see the word 'Linux', drink!
Why wouldn't you want to limit your programming experience to one hardware platform (x86 PC), and one operating system (made by Microsoft)?
There is no America. There is no democracy. There is only IBM and AT&T and DuPont, Dow, General Electric, and Exxon
It's not the syntax but the logic that matters in programming.
I have met many great programmer who were masters in different languages that could easily switch between programming languages that were not their ususal cup of tea. They did this easily because it was always the logic not the syntax.
This should give you a decent indicator of my opinion, when I am interviewing programmers for a job I always ask "What is your favourite language?". You get some interesting answers when asking them why, but the main reason I ask that is because anyone who says VB is automatically not in the running for the job. VB does not give you good foundations for programming, therefore if I need a programmer to be versatile then there is no way I want someone that thinks that VB is the be all and end all. Rapid Application Development is for proto-typing only (or for your own hobby simulations if you are so inclined).
on what you want to play with.
... :]
.Net or Mono
If you can play on OSX or Linux
. Play with AppleScript -or- TCL -or- Ruby -or- Python -or-
If you must play win32:
. win32 GUI Hacking
. . IronPython and
. For preadsheet hacking:
. . Must go Office? - VBA
. . Can Go OOo:
. . . Unless you go OOo which allows many languages
. . . Including *basic (VB clone)
. . . IMHO, I would suggest Python though.
If you are really brave, go for GNUStep - don't get confused by the archaic looking interface. It is maintained by some of the best hackers on this globe of ours.
JsD
visual basic is almost too simple for beginners... i mean, all you really need to know is: vb.writeprogram = true, and it'll do all the hard stuff for you...
now is the winter of our discotheque
I moved from VB6 to C# but I learnt from a book by Larry O'Brien. I think it was called "Thinking in C#". Unfortunately, it was never released (dispute with the publisher I think). I had a prerelease PDF version.
... an important point was that it taught the basics of C# without Visual Studio and initially without Windows Forms. All you need is a text editor and the command line compiler. If you're disciplined about it then I guess you can use VS just as a nice text editor.
Anyway
I'm not sure if there are any other books teaching the same way but I recommend it as a good way to get started. By all means use all the bells and whistles of VS later after you understand the basics.
Cheers
Ross
http://smallbasic.sourceforge.net/SmallBASIC
Not enough people are looking at the issues of what a new programmer needs to learn with their first language. If it's someone who just wants to play around then they probly just want a cool webpage. Give them some scripting language. If the person wants to do some serious programming (say make it a career) then they need to know some important things: How to design a program, and how the computer thinks. With those in mind I say go with a functional language like C (or a variant that lets you program funcually) If you're programming with functions then you can make flow digrams, block charts, etc and translate them to the computer. You're actually designing how it works first (and that alone makes it more maintainable and easier to debug) A lot of you complain about case sensitivity. Well face it, that's how the computer works. You need to be exact. It really bugs me that VB will let you type in whatever case, then it'll change it to the proper case for you. Babysitting link that isn't going to train someone to fix their mistakes. Now when it comes to the program, C offers another advantage. You aren't bogged down quickly. The wizard for starting a VB project will give you 20 files full of stuff that you have no idea what it is, and you have to remember where to add your code, and what to leave alone. On the otherhand, for C you type: int main() { return; } and you have a program. You eaisly learn what's going on and you eailsy know where to add your code. You can add to it from there. Now a lot of you complain about the low level aspects of C like pointers, new, delete, etc. Well guess what? You don't have to teach that to a newby. But it's still there when they need it. (Ah I rememeber when I finally understood how a pointer works, and the power available from it.) I admit as an Electrical Engineering student, my experiance is simply C/C++, assembly, and a touch of VB. I don't know the scripting languages, (pearl, python, php and the like) but if they allow you to teach those good techniques then go for it. I'm sure the cool factor becomes apparent much faster, and that's a deffinant must for any teacher.
Java could have been a great language for teaching, but it has some serious problems. Among them are: bugs in its type systems (inheritance of array types), a broken implementation of genericity, a bloated and poorly designed GUI library, and lack of some important programming constructs (call-by-reference, multidimensional arrays, pointers).
C# fixes those problems. If you're going to use a Java-like language as a teaching language, then C# is the better choice (and it's also what the poster was asking about!).
Python! (I'm a recent convert from Perl myself)
C's still a good language that every programmer should know, IMHO, but there's too much mucking about with low-level stuff I think. Python's got a fabulous combination of simple syntax, elegant design, and power that is great for beginners.
My bicyles
Old VB can teach: Branching, Looping, Thinking Logically
Old VB does not teach: Data Structure design, Object Oriented Design, Encapsulation, or Abstraction.
So I guess you'd have to say it depends on what you want to teach. If all you want to teach is the top set then sure. However if you want to teach the second set without having to teach a second language then VB is not a good choice.
VB.Net on the other hand puts them all together so it would certainly qualify.
As to why we think of VB as a toy language. That is simple. Its a language for non-developers to act like developers. It's whole purpose was to enable non developer people to quickly develop small simple applications. It was never intended for use in developing large or medium scale applications. For that it's toolset is abysmally poor. It's Close Cousin VBScript falls miserably short in that respect too. Coding ASP in VBScript feels like trying to Paint a picture with only 2 colors or draw a landscape with only straight lines. You can do it but man is it limiting to work that way.
If you see spelling or grammatical errors don't blame me. I tried to preview but IE here at work borked the CSS
start with COBOL, unless you need to learn English.
VB never was a good beginner's language. I'm sure there are 1,000 posts by now outlining the bad habits that VB creates, so I will give you an anecdote.
.Text was the default property on textboxes.
When I started VB, I didn't know what types were, I didn't know what strings were, I didn't know what arrays were.
I didn't know that
Now, with that in mind, imagine a fairly complicated program written using textboxes as strings, and in order to hide the textboxes, I would make the form really big and then make it smaller to hide them.
Once I figured out the existence of strings, I would parse strings to death instead of use arrays.
But then I became fairly proficient in VB, and I started C++. I tried mapping the VB paradigm of thinking onto C++, and that failed miserably.
So, it took me a year or two to unlearn VB habits, and then it took me a year or two to learn good programming habbits. This is inefficient. Learn things correctly the first time.
You see, in other languages, if you do something the 'wrong way', it is much harder to hack your way into making things work. In VB, if you do something the wrong way, you can just add more and more horrible monsterous ass-backwards code and eventually get things working.
The problem with VB is that it wants to be like C++, but at the same time it wants stupid stuff like variants and default properties, 'on error goto', etc. This doesn't help anyone.
And as for VB.net, it is just C# with horrible, horrible, awful keywords and semantics. Just learn C#.
Buckle your ROFL belt, we're in for some LOLs.
Isn't the military using Spark (a subset of Ada)?
Wait till you see code writing code (Lisp)
"All you have to do is be fragile and grateful. So stay the underdog." Chuck Palahniuk, Choke
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.
Well, I'll come back with the argument that any experienced programmer should know better than to choose C/C++ voluntarily. The problem with those languages is not that they are tedious, the problem is that it's too easy to make mistakes in them even for the most experienced programmers.
And the "we're so excellent, we can handle it" attitude is what really sets the mediocre programmers apart from the best programmers: the best programmers know that they can't handle it, they can at best muddle through in C/C++.
"Just put 2 where you see X in 2*5X+8 and put it into your calculator, then give me the answer", which is basically what Java and other high level languages do.
"Just shift 00101 to the left by 10 and then use full adders with the input of 01000", is, by this analogy, what C does.
Am I open minded towards open source, or closed minded towards closed source?
Is TwIPS just something you made up? I'd like more information on it as well, it sounds interesting for various reasons (teaching others, learning more myself, maybe I'll write an interpreter if none exists, etc)
Thanks
sig? uhh, umm, ok
I learned asm as my first language. It's better because you are immediately learning the way a computer works internally. Ask any C programmer if it helps to understand how a computer works. Assembly Language Step By Step: http://www.amazon.com/exec/obidos/tg/detail/-/0471 578142?v=glance
P2P Anonymous Distributed Web Search: http://www.yacy.net/
I'm a junior dev working for a software company. I taught myself a fair amount of VB.Net working on a website, and did a fair amount of C programming over the last couple of years in school. Now I am working at an all-Java company, and am continually surprised by the layers of abstraction, such as proprietary db code that interfaces with JDBC, that interfaces with the db. Neither VB.Net nor C taught me this kind of object-oriented interfaces, abstraction, etc., etc., not to say this is not possible, but I say learn as much OOP as possible. With C I spent most of my time doing memory management that Java does for me. With VB.Net I spent most of my time finding "widgets" and things that someone else wrote that I could drop it...so I never really learned to program from the ground up with it. If you are only doing web stuff, learn VB.Net or PHP, if you are working for the enterprise, learn Java. I've seen more and more job advertisements for PHP and Python knowlege, and the jobs are what it is all about right?
i learned databases using vb/access. i had a pretty nice app up and running. the guy before me stared at excel 30 hours a week. i clicked a button. ;-)
naw, that's not why VB was so good.
it was goo db/c i got a little information and then moved on to bigger, better things.
i'm solely focused on open source programming tools and dbs and i love it.
i get a chuckle when all the dreamweaver types argue whether it is good to look at the script code or not. -lol-
i will live a good life if i never see vb again. that's why it was so great for me!
VB wasn't a good beginner language from the start; it was intended as a language for non-programmers to write simple GUI applications. For someone who wants to do that, it now has morphed into a full-fledged programming language (Knowing Microsoft, probably with lots of cruft). That means it isn't good for those people anymore.
A good language to learn to code in (If you plan on actually being a programmer) is Python, or Lisp if you're taking the long road and learning something less useful for the sake of better theorical knowledge.
A good language for non-programers to write GUIs in is TCL/TK. They're cross-platform, simple, and take minutes to learn.
I'm not saying VB is a crappy language or a toy (When I looked at it, years ago, it was, but that's not the matter and I haven't see the 'new' VB) but I am saying that it was never a good language to learn how to code in, (Much like BASIC before it) even if it was a good language for non-coders to write simple scripts in. It hasn't gotten any simpler or easier to learn. Of course, nowadays, simply the fact that it is neither cross-platform nor compiles in more than on operating system on a single architecture just irks me to no end and makes me think it's silly to learn something that only runs on an OS that is losing market share. I also think it's silly for someone just learning to program, or who'll only do casual program, to pay the full price for an obscenely-priced license while you can get Python, TCL, Perl, Lisp, C/C++ and Java for free on any platform you choose.
I have never made but one prayer to God, a very short one: "O Lord, make my enemies ridiculous." And God granted it.
No, VB is not a good beginner's language for programmers thinking on current and future understanding of languages.
And worst in 2006...
Some reasons:
- Lack of natively data structures and powerful objects.
- To build new data structures you need to focus in the language and in the problem, not like C when you can focus on the raw problem/algorithm.
- No real OO, just COM Native.
- No multithreading.
- Bureaucratic syntax to do very simple things (i.e: adding a new element to a sized dimmed array, writing to files, etc)
- Weird syntax (like putting and underline to specify object's events)
But, it has some interesting properties:
- Rapid testing of COM/ActiveX Objects.
- Rapid development of COM/ActiveX Objects (for example: Office Addins)
But for learning... think in another language.
I think it's probably good for a first try.
But it would certainly be worth the author's time to try again.
These are my friends, See how they glisten. See this one shine, how he smiles in the light.
that will be suggested here and when you hit one that you think is fun to use, stick with it and don't let anyone talk you out of it. Not to disparage the crowd around these here parts, but everyone has his/her favorite language, and you couldn't talk him/her out of it. So, when you find one that floats your boat, set sail and don't look back.
Also, don't think that you'll be able to get by without learning more than one language. Personally, I've made a decent living coding in VB and C over the years. I've used COBOL and Java in school and even at one time thought I wanted to move into Java because I thought it more "professional." I'm having fun with C# now though, so I'll probably stick with it.
Most importantly plain old-fashioned Basic doesn't hide too much of how a real CPU works from the beginning programmer. Real CPU's access RAM, similar to global variable and arrays; and use jmp/jsr instructions to memory locations, similar to goto's with line numbers. Peek and poke even allow one to shoot oneself in the foot like a stray memory write.) This might damage the minds of computer scientists and purist software engineers, as Dijkstra suggested, but might lead to more kids becoming hardware engineers and tinkerers, which we seem to have more of a shortage of these days.
Is it a good beginner's language? Hell no it isn't. It gives the programmer unrealistic expectations of what can be achieved with the computer. Too many of the inner workings of the computer are withheld from the programmer for them to really understand how things WORK.
Personally, I think it's a toy language because it separates the programmer from the bare metal of the machine, with too many layers of abstraction, confining the programmer to a "digital playpen" much as you would confine an infant. I have similar feelings about C#.
I started with C64 BASIC, moved on to C, then C++, then I learned MSVC and VB at about the same time, and after that I picked up ASM.
I really think I learned a lot by following that path, and I'm glad I learned how much work went into writing a GUI long before I dragged and dropped my first VB app.
Reinvent the wheel only at either a lower cost, greater effectiveness, or your own personal enrichment and satisfaction.
I'm a big fan of .NET, but Microsoft made a big error in making VB a .NET language. The syntax modifications to pound the square peg that was VB into the round hole that is OO (and to align the platform with other languages) was awkward at best. And it was all for naught, as most VB developers have refused to embrace OOP.
.NET platform, you're going to find a lot more support out there.
Classic VB was a pretty easy language to pick up. VB.NET is not. C# is much more readable, less verbose, and since it is the language preferred by Microsoft for developing on the
Some security issues are subtle integration problems, some are administrative screwups, but a lot come from the problem of translating what you mean ("gets() reads until newline or EOF") to what actually happens (gets() fills the buffer, keeps going, overwrites the return address on the stack and makes it point to shellcode).
:- permutation(x,y),isinorder(y). That would generate all possible permutations and test each one to see if the sort succeeded. That would actually be worse than factorial time, which is worse than exponential.
Security aside, every time I've debugged anything on or off a computer I've had to drop to the next lower level of abstraction.
Performance can still be an issue. Some applications don't mind a factor of 2 or even a factor of 10, but bad algorithms can paralyze even today's hardware. Consider the obvious implementation of a sort in Prolog: sort(x,y)
Performance can be a security issue, too. The security literature has suggested that if a web server runs some algorithm with a good average performance but a catastrophic worst-case timing, an attacker could cause a denial of service by sending perfectly normal-looking data crafted to be the worst case for the algorithm.
Is TwIPS just something you made up?
Well, yes and no. I originally ran into TwIPS when taking programming classes at St. Louis Community College. Like, you, I've been completely unable to find any reference to it since then, so I wrote my own. I'd be happy to hand my code base over to anyone who feels like working with it, or drop it onto something like SourceForge.
The twelve instructions are Go, End, Move (copy, really), Jump, Conditional Jump, Subroutine Jump, Return, Add, Subtract, Multiply, Divide, and Print. Ok, that's really eleven, but I couldn't remember what the twelfth one was when I recreated it. It uses a 1000 character text array that acts as your entire memory space. You have to allocate buffers, create your initial variables and strings, and store all your code in that space. It will start execution at location 000, the Go was just something that I remember them including, so I did, too.
I don't think I have any of the exercises I had my students do written down, though, so you'd have to make up your own. It's not too hard.
Wake up - the future is arriving faster than you think.
Begginers should learn how to think, instead.
In University, I was taught general concepts: structures, recursion, iteration, abstractions, conditions, Logic and programming paradigms, never tied to a specific language. In fact, we used a pseudo-language to express the solution to a problem.
Using languages belonged to lab practices.
Pascal, X86 assembler, basic, fortran, C, scheme, SQL, you name it.
Learn principles, you'll be able to tell which language is right for the job.
And you'll always be able to catch up with whatever shows up in the ever changing madness of IT.
My take on the "first language": pick a language that is practical and easy to learn and succeed with. VB fits that bill. So do many languages that have an intrepeted language in their liniage. Probably the reason I would shy away from VB is the complexity of it's libraries and capability of the IDE it runs in. There's just too many training wheels and too many tools in VB that substitute for actual real problem solving. I have started teaching my kids Python, and they are having great success. It really helps to have a text screen where you type a command, press enter and it does what it is told to do.
-- $G
I've learned VB, Java, C++, C and various scripting languages. If you want to truly learn Object Oriented Programming start with Java, then move onto C++ to learn about pointers.
BlitzMax is nice. It has the usual basic stuff making it easy to plot, print, etc. It can also do some rotation and scaling of gfx realtime which is fun. When you're ready for OOP it's there too.
1999 called, and they would like there VB back.
Unfortunately, It isn't something you can just give back, only give to others
Practicing Unsafe HEX is Temporary
VB is forever
Slow Down Cowboy! It's been 1 hour, 47 minutes since you last successfully posted a comment
Always go back to what the wise teacher says: use the right tool for the job. Visual Basic is a good language to use in the business programming world where IT needs to develop internal applications for the business.
VB was developed to help developers develop applications for the business quickly, when programming internal web or fat client apps for the business, most of the time it is over kill to worry about memory management and assembler optimizations.
If you are developing a realtime missle guidance system you wouldn't use VB. If you are writing a custom app to help customer service track orders or enter orders, VB is ideal.
To learn how to program I would not use VB, because it is for a particular purpose, business apps.
To learn languages, computer science problems, and the root and core of programming, it is best to start out with a language that is like C but not as difficult to get hung up on. Alot of people can get hung up on the compiling, linking and other intracacies of an environment with no garbage collection.
I dont offer one answer for a language to start out at but I wanted to narrow down the choices to what made sense. I hope whatever you choose makes sense.
If we were to imagine each programming language as performing a distinct role in a society of computation, then Visual Basic is quite possibly this society's Crack Whore. To push the metaphor too far: (unlike Prof. Scheme, Mathematician Haskell, or even Delivery Boy Java) Visual Basic has always been willing (perhaps too willing) to do a little something special for its customers. Webpage logic? Sure honey, VB will do whatever you want, as long as you don't mind the disease-like programming practices you might catch.
Seriously. I used to be whiz with QuickBASIC - compiled some very useful stuff using it.
Then I got exposed to VB via VBA, more specifically Access, Outlook, Excel and Word. Never did understand VBA for PowerPoint. Kind like tits on a bull if you ask me.
Now I'm completely spoiled by VBA. So much so that when I had to craft a quick and dirty rename/move script in QuickBASIC it took me some time to remember the Line Input command. I'd been so used to using GET, etc. Then it struck me, I never had to really do file input/output in all the VBA I'd developed. It was mostly ODBC stuff. As time went on I found I despised Access queries and reports and so did them in VBA. More mind rot.
Then I came upon ActionScript. Oh joy. But now I hate Flash animations, so much that I installed FlashBlock on my browser.
I've bumped around with C and C++ over the years too. I find those much more simplistic but powerful. And I won't metion that antiquate business language I learned long ago. Actually I shouldn't say that, knowing COBOL has led me to opportunities I wouldn't have gotten normally.
Why bother with either? When I was a young one and confided to my 286, my uncle gave me a copy of M$ C for DOS. I was running M$ DOS 5.0, and I had very little programming experience, but I was able to get it working and I was able to teach myself the basics of C. When I started my CS education my professors did their best to pound C++ in to my head, in fact my algorithms an data structures professor had us do our work in plain old none object orientated C. Now that I'm getting further in to my education I can see the the real value in having a good understanding of the two languages.
When you get rite down to it most modern languages have C roots and components. To this day I'm so glad that I started with old fashioned C. So if you want a good language that will be helpful to know, I would stick with what works and what will give you good foundation. Plus what happens when C# and VB become obsolete, face it M$ doesn't have the bast track record when it comes to designing future standards. They will no dough come up with a new pet language in a few years.
no
"Nine times out of ten, starting a fire is not the best way to solve the problem." - my wife
* learn several languages
* learn languages with widely differing characteristics
* learn them well enough, i.e. you don't know a language until you've used it for at least one non-trivial task
* take a data structures and analysis of algorithms course, after you know at least two languages
Most of the people I would consider bad programmers know only one language, or know one well and others very superficially, like the engineers who can write Fortran in any language*.
To show what it's possible to overcome, I started out with BASIC in high school. BASIC does not cause permanent brain damage, if you limit your exposure to it.
Before college I had moved out to assembly (PDP8); in college I was exposed to COBOL, FORTRAN, PL/I and 360 assembler. In graduate school I moved up to Pascal and C, but I also finally took a decent algorithms and data structures course - and learned Lisp. Those last two things were probably as important as all the previous experience in making me the hacker I am today.
* This is not meant to be a slur on all engineers who program when necessary - just the ones who do it badly, over and over again.
To a Lisp hacker, XML is S-expressions in drag.
But hey, you never (well, almost never, I think) get type mismatches. Damn, those are the most annoying errors. Ever.
Maurice Wilkes, debugging, 1949
"Where is the wisdom we have lost in knowledge, and where is the knowledge we have lost in information?"-T.S.Eliot
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 implication seems to be that OOP makes something "serious" or "better". I have to disagree with that. OOP has not objectively proven to improve business apps. I agree it may work well for systems software where interfaces tend to be more stable, but that does not extrapolate to biz apps very well where the "swappable device driver" viewpoint does not really apply and hierarchical taxonomies are inferior to set-based taxonomies. Set-based taxon.'s are just a better fit for biz apps because they don't hard-wire mutual-exlusiveness into the groups. Polymorphism is ugly or out-right does not work with set-based taxonomies. If you don't believe me, try it.
Table-ized A.I.
My personal favourite:
If false and go_kill_yourself() Then
print "You've just killed yourself!"
End If
VB's the only language I know that's not smart enough to know that 0 & X = 0
Last post!
VB or any language that uses .Net as the IDE is really really bad for beginners. you completely skip the basic of OOP programming , memory management and other basics. Simply clicking on a button and writing 1 line of code that generates a 100 lines behind the scenes doesnt sound like a good language for learning professional programming.
C++ should be the first OOP language for starters, after knowing C++ , I believe all languages are a piece of cake.
It is although allright for people like my girlfriend who dont know anything about programming and just wanna get through a programming class as its required in the major. She doesnt do it herself anyways :) , I have done all her assignments for her ...
A good programming language is one which enables you to do what you want with minimum farting about.It's more important to learn how to approach a problem and analyse it than to worry about what's going on 'under the hood'.
...And that's an opinion formed from a decade of being a C++ and Assembler professional.
The most serious programming errors come from understanding the problem, and from taking the wrong approach. App Wizards hook up all that boilerplate bollocks that you need before you even start programming. Programming and typing are not the same thing! If you want to type in a whole load of stuff yourself, go ahead, but the smart way of working is to get as much done for you as possible, and save your effort on the important bits. That's why we have software libraries...
Assembler? Worry about that if you have to knock up a bootstrap, or to see what the compiler does to your code, so you can write more efficiently in a higher level language. Would you write a CGI Script in it? What about a GUI app? Do me a lemon son.
I see a lot of talk for VB & C# lately, however, i still find that delphi has a much easier method for coding. It's based on pascal, which is a fairly high level language, like VB, but Delphi has what i consider a more simplified version of objectification. It also allows users to do things at a very high level, like vb, but also is relitivly easy to break directly into the windows api to call events. maybe i am wrong, but generally, all i ever hear about are the microsoft compilers, not any of the other ones such as delphi.
-TubaMan / ThE_DoOmSmItH
How much did MS pay for this crap??? This is the next to worset thing I've ever seen posted on Slashdot.
Did someone from Slashdot remember to send Microsoft a bill for doing their PR work?
500+ comments? You should all be ashamed for paying too much attention to this garbage. It's a troll.
smash.
I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
People like what they know, often to the exclusion of all others. C/C++/C# programmers will overwhelmingly tell you VB is a "toy" language, or not a "real" language, because they love doing things the hard way - it makes them feel smarter. I even saw a post here where someone was claiming C# was more "readbale" than VB! That guy probably can't speak "people" languages at all :-)
But on the other hand, it does allow them to do things that VB can't - and sometimes, that's actually useful. It's like the transmission in your car: Sure, you can do cool things with a manual transmission, maybe even trweak fuel economy a bit. But for 90% of the people, 90% of the time, automatic is simply less effort and works just as well.
On the other hand, VB is still the most popular business language by far, simply because companies can get more work done, faster, with less debugging. For most programs, the extra "features" of a lower language are unneccessary. If you need to make a GUI application, it's just plain faster and easier in VB. That's why for all the bitching and moaning the C camp does, most large companies predominantly use VB. Statistics on this are readily available, don't take my word for it, check it out on your own.
That aisde, a good point was brought up: VB.NET is very different from VB. It's not as easy, though to anyone reasonably familiar with both, is still significantly easier than C#.
On the other hand, an important thing to consider is who is being taught this first language? If you have a child just getting into programming, then maybe starting with something scriptable would be easier, like REXX or Boo. Once the basics are learned, moving on to the more "complicated" stuff like OOP, GUI, etc. can be tackled.
I've been considering this same issue myself, as my son is 9, and like any good parent, I'm going to guilt-trip him into following in my footsteps! Kidding... But I'm sorta hoping he takes on some of my interests (only I hope he ends up being smarter and more successful than I!)
The only reason VB is still around, is so Bill Gates can collect royalties from Microsoft for that basic interpreter he wrote in high school. If it weren't for that, VB would have died a natural death many years ago.
1. It's easy to achieve simple goals
2. It's OO
3. Only needs a text editor and a browser, no need to buy any IDE or restricted to one platform
4. It's arguably the fastest-growing language used in the Real World (tm)
5. Get familiarize with the syntax helps moving on to C/C++/C#/Java
I had to do a whole bunch of coding in VB6 and VBA for companies that I worked for. Companies that didn't have additional programmer resources to work on these needs. VBA and VB6 are nearly identical and they are horrible horrible languages to learn programming in, because of the bad habits you take for granted.
However, now that I've made the jump to VB.NET 2005, I just don't see those bad habits still being present.
There is no more of the non-declared variables, which is one of the biggest ones. There's a vastly improved warning/error system. It's just quite a bit better.
I learned Pascal, I learned Fortran-77, command-line old-school can i get a woop woop, so maybe I had already had some proper programming fundamentals in me when I took up the task for VB coding 9+ years later.
As a worker, if you're tasked to do something that requires programming, and you're relatively intelligent and computer savvy, but don't know any programming language, VB.NET 2005 is probably going to be the easiest, best first step, to at least get a mock-up/prototype program completed. All without having to take any classes at your local university extension.
somthing smells fishy
Good Lord, now I have heard everything.
Damn, that's like voting for Nathan Bedford Forrest over Trent Lott because you think Lott's a racist. I'm gobsmacked, to borrow a Brit term.
(For those that don't know - Nathan Bedford Forrest founded the KKK)
Most likely you're going to recommend the language you are most comfortable with. Once you start thinking in a language, it quickly becomes the best choice for a multitude of problems. As long as you follow basic programming constructs you are going to be able to make most languages solve most problems. Those that are really good at slapping other's people code together - what I call the *glue masters* may have little computer science background but will be able to accomplish an incredible amount of stuff in Ruby on Rails. Those that love loosely typed functional languages will love PHP. Those that love full-featured programming environments will do well in VB. Those that enjoy bit-twiddling will find C second nature. Those who love microcontrollers are likely learn to love assembly. I would never recommend to a beginner to pick up VB if their focus platform is going to be a PIC. I would never recommend to someone who is planning on doing a lot of web development to pick up a book on assembly for the Z-80. If you ask "What is the best language for beginner programmers?" I would ask "To Begin programming what?" -CF
IMO, Dartmouth BASIC and its derivatives were the only versions of BASIC truly made for beginners. There was no structuring to worry about beyond line numbers, and the language was interpretive rather than compiled so you didn't even need line numbers -- you'd just tell the computer what to do and it would do it! The instant feedback helps train the user, like Pavlov's classical conditioning, in the relationship between command and action (and also what happens if a command is given incorrectly).
In fact, I like the old school BASIC language so much that I starting writing my own BASIC interpreter for unix. Haven't gotten around to finishing it, though.
it is running with my firefox.
There is a spark in every single flame bait point.
you said it.
C++ shouldn't be a starting language because "its ugly and a syntactical mess"
The first language should be ANY language. Anyone who is going to be doing software development shoudl be able to read the documentation for ANY language, figure out what the methods of abstractoin are, and use those methods of abstraction to build human readable and maintainable code.
Usually you can tell if somebody is able to do that within the first 10 lines of code they write in their life. If they can't use the context of their programming environment to develop meaningful abstraction then you might as well tell them to go into computer engineering instead. Its either that or they'll e doomed to life as a junior level code monkey, never quite being able to rise to the level of code architect.
Do all /. users confuse the best experience with their own one ? It's a well known syndrome in life: you tend to believe that what you went through is better than whatever all those other fools have lived ; it's verified in cars, houses, nationalities, and of course religions. Talking about VB in a /. forum is a lot like exploring religious diversity in a muslim or a far right evangelical/catholic television network: don't bother, you know who is right and who is wrong. /. users are OSS devots, they tend to pre-smell any MS product as BS. Is it because they have trully tried both alternatives, or because they read in a Linux journal that "VB is slow, therefore useless" ? Or is it because OSS devots are jealous, knowing that they'll never, ever have the same productivity than those ms-fools-wannabe-programmers-but-stupid-VB-zombies ?
.Net project, with developpers in C# and VB .net. .Net without seeing C# are wrong are obviously wrong: both languages are very similar and allow you to do exactly the same things (with a tiny lead by C#). But the .Net platform, with VB in particular, is certainly the best, easiest, and more complete developpement framework ever created, and it integrates all sorts of programming, form the most simple and "obvious" techniques, to the more advanced ones, even the obsolete ones.
.net languages. And 100x faster than in C.
Most of
My personnal background: I first (trully) started programming in C during my first year in college, after that I joined the java craze, and I'm working on a
Most developpers who prefer VB
I do however believe that no matter the difficulties of a language, if you want to become a developper, you have to beat it. For me, C was fine. But I could as well have started in a complete and definitive programming environment: I lost many many hours exploring what today are obsolete optimization techniques, from pointers to the painful c string manipulation or the even more painful deterministic memory management, while I can now program whatever I want ("only your imagination is the limit") in the
And now, as free as in... VB studio 2005.
Now, perhaps it's just me, but I've never found a place for OO in small programs. There it just gets in the way, IMHO. Unless you're going to be using polymorphism, I don't see how OO really adds anything to programming. And the trouble with polymorphism is that to really use it effectively you have to plan in advance how you're going to break your program into modular pieces. I'm not a very experienced programmer; I'm still in school in fact. But in my limited experience, however I plan to break a program up into conceptual parts, I eventually find in the course of my programming that my design did not incorporate the flexibility that I envisioned, and I have to redesign it.
I feel there's a fundamental difference when I'm programming with C rather than when I'm programming with Java, for instance. If I'm using C, I think only how I'm going to solve the problem. If I'm using Java, I think about how I'm going to design the problem solution, and then how I'm going to actually solve the problem. To be simpler, my distinction is that I spend a lot of time making design decisions rather than writing code. This is undesirable for smaller projects. Perhaps it's just a matter of inexperience.
I really do feel that OO is an organizational aid more than anything else. There's no reason that you can't write in an OO style with C, for instance.
-------
Incite and flee.
Ok, first off, I have programmed in VB since VBDOS days, and I work in an environment that uses VB.NET primary because, the management feels it will be easier to find VB.NET developers then C#. C# and VB.NET are essentially the same, just syntax, however I have found that the using statement in C# is quite nice, although they added it to VB.NET 2005, its not quite the same. I have noticed the VB.NET complier takes longer, and I think its because of the fact VB is wordy. If MyVariable = SomeValue Then ... Ened If seems like more to parse then if (MyVariable == SomeValue) {..}. I think C# is cleaner because of the fact its not so wordy. But some will argue that the wordyness is good. I think what it does it make it easier for anyone to learn programming. C# syntax is a little more advanced in my opinion. Where I work, most people that are programmer are not programmers, so VB.NET make's sense, because its closer to english, essentially, IF MY PHONE NUMBER STARTS WITH XXX THEN I MUST BE A USER AND NOT AN ADMISISTRATOR is easy for a non-programmer to understand and code with VB.NET. One of my pet peeves with VB is the Option Strict and Option Explicit. In my opinion, it is ALWAYS good to decare your variables of being a certain type, in other words, NEVER do Dim I, but rather Dim I as integer is better. C# in fact does not let you get away with such mistakes. I just recently converted one of our applications to VB.NET 2005 and VS2005 gave me a crap load of errors saying implicit convertsion from type X to type X is disallowed. This wouldn't happen as much in a C# project, because you were never given option strict, EVERYTHING IS STICT. In my opinion, C# and C style languages encourage better coding, while VB.NET promotes sloppy coding. If you are a VB.NET developer, I don't mean to slam you, but you have to admit, not declaring types and not casting to the right type can lead to stupid bugs.
[DISCLAIMER]
I was developing VB Application for the past 7 years and was a fan of VB
[ABSTRACT]
I know VB is not good enough for Enterprise level apps., but i know its still good enough for Desktop apps., [ hell with ppl. who say its not ]., because., VB is just enoigh for these cases.
REASONS:
[FACTS]
-- bad networking support [ obvious reason is WINSOCK itself.,]
SUGGESTED WORKAROUND: use CSocket and CSocketServer
-- bad UI [ obvius reason is VB IDE Itself ]
[ I saw someone claim., we can visually notice whether this app was made in VB or not., ITS TRUE., but why make ur app like that., take time to make it appealing ]
-- hell a lot of dependencies
SUGGESTED WORKAROUND: Other than the VB VM (MSVBV60.dll)., dont use any other OCX or dll., embee the class itself to the app.,
If u are intersted - Use some binder and embedd the MSVBVM60.dll., otherwise after windows xp., VB VM is shipped by default.,
-- multithreading
[ I reffered VB to be a DEsktop programming language., so if u want multithreading use VB5 or some 3 party libs ]
-- bad performance
[ i agree., good point., but has anyone noticed we can embedd ASM/C inside VB., although u cant get a very high perfomance., but mbedding this ASM/C will make the performance upto what C acheives ]
Look., there are many unresolved issues., but as for a desktop app., these features are very much enough.
NOTE: Some one suggested Python to be a good programming language: I agree but Python does not good at multithreading [ i mean like multithreading does not acheive much performance ]
NOTE2: Even after this if u feel VB is not enough: I suggest JAVA with SWT
--
"Programming graphics in X is like finding sqrt(pi) using Roman numerals." -- Henry Spencer
In my experience, I have run accross more VB.NET code that thought, "WTF is this", then "Wow, this is good code". I think that C# developers are more prone to understanding the BCL (Base Class Library) then VB.NET folks. Why you might ask. VB developers were most used to writing there own code to solve a problem, mostly because they didn't have a good API or class library to work with. C# being a new language caused a lot of developers to focus more on the BCL then the language. For example, I know/work with developers that wrote their own "function" or method that return the extension of a filename. I have seen 25 line methods to do that, created by VB developers, where most C# developers would use System.IO.Path.GetExtension method.
Personal Experience Speaking...
.NET incarnation, in upper level application development.
VB is pretty good at teaching programming or getting people started in programming. Being a modern 'basic' it can allow people to get the initial concepts of variables, and put them to use in a syntax that reads like common english language, yet not leave them making a turtle follow lines around a screen.
The simplicity is also good to find the 'clicks' or points where people get it. When not teaching this stuff you forget these clicks, even explaining concepts as variables is something that is hard for some people to catch, even if they understand algebra.
VB also can do some fairly advanced things now, especially with the current
A person could start with no programming background, do the hello world, and stick with VB and make a career from it producing ok software.
Pascal is also another easy to understand language (designed to be a learning language even), and it with Borland's support can be almost as powerful as C/C++. So it is another good starter language that a career can be made from - especially Europe, Delphi does quite well there in comparison to the US.
I have taken a couple of roads with people, using either VB or Pascal as the 'get it' starting language.
Then I progress them to some advanced levels in each language, and along the way contrast in another language, C is the poster child here for the contrast. It can show complexity and also levels of creativity not normally used in the other languages. Useful comparisons to stuff they are currently learning as well as 'wows' like a line of C code that is very complex and recursive, but performs as much as an advanced program.
This lets them 'click' along the way, and will hopefully keep perspective and the certain 'creative' element that syntax complexity of C draws out of people.
The 'creative' complexity has to be nurtured, even if you are keeping people in Pascal or VB for their career (or they are not going past that). It was the creative of 'how to make it work' concepts that are so dominate in C that define 'good programmers', because in the old days, we had to make it work.
Yes it is nice to drag a button on the screen and have the IDE do the work for you, but without some of the 'creative' what ifs, and 'how can we' questions, programmers won't be more than glorified form designers, and that is sad for them to invest time in learning something and not fully getting it from both angles. (The logical syntax and function and the creative inspiration of thinking outside the box.)
Programming is one area of expertise that definately benefits from bridge-brain individuals. Creative Logic at its finest...
And sadly if the person you are teaching don't fully click in either direction (logic or creative) then you lead them down the road they are good at, and let them pair with a person or team that fills in the other side...
Pascal might be old but it's specially designed for teaching, guess what, it actually accomplishes what its intended to do: teach. C is completely necessary to understand lower level programming, assembler offers a lot of insight also in low level programming. JAVA for OOP. having seen these three languages you can pretty much master any other.
"VB6 was always a horse designed by a committee."
That's flattery, I'd call it a camel designed by committee.
Am I open minded towards open source, or closed minded towards closed source?
I don't have a link on hand. But I recall reading Microsoft reps touting VB.NET maintining the VB6 ability to "code and debug until the code works". To me that should be sufficient reason to not use VB.NET. If you want another reason, please excuse my following rant.
The language is not isomorphic. For example:
'2 ways to declare an array of types.
Dim s1 As String() = {"1", "2", "3"}
Dim s2() As String = {"1", "2", "3"}
'2 Different ways to instanciate a class
Dim o1 As Object = New Object
Dim o2 As New Object
'Support for
Dim n As Integer = 0
n += 1
'But not bits (booleans)
Dim f As Boolean = False
f And= True
'3 (unsafe) ways to convert to a char (and using reserved words for variable names?)
Dim [char] As Char
[char] = "C"c
[char] = CChar("C")
[char] = CType("C", Char)
Granted in the last case you see use of the "TCHAR" and other such macros in C/C++ code. But these are macros. And not part of the language.
MS also ported in many of the old global VB6 methods such as Trim(). Even though this is a redundant method of the String class. Format() is another example. But in that case the behavior differs from the the method of the same name in the String class.
From experience I've found it easy to transistion from one language to another. Except when that language had "quirks" like those in VB.NET.
VB.NET was a very successful way to move VB6 coders to VB.NET. But is it a Good Beginner's Language?
No. Hell no.
There are certain advantages to learning C# over Visual Basic. A beginner attempting to learn a language has to be taught concepts of programming, rather than syntax. No skilled programmer would have much difficulty picking up VB.NET or C#, because it is only a question of undestanding the syntax.
When you learn C#, you learn a programming paradigm based on the object-oriented top-down approach. In contrast VB.NET wavers between event-driven and object-oriented paradigms, although not as much as VB.
In fact, I would recommend learning C# without the help of the VS.NET IDE, at least for sometime in the beginning. At a later stage, productivity takes precedence over abilities, and the programmer can make use of whichever language is most convenient in the working environment.
"[T]he concept or cache-misses can be taught regardless of language."
Please tell me how.
And while you're at it, could you teach me the difference between real-mode and protected-mode in Java?
Thanks
Well if that's going to be the list then why not:
Squeak (Smalltalk dialect)
Logo (Lisp dialect)
Prolog
Did you say C# and constrained in the same sentence? It seems to me that C# is designed to break all that is sacred in the OO paradigm (I'm looking at you, keyword new).
-------
Incite and flee.
You sound like a math snob yourself - packet routing and cryptography are both much more interesting mathematically than computationally. But don't summarily dismiss multithreading. Many recent benchmarks on recent multicore processors point to the immaturity of multithreading in modern client software. It seems that many compute-intensive programs don't make effective use multiprocessor hardware.
Real Computer Scientists have to run their programs on Real Computers, which means you can't ignore the hardware. And recent trends point to increasingly parallel processing architectures.
C isn't a high level language. For a high level language it would be something like
do something to (x,y) forall (x,y) in image
Or better yet
do soemthing to image. Even in C++ images are likely to be objects and modified via methods.
I mean if you really want to speed this up, you really need to understand:
what can the GPU respond to
how can I best buffer the information
since the real slow down is going to be the bus not the cache if you are going to go pixel by pixel
"Writing scripts for a Turing machine is an intellectual challenge
sometimes quite complex. The goal is not to write real applications.
It would be too difficult, and the results would be dramatically
inefficient.
The real interest is the fact, as stated in the Church-Turing thesis,
that any computable task (compilation, text processing, calculation...)
can be written on a Turing machine.
While emulating a Turing machine in a Sed script, we proove that this
language is sufficient to perform any computable task !"
My first language was Basic :)
I then moved to a proprietary code called gml
Next I learned PHP
THEN I learned Visual Basic
I find Visual Basic no less powerful than other languages, but much easier... Why would I spend twice as long to write it in another language, when VB can do the same thing.
VB has its place... (speed apps is NOT its place)
The majority of programs are easier to write in VB and will accomplish the same tasks with no noticible difference... Same yourself some time people
*yawn*
:-)
I've been programming in BASIC for around 15 years. I don't know why, but during that whole 15 years BASIC has copped flak.
The reasons have changed over the years. Originally, the complaints were that it didn't have variable declarations and encouraged "spaghetti code" through the GOTO command. Variable declarations were added, and SUBs/Functions and even classes/objects were added to the language.
Then there was a complaint that you couldn't make "true executables", so M$ added that option.
Then the complaints were about its lack of providing object inheritance. Now we have that. But the flames continue.
Why?
It's clear that the flames are not due to any particular aspect of the language, since the arguments have changed over time. And so has the language. I can tell you that modern BASIC has almost nothing in common with the original ANSI BASIC except for a few legacy keywords (FOR..NEXT, GOTO, DIM etc). Modern object-oriented computer languages are so similar that I have more than once been reading a bit of code in a magazine article and only realised half way through that it was a different language from VB.
I wonder if other languages get as persistently flamed. I believe the real reason is due to the language's very name: BASIC. I suspect that if the language was instead called "Visual Complex.NET", all of this flaming of the language would cease.
[waves hand] This is not the repost you are looking for.
P.S. People can actually tell the difference between C# and VB code?
WAT V (nee FORTRAN 66) - on punch cards, no less!
Or maybe Apple Basic. No punch cards but renumbering those line is still a royal pain in the ass.
After they figure out that they can't write a good game with the crappy basic graphics have them crack the 6502 instruction set manual and drop into the Apple ][ monitor for some machine language fun.
After that fire up a little Turbo Pascal on an original IBM PC. That's some fun stuff. Good times Good times.
A passion for apathy.
... IMHO, should be C++. After you've become acquainted with it, all the rest is candy. What I mean here is that it is a lot easier for someone from the C++ world to migrate into Java, C#, and such then the other way around.
I mastered Qbasic between 5th and 7th grade...
So VB might be fine, until one is old enough to get a driver's license.
Christ people. We still don't "get" .NET here, do we?
.NET framework.
.NET with natural language syntax. It can do everything managed .NET code can do, but its been structured to work like SPOKEN LANGUAGE.
Let me say this plain and simple "VB.NET is NOT VB6".
VB.NET is nothing more then natural language syntax interface for the
Again, It's
Now why would we wanna do that?
If beginners shouldn't be dealing with pointers, then don't teach that part until they've grasped all the other aspects of writing procedural code.
Pointers don't point to memory... they point to things. If you're using pointers to randomly traverse your machine's guts then you deserve what you're getting. There are some things (such as linked lists) that are far easier to construct using pointers than by doing it by maintaining array indices (for example).
I agree completely with the parent in this regard. Since I'm studying to go into the Video Gaming field, I use linked lists extensively. While it may not be the best design, my current project (3D Adventure-Platformer for PC) has very many linked lists: a list containing every object within the level, a list containing every display polygon within each object, a list containing every point for every display polygon within each object, a list containing the three points for each hit detection triangle within each object... the list (no pun intended) goes on.
Should pointers be tought to beginners? Maybe not. But they should definitely be tought at some point, and they are useful in certain cases. There's no reason to limit yourself because pointers can be used unsafely. Simply learn effective and safe programming techniques so that you aren't limited by what others feel you aren't prepared for.
It's called "job security".
Nerd: Derogatory term typically directed at anybody with a lower Slashdot ID than you.
Which implies the need for threaded moderation: meta meta moderation of entire threads, or at least application of moderation to the parent coment applied to child comments...
Can you be Even More Awesome?!
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!)
Why not learn a C-like language first, seeing as C-like languages are pretty much the defacto style used in most application programming?
.NET: now you can point-n-click your way to a not-as-simple GUI app, coded in C# instead of VB.
.NET code compiles to the same MSIL regardless of the source language it's written in (C#, C++, VB, whatever), I just don't see a good reason to use VB and its craptacular syntax.
VB's syntax (at least as of VB6) was garbage, and the interpreter itself was garbage. One could not even write an unmanned application, since it's an event-driven language.
VB used to have the advantage of being super-easy to whip up a simple GUI app in; just point-n-click your way to a GUI. But that advantage was taken away with Visual Studio
At this point, since all
But that's my preference. I like C-like languages (C, C++, C#, Java, Perl); if you don't, well, I don't care either...
(Frankly, I think everybody should have to start out with a language that requires an understanding of pointers and memory allocation, e.g. C/C++. That said, the real-world uses for those languages are slowly becoming increasingly-limited...)
Is Capitalism Good for the Poor?
Can't believe MS is wasting it's time on that POS. Java or C# is good for begineers. I'd recommend Java over C# mostly because Mono is significantly inferior to the JVM on Linux. Not to mention maturity. And if you're running your servers on Windows for anything but exchange, you've got bigger problems.
Create a macro in an Excel program (doesn't have to do anything) then whack Alt-F11 and there's a limited but useful IDE.
Considering how some banks I've worked on use Excel (it's scary how much of the world's wealth exists only on such a fragile little thing) and some of the fairly high-powered VBA apps for Excel that exist* it's a good entry level application language with real world applications, and it's easy / cheap to get into. From there folks can see whether the life of a code monkey appeals.
*Handling business problems like "Please take this VMS / ASCII report from a Canadian outsourcer (I think it's sort of CVS format) and do these ATO tax calc conversions, format it this way and have one each for our managed funds customers. Oh, and we have to have the reports out by Thursday or the regulators will fine us $1M for non-compliance. Do a couple for the New Zealand tax standards too, can you? Two big customers have accounts there. Can you add a tab to put a ledger on for each month too? I think I have the files here...
The quick wears off, the dirty survives, but when you're playing ID4 for real it's one of the things you can do.
Do not mock my vision of impractical footwear
"It is practically impossible to teach good programming style to students that have had prior exposure to Basic; as potential programmers they are mentally mutilated beyond hope of regeneration."
Question: Is Visual Basic still a good beginners language?
Answer: Mu.
I agree, python is excellent for beginners. The prompt allows people oto easily explore new functions and concepts while the indenting syntax forces neat code.
"Anonymous could not immediately be reached for further comment." - International Business Times
It is a mistake to begin with object-oriented languages, because
A student with a strong understanding of procedural programming will be able to understand the evolution of computer languages and the mechanisms which underlie the various non-procedural languages.
Its not the lust for power; its the willingness to betray any principle or debase oneself in the pursuit of power.
McCain has basically shown himself to be Smeagol.
Clinton, on the other hand, may look like Gollum, but she didn't punk out on the Alito filibuster, bankruptcy bill, and other voting issues of importance to me.
Do I trust Clinton? Hell no. Would I nominate her for president? Hell no, but only because she'd lose. Would I vote for her to be president when given McCain as the alternative? Yes. Find me a Republican that hasn't sold out to the Fundamentalist Christians, neocons, or the rich, and I'll gladly vote for him over Hillary.
There is no America. There is no democracy. There is only IBM and AT&T and DuPont, Dow, General Electric, and Exxon
VB.NET and C# suck. If you want Rapid Development, use Python. If you want it to be solid, learn and use a language that enforces strict typing and UNDERSTANDING, like C++. All of the C# and Visual Basic 7 (I refuse to call it VB.NET, as if it's a fundamental part of the web or something) stuff is just a proprietary framework that they have no reason to port, running on average languages, running on an engine so slow that they won't let people benchmark it.
People Dismiss Visual Basic because it contains the word "basic" and to most people that means simple and weak. When most do not understand the universal truth that simplistic systems tend towards complex behavior and complex systems tend towards simplistic behavior. I personally love VB as it is quite usually all the power I ever need, I have never had a data problem I couldnt solve with it.
Second, many in this thread have asked "Why not both?" I'll back that up, and further submit, in this day and age, that anybody who knows fewer than five languages can scarcely call themselves a programmer at all. To hyperfocus on learning only one language on one platform, which leads to agonizing for days on end over *which* *language* to learn, is exactly like living your whole life in the one small town you happened to be born in, never venturing outside the city limits. It's a big world! See the damn thing, already! Learn the Basics and C-variants on Windows, and pick up Python while you're at it. Jump over to OS/2 and pick at their C++ for awhile. Then prepare for an extended stay in Linux, to learn Bash, CLisp, Python, Perl, pure-ANSI-C, Ruby, Tcl/Tk, Scheme, sed, and awk. Be sure to familiarize yourself with libraries like ncurses, GTK, and Qt, because they'll pop up again and again. Visit MacIntosh and try out Java and Lisp on that platform. Pick up a Free BSD or Open Solaris and explore the languages on that platform (same languages as other platforms, just different environment). Write a web page or two using CGI, Javascript, or PHP. Drop in on Plan 9 from Bell Labs and tinker with rc and plan9's own C variant. And oops, I almost forgot, at least plow through ten tutorials on assembler so you know you can handle it if you absolutely gotta.
Then come back and tell me you know something about programming! Hell, I might even listen, kiddies!
Visual Basic is great to write viruses in. I know because every Windows platform virus I ever caught and examined in a hex editor had "Microsoft Visual Basic" stamped in the binary somewhere. I've only occasionally heard of the virus that *wasn't* written in Visual Basic.
Finally, the number one thing to know: There IS NO PERFECT language. So it doesn't matter a thin damn what language you learn as a beginner. Learn five to be a beginner. Learn a hundred to be a competent expert. And prepare to do it all again a decade or so from now when all you know becomes outdated again.
You introduced a bug ;)
That should return EXIT_FAILURE or something, not 1.
... I'm a beginner programmer, I've been teaching myself a bit of VB and a bit of Ruby (actually, I'm too busy to do either really - but php comes into my classwork at some point so...). I must say that I feel that Ruby is a better language for beginners.
BASIC is not a good language for beginners. Never was.
.BET as a beginner is like learning to swim, with a whistling monkey on your back, and pirhanas chewing on your nads. All distraction and no educational value.
It will tak eyoumore time to unlearn bad habits form basic, than the time you think you're savng by "getting ahead".
And C#, is a language you should not learn at all.
C# is simply a java knockoff. C# was only made because MS didn't like Sun controlling java. The diferences between thsoe languages are hardly even cosmetic.
So, I think your question qualifies as a troll, or you need to get out more.
If you want a beginner's language, you should pick something interpreted, but it should NOT be basic.
Let the kids get in there and see results immmediately, instead of having to tinker with compilers and framerworks, and IDE's and what have you. Programming in
The first language should be something simple, clean, and interpreted, such as python or ruby. I would even pick perl before any of the above.
Then java or C, or both, stay away from C++. Then maybe some web framework, such as ruby on rails.
Then VB, if they absolutly must.
-- Another senseless waste of fine bytes.
Whoops my bad. that's what i _meant_ to say. remember to point in my general direction when you laugh at me. (Northwest section of North America).
If opportunity came disguised as temptation, one knock would be enough.
3^2 * 67^1 * 977^1
While I do agree people should have an understanding of how the machine works at a lower level, it is best not to code with the idea that changing orderings in this way is going to do much. For beginners especially, they are likely to just waste time making useless optimizations that might not actually be helping at all, and in some cases may be making things worse.
I personally think it is best to first learn programming concepts at a higher level. Let them get a feel for programming at a more abstract level, and make real programs. This way, the base of their knowledge are things such as variables, functions, classes, and the like. After they have a good grasp of that, then they should learn about how the computer works at a lower level, and how it maps to their high-level language.
Smalltalk, because you are completely isolated from the boring mechanics of programming. Nasty things like files, editors, compilers, linkers.
_ uebersicht.html
t ml
. htm
http://www.smalltalk.org/main/
http://en.wikipedia.org/wiki/Smalltalk
Smalltalk, because there are 2 very good free (gratis),
http://www.exept.de/exept/english/Smalltalk/frame
http://smalltalk.cincom.com/index.ssp
and at least 2 Free ( Libre ) implementations.
http://www.squeak.org/
http://www.gnu.org/software/smalltalk/smalltalk.h
Smalltalk, because is was deliberately designed for small people to have fun,
yet you can grow-up with it.
http://www.squeakland.org/
Smalltalk, because it is well documented.
http://www.iam.unibe.ch/~ducasse/FreeBooks.html
http://www.whysmalltalk.com/tutorials/visualworks
In a couple of words, it Just Works, and your sanity will not be harmed.
If you can't drop the "program in a file" paradigm, then checkout
http://www.ruby-lang.org/
http://www.python.org/
Don't even dream about anything BASIC because your dreams will turn into really horrendous nightmares before you can even turn around twice.
VB and C# are almost identical when you get right down to it but VB still has features I think would make it easier for beginners
:-) .Net 1.1 at least) - Enums automatically appearing in function calls will guide beginners to how the function works, they don't have to go to MSDN to find the enum
:-)
1. no ';' - Less annoying compiler errors to confuse a beginner
2. named 'end' constructs eg If/End If etc - easier to identify blocks of code
3. Case insensitive - Less annoying compiler errors, and an immediate visual conformation of correct code as the case corrects itself
4. 'Select Case' more intuitive (and powerful) than 'switch' - don't have to explain why you need that 'break' statement
5. Better intellisense (in
6. Better OO keywords - much easier to remember 'MustInherit' rather than 'abstract' and 'Overridable' rather than 'virtual'
7. Still lots of great VB6 function in the VisualBasic namespace that C# developers won't touch - I'm thinking of the Split(String, String) function rather than the string.Split(char[]) method ugh!
Since you mention VB and C# in your post I assume you are not interested in any other languages (not that I could comment on that coz I'm a MS coder from way back
Yet I'd speculate that VB has made more people more money (and i dont just mean microsoft - i mean the computer industry) than all other languages/environments combined.
When did total gross profits become the key criterion in choosing a suitable language for learning how to program? It seems to me that factors such as likeliness to expand one's mind and ease of reasoning about one's programs should take priority. Statically-typed functional languages are a clear win in those areas, with fundamental core concepts like abstraction and compositionality.
Depends what your "Beginner" should achieve in the end.
Is he a CS student? Is he a beginner in a programmer's school? Is he studying Economics? or is he a 7 Year old kid?
For the 7 year old kid: give him any language which enables him to do graphics, sound or control his toys (Lego?). If likes Programming he'll anyway absorb the whole language so quick that you can give him another one when he is 8 years. Do not be concerned about ruining his programming style. He'll like to change it. I startet programming since i was 11 (now 31) and i am changing my coding style every two years in average (sometimes revising old ones - if needed in the actual task). Explöain you kid that a programmming language is a only tool to o things, not a philosophy.
Economics student: I do not like to admit it, but VB might be the thing he is expected to have some knowledge in later.
Programmer: Iff the purpose of the school is to have him maintaining VB Applications. Remember that he is probably not going to be an software architect after that. Otherwise C AND Java are probably the best choices.
CS Student: NO. It is a waste of time to learn a language where it is cheaper to hire other persons for and the pedagogic value of VB is NULL for him. He should get a touch of functional programming - good to know the concepts if you need automated code creation. He should get into C to know that the practical low-level workhorse found in embedded products (and it will be there for many years) can do for him or the people he is leading (programmers) - iff he understood the meaning of the word "system call", he knows enough C (do not be mistaken. It takes quite some way to understand, that "system call" is quite differend from "library function". I know experienced programmers who do not understand the difference between "Internal Error" and "Failed System Call" - these guys usually write elaborate, difficult to debug pieces of sh... code). And teach him Java to let him see a language which was designed in the object oriented way. Maybe even C# for the latter purpose.
Ahh, BASIC. The very name is an acronym for (IIRC) "Beginner's All-purpose Symbolic Instruction Code". Notice the capitalisation in "Visual Basic"? That's right: it's basic, but it ain't BASIC.
.", it gives you a list of all keywords, which sits very happily on one screen. If you ask it to "CIRCLEFILL 60,512,100" you get a filled circle, at the middle of the screen, 100 pixel radius, and still get returned a command prompt - and why not? It's your computer, BASIC is the tool designed to make the computer "do stuff", and if "stuff" means give me pixel-level screen control which co-exists with the input prompt and doesn't take half an hour messing around with graphics APIs, then I'll damn well do just that. If I want to store my programs, I can use the line editing commands; when I've outgrown that, I can use a text editor straight from the WIMP and launch saved programs just by clicking on them. It's a computer; it does stuff, it's easy to make it do so, and it all came for free.
True BASIC should be interactive. By this I mean you tell the computer what to do, and it does it; beginners should not have to jump through hoops setting up a development environment, they should not have to deal with compilers, and ideally they should not even have to open a text editor. It is also important to note my wording of the phrase "you TELL THE COMPUTER what to do". It's like a discussion: you say "JUMP", it says "Syntax error: height not specified".
You see, there was a time when, for the interested user, computers made programming easy and accessible. When programming was full-screen, interactive and fun, and computers came with manuals - useful, interesting manuals, neither pointless fluffy Windows XP pamphlets nor weighty tomes such as the archetypal UNIX manual.
I started programming on an Acorn Archimedes with RISC OS 2, and I wouldn't change the experience for the world. In everyday use, you had a powerful, multitasking WIMP interface with features still being mimicked to this day; however, by pressing F12 and running the "basic" command, you entered another world. In this world, if you tell the computer to PRINT "Hello World", it prints Hello World. If you ask it "HELP
If you want, you can buy the more expensive manuals, the ones which don't come with the computer. Then you can learn how to make OS API calls, use the more advanced facilities of the graphics hardware, and even use BASIC to bootstrap assembly code. I never owned these manuals, but it didn't stop me trying. The point is: experimentation was fun, easy and encouraged.
When we got our first Windows 98 PC (completely bypassing both DOS and 95), for the first few years I still went back to the Acorn to program: after all, the Windows machine didn't come with any programming tools; what a gyp! Can you imagine my disappointment? It wasn't until I discovered Linux and FOSS that I finally stopped going back to the Acorn whenever I felt the urge to hack, and even then it took a while.
I now have an MEng. in Computer Science and Cybernetics; program in Perl, Python, PHP and C/C++ (depending on the task at hand) on a regular (and paid) basis; I understand the tradeoff between fast programs and fast development times. I cannot stand VB; it is a mess. I grew to like Delphi - the teaching language - whilst at uni, but when I can't make it do what I want, I'll go create a command-line utility in C that does it, then hit Object Pascal until I get an equivalent algorithm out of it. To this day, I still use text terminals under Linux on a daily basis, and insist on binding F12 to open a terminal emulator in Gnome. Python's interactive mode is probably the closest thing I've seen in years to good ol' BBC BASIC, but it still doesn't give you fully integrated graphics and sound control - I understand why (portability concerns; device driver issues; the contemporary expectation that programming environments are "just a tool" and should behave like just another window on the desktop), but that doesn't mean I have to like it.
Like many here, I have programmed in lots of languages, from pocket computer Basic variants in the 80's and UCSD Pascal (My first "real language") to Java, C, Perl, PHP, javascript, Lingo, VB (vba, vbs etc as well) and I wouldn't know what to really say.
I could act like I know for sure what the One True Beginner's Language(TM) would be, based on my own experience, as many do here, and forget that other people learn things differently to the way I do. I could go for a language which is easy to learn and there which will "hook" the newbie coder (as if there aren't enough coders around already). I could say VB (.Net) is crap because it makes a newbie used to having an IDE and not understanding what goes on underneath.
I won't. I think newbies should make their own mistakes and learn their own way. If they really want to code, they'll found out about alternatives to whatever they're doing if they're not happy with their current language. Or perhaps they won't. I don't know.
...on the basis that it's the fastest route to getting a computer to do something either mildly impressive for the first time or mildly useful for the first time. Also once the Beginner has a reasonable grasp of Prolog they'll have a lot of exposure to principles that would be considered advanced to the Beginner starting with Java/C# or Python/Ruby etc.
Please do take a look at them, even if you never write anything in those languages that you get paid for (you probably won't). Those languages are very different from the ones you already know, especially Prolog. The important thing is not to learn the syntax or idiosyncrasies of the languages, but rather the programming styles that they emphasize. Those styles are nothing like the programming style promoted by VB and Java. Learning these styles stretch your mind, and make you a better programmer in general, even when using VB or Java.
As a concrete example, the use of continuations might never occur to someone who just knows VB or Java, but they make writing compilers surprisingly simple and the generated code extremely efficient.
eom
"Little things hitting each other. THAT'S WHAT I LIKE!" - Time Bandits
I'm a programming teacher. I've found that the first language that students learn steers their mind in learning coming languages. If they learn perl first and then java, they tend to try to write java programs as if it was perl. If they learn java and then perl, they try to write perl as if was java.
This is important, because a language that forces you to think in a sane way from the beginning will make you write better code in the future, regardless of which language you then use.
My first recommendation for choosing a beginner language is thus: whatever you do, don't choose a language with sloppy type checking and/or sloppy syntax. Force the students to learn that explicit variable declarations, explicit type casts and explicit data structures are good things.
A large perl application structured in an object-oriented fashion, containing explicit variable declarations and care taken to type casts will be a lot easier to maintain than the same application without these features, eventhough the conceptual functionality can be the same. I would thus prefer a student who learned java as a first language to write that perl application in front of a student who learned perl as a first language.
The conclusion of this is that languages like perl, python, C and visual basic are poor choices for first languages. Languages like java, pascal and delphi are good choices for first languages (eventhough the latter two are a bit dated in regards to object-orientation).
Would you recommend it to a beginner over C#?
I would recommend neither. Learning to program is more about learning to understand the nature of programming than about beginning to use a language - a good programmer should be able to learn a programming language as he goes along.
The best language for learning how to program properly is C. C allows you to get close to the actual HW and OS, two things that are important to understand well for a proper programmer; also C does not protect you against making the errors that are necessary in order for you to learn; there is no better way to learn than by solving a problem. And finally, C is as close as you can get to assembler without being bound to a single HW architecture.
Finally some sense.
At Edinburgh we started with Pascal, and moved onto assembler later
which was the wrong way round IMHO. The most illuminating moment I can
remember was learning to design basic logic circuits with nand gates - it
got rid of the "and then something magic happens" feeling of unease I had
had beforehand. Fundamentals of circuit design
followed by assembler and then some structured language [like C]
would have been the right way to start.
Starting with VB or even java is very wrong - there's far too much to learn
that has nothing to do with the heart of the matter and is just a matter of
language specifics, environement, libraries and tools. It doesn't matter
how proficient you get in OO languages and fancy IDEs, you'll never
have the proper depth of understanding until you
understand the basics of assembler.
http://rareformnewmedia.com/
If I'm not mistaken, the B in VB still means BASIC, which is an acronym for " Beginner's All-purpose Symbolic Instruction Code".
Can you see it right over there? Beginner's
Of course, with this logic (or lack of), you might think that Java is a language for grown-ups, because they "like their coffee black".
So say we all
Scheme has status as a traditional teaching language in some circles, and there are good materials for it. Python tends to be quite good in my experience as well -- I once held a programming class for interested middle school students using Python, and none of them had difficulties with the language (though algorithmic thinking was more of an issue; next time, I'm waiting 'till after they've passed algebra).
Python certainly comes with enough of a standard library to be immediately useful; it has far less gotchas than C (my personal favorite for low-level work), C++ (its never-should-have-been-born evil sibling) and kin; it's an OO language but can be used procedurally; and if one is the sort to want to entertain rather than focus on teaching the core stuff, there are toolkits for doing fun/entertaining things trivially (see VPython for an example). Along those same lines, CMU's ALICE is also interesting -- I think that at one time they were using or porting to Python, though I haven't been up on it for quite some time.
All that said, unlike Scheme, Python is a language that gets quite a bit of real-world commercial use in places that aren't "scheme shops". It's easy to learn, powerful, and not only the general skills but the specific language knowledge will be applicable later -- what's not to like?
Call me a cheapskate if you like, but why should someone who just starts programming be forced to use a language which he has to buy before he can do anything? There are just too many free alternative available which beginners can install at home (without getting in legal troubles for using copied stuff). Actually i'd recommend using python or ruby for learning programming and a supplementary course which does teach the workings of a computer at a lower level (processor, registers, interrupts, memory access, etc.).
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.
Programming is a skill, a programming language is a tool. If your a programmer you can work with the tool that is appropriate for the job. There are no real 'bad' programming languages, there are only snobbish arseholes who think that because they can use a more complex language then they are somehow better than those that cant/dont.
Grow up!
"To expect a new CS student to understand Smalltalk would be too much"
Smalltalk was originally designed as a way of teaching children to program, so new CS students should easily be able to grasp it -- there are after all only two entities in Smalltalk: objects and messages.
"Currently most CS students learn languages in roughly the order in which they evolved: first procedural and only then OOP and logic programming(Prolog)."
The order in which languages appeared was governed by limitations in early computers and the tasks that they performed (usually number crunching). As computers became both more powerful and ubiquitous, the tasks they performed became both more complex and varied, and languages changed accordingly.
"OOP is a more recent developments that required some effort to bring to fruition"
The first true OOP language was Simula-67, which appeared a year after Fortran-66, and significantly pre-dates both Pascal and C. Note that logic programming is even older: the first LISP implementation was being worked on in 1958.
"A student with a strong understanding of procedural programming will be able to understand the evolution of computer languages and the mechanisms which underlie the various non-procedural languages"
1) Computer languages do not "evolve" -- they are designed to do a specific set of jobs subject to the limitations of the hardware that they target.
2) The theoretical work that underlies both OO and logic programming was already in place during the early to mid 1950s, i.e. before hardware that could realise such concepts was available.
3) None of the above has any relevance whatsoever to people learning programming today. You don't teach English to a foreigner by insisting that they first learn ancient Gaelic, Latin, Anglo-Saxon, old Norse, and Norman French so that they can comprehend the etymology of various words. Why then should programming students worry about whether FORTRAN-I appeared a couple of years before LISP 1.5, or that Simula-67 pre-dates Pascal? Computing history is interesting from an academic viewpoint, but has no practical implications for people whose iPod has more computing power than the entire world had when FORTRAN-I appeared.
Here are my estimates after running through a few that I was curious about:
Java 500 Python 180 Ruby 120
Notes:
- I counted on a few pages, and estimated the rest.
- This was strictly a word find, so Java and JavaScript would both show up above (and yet, I understand that they are different languages). For this reason, I couldn't easily count C or VB/Visual Basic.
- Some people mentioned the same language by name multiple times, and thus got counted multiple times.
- Mentioning that "LanguageX sucks" would still register a count for LanguageX. Further, a message with the Subject "Re: Python", that said "No, try Ruby" would count once for Python and once for Ruby.
- I am not trying to make any point with this, other than seeing which languages people are mentioning. Someone might want to run a more elaborate test, as this has no statistical significance.
- This message was constructed to the same number of references to each language counted, so if someone wants to count again, I don't throw off the count much (for the languages mentioned - even LanguageX).
Having started of in Basic (for Sharp Pocket Computers) in the mid-80s I've lived with that quote for 20 years now. Having wrapped my head around OOP and all that I have to say that this Dijkstra guy is a total dickhead.
If you've learned Basic (produral programming) you will only be unable to learn OOP if you run into people who aren't capable of teaching it the right way. Which - sadly enough - are most of the OOP advocates.
That, and only that, is the real problem in moving from Basic to OOP.
We suffer more in our imagination than in reality. - Seneca
VB and C# are both made by Microsoft so I don't see why anyone needs sh*t like that.
By now there is tons of comments detailing the programming habit downsides of VB. Most of them are very true so I won't go into them again.
VB is some crazy shit. No doupt. Simular to Perl or PHP in it's quirkiness. If you turn your brains on, you can be productive. VB can dumb you down though and last time I used it it didn't teach me the right lingua, so I didn't really know what a type was when I stopped using VB.
Strict OOP and the big polymorphic picture on the other hand can be a PITA and nothing more than ego stroking, so don't take everything OOP advocates say for granted (comparen EJB with Ruby on Rails to see what I mean).
Yet I say there is one absolute no-go for beginners and veterans alike when it comes to doing stuff with VB: It's microsoft lockin. If you plan to do only MS and MS GUI stuff until you die - hook, line and sinker included - then VB may be your ticket. I spent two years doing Flash stuff - allthough lockin isn't that strong there. We've got OSS compilers by now and some neat other stuff coming up.
Think of VB as the MS equivalent to Perl. Only that it locks you to MS systems and will cost you four-digit sums (IDEs, updates, various MS operating systems) each year to stay in the game.
Bottom line: I strongly discourage you to do VB.
Learn Python - it's the language that will take your farthest without learning anything else and it teaches good habits without being a prick. It's FOSS, fast enough for most things, used in all industries for real-world productivity and the Python Boss Guido van Rossum isn't to tight-assed to change the language specs it he runs into an earlyer design mistake. Which keeps Pyhton on top of things as opposed to, let's say, Java. And you can spare yourself the C tourturing and still will be accepted with older generation geeks. Which wouldn't happen if you used VB. Check the comments to see what I mean.
If you need to do GUI stuff you'll have to do QT bindings or learn to deploy hassle-free wxPyhton apps - which is a downside. But it get you used to the "real-world". VB would turn you into something of a sissy in that area.
We suffer more in our imagination than in reality. - Seneca
Pascal is the best teaching language for newbies.
PHP is for dynamic web pages.
If you know your way around PHP it's good for much more. PHP makes for a decent shell scripting language if you don't care about the scripts being somewhat quick and dirty. Implementational quickness is one of PHP's key features as 90% of the language are syntactic sugar (with the other 10% mostly being C sytax). It's not exactly the fastest language but for shell scripts it's usually fast enough.
USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
PB Win costs $199. It compiles to fast, compact .exe and .dll code (often just a few K in size). It supports inline Assembly and COM programming. It has pretty much all of the data structures, file I/O functions, network programming functions and other low-level goodness you'd want for serious programming. There's a Windows forms and GUI editor for it for people who want to do VB-style RAD with it.
Now to the downside. Doing multimedia with PB (audio, video, DirectX, OpenGL) is not much easier than doing it with C++ or similar languages. It doesn't do any handholding. You need to grasp how the relevant APIs and Windows programming works to get at any of this stuff. Its aimed at serious Windows development and doesn't make multimedia as comfortable as the various gamebasic flavors do (iBasic, BlitzMax and so forth).
Riigghhhtt..let's teach them three language they will most likely never use in the real world. That's a great idea. We'll follow that up with two more dying languages.
.NET closes the gap every release (the only missing piece I can see right now is the database RAD - it _still_ sucks compared to Delphi) I suspect LINQ may finally close it (per usual, 3 revs for m$ to get it right)
You must be a professor or something - I can think of no one else that would put forth such a set of languages to learn. Sure, I agree the _idea_ behind your suggestions is solid, but the _reality_ (which is where most colleges drop the ball) is that you've done little to actually prep him for the real world. You're basically saying the language defines whether you can program 'correctly' and that's just hogwash. How about we teach these budding coders the proper way to code IN A REAL WORLD language (Ok ok, I _suppose_ C is still alive and well - but yech - it's time to move on) so they COME OUT OF COLLEGE with some skills they can USE. I swear, the number of times I've had to read over resumes where they've spent a silly amount of time coding in useless languages boggles me. Your BIGGEST plus coming out of college (or from wherever) is having WHATEVER experience you can get in the languages you'll be using. Anyone that tells you different is blowing sunshine where it don't belong. This is reality in the real world - we still play dodgeball and tag out here and you WILL be competing against other people (unlikes, apparently, what happens in grade school these days - but I digress)
Whatever you learn from should at least have SOME use in there real world. Personally, I despise Visual Basic (I really can't say that about VB.NET as I haven't bother to look at it). The fastest RAD language out there is STILL Delphi, but
Take my advice or ignore it, I don't care. Profits me if you ignore me as I've yet to see any competition from the last 5 years worth of people I've hired.
Given that in your list I see an output instruction (Print) but no input instruction, I guess that's the 12th instruction.
BTW, what's the difference between Go and Jump?
The Tao of math: The numbers you can count are not the real numbers.
You can find free c c++ & java tools and tutorials all over the internet.
Best places to start
http://en.wikipedia.org/wiki/Programming_language
http://gcc.gnu.org/
VB is double plus good for beginners, it links them to a single vendor that despise them, and if ever they develop anything really good it will take it away from them.
And since VB skills are exactly the kind of moron level skills that pointy headed bosses love to outsource it removes beginners from the qualified job pool fast.
This is obvioulsy very good (at least for people like me that are not recent beginner).
So please be a nice miscrosoft slave dog and learn VB + C# + IIE + all the rest of the nice billable microsoft tools.
of course if you would like to have a reasonable nice easy to learn langage for beginners that would like to be able to do some simple tasks and not be linked to a single platform you could get a plate of gambas (no I will not give the URL I feel nasty today).
Cheers
When i talk 'learning assembly', i mean something like a Z80 or 8051, where you can really get your head around what is going on at a gate level, and follow the bits around..
Building your own CPU from scratch would also be a good expirence ( done that more then once, and i agree its fun ) but wasnt as practical as taking a small understandable 8bit cpu. I suppose using a 80dollar FPGA ( with the free SDK ) would make it practical in this day and age tho..
---- Booth was a patriot ----
Perl is great for a quick, unreadable script
Take another look at PERL, start with a book not someone's code, PERL isn't about one-liners, that's just what some folks think is fun.
(I don't get it actually)
Perl has some very nice features in it for generating nicely formatted output with very little programming work. (Hence it's name Practical Extraction and Report Language)
"My personal opinion is that is was like developing an easy to use automobile which didn't need driving lessons."
Sure, you could use it to get around pretty easily, but there were a hell of a lot of crashes.
Beauty is in the eye of the beerholder.
JavaScript is what they taught to MIS majors, whereas us CS majors got to learn:
>javac HelloWorld.java
>java HelloWorld
Hello World
>
Yes, I'm one of those high-paid COBOL mainframe applications programmers. I work at a large multi-national financial services firm in the Midwest. The combination of mainframe skills needed, financial industry experience, IT experience, and programming experience for the work I do provides me with a comfortable income. They are constantly searching for the "right" people to staff projects here. Many apply; few make the cut. They even tried outsourcing - realized it was a failure - brought everything back in-house. From what I understand, they don't even teach COBOL in college anymore.
Yes there's Java, WebSphere, client/server stuff, etc. but that's all on the "front-end" or "client-facing" applications. The "back-end" or engine of what the company needs to run 24/7 is big mainframe iron. We've got the largest models IBM provides and want even more powerful ones. Isn't the sexiest thing but it gets the job done - every day.
I think for someone learning basic program construction at first, it's distracting to have to take into account GUI elements, and VB gives you the _least_ amount of background knowledge on how everything is working. Which is important stuff, IMO when you are being a programmer.
Now you might say that this would scare away a lot of beginners who want to see instant results of a windows application. I'd say: good. If you are looking to get into programming simply to provide a great looking program with no background knowledge, you probably shouldn't be getting involved at all.
I think it's more important to learn the basic constructs of a computer language: loops, conditionals, functions, recursion, etc. etc. than to impress people in your first five minutes with results. VB allows a lot of these things to be hidden from beginners, making them less knowledgable about computer science in general because they can get by without really knowing what they are doing. And that's why it's a toy language.
Judges and senates have been bought for gold; Esteem and love were never to be sold.
Well, no. There's no input instruction because all of the input needs to be in memory before you start the program. It's not designed to have a user interface. That's outside the scope of the tool. It does, however, need to produce definable results, and having the students send their results to the print function is pretty optimal for that.
"Go" is the start of the program, not a Goto. It isn't labeled Start because each of the names is supposed to have a separate initial, so you can use those initals as commands in the program itself.
Wake up - the future is arriving faster than you think.
We become System Administrators!
Okay, you got me... I am at best Neutral... oh but how I really really try to be "EVIL"!
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
As there isn't one good language for every programming task, there isn't one good language for teaching everything in CS. My thoughts:
I personally think it's not a bad way to introduce kids to programming, although not necessarily the best platform to teach programming.
When I first started programming, the school I was at started us off with VB6. It was just an introductary class to computers, and they taught us some basic programming stuff. I was really excited though, because it allowed me to easily make programs that looked like real programs. (at the time I had only ever really used GUI programs) The next level programming class, which I happily signed up for, moved on to C and taught us how to properly code, but VB was what really helped to grab my interest.
BASIC
Perl
OO Perl
Java
c#
Perl is a good first language. They should first learn it the wrong way, then go back and learn the OO aproach... Learning Java first, will help them to appreciate c#.
Man up, nancy. The real world uses real tools for real work.
Oh, I get it! You were going for "+5: Ironic".
Dewey, what part of this looks like authorities should be involved?
If you start kids with COBOL, you will have a generation running away from computers as fast as they can.
More important than the language (which for the sake of teaching, should be simple) is the types of problems to solve. Finding prime numbers and other math-intensive problems will help guide kids to the principles of good programming. Or problems that force them to optimize code (which gets harder as computers get faster). Or programs that quickly grow as features are added, which either become unmanageable (without good practices) or elegant, and shows them the difference. The great thing about Pascal is that it forces code organization.
As far as VB goes, let's just all be glad Bill Gates didn't drop out of Harvard to write a COBOL interpreter.
f u cn rd ths u cn gt a gd jb n cmptr prgmng
Why on earth are those lines needed?
Halfways there, chief. Nowadays (Common) Lisp is compiled to either bytecode or directly to native assembly. It's quite amazing to compile new functions on-the-fly. And it's fast, too. Check it out!
;)
What is the technical difference between a line-by-line compile-on-the-fly and interpretation? Is it just a bigger buffer of how big a chunk you compile/assemble at a given time, or is it the persistance of the compiled code after initial interpretation as well?
Wait till you see code writing code (Lisp)
I actually have done some of this even in Visual Basic- after all, since version 5 it hasn't been that hard to write your own add-in wizards.
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
I also wish that more people would measure the raw talent and content of a language rather than the size of the brains of its supporters and users. I favor OOREXX, but have developed in C++, COBOL, PLi, ALC, APL, and VBS. Langauges have specialties. These days the stuff I make never goes above the script power. Choosing a training language, needs to be based on what will be built with it. These day of fast computers, why spend precious time learning hard, when easy gets the job done. If it does not then you can learn hard.
In my opinion, a good beginner's language is one which teaches both common programming constructs and basic underlying computing architecture (e.g. the hows and the whys). Visual Basic has all of the common programming constructs of other 'beginner' languages ( the canonical being C ), and hence is as good a beginner language as any. However, I've usually seen Visual Basic taught in a manner which pushes beginning developers into quickly writing GUI apps which use complicated classes based on deep inheritance hierarchies which a beginner has no chance of understanding.
As a case in point, my father recently took a VB.net course from an online 'university'. The prerequisites for the course where essentially nill (Programming Concepts or some such crap) and it was clear that this was to be taught as a first programming course. From the beginning, the focus was entirely on the GUI capabilities of VB.net and it quickly led into VBs database capabilities and other such applications. These were all fine and dandy but the entire class was completely lost as to the most basic of programming concepts. The class completely failed to explain basics such as memory layout, memory management, basic class structure, etc, etc. As a result, the only way most of these students could 'learn' was by cutting and pasting working examples into there apps and using trial and error to get them working. By the end of the course, I'd say they knew no more programming basics than at the beginning. Based on this experience, I'd strongly advocate learning a language like C before jumping into Java, VB, C# or what have you. Once you learn something like C effectively, you'll find that many of the same problems pop up with more advanced languages.
I am self taught in Visual Basic 6. I used Mike Halvorsen's Visual Basic Step By Step book. Answering the question: up to version 6.0, I would answer yes, VB was a good beginner's language. It was event driven, used an easy to understand natural language and the forms and routines were relatively easy to write and debug. Then MS introduced .Net -- maybe they thought that for too long VB had been looked down upon by C++/etc programmers -- maybe they wanted to make VB more like C++/etc. I was in the beta test for .Net and I didn't like it. I have tried .net 2003 and 2005, and I still don't like it. OK, my reasons are simple -- change the way VB works, and then compare it to languages such as VC++ or VC#, it's more or less the same, except VC++ likes to have thousands of little .h files and so on.
I guess the correct answer is not what language is simplest to learn, but language do you _need_ to learn?
btw I think the best test of a programming language is how quickly you can grasp its fundamentals and begin flowcharting an application. Anyone who dives straight into coding needs their head tested.
PADDIM =D
Because VB is not OS-portable. Commercial OSes come and go, but good code lasts, and profitable processes should survive with minimal porting cost when old hardware wears out and currently available hardware will not run the old OS. Minimizing recurring costs is an excellent way to be more profitable than your competition.
There is plenty of room for "toy" languages, they solve a particular problem set. OS-specific problems, for example, are well suited to OS-specific languages, and rapid development is a must for that problem space. OS-specific languages are also viable candidates for teaching programming, as long as the teacher has mastered both teaching and programming in that language.
That you don't have to decide over and over again what you're are actually interpreting?
The interpreter has to read every token and decide:
- what is that?
- what does it do?
- applicable?
- eval and apply
The compiler on the other hand:
- reads the token
- decides what it does
- outputs the result so that environment doesn't have to do all the above steps over and over again
No, you haven't done Lisp macros in VB
Paul Graham wrote a book in 1993 entitled "On Lisp". You can get it for free now from his website. He can show in much better detail than I could the power of Lisp.
</preach>
"All you have to do is be fragile and grateful. So stay the underdog." Chuck Palahniuk, Choke
No, you haven't done Lisp macros in VB ;). Macros are a code-generation facility. You can call this macro anywhere, anytime, even at "run-time".
A properly formatted COM class can do the same in Visual Studio 6. Realizing this lets you access the real power behind Windows Archetecture. Unfortuneately, it can also open your code up to the worst weakness of the Windows Archetecture- dll hell. I'm sure that Lisp Macros are much better- in that as long as the list is similar (not even neccessarily the same) the macro will still operate and not crash. Such is the power of weak typing.
Paul Graham wrote a book in 1993 entitled "On Lisp". You can get it for free now from his website. He can show in much better detail than I could the power of Lisp.
I could have sworn this was the textbook in Advanced Artificial Intelligence, a senior level class that I took in 1994- but it's been a few years and I've been infected by corporate coding since then.
SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
Perhaps that should read, "You want to teach students that programming is frustrating? Use Lisp" I'm just kidding. Lisp has always been my least favorite language. It's a beauty for me to read, but a pain to program.
At first I thought you were stark raving mad to suggest that C should be a beginners language; however following your argument that assembler would be the best way to teach optimisation, I have to elaborate.
p 8.htm
You are stark raving mad - but you're also sublime in your madness. The insight of your statement is magnificant.
Beginners? Learn assembler! Indeed, the best would of it use learn how to use the virtual PDP-8
http://www.cit.gu.edu.au/teaching/1507CIT/Pdp8/pd
Oh, wait.. It's written in Java!
FIRST language should be something basic that takes input and output in a top down order via a console.
You don't want to waste your time with complex syntax and cryptic keyword concerns until you understand the basics of programming.
Start with an interpreted language like Perl that is forgivable (with effort in consistently readable formatting, actually assume that for every language from the start). This will give you a taste of the power a few lines of code can do for you, using almost plain english (obviously Perl can be poorly written and obfuscated, but you do it the long with with nice naming conventions and formatting).
Then learn some basic ANSI C and/or Pascal (maybe highly structured Java basics at a stretch which is what they're teaching at first year uni here). This will teach you code structure and algorithms, the grounding you need for OO and will teach you to be comfortable with some advanced syntax before GUI code starts being thrown into your code.
Then it's time for your choice of Java, VB.Net or C# for more advanced GUI apps and to learn OO.
I personally went from shell scripts and some ANSI C hacking to Uni where I did Pascal and ANSI C in the first year, while learning Perl at work.
Recently I played with some Java tutorials and got a basic grasp, this year I'm taking a 1-semester course on C#, this and the VB course requires basic programming concept knowledge before applying, which seems about right.
Unfortunately I don't have experience with VB, but while learning C# all the code shows the VB.net code snippets that do the same thing. It's not clear what the code does but it could be from never learning VB basics.
All I can say now is that I'm having fun learning C# and it was extremely easy to get into since I understand the basics from ANSI C/Pascal/Perl. This is my first GUI exposure and I'm looking forward to learning more OO through C#.
If you're going to teach concepts, do so. Don't use a language as a crutch. Teach in pseudo code.
What happens when students try to implement pseudo coded algorithms in a language that is LESS capable than the pseudo code presented by the instructor? If the algorithm involves data structures with pointers, such as a linked list or a binary tree, VB users are going to have a rough time with that assignment. I know there are some hack-ish workarounds to do pointer operations in VB, but we are talking about choosing a beginners language here.
Yes, the real key to learning computer science is to grasp the concepts. So beginners need to be wary of languages that attempt to hide certain concepts because they are "too complex" for most people. Beginners had damned well better get their heads around those exact concepts if they ever hope to be anything more than beginners.
I am not your blowing wind, I am the lightning.
Python is way over-hyped. It is slow and not designed for beginners at all: See http://wiki.python.org/moin/BeginnerErrorsWithPyth onProgramming
If anything, Ruby is better for beginners than python.
VB.NET fixes a lot of the issues with VB6 (though not all). It really is the only full featured programming language out there that IS designed with beginners in mind. Case-insensitive, no =/== mistakes, no whitespace debugging issues, and dozens of other design decisions like those are all made with beginners in mind.
I think slashdot (which has firm roots in 'alternative' computing such as Linux / BSD / PHP / etc.) isn't really the right place to ask a question like this if you expect to get an unbiased answer. Their icon for Microsoft is Bill Gates as a borg, for christs sake. Go ask on www.asp.net forums if PHP or Ruby is a good language for beginners to start learning and see what results you get there ;)
With ANY language, you can learn good or poor programming habits. VB will LET you not use 'option strict' and implicitly convert types, but it certainly LETS you do it the correct way as well. If you take the time to learn good habits, you can write very robust code in VB.NET as quickly and efficiently as any other language out there. With mono, you can even run your code on a Mac or a PC running an 'alternative' OS!
Prevent linux based DDOS's!
http://linux.denialofservice.org/
my $Perl = $best_beginners_language;
Actually, I've noticed that too - that many people just can't grasp the meaning of a pointer. Do you have any idea why is that?
VB was the language to start with (if not pascal) in the 90's.
.Net, script, or for Applications).
Today the popularity of C like languages (either OO or procedural) dominate the over all job market, are cross platform, have more books written about them, and have more open resources available to them in aggreagate than VB in all its versions (6,
If you can't learn programming in C you should not be a programming major you should be a business major who is a super user.
Think about it... Linux, Windows, Perl, CPAN, javascript, MONO, C, C++, PHP, C#, sourceforge. I'm mean really, is there a question as to what you should be spending your time on? Go with C#!
Forgot!
For all practical purposes C# = Java.
So I won't lie, and start off easy. I am currently in a community college, getting all the basics of IT down, and am currently taking my first semester of Java programming. Last semester, I was taught Programming Logic. Nothing but psuedo-code. Fortunately, I have the same instructor for Programming Logic as Java programming. The Logic course was all concepts, mainly from a procedural point of view. Now that I'm in Java, understanding OOP is very easy. So I do have to agree with the parent poster here. If you want to start learning how to program, whether it's "programming" or "writing programs", start with the concepts, not an actual language. That way, by the time you do start learning a language, all of the concepts come in with it, and all the right coding habits can be formed up front.
"The only constant in the universe is change." - Unknown author