Learn to Code via Tutorials on Repl.it!

← Back to all posts
What language to start off with
h
MocaCDeveloper (603)

Hi. I am here to answer the top questions asked by new developers that also have been very indecisively answers.

Some people say to start with Python, some say to start with JavaScript, some say to start with whatever they want to use.

I am here to answer to top questions a beginner in the programming world tends to ask:

  • Where should I start
  • Why should I know this language first?
  • How do I learn this language?
  • How can I further advance my knowledge in coding via learning this language first?

So, without further ado, lets dive in!

Where should I start

This is my own personal opinion, but I believe it fits well. And I will explain why.

Many new developers start off with high-level languages. I, for example, started off with Python. Now, yes, while the start of my career in coding took off at a easy pace, the outcome of starting off easy tended to be this: it was harder to learn other languages.
And this is where my opinion comes in.

I started off with Python. I had written just Python for over a year. When I finally struggled to come up with new project ideas I decided to get into other languages. I got interested as to how Python came to be so did a little research. I found the CPython source code. And boy let me tell you. I sat there and thought to myself, "How on earth could anyone possible code this, and know what's happening".

A few days later I had decided to try and learn C. After starting off with such a easy-to-learn, high-level, dynamically typed language(AKA PYTHON), my brain was absolutely fried from the simple "Hello, World" program every developer learns to write in there new language.
I mean the standard I/O file import all standard C files tend to include confused the living crap out of me. Python had it built in, and I was hooked on the idea of having built in methods. But not with C.

If I had a say in where to start, I'd say start off with a low-level language like C or Rust(not Go, Go is a bit harder, same with C++).

But Moca, starting off hard doesn't sound fun.

And indeed it might not be. But, if you start off easy, you're going to want to keep it easy. And, take me for example, I quit trying to learn C 3 different times because I kept reverting back to the "easy" way of doing things because I started off easy.

Starting off with a language like C build a developers fundamental skills in the programming world. You learn how to create things from scratch, meanwhile starting off with a easy language like Python builds a skill where you lean to built-in functions. With lower level languages like Rust or C, you can't quite do that.
Rust, for example, you have to program your own methods.
C, you have to create methods from scratch. Ex: A dictionary in Python would have to be created from scratch in C.

Moca, why do you say to start with a lower-level language?

Starting off lower level tends to make you better in the long run. Now, will you stick to the low-level language you learned? That's up to you. But, I highly advice you to start of with a low-level language. And I promise you, if you do that, any other language(ex Go, C++ etc) will be an easy-pickup for you to understand. Meanwhile, if you start off easy with a language like JS or Python, if you tend to turn the tides and dive into a language like Go, you will be stuck clueless at anything and everything going on in the language simply because you bounded yourself to the "easy" way of doing things.

Moca, what language should I start with?

As I have described above, starting off low-level and building up will build your fundamental skills and enable you to become a well-experienced developer. As well as enable you to pickup any new language you decide to learn real easily.

I'd say to start with C. C is a language that, if you end up learning and writing, will allow and give you the fundamental knowledge you need so you to pickup quite literally any other language faster than you can say "I love Python"(cough, get the joke?).

Why should you learn C first?

C is a low-level language. It was originally created and came to be for the unix OS. You can learn more about that quite literally anywhere via google(or whatever search engine you use).

C is still around today, and believe it or not, almost everything you look at has some C code in it(traffic lights, that clock on your microwave, your computers etc).
C is everywhere, and is still in-use today. The demand for C developers is high, and if you start off with a language like Python or JS, you'll never want to touch C because you have to actually get your hands "dirty" because you have quite literally nothing but the build-in libraries at your finger tips.

C will give you an insight on memory allocations, pointers, memory addresses, and you can dive deeper and learn how the static memory is allocated, how memory alignment takes place(I have a tutorial over memory packing which describes how memory alignment works).
Now, while you may never use this information you learn from C, you will expand your mind to the skill level needed to know and write C. And therefore, with your new current mindset after learning C, you can easily pickup any other language.

What else does C offer?

C allows you to get hands on. You have to create many things from scratch meaning you can play around with how things work.
Take for example creating dynamic arrays from scratch. You can change how it's indexed. You can add in your own methods etc. But it's all written from scratch.

Moca, writing things from scratch seems hard!

It's not! Writing things from scratch is not hard, whatsoever.
The phrase just tends to trigger new developers because they'd rather have the useful methods at there finger tips rather than having to take there time coding them. And this absolutely destroys the mindset of a developer.

The phrase "writing things from scratch" sounds hard because "from scratch" means you have quite literally nothing to work with. But, let me redirect you. You have ALLOT to work with. There are MULTIPLE useful built-in libraries the C programming language offers that enable you to do many things in a matter of 1,2 and 3!

Writing things from scratch is not always hard. It's a matter of knowing the logic of the language, and how exactly you want your product you're developing to act.

Moca, C seems to be a bit too low!

STOP! I will refuse to listen to it. If you are incapable of setting your mindset for the better, then how will you ever face yourself to a huge project like a web-server(Ex: A facebook type webpage)?

C will not fill your skills for web development if that is what you're tending to go into. But it will build the skills you need.

  • Patience.
  • Understanding of the code you're writing
  • Understanding the "logic" behind the code
  • Knowing what exactly each line of code is doing, and why

Yes, these skills can be built via learning other languages besides C. But, C builds these skills deeply, while other languages just throws them at you to understand. C throws them at you and you have to sit yourself down and understand them, comprehend what's going on, and have a deep insight on the functionality of the codes nature.

How do you learn the language?

There are many tutorials out there. I personally used SoloLearn to get the fundamental knowledge over the C language, then I headed my way over to Youtube and watched some C projects with some advanced concepts and C and researched each new concept I saw on google and picked up the language pretty fastly.

It will not be easy to learn if you're just starting off. But that's fine. No language will come easy if you're just starting off. I'd highly advice you to just take you time with each new concept you're learning and practice each new concept. There are some concepts that, over time, you will look back and say "I really didn't need to stress too much over that because I never even use it". And believe me, you'll say that allot more with C that with any other language!

But, there are many free tutorials online you can learn C from. Or, if you learn better by watching Youtube videos over projects being written in C and just research each concept you see, then do that too! That's what I did, and within a year, I was writing C like a boss!

How can I further advance my knowledge in coding via learning this language first?

I think I covered this very well in the above 3 sections.

