Coding languages?

Small nit to pick:

HTML is NOT a programming language. It’s a document markup syntax. If you talk to someone who knows (like someone who might hire you) and list HTML as a programming language they will chuckle and look at you with a jaundiced eye :wink:

Not to start a monster hijack, but HTML is a programming language, IMO. It’s one of a different paradigm, which places the emphasis of program writing on telling the computer what to do, and leaving the details of how to do it to the computer. Prolog and SQL also fall into this category.

HTML and SQL are both Turing-incomplete (meaning that there are programs you can write in C that you can’t translate into either of those languages), and they are interpreted rather than compiled, but there are traditional programming languages with either of those characteristics: Perl is interpreted, and many educational or specialized languages are not Turing-complete.

You can play semantic games that anything which instructs the behavior of a computer is a programming language, but I think it’s useful to note that HTML is regarded as a programming language predominantly among non-programmers (i.e. people who don’t know any (other) programming languages). Anyone who knows C/C++, Java, Fortran, Basic, etc. can easily distinguish between the two genre.

HTML is a markup language, by definition. An HTML document is data, not code. There have already been holy wars fought on this point on Usenet and elsewhere and probably in GD as we speak, but I think friedo was giving good advice to Aslan2; if you list HTML among your programming languages on your resume, you’ll do yourself more harm than good. Regardless of your opinion of HTML’s place in the universe, I know this to be fact, at least within the several companies where I influence hiring.

Point well taken.

This will be a matter of opinion, so I’ll move this thread to IMHO.

moderator GQ

Java - Create programs that can usually be run on most computer systems. Mostly used for things on web pages, and for anything else it is pretty slow.
Perl - Mostly used to create dynamic web pages. Deals with text manipulations and pattern recognition.
Visual Basic - Quickly create windows programs, but the syntax is bad.
C - Very fast, small code. Has very low level access to the computer and it’s easy to make the computer crash if you don’t know what you’re doing. Also, it’s much harder to do more complicated stuff, like windows programming, because you have to write a lot of extra code that other languages will take care of for you.
Assembly - even more basic than C, it deals with the the processor directly.
C++ - Same thing as C, but extended to include some object-oriented stuff and easier windows programming, but this makes the syntax much harder.
C#, Visual Basic.NET, etc - Microsoft’s new languages that are a lot like Java. Nice syntax and it’s easy to write Windows programs, but most computers don’t have this installed on them.

      • Two notes:
  • Java is free: the (free) command-line Java SDK is rather a pain to use, but you can download (also free) GUI front-ends like JCreator or Netbeans.
  • MS Quickbasic is very crude, basically DOS programming. Books that teach “basic” usually still mean MS Quickbasic, though. MS may not distribute it anymore, but it is still out there illegally if you know where to look… Look for version 4.5, 7.1 is more of a pain to set up and both 4.5 and 7.1 can compile to regular executables. (7.1 has advanced features like variable watches and break points, etc)

For java, check out - a free IDE, or Sun’s forte.

I have learned basic, VB, fortran, C, C++, Java, and now C#. If you want to learn how to write applications, I would learn Java. It is a “modern” language that is relatively easy to learn, and you can get started for no money down. Go to sun for the sdk, and eclipse for the developlment environment. C# is extremely similary, but not free.

Then I would learn C++. (OO is not slow; particular algorithms are slow. Because of differences in libraries, C++ can be faster than C.) Unless you are writing device drivers and such, I would not bother with C, it just teaches you how to write poor C++. IMHO, VB is not worth learning. VB.NET is not backwards compatible, and if you are going to learn a .NET language, pick C# as it is a little more flexible, and no harder to learn.

If you don’t want to write applications, distributed or otherwise, ignore me, because I am out looking for clues.

