#ProgrammingLanguage #LearningFundamentals #StaticallyTypedLanguages
Hey everyone! 👋 I’ve been on a programming journey for about 2 years now, and I’ve dabbled in a few different languages along the way. Currently, I’m diving into Laravel and Nuxt for a project at work, and it’s been quite the learning experience.
I’ve been thinking about the importance of starting with a statically typed language when learning the fundamentals of programming. It seems like it can really set a solid foundation. 💻
So, my question to you is: Which programming language would you choose as the perfect one for learning fundamentals? Here are a few thoughts to consider:
– Starting with a statically typed language like C can help understand what modern languages abstract from us.
– Rust and Zig are other options worth exploring for their unique features and benefits.
I’m curious to hear your opinions and experiences! Let’s discuss and share our knowledge to help each other grow as programmers. 🚀
C++
> And as he said at the very beginning of the course learning C to not to program with it but learning it to understand what modern languages are abstracting from us is a great thing.
This makes sense; there are many popular modern languages you can point to (Ruby, Python, PHP) that were written in C.
A lot of what modern languages do is **attempt to remove the foot-guns in C**. Thus, C is good to learn so that you can understand what is provided by those abstract languages.
I’d say python, ‘coz that’s what I teach, but if you want to be more hardcore, then go with C, I guess.
I think:
1. There is no single perfect learning language: no single language quite covers everything related to computers and computation. IMO you need to learn at least ~3 to gain a solid overall picture: one mainstream middle-of-the-road OOP/procedural language, one low-level language, and one higher-level functional or declarative language.
2. The language choice is less important then the quality of learning resources available. It doesn’t matter how great a language is: if there are no beginner-friendly courses using it, it’ll be difficult for an absolute beginner to get anywhere.
So as a self-learner, your best bet is probably to find a highly-regarded and rigorous looking course and just use whatever language they’re teaching. The quality of teaching trumps the language choice.
It could also be using to use languages that are commonly taught in high school or college intro courses. For example, Java and Python, maybe Scratch or C…
> I strongly believe that starting to learn programming with a statically typed language is a must.
Reasonable take; I mostly agree.
> And recently I came across with C Programming for Everybody from Dr. Chuck. And as he said at the very beginning of the course learning C to not to program with it but learning it to understand what modern languages are abstracting from us is a great thing.
Personally, I believe C is a good second language but an annoying first language.
Generally speaking, there are two groups of programmers: ones who want to solve complex problems and treat computers as a necessary evil to let us do this, and others who view computers as powerful devices we should learn to control and leverage to solve complex problems. (This loosely maps to computer science vs computer engineering.)
I personally skew towards the first camp, so am naturally biased towards routing beginners towards languages that make it as easy as possible to practice using data structures and algorithms: the core foundational building blocks of every program we write. C doesn’t fall into this group: there aren’t builtins for basic things like lists or hashmaps.
I do agree it’s important to learn what modern languages are abstracting us from though. Hence why I think C is a fantastic second language: it teaches you a simplified but still useful model of how computers work under the hood.
> And also i wonder if can we say the same thing for Rust or Zig ? What are your thoughts ? I have never worked with any of them but i am planning to take a loot at them.
Rust and Zig are good second or third languages. They’re not yet good first languages: neither really have tutorials accessible for people with zero programming background.
That said, I’d probably detour and learn some basic C first. Rust and Zig are in many ways responses/reactions to C and C++, so some of the decisions they make might be a little puzzling if you don’t have that background context.
It doesn’t really matter tbh, for complete beginners it’s better for them to pick a less strict language in order for them to determine their interest in programming. It’s important for them to create a positive feedback loop to motivate themselves (which is why languages like Python and JS are popular, as beginners can see progress quickly). If they do gain interest to pursue further, they can then go on to pick another language and cover CS fundamentals.
Many top universities across the world now introduce programming to student with Python during their first semester. They then dive deeper with C++/Java or whatever, once they have the basics and surface level knowledge of programming (e.g. loops, creating simple programs) and build on from there.
I’ve personally benefitted more from the above (started with JS and front end, then to Java/C#, now will learn C++). If I had jumped into a language like C++ or C I wouldn’t have enjoyed it at all and would’ve not seen any benefits to learn programming.
I’d say python is the most intuitive programing language out there. it’s great for learning basic concepts and problem solving skills without worrying about some convoluted weird syntax. JavaScript makes sense too for beginners, for reasons we all know
My first language was Java. It was a hard learning curve at first but understanding the fundamentals and how to think like a programmer, everything else besides it is just learning the syntax.
Assembly, if you really want to learn fundamentals
C, always learn C if you want to learn the fundamentals of programming languages
the one you already know. fundamentals are not the language. fundamentals are algorithms, patterns…
I know over 30 programming and formatting languages. Though I can read C++ it is not my strong suit. Same with Assembly. Instead I focused on CSharp and SQL, plus a host of Client-Side languages. Though anymore with the maturation of EF we don’t need SQL, but I’m old school and some things are hard to let go. Regardless, not being fluent in C/C++ closed off many opportunities for me.
Frameworks come and go. Also Silverlight, the promised Flash-killer: Years of investment – killed off by HTML5.
As for markup languages, you only need to grok SGML and then all others will fall into place.
[Charles F. Goldfarb, father of SGML](https://en.wikipedia.org/wiki/Charles_Goldfarb)
~K
Just learn Elixir and your done
If we’re talking about the true, pure, fundamentals, then C.
However, the lowest-friction approach will be Python. You install it, run it, and you’re sitting in an interactive environment, with no additional dependencies or requirements, that will let you explore almost everything important.
You can create data structures and algorithms manually, at a usefully direct/low level. And when you have that down, you can use Python’s built-in lists, dictionaries, maps, to apply those concepts to more complex problem.
Low-friction, when learning, is important. It lets you focus on what you’re trying to learn, without distractions.
For example, you do not want anything web/browser focused, as you’ll need to learn more than just the fundamentals and the language. HTML and CSS have four-fifths of fuck-all to do with “programming”, but they’re necessary (at least without significant additional gyrations) to do more than console output with something like JavaScript … which itself requires a browser.
At my university we learned python first semester, then java second semester, C third semester, assembly 4th, and then your options dictated your language after that. I’d personally recommend python just because you get to skip over a lot of the complex syntax of other languages. Learning even a bit of C is great since it exposes you to memory. Outside of that I’d recommend choosing something based on what you want to build. Python or Java is great for this since it is so widespread and can do a bit of everything.
C as always
I’ll tell you but you’re not gonna like it: It’s Pascal. Your first programming language, when you are learning the fundamentals should be Pascal.
Why? Because the language was create to teach programming fundamentals and it’s the only programming language that does it well (well, and it’s successor, Oberon)
After you learn the fundamentals, feel free to learn and use anything else you want, insecure languages like C, or slow languages like Python. But you should start with Pascal.
(Bring on the downvotes, kids!)
C++
C or C++
Rust or Golang