Learning C first will allow you to build the fundamental knowledge over coding and how to understand and comprehend each line of code, and the logic/functionality behind each line.

C will enable you to understand the underlying code of primarily any other language you write. It drives you to think more logically about the code you write. And, believe me when I say this, it doesn't matter what other language you write, the logic behind the code will make so much more sense if you started off with C than if you started off with a higher language like Python or Js. The logic is "lazy" in those higher level languages. Causing you to "lazily" write your code if you decided to go into some low-level languages. Which is the prime reason I highly advice new programmers to start off low and then, if they want to, build up to the higher level languages.

Summary

This world is in need of low-level developers. Not everything can be created via JS/Python/Dart etc. The lower-level languages like C, Rust, Go, C++ etc are a must if you want to see advancements in technology.

Learning C is just the best start to a new programmers career to get there mindset set on the logic of the code there writing, the concept and functionality behind the code there writing, and it teaches them to have patience behind the code there writing. Meanwhile, with higher-level languages, you tend to lose patience if you dive into lower-level language because those higher-level languages tend to be "easy" and "fast", meanwhile lower level language require more time to create the methods/functionality you require to get what you want.

Take it or leave it. C is the language to start with. It will build that fundamental knowledge and enable new developers to learn rapidly and mature in the world of coding.

EDIT: Read the comments. They are very informative as to why I biased this towards C. It is also quite a interesting conversation I had with multiple other people!

Comments
hotnewtop
ANDREWVOSS (100)

One other thing:

C++ is not harder than C

If anything, it's easier. C++ is a superset of C, meaning that it is an expanded version of C that has everything C has. It adds things like templating and object orientation, which give new ways to write code, as well as newer, simpler ways to do things like I/O dynamic memory allocation

MocaCDeveloper (603)

@ANDREWVOSS

It gets harder when learning the advanced concepts of the language.
There are many things C++ has that derives itself from the language C.

Yes, it is a superset of C, but with all it's other "new" syntax and keywords and logic, C++ could primarily be counted as a language of its own kind.

C++ also takes away allot of things from C. It also introduces "garbage collection" which is something C will never be. That in and of itself sets it apart from the C language.

C++ is also slower in some areas where C is faster. C++ is a "heavier" language because of it's implemented OOP and template features, as well as that "auto" key which drives the compiler to configure the current type, which also slows down the compilation speed.

I could go on and on. But, yes, I agree. C++ CAN be easier than C in some areas. But, in allot of areas, C++ can become allot more difficult than C.

Highwayman (1461)

With all due respect...

C++ is not garbage collected. It has standard classes that provide something similar to garbage collection, but it is not garbage collected, and a lot of people don't know about them or are never taught about them anyways(which is kind of a problem).

In addition to this, all those "heavy" operations that you are referring to? Those are all things that C can't do on it's own. Polymorphic function calls? Sure you can do it in C if you try, but is it going to be optimized to the extent of a C++ polymorphic call? No. Probably not. Also, templating and such can actually make C++ faster than C; for example, the standard sort function in C is in fact slower than the standard sort function in C++ because of templating.

C++'s "heavy" features are also kind of an "Opt-in" type thing. Don't want to use the std? That's fine, you can always

What features does C++ drop from C? It was very specifically designed with backward compatibility in mind, so much so that it is in fact bogged down by old C concepts like just straight including files instead of making modules and such, so I've never really heard of that before..

C++ is, for at least like 90%, a superset of C. All the stuff that a beginner C programmer is going to see is going to be C++ too.

@MocaCDeveloper

ANDREWVOSS (100)

@Highwayman

All the stuff that a beginner C programmer is going to see is going to be C++ too.

Except struct
lol

Highwayman (1461)

C++ has structs and many people provides specific guidelines as to when you should use struct or class, though in C++ there isn't actually a difference. @ANDREWVOSS

ANDREWVOSS (100)

@Highwayman That was my point. A class does everything a struct does (although slightly differently), so there really isn't much reason to use a struct in C++.

Highwayman (1461)

Well then yes absolutely agreed.
@ANDREWVOSS

MocaCDeveloper (603)

@Highwayman

C++ has a automatic memory allocation system built into the language. Thus meaning it's garbage collected.

And I never said C++ drops any features from C. But I can say that any feature C had C++ simple replaces with a higher-level feature such as Classes which replaces structs.

C is the lowest "highest" level language you can get. Anything "added" to the primary C language, ex C++, will cause the language to become "heavier", and with C++ being garbage collected above all of this, C++ is indeed "heavier" than C itself.

You can do quite literally anything with C that you can do with C++. It is all about knowing how to work with the language, and how well you understand the concepts of the language.

Yes, C++ is an amazing language. But you can't argue with the fact it's a "heavier" language than C, and that it is garbage collected which puts some weight on execution speeds.

Highwayman (1461)

wait. I'm getting confused as to what you think is garbage collected in C++. Are you referring to new and delete? or are you referring more to like std::vector and std::shared_ptr.

@MocaCDeveloper

btfuss (164)

Moca, why did you become honest

EpicGamer007 (1728)

I feel like this is just an advertisement to convert more people to c. Though your reasons are viable. I agree with @ANDREWVOSS in that you should start off with a rather middle-high level language like Java/C#. Python and javascript are easy, and I agree with you that you should NOT start off too easy like with those languages. However I DO NOT agree with starting with C/C++/Rust. I feel this way because starting off coders should not have to worry about hitting segfaults every time they write code. Though they shouldnt be handed everything. Coding is just a tool, the biggest thing to take away is the concepts. Python and javascript can teach those concepts, but they provide so much, a lot of logical thinking is taken away. Low level languages provide little support. Its like trying to learn how to ride a bike without knowing what a bike does and what is in it. Someone starting off should first understand the concepts, then branching out becomes easy. The main point I am trying to make is that a starting language should not be too low level as it is throwing not ready minds into a vast array of knowledge which may be hard to understand. Super high level languages get you hooked without teaching the concepts. A more "medium" level programming language like Go for example, would be friendly for beginners to learn while also stretching their thinking. At least for me, Java was my first language, and I have branched into js and its probably my primary now, but I have also been learning C++ relatively easily (if I put more effort I can probably learn more) so this is my opinion.

ANDREWVOSS (100)

@EpicGamer007 Based. I totally agree with you, but you explained it so much better than me.

EpicGamer007 (1728)

@ANDREWVOSS your explanation was good too honestly.