In one way it’s wrong to speak of `assembly langauge’: Each chip has its own native language, the code it executes directly (more or less… see below) without needing any kind of interpreter, referred to as its assembly language. Someone above mentioned VAX-11 assembly (a language I think is the most beautiful of the CISC assembly languages), referring to the language VAX-11 minicomputers accept. Perhaps a more relevant language today would be Intel x86 assembly, that being the language the series of Intel chips from the 8086 on through the Pentium 4 accept.

Interestingly, assembly isn’t always a direct link to the CPU’s core. The Pentium 4, to pick a common example, has a RISC core but a CISC instruction set: The chip works by translating the opcodes it receives into strings of simpler opcodes the core itself can execute. This allows the most modern of Intel’s x86 line to execute binaries assembled for the earliest x86 chips, designed in the early 1980s.

Also, assembly is different from writing in pure binary: Assemblers commonly provide features that hide some of the ugliness needed to feed binary to the chip behind a human-readable interface. Labels, named addresses in the code control can be transferred to, are a common example of this. But the most interesting example of this I know of is the MIPS assembler: The MIPS chips are a class of very advanced RISC CPUs that make use of multipiplining and delayed branches and other things that would hopelessly confuse an assembly hacker if he had to deal with them. So the assembler that targets MIPS chips provides a kind of virtual machine: Programs written in MIPS assembly actually target an idealized version of the actual CPU that doesn’t have the most confusing features but, instead, is conducive to allowing a programmer to write readable code.

DaveW: That was a strange thread. :slight_smile: I still have the distributions you put out. They run fine in dosemu.

BTW, Dave, Ruby is the language that allowed me to grok OO. I think it’s a lot cleaner than Java and generally easier for the newbie to grasp. For one thing, it didn’t fall into the trap of trying to reimplement C.

Ruby’s homepage

ultrafilter: HTML is not a programming language. HTML is a markup language, a set of codes designed to make a document look good. If you don’t have control flow, you don’t have a language. End of story. After all, you don’t see people running around claiming LaTeX is a programming language.

(Even Prolog has control flow.)

Maybe not LaTeX, but TeX sure is. :smiley:

It was never dead. So far Delphi is up to version 7, and Kylix (the Linux port of Delphi and C++Builder) is up to version 3.

Derleth, my BEZ page is still up, and I found one the original thread on one of the forum-archiving web sites, but lost the URL due to a disk crash (I did send you an email on it, though).

And to this programmer, Ruby looks like a nightmare for newbies, but mostly because it looks like a nightmare to me. One of the reasons I really got to liking C and PASCAL over old BASIC was the ability to create variable names without funky symbols in them to denote the type or scope of the variables. I’m well aware that C pointers require special operators to use 'em, but that’s vastly different from the requirements of Ruby or Perl.

I learned enough Perl to be able to barely maintain someone else’s code at work, but the “line noise” quality of it means it takes me a good amount of time - with a book - to figure out just what the heck a particular line of code means. Heck, I can’t even format a decent grep. In other words, I’m not going to be learning enough to code in Perl from scratch anytime soon.

The definition of “high-level language” I’ve always used talks about languages which are easier for humans to read than for machines to read. Of course, that definition involves a judgement call, but in my opinion, Java is the highest-level language I’ve ever used. And I like it that way. I don’t plan on going to COBOL, but I’m not planning on going in the other direction, either. (Why do you think I added labels to BEZ? :slight_smile: )

But thanks for the pointer to Ruby, anyway.

I disagree, and as far as I’m concerned, anything that tells the computer what to do is a programming language. In the future, the “what not how” paradigm will become much more dominant.

And you might argue that HTML does have control flow, just of a very linear sort. :slight_smile:

Well, no offense, ultrafilter, but you are wrong. To put it in the simplest terms, a program is a verb, not a noun - it describes actions and courses of action, not objects and features of objects. Even in OOP, the properties of an object are mostly enumerations of the actions that you can perform with or on that object. As noted, HTML is a document description language. It describes an object, but not how to generate that object or what to do with that object - such things are deliberately left undefined, to be implemented by programs that can understand the document description. It is cerainly possible for a document description language to be a programming language - that’s what postscript is. However, HTML is not.

To put it in more technical terms, from the CPU’s point of view, what’s important isn’t an abstract discussion about the features of a language. From the CPU’s point of view, the only things that are important are memory-resident processes. A programming language is, by definition, some syntax that can be used to generate memory resident processes, either by compiling the syntax into object code and then loading the binary code, or by instructing an interpreter in how to load a process directly. C, Basic, Perl, and even (shudder) Ada do precisely this. HTML does not because it is a document description language, and not a programming language.

Please don’t think of this as a flame, unless it’s against the sorry state of basic CS education in most places.

Incidentally, I, personally, wouldn’t recommend Python as an introductory language. As much as I agree that proper whitespace==good, ‘fascistic’ enforcement of proper whitespace==bad, because it can cause bugs related to a single space character. This is not the way to start learning to program, because you will inevitably end up just spending too much time debugging blank spaces. If you’ve got a *nix box, the best way to start is probably with shell scripting. The control structures are very clear, very similar to most lower-level languages, and it’s tough to shoot yourself in the foot - at worst, your script doesn’t run properly, but it won’t hose memory, and it’s tough to hose your disk. Neither can be said of a pointer screwup with C, for instance.

Under this definition, a mouse click or a keystroke is a programming language.

It’s a very difficult phrase to define, none of my texts offer one, and I haven’t found a definition online that I like yet. I think that there’s a vast grey area of what should be considered a porgramming language. Should shell scripts? Should Java Beans, written to be used in a Beanbox? Should an XML definition that connects Bean-like components be counted? However, I don’t think that html is in the grey area. HTML is missing control flow, and (barring extentions) any way to process data. There are hooks to pass data on to a script, but nothing in standard HTML.

And of course, the arbiter says it’s not (though it’s a close fight).


Another way to approach this question is to ask, what are your personal goals?

Commentary above notwithstanding, it is important to not only determine what the program’s goals are but to also ask what the programmer’s goals are.

So, Aslan2, do you want to:

  1. Have fun.
  2. Learn good coding practices.
  3. Show off your esoteric knowledge.
  4. Make a ton of money.
  5. Start your own company.
  6. Or something else entirely?

Please note that these options are not exclusive; however, the answer to your first question will vary considerably based on your own personal goals.

3, but also 1 because I’d like to experiment a bit too.

Personally, I’m in this game for the money.

But if you just want to have some fun and maybe show off a little bit, I’d start off with Java and/or Perl and then seque into C and/or C++.

However, if you want to make some serious money, I would avoid all of the above and focus on more esoteric languages/skills. The more people that know how to use a language, the lower the median price per hour those programmers earn. And lots of people know how to do Java, Perl, C, and C++.

For example: Currently I am learning how to write Codewarrior applications for the Palm. Yes, I had to re-learn C to do this, but the real challenge is in learning the Palm architecture – and that’s worth a fortune.

Dave: I’d disagree with you about the `line noise’ thing: When reading Perl, for example, I know right away that $a is a scalar and @a is an array and %a is a hash. It’s a constant visual reminder, so I don’t have to store so much state in my head when I go back to maintain something I wrote.

