Hello everyone. So I’m new to Linux, operating systems, and the like. I know a bit of programming (Java and a hint of others), so I was wondering how and where I should start contributing. But instead of asking you guys where I should start, can you guys tell me your story on how you started developing? It would give me an idea on how I should set up my roadmap. Thanks!
I switched to Linux almost out of necessity. I had a year-old eMachines laptop that had serious overheating issues, kept corrupting everything, and hosed my well-riced install of Windows XP.
By the end of that project, I had removed the entire laptop from the case. The motherboard was mounted to a Goodwill coffee table with screws, and I had a tabletop fan cooling it. (Of all the stuff I’ve accidentally deleted before I had backups, pictures of that "lap"top are the photos I miss most.)
I ended up using Linux because it was pretty much the only thing that would boot using a newfangled piece of tech called a “LiveCD” pioneered by Knoppix. Within a few months, I was already more productive on Linux than I was on Windows. Almost nothing worked automagically on Linux at that time, so having a working system meant you had to configure all of the parts, so you really got to know what you were working with.
This enabled me to start running a homelab, and I was serving my own websites from my office over a DSL line a few months after I switched. I told some geeky friends about it, and they got jealous of the control I had (full root!) when they were paying for shared hosting. A handful of them kicked me some money for server space and I ended up running a very small webhosting business while still in college.
Doing that kinda stuff ended up becoming my career and one of my biggest passions, and I became a decent programmer out of the necessity of being a good sysadmin.
My suggestion for getting started? Ignore your roadmap and chase a passion project. Generally, it’s a good idea to start small, but it’s really important that you start with something you actually use. Some small open source projects have a single developer, and is only used by a few hundred people, tops. It’s entirely possible that you’re the most qualified person on the planet to fix the bugs that piss you off (by virtue of being aware they exist).
Seeing improvement in a piece of software keeps you motivated, and the biggest skills you’ll develop aren’t coding skills but collaboration skills. Any idiot can learn to code (and many do), but learning to work with someone else to get improvements added in is a rare and valuable skill.
I made a basic automation script in VBA for some BS homework/test thing in the early 2000’s because you could run it in MS word or wherever without third party software on my school computers
Basically just find a small problem you want to fix for yourself, and try to fix it. That’s the best motivation
Thanks imhigh.today and tkoham for the responses!
imhigh.today: I loved reading your story cause literally I had to switch to Linux on my laptop cause Windows was very slow, so I felt your pain XD
tkoham: hmmm… i might try that “BS homework/test thing” ;).
I’ll definitely have to take an easier approach then haha. For sometime I’ve been trying to bake a new os into my android phone (Samsung Galaxy s3… so yeah not maintained by devs anymore)… really frustrating to find generalized beginner resources. I guess I’ll start by making a silly program then XD. Thxs for your help again!
And definitely start small. You can’t go from zero to kernel developer in one go. Trying something too complicated first will just mean you’re floundering around getting nowhere without any sort of payoff, get discouraged and give up. Hence the hello world thing for every language. You need something only a little more complex than hello world.
Find something that you’re doing repeatedly or something that is easy to screw up by human error, and figure out how to automate it via some sort of script. This is unfortunately one of the problems getting started now. Most of the basic, easy beginner problems are done.
Once you’ve figured out how to do it in a scripting language, maybe look into doing it via a proper compiler language like C or whatever.
Not for speed necessarily, but to learn a new language with a familiar problem.
Me? I started modifying/writing code (in C) for a MUD (adding/changing skills, classes, etc.) back in the day (during university), after i’d already done programming in high school (in Pascal) after messing around with programming in BASIC as a 6-10 year old kid.
That’s also how i originally got involved in Linux - to host a copy of it at home.
TLDR: Don’t try and run before you can walk. You need to chalk up some successes for yourself to keep motivated. So aim low to start with.
I don’t develop for Linux, its a tool for me rather, to use for programming, computer diagnostics or entertainment.
Hmmm, well for me learning code is boring as hell. I wanna play with the legos and I’m being given duplos. Well thats bullshit. And years ago I needed some code done to make my school’s machines run better. Tried to dev an windows xp because its what I had, and that was a failure. So found linux, found out tools weren’t 100+ from tardsoft, and I could get to work.
As far as being a linux user thats just how I started. Very soon after I realized windows was gone and this linux thing was all I had. I had ubuntu 9.04 or 9.06. It was shit. And gnome would crash constantly. So I looked up ‘linux for pentium m’ because I had a pentium m laptop, learned about PAE vs non-PAE kernels, found a thing called YLMF, and ran that fol about 2 years. I loved that os. It was shitty and chinese, and I couldn’t install anything from the repo’s or appstole, but it ran great, had an office suite built in, I figured out how to break packages and force install apps, installed an rpm once on that (it was a debian system don’t ask me how idk either but its possible), learned about makefiles and stopped furking with that, then my hp nc6000 died. Those mobo had hollible heat issues. By thattime I was working IT for the high school long enough I could take machines home.
Took home my first thinkpad in 2010. An IBM 600X. It couldn’t run YLMF, sadly, at least not well. Couldn’t run XP either it’d just crash. But it could run xubuntu 10.10! So I ran that till I accidentally killed my hald dlive 6 months later, then I was back on ylmf for another year tillI got an hp NW8000. The end all be all pentium m laptop. Hackable, 1600x1200 screen, 9600pro gpu, aww fuck yeah that ran ylmf great! Could handle video streams better than the 600x too (because it didn’t run at 650mhz). And the rest of it kinda tumbles into distro hopping.
When ylmf died I was on suse, when I got boled I was on ubuntu, when that pissed me off I was on… shit what was it. Some gentoo thing. Couldn’t figure that out and I found netrunner. Then I found arch. THEN Ifound a Netrunner branch BASED ON ARRH and the excitement just kinda turbospooled from then on.
That was 2013 or 2014 by that point with netrunner and I knew enough to know about the different driver stacks, how they interract with the kernel, how much oy a pain in the dick pulseaudio was and that I hated upstream because of pulseaudio… you get the picture.
Now I’d say I’m pretty plaficient in using linux 10 years later having oy used windows once in a while and even then not knowing what the hell I was doing with it. I now know more in linux than I’ll ewer know in windows and I’ll probably never be able to use it again. It either breaks or fails to do basic tasks I need to do. Not worth the hassle to me.
If you want to contribute to Linux, learn Python 3 and C. That’s what most of the system is written in.
If you’re asking about how to contribute to various projects on Linux or creating your own, do what makes you happy. If your work solves a problem or increases efficiency and productivity do it. If your work increases compatibility in some way, you will be a Godsend.
I say do what makes you happy because there will be a ton of naysayers and negative people putting you down no matter what you do. The community is the worst in that respect. They don’t want tools that work, they want things unnecessarily difficult and complex to keep casual and business users out.
There are a great deal of people opposed to this mentality, but you will rarely see them on the reddits or Linux forums because they’re busy working, collaborating, and contributing to making things better.
This is not meant as discouragement or to talk you out of it, just giving you the warning that so many need when starting out.
Computer Science degree. I had no interest in programming before that. My first two years of college, I still hated it. I was planning on just going deeper into systems administration. Still am, in some respects.
In my third year something clicked and it started vibing with me. I don’t appreciate how most software courses are taught, online and offline, but I had a couple of professors make up for it. The way I learned Python really tainted the language as a whole for me. I still hate working with it for the most part.
My first Linux contribution was on a version of CentOS 7 KVM that wouldn’t install an Ubuntu 64 bit server. This was before I knew about commits, VCS, and contributing in general so I fixed it in my system and spoke about it for a bit. Looks like someone got around to fixing it. I’m not claiming credit because I read a bunch of published fixes to figure it out, I’m sure one of those guys pushed it through. It was the first time I edited a Linux file on a core system and got it to work, though.
Dang thanks for all the comments even though I’m responding a month later ( got on the fortnite hype train lmao ). I definitely want to learn different languages you guys suggested, but some are a chore to get through , but I guess I’ll have to do it haha. Thanks I’ll definitely start out small and hopefully I’ll learn more in college . You guys are definitely waaaaaayy better than the other linux folks that I have encountered in my other expeditions to other sites
The fundamentals between most of the popular non-Object Oriented languages are mostly the same.
Python was suggested above, its probably a relatively safe starting point that actually has practical application. C is a lot more terse, requires knowledge of the concept of pointers, memory management, etc. which will just get in the way while starting out.
Used Windows as a teen, didn’t get along so much because you can’t do this, can’t do this, won’t let you see what is happening…
…used ubuntu warthy warhog because it looked like the most friendliest linux flavor and was hooked and in love and since then im using linux 90% of the time, since I use it at home and at work I have a very short patience for Win and its quirks.
And like most people: You wanna solve a problem but the tools are not there or you are not permitted to use them… So you get them yourself and start solving problems. Thats the Linux Essence i guess
@thro Yep, I have learned Java, but I think many people in the linux community don’t like Java . Would be helpful to learn Python and then go to C. Thanks for the help
@BookrV yep I know how you feel haha.
I started with Suse Linux 7.1 on an AMD K6. (I sill have that boxed copy ) I new nothing about programming. What helped me understand linux and the components that make it a full fledged desktop operating system was using the linux from scratch guide to make my own “distro”. It took me several weeks to get a working X server (a single compile run took about 20 hours), but what i learned then still serves me well today. Since compling a whole system by your self without using premade packages naturally creates an understanding how componentes interact with another. This made me capable enough to use any guide writen for any distro and adapt it to mine. At that point was no stranger to code and looking at it, i bought my self a book about c++ coding. Since it also explained regular c i got a basic understanding of system level coding. I even hacked a dirty fix in my self compiled kernels to make a buggy wifi device work , well 99.99% of the time, the other 0.01% the system just locked up, but hey: mostly working wifi.
All in all i created dozens of linux installs on my computers over the years in many different varities (selfmade, debian, slackware, suse, red hat, arch and many based off of them). That story spans nearly twenty years and my advice is start small. Find a piece of software you are passionate about. Understand how it works and try to improve it. If it lacks documentaion, wite it. If it has bugs report them. Or simply ask the creators how you can help them.
Tldr; to contribute does not mean to code stuff. Repot bugs, write guides or manuals, translate stuff if you know another language, take part in discussions about a piece of software you care about.
I started out by trying to learn C++ when I was in middle school. I didn’t get very far; I had a hard time wrapping my head around the idea of objects (I couldn’t understand what functionality objects brought to the table and it took me a long time to realize that they don’t add functionality, they’re a means of improving organization and readability). Someone suggested I learn C first so I did that and loved it, but I never went anywhere with it. I just kind of programmed as a minor hobby on and off for years until recently when I came to the realization that programming/computers was the only thing that has solidly kept my interest. Since then I’ve learned Python, some C++, and recently I’ve been learning Rust.
As for Linux, I was first exposed to it through the documentary “Revolution OS” and first started using it because my old Dell was running slow as molasses. I installed an (even then) outdated version of Ubuntu on it and fell in love almost immediately. The ease and power of the command line was what really hooked me, as well as how much cleaner software development as a process is for Linux is than for Windows.
I bought “C for dummies” and some book from softworx on Quick Basic.
Wrote compiled and ran “Hello World” in Masm, C and QuickBasic.
Realized that programmers are really really smart and decided to stay with driving a Truck for a living
In the 90’s I thought Linux was interesting but without backing from a large company like OS/2 or even GeoWorks or Plan 9 from Bell labs Linux had no future…boy was I wrong!
@hallekamp yeah i really want to program haha but you make a solid point in doing other things as well. I guess I’ll try that after I learn more programming languages (only know java rn XD)
@Bombadillo thanks for putting it in a realistic situation. I too have been on and off with programming (been watching anime recently :P) but the people here are really inspiring haha. thank you
@trucker i don’t think you give yourself much credit haha. u can still learn if you want to