ANDREWVOSS (100)

@EpicGamer007 Thanks. I think I may have gotten off topic with the whole thing about built-in methods, but I just thought that was a weird point. The seg fault example Moca used was really good, so I just used it in my reply lol.

MocaCDeveloper (603)

@EpicGamer007

I agree. This tutorial was biased, my apologies.
But I was aiming towards C because, from my point of view, as soon as I got into C after entering the programming world at such a high level, I "matured" more in the functionality of the programs I wrote and in the logic behind my programs.

I also "matured" in the amount of code I wrote and was able to spot any useless code that was simple not needed. Where in mid-level languages you can still tend to get sloppy and it look perfectly normal.

I do agree with your input, however, and that starting of mid-level will most likely end up helping out beginners allot more than beginners trying to understand C.
But, I feel as if though those mid-level language will still lean beginners more towards the higher level languages like Python which is why I stuck with C.

Why do I believe this? Mid-level languages have many built in methods that spoil beginners. Now, I don't hate built in methods. In fact, I love them. But I feel as though they ruin the mindset of beginners. Beginners constantly look for the "easy" way of doing things, and the more built-in methods there are, the lazier they get, and the higher up they'll want to go which is why most beginners end up learning Python anyway whether or not they started off in a mid-level language.

From what I've seen, most Java developers leaned towards Python, Kotlin, Scala, Dart etc. I have rarely seen a Java developer go any lower than Java itself. I have seen some Java developers write C++ but that's because C++ is OOP based and that's what Java is.

^ That is just from what I have seen. Do not quote me on that. I am sure there are allot of Java developers that dive into lower level languages like C, Rust and Go. But none that I have seen.

So, whilst this tutorial may have be biased, logically it was not. Starting lower-level tends to be the required if we want people to stay on the planet and not get too high(lol). There is nothing wrong with writing Python. But when we have hundreds of beginners settling with just writing Python, or a mid level language like C#, there mind set will transition from the "logic" and "functionality" of the code to the "easiness" behind what they're writing.

Now, in some cases, making a application in the "easiest" way is a good thing. For example, fast runtime speeds. But, that is not always the case, especially with beginners. They won't aim for the "easier" way for the speed of it. They'll aim for the "easier" way so they don't have to do all that much work.

Yes, starting off mid-level is probably the best. But, to me, starting off lower-level matures beginners in the world of coding and prepares them for the long road ahead of them where they're constantly faced with needing to learn new languages and constantly adapting day after day to new changes in technology and the code they right. I have seen many beginners start off with mid-level languages and end up sticking with Python.

Yes. It will be hard starting off right away with C. And, yes, beginners will have a difficult awakening to the coding world. But, this "cruel" awakening will also prepare them for the long run.

Also, encountering seg faults really builds the skill of debugging your code without the need of requiring the compiler to tell you what's wrong. Which is a crucial skill in this day of age. If you can learn to debug your own code without the needs of a interpreter or compiler telling you what's wrong, and learn this skill at your beginning stages of your coding career, think of where you'll be at in a year!

ANDREWVOSS (100)

@MocaCDeveloper

Also, encountering seg faults really build the skill of debugging your code with the need of requiring the compiler to tell you what's wrong. Which is a crucial skill in this day of age. If you can learn to debug your own code without the needs of a interpreter or compiler telling you what's wrong, and learn this skill at your beginning stages of your coding career, think of where you'll be at in a year!

This only really applies to fully compiled languages. Anything with a runtime component (.NET, JVM, V8, Python, etc.) will show you what happened. Also as compilers get more advanced, this becomes less of an issue. Rust is a low-level language like C, but its compiler is able to predict and warn against seg faults and memory safety issues

sorry for all the pings, I just think this discussion is really interesting

MocaCDeveloper (603)

@ANDREWVOSS

Oh yes. I know!
Rust is a very helpful language with warning you about unused functions/variables/structs etc. That is the prime reason I absolutely adore rust and fell in love with it.
Besides the fact.

Since the C compilers don't introduce a way to tell you where the seg fault happened, it will then drive the developer to hunt the error down themselves. And, with this skill they build overtime, they can easily tackle a bug/error BEFORE the compiler/interpreter of other languages even catches it because of the skill they developed from hunting down errors because of the seg faults.

MocaCDeveloper (603)

@EpicGamer007

P.S: This was somewhat a advertisement lol.
So many developers are pulling away from low-level languages when in reality, low-level languages like C and Rust are a need in todays age.
I just hate seeing so many people aim for languages like Python and neglect the wonderful world of the C family(or any other low-level language in that matter).

EpicGamer007 (1728)

@MocaCDeveloper yeah i understand your points about how even mid-level languages do give the devs a lot of support. Java at least, has got a rich amount of sorting algorithms, ways to store data, etc. Though in some ways, I disagree with your idea of "matured". For me, I think that becoming "matured" in a programming language means being able to write easy to read, sustainable, and good code overall. I do not think that learning a new language like c makes you a "matured" programmer. Its when you excel in your current language and understand the concepts needed for your programming language, you become mature at it. In terms of concepts and help, that is where I agree with you. if you get everything handed to you, you will not become mature in any way in terms of concepts. How is a map implemented? You won't know unless you try. But in high level languages, its already there for you which obviously helps with ease of use, however takes away new learning. You made one more point about debugging. I somewhat agree with this statement. However, because of the nature of low-level languages, debugging becomes much harder. If there are too many bugs/problems, it will be much harder to fix the code and can discourage a beginner. There are only so many problems one can take before quitting.

