Slashdot Mirror


'I Know How To Program, But I Don't Know What To Program' (devdungeon.com)

An anonymous reader has shared an interesting article that talks about one of the most common challenges faced by novice developers: "I know how to program, but I don't know what to program." The author of the article also shares his views on some of the most common solutions for that problem: "do programming challenges", "contribute to an open source project", or "make a game." From the post: Doing programming challenges is good mental practice, but they do little to help someone learn how to create a new program. Contributing to an open source project is a step up. You might learn about how a real project is structured and improve your skill with the programming language, but you won't learn much about the full lifecycle of a project. Some projects are very complex too which can be intimidating for a novice. Making a game is another step up. Games are fun! I started by programming games in QBASIC. The same dilemma arises though. "I want to make a game, but I don't know what to make." The author advises these beginners to try rewriting a library which already exists (despite this being considered as a prohibited practice by many). Developers should also not wait to get the "best idea" before they begin writing it, the author adds. From the post: I've seen the same mentality with musicians. Trying to create a masterpiece on their first attempt, putting all their energy into one song and not seeing a bigger picture. The bigger picture being, you will write LOTS of songs over time, not just one!

12 of 255 comments (clear)

  1. Mine Research Papers. by Anonymous Coward · · Score: 5, Interesting

    Find an old computer science research paper that seems interesting.

    Implement the hell out of it.

    Seriously, most advances in the industry are from expired patents and research that was done in university 20 to 30 years ago.

    1. Re:Mine Research Papers. by skids · · Score: 3, Interesting

      Yeah there are tons of opportunities to replace naive-but-working code with more sophisticated techniques/algorithms out there.

      I think TFA is right in that rewriting existing code is indeed productive -- but really the reason is not so much practice at writing, but that you are learning the one skill people who "know how to program" do not necessarily have even if they think they do: how to fluently read code, rather than write it. So, with your suggestion, find an academic paper, think where it applies in an OSS project, and go check how that project implements that functionality. See if using those ideas in that spot improves the project.

      In addition it is a good suggestion in that it also builds the skills of taxonomy and research which are needed to avoid wheel re-invention - you can;t avoid it if you do not know the given wheels actually exist.

  2. Open Source by Thelasko · · Score: 3, Interesting

    Contributing to open source always seemed intimidating as a novice. I'm too afraid I'd wreck the code or introduce bugs. Basically create more problems than solutions.

    I stick to my own little scripts for my specific needs, knowing that the code is clumsy.

    --
    One of our competitors trademarked the term "hypothesis". From now on, we will call them "boneheaded ideas".
    1. Re:Open Source by allo · · Score: 4, Interesting

      Don't misunderstand Torvalds. He has a nice attitude to beginners. Just not to idiots (which refuse to take advice) or beginners, who insist to do it their way without understanding why it's done another way. If you're a dick, Torvalds will tell you. If you ask a dumb question, he will try to help (or at least ignore you).

  3. This by just_another_sean · · Score: 5, Interesting

    The author advises these beginners to try rewriting a library which already exists (despite this being considered as a prohibited practice by many).

    This is how I learned a lot about Perl, C, C++ and to a much lesser extent JavaScript. I wrote (crappy) web frameworks in Perl, front ends for MySQL in C and even tried reinventing concepts from the STL in C++. Not one of my pet projects ended up in production systems for very long, if ever. I simply did them to scratch an itch and help myself understand the underlying principles. My understanding of Perl and PHP frameworks improved immensely and I learned it wasn't nearly as hard as I thought to get under the hood and learn when something wasn't behaving the way I expected it too. Implementing STL dupes help me actually be able to parse Bjarne Stroustrup's books on C++ and in general gave me a much deeper understanding of programming in various languages. Was I able to make better tools than a team of experts working on something together for years? Hell no! Just improved my ability to understand and use their work.

    It's like learning assembly to understand how computers work, you're probably not going to do much of it in the real world but it will help you more than you think when you develop that level of understanding.

    --
    Creationist Textbook Stickers Declared Unconstitutional by CowboyNeal
  4. Try an internship by schneidafunk · · Score: 3, Interesting

    For me, I've learned more from on job experience than I did studying computer science at college. You get paid to learn and it also eliminates the "I don't know what to program" question.

    --
    Some people die at 25 and aren't buried until 75. -Benjamin Franklin
  5. Think about the future by corychristison · · Score: 3, Interesting

    I have the opposite problem. I have a dozen good ideas (and many more simple/fun ideas), just not the time to do it. I program for work and for fun. I find it stimulating and exciting to solve complex problems through programming.

    Learning to start from scratch is a hard thing to overcome. Many of the students studying CS are given a task, and a bit of direction on how to complete it... typically given a framework to work with. They are never pushed to think outside of the box and build something from scratch.

    Once you get past the very basic fundamentals of how to manipulate data the world is your oyster. You can build anything if you put your mind to it, even in high level languages like Python, JS, PHP, etc. whatever the kids are learning these days.

  6. Re:Solve someone else's problem by Anonymous Coward · · Score: 3, Interesting

    If the game is in Java, then it's the opposite! We seek out Java devs with game experience since they're typically better at performance, multi-threading, and memory management than even corporate Java devs with over a decade of experience. Since hiring a team of five former game developers in Oct 2013, the 90% response time for our backend has decreased by nearly 50%. Our customers have been very happy with the performance improvements.

  7. Get a job by gnu-sucks · · Score: 3, Interesting

    Seriously, get a beginner-level job. Write some code for cheap, even for free. Maybe meet a mentor or two while you're at it.

    Or if you're a student, march into some department's office that needs programmers (not comp-sci, but something like aerospace engineering where they need programmers and they can't program that well). Offer to help with some professor's project and see where it takes you.

  8. I know how to type but I don't know what to write by LQ · · Score: 4, Interesting

    You might as well say you know how to touch type but are staring at a blank sheet of paper. Programming is a tool for solving problems. You need to have a problem domain you're interested in (or somebody is paying you to be). Everything else is reinventing the wheel for practice.

  9. Re:You dont know by halivar · · Score: 5, Interesting

    WTF kind of solipsistic zen bullshit is this? In the real world, real programmers write whatever the fuck their boss tells them to write. We're fuckin' code monkeys. When I get a spare moment on my weekends to do hobby coding, I get coder's block. I'm not an idea guy; that's for marketroids and designers. I just want to be pointed in a direction and I'll code my ass to it. Any creativity I have is spent on figuring out solutions, not problems.

  10. Re:You dont know by Grishnakh · · Score: 3, Interesting

    As the old saying goes, "necessity is the mother of invention". So most non-work programming I end up doing is writing short scripts to automate or simplify things I'm already doing on my computer at home. Any serious project will require a serious time commitment, and I have too many other things I really want to spend my free time doing, such as going outside and hiking.

    Honestly, I wish I did have one day a week where I could get paid to spend it doing some self-directed programming, such as working on an interesting open-source project, instead of the boring crap I usually have to do for a paycheck.