Advent of Code is a fun collection of programming challenges ranging from trivial to moderate. It starts every year in December (obviously), but all the past challenges are still available: https://adventofcode.com/
Yeah, this is also useful when learning a new programming language, even when you are an experienced coder, already.
I posted this a couple weeks ago but I think it’s a solid answer for someone looking to learn programming:
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.
I think you asked about how to improve a few days ago, so I’ll answer now about how to start learning programming. In a lot of ways, programming is describing what you want the computer to do, but in a language it understands. So half the effort is building an intuition of how to break down a task into individual parts which the computer can work on, and the other half is to actually write the instructions for the computer.
The first part is common to all the engineering fields, but shows up elsewhere like in art (eg deconstructing a human face into drawable geometric shapes), daily life (eg navigating a car or public transit by making various left and right turns in a certain order) and other fields; familiarity with any of these will put you a step forward. Basic programming tutorials are useful in developing an awareness of what a computer can easily work on, and by exception, what it cannot.
The second part requires learning the programming language and its grammar, which I think the general curriculum for programming courses or online tutorials mostly has covered. If you’re already familiar with an existing programming language, then a new language can be framed as a translation from the first, mostly. Some features don’t translate at all – eg explaining Rust memory ownership to a C programmer – so those will have to be rote learned.
Learning by doing! Personally the best learning experience I had, was going to the roguelikedev subreddit, picking a tutorial in the language of my choice and diving right in.
This has many benefits: It’s beginner friendly since pretty much all of these tutorials start from scratch and have a gentle learning curve so you don’t need any prior experience. Because you’re creating a game, you can just have fun exploring all kinds of nonsense.
This will keep you engaged and learning programming/languages comes naturally as you’re looking to find ways for implementing whatever you want to try out in the game. Game development inherently touches a lot of different concepts, so you’ll be learning many different facets of the language.
After the tutorial is done you can keep developing your game and continue growing with it. Or, if long-term commitments are not your thing, throw it away and start a new better game, applying all the lessons learned, right from the start this time. It’s all up to you.
For me, personally, working on an actual project is much more conducive to picking up all the little details of software development, rather than doing small disjointed leet code exercises.
Udemy.
The catch is, unfortunately 95% of the courses there are trash, and it can be a real challenge to find those 5% that are actually valuable.
Edit: on Udemy, there are almost always discounts. If you don’t see prices around €12-20, just wait a week or two.
Can you list ones you found valuable?
- Bret Fischer’ Docker courses
- Maximilian Schwarzmüller’s JS courses are said to be good, I only tried his Vue course, that one is indeed good.
- Mosh Hamedani had great C# courses, but sadly he hasn’t been updating them, so by now they’re outdated. Could be still relevant for the basics.
- Asim Hussain’s JS courses
- Aaron Parecki’s The Nuts and Bolts of OAuth - I’ve found it a straight to the point explanation of the basics that should be enough for smaller projects, and also enough for you to make your further research when you need it.
- Not programming, but I would put Kody Amour’s math courses here as well.
- Nathan Stocks’ Rust courses are fine. I got them for free, if you watch out, you might find him posting coupon codes for free access to his courses. I haven’t found them especially excellent, but for free they’re actually pretty good.
Lol I feel so old reading these replies… I learnt copying BASIC games from magazines and typing them manually on the computer.
But jokes apart, when it comes to learning, I think the best thing is to tinker with weather language you choose and don’t worry about making the “right choices” since the start. Forget about writing “pythonic” code and don’t worry about being “idiomatic”: just build something. Building good software is not just constructs, but also knowning which subsystem to improve and when. That’s what makes experience.
When it comes to improving, you can dig deep into the language.
MDN for non javascript/frontend programming?
Do as many exercises as you can from sites like rubyquiz.com. Use any language you like and just skip problems that are Ruby specific. Don’t stop just because you reach a working solution. Spend lots of time editing and reorganizing your code to make it clean and clear. With practice that will come to you more naturally but you have to put in effort to develop the habits.
Also, get other people to review your code. There are subreddits for that on the old site. Here I guess just use !programming.
It’s Kata code challenges but highly tuned to specific tools of a language. There’s an Elixir kata for GenServers for example.
You can also request one on one code reviews from a volunteer mentor. Really great community and they have grown way beyond just Elixir in the last few years.
I keep up with all the tech news and new shiny stuff via daily.dev. It’s pretty cool to read a few articles when commuting to work, or when taking a shit.
I’d give it a try, but I can’t see anything before being asked to sign up.
Websites that do that just leave a bad taste in my mouth, asking for your information before they’ve even shown you what you’ll get for doing so.
You do you, I am almost sure they weren’t gated behind registration when I started using it like a year ago.
This might sound silly but I think that coding challenges like HackerRank, CodeSignal help me improve/learn programming.
At first I thought they were utter crap, and recruiters used them to test candidates on artificial problems that matter nothing and reflected no relevant skill. I still do, they are awful at that. What a complete waste of time and effort.
However, these coding challenges are like crossword puzzles. They present us with nonsense challenges that provide us with the opportunity to employ obscure programming constructs on a multitude of programming languages in a way that rarely happen in real world professional settings. I use them to explore obscure corners of standard libraries, solve the same problem in multiple ways, employ different idiomatic ways to iterate over data structures, etc. That’s helpful in a way.
They force you think of o(n) and train you better than anything else on how to write your functions (but not how to organise them).
I have around 600 leetcode exercises solved, and there’s a big difference in skill between the person i was before leetcode and the person i am now.
They force you think of o(n) and train you better than anything else on how to write your functions (but not how to organise them).
I agree. I think it’s all about blind spots. A software engineer spends most of the time reading code, and the changesets they write most of the time are not algorithms or any fancy iteration beyond doing a vanilla for loop over a collection. leetcode-type exercises tend to invert that tendency, and present us with challenges which we would only rarely tackle. It’s a good exercise in the sense that it forces a type of usecase we don’t often use. Still, their practical usefulness beyond coding crossword puzzles is very limited.
repl.it and codekata.com or codewars.com
edabit too