Btw, I want to learn low level programming cuz low level programming is cool (os', programming langs, games, hardware, etc) so your statement about how people are moving away from low-level dev really surprises me. I am totally with you on this quote:

I just hate seeing so many people aim for languages like Python and neglect the wonderful world of the C family(or any other low-level language in that matter).

StonksAreRising (2)

@EpicGamer007
my mans written an essay above

StonksAreRising (2)

@MocaCDeveloper
my mans written a 10 page essay

StonksAreRising (2)

@EpicGamer007
same Just written one for Moca because I really need help
wall:
me: continuously running into wall for 2 weeks straight

MocaCDeveloper (603)

@EpicGamer007

To me there are two types of "maturing":

  • Maturing in the overall code you write in the specific language
  • Maturing in the way you use the logic in all languages you write

Maturing in the specific language means you know pretty much each concept and know when and where to apply it at within your project.

Maturing in the way you use logic:
C builds skills you wouldn't have built in Python. Thus you "matured" in a way of adapting to skills you would rather not have if you wrote only Python code.

Many languages "build" or rather "mature" a developer with the way they think of their code. Each language impacts a developer in its own way.
C, for example, teaches developers to make things from scratch. This "matures" the overall logic behind the developers code.
How? Well, lets say a beginner starts off with C. They then move up to Python. That developer will then want to use there own logic instead of the built-in logic the programming language has. This is "maturing" in the logic of the developers code.

EpicGamer007 (1728)

@MocaCDeveloper i understand that, however, for beginners, having to write everything themselves will likely be difficult and can discourage them. No one wants to waste time trying to make their own list/vector and beginners will not have the knowledge to make their own vectors, which further inhibits them from creating their projects.

MocaCDeveloper (603)

@EpicGamer007

Ok. Lets "dereference" this.

Lets say a developer is learning Js to create a web-app. After learning some Js, they decide to put there knowledge to the test by making a little web-based project using Js.

Same concept applies with learning a language like C. Just, it's not a web-based type of project.

You primarily have to build the web-app from "scratch", so what's the problem building something from "scratch" in a language like C or C++?

In fact, there shouldn't be a problem. It's the same exact concept.
Now, I am not saying that beginners should instantly try and apply there knowledge to that of trying to create there own vector or hash map from scratch. But rather use there known knowledge and attempt to create something they feel they can successfully create.

EpicGamer007 (1728)

@MocaCDeveloper i guess that's true. I am still a bit skeptical about how a beginner developer handles the difficult things though.

MocaCDeveloper (603)

@EpicGamer007

I tend to have forgotten the beginning struggles of learning how to code. But I do remember some vital moments where I almost gave up. But C saved me, which is why this "biased" tutorial is aiming to start beginners at a low-level and build up, if that is what the beginner intends to do later on.

EpicGamer007 (1728)

@MocaCDeveloper i understand. But anyways, nice tutorial. Maybe you can put a few examples in there ;) Also bash python coders lol

AndrewAung11 (15)

@EpicGamer007 Yeah, I agree with you. But the thing is that, if you just start with java with no experiences in programming, it would stuck. I have been experienced it. When I started learning programming I started with java. And I got stuck. So I learn C++ because I heard it is really useful, but as you said C++ isn't a good start, so I got stuck. Then I give up learning those. But a few month later I learned javascript which is a bit same like java. And when I understand javascript well, I learned Java and that time Java is really easy for me. And now I am really familiar with java so I started learning C++ and now it is really easy.

Bunnytoes (65)

@EpicGamer007 I agree, this post is very biased, I started off with c++ which is moca says that is low level, but for me c# is easier

MocaCDeveloper (603)

@Bunnytoes

I commented on someone who had stated that this tutorial is biased.

I think I had a pretty well explanation as to why it was more logical than it is biased. If being logical is biased then I can't argue against what you're opinion is.

But in all honesty this tutorial is not biased. I went through why a beginner should try C first. What C builds that other languages tend to leave out, and just how you can benefit from learning C as your first language.

Where in this tutorial does it make you believe it is biased?
I do not see where it could possible be classified as being biased..if it was biased I would have stated something along the lines of:

Every other language sucks and C is the only good language because of its abilities to build fundamental knowledge about the programming world and the code you write.

I do state, however:

Take it or leave it. C is the language to start with.

But that is a suggestion, "take it or leave it". Another words, you can accept what I am saying or not accept it. This tutorial is purely a suggestion for beginners to start off with C.

Bunnytoes (65)

@MocaCDeveloper

Learning C is just the best start to a new programmers

seems a little biased but it's also logical

IntellectualGuy (791)

What about frontend-Dev or database though, what would you think people should start off with if someone wants to primarily be frontend or work with databases?

MocaCDeveloper (603)

@IntellectualGuy

Well then in that case, if the developer knows they'll just stick with front-end/databases, then they'll learn whatever language is needed for that specific field.

But, most beginners don't know where exactly to start and many don't even know what they want to do with code. Which is why I somewhat "biased" this tutorial towards C so the newcomers can get hands on with the logic of there code as well as the functionality of everything happening(literally everything, cough, memory allocations).

IntellectualGuy (791)

@MocaCDeveloper Mkay, but what would you suggest that people should start off with if they want to to primarily be frontend or work with databases.

MocaCDeveloper (603)

@IntellectualGuy

Node. I'd highly suggest Node. Not only do you have the language itself(JS), but you have many different frameworks to base your project off of.
As for databases. You can work with databases in any way with any language. So, that's up to the developer. Me personally, when I use a database I use sqlite because of it's simplicity. But, that's purely up to the developer.

ANDREWVOSS (100)

I also started with Python, and making the jump to C++ was quite hard for me. Personally I would recommend a more mid-level language like Java or C# for beginners, because they teach you a lot of the things that Python of JavaScript don't, but they are simple enough for a beginner to understand. Rust also looks promising, and I would recommend it for anyone who wants to learn a low-level language.

edit: Also, unsafe C# helps teach the basics of pointers and that's pretty cool

edit 2: Go is actually a pretty mid-level language (And a pretty good place to go if you started with Python)
@MocaCDeveloper

MocaCDeveloper (603)

@ANDREWVOSS

I was aiming more low level with C due to the fact it forces new programmers to want to keep learning and it gives them a hands-on feeling with working with the "logic" of the code.

If the logic isn't right, then seg fault will hit you upside the head without a warning.

Mid level languages tend to lean new programmers towards the more "easy" way of doing things. That is why mid level languages are called "mid level". They're easy, but not too easy.

Meanwhile, if you were to start off a bit harder with a language like C, you'll have a pretty decent mindset where you can easily, and I mean very easily, jump into mid-level languages like Dart, Swift, Java etc or higher-level languages like Python, Js and pick it up real easily.

Starting with a mid-level language will still be a hard transition if the developer chooses to go low-level due to the "easiness" of the mid-level language and it's built-in methods that users have at there finger tips.

The "easy" way of doing things tends to ruin the programmers train of thought and get them hooked onto the "easiness" of built-in methods driving them to go even higher level with languages like Python. Meanwhile, if they got there hands dirty, they'll have more logic behind the code they write, they'll have to end up writing there own methods from scratch, and they'll have a pretty easy insight as to how the things they use work.

ANDREWVOSS (100)

