28 votes

How do you go from "knowing" a programming language to actually making useful software?

Tags: learning, help, ask

I'm in a bit of a rutt with my journey to learn how to write software, and I really have no idea where to go from here. I've taken a bunch of software engineering courses on edx.org, and I've done a few personal projects with what I've learned, but I still don't know enough to be able to contribute to open source projects or make anything useful.

TL;DR
How can I learn to actually make things?

10 comments

  1. [2]
    Comment deleted by author
    Link
    1. ruspaceni
      Link Parent
      I started when I fell in love with RuneScape Private Servers, i figured out how to compile some shitty "cheesescape v1.33" or something like that and replaced all the text to make it "shaddow...

      I started when I fell in love with RuneScape Private Servers, i figured out how to compile some shitty "cheesescape v1.33" or something like that and replaced all the text to make it "shaddow scape" completely unaware of the typo lmao.

      Then i spent a while following the rsps forums, following tutorials to add quests in, backport items with custom animations. I was a dirty little script kiddie at first but eventually learnt enough to start knitting scripts together and mutating them into something new.

      Eventually I grew out of it and never really got back into programming again until a friend started streaming and needed an irc bot for his twitch chat. At first the projects were just simple things like answering common questions.

      But then all of a sudden, when you've thought of some awesome feature to add, you begin to run into the phenomena of "hmm I thought this would have been easier" a.k.a the majority of programming.

      Idk if that's just my experience, but you get this muscle memory for translating human ideas into machine ideas after enough attempts

      5 votes
  2. [2]
    Comment deleted by author
    Link
    1. NubWizard
      Link Parent
      I can second that. I have been teaching myself python for data analysis recently and if I get a report that I need to do in Excel at work, I will do it, then recreate it in Python. No one really...

      I can second that.

      I have been teaching myself python for data analysis recently and if I get a report that I need to do in Excel at work, I will do it, then recreate it in Python. No one really cares since its out of scope for my role but one day I will be proficient enough I hope that I can find a role where I can blend all the aspects into my background into a new job.

      2 votes
  3. Soptik
    Link
    When I was learning my first programming language, I found ict.social very useful. It's mostly free website and they teach you to be able to write programs - do not expect theory. Try to write...

    When I was learning my first programming language, I found ict.social very useful. It's mostly free website and they teach you to be able to write programs - do not expect theory. Try to write things from the website, there are tons of exercises, with source code how should it be done.

    Write programs. You don't need to finish them, abandon them when you decide to write something else. But most importantly, write. You'll be better with every program you write.

    Write text analyzer. Write diary. Write simple strategy games (like Influence (without graphics, just the logic)).

    Once you know how to write programs (you probably are at the level now? idk), find some programming competition (even those that are already over) and write something for it. If you want to write something that people will use, write, for example, wrapper for something. Best if wrapper for the language doesn't exist yet, so you'll get tons of feedback. But it's worth to write even if nobody ever download it, because you learn it.

    Go to wikipedia, find some interesting article and write program! Recently there was programming challenge on genetic programming. It's not hard, but it's really impressive.

    Go to github and mimic some projects. It's good because you can always look how it was originally done and you can learn from it.

    And don't forget, once you write impressive project, post it to your github. That's how you get internship. That's how you get job. GitHub.

    6 votes
  4. demifiend
    Link
    Not to be flippant, but I think this is why every young developer and their cat seemed to have their own text editor or ftp client back in the day. They needed to bridge this gap, and the easiest...

    Not to be flippant, but I think this is why every young developer and their cat seemed to have their own text editor or ftp client back in the day. They needed to bridge this gap, and the easiest way to do it is with a narrowly defined problem for which solutions are readily available for reference.

    My advice is that you install a BSD. I prefer OpenBSD, but it doesn't matter. Pick a BSD, join the mailing list, pick a piece of free software that doesn't yet work on your preferred BSD, port it, and ask somebody experienced to check it over. If your port makes it into the tree, you can put that on your resume/CV and call yourself a maintainer.

    3 votes
  5. BlackEgret
    Link
    Programming useful software can come in all shapes in sizes. You might be working on a code base to run some statistical analysis on something out of a CSV file, for example. Depending on how you...

    Programming useful software can come in all shapes in sizes. You might be working on a code base to run some statistical analysis on something out of a CSV file, for example. Depending on how you decide to implement that analysis, e.g. in Java or in Python or whatever, unless you plan on coding everything from scratch, there are many useful aspects of your code that will be taken from libraries. You might learn how to use an API for some service, and you will learn to resolve (hopefully) all the technical issues you face along the way.

    With a few other people, during our spare time, we decided to work on a project with a certain goal in mind. I won't get into that. To actually realize that project meant applying lots of technologies, and those who didn't know how to use them simply had to learn to use them by reading documentation and trying things out. It ranged from server development to databases, mobile development, using version control, building libraries from source, web development, applying software design patterns and modeling, and on and on.

    A single project that demands that you understand the technologies necessary to develop it can be enough to make you a well-rounded software developer. A programming language is one of the tools you use to access those technologies, so if you know one, you should feel confident launching yourself into a project, even without entirely knowing how to reach the end point. Find out what the project necessitates, and whenever you run into a wall, learn how to use the preexisting technologies that enable you to get over it. It might seem impossible, but if you arm yourself with enough documentation, anything is possible! ;)

    (Of course, despite this, there are infinitely more technologies I don't know how to use than I actually do, but I know it's possible for me to learn to use them when necessary.)

    3 votes
  6. dyyyl
    Link
    Hey mate! So we all struggle with this part at one point or another. Cryptically, the only real way to get better at building projects is by... Building projects! Now, in order to be successful...

    Hey mate! So we all struggle with this part at one point or another. Cryptically, the only real way to get better at building projects is by... Building projects!

    Now, in order to be successful (or not, I'm not one to judge), I recommend involving a bit of process to your life. Trust me, having any kind of methodology in your corner will be a game changer. If you want, hit me up with a reply and I'll run you through a quick primer on how I usually structure a project!

    2 votes
  7. lars
    Link
    What helps me is I think of something I want to make and then I just make the most basic part of it and then build onto it and as I build onto it and improve it I learn more and more.

    What helps me is I think of something I want to make and then I just make the most basic part of it and then build onto it and as I build onto it and improve it I learn more and more.

    2 votes
  8. bme
    Link
    Everyone here is telling you to write code, and I agree, that's a huge part of it. But here is something else you should do: find smaller things, like cli tools and read their source code. People...

    Everyone here is telling you to write code, and I agree, that's a huge part of it. But here is something else you should do: find smaller things, like cli tools and read their source code. People that only write code are doomed to learn so much slower than people that also actively seek to learn by reading code as well.

    2 votes
  9. Vadsamoht
    Link
    Can you be a bit more specific on what you already know how to do?

    I've taken a bunch of software engineering courses on edx.org

    Can you be a bit more specific on what you already know how to do?

  10. nic
    Link
    Have you successfully made something that is not useful?

    Have you successfully made something that is not useful?