Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Help me convince a teacher we should learn Python (vs VB.net)
43 points by newsisan on Nov 9, 2010 | hide | past | favorite | 78 comments
For a high school class.

He's a great teacher (from what I hear, and my conversations with him), though the current plan is to use VB.net, while me and a few others would much prefer Python. Key requirements/comparison points for him are that it should be easy to learn (17 year olds new to programming), and for me, I'd like to learn it as with LPTHW we can go along ahead of the class.

To be honest I think VB.Net is a decent choice for a high school level course. It's an approachable modern language backed by a huge framework with easy access to web, Windows and console programming. The IDE is free and relatively user friendly for someone familiar with Windows, which is much more likely than anything else.

Don't underestimate VB.Net. It has a terrible history but most of that ended with VB6. Another bonus is that once you know VB.Net the jump to C# is trivial and now you know 2 in demand languages. You can also compile the same code into a program along side F#, IronRuby and yes, IronPython.

You aren't there to learn syntax, you are there to learn to program. You should absolutely learn Python on your own as well, knowing one will make the other much easier to pick up anyway. Once you've done that go and learn Scheme, or Ruby, or Scala, ir preferably all of the above.

I don't mean this as flamebait at all.. Really. I very much respect the .NET platform... but honestly, something really bothers me about the idea of teaching a proprietary language & platform in public schools when there are sooo many amazing open source options available..

Fair comment and I kind of agree in spirit. Java hasn't really been living the dream lately though.

At my high school we were taught to use Word and Excel because those were considered essential skills. We could have learnt Open Office or something else but really, how often are we going to encounter that in the real world? In terms of practical use, .Net is not a bad choice.

Personally I would like to see Python for getting started and practical use and maybe Scheme for going deeper.

We could have learnt Open Office or something else but really, how often are we going to encounter that in the real world? In terms of practical use, .Net is not a bad choice

I'd say let's take practical-business-relevance out of it (even though I'd argue the relevance of Java, Python, and Ruby to be plenty comparable to .NET).

We're talking about high school students, not trade-school students. I think the curriculum ought to be about opening their eyes to this really incredible world of solving problems with computers and logic. I also think a bit part of the key to that is to make sure we don't saddle them with skills that can't afford to develop. You know how bummed I was after taking AutoCad or using Photoshop in high school only to find out that I'd have to mow lawns until I was thirty to afford to use them at home? That's just stupid, and spirit-breaking for interested kids that don't have 800$ (or whatever) for Visual-Studio-Enterprise-Resume-Edition.

That's why it's nice that everything you need is free including web, Windows and even SQL. http://www.microsoft.com/express/

I think the best argument here is regard students running Macs at home which I have no reasonable counter to.

Proprietary or not, it is an accessible language and IDE. The idea of learning an open language is a good one. But, I think at the high-school level, it would be more important to expose students to something with a low barrier of entry. I don't mean the language, but the entire package. With VB you install one application, and you get an environment where you basically type code and press a play button to get it to run.

How accessible is VB.NET for all those kids who own a Mac?

Fron what I read the Mono compiler for VB.Net is reasonably complete so to answer your question, it's there but more difficult than it should be.

I hear Mac's run Windows pretty well.

And how much does the non-upgrade copy of Windows cost? I suppose kids could download an unregistered copy and use that for 90 days or whatever the period is, but that may not be enough to last the school year. No doubt schools won't encourage kids to use unlicensed software that they "borrowed" from somewhere.

Although I should point, C# is my language of choice on .Net.


1) Your teacher cannot learn a new language well enough to teach a bunch of high school students in time. Have some consideration for him.

2) Your goal when starting to learn programming is not to learn the syntax of any one language, it's to learn to solve problems using programming. - Learn about P-code ( or psuedo code ) - Learn about Simple Data Structures. - Learn about conditional( if-then-else ) constructs - Learn about iterative( for-while ) constructs, - Learn how to declare variables and initialize them; - Learn how to edit-debug-run code - Learn how to version-control code (any file in general) - Learn how to write functions/methods/sub-routines. - Learn how to comment your code for future debugging

