Justified: Visual Basic Over Python For an Intro To Programming
theodp writes ICT/Computing teacher Ben Gristwood justifies his choice of Visual Basic as a programming language (as a gateway to other languages), sharing an email he sent to a parent who suggested VB was not as 'useful' as Python. "I understand the popularity at the moment of the Python," Gristwood wrote, "however this language is also based on the C language. When it comes to more complex constructs Python cannot do them and I would be forced to rely on C (which is incredibly complex for a junior developer) VB acts as the transition between the two and introduces the concepts without the difficult conventions required. Students in Python are not required to do things such as declare variables, which is something that is required for GCSE and A-Level exams." Since AP Computer Science debuted in 1984, it has transitioned from Pascal to C++ to Java. For the new AP Computer Science Principles course, which will debut in 2016, the College Board is leaving the choice of programming language(s) up to the teachers. So, if it was your call, what would be your choice for the Best Programming Language for High School?
Visual Basic is not suitable for anything, except perhaps as a form of torture.
For large sets, this will be our guide even unto death, for the LORD will work for each type of data it is applied to...
It's pretty obvious that this guy hasn't done his research. This is a very ignorant statement about both Python and C in general.
I'd love to see *any* "complex construct" that C can do, that Python cannot do in a general computer science/algorithm sense.
n/t
.
And which version of Visual Basic is being used in the class? The old versions that worked, or the re-architected versions that suck?
Give them at least a reason to smoke pot and drop acid behind the school.
Programming is haaaaaaaaaaaaaaaard
subject says it all, really
Beginners.
I would suggest vanilla BASIC, at GCSE level (~15 years old) many of the target students may never have programmed before (or done very little). Nothing is more off putting that a challenging language syntax for beginners. I would suggest BASIC, FORTRAN or PASCAL for beginners. Let them understand the basic concepts of programming such a variables, arrays, logic, and loops and not get bogged down by syntax defined using non Latin characters as much as possible. It puts up a wall to the learning and could put them off programming for life
It doesn't really matter that much, so I guess whatever teacher knows the best will be ok.
No, thanks.
Choosing a proprietary solution is not a good answer.
Uh, Linux geek since 1999.
May as well teach them something powerful and useful from the beginning. If the test is based on Java, then why not start them on Java?
SJW's don't eliminate discrimination. They just expropriate it for themselves.
Then switch from Java or Python to Groovy. It's got a REPL tool like Python and Ruby, compiles to Java bytecode with tight Java interop and usually looks more like Ruby or Python than most people's Java code. That and it's a substantially more marketable language than any dialect of BASIC.
The big question here is which VB he's talking about. As long as it's any of the VB.NET dialects then he has a point, it is a fully OOP language (single inheritance like Java) and capable of being both fully type-safe as well as able to infer variable by use. You can write in any editor and compile on the command line, including on Linux and Mac. The debugger experience is also quite good which could be good for troubleshooting. It all depends on what he's intending to teach. Sure, he could've just as easily chosen Java, Object Pascal, or C++, but I don't think that this language is any better or worse. These courses are for teaching concepts, the syntax is is mostly irrelevant.
I've worked with both. Python has many features of a scripting language, but if you merge VBA and VB.Net, you get something very similar to Python. Of course you have some mapping syntax in Python and a few other things, but they even share a noticeable portion of syntax. Sure, Python has "self" references and VB.Net has "me", and VB technically uses End instead of indents to define code blocks, but there are programs that need only slight modifications to port from platform to platform.
Love that language... lots of cute little icons to drag and drop to build your logic. But beyond that...
I would prefer students start with a language that requires them to 'do the right thing' (declare variables along with typecasting them, have to convert values from type to another, prototype function/procedure calls, etc.). Rather than one that would just sweep such things behind a curtain.
The earlier you ingrain good habits the better your life as a programmer will be in the long run. Especially if you have to come back and 'rework' the code 2, 3, 5, 15 years hence.
FredInIT
Yeah
Java. It has the broadest popularity in industry, isn't tied to any one company (e.g. Microsoft), can be developed using a wide variety of host operating systems (Windows, Mac, Linux), lends itself well to teaching O.O. design and has a wealth of free tools. It's also what the majority of universities use in their intro level courses. (Though that's changing.)
I understand the desire for students to learn about datatypes and working in a strictly typed language; however, it is not the essence of computer science.... it is a language convention. It is not fundamental to programming that you declare these things; it is a special requirement of certain languages that you provide a compile-time declaration.
To meet arbitrary outside requirements to learn about how to work in a static typing system; I would suggest having students learn the basics of another language such as Go, Objective C, C, or C++. While 95% of their assignments will be done in Python.
Or even Common LISP or Scheme might be a good second language, since it will require variable declaration as well, and it will give a chance to show examples of the functional approach.
Python has a number of good points:
- Quick to learn
- Popular (so reasonably easy to google things etc.)
- Forces new people to develop basically good habits re: code structure and use of whitespace for readability
I have seen new people program in Python and in C/C++ and in the latter the frequency of students who don't develop good habits to make code readable and formatted neatly is a lot higher. You can commit atrocities in both, of course, but in Python it's less easy to do so by default.
Also IMX the portability of python code across systems would make getting people who might e.g. only have Macs or whatever at home to work on code for homework easier.
Are students in high school *really* going to make use of the sort of advanced features that might be slightly easier to do in more low-level languages than in Python? Or are they going to get bogged down in learning about memory management and pointers and bit-level stuff when you *could* be allowing them to do something interesting or fun in Python that might actually be fun and interesting and actually not make them hate programming?
VB6 was simple and allowed very easy GUI creation, which is cool for young students. VB.NET is much more complex and not as useful (Excel macros). Python as a language is much better. However beginners will be limited to command line programs, which is not as cool.
You can declare variables. Or, not, and then likely get in trouble for it. I like that. (For teaching. ;) )
It can be used for something useful.
It is trending. It is starting to be used on servers and desktops, and so it is useful in almost ALL computing environments.
It is a gentle intro to functional programming languages. It is NOT object-orientated, though you can pretend that it is.
It's f*cked-up, but not nearly as f*cked-up as Visual Basic. I like that. (For teaching ;) )
I like mildly f*cked-up languages for teaching. It gives the student a taste of the real world, without forcing them to go along with the completely ridiculous choices adults sometimes make.
No, it's based on BASIC. That's why they call it VisualBasic. It's a completely different family of programming languages.
He loses credibility there & then just keeps piling on bullshit afterwards.
my sig's at the bottom of the page.
I tell friends to play with javascript.
* Any web page has source code to learn from.
* Small edits to said source pages show instantaneous results and are painless.
* No need for a comand line, which scares some people.
* The GUI changes, like changes ol to ul, or adding table cell padding, or changing styles, or easy and fun.
* Adding loops and conditionals are not very complicated, since most web pages with javascript provide sme examples.
Overall, for someone curious about programming, it's about the best self-taught intro I can think of. Anyone who wants to learn mroe can find out if the like the concept, the puzzles, and the headscratchers with just as much time and thought as they want.
Infuriate left and right
took years to unlearn that garbage, and it wasn't even my first language.
CLI paste? paste.pr0.tips!
I don't really think you can beat C#. There is a freely available IDE. It creates applications for Windows (large install base). It is an object oriented language. The syntax is straightforward (you don't have to deal with complex point nomenclature, unless you want to for speed). Its a modern language that is as simple or complex as you want.
I use Python every day and I love it, but he may have a point about variable declaration. Statically typed languages are important to learn about.
I do find it hard to imagine what other constructs he is teaching his beginners that cannot be done in Python. Anonymous functions, maybe? Does VB do that yet? It didn't when I last used it. Tail-end recursion? I don't think VB does that either.
But with so many languages to choose from, VB seems like it would be way down on the list.
I also disagree about C being "incredibly complex for a beginner". I found C to be very easy to grasp and very good at exposing what the computer is actually doing under the hood. I would agree that programming C well is complex (and also time-consuming), but that is because it is simple, not because it is complex.
this signature has been removed due to a DMCA takedown notice
Stop using dynamically typed languages altogether. Java is much more C-like than python or VB and can be used to teach most of what C can do in a relatively painless fashion. Kids aren't stupid; stop trying to dumb things down for them. Java handles memory allocation and other object-creation issues that might hamper someone learning a programming language while still containing classes, abstraction, inheritance, and a typed object/primitive hierarchy that will do a lot more to teach students about programming than confusing them with "hey this can be a number or a string or a pig object." Java also has many IDE's (Eclipse and NetBeans mainly) that help with the memorization issue in most API's and are very useful when learning. Compiling is much easier than in C as well but still retains the items necessary for understanding how compiling should work.
-SaNo
I think for the first programming language... elegance, beauty, power... all these things are minor concerns and are more about religious wars between programmers.
Above all else it should be useful, require as little setup as possible or better yet just work on the machines the majority of students already own.
Scripting languages that come installed on Macs or Windows PC's by default are a good choice for this no matter how terrible they are as actual languages because you can do something instantly with few special tools.
Even if your argument holds water, the market has already decided and basic anything is not in the running. Stop wasting people's cycles.
Every language named is Turing-complete and has the capability of implementing any algorithm you might wish. The whole argument is meaningless since the nascent developer will have to learn multiple languages across a career developing software. The language police are very boring by this point. I remember Pournelle arguing about what language was best in the 70s and I know the argument was happening before that.
Dumb argument.
HBI's Law: Frequency of calling others Nazis is directly correlated with the likelihood of the accuser being Communist.
Haskell!
Please describe a construct that you can do in C that you can't do in python?
Yes Francis, the world has gone crazy.
It teaches good habits (but with the demise of Turbo Pascal I am unable to suggest a worthy compiler).
I was taught Fortran originally and now spend my time working in C on embedded processors, which shows the futility of trying to teach a 'useful' language. Several other languages and assemblers have also passed through my brain in the intervening forty years or so, including Basic, but I still think that Pascal is the only suitable pedagogical language.
He knows very little about programming languages because the reasons he gave in this explanation are invalid or untrue. This reeks of MS propaganda that has succeeded in brainwashing poorly informed teachers.
There's nothing special about declaring variables. VB is not a smooth introduction to C++. You don't require C in order to work with Python. If the idea is to transition to more "advanced" languages, Python already has advanced capabilities beyond VB. It is not that Python is the "simpler" language where VB is more "advanced" and C++/C# are more "advanced" yet. Python is in the middle, not VB. VB is the more primitive language.
"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."
-- Edsger Dijkstra
Apparently this applies to teachers too.
I like VB.net but I'm not so sure it's basic enough for beginners. But the transition from VB to C# is extremely easy I agree there.
(If at first you don't succeed, do it different next time!)
The first people would do good to learn straight-up C, and graduate to C++. The latter group should learn Python/Java/C#/Javascript/HTML/CSS/SQL. Though I don't use Python regularly, I think it's a good starter language.
It's very suitable to start children on the path to vendor-locked-in darkness. That very vendor has been cosying up to the British government exactly to help "improve" the teaching of "computer skills".
I knew a Professor (of biomedical engineering) who suggested it would be best to teach introductory programming outside of any language. Teach the concepts in their most general, basic form before allowing an individual language to force understanding into an arbitrary syntax.
I first learned in C++, then later relearned and made extensive use of Visual Basic, then switched to Matlab, and now I'm just starting to learn Python. I personally had a very difficult time with C++ and found Visual Basic to be much easier to grasp. That is likely the result of many things, only one of which is the specific languages I experienced.
In my opinion what's more important than the first language you learn is that you learn a few languages early on, all at once - the more varied the better. Seems to work for learning statistical analyses.
Python of course! a multi-platform object-oriented scripting-functional programming language. However If for any reason the option must be something with a Microsoft flavor as in introduction, you might as well use PowerShell.
In my day, High School taught Basic (year 1) and Pascal (year 2). Today, Visual Basic far surpasses the capability of either of these by dumping the young developers directly into an object oriented environment. IMO, a firm grounding in a procedural language like pascal will make life easier as you mature into Object Oriented concepts ... This could be done by starting with a language like perl or Pascal ... then evolve into VB/C# to pickup OO. An advanced course in C would really fill in the gaps nicely ... a firm grasp on the basics can give you some great insights on what the higher level OO/scripted languages are really doing behind the scenes.
Why is C too complex all of a sudden? Because it's too low level? Is it too much to understand how a computer actually works these days?
Judging by the younger developers I've been seeing, apparently it is.
Finally, a nationally branded computer science educational program, we need to build our brands for captive audiences, or we might lose grip.
Art - Photoshop 101
Literature - Kindle Classics
Math - MSExcel
Writing - MSWord
History - Amazon Prime Presents: Ken Burns - American Minutiae
That way our kids won't know how to do anything without a license fee.
Since BASIC was introduced in 1964 and C was not released until 1972, it is highly doubtful that BASIC is in any way "based on C". BASIC is patterned after Fortran and to a lesser extent Algol. Those language also influenced C, though in different proportions (more Algol, less Fortran), but any claim of BASIC being C-based is quite laughable.
Support Right To Repair Legislation.
That depends on what you want. If you want "enterprise programmers", both of those are spiffy. If you want to impart understanding, then not so much. Basing the test on java is a bit of a giveaway here, though. And hey, "teaching the test" is de-facto industry best practice these days.
I never understood why people think that C, or even assembly, are "too complex" for beginers. Obviously they're complex if you're trying to do something complex like graphics but why would a beginner need to do stuff like that? They should be learning the fundementals, which are often obsucred by higher level languages. Wouldn't it make more sense to start lower (and simpler) and work your way up so that you have a solid understanding of what's happening behind the scenes in higher level languages?
but I didn't fully understand what was going on until I took an assembly course. Maybe they should start there? everyone gets an CME-11E9-EVBU!
This is a terrible idea
It's not that hard and you can introduce only as much complexity as is needed. Just because a language has a vast array of features doesn't mean you need to use them.
c/c++ is a a great language to learn on because it hides virtually nothing, you need to be aware of what you are doing since there's no backend running secret tasks like garbage collection.
teach them c/c++ so it's c with classes.
Steer clear of the STL stuff.
Teach them to write small tight methods that do one thing only.
Teach them the single responsibility principle.
Teach them to write clean code.
Teach them to name their classes well. To name their method well. To name their variables well.
Teach them that comments are a failure of the programmer. That if you need to comment the code then the code itself is broken.
Teach them to write code that tests their code. To never assume that their code is right but to prove it.
Teach them that when their code doesnt produce the correct output it's 99.999% likely their code is wrong, not the tool chain.
Teach them to what source control is and how to use it. And when to use it (always).
Teach them that simple is better than complex.
Teach them to try several ideas before deciding on the best one, rather than just implementing the first thing they think of.
Teach them it's OK to refactor existing code to make it better.
Teach them well.
I don't really care what language, but I'm of the opinion you should be laying your groundwork with something with a Wirth-ian syntax.
Why? Because it's the most accessible syntax for people, relies on less of the syntactic sugar of other languages, has very explicit start end end blocks, "reads" very much like English, and in some ways can be useful to describe how things work at the assembly level.
Things in the scheme family have some things which may be far harder to grasp for a beginner since they're essentially mathematical in nature.
And things like Python ... well, the whole whitespace being syntactically significant is quite possibly going to give you some bad habits.
There's a reason why Pascal and Java made good teaching languages for so long. If you can "speak" one Wirth-ian language, you can pretty much read all of them.
Lost at C:>. Found at C.
Pros:
+ C Style Syntax
+ JDK is Free
+ OS Agnostic
+ Free IDE's available
+ Lots of internet / forum support
+ Opens a door to mobile development with Android
Cons:
+ "Slow"
Now, compared to Visual Basic, which is slow, requires Windows, not to mention Visual Studio, which even for Student versions is expensive compared to a free download of Oracle's JDK or OpenJDK and Eclipse / NetBeans / Android Studio.
C# would be a better choice than Visual Basic, but for students -- having a dev environment that's obtainable for a very low cost (free) and even runs on free Operating Systems is very compelling -- especially for the underprivileged kids.
Sock Puppets: damn_registrars=pudge_confirmer=jimmy_slimmy=raiigunner=cml4524=a_klavan=red4men=ronpaulisanidiot
What about stuents that have a Mac or Linux at home?
For that matter, what about students that have only smartphones, tablets running a smartphone operating system, and game consoles? Such households exist. A $200 laptop that includes a copy of Windows is no more expensive than some textbooks that college students are required to buy.
I keep seeing stories about how cobol is sticking around, let the kids do it.
lose != loose
Javascript also has low requirements which is good for cash-strapped schools and students. All you need is a text editor and a browser which are pre-installed on every computer and every OS (except maybe Chromebook?)
Support Right To Repair Legislation.
VB has always been a horrible place to start. Any programming language that doesn't have a ridged syntax structure like C is a bad place to start. It teaches sloppy habits, and makes it so you have to get rid of those habits if you want to move up into a more ridged language. C is an excellent place to start. Python is ok as a language, but makes the same sin as VB by trying to make things more "human" readable thus I believe it would have a similar effect. However, since my experience with this is limited to when VB as the idiots intro to programming I've never seen what happens when someone learns Python first. Again, C is an excellent place to start.
Well, *I* think that 64k different languages should be enough for anyone. //rim shot
So, anyway, anyone who claims that any particular language is the right one to start with (and will lead to fame, fortune, and everything that goes with it) is a fool. I can see some justification for avoiding heavily obfuscated languages like APL or perl in favor of any language that actually uses, you know, words, to identify the functions and operations you want to do. If a high-school kid can't understand that "for," "do," "while," etc. are performing mostly the same operation, then he's screwed regardless of the actual language in question.
https://app.box.com/WitthoftResume Code: https://github.com/cellocgw
Oh God not LISP
To understand why proprietary software in schools is a poor answer, please see this 15-minute TED talk.
Why not teach more than one language? These are AP classes for smart kids. They can handle it.
Start with Java. Run them through the basic iterative programming constructs (conditionals, loops, etc). Then go on to basic OOP principles. Once you're through that you can go back and start with C++ and introduce them to statically typed variables and pointers. There's no reason a smart kid in the last couple years of high school can't grasp all of this in a single AP class.
I know it's a radical idea to teach advanced topics to kids in an Advanced Placement class but hey, I like rocking the boat.
Pure C is the simplest language ever, and the most instructive one.
Teach them algorithms/concepts using pseudo code and they will be able to use any language.
Do you want to learn Cisco and only be able to work on Cisco products, or do you want to learn networking theory and work on everyone's products?
Whilst I agree with all your plus points above. VB/C# does have free IDEs (both Visual Studio Express editions and MonoDevelop, which is available for Windows/OSX/Linux), so therefore cost isn't an option.
Of course it depends on what you want your students to build. If you want them to build desktop apps, then Java isn't great, and C#/VB isn't cross platform, being more fiddly on non-Windows platforms. Though in a school environment cross-platform may be a moot point. Most UK schools seems to have a Windows mono-culture.
Ideally you'd have students building first console apps, so they are literally concentrating on the logic, not the presentation, and after that move to web-based. Both these scenarios give you a massive range of languages and frameworks to choose from.
For all intents and purposes it is equivalent to C#, which is an excellent language.
I might actually prefer VB to C# because it doesn't have all those damn curly braces and semicolons - VB is much faster to type and the automatic indentation is better. The only dealbreakers for me were the awkward anonymous method syntax and industry stigma.
You want to talk about programmers being ruined, look at what the experienced do with Java.
it's javascript, so any idiot can use it. And "idiot who works for cheap" should be your number 1 criteria for someone writing back-end server code. (Yes, believe it or not, there are people too stupid to "learn" php.) That's what makes it webscale(tm).
Copyright (c) 1990 - 2014 Dice. All rights reserved. Use of this comment is subject to certain Terms and Conditions.
If the teacher doesn't know Python, they will have a difficult time teaching it and the quality of the lessons will be poor.
In practice, it probably doesn't matter what the language is. The key is that it will only be a student's first language - not the only one they will ever user. So it's far better to teach them well, in a language the teacher is competent in, rather than to have the teacher just a page or two ahead of the children in the class. Apart from anything else, that will give the kids a more positive impression of CS, rather than having a teacher who continually has to look stuff up or answer questions with "I don't know".
It's also important for assessments that the teacher is experienced in the language that coursework is written in. Otherwise the marking will be hit and miss and the teacher won't be able to properly distinguish well written work from stuff that works by chance rather than by design.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
You can't really fault him for sticking with what he knows and knows how to teach. Any of us would probably do the same. Yes I'm confused as any of you what he means about python being based on C. But I can't really fault him. He probably (obviously ) has no experience with python. Come to think of it most of you bashing visual basic probably haven't ever used it either.
Java is common in first-year uni courses because it's used as a weed-out course. It's on the AP exam because it's a common first-year course. It's winning these debates by being complicated and not fun, and thus being good at weeding people out early who won't finish the program.
In my opinion what is important is how to think logically and organize a computer program. Some support this organization better than others but I haven't found a language yet that can't be written properly with care and thought. While I prefer something object oriented like C# or Python or even *mutter*Java*mutter*, the concepts of proper programming are most important.
I think what matters, when you learn to program, is that you enjoy programming; the language doesn't really matter. Some people seem to just get the idea, while others never quite get the hang of it - I suspect it has a lot to do with personality. In my experience, a good developer is somebody with an 'engineer's personality': who approaches everything in terms of how to construct things, who enjoys working out which procedure is best, what resources are needed etc. A good programmer is probably not bad at DIY, for that reason, this is something I have seen many times.
I have been around a lot of programming languages and enjoyed most of them - except Perl and Visual Basic (sorry); Perls seems to me to be like a pink hammer with LEDs blinking (ie. too much attempted coolness) and VB is just a bit sad. BASIC wasn't bad, such as it was, but it was never really meant for much more than an introduction to FORTRAN. For learners, I'd say, start them off on C, so they can learn what really goes on inside a program, including all the obscure errors you can run into; then on to python, which is an amazingly pleasant language, where they can learn some pretty advanced concepts without worrying too much about strange errors. If they've got what it takes, they'll enjoy both languages; I don't really believe in always catering for the weakest. Being able to program is not like literacy or numeracy; it's more like poetry: unless you really think in terms of poetry all the time, you will never become anything more than a so-so poet.
I cut my programming teeth on C as a middle schooler. It wasn't so bad. I had a hard time with pointers at first but that was more because I was learning from a "Teach Yourself C in 24 hours" book on loan from my cousin without any sort of teacher whatsoever.
;-)
C has been my go-to language ever since. I know more than many of my friends who are actual CS and IT people (my background is in physics and math, but I now mostly program for medical image reconstruction) about computer architecture, assembly, how a CPU works, and the nitty gritty nuts and bolts of a system, because of that choice. Coding for GPUs also came very naturally to me. I've never had any issues whatsoever picking up any other language when I have needed to use one or when C wasn't appropriate.
I feel pretty strongly that C is an excellent choice for a first programming language and much more flexible, useful and powerful than something like VB. I think that this day in age, Python would also be an excellent choice for a first programming language. It's not going anywhere for a few generations, that's for sure. Or... MATLAB anyone?
that is a win right there regardless
I am very small, utmostly microscopic.
Fortran is a very simple language to get to grips with the basics: For loops, if statements, subroutines. These concepts are the same in almost every language. That way, the language does nog stad in the way of learning the concepts. Nothing like classes & objects, pointer magic, etc. Things that belong to a course aimed at somebody who has mastered the basics.
Never learned VB but what "ways" in Pascal? For the kind of simple programs that a beginner would write you could mostly map them 1:1 to C, except that back when I started C had no as good manuals around. And the trivial options to include assembler code in your programs with TurboPascal was a great plus. That vs. gcc inline asm is maybe a good example of Pascal vs C (even if it's really gcc rather than C), you can do really advanced optimization stuff with C but hell is it complicated in comparison...
What is the one true religion?
Hey, Windows users, there is no such thing as "forward" slash, there is only slash and backslash.
So, if it was your call, what would be your choice for the Best Programming Language for High School?
The problem I'd have with VB at that level is that it is PC/Windows-only, and only available for free/cheap subject to Microsoft's licensing whims.
JavaScript?
Pros: runs on anything with a web browser - if you host the kids work on a server they can run their work on their unrooted phones, tablets, games consoles, chromebooks...; you can get jobs writing it; it goes hand-in-hand with web design skills and its relatively easy to make nice UIs in HTML; easy for kids to share their work.
Cons: it's Javascript!
I think I'd seriously look at Javascript because of that list of 'pros' - and if that is unconscionable, something like Dart or Haxe that 'compiled' to JavaScript but fixed its, er... more easily misunderstood features, set up with a web-based editor/UI that made writing and running a simple function straightforward and hid all the boilerplate.
Of course, an important part of the course, later on, would be to learn about other programming languages, compilers, libraries etc.
That said, the main thing is not to let the perfect be the enemy of the good, and not to force teenagers into something obscure or incomprehensible on the belief that if they didn't learn {insert trendy programming paradigm de jour}, or used something that didn't have a A**** freeness rating from the FSF, that they'd be scarred for life. The world will not end if they learn VB, Python or Java.
In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
When it comes to more complex constructs Python cannot do them and I would be forced to rely on C (which is incredibly complex for a junior developer) VB acts as the transition between the two and introduces the concepts without the difficult conventions required.
What complex constructs can't python do? I spent years of advanced python programming and NEVER had to write a module in C. I certainly have used other, open source modules written in C, but these are generally for very advanced or performance-intensive tasks...
What IDE shall I use? Does it have an IDE and compiler on Android? So if I teach Java students could do their homework on their phone or tablet. What about VB?
.NET (which already can easily be 40-100 times slower than Java on powerful servers). Look for mono in the following benchmarks: http://www.techempower.com/ben...
Also mono is even slower than
When it comes to more complex constructs Python cannot do them and I would be forced to rely on C
No. People use C to gain a speed advantage, not because python is incapable of doing something. This statement alone betrays a fundamental misunderstanding of computer languages that makes me wonder if he's qualified to choose what language his students use. The other issue here is that schools should use only freely available languages.
http://en.wikipedia.org/wiki/T...
Do you have ESP?
GWBasic 1.0? I dig the notion of BASIC being a gateway drug.
I remember in a school I attended there was a "Web Master's" club. I thought it would be a great place to go to practice web technologies, and give back some of the experience I had. Unfortunately, when I attended the first meeting of that year, I was horrified to find that they were using Cold Fusion for the web page! This meant I had to buy a very expensive license, just to learn something obtuse that I probably wouldn't use anywhere else, and that none of my real-world experience really translated. I continued to attend the club, because I learned there was basically no web programming going on and it was more to "hang-out", but I can't help but feel like if they had used real open languages like HTML and JS, it could have been a useful experience for a lot of people.
This guy's reasoning is an example of this:
http://news.slashdot.org/story...
And his remarks on complexity, C and python, show his lack of depth in the matters he teaches.
I learned programming in Microsoft BASIC, assembly language and a touch of Pascal, prior to reaching college. I don't use any of those languages now. (Ok, I still program in assembly language, but for different processors.)
As long as it's actual programming, with variables, data structures, and code to manipulate those things, then great! I don't really care if it's VB, Python, TCL, Lua, Perl, C++14, Delphi, Haskell, LISP, Erlang...
The real point is to open up the computer as a programmable device, and to get kids seeing the computer as something they can extend themselves with their own creativity. For that to happen, you want to choose a language that students can pick up quickly enough to see interesting results early on. You don't want their first meaningful program to come in the last weeks of a year-long class.
Program Intellivision!
Something worse than Visual Basic? I can't think of any.
SNOBOL? MUMPS? PL/1? Ada? Intercal? APL? Progress 4GL? PHP?
Visual Basic..not even once.
The argument that he would have to include C-based modules for "more complex functionality" is a straw-man. This is simply not true. Python natively offers everything a beginner needs, including advanced OO functionality. My guess is that this guy actually has some personal problem with Python and hence wants to avoid it. Possibly he wants to show off some platform-specific stuff (which has no place in a platform-agnostic programming course) and Python does not support that or he has problems understanding dynamic typing and how to use it right.
As to the variable argument: Sure, but you can declare variables in Python, even if you declare scope and not type. This is however something that a competent teacher can explain and when doing interfaces to methods or functions, you can and sometimes will need to enforce types at run-time.
Really, in most regards, Python is a modern, portable language, while VB is not at all. And for advanced students, sure, extensions in C require you to learn C, but Python has a really clean interface for including C classes and as an additional benefit, you learn how to do OO in plain C which helps some students tremendously to understand what an OO language does behind the scenes. The only language I know that is easier to extend cleanly is Lua.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
I know, I started with C. K&R is one of the shortest and most clearly-written tutorial books out there, to boot. Sure, it's easy to make mistakes when you delve into pointers, but for simple logic, C is well within the grasp of students.
I would say an intro class, should do a basic survey of as many lanuages as possible, highlighting the pros and cons of each language, to perform similar tasks. The students from there can make their own choice about what they like, what they need for a job, and so on.
In fact, they should be finding out exactly what this debate is about, such as why declaring variables and other goodies are so important. They should be breaking things a lot.
I guess I don't see why this is Slashdot-worthy. Some low-IQ teacher making ill-informed explanations to a parent?
Personally, I actually like the original Visual Basic (version 6.0 and before). It had a GREAT UI system and internally the VM was really clean and solid, however, the idea that this would be a better language to start in than Python is not rationale.
Also, the statement that C is "incredibly complex" highlights what a doofus this guy is.
No. Dynamic typing is not dumbing down things at all. It actually makes things a bit more demanding (not a lot) and it makes sure you write more code, understand your code better and write less syntactic clutter. Java is an extreme offender in the area of syntactic clutter and completely unsuitable for beginners.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
I have to say I agree with the overall idea here.
Some background: I mentor high school kids for a county youth work program. I usually teach 2-5 kids to code a year.
I learned C -> C++ -> java in hs/collage then branched out to python, c# etc in the pro world.
I really love VB.NET as an intro to programming tool. It has 3 things that I've come to know are really important to new coders. I'll use examples of code from some of these interns.
1) Close to English readable syntax:
If Data.currentUserCanEdit Then ...
tbFirstName.enabled = false
End If
For Each row As dsDemographics.Client_SpecialConditionsRow In CurrentClient.GetClient_SpecialConditionsRows
row.Delete()
Next
As a seasoned developer I don't really care for the long if statements a lot of other languages have for each statements, but I find with VB.net I don't even need to explain what a lot of code does. It means I can focus more on concepts like what an "object" is, how to write a function, what the object model does, and what events are.
2) Weak typing. I don't have to explain casting objects to new developers. Once again, there are reasons to have strong typing in a professional environment, but there is a whole conversation about type conversion I don't need to have with lines like:
Dim total as Double = tbAmount.text * 1.15
even crazy stuff works like:
dim integer x = "10" * 2
While that IS bad code it is very important with new developers that they are able to make and actually see constant progress. It is easier for students as well as instructors to look over their code and say "hey this will bite you later" than it is for them to get stuck. Getting stuck and seeing no way forward is the kryptonite of the learning process.
3) VB.net scales to complex process. This is where I usually write a don't use vb6 paragraph but I don't think it's necessary since it's no longer 2003. You can turn on strong typing, and the language supports dynamic typing, some functional paradigms, the same object polymorphism, and event model of all the big-boy languages (ok no multiple inheritance but can't have everything).
Since it's actually used in production a lot of places it is a lot better than the pascal that I learned waaaay back when. Kids can actually hold their own after a few weeks in a conversation with more seasoned devs and have products that can go on resumes in a matter of weeks.
Even with all this you still need to provide beginners with a good framework and achievable goals. The language is really not as important as having a good system for them to learn in and if you have that in another language then don't change it.
> if you merge VBA and VB.Net, you get something very similar to Python
Your comment is now poisoned by the fact that you are a complete moron.
> if you merge VBA and VB.Net, you get something very similar to
It has self so it's similar to Python right?
From a teacher's point of view it is the dream language:
* It is a strongly typed language with a pretty specific syntax.
* It is easy to use to illustrate recursive algorithms.
* Nobody uses it so chances are that all your students will have the same level at start (that is null, or nil in caml).
* No student in his right mind would like to use it at home so they will all advance at the same speed.
* Student will instantly regret the pattern matching features when they will need to write a parser in java or c++. That will give them the "right tool for the task" state of mind.
The Microsoft App store also actively encourages students to work in the VB.NET environment and it allows students to produce their own apps in this language, so the language is not dead, simply not as mainstream. If Sam were looking to take his skills further I actively encourage students to look into app development for the windows store as it has no yearly fee for students unlike some of the other stores and charges students a lesser fee for uploading and promoting their apps, there are also loads of videos on dreamspark.com for students to learn from. If Sam is also keen on programming he can also look at Young Rewired State which is a week’s programming in the summer holidays that allows him to develop his skills further (again, I will actively promote this in class and on the school twitter feed when it becomes available)
Almost makes you wonder if he's getting kickbacks from Microsoft Project Spark. In my opinion (as if anyone cared) VB should be rejected because it's proprietary: there are other languages that are just as good, but without that encumbrance.
"First they came for the slanderers and i said nothing."
I'm curious what "complex constructs" the teacher thinks are missing from python that can be done in Visual Basic, or C for that matter. I haven't done VB in a long time, but I have significant experience in C and Python. The only construct I can think of that exist in C and not in Python is pointers, and I'd be surprised if they are covering pointers in VB in an intro class.
Any ideas what is being referred to?
Slashdot is not a game, Slashdot is not a game. Crap, I just lost points.
Mr Gristwood justifies the age old saying "Those who can, do; Those who can't, teach".
It's annoying that he doesn't substantiate nuggets of "wisdom" like:
Parent post is completely legitimate and has useful information, yet it is constantly voted down, same for other posts in this thread. You see this on each .NET/C# or even MS discussion here on slashdot. Such a shame...
This fellow has obviously no clue about Python and likely not much about programming in general when he can spout such nonsense about Python being "C-based" and "unable to do more complex things".
I read this more as - "I know Visual Basic so I will do everything in VB to save time". If he has said that, he could have avoided presenting himself as an ignoramus spouting techy mumbo-jumbo to get that parent off his back that doesn't really know much about the subject he is supposed to be teaching. I had colleagues who were teaching object oriented programming at a university using Max/MSP and dragging/connecting boxes - "These are objects in Max, so it is an object oriented programming!". But that is what you get when you have a music composer assigned to teach computer science (not kidding ...).
I am really sorry for those kids, because Visual Basic is a pretty terrible language to start from - it is very limited in what it can do and then anything more complex is directly linked to the Microsoft Windows idiosyncrasies, with little abstraction. They would have been much better off with something like Python & Pygame combination (I did teach a first semester programming class like that). Or even better some language actually specifically made for this purpose - like Logo. Or even start with Scratch, Alice or Lego Mindstorms kits for complete novices that have really no clue yet and then move on to Logo or Python once the basic concepts are settled.
People that are advocating C here have obviously never tried to actually teach it to complete novices (we are talking high school kids here!) - there you need to get the kids to first understand the abstractions like code, execution flow, the correspondence between real world objects and their modelling in a computer (variables, types, use of arithmetic etc.) Having to battle compiler errors, strict typing and stuff like pointers required even for printing a simple "Hello world!" message is really distracting and not helpful in that context. They will have plenty of time to learn about that later.
Disclaimer: I did teach undergraduate programming courses, both in Python and C/C++, including using those Lego Mindstorms kits.
For a Visual Basic like language on Linux, you can look at Gambas a bit like Visual Basic (but it is NOT a clone!).
http://gambas.sourceforge.net/...
For other arguments if he achieve to make his students understand concepts like variables, types, expressions, assignment, functions whatever be the language used to teach, its reusable knownledge for other languages.
-- Laurent Pointal
The one place VB still has some life is in the MS Office (and related apps) macro language, Visual Basic for Applications.
It's mainly VB6 with some quirks... but you can get a lot of stuff done.
I have clients that would prefer that I send them a Word template add-in instead of a 'compiled' add-in, since anything with a DLL requires an installer, whereas the template can be just dropped into the Startup folder to be usable.
Sadly, rather than updating it to the more object-oriented VB.Net, Microsoft has left it foundering in the barely-OO VB6 era with some object stuff bolted on that never quite does what you need, and yes, there are certainly things that need a full .Net interface to be written that you can't do... but I've made a fair chunk of my career on VBA, and use it for automating Office stuff on a regular basis.
Design for Use, not Construction!
Kids should start with raw machine language and fairly quickly move up to assembly, and then maybe plain old C, and only then get to higher level languages later. These lower levels don't have to be mastered to high degrees, but just introduced to lay the foundation to build on logically. I think these intro courses look at things backwards.
Higher level languages should be saved for experts as a tool for getting stuff done faster, with greater amounts of complexity, by people who understand how things work and are less likely to shot themselves (and their users) in the face.
That being said, good programmers can start with any language... doesn't really matter all that much.
Back when I was in high school the district was thinking about buying a DEC Edusystem, which used a PDP-8/L. DEC brought one in and set it up in the library and gave one week classes in BASIC. The district decided they couldn't afford it so instead they a Compucorp programmable calculator for each school. Maybe that might be something to look into.
"I would be forced to rely on C (which is incredibly complex for a junior developer)"
Really? That's how he thinks? Can we move him to teaching HR, where he'd fit right in with the other utter incompetents?
The first two course I took in programming, lo, these many decades ago, was a pseudo-assembly language with 13 instructions (including add and subtract), and then next was BAL (IBM mainframe assembler).
C, "complex"? I taught myself from K&R. I *really* don't want to contemplate working with this idiot's code, or his students' code.
mark
Learning to program has little to do with learning a programming language. Programming is a thought process.
I've run a small business with VB for 20 years. Commercial software and database, website CGIs, order system, all written and maintained in-house. I know VB inside and out and it does everything I need for this (relatively simple) operation.
Maybe VB teaches "bad habits" but properly written and commented code is more important than the language.
Err... Pascal and C are almost the same language, what are you smoking? Besides the sintax, the only differences you will find are basically in very obscure features of C.
In fact, you can transform Pascal to C code and the opposite with almost just a text editor search&replace function!
+1 for Haskell
Although, while not being a Haskell expert by any means, I can say that there are a couple things I've encountered in the language that are very frustrating, and ought to be solved.
If I had to prepare a curriculum I would probably be using JavaScript with JQuery and HTML for the intro course. The advantage of the language is the capability of quickly visualizing the application running with just a quick press of the reload button.
The use of JQuery allows us to bypass using CSS to make some visual changes to the HTML.
It will take a bit more preparation to create the template code that the students have to fill out initially though.
Archie - CIO-for-hire
I hate to admit I spent many years programming in VB and VB.NET. The first language I ever learned was BASIC (80's) and then Turbo Pascal followed by C and then C++. Later on I moved to VB.NET (I still hate C/C++ development on Windows unless using some cross platform tool), Javascript, Java, C#, and back to C/C++ and lately Python. What I have found really nice about Python as a beginner language for CS is how closely Python maps to set theory, how well it is supported across platforms, and that the syntax is precisely closer to C which is a benefit and not a detriment. I personally think Python is a great choice for intro to CS with my only issues being that Python is mostly used as a scripting language and many of the concepts of compiled languages also are important to learn and know. As for Intro to IT or just "generally intro to programming" maybe it isn't the best language. I am not certain but I still think it is far better than the quirky syntax of VB and VB.NET.
Until I used the page tools to add a p { color: black; } to the page, I realized I was unconsciously squinting a bit to read the #888 font on a #FFF background.
Who makes whole paragraphs look greyed out? Seriously. May as well make it all caps.
When I was in high school, we used Visual Basic for the Intro to Programming class and then used C++ in classes leading up to AP Programming. The exam, at the time, was given in C++
I've used Visual C#/GTK# (using SharpDevelop's IDE or MonoDevelop) for the past eight years as an introductory CS language at my high school. I feel the forms allow students to create a quick GUI program while still having the well-defined variables and object-oriented principles that will make them successful in AP Java or C++ whathaveyew. Our HS sequence for programming goes Visual C# to Java to C++ (for data structures)
First of all, I love Python. I get to program in Python all day.
However, I often wonder if Python's assignment methodology confuses students that move on to other languages.
In Python, an assignment is actually a naming operation, and not an assignment. On the surface, this seems to be the same thing, but it really is different. The other languages, with which I'm familar, do not operate like this.
I taught myself BASIC in 3rd grade, seemed like a good place to start. I did C when I was in 5th grade, why can't a high schooler handle C?
IMHO, starting with assembly is by far the best choice, but it takes about a year to cover it well enough to provide a solid foundation. Most autodidacts tend to skip it, and most college courses only brush by it quickly.
From asm to c, and from c to Python, add in markup concepts (HTML/CSS), database concepts and SQL, and from there, you can go pretty much anywhere you want to go, language-wise.
That's a lot of ground to be covered in just a few words, though. :)
I've fallen off your lawn, and I can't get up.
VB, what a horrible idea. And I thought Pascal was bad. It's a conspiracy to increase H-1B, since there won't be any capable programmers who grew up in the US.
http://www.amazon.com/Wizards-...
"A frenzied race filled with computer driven chaos! At the far end of the galaxy lies a fully automated grid-widget factory. As one of the factory's eight redundant super computers, you have a lot of responsibility and even more free time. When boredom creeps into your circuits, you and the other computers have a little fun at the factory's expense. Pulling defective robots out of the maintenance bay, you pit them against one another in a destructive race across the dangerously cluttered and ever-changing factory floor. One robot will wind up in the winner's circle the rest go on the scrap heap. The game is for 2 to 8 players. It takes about an hour to play. "
I agree with this comment on Amazon by Laszlo: "There is a place in our lives that is rarely spoken of and even less often brought to life with such perfection and beauty - that overlap between the strict von Neumann architecture that has defined our modern computer technology, and just plain silliness! Robo Rally is simple enough for many pre-teens to play, yet complicated enough for professional software engineers (such as myself) to really enjoy! It teaches the ultra-basics of computer programming in a very fun manner, while letting experts laugh at themselves and each other for silly mistakes or elements of chance and competition. While I think this game would be great for anyone who is vaguely interested in the subject matter, speaking as a software developer I can't stress enough that this game, for its unique combination of technical aspects and sheer silliness, is an absolute MUST for all nerds, geeks, hackers, and the like. ..."
Just played it for the first time on Sunday, and it was a lot of fun. Simplifying, it is a bit like a board game version of turtle graphics, where on each round you get dealt nine cards and choose five of them to make a "program" for your bot (move forward 1, turn left, move backwards, etc). Your objective is to move your robot to a set of locations in order, while other players are doing the same. There are a lot of extra complexities of course (locked registers, laser guns, pits, conveyor belts, special abilities, etc.) that require a lot of thinking. There are no explicit conditionals, but it still would get anyone thinking about the basics of programming in a fun way. And maybe one could add conditional instructions somehow with new cards?
I've also heard it said that the best way to get a kid ready to learn programming is to learn to play a musical instrument, especially the reading music part.
Anyway, your solution of something like QBasic is very practical of course. I'd also suggest learning JavaScript because it is so ubiquitous and easy to get started for most people. Better yet, you could build something like QBasic on top of JavaScript that has the features you want. I've seen a couple (including from Slashdot articles). They often have a Scratch-like graphical programming element, but there is no reason they could not be more text-oriented from the start.
Personally, I also like the CARDIAC pen-and-paper method, too.
http://en.wikipedia.org/wiki/C...
"CARDIAC (CARDboard Illustrative Aid to Computation) was a learning aid developed by David Hagelbarger and Saul Fingerman for Bell Telephone Laboratories in 1968 to teach high school students how computers work. The kit consisted of an instruction manual and a die-cut cardboard "computer". The computer "operated" by means of pencil and sliding cards. Any arithmetic was done in the head of the person operating the computer. The computer operated in base 10 and had 100 memory cells which could hold signed numbers from 0 to +/-999. It had an instruction set of 10 instructions which allowed CARDIAC to add, subtract, test, shift, input, output and jump."
But then no one else back then my age seemed to get it... It probably helped that I had a KIM-1 I'd been playing with...
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
Why, why, why are schools so interested in teaching kids to program? Programming will not even exist in ten years!
The question is for programming, but the blog discusses AP CS. There are differences there, which are fairly important.
If one were to teach another to program, then I'd stick with a language that is closer to English. This is a reason why PASCAL or BASIC was used - they are a lot more verbose in nature than C, Java, etc. I think Python should qualify as well, because you do want to impress upon the learner the importance of formatting.
For CS concepts, it might be better to start with a language that's closer to the concepts in CS. For this purpose, I'd say Logo. There's a direct feedback in Logo, and it starts really simple. I learned it in junior high school. From there, you can get crazier into the functional programming world and migrate to scheme or full blown lisp, which then translates rather well to automata, grammars, languages, etc.
You need to restart your computer. Hold down the Power button for several seconds or press the Restart button.
Firstly, I'm both a qualified teacher (PGCE, the UK teacher training qualification) and a developer (BSc (Hons) Comp Sci, MCPD) in the UK. So I have a foot in both camps. It is obvious that this bloke, like most teachers of "Computing" in the UK has no clue. "It is true that Microsoft stopped programming in Visual Basic in 2005, however they did not stop programming in derivatives of this language and developing the software to program in visual basic, meaning as a foundation language it is perfect for introducing complex programming constructs." anyone with a clue would be fully aware that there is no real comparison between VB6 and VB.Net in anything other than the most Basic (ahem) syntax. VB.Net is really a syntactic sugar for C# but the whole, well, almost everything is completely different. Yes, there's a hack library which sort of works a bit. Now, in answer to the question any developer would ask "WTF are you teaching a thirteenth rate Basic language" ; there are various reasons. The teacher can't really program, doesn't understand OOP, Modular programming, Event programming or how .NET works (they will complain endlessly about strings not being mutable first class variables for example) and they really don't understand why Quick Basic is awful and totally unsuitable for future learning.
But the real reason is this. Nobody else in the UK education system knows much about computing either. So the idiot examiners look at a Windows Form with some buttons on which does something vaguely (say a simple calculator) and they think (and score) as if this is some big programming achievement rather than just dragging and dropping a couple of objects and typing a couple of lines of code (probably copied) in. If they'd done it the way they did when I started (WinMain, message pump, create window etc.) then yes it would be an achievement.
It's a bit like those 'impressive' Wizards for things like .NET which turn out a form with querying, sorting and so on all built in. They haven't really 'coded' anything, they've just clicked a couple of buttons. But it ticks boxes, the fact that it's just zero effort or understanding, nobody cares.
UK examinations are about achieving this with the minimum of effort with zero interest in whether what is taught is useful or developmental or not, so in that sense VB6 is absolutely ideal.
Another example, from MFL (Foreign Language teaching) which illustrates it better. There is a spoken exam, the idea is that someone will talk with the student in the language in question, to see if they can 'converse' in French, German, Spanish, whatever. It's supposed to (it was years ago) to be completely free flow, you knew the subject might be "My Holiday in France" but not what the examiner would ask.
But what actually *happens* in most (if not all) cases now is the questions are known in advance and the students learn the answers verbatim (usually they have these little keyrings on with the Q+A and they practice repeating them).
Very effective for passing the test, which simply becomes a memory test. Useless for learning French - it doesn't matter whether the language is French, Spanish, Klingon or just made up, because the student is simply repeating memorised answers without knowing what they mean (often).
And no, I'm not being cynical, exaggerating or anything like that ; it really is this bad.
I'm working on Java project for 10 years + and just now I had a project that requires some Excel VBA work, which I realized this is more important to business users than your JEE applications. Big enterprise application would requires $$$ for any small change that business user really need. Not to mention needing at least 3 people to accomplish (developer, tester and admin); and don't forget the manager. So if the only objective is to let people be productive with their basic coding skills and will be able to use it in their careers outside of Software Engineering, I would also recommend learning a bit of VBA.
well, $SUBJECT says it all, really.
What exactly is a "complex construct" and what can't Python do that C can do? Volatile memory locations?
Python is simply a better choice for beginers, . It's indent based syntax indirectly teaches students what programs should look like instead of require the teacher to state how indentation improves readability. There are many other nice features however these have been covered elsewhere. I have worked in IT for 25 years and about a decade ago my sister who teaches senior high school students enquired about 'better" teaching languages. I suggested python and after more research and similar suggestions from IT staff in Sydney University she adopted it. The NSW department of education rates teachers based upon their performance based the performance of the students compared against their baseline performance and she has consistently performed in a top few percent. Python won't make a great educator however it is a tool that a good educator would choose.
I started programming by taking a programming class through "ITV" (interactive television system used for distance learning in the 90s) from a state community college when I was a junior in highschool. I got an A in the class and it prepared me well for my introductory programming classes in college (Which were taught in C++ when I attended, my college has since changed to Scheme and then to Python for teaching programming concepts, I believe one or more advanced programing classes are still taught in C++). My friend, who was a PhD student studying AI and Lisp hacker, wrote the Scheme book for the introductory course - which was called "Solving Problems with Computers" (intended for incoming CS students with little programming experience and non-majors that needed a programming class to satisfy their degree requirements - lots of New Media students). So many non-majors complained about Scheme that the course was taken away from him and changed to Python.
I teach Computer Science/programmin to 11-18-year-olds in the UK. It's very easy for any professional or academic to say that everyone should learn C, python, or whatever else. The questions those people should ask themselves is have you actually had to teach those things at that level, and are you aware of all the constraints that the average school pupil, teacher, or network has? I inherited my first class (16-17 year-olds) who had been learning VB6 for a year and had to stuck with it, I moved the next year group to VB.NET and it worked well. VB.NET, if taught correctly can teach the logic, syntax, and programming concepts needed to start a new project in a new language. Importantly, the majority of pupils from 13+ are able to understand the meaning behind virtually all the code they are writing. I could not say the same thing about teaching C. The post from the teacher in question is clear: we are not teaching a specific language, whatever that may be, we are teaching the concepts of programming, from procedures, and conditions to data structures and object orientation, in order to solve problems. It's like arguing that teaching pupils the recorder is stupid because they should all learn the cello; if they learn to read and compose music, they can pick up whatever they really want to do later.
Aha, but see, that's another reason to argue against proprietary systems and stacks. When things aren't proprietary, it's nearly inevitable that crazy, determined people will port it to everything you'd want to run the stack on; if your boss wants you to run a POSIX program on Windows, Cygwin certainly provides a pretty damn complete environment for doing so. Nearly every CLI programs I've ever wanted to use on Windows that I can on Linux is already in their repos, even, so the chances that you've written a POSIX-compliant application that can't run through Cygwin seems quite small.
And hell, a lot of the time these days things aren't necessarily so low-level, so stuff like MinGW are all that one needs to compile a Linux/BSD/whatever-aimed CLI program for Windows. And Free toolkits like Qt supply all you need to write and compile full GUI programs that'll run on POSIX-ish systems just as well as Windows, and hell, the few things you're for some reason doing low-level enough to require POSIX somehow can probably be #ifdef'd with what little WinAPI you know.
I remember sigs. Oh, a simpler time!
I agree.
There are more key concepts more easily taught in Python than in other languages. I had my 9 year old on Khan Academies Javascript course, which was good at teaching concepts, but only as far as Javascript has them. For a real OO implementation and ease of use Python stood out. I got my son the excellent "Python for Kids" by Jason R. Briggs and he picked up a lot about classes and methods very quickly. IDLE is an easy to use tool for beginners, and other resources are great. I like Python as it's a real language used to solve real problems (unlike Scratch et al). Come AP testing time (US) he may have to switch to Java, but there is a good chance the test will be Python by then.
clear, unambiguous, imperative, focus on data models.
Why do they want to conflate assignment and declaration?
That's why I recommend QB64, which has compilers for Windows, Mac, and Linux, and can compile to Android in their Windows version.
Actually, Chromebooks do indeed have a shell and a default text editor. I think it's VIM? I forget now, and I left my Pixel at home and normally have it booted into a normal Linux desktop. The trick is just that you have to flip it into developer mode, which then gives a scary warning screen every time you start it up, and you're giving the kids a lot of leeway to muck up the system then I suppose, but on the other hand resetting it entirely is as simple as hitting spacebar and then y (if I'm remembering correctly) upon boot one time, and giving the kids who want to fiddle the ability to fiddle is probably the best education you can give many of them---figuring out how school computers and networks worked so I could install Doom and play it with my friends taught me more valuable lessons and skills for my current sysadmin job than any actual classes did!
I remember sigs. Oh, a simpler time!
Just as gateway drugs seem, and often actually are, harmless and non-addictive but lead to far more addictive and harmful drugs that can ruin users' bodies and minds, so-called "gateway languages" can seem harmless enough and actually be productive while insidiously instilling bad programming habits and behaviors that can ruin a team's morale and drive and lead to lethal products such as unmanageable code, poorly defined objects and improper interfaces in more complex languages. This can lead to early resignations or retirements by highly frustrated programmers and the untimely death of major software projects.
BASIC has been known to be brain-damaging by Computer Science experts for over forty years (Edsger W. Dijkstra, SIGPLAN Notices, Volume 17, Number 5). Just say "NO!" to gateway languages!
"Old Educational Computer Resurrected As a Spreadsheet" http://science.slashdot.org/st...
Which links to:
http://www.drdobbs.com/embedde...
See also:
https://www.cs.drexel.edu/~bls...
http://en.wikipedia.org/wiki/C...
A downloadable emulator mentioned in the Dr. Dobbs article:
http://www.kaleberg.com/softwa...
But ideally it would be in JavaScript and run in a web browser... Could make a nice small project for someone...
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
Easy to use, has a GUI code editing tool, a nice and easy to use language with syntax help and parameter completion a few keystrokes away. And there are open source versions of REXX so it's future proof. Justify MS Visual Basic? Really?
http://en.wikipedia.org/wiki/VX-REXX
It's NOT an art form. If you're a programming diva and you see, Oh, sob! Bad, sloppy programming practices...!
Blah, blah, blah. We've heard it all before.
Software is about producing something usable for money. You don't expect the bricklayer of your house to be an architect with a doctorate. You don't expect the guys nailing boards together to be either. Similarly, every person who makes money programming something doesn't need to know every aspect of software development down to the level of the circuitry, nor do they need to do it perfectly.
Sometimes you need a skyscraper. Other times, you need a quick shed in the back yard. Usually, you need something in-between.
Can there be problems or maintenance issues? Sure. I need to replace bricks and board every so often too. All structures are imperfect and must be adapted to changing conditions (Rotting wood, rotting OSs, etc.)
What these ivory tower assholes don't want to admit is that software development is a construction business like any other. They want their perfect constructions to exist forever in Platonic Space as perfect contemplative objects...
Get real. I hire the programmers I can afford. We fix it later if needs be. That's the real world, and that's how it will always be.
Please do not read this sig. Thank you.
Today, "Visual Basic" is the language formerly known as "VB.NET". When Visual Studio 98 (and thus VB6) support ended in 2005, the next version of what was "Visual Basic .NET" was named "Visual Basic 2005".
A lot of greybeards around here probably think of "Classic" VB when they hear the name Visual Basic, with its kludgy use of "On Error Goto" for error handling, and the use of variants in lieu of an explicitly typed declaration. Modern VB has all the things you'd expect from a modern high-level language: Try...Catch blocks, strong typing, fully object-oriented, 64-bit ready, etc.
The teacher in TFA doesn't make it clear what he's using.
What the heck? Didn't they learn it in college, which is even earlier than "junior developer"?
A "junior developer" that doesn't know C, among the most widely used high level languages of all time?
I think most people here agree that what he's saying is pretty close to complete nonsense. However, VB definitely has an advantage over Python, that if you are working in MS environment, then writing windows like programs are a lot easier in VB than in Python. For that matter, the simplest python program need to run in a console, which looks weird to many Windows users. If you want to show people how make dialogue boxes, basic windows, etc., without them knowing how to solve a problem, then I won't be surprised if VB is much more powerful than Python (assuming most of your students are using Windows machine, which might not be so far from the truth). If you want to teach people basic CS concepts, then Python is a pretty nice program, and pretty hard to beat IMO.
I taught programming to a group of teenagers with no previous programming experience. I chose Common Lisp, using Conrad Barski's 'Land of Lisp' as the text. My objective was not to teach a particular language, but to teach HOW to program. The big advantage to Lisp is that there's no syntax, after all, everything's a list. I've also taught C++, Perl, and JavaScript, and in my judgement, those teenagers made mare progress in Lisp than college age kids did with the more traditional languages. At the end of the course, they were successfully writing real programs, which is more than my college students ever did.
From my experience there seems to be a sort of religious preference for C# over VB.NET, a bit like how some engineers prefer to use all uppercase letters. I've asked some and can't really get an answer. C and C++ are a different matter, as they clearly offer different and useful tricks.
I haven't done much in C# for a while and have been thinking of getting back into it, for kicks. I think that I did some MVVM web-related code last time I used it.
I've written in both but am most comfortable in VB.NET . I find it irritating to have to put in all those semicolons when the end of line is clear enough, and with much nesting the curlies can get confusing. I think that my main preference is that, since I type quickly, I like a more text-like language because I feel that it flows more easily (more letters, fewer punctuation marks).
I also like that VB isn't case-sensitive, and will correct capitalization for you. This saves you from stupid capitalization mistakes (for those of us who actually see a point in using capitalization in informative ways) and on a large project makes it easy to check whether you've typed a correct variable name by using lowercase and noticing whether the IDE pops part of it into uppercase.
The Visual Studio IDE is very helpful in both VB and C#. Most of my recent work has been VB.NET (my choice) but I often read C# and used it more for mobile coding or pulling in others' code (translating from C# to VB, pretty easy in fact).
Right and just how big is the programming market in the Mono world? .NET was created solely as an attempt to kill Java and portability, and Mono is only tolerated because its usage is so small and because it occasionally serves as a distraction.
Considering that all programming in Unity3D uses a subset of Mono I would say a decently sized market these days.
I first learned how to "program" in Hypercard on my parents' old Mac. After that, I moved onto writing games on my TI-85 using TI-BASIC. Then learned RDBMS in Access along with VBA. That translated very well into full-blown SQL server with VB, and from there to C#, C++, Java, javascript, etc.
There is nothing wrong with BASIC. Most people who start learning these concepts are not going to become full-fledged master programmers, and that's fine. For many people, a working knowledge of VBA will be more helpful than anything else for basic automation in Word, Excel, Access, etc. A good programmer is going to make it regardless of what language they start with. If they aren't gonna make it anyway, probably better off with VBA than Python for their everyday office tasks.
I just finished my teaching my first semester of a computer programming class. I used NetLogo, a descendant of Logo. I hadn't used it much before, but a group at the Santa Fe Institute here in New Mexico was working to have more CS taught in high schools. They were going with netlogo, and the programming curriculum had an emphasis on scientific modelling rather than traditional CS topics like search/sort algorithms.
I was skeptical of Netlogo at first, as my real world experience was mostly with Python/Django, but the kids really took to it. There was some classic Logo programs (Spirographs), but CS topics like recursion (drawing a fractal tree) and sorting (a bale of turtles sorted on different criteria, with different algorithm efficiencies) were covered too. There was some great modelling though, for ecosystems or a disease spread model.
For my second semester of the class I'm switching to Python, to give the kids a different perspective on programming.
Your point about vendor lock-in is pointless. There was a time when computer classes were taught using terminal-based systems, and everyone had to use the school computers, much as chemistry students have to use the school's labs.
You kids. So damned spoiled nowadays.
I do not fail; I succeed at finding out what does not work.
I could see an argument for C# maybe but not VisualBasic. I like Python best but C# programs do usually run faster and the harder type checking is helpful most of the time. I wish C# had real decorators, had a unlimited lossless big number class with its existing number classes in a logical hierarchy under it, had a standard epochs-based date time class, had a standard way to flag any variable as un-nullable, had a standard way of defining order-aware structures for import/export, had a standard way of creating event logged data, and had events that weren't a bit wonky and mysterious. It'd be nice if there was a way to create a subprocess that acted as its own program with its own memory, disk permissions, etc but I can't say I've seen any other language get that right either. At least VB essentially maps all the same underpinnings as C# .. just not as well and using weird terminology and syntax. Python has its own unique syntax but it's clean and uses pretty standard terminology.
At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
I see Java programmers building Python code every day. The code just plain sucks. It doesn't make use of the expressiveness of the language. A Python programmer going to Java will be frustrated and annoyed, but will write good Java code after a short period. The reverse is not true.
MIT, Berkeley, and many other schools start with Python. It doesn't have the same effect as Basic. It's not a question of "human" readable, but of based around good design practice. Human readable is almost always a good thing; I can complicate any language with more bad syntax, and it doesn't help. The problem with Basic isn't readability, but the brainfuck way in which it forces you to organize code.
VB actively encourages bad design practice. It's a broken way of organizing code. That carries along when you move. Python encourages good design practice. Pythonic code is good code. That also carries along. C and Java encourage one way to write code, which while not broken like Basic, is only good for some settings, and not for others. People coming from C/Java have a very hard time writing other types of code (e.g. functional) when it's useful. From Java, they have a hard time using the right OO paradigm for the right task, and are lost when something is best expressed as structured. They force everything into nouns, even when verbs make more sense. Etc. C coders do a bit of the reverse, although not as badly as Java coders. C somehow doesn't seem to permanently break people, the way Java and Basic do -- there's just a bit of a learning curve.
First, Freebasic is truly free and runs on several platforms unlike VB that is strictly tied to windows unless you use Wine etc..
Secondly, if you're trying to teach the basics of the basics (variables, if statements etc), an clean environment like the freebasic is much preferable to the visual basic one, as there's no functions, classes and things that are only useful on the vb environment itself like the window editor itself to worry the student and take his time.
Of course, if i was going to use it to teach, would be just the basics, getting the student used into how to formulate his own code and having fun doing so and then quickly boot him into something actually decent like python or C.
I had quite the contrary experience. C was my first language and it is super awesome because it is so simple.
Not python. It has an obnoxious syntax that is incompatible with modern IDEs. Python's flexibility is really cool, but the poor syntax (len vs length, [-1] instead of [end], etc..) and use of whitespace as a syntax unnecessarily complicates programming and makes it hard for a modern IDE to enforce style.
What we need is a language with python's back end but with a front end that wasn't created by someone with an axe to grind when it came to syntax and program layout.
www.eissq.com/BandP.html Ball and Plate System. Amuse your friends. Crush your enemies.
I completely disagree. Dynamic typing makes keeping track of what you're doing more difficult; at least for a beginner. If they don't understand the difference between a string, an "object", and a numerical value (which is confusing itself) then they cannot be an effective programmer. Also, writing more code and being demanding aren't what I would define as being a additional bonus you get for using a dynamically typed language. You write more code because it doesn't work well and you need to fight with the language more than use it. Also, the dynamically typed aspect makes it more demanding the same way driving with your eyes closed makes driving more demanding; it is not helping you in any way shape or form.
Java's "syntactic clutter" I call "helpful verbosity" and most scripting-turned-application languages are sorely lacking in readability; something Java has been getting better at in recent years. Java forces readability and corectness more than most scripting languages I've ever used, at least. Structure is more beneficial to a beginner than freedom.
-SaNo
How well does Tutorials Point's online software vm environment work on IOS?
Not at all, seeing as my connection to www.tutorialspoint.com is timing out at the moment. And even if it weren't, it'd work only as long as the device remains connected to the Internet. An iPhone or cellular iPad? Fine, so long as parents are well-off enough to keep the data plan valid. An iPod touch or Wi-Fi-only iPad during the ride on a yellow school bus? Not a chance.
You really are too focused on edge cases.
I'm in good company: "First they came..."
I remember Turbo Pascal in a programming class in college.
In 80's that is...
Matlab has become a popular intro CS language for engineering students. And, you've probably noticed that those $300K per year PhD "Algorithm Designers" in your company use Matlab for development, then have someone translate the final algorithm to a production language.
Stephen Wolfram: "The idea that students have to learn #include, etc.—this kind of strange incantation of having to write at least 20 lines of code to get their first C program working—is really unfortunate. It gives them the idea that programming is much more of a black-magic kind of thing than it actually is. That's a pity.
In a sense, BASIC was, from that point of view, a much better kind of language."
Any language that vaguely looks like english and can handle the teaching tasks is a fine teaching language. I don't see VB as BETTER for teaching at this level - and ESPECIALLY not for the reasons this teacher justifies it - but I wouldn't say it's really a terrible choice either.
Are you seriously saying using proprietary software to teach beginning CS if it's the best tool still isn't the best tool because it's unethical?
Implicit in this is a claim that "it's the best tool" in some manner. To determine whether the ethical hazard of forcing inferior tools on students outweighs the ethical hazard of forcing non-free software on students, I first need to see the facts in each case. So let me rephrase my previous question in the terms of your post: In what way is proprietary software demonstrably better "to teach beginning CS"?
The incredible complex bit is bogus
The book on "c" is vastly shorter than any VB intro text.
If he is a good instructor any modern or near modern language is fine with me (I have my doubts).
I have my preferences in strongly typed languages and I am open to functional vs. object oriented
models. I have been astounded with the work that clever folk do with OO languages but I get
disillusioned when maintenance becomes an issue. Pascal helped many instructors and for
that reason alone still needs to be on the list.
Any language that takes more pages to describe than "The C Programming Language" uses
is suspect to me. Sadly many consider the big pile of library functions and all their interactions
as part of the language.
Modern languages need to be precise enough that a compiler can make common optimizations
safely. A foundation of basic library functions that only depends on the language itself can be
volume II. Having said that string libraries need to be improved. Math libraries are important
to me so Vol III but bounded to K-12 math and statistics. Sorting and Searching can be Vol IV.
University level tools and goals as addressed in libraries need their own number space.
But Vol I needs to be the language itself and no more.
Truth is stranger than fiction, but it is because Fiction is obliged to stick to possibilities; Truth isn't. Mark Twain.
Pascal has always been a good teaching language. It still is, and the recent versions of Delphi have all the latest language features from aspects and closures to regular expressions and unicode strings. Visually it is as easy and quick to develop in as VB, the compiler is fast, it can produce fast running stand alone executables, and it can also target iOS, Android, and OSX in addition to Windows.
The academic edition is fairly cheap and there are hundreds of books for Pascal that all still work with Delphi.
Reading the amount of shit in comments about programming is depressing.....
Pretty much all of you are idiots..
The language does not matter!!!!! (although avoiding stupid fucking white space python is a good idea!)
The most important is teaching about how variables, allocation, decisions and looping work..
Once you understand the basics you should be able to do it in ANY language.
In 40years I haven't come across a coding language I could not program in...
From my perspective they are all the same.
Only the verbs and the fancy way of laying shit out changes
If it involves actually thinking about what you are going to write instead of cutting, pasting, failing, following up on the net (and not by thinking through) then certainly lower level languages are complex.
Is easier to learn than VB, has VASTLY better libraries and is trivially extensible with C or Fortran. Holy crap I'm a Microsoft shill most of the time but this? Really?