views:

596

answers:

17

I was reading this question, and it really made me question using C# as a starting point for programming. I think this is why people should start with Basic, then move up to C, and then move on to stuff like C++, Java, .Net, or other advanced languages afterwards. I'm a .Net developer, and I seriously think that starting out in .Net would have been a mistake, or at least would have made it much more difficult to get started.

Firstly, just the sheer number of available classes and functions in the .Net API is too overwhelming for a programmer who is just starting out.

Also, I find that especially if you follow the .Net way of programming, that way too much gets abstracted away, to the point where the programmer doesn't understand what's going on behind the scenes. Many programmers of web applications don't even know how things behind the scenes work, and don't understand the difference between client side and server side code, and don't get why you can't write the login code in Javascript.

Starting in basic, and other simple languages allows people to just thing about their own code. There aren't any complicated libraries to think about. Nothing is abstracted away. This means you won't be able to get as much functionality as quickly, but you will understand how things actually work.

What are the thoughts of everybody else? Can you get a good grasp on programming without touching things like Basic and C? Are .Net and similar environments too much for beginners to grasp?

+1  A: 

I think this goes back to what you might call StackOverflow's classic debate: Should I Learn C? Joel's argument is that every programmer should learn C so that they understand what is going on behind the scenes. Jeff argues that C is such an arcane language that it's a waste of time for new programmers to learn. Read more in that article and through the StackOverflow podcasts.

BASIC is another popular starting point (that's where I started programming)... I think for younger programmers, BASIC gets you familiar with the ..basic.. concepts of programming without overwhelming you with difficult syntax and extensive libraries.

pix0r
+3  A: 

Despite the name, BASIC is not an ideal language to start with in today's programming environment. A scripting language like Python or Ruby might be a good blend between power and ease of learning. Once someone is familiar with the concepts of programming, lower and higher level languages (like C and Scheme/Lisp) would round out their profile.

Kyle Cronin
+9  A: 

It doesn't matter what language you start in, what matters is how you start in a language.

Start off with

  • a simple form of output (print/echo/printf/etc)
  • variables
  • variable operations (math, concatenation, single dimension arrays, etc)
  • control structures (loops, if, switch/select, etc)

But the problem is that people want to jump in and accomplish something big really fast - this fundamental knowledge isn't interesting, but it forms the core of programming. You can skip learning how to make basic algorithms and manipulating data structures, but the reality is that without a good foundation you get a bad programmer.

Basic itself got a bad rap because it early on it didn't have subroutines (functions), goto was the primary method of moving around the program, you had to have the entire program in one long file, and there were limited number of variables and types. There wasn't any easy way to follow the logic, maintain a program, and because of these limitations you had to write hacky programs to accomplish sophisticated tasks.

Basic now, as implemented by VB.NET, for instance, is just as fully functional and useful as any other language, and the reality is that it's more a different syntax than a different language now anyway.

It's not what you learn on, it's how.

Adam Davis
I think VB is a bit thick for the age group that SHOULD be being introduced to programming. (Jr. High or Earlier.) A more basic BASIC simalar to "Good ol' Boy" BASIC from the 80s, but with subroutines would be a nice intro language for that age group. I learned BASIC when I was in elementary, so I am a firm believer that it's not too complex to teach beginners. Python is OK for CS students, but not introducing kids to programming.
NoMoreZealots
+1  A: 

I'm of the opinion that there are two sets of essential pieces of knowledge a programmer should have; the basics, i.e. statements, variables, conditionals, looping, etc. - all the staples of standard imperative programming, and then the lower-level understanding - what goes on under the compiler hood, at least at an elementary level; I don't necessarily think an in-depth understanding of x86 assembly is beneficial unless you're going to be writing it all day long.

For the first part, any fairly simple language would suffice. For the second, getting to grips with C is a good leaping-off point.

Rob
+1  A: 

Why not learn to program in binary? Why not build your own computer? Why not invent a new computer?

I'm going to extremes, but the point here is that with advancements in the technology, the level will continue to get higher and higher, and the behind-the-scenes stuff will matter less and less to the average programmer. I agree that it's interesting to know what's happening at the lower levels, but to argue that it provides an advantage to a person making one's living with high-level languages requires a bit more evidence than a feeling.

Brian Warshaw
+4  A: 

Check your calendar: if the year begins with "198", then BASIC is an excellent choice for a first language. ;-P

Personally, i recommend Javascript. Give 'em a book, show 'em how to fire up Notepad and their Browser Of Choice, done.

Once you have a taste for programming though, by all means learn something low-level - C, assembly, whatever. The first language is just bait; it's the second one that should provide foundation...

(and yeah, any .NET language is a poor choice for first or second. Don't get me wrong, .NET is great and all, but it's all about the Framework... and learning to program by learning a Framework is like learning to write by studying a dictionary. Ditto for Java.)

Shog9
+1  A: 

Short answer is yes, but not only BASIC.

Programming has become such a wide field of study, there isn't really one "right" way to start learning.

I would suggest splitting things into two categories: theory and practical. I think a beginner programmer should get a good dose of theory, something I find is lacking in a lot of tutorials (and courses, for that matter).

BASIC, in its purest form, is an imperative language. It offers a very direct translation from what is written to what is produced. This makes it easy enough to start learning, but limits the learner to very basic concepts of programming.

I would suggest, for a beginner, to teach theory and apply it using 3 separate languages:

1) BASIC
2) Pascal (or some equivalent simple procedural language suited to structured programming)
3) Java