@MocaCDeveloper I personally think mid-lever is better for learning because you can learn the basic "logic" of the code without getting bogged down in complex concepts. I personally used C# as a sort of bridge when I was learning C++, because it taught me how a statically typed language works without me having to learn everything at once. When C hits you with a seg fault, you just have to figure it out. But when C# hits you with a seg fault, it explains why it happened. This is so much better for beginners because it shows them what the specific problem is, so they can get a feel for how to avoid that problem in the future.

Also, I find it interesting that you hone in so much on built-in methods. I see no real difference between importing stdio and calling printf in C, and just calling print in Python. I'd like to hear why you think that built-in methods are so much worse for beginners.

MocaCDeveloper (603)

@ANDREWVOSS

It's not a matter of the fact that I primarily think it's worse for beginners, rather that it gives beginners the "easy run" of things. Meanwhile, in a language like C, C# or any other low-level/mid-level language will rather drive the new developer to create methods of there own, because some methods they may need/require are not directly at there fingertips, like they are with languages such as Python/JS.

It's not so much about being "worse for beginners" but more of the fact that having thousands of built-in methods at your fingertip rather spoils beginners driving them away from mid-level/low-level languages forcing them to dwell amongst the higher-level languages(which, in this day in age, is not good because the more advanced technology gets the more low-level/mid-level developers we need)

ANDREWVOSS (100)

@MocaCDeveloper Okay, I see what you mean. I personally think a more important difference is whether your language has a package manager.

Okay, hear me out. Package managers allow you to use a new library with just one console command. This is great for beginners, because, like you said, many languages don't have many built-in functions. This means that you're going to have to rely on third-party libraries a lot. Getting libraries working in C++ is a pain, and one of the main things that sometimes turns me off of making large projects in the language. This is why I think Rust is so promising. It comes with a package manager and a build system in Cargo, so new developers can experiment with libraries and open source code with no hassle.

Highwayman (1461)

But isn't that going to make beginners instead lean on packages in the same way as they would lean on builtins? For example, using express or http in node provides me with far less insight into how http communication works, or even the capabilities of http, versus if I try to make an http communication class in C++, I learn way more about http, and I learn additional functionality that I never would have thouht to consider when working with the express or http modules in node. @ANDREWVOSS

ANDREWVOSS (100)

@Highwayman I see your point, but packages give you options. The truth is, very few people are going to build HTTP communication in C++ from the ground up, because Apache and HTTPP both do the job, and they most likely do it much better. People are going to lean on libraries, but packages give people options, whereas built-ins generally don't.

Highwayman (1461)

How does packages giving me options make me not lean on the package still? What does the presence of options do to make me not lean? Are they not going to have defaults? In that case I see where you are going with this kinda, but otherwise.. idk.

Also yes agreed most ppl aren't going to do that lol I'm just tired and seg fault doesn't do it for me.

@ANDREWVOSS

ANDREWVOSS (100)

@Highwayman

How does packages giving me options make me not lean on the package still? What does the presence of options do to make me not lean?

My point is that most people will lean on something. Built-ins point them toward one specific thing, while packages (or any other form of options) make them at least have to choose which one they think will work the best for them.

Highwayman (1461)

Hm. I guess that's true.. but isn't the point that things like C++'s really annoying package management almost completely deny them that possibility? I see what you mean that providing them with options forces them to understand more about the code they are about to use in order to pick, but that still only mitigates the problem, don't you think?
@ANDREWVOSS

ANDREWVOSS (100)

@Highwayman

but isn't the point that things like C++'s really annoying package management almost completely deny them that possibility?

True. That's why I'm so enthusiastic about built-in package managers like Cargo and Pip. In C++, beginners need to work to even get packages installed, while Rust and Python let you just get straight to writing code with no hassle.

Highwayman (1461)

The sad truth.

*shouts at the world* C++ GET YUR ACT TOGETHER WHYYY

@ANDREWVOSS

ANDREWVOSS (100)