These are fundamentally the same in almost all modern programming languages. The syntax changes from one to another is mostly cosmetic. The key is good coding and problem solving habits and attitudes.

3) It's easy to spend time on the internet and be anamored about a particular language, particular OS, particular editor etc - but in the long run, they are commodities; there's no great big differences between them

4) If you really want to work in python, do so. Finish your problems in VB.NET and re-write it in python. Just don't impose your preferences on your teacher and entire class. It would detract from the goal of the class.

I completely agree on all counts.

On top of that, VB.NET makes it almost trivial to transition to C#, which is a hugely important language right now.

VB.NET can also give you a hint of mix-ins (through interfaces and extension methods) and functional programming. Not saying you'll get there in the class, but it's out there. The .NET platform gives you a taste of almost every programming paradigm out there. It's very versatile.

If you want to go through LPTHW, nothing is stopping you. In fact, you don't even have to wait for the class to begin. Just start.

It's a bad sign that most of these comments (about 20, as I'm typing this) are trying to talk this kid out of his enthusiasm for Python in defense of -- heaven help us -- VB.Net. Come on, people. If we can't do better than that on Hacker fricking News, perhaps the doomsayers are right after all and this neighborhood is done.

Hold on, newsisan, there are thousands of Python hackers here. Let's see if any cavalry ride to your rescue.

I'm not a Python guy so this will be weak, but I'll do my bit.

1. Community. Python is far more widespread in the web, open source, and scientific communities. It will be much easier to find interesting projects to play with and libraries to build on.

2. Simplicity. Contrary to what your teacher may have heard, Python is an excellent beginner language. VB.Net is actually way more complicated. It's Microsoft propaganda that positions VB.Net as the best language for beginners. (Edit: it seems nearly everyone here disagrees with this. Am I crazy? Let's hear from some Python people.)

3. Quality. Python is far more organized around clean programming constructs and practices than VB.Net, which is an arbitrary mess.

4. Openness. Python gives all the advantages of an open codebase and platform. I suppose I should list some, but I'm tired.

5. The REPL (http://en.wikipedia.org/wiki/Read-eval-print_loop) is hands-down the best technique for playing with programming concepts, trying out ideas and getting feedback, learning, and coming up with the building blocks for programs. Once you've gotten comfortable with the REPL you'll never want to live without it again. No one should learn programming without this invaluable resource, which Python has and VB.Net does not.

5. Cool. VB.Net is the ultimate in uncool. Python holds its own just fine. Frivolous? Yeah, but there are deep reasons for these things. Learn Python so the other programmers won't smell VB on you and peck you to death.

Good luck!

p.s. A simple additional principle you should know: never try to talk a programmer out of their favorite language. It can't be done. If your teacher is deeply attached to VB.Net, just go with what he wants and enjoy the positive aspects of the class (if he's a great teacher, that's the most important thing anyway and you're lucky to have him). If he doesn't care that much, though, maybe you can wear him down with your enthusiasm. :)

pp.s. Worst case scenario, write all the programs in Python and then rewrite them in VB.Net to hand in. You'll have more fun and learn more.

"talk this kid out of his enthusiasm for Python in defense of -- heaven help us -- VB.Net."

I don't think that's the point nor is it what most people are doing. In an introduction to programming course, the language is a tool in which the concepts taught are illustrated. Letting the teacher use a tool that he is comfortable with will by far outweigh any advantages that using another language will bring.