Explain each theory and use all three languages to show the practical application of the concepts.

The next step, once the beginner graduates to the next level, would be to increase the complexity of the languages and explore more complex theories:

1) BASIC gets replaced by Assembly (both imperative languages)
2) Pascal is replaced by C/C++
3) Java is replaced by C#
4) Add LISP or Prolog (or F#) to some lessons to expand the programmer's toolset

This is, of course, just my opinion. I believe that programmers are better served by learning how to apply multiple languages. Once they're familiar with the two phases listed above, they can specialize in a given direction.

Marc Reside
A: 

i thinks its a fun way to try learn old language like basic or c but it is not a mandatory thing to learn it. the important is that the language of your choice is helping you building a good product and you are comfortable with it.

sasayins
+1  A: 

Basic as in VB.Net or Basic as in Basic?

Anyway the answer is no :)

Any Basic that is not VB.Net should be discarded immediately, and there is no much fundamental difference between VB.Net and C# in terms that you have to deal with .Net anyway. If I take liberty to rephrase your question to Should people start programming in low level stuff like say C, and progress to higher stuff that hides that complexity, I would have to say: I don't know for sure. Knowing fundamentals is good, but I can't really make an argument whether it should be a starting point or not.

Slartibartfast
+1  A: 

I think Adam is correct with what the starting concepts are

It doesn't matter what language youstart in, what matters is how you start in a language.

Start off with

* a simple form of output (print/echo/printf/etc)
* variables
* variable operations (math, concatenation, single dimension arrays, etc)
* control structures (loops, if, switch/select, etc)

The problem is with finding a language that is limited enough to keep syntax simple while still being powerful enough to allow the first year of learning to program. I started off in Java when 1.2 had just come out and keyboard input was particularly hard (or so I remember). I think the starter should allow you a year worth of programming growth in the form of learning to think like a programmer, writing algorithms, and debugging. My particular choice for that first language would be Scheme. Then the next classes should be using current language types (procedural, object oriented, scripting) such as languages currently in wide spread use i.e. C, Java, and Perl for understanding the difference in concepts between each type.

Ryan P
A: 

I believe it is fine to start with Basic. You can get a lot of benefit with your investment. Microsoft Office's macro language is Visual Basic. What you lean from that can be applied to Word, Excel, Access, Lotus Notes, and VBScript.

I learned languages in this order:

Fortran, Honeywell Assembler, Cobol, PL/I, IBM 370 Assembler, C, Basic, 6502 Assembler, Pascal, Action, Forth, 8086 Assembler, C++, VB Classic, Perl, Java, PHP, LotusScript, C#, VB .Net, Python, Ruby, and PowerShell.