On the same token, Perl has a lot of nice features that are open to massive abuse. But so does C, with its love of pointers and roll-your-own types, and, well, any language that allows any kind of advanced programming.

By preventing people from doing stupid things, you also prevent them from doing interesting things. Which is why I generally hate BASIC: It’s too limited to be used as anything but what its designers intended it to be used for. Contrasted with C, the `portable assembly language’ everything is built on, BASIC begins to look like, well, BEZ. I’d rather start someone off on a language that they will move beyond, but won’t outgrow. Do you see the difference there?

Some Guy: I get your points about the whitespace rules, but, IIRC, both the Python shell and Emacs will add spaces in correctly. I actually don’t know how fascistic Python is about exactly following whitespace rules (I know it’s not like FORTRAN’s insistence about sacred columns).

Shell is a good language to learn, but shell != DOS batch. Shell is closer to Perl (in fact, one of Perl’s main uses is as a `next-step’ shell language), whereas batch is a retarded version of BASIC (well, more retarded than BASIC usually is). I like the idea of starting someone out on shell, but that entails downloading at least Cygwin (assuming the OP is running an MS box) and getting the OP familiar with a CLI. On the plus side, once you’re into the CLI, shell programming is a natural extension of what you’re already doing and you can type programs directly into the shell prompt. (If the OP would go the optimal route and install a Linux distro, that would be somewhat different. :)) The Python shell, at least, provides a colorful text mode, as does emacs.

Aslan: It’s good that you want to learn this stuff. You’ll be a part of a group that can hold long, involved discussions about things most people aren’t even aware of. Merely mentioning your latest work will kill conversations and drive boring people away in droves. :smiley:

The best way to do this stuff is to do it for yourself: Look at the websites (I’ll give you a list of a few later) and see what about the languages interests you. Most languages come with some kind of a tutorial, a brief guided tour that shows off the basic functionality of the language and provides a starting point for more advanced studies. Seeing example code is helpful once you know the basics, too. So look around online and see what you are most interested in.

In no particular order:
[li], the main source for the Perl language. – Information about everything from setting up your first interpreter to writing advanced and esoteric programs.[/li][li], the site for the Python language – Kinda like, but with Python. :)[/li][li] – The English-language gateway to the Ruby programming language. Ruby was developed by a Japanese programmer, so the main part of the site is in Japanese. But good English translations of all the pertinent info exist, so don’t worry.[/li][li]Cygwin, the Windows GNU/UNIX environment – Cygwin is a way to use important, useful things like the BASH shell without having to install a new OS. As a bonus, gcc, the GNU Compiler Collection, is part of the package, which means you get a very good C compiler for free. And if you move on to C, which I think you will, eventually, gcc is a good tool.[/li][li]GNU emacs, the One True Editor – Emacs is a great, immensely useful editor that includes (and is largely written in) its own programming language: elisp, or emacs Lisp. Lisp means `List Processsing’, and it is what’s known as a functional language. Lisp is a rather abstract, obscure language, but it is stunningly beautiful in its simplicity and regularity (it’s entirely composed of functions and lists). Lisp is worth learning for the rush of insight you get when you finally get it. :)[/li][/ul]Don’t feel obligated to download everything, but I think you’d do well to at least glance through those sites.

Would you agree, then, that under your definition, Microsoft Word is a programming language? And if not, then what differentiates Word from HTML?