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.
.
And which version of Visual Basic is being used in the class? The old versions that worked, or the re-architected versions that suck?
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.
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.)
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.
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
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
Beginners. I would suggest vanilla BASIC, at GCSE level (~15 years old)
Excellent advice, for a programming course intended to taught in the 1960s and maybe 1970s.
Hopelessly outdated advice for the 1980s and on.
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.
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.
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.
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.
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.
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
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.
When he says "I understand the popularity at the moment of the Python, however this language is also based on the C language.", what he's saying is that Python is based on C.
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
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.
Actually no, excellent advice but for too old a user. At age 10 I started hacking away on a hand me down commodore vic 20 while everyone else was enjoying Windows. The stuff I discovered with a few reference manuals, sample programs on tapes, and the goal of building programs with menu driven interfaces...
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.
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.
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.
clojure is the way to go. That way they will improve their typing skills as they search for every printable ascii character on the keyboard that has some obscure and subtle effect on their `code'. They can improve their reading skills by grappling with poor explanations of vital concepts from the terrible books that cover the subject, and the teacher can have fun grading assignments since it is simple to read, like perl.
Nullius in verba
Forces new people to develop basically good habits re: code structure and use of whitespace for readability
Just give them a good editor from the get-go and it doesn't really matter. Learning about manually managing your memory is arguably important as well and (the basics) easy to teach.
Processing is a good alternative, btw. Easy and you can do *lots* of fun stuff with very little code and explanation. You also start with a boilerplate.
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...
I suggested processing in another post. Best of both worlds.
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!
Great quote, and insightful conclusion. Amen.
Something worse than Visual Basic? I can't think of any.
SNOBOL? MUMPS? PL/1? Ada? Intercal? APL? Progress 4GL? PHP?
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.
What I see in practice is that we have 90% that have no clue and 10% that are really good. While not all of the really good people can program C, they all do understand the concepts and could pick it up in a short time. One main characteristic of the 90% is that they do not understand basic concepts of computers, like pointers, memory locations, registers, etc. These people are using computers as black boxes. That is fine for users, but not for people that create software.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
I fully agree. I think the main problem here is on the side of the teacher.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
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.
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."
In the early 80's pretty much every common computer you could get came with BASIC. It may not have been real useful in real life (well, actually it was since my first job was VB4), but I was 10 years old and teaching myself how to program. BASIC was awesome back then. It made me interested in computers.
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:
I hope you're not suggesting that node.js is a language. This is the second time in the last two weeks I've seen someone say this.
Amen! C++ is only complex if you choose to make it so. C++ as introduced is Strustrup is a very simple, easy to use language. Print data by pushing to an output stream. Read data by pushing from an input stream to a variable.
Each new concept can be introduced easily. There are lots of abstractions to show concepts like pass by value and pass by reference, and it still has the low level syntax so you can delve into what is happening under the abstractions.
If I were teaching somebody new to program, C++ would absolutely be my first choice.
Easy Online Role Playing Campaign Management
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.
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.
Mod AC parent up.
If VB is what the teacher is most comfortable with, and he and the students can do the most impressive "first projects" with it, then by all means use VB6.
I started learning by myself with Turbo Pascal. And ostensibly my first exposure to "programming" was with MS Office macros. Neither were great languages, but I got them to do interesting things, which were motivational. They were also useful, in that in my first temp jobs I could help office people set up mail merges and do stuff to their inventory and things like that. And then, finally I was also motivated to learn other, "better" languages when I hit their limitations. Sounds perfect for a HS course.
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.
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.
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.
About the only part of your construct that makes it explanatory is reasonably descriptive variable names. That's a lesson that can pretty much be applied to any modern programming language.
The world's burning. Moped Jesus spotted on I50. Details at 11.
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.
Yeah, but also look at how many people started in Pascal, a language intended ONLY to teach, and then stayed there.
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.
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!
"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.
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 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.
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 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.
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.
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.
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.
Holy shit AC.
It's reliable, you never get in the position VB puts you where you can have a working program which you copy over to another identical machine, and suddenly it stops working. Or you where you shut down the computer and come back later, only to suddenly have it suddenly not working.
That never happens with C? Are you kidding me?
C programs are easy to deploy, as opposed to for instance java.
WHAAAAT?
Compiler error messages tend to be pretty concise, readable and comprehensible
OK I've officially been trolled.
Just because the U.S. is a republic does not mean it is not a democracy. Democracy/republic are not mutually exclusive.