@Highwayman Yeah. C++ has package managers, but that's the problem. There are like 4 different ones, and beginners have to actively seek one out and install it, and hope it has what they need. Package managers work best when there is 1 package manager, and it comes with the compiler/interpreter. It's kinda too late for C++ to get its act together because all the libraries and packages are already spread out and decentralized. (Normally I'm in favor of decentralization, but this is one context where it really just makes things worse)

Highwayman (1461)

Someone needs to make a package manager that just provides compatibility between all of them. Probably gonna be really weird, but ya know it could work. Kind of. @ANDREWVOSS

Highwayman (1461)

and now, as is our duty as programmers, we need to make said package manager
*project dies*
@ANDREWVOSS

ANDREWVOSS (100)

@Highwayman True. I made a "package manager" server (it just hosts zip files) and client (it just downloads zip files and their dependencies), but making an actual package manager seems like an impossible amount of work lol

Highwayman (1461)

yeah... :/
Though it probably actually wouldn't be that bad, because one could basically just abstract away the different package manager apis rather than build an actual package manager from the ground up.
@ANDREWVOSS

ANDREWVOSS (100)

@Highwayman true, but also the different package managers may use different binary formats for packages, as well as different text formats for dependencies :/

Highwayman (1461)

well, yeah...OH! oh oh oh what about making the package manager have extensions. make it all about extensions for adding in support for other package manager package formats and dependancy formats, then you opens source...? It kinda makes it easier to get a handle on each different format, you could start off with all the easier ones...
@ANDREWVOSS

ANDREWVOSS (100)

@Highwayman that would be awesome if someone put in the effort to actually do it. I know I won't I'm not good enough to do that kind of project

Highwayman (1461)

yeah... same I would give it a shot, but it'd never get finished. @ANDREWVOSS

ANDREWVOSS (100)

@Highwayman I'd never know where to start

Highwayman (1461)

probably with finding out what some popular package managers are for C++, though I'd probably have to figure out exactly how package managers work. @ANDREWVOSS

codeitfast (59)

Any good C tutorials?

codeitfast (59)

You wrote how C, unlike Python, doesn't have libraries. However, you then wrote that it does. What does this mean? Does it mean there are fewer libraries?

MeeraAl (16)

try Python
Is Named after the comedy series Monty Python, Python is considered one of the easiest coding languages to learn, in part because of its simplified syntax and focus on whitespace. Python requires fewer lines of code to get up and running, so even beginners can start creating relatively quickly.

FlaminHotValdez (615)

@MeeraAl literally half the post is saying why you shouldn't start with python ugh

Slowcde (0)

SLOWCDE:
I am a beginner in python and new at coding. What are these fundamentals you are talking about?

ProloyCodes (0)

did you even touch rust or just copy-pasted what the internet said about it?

rust is low level so it does not make us lean to builtins, but it also has lots of builtins to not make us overwhelmed to code from scratch

MocaCDeveloper (603)

@ProloyCodes

Are you talking to me? Lol.

MocaCDeveloper (603)

@ProloyCodes

I do not know where this question is even coming from, lol.
Where in this tutorial did I explain why you should start with Rust?

Besides the fact

Did you even touch rust or just copy-pasted what the internet said about it?

Yes, in fact, I have touched Rust and while we're on the topic I am creating a program in Rust to clear my terminal of any files larger than 10mb.

And as for the

or just copy-pasted what the internet said about it?

Why would you even ask this? This tutorial is purely my view point on why developers should start with the C programming language. If I wanted to copy and paste total crap from the web, then this tutorial wouldn't be at 15 upvotes.

Edit: Nor would it have a hundred something comments over technical questions.

ProloyCodes (0)

@MocaCDeveloper i think you edited the post anyways it was near this line
You learn how to create things from scratch, meanwhile starting off with a easy language like Python builds a skill where you lean to built-in functions. With lower level languages like Rust or C, you can't quite do that.
i dont remember what the exact text was, so i cant argue anymore.

peace🙂

Jaydogcodes (0)

Well Node.js is easy but Rust, Python, Java, JavaScript, Ruby and Elixir are hard so I do recommend using Node.js for easier JavaScript. Don’t even try wasting your time with python lol it’s really hard to do.

C, C#, C++: Their really hard to code with.

MocaCDeveloper (603)

@Jaydogcodes

Well, I would advice people to head towards Nodejs only if they know what they want to do. And since Nodejs is mainly for web dev, then if the developer wants to head into web dev, then I would tell them to dive right into Node.

Now. I am not here to persuade each and every new developer to start with C. That is not the point here. The point is the building of the skills and the fundamental knowledge every developer should have, and that every developer should build at there beginning stages, instead of in there later stages as I did.

If I would've started of with C or Rust at my beginning stages I would be far more advanced than I am now. I am STILL learning new things and I am STILL learning how to do low-level development.

Don't even try wasting your time with python lol it's really hard to do.

I am taking this two ways. Either A. You're saying the language is hard or B. the language gives you a horrible intro to the programming world.

If you're saying the language is hard then you are very simply wrong. It is the easiest language to ever exist.
Yes, there are some concepts the language holds such as requests, servers etc that can get quite complex but even then, compare a Python server to a Go server, it is severely easier than Go.

Python is not a hard language nor will it ever be.

But I can say it is a horrible language to start off with because it simple ruins the mindset of the beginner. As I described in multiple comments and even in the tutorial itself.

CodeLongAndPros (1604)

Disagree— beginners should learn rust but unironically

MocaCDeveloper (603)

@CodeLongAndPros

I too would agree with this. I would recommend C or Rust.

CodeLongAndPros (1604)

@MocaCDeveloper The biggest problem with C is manual memory management, there are so many bugs that just happen that could be prevented

MocaCDeveloper (603)

@CodeLongAndPros

Agreed. But that's primarily because the compiler expects the programmer to know where there memory is going and just how much they need.

It would be useless to add in error-checking on memory-allocations before compilation. At that point you might as well remove the feature.

ch1ck3n (1744)

@CodeLongAndPros i argue my case to the court: dogescript is best

MocaCDeveloper (603)

@ch1ck3n

I've never heard of the language. Seems pretty legit

10 seconds later

I'm back from the moon guys :D

StonksAreRising (2)

You've just changed the way I think about coding now...
+1 upvote!
Thank you.

DynamicSquid (4805)

This isn't really related, but I just thought of this: I feel like sometime in the future (or, maybe even now?), high level languages will be so different than low level languages that learning C will not help you at all if you decide to do into web dev, and in fact it might negatively impact you if you decide to go into web dev.

MocaCDeveloper (603)

@DynamicSquid

Not exactly. Learning a low-level language like C, as I stated in the tutorial, builds very in-depth skills required in everyday life of a developer, no matter what language you write.

Yes, every language is different. It's the same as being a Python developer wanting to create a compiler via using assembly.

Now if the beginner knows exactly what they want to do, and if that something is web dev, then why start with C? Go learn web dev stuff like django, Node, React etc.

But if a beginner doesn't know what to learn I suggest starting with C so they have a pretty good entry point in the world of programming.

But learning one language will never impact how you understand the next language(negatively anyway). No two languages will ever intervene with each other(not that I know of anyway).

DynamicSquid (4805)

@MocaCDeveloper

But learning one language will never impact how you understand the next language.

Hmm... idk. I don't agree with that but I don't have any examples either. I guess it depends on how long you learn that language. If you're too focused on learning C, then you'll develop a close minded view of how programming works based around how C works, which might impact you when you decide to learn another language.

MocaCDeveloper (603)

@DynamicSquid

Well yes, but also no. I learned C. Then I picked up Kotlin about a year ago. Then I went into Java pretty easily. Then now I am picking up Rust faster than any other language I've ever learned and I was extremely attracted to C and as you said:

a close minded view of how programming works

^ I don't quite understand how you can "develop" a "close minded" view of how programming works.
I think any good developer should know there limits in each language they write and they should know the logic from one language to another is different as well as the functionality and overall the code you write.

I mean, I can see where you're coming from. When I started getting into C++ I kept trying to use calloc and malloc of which C++ does not support. I guess that's an example.

But in all reality this "close minded view" your talking about is not as big of an issue as it may seem.

It's a even bigger problem if you start with a higher-level language like Python. Boy let me tell you, that will give you a "close minded view" on coding and make you want to primarily commit mental suicide if you dare touch a piece of code that isn't Python(jokes).

But in all reality, learning a low-level language tends to make you more flexible when learning other languages. I've worked with many different C developers and one said:

Rust was my first language. Then I went to C. I couldn't have had any better start to my programming career. Learning a lower-level language like Rust as my first language really helped me develop some skills I would've never adapted to by learning a language like Java.

That's also a reference I was using whilst making this tutorial.

fuzzyastrocat (1678)

@DynamicSquid My entire goal as a language designer is to make the opposite of this happen

DynamicSquid (4805)

@MocaCDeveloper Oh yeah, you're definitely right.

It's a even bigger problem if you start with a higher-level language like Python.

Yeah I guess I was thinking of developing a close minded view when starting out with high level languages.

DynamicSquid (4805)

@fuzzyastrocat Oh sorry, which comment are you replying to? Are you trying to limit the separating between high and low level languages, or are you trying to create a high level language that teaches fundamental concepts as well?

fuzzyastrocat (1678)

@DynamicSquid Oh whoops, I meant the original one. Though it's the other way around: separate the semantics from the implementation to the point where the low level language is indistinguishable from a high level one.

Th3Coder (119)

Great tutorial!

I actually started with Python, then went to JS before learning BrainF*** (yes, really), then C, C++, and recently Java. I'd say since languages like C, C++, and Java need their code in functions (and classes for some) it would probably be hard to understand for beginners... personally, it took me a while to understand classes!

I don't recommend starting with Python either (because it's indentation-based and has VERY different syntax with most languages), so I think JavaScript is a good one to start. THEN go to the 'harder' languages after understanding classes, functions etc!

