I was recently dismissed from my uni where I was planning on studying compsci (mostly had to do with my very bad grades from the semester I tried to major in mechanical engineering but I degress). My hope is to contribute to the FOSS ecosystem as a developer, but as it stands I have very little experience programming. I feel I have a rather strong conceptual understanding of how computers work, but I still don't know how to talk to them. As school is no longer an option, I am unsure how to proceed. I currently am hoping to learn c and to use it to write a utility for managing multiple ttys with simultaneously different DEs and WMs on a linux system but I feel this project is too ambitious for my novice self. Are there any projects or advice y'all have, any would be greatly appreciated. Anyway regardless I hope you are doing well :)
Pick a FOSS project that you use, check out its source code, fix a problem that affects you and contribute the fix back to the project.<p>After doing that for a while, check out the internships and bounties sections of the FOSSjobs wiki for opportunities to get paid for contributing to FOSS.<p><a href="https://github.com/fossjobs/fossjobs/wiki/resources">https://github.com/fossjobs/fossjobs/wiki/resources</a>
<a href="https://www.fossjobs.net/" rel="nofollow">https://www.fossjobs.net/</a>
HtDP [0], CS50x [1], and whatever strikes your interest from teachyourselfcs [2], in that order.<p>Also highly recommend the book for nand2Tetris after CS50.<p>[0] <a href="https://htdp.org/2023-8-14/Book/index.html" rel="nofollow">https://htdp.org/2023-8-14/Book/index.html</a><p>[1] <a href="https://www.edx.org/learn/computer-science/harvard-university-cs50-s-introduction-to-computer-science" rel="nofollow">https://www.edx.org/learn/computer-science/harvard-universit...</a><p>[2] <a href="https://teachyourselfcs.com/" rel="nofollow">https://teachyourselfcs.com/</a>
<i>My hope is to contribute to the FOSS ecosystem as a developer</i><p>This is too vague to be worthwhile as a course of action.<p><i>write a utility for managing multiple ttys with simultaneously different DEs and WMs on a linux system</i><p>This is a concrete goal.<p><i>I currently am hoping to learn c and to use it to</i><p>This is an excuse for not executing on the concrete goal.<p>Start writing the tool in Javascript, C#, Python, Racket whatever is easiest to execute in...and they are each and all hard because programming is hard.<p>Because starting to write code is how you learn to write code.<p>And the simplest way to contribute to a FOSS project is to write some code yourself and make it FOSS.<p>Good luck.
I would start with Python (or <i>maybe</i> Java) and then graduate to C. And, if you ever mess with C++, don't let it fool you that it's an easy/beginner language; it's actually the hardest and deepest language of them all, masquerading as a shallow pond. ;p