

Ask HN: Help me convince a teacher we should learn Python (vs VB.net) - newsisan

For a high school class.<p>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.
======
gruseom
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.

~~~
dansingerman
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?

~~~
roel_v
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)

~~~
dansingerman
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.

------
barrydahlberg
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.

~~~
famousactress
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..

~~~
barrydahlberg
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.

~~~
famousactress
_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.

~~~
barrydahlberg
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.

------
enry_straker
Why?

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.

~~~
DanielStraight
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.

------
roel_v
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).

------
whatusername
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...

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

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

~~~
jdee
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.

------
jpwagner
MIT teaches it as its intro now...

<http://news.ycombinator.com/item?id=602307>

and Norvig uses it...

<http://www.norvig.com/python-lisp.html>

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

<http://norvig.com/spell-correct.html>

~~~
stevecooperorg
(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`.

[https://github.com/stevecooperorg/Norvig-Spelling-
Corrector-...](https://github.com/stevecooperorg/Norvig-Spelling-Corrector-in-
VB.NET/blob/master/NorvigSpellChecker.vb)

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.

------
krschmidt
<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.

------
SandB0x
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.

------
runjake
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.

~~~
brunomlopes
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.

------
leif
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.

------
SudarshanP
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....](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)
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.

------
stackthat
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.

------
Zev
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.

------
kogir
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.

------
codefisher
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.

------
sp4rki
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.

~~~
brunomlopes
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.

~~~
nickbarnwell
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"

~~~
sp4rki
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.

~~~
nickbarnwell
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.

~~~
sp4rki
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.

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

------
jacobolus
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.

------
carucez
* 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.

------
julius_geezer
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?

------
nebusoft
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.

------
dotBen
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.

------
gte910h
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.

------
c1sc0
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.

------
andreyf
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.

------
jeffreymcmanus
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.

------
temugen
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.

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

~~~
temugen
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 ;)

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

~~~
barrydahlberg
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.

------
Locke1689
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.

~~~
barrydahlberg
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.

~~~
Locke1689
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.

------
kaitnieks
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?

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

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

<http://www.google.com/trends?q=vb.net>

------
chrismsnz
How about this?

<http://news.ycombinator.com/item?id=1885006>

:)

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

------
johnconroy
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.

------
tkahn6
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

~~~
cubicle67
1\. VB.net ain't your daddy's basic

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

~~~
ern
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?