This is just my opinion though, it could be wrong!

Half-unrelated, I wonder what will happen if somebody started with BrainF*** (can you guess what will happen?)

MocaCDeveloper (603)

@Th3Coder

Well, speaking of the fact BrainFuck is stack based and each indicator either pushes the pointer or decreases the pointer(or does some action with the pointer), I'd say the newbie would quite literally give up because well..it'd be confusing ASF.

But lets be real here, who on earth would start out with BrainFuckl? It's an esoteric language that has quite literally no use.

JWZ6 (432)

No offense, but I prefer C++ because it's more expanded and a bit easier to understand in my opinion.

MocaCDeveloper (603)

@JWZ6

No offense taken!

C++ is a good language. I have nothing against it. I do despise, however, that it removed memory allocation and became garbage collected, and I despise how much of a "heavy" language it is despite the fact it's classified as a "systems programming language".

But I still enjoy writing C++ code when I get around to it. There is nothing wrong with the language. Every language will have its pros and cons. And each pro and each con will vary from developer to developer.

JWZ6 (432)

@MocaCDeveloper nice thanks for the info :)

MocaCDeveloper (603)

@JWZ6

Yup! I am very informative. If you have anymore questions don't hesitate to ask me!

IMayBeMe (399)

Somewhat biased, but informative tutorial!

MocaCDeveloper (603)

@IMayBeMe

This is what I said to EpicGamer

I agree. This tutorial was biased, my apologies.
But I was aiming towards C because, from my point of view, as soon as I got into C after entering the programming world at such a high level, I "matured" more in the functionality of the programs I wrote and in the logic behind my programs.
I also "matured" in the amount of code I wrote and was able to spot any useless code that was simple not needed. Where in mid-level languages you can still tend to get sloppy and it look perfectly normal.
I do agree with your input, however, and that starting of mid-level will most likely end up helping out beginners allot more than beginners trying to understand C.
But, I feel as if though those mid-level language will still lean beginners more towards the higher level languages like Python which is why I stuck with C.
Why do I believe this? Mid-level languages have many built in methods that spoil beginners. Now, I don't hate built in methods. In fact, I love them. But I feel as though they ruin the mindset of beginners. Beginners constantly look for the "easy" way of doing things, and the more built-in methods there are, the lazier they get, and the higher up they'll want to go which is why most beginners end up learning Python anyway whether or not they started off in a mid-level language.
From what I've seen, most Java developers leaned towards Python, Kotlin, Scala, Dart etc. I have rarely seen a Java developer go any lower than Java itself. I have seen some Java developers write C++ but that's because C++ is OOP based and that's what Java is.
^ That is just from what I have seen. Do not quote me on that. I am sure there are allot of Java developers that dive into lower level languages like C, Rust and Go. But none that I have seen.
So, whilst this tutorial may have be biased, logically it was not. Starting lower-level tends to be the required if we want people to stay on the planet and not get too high(lol). There is nothing wrong with writing Python. But when we have hundreds of beginners settling with just writing Python, or a mid level language like C#, there mind set will transition from the "logic" and "functionality" of the code to the "easiness" behind what they're writing.
Now, in some cases, making a application in the "easiest" way is a good thing. For example, fast runtime speeds. But, that is not always the case, especially with beginners. They won't aim for the "easier" way for the speed of it. They'll aim for the "easier" way so they don't have to do all that much work.
Yes, starting off mid-level is probably the best. But, to me, starting off lower-level matures beginners in the world of coding and prepares them for the long road ahead of them where they're constantly faced with needing to learn new languages and constantly adapting day after day to new changes in technology and the code they right. I have seen many beginners start off with mid-level languages and end up sticking with Python.
Yes. It will be hard starting off right away with C. And, yes, beginners will have a difficult awakening to the coding world. But, this "cruel" awakening will also prepare them for the long run.
Also, encountering seg faults really builds the skill of debugging your code without the need of requiring the compiler to tell you what's wrong. Which is a crucial skill in this day of age. If you can learn to debug your own code without the needs of a interpreter or compiler telling you what's wrong, and learn this skill at your beginning stages of your coding career, think of where you'll be at in a year!

IMayBeMe (399)

@MocaCDeveloper yeah I fully get your point and am actually looking to switch to c from python, any tips?

MocaCDeveloper (603)

@IMayBeMe

Don't strain too much over new concepts you learn.

With learning C, it takes time to fully understand what's going on and how it works. C is low-level. Nothing in C(but the simple Hello World program) is going to come easy like it would in higher level languages like Python.

Just take your time. Do some research. Practice each and EVERY new concept you learn to get a good overall understanding of the logic that's happening "behind" the doors.

With C comes time. And with time, if your patient enough, comes the skills you dream of having. Nothing comes easy(except if you write Python).

And when I say "take your time" I quite literally mean, TAKE YOUR TIME. Do not rush to get into the advanced concepts of C like typedef structs or packing memory etc.

Just focus on what the tutorial you chose is going over, and then, after you practice the basics of the language, watch some youtube videos over a C project or take a look at some C repos via Github and then google some things that catch your eye that you want to know more about.

Not gonna lie, that's really how I became so good at C. I checked out C repos on Github, saw something that caught my eye, did some research, practiced the concept in a little example program, and over time, after practicing each new concept that catches your eye, you learn what it's used for. How and when to use it in your code. And you're capable of writing C..Like A Boss(get it? Impractical Jokers, lol).

