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!

13 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.

  2. solve a small problem by tombak · · Score: 5, Insightful

    Find a small problem that you are in fact facing in your day to day life, and write code that would solve it. Code has to solve real-world problems and there is nothing more satisfying than writing code that solves an actual problem. For example, write a "HELLO WORLD" program; and make it run at boot time, voila! H

    1. Re:solve a small problem by XxtraLarGe · · Score: 5, Funny

      Find a small problem that you are in fact facing in your day to day life, and write code that would solve it.

      All my (computing) problems are either big or already solved. : /

      There you go. Write a program that creates small problems for you! ;-)

      --
      Taking guns away from the 99% gives the 1% 100% of the power.
  3. I feel your pain. by Anonymous Coward · · Score: 5, Funny

    I know how to post a comment, but I don't know what to say.

  4. 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
    1. Re:This by unrtst · · Score: 4, Informative

      Another slight twist on this is to manually port a library or solution to a different language (which I think the GP hinted at with his work with the STL).
      There are loads and loads of options here:
      * take something from CPAN and bring it to Python or Ruby or PHP etc
      * take small-ish C / C++ programs and port them to Rust
      * take any well known algorithm and try to write it from scratch, maybe in a language where it doesn't fit so well (so there are no existing dupes)
      * update/upgrade/port features from "standard" libs in more popular languages to less popular languages (ex. I brought most of the latest greatest features for memcached libs to the perl library - though I don't think they ever made it to CPAN, they're on github). This can actually help multiple communities if those are now more feature compatible.

  5. Another suggestion by DFDumont · · Score: 4, Insightful

    Find a problem and solve it. Your first (few) programs don't have to be full on applications or games. They just have to solve a simple problem you or someone else is having. Case in point, I am a networking professional (CCIE #12981). I run into things like, "what is the current inventory of devices on the network?" So I wrote a 'script' which does what I would do manually. It logs into a 'seed' device using provided credentials, downloads information like serialization and addressing, and then figures out connected devices from there. Newly discovered devices are then submitted to the same task. Problem solved. In another effort, I was working for a firm that sold a particular service and our back-office documentation to fulfill the order was so cumbersome that the probability for error was a statistical certainty. So I wrote some VBA inside a spreadsheet that took the metrics form the customer, and produced the requisite documents directly.
    Find a problem. Solve it; simply, directly, efficiently. That will give you experience AND provide a useful output.

  6. Well... by Black+Parrot · · Score: 4, Funny

    we need new Hello World! programs for all those recently discovered planets.

    --
    Sheesh, evil *and* a jerk. -- Jade
  7. Re:Open Source by Okian+Warrior · · Score: 5, Funny

    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.

    Then you should contribute to the linux kernel.

    Linus always takes an encouraging and tolerant attitude towards new users, especially ones who make mistakes.

    If you want to learn to code, there's no better place to start than the linux kernel.

  8. It's in front of your nose by Hognoxious · · Score: 4, Funny

    Rewrite slashdot to either support unicode properly, or (preferably) not support it properly.

    --
    Confucius say, "Find worm in apple - bad. Find half a worm - worse."
  9. 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.

  10. 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.

  11. 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).