So don't worry about starting with Basic. Expose yourself to several languages and then use the one that you are most productive in for the environment that you are targeting.

If .NET's runtime requirements scare you away. There are two very good Basics available right now that provide the ability to create fast small exe's that do not require a special runtime (Powerbasic and REALbasic). They both have objects also.

bruceatk
+1  A: 

Once you're comfortable with all the concepts and theory behind programming, I think the language becomes the least of your worries. My advice would be to start with a language that has strong OO support, and is well documented. I know a lot of people point to Ruby these days as an excellent language for beginners. And it is very easy to pick up, and extremely flexible. But if you want to be a C# programmer, it might not be as useful for you as jumping right into C#. Or if you want to learn functional programming, Javascript would probably an excellent language, but I wouldn't recommend it for learning OO.

My personal opinion on Basic/VB is that there's a lot syntax that's special to the Basic/VB world, and doesn't always carry over to other languages. A lot of the concepts are the same, but languages like C, C#, Java, etc. have a lot more in common syntactically.

My first language was PHP, which while not perfect, was an excellent jumping off point once I had the basics down. All programming languages become much easier to read and understand once you have an understanding of the common elements (except possibly lisp, which makes my eyes burn).

Bryan M.
A: 

Slightly throwaway comment:

No, I dont think BASIC is a good language to start out with. It's too.... basic. It was good when there were few other good languages, but not these days.

Start with, IMO:

Ruby (but not Rails) Javascript (in a browser, but ignore the DOM) Python (enforces good code strcuture / form / indenting)

If delphi hadn't died, I'd say pascal/delphi. but I think anything non-OO is a bad idea these days, 'cos 99% of languages in use ARE OO :)

Nic Wise
A: 

I started out int the "old days" with MS BASIC on an Tandy Color Computer with programs like the following

10 PRINT "HELLO WORLD"

20 GOTO 10

I learned alot starting with BASIC. However, if I were to start over today I would likely start with c/c++ or c#. I think that building a foundation at the lower level and having an idea of how things really work makes it easier to figure things out once hings get more complicated.

If you start with c# you can learn the fundamental concepts(ie loops,conditions,data structures) using the core c# language via a console app and then add then add more of the framework as you get more comfortable with the language.

Dan Adams
+7  A: 

As one of my former potential Profs said -

"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."
Dijkstra

Of course it's only years later that you learn what you blew right past when you didn't take his class. I was such a fool.

Dan Blair
"For those who have wondered: I don't think object-oriented programming is a structuring paradigm that meets my standards of elegance." --Dijkstra, Archived writing EWD1284 For all the folks that quote Dijkstra, he walked out of lectures when people gave "this guy passes a message to this guy" illustrations.
NoMoreZealots
A: 

I started with BASIC as well, on an 8-bit computer connected to a TV.

10 PRINT "HELLO WORLD"

20 GOTO 10

was the first program I ever typed (wanted to see what it does after reading about PRINT and GOTO in a manual).

Does it make sense to teach BASIC first? It would be more refreshing to get a generation starting with python. And to get them moving through many languages.

I know a guy who started programming in PHP, because he was interested in the web.

Osama ALASSIRY
A: 

According to Edsger Dijstra (note that I do not intend to start a flaming war here) :

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.

Granted, BASIC has come a long way since 1975. Such a way in fact that it is now quite on par with C# on the .NET platform, defeating I think the goal of it being a basic language.

On a personal note, I mentally mutilated myself on a ZX-81 before switching to Pascal (Turbo and various Delphi releases). I think it can still be an excellent programming language, especially for educational purposes : compilation, strong typing, OOP...

Python I heard is quite good to teach algorithm concepts, as it removes a lot of burden (e.g. compilation, linking). Java is a pure object language and is perfect to get into OOP. C is the language of choice when it comes to system programming. C# 3.0 may be too complex now as a starting point.

Mac
"For those who have wondered: I don't think object-oriented programming is a structuring paradigm that meets my standards of elegance." --Dijkstra, Archived writing EWD1284 For all the folks that quote Dijkstra, he walked out of lectures when people gave "this guy passes a message to this guy" illustrations.
NoMoreZealots