But good luck, and DO NOT HESITATE to ask me for help!

IMayBeMe (399)

@MocaCDeveloper thanks I really appreciate those tips!

StonksAreRising (2)

@MocaCDeveloper
please ignore all replies I sent above I actually need help...
A guy named Filip taught me some basics and started me off with JS but i've been continue to struggle comprehending and trying to figure out and understand the meaning of every string... But I just can't find that and for the last few weeks i've literally continue running into walls. Same like you I cannot adapt to lower languages and I just feel a sense of boredom attempting to learn it... So, i've decided I would learn Python and JavaScript or Node.js.
Please help I apologize for all the trolling above i'm literally a brick right now!

IMayBeMe (399)

@StonksAreRising I’m nowhere near as good as moca, but my advice would be to have a motivation or reason to learn a low level lang. For example my main motivation was that I always wanted to make my own language and even attempted to do it in python m but realized that I need a lang like C to properly do it.

StonksAreRising (2)

@IMayBeMe
I feel you... I've actually been trying for months to find motivation to actually code and I have possibly just found what i've been looking for...

IMayBeMe (399)

@StonksAreRising Yeah another helpful thing you can do is to just attempt a small programming challenge every day and see how much of a streak you can keep. You can also find some of these challenges on edabit or project euler

StonksAreRising (2)

@IMayBeMe
I never knew such websites existed thank you :D

MocaCDeveloper (603)

@StonksAreRising

Could you specify the problem more directly, perhaps?

I've continued to struggle comprehending and trying to figure out and understand the meaning of every string.

What are you referencing when you say "the meaning of every string"?

Also, don't get "bored". Seek help. As you can see, there is a whole community on here willingly open to help you whenever you need it.

But, I will gladly help you. I just need more direct specifications as to what it is you're struggling with, and what it is you are wanting to learn, and in what language.

StonksAreRising (2)

@MocaCDeveloper
JavaScript.
The reason I say JavaScript is because someone introduced me to JavaScript and I can't seem to stay focused when trying to learn a different language so i've decided that I might as well
fully learn JS. But, I don't have the resources for that... What I mean by resources is that for example, a dictionary. A dictionary for JS so I can actually study JS.

IMayBeMe (399)

@StonksAreRising Just read the documentation. It's practically a dictionary of syntax

MocaCDeveloper (603)

@StonksAreRising

Well. I do not know much of JavaScript. But you can find many books online, as well as multiple useful tutorials/documentations over the Js programming language!

If you need help I can gladly do some research for you and direct you the way you need to go.

I can't seem to stay focused when trying to learn a different language.

Is Js your first language? The vibes I am getting is saying that Js is your first language that you've ever written. And if that is the case. Don't stress too much about not being able to focus on learning other languages.

There are many skills you develop over time, and the skill of being able to pickup a new language is something you adapt to with time. It's like learning math. Each new "concept" is a new language. You'll never understand each new concept/"language" right away. It take time to understand and fully comprehend the use of it.

I'd suggest, if you cannot seem to get the hang of JavaScript, to attempt as C#(Or Java). I do not want to direct you right towards C if you're already having some trouble learn Js.

Also. I can probably guess as to why you're having trouble.
There is so many concepts to learn with Js. You can learn client-side Js. Server-Side Js. There are multiple things Js is used for and at the beginning stages you want to know how to use each concept in each different field Js is used for. Which is normally where beginners(like myself) go wrong.

My very very very first language to learn was Js. I learned it via codeacademy. Everything I learned I attempted to tie in with web development. I could not figure out why on earth anyone would use functions. Then I was introduced to async and await, apis etc and I yet again could not comprehend, no matter what I did, the concept behind it or how to apply it to my code.

But I will be more than willing to help you find recourses online if you need help!

StonksAreRising (2)

@MocaCDeveloper
Everything you said is very accurate and yes i'd love for you to help me! :D

bwoop (170)

I started out with HTML, so i was kind of forced to learn multiple languages (CSS, JS), which later helped me to learn other languages because i already knew how to approach a new language. So, i personally would suggest HTML if you're looking to learn many coding languages.

MocaCDeveloper (603)

@bwoop

The only problem with this is it goes absolutely against everything I just said.

First off, HTML isn't a language, nor is CSS. The only reason language you learn is JS, and it's an interpreted language, thus meaning it has a crap ton of built-in methods developers have at there fingertips forcing them to get "addicted" to the "easiness" and wanting more of the "easiness" directing them towards higher-level languages like Python.

Secondly, starting off with HTML is probably not the best start. If you want a good start to coding, start off with an actual programming language. In this tutorial I aimed for C because it build the fundamental skills a developer needs:

  • Patience
  • Understanding of the logic
  • Understanding of the functionality behind you code

Meanwhile, if you started off with, lets use your example, HTML, CSS and Js, you can just throw random logic at the interpreter and it'll make sense of it(referencing JS here)

In this tutorial I aimed for C because C will enable new developers to get there hands dirty. Thereafter, if they wanted to learn another low-level language like Go or Rust, they'd easily be able to make sense of the functionality behind the code there writing and the logic of there code would be like getting a A+ in calculus class.

But, if you were to ask me, I'd say stay away from HTML, CSS and JS if you're wanting to become an experienced developer.

bwoop (170)

@MocaCDeveloper you have offended me with your lies

MocaCDeveloper (603)

@bwoop

Yes, it is a "markup language" it is not a logical language like Python where you can primarily create anything(or C where you can create a programming language or an OS, or primarily anything as well.)

HTML is JUST for the web, hence as to why it's a "markup language" and not an actual programming language.

Programming languages are languages you can primarily do anything with and is not tied down to just one thing where HTML is tied down to being JUST for the web.

JS for example. It is used for the Web, but you can use it for multiple other things as well instead of just the web.

MocaCDeveloper (603)

@bwoop

Also I apologize for offending you :)(cough jk).
But am I?

We'll never know :)<-(evil smiley face)

EpicGamer007 (1728)

@bwoop html literally has markup language in the name lol

ANDREWVOSS (100)

@EpicGamer007 Yes, but there's a difference between a markup language and a programming language

bwoop (170)

@ANDREWVOSS @EpicGamer007 @MocaCDeveloper guys i was just kidding, either way though, i like HTML the best because while it's not much by itself, it has JS and CSS kinda built into it which expands it past the borders of most other languages