Think about it this way: to learn how to drive Formula 1, does it matter if you learn how to drive a stick shift in a Ferrari or a Toyota Corolla? IMO no. (in this analogy it would be safer to learn in the Toyota, but I won't take it that far in the programming case...).

As one of those defending VB.net -- let me be clear: Newsian should go and learn python. Go and get something like this: http://greenteapress.com/thinkpython/ and go learn it.

But Newsian's teacher -- they should teach what they know.

Community is surely the big win for Python. If you manage to get a 17 year old interested in programming, then where better to take the next step than start hacking on some open source projects written in Python?

Where does a 17-year old go next with VB.net?

You'd throw a 17 year old with 40 hours worth of 'introduction to programming with Python' into hacking on Django or Scons? Good luck with that.

(not that I know of any open source projects in VB.net, but still)

No, but if a 17 year old chooses to start looking at the source code to work out whats going on, then I think that would be great.

VB.NET is a solid language saddled with a terrible pedigree -- VBA macros, VB6, classic ASP. All nasty. But VB.NET now is an entirely different beast which happens to share the same name. It's like being the kid called 'Adolf'. It's not really VB.NET's fault.

Having used both languages, I've not seem any serious language features that one has that the other doesn't. What is missing in VB.NET, or made very difficult, that Python makes easy? Or vice versa?

I'd say there's likely more VB jobs around. Secondly, learning a crap language first is often a really good idea. It shows you what not to do. It's like having a failed startup and then having a success - you learn from that failure.

And thirdly, it just doesn't matter that much. You should be learning programming. Not <specific language> programming.

And thirdly, it just doesn't matter that much. You should be learning programming. Not <specific language> programming.

That is precisely why it matters so much. There's a general misconception that somehow, programming languages are fundamentally equal; that there's nothing specific a programming language brings to the table. I think that's false.

VB.NET is a relatively shitty language, and will make many essential programming concepts more opaque than something very clean and straightforward and transparent like Python. (Also, on a somewhat unrelated note: I'd say that on average, the VB.NET jobs are a lot less interesting than the Python ones.)

Programming concepts matter, but languages don't.

You can do closures in any language under the sun. They might not be called closures, and you might have to type more characters in some languages than others, but they're still closures.

My personal stance is that all languages are pretty much equal. The only real difference that matters is syntax and that's largely a matter of taste. Don't get me wrong, some languages are sane, some are insane, some are ugly, some are beautiful, but they all do the same thing - function as an intermediary language between us and a CPU.

There's so much snobbery around language choice, and so much fashion following which I think is a shame. Also identifying oneself as a "<language> programmer", rather than "a programmer" is sad.

Practically though, you get down to libraries, probability of creating bugs/typos, speed of runtime, 'community' etc if you care about those.

I went to a school where OO was taught with Smalltalk (late 1990's). The pressure had been on the school for a few years to switch to Java, because that was the language of the future, and Smalltalk wasn't used in the industry anyway, and why were they sticking with such an old-fashioned language, and were the teachers too stupid to learn anything new.

So in the end they caved, and I was in the first class that was taught the Java curriculum. The teachers had spend the larger part of their summer at Java courses and writing a syllabus. The result was a bunch of people who barely knew the language they were teaching, causing most of the time in class to be lost to mundane details like working with the JDK and API issues. (I remember asking how to execute an external program and nobody being able to tell me).

YMMV etc., but my advice: please let the teacher decide for himself what he feels most comfortable teaching and focus on programming fundamentals rather than complain about not being able to use a tool that is hip and cool in some circles. (read the 'the scene will kill you' article that was on here a few days ago, it holds for not only 'the startup scene' but also for pretty much all niche programming scenes, forum scenes like slashdot, reddit, HN; actually it holds for pretty much every scene in the world).

It might also depend on how well he knows VB.net... learning that from someone who knows it well would be better than learning python from someone who's just picked it up to teach a class...

You and the others should just get together and learn Python. No need to have a dependency on your HS class.

Exactly. It's not like you can only learn one language in your life, learning them both will give you a different outlook.

To the OP, if you want a career in coding, get used to learning.

This year I've got node.js, rails 3, html 5, mongo db down pat, all in my own time. Its a fair bet that 90% of HN readers have done the same amount and way more.

Languages and frameworks are not important. Communication, problem solving and productivity skills are important.

Plus, learning more stuff = more fun.

http://www.stanford.edu/~pgbovine/python-teaching.htm won me over, and I now use Python exclusively in my introductory programming class. I find we cover about 3 months more material than when we did C++.

But barrydahlberg has a valid point - VB.Net is a decent language for a first course. Originally we had an alternative first programming course that used VB.Net. A lot of kids liked it better just because it was so easy to make a graphical program. We used to get a lot of kids interested in programming just by having them play with the colors of their VB.Net programs.

I would be making the same fuss in your position, however your teacher might not feel confident teaching a language he doesn't know, despite all the good talking points raised here. If he sticks with VB, I would ask him to spend some time later in the course making students aware that there are other languages, styles and platforms. Offer to help - write him a couple of pages on it, or pick a simple program from his course and translate it into Python/Ruby/C/Scheme/etc for him. Good luck.

Edit: To the person who disagrees with my advice, could you please let me know which part and why.

MIT teaches it as its intro now...


and Norvig uses it...


I mean what more endorsement is needed? How about something really eloquent...


(tl;dr: VB.NET can be every bit as expressive as Python. See my translation of Norvig)

Here's a line-by-line translation of Norvig's code into VB.NET. Exactly the same number of lines, unless you count the block terminators like `End Function` and `End If`.


The translation was fairly straightforward; I'm not a regular VB.NET programmer but I cut and paste Norvig's code into Visual Studio and did some pretty trivial rewrites -- 'def train(features)' -> 'Function train(features)' -- and that got me most of the way there.

I translated idiomatic python (list comprehensions) into idiomatic .net (linq expressions) but the translated code is almost identical in structure and number of code points.

Don't worry about it. You may hate vb.net, you hopefully won't care all that much. Either way, if your teacher wants to teach it, there's a reason (probably he's familiar with it and not with python, or he's on the MS payroll). It doesn't matter to you.

You sound like you want to learn about programming. "Programming" is a different discipline than "programming in vb.net" or "programming in python" or "programming in lisp". Learning about programming is a multi-step process, in which you first learn to define a problem in a sensible way and create a set of instructions for solving it, then write it in a language a computer understands, and then learn how to figure out any one of a million other ways to write it for a computer to understand. The first and last steps are the most important and can take years, the middle one usually takes a semester or two at the most.

Let your teacher walk you and the rest of the class through the middle one with vb.net, then go home with your smarty-pants friends and start slogging away at the other two steps. Every time you get a programming assignment, do it in vb.net. Then do it in python. Then figure out what they have in common and where they are different. Explain it to your friends, and listen to their explanations. Then do it again in all the other languages you can find.

As most of them here are suggesting... learning "programming" should be the real motive. Any language your teacher is excited about should be just fine. In fact I would suggest that even things like Scratch(http://scratch.mit.edu) can be an awesome step towards learning programming without being bogged down by syntax. You can even write Android apps using http://appinventor.googlelabs.com/about/

Ultimately you will have to learn syntax though but it won't be a big deal. If you want to know what the current "fashion" is, you can check out http://www.tiobe.com/index.php/content/paperinfo/tpci/index.... In that list u can see python cross vb...

but when it comes to the big picture and long term, all that matters is if you can pick up a new language in a few days.

Ok, here we go. I'm ready to eat downvotes for this:

What a bunch of bias and misconceptions in the comments. I can't believe all of these uneducated rants, like gruseom's are getting so many upvotes.

1. The teacher knows VB.NET.

The main reason why the teacher might want to stick with VB.NET is because he knows it. He probably doesn't know a lick about Python at all. He's going to have a hell of a time answering questions about a language he doesn't know and isn't prepared to teach.

2. VB.NET != VB.

VB was syntax-massacred garbage. VB.NET is a pretty solid object-oriented language with a completely different but similarly English-like syntax. It's like damning Windows 7 for crap we haven't seen since Windows 9x.

I personally prefer C#, but people have written pretty basic VB.NET->C# parsers. VB.NET code pretty much cleanly correlates to C# structure and compiles to identical MSIL bytecode.

3. VB.NET teaches clean OO programming. Again, it's not the rat's nest than VB was at all. If you think C# is good OOP, then VB.NET is good OOP.

4. VB.NET is, in my opinion, much more approachable and useful to the average person. It's more "englishy" and most people run Windows PCs. People can very easily write native applications for their environment. They can in Python, with GUI toolkits, but its not as integrated or easy.

42. Ironically, I use Python and now avoid VB.NET work like the plague, but it's a solid option if you want to go that route. What's good for you and I ain't good for everyone. And PLEASE make sure you know what you're talking about before you click add comment on that masterful rant you just typed out.

You want a Python class? Suggest it to your school or teacher for next year. That will give them time to evaluate, and more importantly, prepare for the quest.

I think you make a great point there about the teacher already knowing VB.NET and not knowing Python. It may be the difference between being able to teach the concepts well and show code to match and struggling with translating the concepts to "working" code.

You won't like the answer but don't convince, VB.NET is much easier to learn your younger crowd, .NET has more job opportunities and switching to F#, C# from VB.NET is much easier.

VB (5.5, not .NET) was my first language. I took it in high school as well, when I was 16 (4 years ago) Contrary to Dijkstra's claims, it won't kill your brain or make it impossible to learn any other language.

And honestly? VB is great for beginners. Button.OnClick? That's dead simple to use. Even non-programmers will pick it up. It let's your teacher focus on the fundamentals; "what is an if statement?" or on a simpler level, what is a variable and how do you use them?" and so on.

Keep in mind: this is a high school class. You and your friends may care about it, but the other 20 people in the class probably don't. And you can't realistically expect your teacher to change the syllabus mid-year for you.

There are quite a few things you need to learn to be able to program well. One of the easy ones is syntax, which is what you have to learn to go from one language to another, in addition to the names of variables/functions.

What is much harder to learn, and is largely language independent is: 1) Problem solving - the ability to break problems down into simple task that then can be trivially solved. 2) Data structures - programs are unless unless they have data to work with. Knowing how to best represent it is vital, do you use an array, linked list, tree etc. 3) Algorithms - known ways of operating on data to produce some out come. Everything from using a loop to add numbers, to sorting lists, or adding a node to a red-black tree. 4) Design Patterns - know ways to structure code, in a tried and tested fashion. 5) Architecture and Interface design - how to structure your project as a whole (what goes where) and how to set how one portion interacts with all the others.

