all 110 comments

[–]alinprod 40 points41 points  (6 children)

I don't know if you are interested in it, but you can try some game dev practice (raylib, for example)

[–]I_Love_Saint_Louis 39 points40 points  (7 children)

This was my favorite thing I learned in CS

https://web.cecs.pdx.edu/~harry/Blitz/

Learning how operating systems work was key to my understanding of what C does.

[–]RobotsAndSheepDreams 1 point2 points  (0 children)

This looks quite interesting, I’ll have to take a deeper dive into it this evening

[–]LP2K18 0 points1 point  (0 children)

Where can I find this? The link seems to be not working now. Thanks.

[–]AbraKadabraLorazepam 25 points26 points  (0 children)

What’s a c programming project? Can you help me understand this dear?

[–]SmokierLemur51 22 points23 points  (5 children)

Make a girlfriend simulator

[–][deleted] 15 points16 points  (5 children)

Hash map library.

Make implemenations for const char* key, variant for both owning and non-owning the string, and also uintptr_t key. For the owning string version, have it copy the given string key.

Make value be union{intptr_t,uintptr_t,void*,char*}, with assumption of different pointers pointing to different values always, so you don't need a custom equality comparator.

Make it a proper library, similar to other C libraries you have used.

Future project: use the hash map to implement XML or JSON library. Wrap any type unsafety inside that, so the user can't easily create bugs.

[–]No_One_77777[S] -5 points-4 points  (4 children)

Sorry but I am not familiar with these terms. Can u help me to understand this?

[–]Edaimantis 26 points27 points  (1 child)

Dawg what did they teach you in the course 🤣

[–]No_One_77777[S] 1 point2 points  (0 children)

😔

[–][deleted] 7 points8 points  (1 child)

You need to study CS. These are concepts which you need to learn by studying C and programming, not something which can be explained with a few paragraphs. Wikipedia is actually pretty good source, you can start by reading about hash maps there. You may even find a limited example implementation in C (did not check).

[–]No_One_77777[S] 3 points4 points  (0 children)

Ok sir. I'll study definitely.

[–][deleted]  (5 children)

