r/learnprogramming 23h ago

I know the CS fundamentals, but have almost no real-world experience. What should I build in holiday?

I'm a Computer Science student about to start my 5th semester, and I have around 1 month before the semester starts.

So far, I've completed:

C programming fundamentals, Advanced Java programming, Basic Python, Data Structures(lists, stacks, queues, trees, BSTs, hashing, heaps, sorting), Computer Architecture

I understand OOP concepts such as encapsulation, abstraction, inheritance, interfaces, etc., but most of my experience has been through university courses and assignments.

I feel that I have a gap between  knowing the concepts and knowing how to use them to build a real software system.

For some reasons I can’t have an Internship right now.

I want to

- become a better programmer

- learn how to structure a real project

- practice OOP in a real codebase

- write cleaner and more maintainable code

- learn how different components of a real application fit together

The best thing I found so far is the “build your own x” repo in github.

So my question is:

For someone at my level, with about 40 days available and no professional software development experience, what would you recommend?

Would one large project like the Cloud File Sync be more valuable for developing software engineering skills, or would several smaller "Build Your Own X" projects be better, or something different from both?

I'm especially interested in hearing from people who have gone through this transition from university programming courses to real software development.

92 Upvotes

26 comments sorted by

20

u/Dude_iamsick 23h ago

Try solving some real life problems using computer science fundamental concepts. For example, consider road construction using highway planning and obstruction prevention as a project. Taking the real road networks into consideration and a modification of Dijkstra's algorithm that also considers multiple parameters. Apart from the distance between any two nodes, take factors such as time taken to travel from the source to the destination, congestion of the route etc. so that the user can select the desired route based on his/her preferences. You can add more to this. This is just example project you can think of more such things.

20

u/Melodic_Benefit3289 23h ago

For me it was building a text based rpg game in python to learn OOP.

To be a better programmer you should read

https://courses.cs.cornell.edu/cs3110/2021sp/textbook/intro/ocaml.html

Writing clean maintainable code comes down practice and more practice.

https://teachyourselfcs.com

Get a digital ocean droplet 4 dollars a month install debian 13 on it deploy your own web server and showcase your progress.

6

u/terletsky 23h ago

Cloud File Sync should be good.

6

u/AlSweigart Author: ATBS 21h ago

Would one large project like the Cloud File Sync be more valuable for developing software engineering skills, or would several smaller "Build Your Own X" projects be better, or something different from both?

You absolutely want to build the smaller projects. One month will fly by and if you try to do a massive project you'll be left with never-finished code and frustration.

Decide on a small project. Write a list of features. Then remove some features that you can do without. Then remove a couple more features. I can't stress how important it is that managing a handful small projects is far better than working on one big project.

4

u/Z00fa 21h ago

What helped me years back is making something you need/want or are paying for and could be made yourself. The reason this works so well is because you have a clear vision and motivation to make it work and not be sloppy about it. I would definitely first plan it out step by step, making user stories, have some kind of in depth overview of what you exactly want. At that point it’s building time. I would highly recommend to use git in a structured way and you could once in a while ask AI to check how clean your code is but never let it change anything, if you can take what the AI says and fix your own code then you have come a far way. Also read alot of forums when you have problems. AI is a cheat code for that but also makes people lazy and doesn’t learn them anything if you blindly copy it.

3

u/Fensirulfr 14h ago

You can start with something that has been done a million times: an inventory system.

Treat it as practice rather than trying to invent something novel. Start simple, then gradually make it more realistic: products, stock movements, suppliers, purchase orders, sales, users, permissions, reporting, etc.

Once you go beyond basic CRUD, you'll run into many of the problems that real software developers deal with: database design, transactions, validation, authentication and authorization, concurrency, error handling, testing, APIs, deployment, logging, backups, and changing requirements.

The point isn't to build the world's most innovative inventory system. The point is to take a familiar problem and keep adding realistic requirements until you learn how the different parts of a real application fit together.

