What programming language to learn and how?

Thanks guys for your insight!!! Berry HTML isn't a programming lan.? I haven't checked out the sticky yet but I will. The post above this one was very helpful so thanks. I think I know which languages I'm going to learn so it should be fun! I don't know what career I would do programming with I just know technology pathway. It should be helpfully anyways learning it. I'm going to learn java,C,python and then C++. Probably not in order but should be something like that!
 
1) It is very clear and well defined
Actually, there's a crap load of undefined behaviour in C that's incredibly easy to stumble upon, and beginners often will (and will often rely upon this behaviour because it "happens on their machine" and they don't realise what undefined really means.)

2) It does not 'hide' detail from the programmer - making the actual work involved in 'one line of code' really relate to one line of code (unlike heavily abstracted languages such as Java and Python - both of which definitely have their place, in my opinion after the individual has understood what goes on underneath and just wants to write programs faster, using libraries of built-in resources)
It doesn't hide much detail, but for some bizarre reason people always seem to assume this is a good thing! If you're starting out you generally *want* something at a high level of abstraction so you can broadly understand what's going on, without worrying about whether that chunk of memory over there was actually free-d up or not. It's akin to saying that before I wire up a simple circuit consisting of a bulb and battery, I should understand theories of wave particle duality, quantum tunnelling, internal resistance and so on.

3) It is a small language - I can't stress this enough, something which makes python and java so good (and therefore so bad in the case) is the sheer number of libraries, functions and different ways to do the same thing. This makes learning via cause and effect much more difficult
Yes, but when you actually come to build anything in it this means you add on a ton of libraries that aren't standard quite quickly, which, when you go beyond the simple 10 line programs, gets much more diverse much more quickly than learning something like Java.

4) Java, Python (and many other languages) are themselves written in C. Therefore once C is understood then it is MUCH easier to visualise how these other abstracted languages can implement their advanced constructs 'under the hood'. This is a skill which separates experienced programmers and opens significant doors in terms of career opportunities.
Sorry, but this is just plain wrong. What do you mean by other languages are "written in" C? That doesn't make any more sense than saying Spanish is written in Latin. I can only assume you mean what language the compiler is written in - for Python there's all manner of different compilers, only one of the major ones I believe is written in C. And the Java compiler isn't written in C either - at least not since the 90's.

Career opportunities are primarily opened by a broad and deep understanding of various technologies, and first hand experience in using those technologies. Yes, advanced programmers will generally understand how higher level languages are implemented, and at some stage it makes sense to understand this - but I wouldn't say that immediately separates beginners from advanced programmers, nor (in itself) opens up massive career opportunities either.


Generally speaking, in my mind there's also too much emphasis on learning one language, then another, then another - don't plan to do that, you'll end up dropping your first language too quickly. Just pick one, that will more than set you up for learning others as and when you choose. Contrary to popular belief, you're not going to "outgrow" something like Java in a year - I've been working with it near enough daily for the past 7-8 years now, and I'm *still* very much learning!
 
Last edited:
I would seriously debate the value of learning HTML, SQL or similar 'languages' for someone looking to try to program.
that rather depends on your reasons for wanting to program.

I would say that if you want to make web services, the HTML is pretty essential, if you want to do anything involving storing or retrieving data from any database then SQL is pretty important, if not essential also.

No, these are not programming languages, but I think it's fairly important to at least understand the fundamentals of each of these.

Thanks guys for your insight!!! Berry HTML isn't a programming lan.?

no, HTML is not a programming language, HTML stands for Hyper Text Markup Language.

it's based on the idea that printing presses used to use, when a paper sent their paper to press it'd all be hand written text.

so to instruct the print setter which printing blocks to attach to the press plate the writer would leave notes written on the manuscript that they set.

