Skip Navigation

What is really meant by "programming" when people say they like to use linux for it?

I've always wanted to understand what is actually meant by this. I have wanted to get into programming for years, did some basic python and c, but could never really progress. Not necessarily a linux question but I know since most distros come with libraries already, it's popular to use for programming.

I have trouble understanding what people are actually programming if it isn't their job. Like, you go to your computer and start working on...what? I don't know enough to make an entire program or debug a game, so im just unsure what people do especially when starting out.

Also I don't really want to learn it for a job. I just want to learn it to know it. But im not sure how to apply it to anything realistic.

46 comments
  • So, I make things for myself to replace commercial software that either doesn't exist or that is becoming (or will become) enshittified like all commercial software.

    I like to cook, for instance. It's a hobby of mine. Cooking, BBQ, grilling, baking, all of it. So of course, I have recipes and they are important to me. I could spend all my time painstakingly entering all my recipes into recipes dot com or whatever, right? But of course, as soon as I do that, their barely usable app that does almost everything I want (and a hundred things I don't give a shit about) gets updated in the third update of the week (rolleyes) and they have completely changed the UI and on top of that, they removed a feature that I used daily.

    OR - I could just make my own fucking app. Which I did. It's awesome, it does everything I need and nothing I don't. It also doesn't update every thirty seconds and become less and less usable or require me to completely overhaul my workflow because the programming staff and middle management need to justify their existences.

    I also recently made a wishlist extension for Firefox, because Amazon removed the ability to add non-Amazon items to their wishlist. I have probably a dozen other ideas I'm working on at any given time. None of this is to make money, but just to make my life more convenient and unplug myself from the wider (bullshit) Internet as much as possible.

    • Tangential but you might find TiddlyWiki useful, it's a single file personal wiki that can be edited in any web browser.

  • I wrote a little bit of code to tell me if or when my electricity would be cheaper if I used on demand pricing instead of flat rate. Basically anything you might use excel for could be a programming problem.

    For other hobby projects and "why Linux" it's easier to sew things together than windows, generally speaking.

    Example:

    Every time I sit down at my PC the first thing I usually do is open a terminal: it is both my launcher and my file manager. I have several programs with TUI (terminal user interface) or text based API (which is an applied programming interface) and I keep my notes in plain text. One type of note I keep is an "atomic" note inside my zettelkasten (this is a fancy way of keeping track of ideas and the way they connect together, but you need to revisit them for it to be useful. Kinda like anki / spaced reputation I guess).

    So enough background, here's the idea and the programming:

    • If I always open a terminal, it's a good place to put stuff I want to see.
    • There are two things I want to see: twice a day I want to see a note, the rest of the time I want to see the 3 or 4 most important tasks on my todo list
    • I want randomized notes and I want it to be automatic.

    One of the easiest things you can do in a terminal is "echo" text. So I started by, in my terminal "rc" file (the configuration file that tells the terminal what to do when you start it) echoing my todo list as the very last step in the start process. Then it's refinement. First don't give me the whole list, use shell tools to show the head of the list. Now make a conditional statement that says "if there's a file called "temp" in some folder give me the Todo list, otherwise do nothing". Basically we follow the incremental logic train until you get the final product:

    • If no file exists, print a note (at random) and then make the file
    • If the file exists write part of the todo list
    • Every 6 hours, delete the file automatically with cron

    Neat you just programmed a lame, but useful tool.

  • Sounds like you want a project.

    You could try making a game. Python has pygame. Godot is a bit of a steeper learning step but has a lot of capabilities. I've messed around with each for fun.

    Web dev can also be fun, and a very different style of coding. I've made things for a loved one who wanted some things for a site they run. Each thing they asked for took me no more than a day but saved them having to hire someone. I also made a little one-file site that I could share with some people as an RPG reference.

    There are also coding games, as in games where you write code as part of the gameplay. These can help in that they give you a goal. Known names include computercraft mod for minecraft, screeps as both mmo and arena battle, Shenzhen I/O and other Zachtronics and zach-like games, The Farmer Was Replaced, etc.

    And of course, you can always just think of something. I've written a few scripts to do simple edits to files, like 'open each file in the folder this is run in and change blahblah to bloobloo and increment the version number' or batch renaming files. Did one to find duplicate files and list them for organization/deletion.

    I have other things I've started but never finished, but I enjoyed working on them, and they weren't my job, so no worries.

  • Instead of a long-winded post, here's a quick list of stuff that I've worked on in my free time over the last few months:

    • Some scripts to automatically set some metadata on my photo library
    • A tool that grabs a video stream from an HDMI input (from the OS's point of view that looks just like any webcam), finds text in it and overlays a translation. I use that to play Japanese visual novels on my Switch
    • A simple Bubble Shooter game because my gf was frustrated with some bugs in the one she had found online
    • A simple 2D game engine and editor inspired by RPG Maker XP
    • Updates to the registration website for a community event that I host twice a year
    • Updates to a discord bot that automates some dice rolls for my online TTRPG sessions
    • A browser extension that helps me scrape some data from a specific website
    • Helped a friend port an old website from PHP5 to PHP8

    Overall, it's mostly stuff that is useful for my hobbies for which I can't find an existing solution that fits my use case.

    • To add some more, here's a list of stuff that I would love to do at some point but haven't found the time yet:

      • A tool that directly translates PCB designs into a format that my resin 3D printer can read so I can abuse its display as a UV etching machine
      • An alternative to GPlates that's a bit easier to use for fantasy worldbuilding. GPlates is great but it's mostly meant for serious scientific work so its UI is a bit complicated.
      • A minimalistic blogging platform that interfaces with ActivityPub
      • Many, many games.
  • I like to automate processes I keep repeating on my machine. For example, there are some documents I receive every month, like bank statements and phone bills. Since the naming conventions of those files are atrocious, I wrote a little program to automatically fix those for me

    Some people also like participating in the development of open source software. That requires you to be a somewhat decent programmer already, though, as you'll have to work with integrated systems

  • I do some programming as a hobby. I'm far from being an expert or even competent at it. You work on whatever you WANT to work on. Sometimes this can be born from necessity, you need your computer to do something, but you can't find any existing application that does the specific thing that you need. Sometimes maybe you just want to create something, just because it seems interesting to you, or just because.

    So just for example, one of my hobbies involves working with video. Years ago, I was frustrated with the options available for encoding my videos into h264, so I ended up creating my own GUI around FFMPEG. It was easy enough and effective for what I needed, that the tool became quite popular among others in my hobby.

    Recently, machine learning has made it possible to do cool stuff like remove the background from a video clip. A lot of this stuff is really difficult to even get working, let alone to use effectively. So a current project I'm working on is a GUI for such a tool to make it really easy to use.

    So yeah... First I would say you need to figure out what you want to do. Why do you want to write a program? What do you want to accomplish?

    Then you need to learn the basics of programming in whatever language you intend to use. And just gain a basic understanding of how programming works in general. Once you know enough to be dangerous, you can start working on something. Getting started is the hardest part, and involves really thinking about your problem, breaking it down into smaller parts, and considering how to solve each of those small parts. This can involve lots of research, lots of googling, and finding frameworks or libraries that might help you accomplish what you need.

    LLMs like chatgpt have also been amazing in helping people like me to create something much more quickly than before. I can ask it for thoughts on how to accomplish a specific thing, or even have it write entire sections of code for me. Just yesterday, I had it create a script for me which I estimate would have taken me 10-20 hours to write on my own. However, they don't always give right answers, so it's really important to have a basic level of understanding of programming so that you can understand the code that it gives you. I don't use any code until I understand how it works. The LLM can also help explain the code to you!

  • Something as simple as using Shell Scripting to automate tasks (say, rename all files in a directory according to a certain pattern) is programming in Linux and most of these you can even do directly in the shell (i.e. just type a few lines of code on the command line directly, no need to have a file with the program or do any kind of compilation).

    Also it's stupidly simple to program in certain languages like Perl and Python in Linux mainly because you're just working in the command line interface and most of what those languages do is that kind of thing (rather than graphical UI stuff), those languages come almost invariably pre-installed in Linux distros, and you can use the same trick as with shell scripting of just starting the interpreter and type the code directly to run it.

    Beyond that, if you're actually doing stuff like server-side software development, Linux is overwhelmingly dominant in that space and it's way simpler to, when targetting Linux servers, to just work on your own Linux as developer (user) machine because all the tools for remote access to Unix machines are there nativelly and work seamlessly, plus you can can have the developer machine double as a development environment for server side development (as Linux can still act as a server machine even when you're running it as a user machine).

  • I like to solve everyday problems through programming. My primary way of doing it is just Python on Windows right now, but Linux does make programming languages a bit easier to access. (And most of the stuff I write would easily run on Linux too.)

    Every time I go "damn, this is more complicated/boring than it needs to be and the manual handling is so unnecessary, I wish I could automate this", I start making a script.

    For example, I'm an amateur photographer, so I have scripts for dealing with photos. One is a photo importer/backup tool, because I didn't trust the importers in the apps to do it right (Adobe trauma). I'm writing scripts for report purposes. One script I wrote puts all of the photos I have on the map.

  • I started out with games and simulators. I tended just to come up with some game logic and then see what happened when I let it play out with many entities. When I started my computer science degree at uni I tended to write more code that had something to do with recent lecture material. Implementing Distance Vector Routing, messing around with compression, applying reinforcement learning to my own games.

    Now that I have a job it's a bit harder to stay motivated for all this, but it's still kinda the same. I just write whatever my brain comes up with.

  • This feels more like two questions, so I'll answer them both:

    1. When I'm not programming for my job, I'm programming one of many side projects I have going on at any time. Same with any other professional who has a career in their hobby. These are often projects I think would be useful to me and I believe would let me learn new skills.
    2. I use Linux (and MacOS) because the Unix environment, particularly the command line tooling is far superior to Windows. Developers often work on Unix, so they build their tools for the platform and thus improvements stack up. I also just like the FOSS philosophy underpinning most Linux.

    If you're trying to learn programming and know at least some basics, my only advice is to pick a project you're even a little interested in and get started. Don't worry about operating system, it doesn't actually matter that much unless you're working on iOS or MacOS! A weather app for whatever language/platform you're working with is usually my first suggestion for students.

  • That's the most difficult problem in hobby programming: finding a project. Most interesting things seem to complex to start.

    The solution is to say f it I'm going to try. Right now I'm very slowly making progress learning Rust by writing a program to trade cryptocurrency. It took a while for me to even take my goals seriously as something I am capable of. It's half gambling and half skills development but 100% interesting enough that I have consistently come back to it. I've come to terms with the fact that the only money it will make me is if I get a better job by becoming a rust developer.

    The Linux side of programming only really comes into play when you want to do networking, drivers, or esoteric filesystem intensive stuff. Windows and MacOS are capable of basically the same things. The main benefit of using Linux for development is that most open source projects are built by developers for development on Linux based systems, so getting dependencies has an easy one line command someone already figured out. For your situation I suspect the most important thing is how cool it feels when you use it. There's something about setting up an operating system the way you want that keeps me coming back for more.

  • For me it's:

    Oh shit, that last update borked my computer... wth is postfix? How was it corrupted? Whatever... How do I reinstall it... [look up answer an Ask Ubuntu- Copy/Paste]; okay cool. Wait, losing postfix also broke my graphics driver?! Why? Whatever... I guess I should reinstall it... [look up answer an Ask Ubuntu- Copy/Paste]; okay cool.

    Then I forget everything I just did because Ubuntu rarely breaks and also I think it was just my ssd dying...

  • Linux lets\makes you interact with a terminal (and just OS tinkering) more, so you become a bit more comfortable with writing simple commands and then code.

    One of the things for basic Python and default libs is sorting your Downloads folder into a more logical filestructure that doesn't need reshuffling and searching for long. Move pictures into Pictures and sort them accordingly to the year\month you saved them for example. Make the script run once a week. Make it write a log file as it runs.

    I did this one for the sake of it, but then I needed a piece of code to bruteforce the PDF file password protection, so I used a lib to access and resave this file without a password. On every attempt to open it, it inserted another password from either freely availiable databases of simple passes or well-known leaks (rockyou). It worked nice for PDFs I needed to crack to, actually, just print on paper, but also worked when I tested it with combinations of random words and symbols I came up with. I needed a lib to open a pdf, a list of passwords to try (althought, a bit pre-formatted), and a couple of victims to test on.

  • But im not sure how to apply it to anything realistic

    I think that's a misconception a lot of people have: unless you get a job in the field, or get into open source work, you probably won't. Not at any amount of scale, anyway.

    Like, you go to your computer and start working in...what?

    For myself, I find that (outside of work and open source) I don't really USE my programming skills, except that knowing programming enables me to think about problems in my life in a more analytical way. Every once in a while, I might be doing something tedious and techy that I'll take an hour or two to automate. For example, I've done that for re-organizing and renaming video and music files. I also helped my wife a few hundred pages of text from a wiki she maintains for her D&D guild, when they were migrating to a new provider.

    im just unsure what people do especially when starting out.

    If you have an idea for something that you find interesting or are passionate about or would use personally, great! That's extremely rare, so don't stress about it. My go-to recommendation for starter projects is to just re-make something that already exists. That gives you very specific, achievable goals. Specifically" I recommend re-making "dir.exe" or "ls" (the Linux equivalent), which are command-line programs that list files on your computer.

    If you can work a project like that, even if you never "finish" it, and you get any enjoyment out of it, that's a good sign. If you find that you dread working on it, or really struggle with it, then that's a good indicator that maybe programming isn't for you. It's a useful skill to have, but you shouldn't feel bad if it just isn't your thing. I always like the idea of being a musician, and toon guitar lessons as a kid, but whenever I would sit down to practice, I found I would rather be doing almost anything else. Eventually, it occurred to me that I can love music and musicianship, without being a musician.

    What is really meant by "programming" when people say they like to use linux for it?

    I think it's just a matter of personal preference among the type of people that are drawn to programming. Linux doesn't just LET you have a very high level of control over things that happen "under the hood", it often MAKES you have to deal with some things that Windows or iOS would traditionally keep hidden (to varying degrees, depending on distro). That ends up being appealing to the kind of tinkerer folks who are also attracted to programming.

    I don't think there's any inherent reason that Linux is better for programming, except MAYBE that there's more of a programming ecosystem built around it, because more programmers end up using it. Sort of a self-fulfilling prophesy.

  • If you want examples of what people work on check out the public github repositories, they range from big open source projects with multiple developers, testers, etc to small projects only one person has worked on.

    Many languages/build chains will provide template projects these days to give you some baseline to build from instead of an empty directory. Maven archetypes for example in Java or https://start.spring.io/ for spring projects in Java/kotlin/groovy. But that's just to give you some structure and frameworks so you're not starting with a blank canvas.

    Different languages will appeal to different practices too, like a compiled language you'll want to leverage debuggers and logging, but an interactive language, or one that offers both compiled and interactive, may have a REPL or command line prompt to work against to try out ideas before saving them in a script or class file.

  • I just want to learn it to know it

    Acquiring a skill just to have it isnt how it works. Skills are perishable, meaning you will unlearn them just as easy. Of course much experience would take a long time but still.

    I suggest imagining what you could do with programming. What little problems do you face that could be solved by programming?

    You also dont need to write another operaring system or debug "a whole game". If you decide you want to learn programming (because its fun or because you like to create and fix shit), you can make an app run on your computer or phone that didnt run before. I did exactly that and my programming skills are pretty small. You dont have to know all the algorithms or study it to do useful stuff with it.

    I made a couple text based games, solved some advent of code riddles and so on. Its fun and it helps seeing the world as a canvas instead of a fixed structure that is applied to you.

  • You don't need Linux to do programming. There are plenty of professionals and hobbyists that use only Windows, or only iOS.

  • To get started with programming, find a hobby project that you absolutely love working on.

    For me it was making websites about pokémon.

    Then websites with dynamic content, that players could sign up for and change.

    Many years later I started working on game engines

  • Like, you go to your computer and start working on…what?

    Most of my work goes into an opensource game.

    what people do especially when starting out.

    Make some apps for yourself. You'll probably not use them, or even share them, but it's a good thing to have a vision of what you want to make.

    I just want to learn it to know it.

    Being a good programmer takes ages. And even then you'll probably only know a handful of languages and focus on specific branches. If you just want to know it, you'll lose a lot of interest pretty soon because sometimes it takes days to fix something and you really need to be able to push trough those rough patches and that's hard without a goal. Imagine trying to become good at woodworking without actually making furniture.

    But im not sure how to apply it to anything realistic.

    A lot of stuff already has apps for it. And a lot of things are being worked on. People saw the money and a lot of people jumped on the wagon.

    The most realistic thing one can do with programming is to make something that does exactly what they want. And that can even be something small. Like learning how to write scripts that automate simple tasks. I suggest high level languages such as Python, PHP, C# or Java to get going. And only look at low level languages such as C, C++, or Rust when you actually start to understand it.

46 comments