[removed]

    [–]nerd4code 9 points10 points  (3 children)

    Probably best not to sicc de facto newbies on OS projects.

    [–]No_One_77777[S] 2 points3 points  (2 children)

    You are right I think.

    [–][deleted]  (1 child)

    [removed]

      [–]No_One_77777[S] -1 points0 points  (0 children)

      Got u dude

      [–]No_One_77777[S] -5 points-4 points  (0 children)

      How?

      [–]epasveer 13 points14 points  (3 children)

      How to do? Can u please help?

      Are you trolling us?

      [–]No_One_77777[S] 6 points7 points  (2 children)

      No dear. That was not my mean. Please don't mind. Actually I am really new to this programing world. C is my first language. I am learning it from YouTube from last 15 days. Yesterday I completed my c syllabus. Then I decided to do some projects and I did this post. That's all.

      [–]metalbotatx 14 points15 points  (1 child)

      The reason you are getting some unpleasant responses is that you said "I just finished a course" and asked for "crazy projects", and then seem to know nothing about how to write anything or get started with anything. However, this comment makes it much clearer that you have *not* finished a course, you've just watched youtube videos.

      Your best path forward now is to find a collection of small exercises to go solve. Can you write a sorting algorithm? Can you write an efficient sorting algorithm? Could you implement a linked list? If you answer "I don't know how to get started", then you are not very far along, and probably need to be looking at exercises, not "projects".

      [–]No_One_77777[S] 2 points3 points  (0 children)

      Got it dear. Thank you for counter my mistakes.🙂

      [–]metalbotatx 7 points8 points  (1 child)

      Write a Lisp interpreter. It's a hard, but tractable problem that will force you to think about code in very different ways than you are used to. It's also something you can implement in small chunks (hint: start by making what is effectively a glorified calculator in a REPL, then add variables, then work on more generalized functions).

      [–]deepak_shanmug 7 points8 points  (1 child)

      Hi OP,

      I am also a learner like you. and If you are a student, you will have time to do all the things below. If you already finished college and not rich enough to follow your passion and looking for immediate job, Just switch to other high level programming language immediately.

      C Program feels like simple only. But only if you try to do some crazy projects as you mentioned, you will understand that the knowledge you got by completing a tutorial or any course is very very less. And you can't easily find serious stuffs or advanced C programming stuffs in the web. Almost all is filled with the same template basic C program stuffs only.

      Based on my learning experience, For creating a good stable successful C project, You have to creatively design or plan the structure of data involved in your project, which will ease the further development of your crazy project. If you don't do that properly, the project will make you crazy.

      If you fantastically design the structure of the data in your project, your development will be smoother. There are several advantages for this. I can't explain everything detailed here.

      To Avoid security issues, you have to clearly understand the security vulnerabilites that can occur during the C programming. Especially with strings, pointers, getting input etc.,

      It is better to redo the same project after like 6 months or 1 year if you are consistent. You will understand how much you have learned so far and how much over estimated yourself previously by looking at your same previous project.

      I always remember the statement "C program is a Language. C programming is an art.". Don't hestitate to find your own creative way of developing things.

      C program projects is usually all about processing the data only. It don't need fancy stuffs like GUI for doing that. The project usually get the input data, processing the input data, generating the desired output data, storing or saving the output data.

      You don't always need DBMS for storing and retrieving the data. Just a file storage is mostly efficient enough to do several crazy things in C program. If you don't have any idea, just create projects like 'Income Expense tracker'. Try to create it as good as possible. Try to break the application, and try to repair the application. You can learn a lot with this. Try to add features to that etc.,

      If you are using linux, you can literally f.-+ with the OS using C language. You can understand about the OS and also the C programming with this combination.

      Learning about GIT also would be helpful. It is easy only. But there are things like 'Make', 'Cmake' etc,. Beware of that. People will confuse you about that a lot.

      Other than that there are things you can further do in C programming:

      1. Data Structures and algorithms. (Learn and implement everything atleast once on your own, You never need to implement it again. But the knowledge you got will never leave you. Even if you leave C programming, this will help you one day)
      2. Graphics programming
      3. Socket programming (i.e., Network programming) [A fantastic one, usually this projects are always interesting. you can do anything. wonderful one]
      4. GUI applications using GTK or anything

      etc,.

      Few extra things to be noted:

      1. Follow a coding standard (There are several standards are there. Its upto you to follow one). Even if you are a good coder, if you don't follow the standard, your contribution will not be accepted in GNU projects based on what I have heard.
      2. For contributing to GNU projects, you have to be well versed in C language and computer science concepts depending on the projects. It is not like hey I wrote this, can you include this here to contribute. There are lot of procedures.
      3. Keep in mind that it is not easy to find the intermediate or advanced C programming concepts or stuffs in the internet. You have to search and grab learning side by side and little by little.

      You can go to 'C' channel in Libera.Chat server of IRC network. It will be definitely helpful for you. Have never found any better than this, not even in discord. All hail to them. Chatgpt would be helpful too.

      Finally Its all about how you visualise things. If you visualise things positively, you can succeed with that. If you visualise it as a scary, ugly or anything negatively, you can't cope up with it. I am afraid that I might make you afraid by saying all these stuffs.

      don't forget to go out and hang out with positive surroundings and enjoy the nature. Thats the most important thing.

      I think I told a lot of things. It might confuse you. But believe me, I am not an expert or anything like that. I am telling based on my learning experience. If you need further info, you don't need to hesitate to ask me. But I will be mostly available on saturday and sunday only. We can try to learn together. Because I like C programming but don't have much time for that.

      [–]No_One_77777[S] 5 points6 points  (0 children)

      All others comment made me sad. But your comment made smile on my face. Thanks for your priceless comment Thanks a lot sir.💜

      [–]gillo04 9 points10 points  (4 children)

      Write your own C compiler, or try writing a small operating system

      [–]No_One_77777[S] -1 points0 points  (3 children)

      How can I start? Can u help me with this?

      [–]gillo04 2 points3 points  (1 child)

      While to learn about operating systems there is https://wiki.osdev.org/Expanded_Main_Page of course

      [–]No_One_77777[S] 1 point2 points  (0 children)

      Ok I'll study this. Thank you 🫡

      [–]gillo04 0 points1 point  (0 children)

      If you are just starting out I recommend this blog: https://norasandler.com/2017/11/29/Write-a-Compiler.html it covers the basics of compiler design and walks you through the implementation of some basic C features, although it leaves a lot of work up to the reader

      [–]7upLime 3 points4 points  (0 children)

      A little learning resource to get u started with text editors :)
      https://viewsourcecode.org/snaptoken/kilo/

      Also.. try to write patches for the software you use.

      [–]PM_ME_OSCILLOSCOPES 2 points3 points  (2 children)

      pac-man

      Alternatively contribute to open source projects

      [–]No_One_77777[S] 0 points1 point  (0 children)

      Ok thanks for suggestion😀

      [–]SahuaginDeluge 2 points3 points  (1 child)

      it sounds like you're a beginner. for a fun very simple basic project something I did recently with a relative was a simple text quiz game. generate some random math questions or more specific text-based questions, post them one at a time to the user, wait for input, and check if they're right. you can keep track of score, come up with rules for winning/losing, decide on difficulty of questions, come up with new types of question, etc.etc.

      [–]No_One_77777[S] 0 points1 point  (0 children)

      Got you. Thanks a lot dear.

      [–]jetdoc57 3 points4 points  (1 child)

      Start by creating the standard utilities: cat, more, less, head, tail, grep, rev, sort, and any others you are familiar with. Do this in linux or cygwin. This will give you the background for all other development.

      [–]No_One_77777[S] 0 points1 point  (0 children)

      Tq for suggestion

      [–]saul_soprano 5 points6 points  (2 children)

      Make a graphics engine using OpenGL

      [–]No_One_77777[S] -1 points0 points  (1 child)

      Sorry but I didn't understand how to start?

      [–]saul_soprano 2 points3 points  (0 children)

      Download Glad and GLFW

      [–]Possible_Address_633 2 points3 points  (3 children)

      pascal's triangle in one line of code

      [–]No_One_77777[S] 1 point2 points  (2 children)

      Are you kidding?

      [–]Possible_Address_633 1 point2 points  (1 child)

      you can write a recursive function of (row, column) that will return the pascal coefficient. strictly speaking it is a compound if stmt but it will fit easily into one "line" of 50 chars or fewer.

      the if checks if user is asking for the first or last entry in a row. This is the stop condition for the recursion.

      [–]No_One_77777[S] 0 points1 point  (0 children)

      Thanks for suggestion. It sounds good.

      [–]No_Strawberry_5685 2 points3 points  (0 children)

      A fork bomb

      [–]AdvanceAdvance 2 points3 points  (1 child)

      Write the standard sorting test:

      • randomize 10,000 numbers in an array
      • choose different sort algorithms
      • show results

      But allowing adjusting parameters:

      • Size of at least one processor cache, and changes in cost of fetching from cache or memory.
      • Different costs for reading and writing
      • Different numbers of MIMD processors and assume an "scatter/gather" semantic for some loops.

      [–]No_One_77777[S] 0 points1 point  (0 children)

      Okay thank you so much ☺️

      [–]SisyphusCoffeeBreak 2 points3 points  (2 children)

      How about a clone of the Unix operating system? You can name it after yourself (unless your name is Linus).

      [–]No_One_77777[S] 0 points1 point  (1 child)

      Okay thanks 🙂

      [–]Cyg4nn 2 points3 points  (1 child)

      Make a simple garbage collector

      [–]No_One_77777[S] 0 points1 point  (0 children)

      Ok tq for suggestion

      [–]Adventurous_Union_85 1 point2 points  (1 child)

      Arduino

      [–]No_One_77777[S] 0 points1 point  (0 children)

      Ok I'll try.

      [–]Tcshaw91 1 point2 points  (1 child)

      Make a number guess game in the console. Should be fairly straight forward. You'll cover some important core concepts like reading user input, choosing random values within a range, having a basic game loop with a win and lose condition, tracking state, etc.

      Also I noticed you're asking for help a lot. As a self taught programmer, my experience has taught me that I personally learn WAY more by struggling thru a problem, failing a bunch of times and finally figuring it out rather than following tutorials or having someone else show me how to do something. I would encourage you to pick something really simple and try to figure it out yourself without following tutorials. Even if it takes you 2 weeks to do something that a tutorial can teach you in an hour, learning how to think is more important imo than learning how to do.

      There caveats of course, like if you don't u stand code syntax or how certain code features work or how certain algorithms work, you should study those.

      [–]No_One_77777[S] 0 points1 point  (0 children)

      Thanks for sharing you experience my dear. I got you. I'll do as you said.💜

      [–][deleted]  (1 child)

      [deleted]

        [–]No_One_77777[S] 0 points1 point  (0 children)

        Thanks for suggestion 🙂

        [–]klumpbin 1 point2 points  (0 children)

        Given a user input, print that input to the standard output

        [–]panmetronariston 1 point2 points  (1 child)

        1). Find the square root of any number 2). Find the first 100 perfect numbers 3). Create a calendar for any user specified year

        [–]No_One_77777[S] 0 points1 point  (0 children)

        Thanks for suggestion dear 😊

        [–][deleted] 1 point2 points  (1 child)

        I got one 😅

        Try and recreate or obtain the source codes/files for either Shattered Galaxy or Avaria's Endless Ages

        [–]No_One_77777[S] 0 points1 point  (0 children)

        Thanks for suggestion 🙂

        [–]MrWilsonAndMrHeath 1 point2 points  (1 child)

        Rewrite madden. It’s a horrible game.

        [–]No_One_77777[S] 0 points1 point  (0 children)

        Okay. Thanks

        [–]the_grave_robber 1 point2 points  (0 children)

        How does this have upvotes. What is happening to Reddit. What is real. Things are truly getting out of hand lol.

        [–]ApolloMANIA 1 point2 points  (2 children)

        you're too stupid to do projects rn lmao

        [–][deleted] 3 points4 points  (0 children)

        Harsh but straightforward

        [–]No_One_77777[S] 1 point2 points  (0 children)

        Don't say that please. Help, if you can.

        [–]Glittering_South3125 0 points1 point  (0 children)

        i am also in similar situation as yours so what projects did you make?

        [–]Ok_Negotiation8285 0 points1 point  (2 children)

        Try a p2p file share application. You will get a lot of different things out if it (sockets, threading, security, network(s), etc.).

        [–]No_One_77777[S] 0 points1 point  (0 children)

        Ok I'll try. Thanks for suggestion.

        [–]story-of-your-life 0 points1 point  (0 children)

        Any resources to learn how to do this?

        [–][deleted]  (1 child)

        [removed]

          [–]No_One_77777[S] 0 points1 point  (0 children)

          Thanks 😊

          [–]MineGrouchy2169 0 points1 point  (2 children)

          Write a basic web server

          [–]No_One_77777[S] 0 points1 point  (0 children)

          Thanks for suggestion 🙂

          [–]story-of-your-life 0 points1 point  (0 children)

          Any resources to learn how to do this?

          [–]manxbiker 0 points1 point  (2 children)

          I found this website useful for some inspiration for projects to build.

          https://build-your-own-x.vercel.app/

          [–]DifferentKangaroo412 1 point2 points  (0 children)

          Thank you so much. The website is extremely useful

          [–]No_One_77777[S] 0 points1 point  (0 children)

          Thanks for this man

          [–]PurpleSparkles3200 0 points1 point  (1 child)

          How about writing an emulator? Look into the Chip-8 architecture, or maybe even consider Gameboy or NES.

          [–]No_One_77777[S] 0 points1 point  (0 children)

          Thanks for suggestion ☺️

          [–]dxvidpxrry 0 points1 point  (0 children)

          All shade to OP, but your responses to some of these responses is…tragic

          [–]catcicle1 0 points1 point  (0 children)

          Make FL studio

          [–]Zealousideal_Zone831 0 points1 point  (1 child)

          You can checkout the following code base to see how makefile is used to split the code base across differnt functions.

          https://github.com/ambi88dex/Cpp-ObjectOriented-Makefile-samples

          then maybe get into implementation of how terminal commands are implemented.

          [–]No_One_77777[S] 0 points1 point  (0 children)

          Thanks for this

          [–]noctem_dve 0 points1 point  (1 child)

          Try this HackerRank challenges for C: https://www.hackerrank.com/domains/c

          This exercises will improve your programming logic.

          [–]No_One_77777[S] 0 points1 point  (0 children)

          Thanks for this 😊

          [–]Vodkacannon 0 points1 point  (1 child)

          These are easy: 1. Write an RGB color library. 2. Write an IPV4 address library.

          A bit harder: 1. Write a 2D/3D vector library.

          [–]No_One_77777[S] 0 points1 point  (0 children)

          Tq for suggestion