Jump to content

What do you language recommend new programmers start with?

majestic_failure

As experts, what do you recommend to start with as a first coding language?  

21 members have voted

  1. 1. As experts, what do you recommend to start with as a first coding language?

    • Java because minecraft mods are fun to make (I'm half serious).
      2
    • html because it looks like hotmail. May he rest in peace.
      0
    • C++ because it looks like pacman and two power pellets.
      2
    • Python because you can make unoriginal dick jokes.
      10
    • labview because it makes you sound like a scientist.
      0
    • SQL so you can be a squirrel.
      3
    • Javascript because no one ever like you Java.
      1
    • C because I ran out of jokes here.
      4
    • C+ because a C- is bad.
      0
    • C# because maybe there's a difference between it and C+.
      2
    • Just Turnip.
      3


I've always wanted to lean coding, and for some bizarre reason never have. I'm 17 anddid some really basic stuff with programs like tasker and excel equations, so  I'm not a total pleb. While I think I'd know what I'm doing, I know that I'd basically have the skill of a cannoli if I tried to make anything. I just wanted to know what programming language you guys would recommend I start with. C++ and java are very widely adopted so they came to mind first. If you can think of others though, please say so. Also what can different programming languages be used for? Like what do noobs make with each one? What hardware/OS's do they run on? (I own windows and android but I know linux is coding jesus) Sorry if I'm not helping discussion, just figured I'd ask the best.

Link to comment
Share on other sites

Link to post
Share on other sites

HTML differs from programming languages as it is a "markup" language to structure web pages. Like a Word document with no formatting. Combined with CSS you have a beautiful (but static) web page, like a well-formated Word document. With PHP and/or Javascript you add interactivity and server-side functionnalities to create a real web site.

On the other hand, classic programming languages are sets of instruction to be executed, to form a program. To a beginner, these are two different philosophies.

I'd recommand :
- C : universal, good synthax, easy to learn (+ tons of tutorials)

main()
{
    printf("hello, world\n");
}

- When you're more at ease, Python will give you great writing habits as if the code is not clearly, beautifully written, it doesn't work.

C++ and Java are born from C synthax, but have advanced functions and are "object oriented", so it's much harder to learn them from scratch, you'll have a better time learning the basics with C or Python.


You can test both languages on multiple web sites, give it a "hello world" try.

 

As a noob test you can try to make a basic addition/substraction/multiplication calculator. I think it's the first program I made. You just need Windows/Linux/MacOS, a command prompt, an advanced text editor (Notepad++, Atom) and a C compiler.

[Insert smart comment here]

Link to comment
Share on other sites

Link to post
Share on other sites

I could have swore there was a thread that categorized a bunch of different languages, and explained the general workings of every type with a few examples of each kind of language.


For instance :

Quote

linear languages are the lowest level, easiest to understand as they go in order from top of program to the bottom. 2 examples are C and Assembly

 

Math languages are used for scientific protocols. One is Matlab.

 

Object oriented languages are used to create instances of objects and program with objects. Java and C++ are 2 examples.


But for the life of me, I cannot find this thread. I thought it would have been pinned. It was short and to the point as beginners need it to be that simple to get an idea for what they kind of want, pointing them in the right direction.

 

I find that a lot of people learn Python in college, and it is controversially the best (any "best" thing can be argued) programming language for beginners because of its simple syntax. As in you just indent. You don't need curly braces or a lot of other crazy things. Children use python on their raspberry pi devices in schools. I learned some C in 11th grade, but my teacher made it very simple so Syntax wasn't something super hard for me. I don't know about the other students, as I was hanging out with the smart kids.

 

C is arguably a better language to learn as most languages are based off C (How you write the commands) and C is so low level with so many complications (Not to intimidate) that it would be much easier to later learn "Higher level languages" as they are meant to be easier to program with.

 

If you know what you want to do exactly, we can pick a language better suited to you.

 

For instance you CAN write a website with C, but it would be much better to use HTML or CSS. (I haven't done web programming so that may not be the best example.)

Or it's like trying to fight off zombies with a spoon when you could have gotten a shotgun. (Much better but completely unrelated.)

You want the right tool for the job, or you'll have more unnecessary work.

 

It's one of the main reasons games are mostly programmed with Object oriented Programming languages as you create a bunch of objects. (ie You have 12 enemies. Make one enemy, and just duplicate him a bunch of times.) (I'm in school for game dev/programming, so I always find a way to make programming involve video games.)

Link to comment
Share on other sites

Link to post
Share on other sites

My recommendation would be either C or Python.

 

C because of its barebones nature, and thus does not have a whole lot of material to cover. I feel a lot of the hard parts have to mostly deal with memory management (since you have to do it yourself) and pointers. But that's about it.

 

Python because of its pick-up-and-go nature.

 

If I were to recommend a starting OOP, I would say C# because it's easier to get a handle on things. C++ requires a bit more work and I believe it gets in the way of teaching the basics of OOP.

 

Also anyone who says HTML needs to be slapped with a trout. HTML is not a programming language.

Link to comment
Share on other sites

Link to post
Share on other sites

5 hours ago, majestic_failure said:

I've always wanted to lean coding, and for some bizarre reason never have. I'm 17 anddid some really basic stuff with programs like tasker and excel equations, so  I'm not a total pleb. While I think I'd know what I'm doing, I know that I'd basically have the skill of a cannoli if I tried to make anything. I just wanted to know what programming language you guys would recommend I start with. C++ and java are very widely adopted so they came to mind first. If you can think of others though, please say so. Also what can different programming languages be used for? Like what do noobs make with each one? What hardware/OS's do they run on? (I own windows and android but I know linux is coding jesus) Sorry if I'm not helping discussion, just figured I'd ask the best.

A good general "category" of languages would be "C-Like" languages. These are things like C, C++, C#, Java, Python. My go-to recommendation is Python.

This is actually a very difficult question to answer, because it depends on a few personal choices: Why do you want to program? What are your skills (logic, math, philosophy)? How much money are you willing to put towards this (you can easily do it for free with most languages)? 

Stay away from markup languages like HTML as a first language. These types of things come in very handy later, and are definitely worth learning, but if the only language you know is HTML, then there's no point: Sure you can describe the layout of a webpage, but you don't have the skills to fill it with dynamic features.

I would have to vote for Python, it's easy, powerful, and gaining in popularity. However, if you want to see other options, then there is a link in my signature to a thread about how to choose your first programming language.

ENCRYPTION IS NOT A CRIME

Link to comment
Share on other sites

Link to post
Share on other sites

I also want to point out it's much better to understand how programming and computers work in general, rather than start with just a programming language. If you understand what a computer does and how it processes instructions and data, it creates a foundation from which you can pick up most other programming languages. Unless you get into something that's really high level (as in, it hides a lot of the nitty and gritty stuff) like Lisp.

 

I suppose in automotive terms, it would be like asking which car or company of cars is best to wrench on when you have almost no knowledge of how cars work in general.

Link to comment
Share on other sites

Link to post
Share on other sites

Quote

What do you language recommend new programmers start with?

As others have suggested, perhaps English should come first and foremost. Moreover I found your survey/poll to be quite sophomoric hence I've simply not bothered with it.

On 09/01/2017 at 9:24 AM, majestic_failure said:

I've always wanted to lean coding

I honestly truly loath that term...

On 09/01/2017 at 9:24 AM, majestic_failure said:

excel equations, so  I'm not a total pleb

Creating software does not have to be synonymous with equations or indeed more generally, mathematics, advanced or otherwise.

On 09/01/2017 at 9:24 AM, majestic_failure said:

I own windows and android but I know linux is coding jesus

It really depends on what exactly one is doing, there is no 'best' or 'most correct' platform. Each platform is important, 'most correct' and indeed 'best' for a specific task or requirement.

On 09/01/2017 at 9:24 AM, majestic_failure said:

I think I'd know what I'm doing

No... You do not and wont... And if that upsets you then you are going to have a really bad time.

On 09/01/2017 at 9:24 AM, majestic_failure said:

I just wanted to know what programming language you guys would recommend I start with.

I would recommend that you take a step back from being so concerned over the specifics for now and instead try to find out what it is exactly that you want to do; What interests you specifically, what do you think that you will enjoy doing the most. You should answer those fundamental questions first and foremost before you try to add the complexity and convolution of trying to learn some arbitrary linguistic syntax on top.

 

After you have done that then you should concentrate on learning Software Engineering/Development/Science theory as the first stage or at least begin studding it as early as possible, ideally in parallel with some language. It is the theory and having a good comprehension and ability to put it into practice that is by far more valuable than any given language.

 

You can of course ignore that advice and plough yourself straight in. Be mindful that if you do so then you'll likely pick up a great deal of bad practices and anti-patterns along the way and at the very worst case you'll select a language not suited towards your particular interests which will give you a bad impression of what to expect and ultimately crush your motivation.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

On 1/9/2017 at 9:03 AM, Nuluvius said:

As others have suggested, perhaps English should come first and foremost. Moreover I found your survey/poll to be quite sophomoric hence I've simply not bothered with it.

I honestly truly loath that term...

Creating software does not have to be synonymous with equations or indeed more generally, mathematics, advanced or otherwise.

It really depends on what exactly one is doing, there is no 'best' or 'most correct' platform. Each platform is important, 'most correct' and indeed 'best' for a specific task or requirement.

No... You do not and wont... And if that upsets you then you are going to have a really bad time.

I would recommend that you take a step back from being so concerned over the specifics for now and instead try to find out what it is exactly that you want to do; What interests you specifically, what do you think that you will enjoy doing the most. You should answer those fundamental questions first and foremost before you try to add the complexity and convolution of trying to learn some arbitrary linguistic syntax on top.

 

After you have done that then you should concentrate on learning Software Engineering/Development/Science theory as the first stage or at least begin studding it as early as possible, ideally in parallel with some language. It is the theory and having a good comprehension and ability to put it into practice that is by far more valuable than any given language.

 

You can of course ignore that advice and plough yourself straight in. Be mindful that if you do so then you'll likely pick up a great deal of bad practices and anti-patterns along the way and at the very worst case you'll select a language not suited towards your particular interests which will give you a bad impression of what to expect and ultimately crush your motivation.

How should I approach it once I know what I want to do? I don't know what resources I should use.

Link to comment
Share on other sites

Link to post
Share on other sites

1 minute ago, jasonwj322a said:

How should I approach it once I know what I want to do? I don't know what resources I should use.

Don't worry about that for now just concentrate on finding out what you want to do.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

<rant>

The assembly language for some small microcontroller like a PIC18F or a AVR so you know how a system works under the hood.

I'm in the process of eating my shoes out of frustration because I have to deal with lots of ppl who don't understand a thing about how their <insert high level language here> gets translated into assembly and how it all comes together. Honestly, it'll make you a far better high level programmer is you know wtf is going on.

 

Try dealing with someone who does not understand why his low level C code, written on Intel,  breaks on Motorola because of endianness.

</rant>

Link to comment
Share on other sites

Link to post
Share on other sites

15 minutes ago, Unimportant said:

<rant>

The assembly language for some small microcontroller like a PIC18F or a AVR so you know how a system works under the hood.

I'm in the process of eating my shoes out of frustration because I have to deal with lots of ppl who don't understand a thing about how their <insert high level language here> gets translated into assembly and how it all comes together. Honestly, it'll make you a far better high level programmer is you know wtf is going on.

This is why I emphasize learning about how computers work in general. Though a cursory knowledge into how compilers work is a good idea too.

 

But realistically you don't really need to deal with assembly unless you're trying do high performance code or you need to do something in the reset routine before the C initialization starts. At the end of the day, the compiler's just going to mangle what you're expecting anyway, especially if you set optimization flags.

 

Quote

Try dealing with someone who does not understand why his low level C code, written on Intel,  breaks on Motorola because of endianness.

</rant>

If the guy's bit shifting, then it'd be better to do a multiplication/division by a power of 2. The compiler will just insert a bit shift operation anyway. Portable, but a little confusing. :3

 

Unless he's bitmasking, then he's in trouble.

Link to comment
Share on other sites

Link to post
Share on other sites

14 minutes ago, M.Yurizaki said:

This is why I emphasize learning about how computers work in general. Though a cursory knowledge into how compilers work is a good idea too.

 

But realistically you don't really need to deal with assembly unless you're trying do high performance code or you need to do something in the reset routine before the C initialization starts. At the end of the day, the compiler's just going to mangle what you're expecting anyway, especially if you set optimization flags.

 

If the guy's bit shifting, then it'd be better to do a multiplication/division by a power of 2. The compiler will just insert a bit shift operation anyway. Portable, but a little confusing. :3

 

Unless he's bitmasking, then he's in trouble.

I found it a great way to teach ppl. I'm not talking about x86 assembler, just some tiny RISC micro-controller with a instruction set you can learn in a day. Simply trying to flash a led with a timer interrupt is a massive learning experience for someone who has little knowledge about how computers work. The stack, memory mapped devices, context saving, atomicity, ... All in, at most, 50 lines of code.

 

The guy was (de)serializing data (16 bit ints) beeing transmitted between 2 devices over a CAN bus.

Link to comment
Share on other sites

Link to post
Share on other sites

1 minute ago, Unimportant said:

I found it a great way to teach ppl. I'm not talking about x86 assembler, just some tiny RISC micro-controller with a instruction set you can learn in a day. Simply trying to flash a led with a timer interrupts is a massive learning experience for someone who has little knowledge about how computers work. The stack, memory mapped devices, context saving, atomicity, ... All in, at most, 50 lines of code.

 

The guy was (de)serializing data beeing transmitted between 2 devices over a CAN bus.

You don't need assembly to learn that, depending on the microcontroller and its architecture.

 

For instance, on a Cortex M3, I can turn on an LED by basically aliasing an address to a pointer and assign a value to that when I want to do something with it:

int * led_array = 0x8000000;

//I want to turn on the first LED
*led_array |= 0x00000001;

STMicro usually includes a nice library with all of the peripherals aliased. Accessing them is no different than a accessing a struct.

 

And what the guy was doing was he was misguided. You don't need to learn assembly to realize your micro has a UART and you should always start with that for basic communication before moving onto something else.

Link to comment
Share on other sites

Link to post
Share on other sites

10 minutes ago, M.Yurizaki said:

You don't need assembly to learn that, depending on the microcontroller and its architecture.

 

For instance, on a Cortex M3, I can turn on an LED by basically aliasing an address to a pointer and assign a value to that when I want to do something with it:


int * led_array = 0x8000000;

//I want to turn on the first LED
*led_array |= 0x00000001;

STMicro usually includes a nice library with all of the peripherals aliased. Accessing them is no different than a accessing a struct.

 

And what the guy was doing was he was misguided. You don't need to learn assembly to realize your micro has a UART and you should always start with that for basic communication before moving onto something else.

That shows very little about what actually happens. For example, it does not show that to perform the OR, the value has to be loaded into a CPU register, OR'ed and put back. You'd be surprised at how many "high level programmers" I've met who have no understanding of the concept of a CPU register and, by extention, why such code as you just gave is non-atomic.

 

I don't see how messing up the value of a integer by (de)serialising it with the wrong endianness has anything to do with the bus used, be it UART, CAN or anything else.

Link to comment
Share on other sites

Link to post
Share on other sites

19 minutes ago, Unimportant said:

That shows very little about what actually happens. For example, it does not show that to perform the OR, the value has to be loaded into a CPU register, OR'ed and put back. You'd be surprised at how many "high level programmers" I've met who have no understanding of the concept of a CPU register and, by extention, why such code as you just gave is non-atomic.

Which is what a course in how computers work in general will get you. Assembly language helps as a learning tool sure, but you do not need to learn it to understand that this is what a computer does.

 

Besides, for the most part, I don't care what happens exactly anyway unless the program isn't behaving the way I want it. All I care about is if I feed it an input, do I get the expect output? And if it's time sensitive, how long does it take?  If something I create is so grave that it needs atomic operations, okay, I'll worry about that when I get there. Until then, my energy could be better spent not worrying that an interrupt can delay the powering of an LED.

 

If you worry about every little detail, you'll be wasting energy on things that don't really matter in the end. I'd rather by 100% done but 80% right than 10% done but 100% right.

19 minutes ago, Unimportant said:

I don't see how messing up the value of a integer by (de)serialising it with the wrong endianness has anything to do with the bus used, be it UART, CAN or anything else.

I was poking fun at the bus the programmer used.

Link to comment
Share on other sites

Link to post
Share on other sites

2 minutes ago, M.Yurizaki said:

Which is what a course in how computers work in general will get you.

I get your point. All I'm saying is : One learns by doing.

You can have these kids read 1000 books about how computers work and none of it will stick for many of them. Until they actually DO something. How DO you learn how computers work in general ? You DO it by programming the computer, not some high level abstraction.

 

Anyway, this'll be the end of it because I feel we've started polluting this thread, let the OP choose himself.

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×