so the title would be marked as title, (and the printer would know to print this is 3" high bold letters, then the strap line would be written in a smaller text, then the article test would be written in standard size text and the byline written in smaller text at the bottom.

this same thing has been carried over to the way text is written on web pages.

anything marked inside the blocks that denote a title is written in the title bar at the top of the browser.
<title> your title here </title>

anything that you want to be bold you write in side <b> </b> tags, italics are marked <i> </i> etc...

HTML is a language that tells your browser how to display text, it's no more of a programming language than it is to put square brackets around a b on this forum [ b ] to mark text as bold [ / b ]


I'm going to learn java,C,python and then C++. Probably not in order but should be something like that!
That's quite a list...
First, good luck.

I have to agree with Berry though, there is no one language to learn, no one ring to rule them all kind of scenario.
yes, it is easier to start with one language rather than trying to learn 50 at once, but it doesn't really matter what that language is.

It's more important to understand what you're doing than how you're doing it.
the code used to make a loop is pretty similar in give or take most languages.

I
Actually, there's a crap load of undefined behaviour in C that's incredibly easy to stumble upon,
I read this more in the way that there is a well defined structure to programs, not that the function returns etc are well defined across different systems or architectures.

Personally I find C very easy to understand, because it have such a rigid way of writing code, there is very little room for any kind of flair. (C has quite strict formal grammar), so once you have an understanding it's relatively easy to go look at the source for any program and see what's going on. or at least be comfortable with what you're seeing.


It doesn't hide much detail, but for some bizarre reason people always seem to assume this is a good thing! If you're starting out you generally *want* something at a high level of abstraction so you can broadly understand what's going on, without worrying about whether that chunk of memory over there was actually free-d up or not. It's akin to saying that before I wire up a simple circuit consisting of a bulb and battery, I should understand theories of wave particle duality, quantum tunnelling, internal resistance and so on.
I'd say it's more like understanding that batteries store power, wires are conductive, and incandescent light bulbs are resistive. we're hardly talking intimate knowledge of the CPU and it's registers!

and the comparison is hardly fair in other ways.
putting a bit of wire from a battery to a light bulb and back is a simple circuit.
more like:
printf("hello world");
no special skills or in depth theory needed for a hello world program.

but other wise I agree, who cares what buffer you're writing to when you just want to print stuff to the screen, or who cares about input buffers and whether you've flushed them etc, who cares abut checking data input to make sure that it's of the correct anticipated size and type?

Arguably everyone *should* care about what's going on, and learning to not care is a bad habit, on the flip side, yes too much too soon is a bad thing.


Yes, but when you actually come to build anything in it this means you add on a ton of libraries that aren't standard quite quickly, which, when you go beyond the simple 10 line programs, gets much more diverse much more quickly than learning something like Java.
I'd like to see the program that goes beyond ten lines and suddenly needs a libraries that aren't standard, I think you're exaggerating there.

Any what do you mean by aren't standard? don't conform to standards, or are extensions to the original standard operators?
Are we talking standard keywords, or standard functions?

What do you class the BSD socket library in C as? writing code to create a network socket usign this library will result in code that compiles and works on Unix, Linux, BSD, and Mac OSX, on any architecture.
but it won't run on windows because that uses winsock instead of BSD sockets.

is the library standard? yes, it's very much standard.
is it portable. mostly yes, but clearly not entirely.


I'd put money on the same situation being true in Java, (that there are libraries that are system or architecture specific). it doesn't make the language bad or inflexible though! it doesn't even make the library bad!


From my point of view, I like using C because for me it's a one size fits all language. whether I'm writing software on my x86 PC, or my Arm Raspberry pi, or my MIPS based PVR box the code is mostly portable.

yes when you start writing software using network sockets Microsoft implementation of sockets differs from the rest of the world, but I can still write a server application on my x86 Linux machine, and port the code directly to my raspberry pi or PVR. (yes I need to recompile for the different architectures, but that's no more difficult than just typing make.
it's also easy to use for programming micro controllers, -though that's a non standard implementation of the language, but evn though it's non standard it's close enough to be useable.


The big question here though really is, how many people will write programs that need to be completely portable?
*MOST* people in the world do not.





Sorry, but this is just plain wrong. What do you mean by other languages are "written in" C? That doesn't make any more sense than saying Spanish is written in Latin. I can only assume you mean what language the compiler is written in - for Python there's all manner of different compilers, only one of the major ones I believe is written in C. And the Java compiler isn't written in C either - at least not since the 90's.
yes this makes about as much sense as saying original C was compiled using B so we should learn that, or assembler.



Generally speaking, in my mind there's also too much emphasis on learning one language, then another, then another - don't plan to do that, you'll end up dropping your first language too quickly. Just pick one, that will more than set you up for learning others as and when you choose. Contrary to popular belief, you're not going to "outgrow" something like Java in a year - I've been working with it near enough daily for the past 7-8 years now, and I'm *still* very much learning!

I sort of agree, and sort of disagree.

Yes, ANY language will be a good language, and you'll likely never outgrow any language that you start with, and there are likely careers in any language that you like to learn. anything from Visual basic to C, or Java, I bet there are still Fortran jobs around.


but I do think that it's very difficult to just start programming.
Certainly I'm sure that I started with something simple.

I think that anyone wanting to learn how to Program would do well learning something like scratch first, (which is a language specially developed to be easy to learn) the reason they would do well to learn this is because there is no real writing or coding as such, just dragging blocks of code.

This will allow people not to learn how to write text of the screen, or draw complex forms, but will teach about the basic structure of programs, and make you think about how do do things.

In turn this would make going onto a newer language easier.

I think most people around my age would have started programming wth a program called Qbasic, (or RM Basic) certainly not an awesome programming language, not something that you're likely to see enterprise software written in, but a very good starting point for getting basics,

most software can be reduced to a simple:
I want to get an input make a decision, and output something based on that.

something basic, (like Basic, or scratch) is well suited to introducing
 
python is simple, but so is JavaScrpit

I.E look at my sig, that is the code to put in the <head> tags in a HTML doc, to bring a pop-up box messege box to the user in the browser before the browser executes the rest of the HTML.

simple as eh?

dont forget to close each line of code of with a ";"
 
Last edited:
I read this more in the way that there is a well defined structure to programs, not that the function returns etc are well defined across different systems or architectures.

Personally I find C very easy to understand, because it have such a rigid way of writing code, there is very little room for any kind of flair. (C has quite strict formal grammar), so once you have an understanding it's relatively easy to go look at the source for any program and see what's going on. or at least be comfortable with what you're seeing.
This is true, the basic language is quite limited which, for simple programs, does make them relatively easy to understand. However, when you start to get other libraries involved I'm not sure this really applies anymore (which kind of ties in with my other point.)

I'd say it's more like understanding that batteries store power, wires are conductive, and incandescent light bulbs are resistive. we're hardly talking intimate knowledge of the CPU and it's registers!
OK, I admittedly was stretching the analogy somewhat. I'll reserve that one for leraning ASM as a new language in future ;)

Arguably everyone *should* care about what's going on, and learning to not care is a bad habit, on the flip side, yes too much too soon is a bad thing.
In my experience, and contrary to what you might expect - for a lot of people starting out, the challenge is to teach them not to care! If I had a quid for everyone I'd taught who was obsessed with premature optimisation because of CPU cycles doing this and registers doing that and ++x being executed faster than x++...

The problem with C is it *forces* a lot of things (such as memory management) on you pretty much from day 1. No option, it's just there and has to be learnt. If I'm teaching someone who's never coded before, I want to teach them about logic, control flow, programming structures, algorithms etc. I don't want to have to make sure each and every person understands the details of underlying memory management before they write their first non trivial program, especially since in (pretty much) all modern languages this isn't something they'll ever have to do.

Any what do you mean by aren't standard? don't conform to standards, or are extensions to the original standard operators?
Are we talking standard keywords, or standard functions?
I mean anything that's not in libc, which, by design, is a pretty small and restricted set of libraries. I'm not talking about platform interoperability at all. You can argue it both ways, but the fact is if I look at, say, some C source code for a program with a graphical interface, that could have been written by any one of a fair few libraries, and if I'm writing such a program I need to go through the task of choosing and picking a library for my needs. With languages that have all this included in their standard libraries, it makes things (generally) much more consistent and lets you write much more powerful and flexible programs before you need to think about adding additional libraries. If I'm writing a GUI in C# for example, you can be pretty sure I'll be using the same underlying classes, layouts and so on than the guy writing a completely different GUI down the road.

I'm aware this can be argued both ways, but the original point was that Java's sheer number of libraries can make learning by cause and effect more difficult - I'd say for more complex programs, the diversity in libraries makes the opposite true. It's by no means a clear cut point; I guess what I'm trying to say is that a small language doesn't necessarily equal an easier time learning it.

I'd put money on the same situation being true in Java, (that there are libraries that are system or architecture specific). it doesn't make the language bad or inflexible though! it doesn't even make the library bad!
Actually, not really (though admittedly this is besides the point because I agree platform interoperability isn't a must for those starting out.) Nothing in the (pretty huge) standard Java API is platform specific, and a very, very limited subset of the Java libraries out there are (where this is the case they're almost always Java wrappers round native code.)

I sort of agree, and sort of disagree.

Yes, ANY language will be a good language, and you'll likely never outgrow any language that you start with, and there are likely careers in any language that you like to learn. anything from Visual basic to C, or Java, I bet there are still Fortran jobs around.


but I do think that it's very difficult to just start programming.
Certainly I'm sure that I started with something simple.
This is where it's up for debate, and often depends on the person individually. Everyone on these forums is (legally) 13 and older, so I give advice with that in mind. If someone's of that age and wants to start programming, I see no reason to start them off on a drag and drop based language - they should be able to manage a text based one. If someone was to ask what language they should start their 5 year old learning, my answer would likely be entirely different - priorities change hugely with that sort of age bracket, and then something like Scratch would not be a bad idea at all.

Having said all that though, at the end of the day, whether you choose C, C++, C#, Java, Python etc. all will teach you basic programming constructs if you stick with it, none of them are going to damage your brain so much you can never learn anything else, and all are powerful enough that, with enough persuasion, you can do pretty much anything with them (though admittedly some are better for certain tasks than others.)
 
Last edited:
This topic looks like one of those debates of which programming language is better :angel: just saying.

About the main question of this topic, just say that every high-level programming language (python, java, C#...) will teach you the basis. Meanwhile you don't start learning tink or whitespace everything is fine :lol:

Personally, I've chosen Java, you know, "write once, run everywhere" and because I use to code some apps for Android and the ndk and C gives me chills down my spine. Before picking a platform you should have crystal clear what do you want to achieve and what that platform offers to you as a developer.
 
Berry120, root, I agree with several of your comments - and yes I was wrong when saying they were written in C - I meant that they (more python than java really) use a lot of libc functionality.

All in all I think we agree that simply having the commitment to learn any of these languages will be invaluable. My main reason for suggesting C is that I believe it is a more 'fundamentals' style language, without getting into the more advanced concepts right away. This suggestion is based purely on the situation where the category of application is unknown (i.e. web, embedded, database, networks, etc.) and I personally found I understood Java easier after I learnt C/C++ despite doing 2 years of Java prior to starting C.

To summarise: pick one - learn it well - understand the concepts - pick another - repeat.
 
And yes html is a programing lang, since a program is instructions for the computer to execute.

hence the browser must execute the html, so it is a programming lang.

what do you think?
 
And yes html is a programing lang, since a program is instructions for the computer to execute.

hence the browser must execute the html, so it is a programming lang.

what do you think?
No. Just - no.

It's a *markup language*, not a *programming language*. It doesn't contain instructions for the computer to execute at all, it simply defines the style of a particular document. The browser doesn't *execute* the HTML, it executes a renderer which uses the HTML as its input. Big difference.
 
Back
Top Bottom