Along with many other things. Point being the first language you learn matters little, if you learn to program that cross any language barrier. I have not touched the first language I learned for almost a year, but have learned 2 others in that time.

Having said all that, I am most at home in Python because there I know many of the language specific features.

What's the course's angle? If it's an intro course like it sounds, you're probably going to have a hard time. Like it or not, an intro course is for teaching basics that are shared across all languages, with an added goal of inspiring students to want to learn more.

My high school programming course started with "Karel the Robot." (http://karel.sourceforge.net/). It's not even a "real" programming language, but it worked quite well to teach the basics of state, control flow, functions, etc. My "Aha!" moment was shortly after that when I pointed and clicked my way to a not-horrible PacMan game in VB.NET.

Then I was sold. I'd made something fun that I could put on a floppy and show off to my friends; All without knowing the first thing about pixels, graphics contexts, layouts, or (heaven forbid) html and css. I just had a timer, some images, and a big switch statement for keyboard input.

If your teacher is trying to ignite his students' interest in the same way mine was, you're going to need to convince him that accomplishing the same thing is as easily done in python. From what I've seen it's not -- UI libraries are hard. (His choice of VB.NET almost certainly implies there will be some simple WinForms drag and drop UI work happening)

I guess what I'm trying to say is that while python is a great language, it may not be the best tool for this job. I can't tell without seeing his lesson plan, but based on my experience learning to program, python wouldn't have left me feeling as empowered (at the start).

Intro to programming isn't about languages, it's about showing people that they can make the computer do their bidding, so that they can work less and/or have more fun.

I came here to see a list of why Python is a good choice and instead the answers surprised me in a good way. Indeed it's not about the language - it's about programming. And although Python is a great language you should keep your options open and learn other tools as well. After you LPTHW - on your own - you'll have a perspective on both languages. You are not a "hammer carpenter".

I don't think Python is a good idea for a high-school class (where a big bunch of the people don't really care about programming anyways). Hell anyone that already knows a bit of programming will be completely thrown off his chair by the whitespace constraints, while new ones will probably have an awful time trying to debug anything.