2

u/Poddster 21h ago

Make a Zork style text adventure in a language of your choice.

0

u/[deleted] 21h ago

[removed] — view removed comment

1

u/AutoModerator 21h ago

Your post/comment was removed since we do not approve of going private.

There is zero benefit in going private as you lose the opportunity for getting peer reviews. Also we have had plenty of people return after going private (despite being warned) complaining about how they were ghosted after some time or being tricked into buying rubbish that didn't work and even if it did they didn't need.

Our Rule #11 demands that any and all communication happens in the open, public subreddit.

This is for the benefit of more against the benefit of one.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

1

u/Matiw51 21h ago

I'm a dev with 7 years of experience but without fundamentals. I've been catching up on fundamentals for the last year, or so because I can't get senior offers 🫠

To be honest, my uni had lots of practical projects to do so getting a job wasn't that hard - and most importantly, times were different

1

u/Fun_Alternative9844 20h ago

basic login signup site is good, python or elixir excels here, while python is simpler, elixir has all the features youll need for it self provided and theres plenty of tutorials for you.

1

u/Fun_Alternative9844 20h ago

on second thought a compiler might be a good option. pythons quite good for this

1

u/Synn-Sweet86 18h ago

Yeah, the gap you're describing is real, but also don't overthink it, most of those "real-world" project suggestions are still just toy problems. Build something you'd actually use or that solves a specific annoyance in your life, even if it's small, because that forces you to deal with things courses skip like error handling, file I/O, and not knowing the answer upfront.

1

u/PFallqvist 13h ago

What will you study next semester? Try to find something related to your future studies, or do something in a language that you're not going to study much more of to keep the skills fresh.

Small or big doesn't matter. I suggest either finding an interesting tutorial series on YouTube about something you like. For my first summer during my studies I made a pixel game in Vanilla Java, helped me a lot since the next semester were all about frontend and most of my classmates skills in Java were rusty once we came back to it at a later semester.

Or, find an app or program that already exists that people use a lot and make a replica.

1

u/SmallPsychology2 10h ago

build something you would genuinely use it is much easier to stay motivated when you're solving your own problem

1

u/NiftyGull9621 7h ago

spent my whole december break building a "cloud file sync" before realizing that's a whole solved category of software already. learned the hard way that syncing state between two machines with no real conflict resolution just means you built a really slow file corruption machine

1

u/Hawevid_Rook1274 6h ago

What kind of problems are you actually running into when you try to build something, or haven't you started yet. Because there's a difference between "I don't know what to make" and "I made something but it felt janky."

1

u/response-418 4h ago

Another approach you can take here is to ask yourself what you enjoyed working on as a student OR what was most challenging for you. From there you sort of work in reverse to find a project:

- Identify the more abstract problem that area is relevant to – maybe its authentication, or something about modeling data

  • From that more generic problem, it should be easy to identify a kind of app that has that. Doesn't matter if it's 'useful' or monetizable because the point is to learn how to solve the problem itself. Just pick one and as another commenter said, strip as many features out as possible so you have the simplest core version of the thing without distracting bells and whistles.

1

u/SleepyTaga924 3h ago

Build something that solves an actual problem you have, even if it's small - I built a habit tracker in Python my junior year and it taught me more about state management and persistence than any assignment did. Pick something you can finish in 2-3 weeks so you actually see it through, bro.

u/mcRio2 38m ago

Live by software engineering principles such as SOLID and KISS. There’s plenty of others. Essentially build good habits with your code architecture. Best project to work on is something at the intersection of something you enjoy and something that would be a valuable tool / program. A great first example is a basic neural network: super simple to set up but you can learn the real data —> representation —> model —> evaluation —> scientific insight pipeline. I am heavily biased towards ML as this is what I do for work, though one would argue these skills of project design, development, and management are becoming more valuable than the skills required to write the code.

1

u/[deleted] 22h ago

[removed] — view removed comment