If you want a good understanding of the fundamentals etc, I cannot recommend CS50 enough. The original is more difficult and starts with basic stuff (you’ll be asking the computer for individual pieces of memory etc)
https://cs50.harvard.edu/x/2023/
There’s also a python focused version, which is much easier. But this will make learning other languages in the future a bit more tricky. So, depends what you’d prefer.
https://cs50.harvard.edu/python/2022/
Both are taught by David Malan, a Harvard professor who is easily one of the best lecturers I’ve seen.
Good luck!
Edit: Should’ve mentioned, they are all free or you can pay for a cert with edx.
+1 for CS50. This is where I started and I’ve since transitioned to python. I think the basics will make you a better programmer overall (instead of python first), but it really depends on what you’re looking for.
It’s free, right? How much are the certificates?
Free to take the course through the sites I linked (includes ways to submit andbhave homework checked.)
No idea about edx but if you google cs50 I think edx tends to be among the top results.
Don’t start with classes. Start with something that actually does something you understand. Like updating text files. Or pulling data about something you find interesting
https://automatetheboringstuff.com/
Is a good book every newbie should read. It teaches you how to use programming like a tool
This is the book that started it all for me 5 years ago. Now I’m a software engineer!
Lots of good technical starting points here. I don’t want to prematurely discourage you, but before you get into any code, evaluate your problem solving abilities. If that is an area you struggle in, work on that first, or at least in conjunction with programming basics.
I’ve worked with engineers who have all the code skills, but when faced with a complex issue, struggled to break it down into it’s simplest components and wound up with a messy, over-engineered solution.
particularly nasty situation, for real. in my experience, they know the bits of a framework, but they’ll never get to write a modest regex: they’ll have opinions on that too.
That’s why I don’t get tired recommending How to solve it to engineers of every level
Just ordered a copy!
Should have added a disclaimer: it was written by a mathematician in 1948, so it’s a bit of a dry read 😅
ty
It depends what you want to do.
Do you want to make cool desktop apps? Probably something like Rust or C#.
Do you want to do machine learning or scientific research applications? Definitely Python.
Do you want to make websites and web apps? Definitely HTML, CSS, and JavaScript (look up both Node.js and DOM API). You could also learn other server side languages like Ruby, Java, or PHP, but knowing browser side JS gets you half way to knowing server side JS, so Node would be easiest. If you want strict typing, you can learn TypeScript, which adds a strong typing system to JavaScript.
Do you want to make mobile apps? Probably Dart and Flutter. Also could learn Kotlin or Java for Android, or Swift or Objective-C for iOS.
Do you want to get into the nitty gritty of kernel level programming or embedded programming? Probably C and Rust.
Do you want to work on old software that runs mostly banking/enterprise/medical applications, but can land you a pretty lucrative job? Maybe COBOL, Fortran, or Ada.
Do you want to accomplish nothing of value? Visual Basic. (Just kidding.)
The most important thing you can do is to just jump into things and try them out. In my career, I’ve switched languages several times. If you’ve got the fundamentals down, learning a new language isn’t that hard, so just pick any language you want and learn the fundamentals with it. I’d recommend a strictly typed language at first, because it’s easier to wrap your head around what’s going on, but if that doesn’t feel right, don’t hesitate to switch to something else. Have fun with whatever you’re learning. :)
C# is also very nice for server side and mobile apps as well as desktop. And game development too. To be honest, I would suggest learning C# to new programmers.
I would disadvise Rust for (most) desktop apps. There aren’t any GUI libraries yet, and the Qt bindings aren’t beginner-friendly yet.
Unless you just meant headless desktop apps, in which case Rust is my goto
There’s Tauri. Basically Electron with Rust instead of Node.
You can make an app with Tauri without writing a single line of Rust though. Tauri lets you trigger most native functionality you might need from the JavaScript side. If that’s enough for what you are building then you don’t need to write any Rust. You could use a Rust web framework that compiles to WebAssembly, but you could also just use React or Svelte or whatever else.
There are GUI libraries. I personally use iced a lot. Even if it’s not v1.0 yet, it has many features. There are also bindings for other more common libraries such as GTK, QT and imgui. There’s also egui as a native rust alternative to imgui.
Learning Java for android is still useful as a lot of legacy stuff is Java, but given Google has gone Kotlin first, and Kotlin is IMO easier and less error prone, dipping their toes in that first would probably be the better move.
You can always circle back to Java, you will need to understand it if you get serious about Android development.
Thanks for the correction, I added it to my post.
First time I see “cool” and “c#” on the same sentence. I’ve always thought stereotype of c# is that it is the language for corporate, extremely uncool projects.
Just a comment. Cobol nowadays is heavily outsourced. There are jobs but not so lucrative as in the past. Fortran is still strong in scientific computing, but nowadays it is wrapped in python. All people I know who were strong in fortran (me included) are nowadays mostly working with python or scala, most of us on ML/AI related stuff.
I believe Fortran is still heavily used in weather forecasting.
All scientific computing is built on top of fortran. Even cutting edge AI runs on top of high performance libraries written in fortran and c. Simply there is less need for fortran developers because high performance subroutines are wrapped to be called by higher level languages, such as python
Follow a guide to make a todolist in a language that’s popular for things you’re interested in.
- Games - C# (medium), C++ (hard)
- Webpages/Webapps - JS/TS (medium)
- Microcontroller - Python (easy), C (medium), Rust (hard)
- Datascience and machine learning - Python
- Automate shell - Bash
- Automate w scripts - Python / JS
- Game mods - Look up for each game
- Android - Java
- iOS - Swift
For each make a UI and connect to any database that’s convenient.
If you want to setup a server you’ll need to figure out how to communicate via http.
Making a Todo list app covers most of the “mundane” programmer problems in each language and is a byte sized problem (hehe). After that choose something bigger or post again. Good luck!
A strongly typed language (requires you to say what type of data is stored in variables) like C# is a good starter language. It’s not overly complex, it’s widely used, has a large ecosystem (lots of tutorials and libraries that easily provide functionality) and can be used to create games with Unity and Godot too. My advice is to set goals for yourself and work by creating projects small enough to finish in a couple days time. It’s very easy to get distracted and try to learn a lot and get burned out / overwhelmed. Creating an actually useful tool or making a game allows you to learn while also providing the motivation to continue.
Languages like C, C++ and Rust require you to also learn about memory management while learning the basics of programming, I recommend avoiding those. Dynamically typed languages such as JavaScript can be easier than others, but they also hide the type of data which impedes understanding, however, contrary to C, C++ and Rust I feel this tradeoff might be worth it in some cases.
Yes, i would also recommend C# as a starting point. It’s kind of a jack of all trades, master of some. But more importantly, it forces you to understand certain programming concepts you may not learn if you start with a language like Python or Javascript. Not knowing these concepts will cause problems as you get deeper into it.
And if you use Visual Studio 2022 on windows (not visual studio code), it will take away some of the initial pain points of setting up your environment and gets you straight to an executable program.
I couldn’t recommend it more as a first language.
And if you use Visual Studio 2022 on windows (not visual studio code), it will take away some of the initial pain points of setting up your environment and gets you straight to an executable program.
Rider is also a great option if you’re a student or own the JetBrains tools.
True, but my brain is too wired to VS2022/VSCode and i experienced slightly too much wonk whenever i try jetbrains stuff. I do think its is slightly worse in some ways but better in others. It is paid, but quite affordable. only downside is, when you inevitably move to other languages, youll have to get the jetbrains IDE for whichever language you want to use, whereas with VS, most keybinds and whatnot are transferrable to VScode. I do not enjoy VScode at all, but it is the best ide that covers all languages unfortunately. And what i’vs come to learn is that its much more productive to deal with it in exchange for the language support you get for literally everything in vscode.
The question is a bit too vague to answer, there’s not really any right answer.
Just - find what you like to do with it, and go for it. Want to make a game? Maybe play around with Godot or unreal engine or something.
Do you have any repetitive task that you’re doing a lot that you could maybe automate? - try doing that.
You can read some books or watch some tutorials or something, but the best way to actually learn is to actually program.
What’s your age? Ideally, you’ll want at least some knowledge about logic and logical operations: TRUE, FALSE, AND, OR, etc.
Following that, “which language” might be a rather tricky question. Python and Javascript are “good starters”, but they might also “teach” you some bad habits. They’re also highly sought after if you’re looking into possible future jobs.
Personally, I’d recommend starting with either Java or Go. Both have lots of learning material and plenty of jobs, but they should also put you in the “proper” mindset of programming.
I don’t think boolean logic is a necessary prerequisite for coding, if you don’t know it yet it makes more sense to learn about it when you come across a programing problem where you’ll want to use it imo
I second Java. It’s easy to get into, has a lot of materials online, and is statically typed which is great for teaching. Most people who start with Python or JS didn’t have a good grasp of variable types and often make more mistakes.
Pick Rust, learn Bevy, and make a Flappy Bird clone. Is it the best way? Who cares just get started.
You could mull over and discuss a million different ways to get started. The most important thing is to be decisive and just do
Pick Rust
Rust is renowned for being hard and frustrating to onboard onto. I don’t think this is a wise suggestion.
https://users.rust-lang.org/t/is-rust-lang-hard-for-a-beginner/93395/2
Rust is renowned for being hard and frustrating to onboard onto. I don’t think this is a wise suggestion.
You missed the point
You missed the point
What point do you think I missed?
What I said:
You could mull over and discuss a million different ways to get started. The most important thing is to be decisive and just do
We could go on for hours debating what the best beginner language, environment, project, etc is, but the important thing is that they pick something and do it.
I gave them a specific thing to get started on. That’s the important thing.
Learning programming is gonna be hard. They’re gonna face issues no matter what, so like I said:
Is it the best way? Who cares just get started
That’s why I said you missed the point. I don’t think you read my reply at all and just stopped at the first word lol
I get what you’re saying, and jumping in and getting started is exactly what OP needs to do. However, if they read your comment and take your advise, they might be inclined to take ALL your advice and starting them with a difficult language when they know nothing is probably a bad idea. It’s like you have embedded bad advise inside your good advise, and someone who knows nothing won’t be able to see that. If OP’s still reading these comments, just replace rust with C# or HTML/CSS depending on what you’re into and then reread KindaABigDyl’s first comment.
This is very over-exaggerated. A lot of people started with C or C++ as their first language. Both of which are significantly harder than learning Rust. In fact, I had a much easier time learning Rust than I had with Python and Java because the Rust compiler’s always had great error messages and documentation. Which then significantly boosted my ability to write C and C++. If, in an alternate reality, I had started learning programming today, I would recommend to my alternate self to start with Rust. Especially now that it’s gotten so much easier than when I had learned Rust when it was still in alpha. Error messages have gotten very detailed lately, to the point where many of them show the precise code to write to fix the error. The compiler’s also much less strict with borrowing and lifetimes.
This is very over-exaggerated. A lot of people started with C or C++ as their first language.
That took place over two decades ago. There were no better alternatives back then. Times have changed.
Both of which are significantly harder than learning Rust.
This is simply not true. It’s far simpler and less frustrating to work on either C or C++ for the simple reason that you can shoot yourself in the foot anywhere you’d like. In Rust, newbies have to alternative to endure the compiler enforcing its safety constraints anywhere they’d like. Rust is also a far more complex and extensive language that enforces memory safety rules that can and very often are very frustrating to handle by those who don’t have a firm grasp on them.
Agreed. I found learning C decades ago was a pain in the ass. And I found learning Rust last year was a huge pain in the ass.
I believe you’re mistakenly assuming it’s more difficult to work with than it really is. For example, imagine telling someone that pattern matching in Rust is more difficult than constructing unions and casting pointers in C. Even something as simple as string manipulation is a lot easier to do with Rust than in C or C++. I’ve worked with a number of people over the years that had little experience in programming outside Rust. It’s not that difficult.
You’re not making the strong case that you think you are. Quite the opposite. The ease of “shooting yourself in the foot” is precisely what makes it so difficult to learn. Segmentation faults and random memory corruption make it incredibly hard to get started with programming. The compiler typically providing no help at all for diagnosing where the memory handling flaws are. You need to learn how to use a debugger to get anywhere with fixing them. Many people give up when it gets too difficult to diagnose them
Rust’s constraints are very clear and concise in comparison, with a helpful compiler that will teach you how to handle memory correctly by pointing out the precise location where a borrow error occurs, and provides a suggestion for how to change your code to fix it. There’s never a question about whether a value will be passed or cloned. Cargo’s API documentation is also extensive in comparison to typical C or C++ documentation. It is a major boon for beginning programmers that the language ships a tool which automatically generates high quality documentation for every library you will ever use.
You’re not making the strong case that you think you are. Quite the opposite. The ease of “shooting yourself in the foot” is precisely what makes it so difficult to learn. Segmentation faults and random memory corruption make it incredibly hard to get started with programming.
That’s not the case, though. Some C and C++ compilers are already resilient and flexible enough to not get C and C++ to blow up in your face when you’re doing unmentionable things to memory access. Some memory safety issues are only noticeable when running profilers and memory safety tools.
Keep in mind you are talking about someone taking their first steps in writing software. They are struggling to get stuff to work, and throwing curve balls at them is not going to help them get on their feet.
Also, I did not advocated for C or C++ as better options. My point is that Rust is an awful suggestion as a first language, which even the Rust community states. It also speaks volumes to Rust’s unsuitability as a beginner programming language if the best attempt to refute that fact is to try to come up with worst alternatives that in the end aren’t even worse at all.
Rust’s constraints are very clear and concise in comparison (…)
Irrelevant. The point is that Rust enforces constraints that other programming languages don’t. If anyone is taking their first steps, not having to deal with them leads to a far more productive and enjoyable experience. It’s absurd to talk about memory-safety and performance when the target audience doesn’t even understand what memory is.
The Rust community is a very diverse group of people with many different opinions. It is not a universal truth that the Rust community believes Rust to be an awful first language. I’ve known plenty of people who started their careers with Rust. I started my career with Rust, too. The complaint with difficulty adapting to the borrow checker has been irrelevant since the 2021 edition of Rust. The borrow checker has become smarter about rearranging borrows and automatically tagging lifetimes in most cases. The remaining constraints that the compiler enforces are also hard requirements to learn when developing software in any other language. The same practices equally apply to all software. For example, mutating an array while iterating it in Python or JavaScript will lead to unexpected behavior. Python and JavaScript’s lack of a proper type system causes a lot of software to explode at runtime when you think inputs are always X but suddenly in one case it happens to be Y.
The Rust community is a very diverse group of people with many different opinions. It is not a universal truth that the Rust community believes Rust to be an awful first language.
You don’t need to take my word for it. Google the topic and go through all the discussions. Even the ones in Rust’s own forum get mixed responses, and that community is by its very nature very partial towards Rust.
Also, framing the discussion around newbies learning Rust as a first language is a strawman. The question is not whether if someone without any prior experience in programming can or cannot make and effort and write code in Rust. The question is which language to learn.
There are many programming languages to pick and choose from, and some are renowned to be very beginner friendly. Rust is not one of them.
If you want to make a case for Rust, it’s up to you to prove that Rust is a better language to take first steps than any other programming language around. In my personal opinion, it is simply not possible to claim that Rust is better for this particular usecase than quite a sizable set of programming languages, including but not limited to Python. If you want to claim Rust is better suited then you need to make a case for it, and that is a challenging thing to pull off.
If you’re coming in from zero, a good place to start is https://www.hedycode.com/
Hedy is a language specifically designed for learning. The things it does to ease the learning curve:
- Comes with an online lesson program, so no setup (try it now!)
- Has “levels” built-in to the language itself, to slowly introduce concepts and avoid accidentally running into harder/advanced things and getting stuck
- As levels advance, it slowly becomes Python, a very popular and ubiquitous programming language, so no “switching to the real thing later”.
- Is textual, so also no “switching to the real thing later” – it’s “real” from the start
My recommendation would be to go down the web dev route to start because it’s very easy to create things that you can share easily (everyone has a browser, but not everyone has python installed on their machine, or wants to open an executable). That can be a great motivator.
I still think App Academy’s free bootcamp is one of the most comprehensive resources to go from zero to making small web apps. It’s very hands-on and they have over 200hrs of material, discord community, and it was updated about a year ago. However, it can be quite daunting and you need to have good discipline to keep going.
https://www.appacademy.io/course/app-academy-open
Otherwise, as someone else mentioned, freecodeacademy is a good beginner resource.
Really depends on your age and interests
I started learning programming concepts as a teen by using RPG Maker. It introduced me to concepts such as variables, conditions, loops in a “low code” environment.
Thing is, I had a reachable goal which made it easier for me to learn and feel good as I had a tangible result. Things such as “I want to add a point everytime I touch X item” where very good for this.
IMO, I wouldn’t worry too much about the language at first and focus on small reachable goals you want to achieve. But to each his own way of learning.
Like games? You should probably check out GDevelop.
Want to automate some of your online tasks? Maybe n8n.io.
Also, it’s better if the tool you use starts with a high level of abstraction (it’s very esay to use) and allows you to add in some scripts.
If you want to go further, pick a language and go through the basics. And if you’re feeling even more adventurous, head to roadmap.sh to find a learning path towards your goal.
Edit: Also, ChatGPT is really good to teach you IF you always ask it to explain whatever you don’t fully understand in the code it writes
Thing is, I had a reachable goal which made it easier for me to learn and feel good as I had a tangible result.
IMO, this exact thing is what separates the people who succeed and those who give up. If you are only approaching the code as some abstract concept then it will never work. Anyone learning this stuff needs to understand that the code is more like a hammer to a carpenter than anything else… It’s a very physical tool used for doing a real job. If you don’t have any nails to hit, you’re not going to get anything done.
Python.
Start with an idea of something you’d like to make.
Start with a simple idea.
The clearer you describe the idea,
the easier it will be to code it.
Learn Python.I’m going to offer something a bit different. I’ll start by saying that I’ve never actually used it beyond a bit of tinkering and watching the presentation at the Strange Loop conference.a
The basic idea is that it’s actually pretty hard to do things wrong at the start, mostly because you just can’t do much. What you don’t get right has very clear descriptions of what you’ve done wrong, where, and even suggestions for corrections.
As you progress, you can do more and you have a very gradual transition to the more restrictive environment that most programming languages have.
By the time you are done, you are basically programming in Python, so further learning can take place using the myriad of courses, tutorials, and documentation available for that language.
I have no real experience with it beyond some basic tinkering. It is designed for classroom use, or at least on the assumption that there is a teacher or instructor available. That may not translate well to someone learning on their own.