Python is a great language and it certainly is 'easy' in contrast to a bunch of other languages, BUT a high-school class is to learn to program in general, and Python doesn't strike me as a good language to learn to do so from scratch.

Ruby is a bit better, but I'd argue the same thing. VB.net really is a better suited language to learn to program, and although I don't really like it myself, I agree with everyone saying it's a great language to start with. You can always learn Python on your own time, and I'd even argue that with what you'll cover in a high-school class, it really doesn't even matter since you'll be ahead of the whole class (not the people, the curricula) in a month if you learn Python on your own.

I'd argue that Ruby is a bit harder to learn, specially for someone with no background in programming.

While Python tends towards clarity and predictability, Ruby tends more toward conciseness and power. That means some things are not as straightforward to figure out.

Ruby's syntax is also far more opaque at first glance than Python's is. Ruby in my experience isn't any more concise than Python, and often falls into the same trap as Perl of having "more than one way to do it"

I never said otherwise. I meant both are 'easy' languages, and though I'd fathom beginners being more comfortable with Ruby (because it has a more forgiving syntax IMO) I still think they're not languages you should begin programming with. We might disagree on which language from the bad languages to start with is better, but that doesn't mean they're any good to learn to program anyways!

I started with C when I was 12 years old, and I'm sure that has made me a much better programmer than I could have been had I started with something easier like Php. In that aspect I think VB.net (which is NOT the same as VB6) is a good language for high-school kids to start with and learn the ropes.

and I started with Java at 11. What you learn on is irrelevant as long as the basic concepts are taught well. Neither Python nor Ruby are ideal for teaching pointers, but for explaining assignment, boolean logic, basic control flow, etc the only better candidate I can think of is Scheme, and VB is far down the list of replacements.

I'm also a bit confused about your statement about Ruby having a more forgiving syntax and taking that in a positive light. For an Intro to Programming course rigid syntax is ideal as it helps to avoid atrocities against whitespace and other crimes of legibility.

That's just not correct. What language you learn on does have an influence on what languages come easier to you as a second or third language. Also some languages make programming concepts and paradigms easier to learn than others. Any way, giving an introductory high-school class in Python, Ruby, or Lisp is IMO counter productive because of the whitespace requirement, the flexibility in syntax, and the amount of parenthesis on their respective languages.

I said two things:

1) I think Python is not a good language for high school because of it's syntax which is not directly translatable to the bulk of other programming languages (and I say the same thing about Lisp now that I'm on it). At this point I made a comment that I would find Ruby a little tiny bit better (but not suitable either) because of it's forgiving syntax, not because of the flexibility aspect of it's syntax (as omitting parenthesis and comas would probably lead to confusion). Python is not forgiving in it's whitespace requirements, while Ruby can make use of blocks and curly brackets in a way that translates better to other programming languages.

2) That I learned C at an early age and it had a big impact in the way I developed as a programmer, to which you responded that you learned Java a year earlier than I did C without making a point out of it. What is this a competition now to see who learned to program earlier?

What language you learned on makes no difference 5 years later, but it does have a big impact on the first, maybe second year. As such, it should be a language where the knowledge and workflow is easily transfered to other languages. VB.net (which I actually dislike anyways) is a pretty straightforward language from which you can move to a plethora of other languages easily. Neither Ruby or Python are suitable for this.

I think there are a couple of idioms which are a bit more concise in ruby ( <something> unless <condition>, or some of the stuff with blocks), but it's a matter of personal taste, I think. I do agree on the "opaqueness", Python does tend more towards "runnable pseudocode" :)

The Python in Education “special interest group” has a mailing list and a overview webpage http://www.python.org/community/sigs/current/edu-sig/ which among other things includes links to books and resources targeting beginners.

* VB.Net + Pros: Concise, MVC, easy to teach, useful macro maker. - Cons: Costly microsoft royalties, single platform, imperative, single-framework, all-around slow.

* Python + Pros: Concise, extensible, object oriented, package/class/method hierarchy, multi-platform, lots of frame-works, lots of scientific contexts, HUGE community (at this point really), scripted (quick to see changes) - Cons: Odd syntax (no more odd than VB really), scripted (teaching compilation step may be a requirement), requires C for high-performance fragments, v2 vs v3 package hangover.

I struggled to find real faults with Python, but I also struggled to find real positives with VB.Net.

From a pure $$$ play, you might be able to convince the administration to dump VB and go Python. Admitted, MS educational discounts are incredible.

It's school. Use what they tell you to use. When you get into the real world at a company, you will get told to do tons of stupid crap you wont want to do. And you can learn to do it, or find a different job. If you want to be able to do whatever you want, become good enough at something to be your own boss (or be good enough to have a great job at a great company). And for you to do that, learning how to program from your teacher is not going to help. Learn python on your own and learn VB.net from your teacher. If you don't have the motivation to do that, you'll be stuck in bad jobs doing shit you don't want to do anyway, and clearly school has yet to teach you that vital lesson.

Oh to be a teenager again.

Disclaimer: I don't know VB.NET, I barely know VBScript,

I do think that Python would make an excellent intro language, given that there is relatively little syntactic cruft hiding the bones. (To be sure, it was not my first language, so this is speculation.) PythonWin is an excellent environment. wxPython makes it straightforward to put together GUIs if that's what you want to do. You can write to the Google App Engine and deploy to the web for $0.00.

The point that others raise, that it would be bad if the teacher is also learning an unfamiliar language, is a valid one. I don't think you want your instructor to be stuck fighting the language.

Have you considered as an alternative doing LPTHW on the side with your friends?

From the little I know about VB.net, it's much more approachable for people not cut out to program (ie non-engineer types) then any other mainstream language on the back-end.

Don't forget - the high school education system is set up so you learn what you have to in order to tick a box and pass your exams, the fact that something might be relevant/useful to your career is an accident.

From that perspective, the teacher probably just wants to teach lowest-common denominator easy programming to tick the box.

I agree with Ryanto - if you want to learn Python (or any other language) it's better to do it in your own time.

VB isn't easy like basic was easy. It's not hard mind you, it's just not VB. VB.net is trying to be a basicish language that's good enough for enterprise development.

Python is used at many top colleges as the into course (Georgia Tech and MIT are ones I know off the top of my head) and additionally, Zed Shaw has written an excellent first text on the language downloadable for free (http://learnpythonthehardway.org/index)

Additionally: Nothing is stopping you from ALSO learning python at the same time.

1. Python is Free (Free as in Freedom vs. free as in beer debate) 2. Python teaches you the importance of whitespace 3. Python forces clarity in your coding 4. Python is blackboard-compatible, it's a great pseudo-language. 5. Python has a great REPL 6. Python is great for both scripting and OOP 7. Real Hackers use it ;-)

Good luck! Just curious: do you guys have whiteboards or blackboards in class these days? Somehow teaching programming on a blackboard seems more appropriate & terminal-like to me.

Well, both have enough documentation that you can learn them without the need for a formal curriculum, and both are certainly worth learning - the .net VM is among the best of its kinds. Since a lot of VB.net documentation is in the form of expensive books, while Python documentation can be had for free, convince your teacher to use VB.net, and use your school as a resource to pay for your books.

The answer is "none of the above" for a high school CS class. The reason is that the computer science advanced placement exam is in Java. Until that changes (and until college-level CS stops using Java), you should be learning Java.

One thing that you guys are forgetting is that Python is completely portable while VB.net requires Mono at the least on non-Windows systems. In a learning environment I think this is more than trivial.

It depends if the learning environment is already all Windows or not. I don't hold much hope for a high school being anything but.

The other thing people are forgetting is that starting with VB.Net gives a nice predictable IDE which any student can replicate at home with a simple installer. Anything like python comes with so many options and opinions that it can actually be a distraction from learning to program.

Ah, but there's no guarantee that the students have Windows machines at home. I agree that replicating a development environment in one's own system is important -- which is why it's important to take into account households (like mine) where all the computers run OS X.

Windows is not as dominant as it once was.

Python is an awesome language, but in a HS class you probably won't get past simple scripting paradigms. If you guys were already CS students with solid programming experience as well as the theory behind it, or if you were just science students wanting to hack around, then python would be a great choice.

However, I think it would be more beneficial if you guys were to learn (sorry) Java and OO knowledge so that you could take the AP test and perhaps save time and money if you decide to move on to college.

Either way, VB.NET would be at the bottom of my list. C# would be great, but the professor might find the C-style coding too overwhelming for the students. And F#, being functional, is probably out of the question for a number of reasons.

VB.Net is far closer to C# or Java than VB6. It's like a real grown up OO language now.

Definitely. .NET is .NET and especially being imperative, VB is mostly just syntactic differences over C#. But neither of those languages are tested on the AP exam ;)

What is an AP exam? I'm from New Zealand so I'm guessing it's something we don't have.

Ah, thanks for the link. We don't have anything by that name but I did something equivalent that was specific to my university anyway.

I think teacher should stick with VB.NET. Why? Because it enables students who like experimenting to get results quickly and this is extremely important if you want to get children enthusiastic about anything. Yes, python is free and open, and I bet many of the students who will become interested in programming will switch away from VB.NET anyway, but right now at this moment the ability to put a button on form with a mouse, doubleclick the button and write in a simple line to display messagebox of swearwords on click, is the most important factor of them all. And it looks like real, professional application window, I mean how cool is that?

You could always write a vb.net interpreter in python :-)

Show him the google trends for "vb.net".


Tell your teacher if he teaches Python, students will remember him, whereas a VB.net teacher is forgettable.

Mmmm... overall I'd say don't try to talk him/her 'round. Don't get me wrong... I love Python and am ambivalent towards vb.NET. In defense of VB, it's good for teaching in the sense that students feel like they're accomplishing something... that they're actually building something. They can rattle out a gui and integrate it with the Windows API (for something like a Paint app) easily. Which is cool for them.

Having said that, I think Python is better for students (vb is so unlike other languages). However you're likely to piss your teacher off if you come off all 'hurr u r so stupit, you should teach Python' to him. Easy to piss ppl off that way.

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

I've always found this quote (apparently originally from 1975) somewhat strange, having grown up in 1980s, when BASIC was pretty close to the only game in town for a decade for home users. I still ended up seeing a lot more skilled programmers get started by early tinkering rather than through dutifully attending a college course in the formal derivation and verification of software constructs after having carefully kept themselves unsullied of writing programs without being absolutely sure what they are doing.

There may be a point in the underlying sentiment, but the thing as a whole just rings false in the post-microcomputer age. The big difference might be that the people Dijkstra was thinking of probably had had BASIC taught to them as university students, instead of tinkering with the BASIC repl of the 8-bit microcomputer they got their hands on as 9-year olds.

1. VB.net ain't your daddy's basic

2. I respect Dijkstra, but I think he was wrong on this

It says a lot about our knowledge about teaching and learning programming that pithy quotes from 35 years ago are still regarded by many as being relevant.

I mean, has anyone actually studied the academic outcomes of programmers who started on BASIC or VB, versus those who started on other languages? Has anyone determined if programmers who start out in VB make more errors than programmers who started out in say, assembler, or C, or Python, to any statistically significant degree?

I taught myself programming in QBASIC in third grade (gasp, 20 years ago) and my favorite languages now are ocaml and haskell. Doing ruby, python, java, and c#/vb.net at work, all production code. It's the concepts, not the language. ;)

Undownvoted for being somewhat relevant. We are really talking about different languages though.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact