Slashdot Mirror


Ask Slashdot: Beginner To Intermediate Programming Projects?

An anonymous reader writes "I've been teaching myself to code recently. I've made good progress so far, and I've written a bunch of little scripts to make my life easier. Here's the problem: most project ideas I come up with now either seem pretty easy or pretty impossible. I'm having trouble thinking of a project that'll stretch my skills without overloading them. I've tried finding open source projects to read through, but I run into the same thing: either it's straight-forward, or it requires reading a half-dozen dependencies, each of which has dependencies of their own. Anyone have suggestions on some intermediate-skill projects to undertake? Or some project files in an online repo that go beyond the basics without getting overwhelming? My language of choice is Python, but other languages are welcome."

172 comments

  1. Try a microcontroller project. by wb8nbs · · Score: 5, Informative

    I would suggest getting an Arduino. There's tons and tons of example code out there at all levels of expertise. And it's fun.

    1. Re:Try a microcontroller project. by PopeRatzo · · Score: 4, Insightful

      I don't know dick about programming, and I've been having fun with my little Arduino.

      It brings me back to my callow youth, playing with a breadboard and figuring out how to make LED's flash. Except this Arduino can actually do stuff.

      Right now, I'm playing with making a sort of frankenstein controller for an old analog modular synthesizer. A cross between a Theremin and a Kaoss pad and percussion pads.

      But it might end up as a cat torture device, if that damn thing doesn't stop chewing on my earbud cables.

      --
      You are welcome on my lawn.
    2. Re:Try a microcontroller project. by Anonymous Coward · · Score: 1

      All you need regarding programming is:
      http://learnyouahaskell.com/chapters

      Learn You a Haskell for Great Good!

    3. Re:Try a microcontroller project. by phillk6751 · · Score: 2

      Even though I haven't yet tinkered with an Arduino I have to totally agree with this. As a professional programmer with similar experience here are a few reasons why:

      1)I have had to work with machine automation in both of my programming jobs extensively. Knowing how to program 'realtime' devices is very useful in an industrial environment (Reading barcode readers, processing, output....or reading relay state/change, determining course of action, switching relay or sending notifications to a user...or combinations thereof like reading from a barcode reader and comparing to a database/list/group and sending a relay output to tell a belt to stop for example).
      2)You will learn about many things that are difficult to reproduce without sensors/switches/etc including timing, triggers, events, etc

      One issue I do have with this however is that sometimes dealing with devices like this, you can easily fall into a trap where inexperience can lead to code that is almost impossible to debug or problems that come up that are very difficult to reproduce.

  2. why not get some code books? by Anonymous Coward · · Score: 0

    The ones I like have examples you can work through and eventually get working locally. A couple dozen dependencies are a common occurrence in most code projects, so we just work through or around them depending on what needs to be done, so just know if you ever want to contribute you'll just have to suck it up, but until then books w code examples and problems are a good stepping stone and if you comprehend what's inside you'll become a top-tier programmer in no time.

  3. Something else? by TechyImmigrant · · Score: 5, Interesting

    Programming isn't an end to itself. Well it can be but, generally we program to do something else - payroll, missile guidance, selling stuff over the internet, etc.

    What else do you know? Are you an expert in newt farming? Write an application to automate the tedious aspects of new farming.

    Once you have a problem to solve, it becomes attackable. Having to hunting around for the right sized problem suggests you aren't acknowledging the problems you already have.

    --
    I should use this sig to advertise my book ISBN-13 : 978-1501515132.
    1. Re:Something else? by rwa2 · · Score: 2

      Now that you're an "intermediate" programmer, find an existing piece of code somewhere and modify it to do something you want. You'll cover a lot of ground, since you're already starting from a fairly capable codebase, and you'll learn a lot about what you like and don't like from trying to read other people's code. Python is a great "glue" language, so the code you're looking at using need not even be in the same language.

      Back in the day I hacked up some 3D gnome tetris game in C to output game state to a file that was parsed by a perl script that would build and solve an FEA model of that structure in SLFFEA in near-realtime. It was pretty fun to work with those kinds of building blocks.

    2. Re:Something else? by Anonymous Coward · · Score: 0

      If you're up for a maths challenge, try looking at DIY drones - think about making an autopilot. That should keep you busy for awhile.

    3. Re:Something else? by Anonymous Coward · · Score: 0

      Programming isn't an end to itself.

      That is how I got into it. I used computers to solve problems. Back in the 80s when I got into it, I was an anomaly. It was easy to get work - and it was the only job I could get at the time. I wanted to do something else, but needing a job, I programmed.

      For those of you who would condemn me for this, I would say petition for a law where everyone gets paid the same no matter what they do. That would eliminate the folks who go into fields for "just the money". Otherwise, we art people who need to make a living will be among you.

    4. Re:Something else? by Sentrion · · Score: 1

      I'm not going to condemn you for this. My own perceptions of what I would be doing with my engineering degree turned out to be so far off target that it's not even funny. I'm not working on the stuff that fascinated me. I'm working on the stuff my boss lets me do. I try to find the "joy of engineering" when and where I can, but it is very difficult to earn a living, raise a family, have the intrinsic qualifications and market demand to pursue one's very specific interests. I suspect that many other readers here would agree.

    5. Re:Something else? by khellendros1984 · · Score: 1

      I would say petition for a law where everyone gets paid the same no matter what they do.

      ....I'd rather not. If a coworker is competent, then I don't really care why they're working with me, as long as they're doing good work.

      --
      It is pitch black. You are likely to be eaten by a grue.
    6. Re:Something else? by TapeCutter · · Score: 3, Insightful

      Agree, find a problem. Work out an algorithm/heuristic that solves it, then attempt to implement it. If you are not sure how to implement it then you have found a problem of suitable difficulty and you may then want to look at how others have attacked it.

      AI, simulations, and number theory are (for my tastes) great places to find intermediate to difficult problems (and the algorithms that solve them), 25yrs as a commercial developer and I'm still finding new stuff in those fields. For example I started learning python (for work) by implementing my favourite intermediate "hello world" program, an n-body gravity simulation. I'm currently looking at CUDA (for fun) using my trusty "hello world" sim, they supply an optimised example of the same problem but I won't look at it until I have mine working.

      Also it depends on what you call "intermediate". Python is a "batteries included" language, how much do you know about language independent data structures such as trees, vector, matrices? Take a look at "The art and science of programming" by Donald Knuth, it's examples are in Pascal but if you inhale the wisdom in the book you will understand when I say that the language it uses is irrelevant.

      Here's an ancient problem I found in the early 80's that I still don't have a programmatic solution for, pretty sure algorithms exists to solve it but I don't want to look at any "spoilers", would much rather find an answer on my own.
      1. Create a 6x6 magic square
      2. All columns, rows and diagonals must sum to 666
      3. All 36 numbers in the square must be prime numbers
      4. Marvel at the fact that Issac Newton solved it in his head! Ironically while hand-writing nearly a million words of drivel on the "number of the beast".
      5. Bonus points if you find more than one solution.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    7. Re:Something else? by TapeCutter · · Score: 2

      Bad form to reply to oneself and all that. If you (the submitter) are trying to drill down through the dependencies in an attempt to find the "bottom". There' isn't one, it just sort of fades into hardware in the same way life fades into chemistry at the cellular level. However a very practical idea is to consider C "the bottom" and work up as well as down. Programming requires the ability to mentally move through levels of abstraction, nobody truly "knows how to program" but there are plenty of people who practise it quite well. My employers don't pay me "Senior Software engineer" wages because they think I'm a wizard. Yes I have the beard for it, but it's irrelevant because they are paying me to find solutions to their business problems.

      K&R's "The C Language" is not "a" classic programming book, it is "The" classic programming book.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    8. Re:Something else? by ZahrGnosis · · Score: 1

      While I agree with parent in the case you actually are interested in newt farming, I actually code mostly just for the fun of coding, and focus on the type of code rather than the end product. To give an alternate approach, then, depending on what type of code you like there's probably a hackathon or a set of "challenges" or some competition that can provide motivation if you just want random problems to solve. I'm mostly an algorithms guy, so I do a lot in Kaggle, and Project Euler. Project Euler for example has hundreds of problems that more or less increase in difficulty, making it relatively easy to find something that will increase your skill, and the Kaggle forums are full of code examples from past projects to help you get on your way.

      If you're interested in graphics or UI programming these examples may be less help, but I'm sure there are similar things out there. The results of hackathons are great places to start because the code is generally written by competent programmers but they have no time to do clean up nor to build the spaghetti that years of updates often brings... bug fixes and hacks are common, so the code needs some TLC, but it typically has very few hands in it and so has some good consistency. iosDevCamp (from a quick google search), has links to github code for some of its results.

    9. Re:Something else? by butalearner · · Score: 2

      I'm not going to condemn you for this. My own perceptions of what I would be doing with my engineering degree turned out to be so far off target that it's not even funny. I'm not working on the stuff that fascinated me. I'm working on the stuff my boss lets me do. I try to find the "joy of engineering" when and where I can, but it is very difficult to earn a living, raise a family, have the intrinsic qualifications and market demand to pursue one's very specific interests. I suspect that many other readers here would agree.

      This is not to mention that working on the stuff that fascinates you doesn't mean it's all joy. I've found this even in my hobbies: I want to make video games, but there is a lot of tedium involved. At my day job, I've spent days hunting down intermittent software bugs, and just because I do it for rockets and missiles and satellites doesn't make it any more fun than doing it for industrial wastewater management systems.

    10. Re:Something else? by GiganticLyingMouth · · Score: 1

      Take a look at "The art and science of programming" by Donald Knuth, it's examples are in Pascal but if you inhale the wisdom in the book you will understand when I say that the language it uses is irrelevant.

      Just in case this confuses the submitter, the actual title is "The Art of Computer Programming". And IIRC the code examples aren't in Pascal, but rather in "MIX" assembly, which is a hypothetical language for a hypothetical machine. Also, be forewarned that it has a steep learning curve...

  4. Project Euler by Anonymous Coward · · Score: 5, Informative
    1. Re:Project Euler by Anonymous Coward · · Score: 0

      Thank you for sharing this. That looks like an awesome site. Great problems on there.

    2. Re:Project Euler by Anonymous Coward · · Score: 0

      yes, project Euler! mathematics - heavy.

    3. Re:Project Euler by vasilevich · · Score: 0

      Most require background on some specific subjects, graph theory, abstract algebra, etc. Overall, the problems are challenging.

    4. Re:Project Euler by PopeRatzo · · Score: 1

      My wife the math professor loves that site. She cops stuff off there all the time that she ends up using.

      IIRC, she's talked to the people from that site, to thank them and offer an idea or two. I'll ask her later.

      Yes, Project Euler is the goods.

      --
      You are welcome on my lawn.
    5. Re:Project Euler by Anonymous Coward · · Score: 0

      I know some people on this site have mixed opinions about Reddit, but I'd like to give an honorary mention to http://www.reddit.com/r/dailyprogrammer

    6. Re:Project Euler by Anonymous Coward · · Score: 0

      Great for math. Not so great for programming.

      Sure, Project Euler can be helpful, I like to use it to get the feel for a new language's syntax... but it won't teach you many useful things about programming.

  5. Pieces of impossible by ddt · · Score: 2

    Do a small piece of something impossible in such a way that you might be able to integrate it into the impossible thing later once your kung fu is strong enough. To tip the odds in your favour, do a piece of something that seems impossible but is something you're super passionate about. It'll help you overcome the hurdles more easily.

    1. Re:Pieces of impossible by s_p_oneil · · Score: 1

      Seconded. All seemingly impossible projects can be broken down into manageable pieces. Break it down logically and tackle specific pieces that seem doable, then build on top of them.

    2. Re:Pieces of impossible by braden87 · · Score: 1

      This is an excellent response. OP please put great weight on what ddt says. As a professional I can't tell you how many times I've been programming w/rt subject matter I love and been amazed at how little effort seemingly impossible projects take to come together. I've also noticed when I'm not thrilled/interested/excited about a project I tend to view tasks as much more difficult than they end up being.

    3. Re:Pieces of impossible by Anonymous Coward · · Score: 0

      Yeah, that much is true, but it's not necessarily a given that it's in the ability of the person in question to do the breaking down themselves.

    4. Re:Pieces of impossible by Sentrion · · Score: 1

      Yes, but if he tries he will learn a lot about software engineering and project management, skills that go way beyond basic coding; skills that employers are hiring for. Being totally self-driven would just be icing on the cake. I would however suggest a slight modification to the "break it down" strategy. And that is, write modular programs that can work with the other programs you write but could also each function as a stand-alone program. You still need to decide what direction you want to take your programming. If you want to write financial software, you could write several modules that perform specific financial functions and then a top-level program that integrates the individual modules as sub-routines. Or write the firmware for an intelligent battery charger, and keep adding functions, like a USB driver to interface the charger with other devices, and then add a display to the charger and write the code for that, and then write a program to log events, then a program to graphically display the charging history, etc. etc. Just start with a project that is potentially simple enough, like a quick and dirty operating system, and keep expanding on it until it becomes as over bloated as MS Windows has become today.

    5. Re:Pieces of impossible by Quirkz · · Score: 3, Interesting

      I think this is a good answer. Dream big, start small. About a decade ago I decided I'd like to create a web-based computer game. I had some very beginner web, PHP, and MySQL skills. In theory that was enough of a foundation, as long as I continued learning, but it was a daunting task, because I didn't know many of the simplest things, like even how to keep track of values behind the scenes (such as with session variables). I started very small, coding little pieces, figuring out just enough. Some of the really early components were actually gambling mini games, because those have such strictly defined rules. Once I had a rock-paper-scissors game and a craps game, I'd picked up just enough that I felt I could also implement a simple store. After coding a store, I realized I knew almost enough that, with a little more research, I could code an equipment page that added and removed gear, without really paying any attention to the benefits on the gear. From that came the character sheet which displayed gear plus other stats, then some simple noncombat adventures which gave players equipment and money or increased stats ... and so on. Each new thing required some learning, but most of it was incremental enough, and the learning specific enough, that I could bite off one interface/interaction at a time and keep going.

      Sure, it took me six months until I thought I had anything worth inviting play-testers, and a year to go into beta testing, plus a couple more of development, but eventually I had a complete game, a sprawling thing of size and complexity I couldn't remotely have imagined at the beginning. It wasn't only fun, but also somewhat profitable, and in retrospect it's one of the greatest creative efforts of my life. That's something which would have sounded silly to say as I was testing out code for those first couple of exercises with RPS and craps, but that's what they led to.

    6. Re:Pieces of impossible by Anonymous Coward · · Score: 0

      This is really great advice. Being a bit of a hobbyist programmer and being interested in learning Japanese, I took it upon myself to learn how to code a Japanese English dictionary for the PSP (written in C) based on using Jim Breen's Edict files (I imaginatively called it PSPEdict). I had only a very vague idea of how I could achieve this and didn't even know if I had the chops to pull it off. It might seem trivial to some of the folks on slashdot, but it was a pretty tall order for me at that point in time. I learned a hell of a lot in the process as I didn't even have much of a clue about unicode/SJIS when I started! Some other folks even downloaded it and enjoyed using it which I think helps with the feeling of achievement. It's always nice when you create something that will get used, by yourself or others. So, I fully agree with the advice to work on a problem that you're somewhat passionate about or interested in. It will keep you going when you think you're up against a brick wall. Don't be afraid to do a lot of digging and research to help you achieve a solution. Odds are it won't be in vain. Good luck with your programming journey.

  6. apply to rl situations by Anonymous Coward · · Score: 1

    I have found looking for things in my everyday life that could be made easyier or better with the use of programming such as general computer use and so on.
    a good example is i wanted to lower power usage in my general computing so i recycled and old eee to use as a master machine to turn on and off my other computers as i needed them i used python php and shell script.

    so i recommend just look at the things you do and try apply programming to it, hope this suggestion helps and lots of luck!!

  7. Pygame? by Cramit · · Score: 3, Informative

    You could build a small game in Pygame!
    http://www.pygame.org/

    A basic banner ad type game tutorial.
    http://www.pygame.org/docs/tut...

    1. Re:Pygame? by dmbasso · · Score: 1

      pygame is a good recommendation. Once I found a nice game that was written by a beginner, so I took his code and made some improvements, just to show how it could be done. Perhaps the OP might find interesting the historic of this git repo: https://github.com/dmbasso/ent...

      --
      `echo $[0x853204FA81]|tr 0-9 ionbsdeaml`@gmail.com
  8. Don't overlook the easy by DerekLyons · · Score: 4, Insightful

    Don't sneer at the easy/simple/etc... Just because they seem so at first blush doesn't always mean they are so once you get into them. Not to mention, working on the basics never hurts no matter what you're trying to learn.

    1. Re:Don't overlook the easy by nickittynickname · · Score: 1

      I agree. When I started off I did two things wrong that ended costing me a lot of experience. I didn't start off simple enough, and I didn't seek help when I really needed it. You need experience planning your program and going large at all will make planning difficult. If you do a larger project break it out into smaller projects, proof of concept each feature separately. When you feel you have a grasp on the pieces then try to put it together. You will find things you thought were simple take a long time.

    2. Re:Don't overlook the easy by dysmal · · Score: 1

      As mundane as it is doing the routine "easy" projects, keep doing them! Practice. Practice. Practice!!!

      During the routine projects you might come up with a more convoluted idea to do the same exact task which will require x5 the work and try to do it just because you can. It's when doing mundane tasks I've had many a brain storm to try a new method. Most of the time my brain storm was Hurricane Katrina (a disaster) but there were a couple of legitimately cool things I accidentally did in the process!

  9. Patterns by Anonymous Coward · · Score: 1

    Many websites offer lists of programming patterns http://rosettacode.org/wiki/Rosetta_Code I like rosetta code but there are many more websites, plus books to peruse. Try to find what fascinates you and see if any new ideas come out of it.

  10. Simple by Anonymous Coward · · Score: 2, Insightful

    Break up those "impossible" projects into manageable chunks. That's sure to be a helpful skill when you move into even larger projects.

  11. Write a game by Anonymous Coward · · Score: 1

    Games are a classic programming project. Depending on your level of interest, you could go with something fairly simple (like a card game) or an implementation of a classic video game (something like Breakout or Space Invaders). I've had friends who wrote simple role-playing games as well.

  12. "Python Projects" book by Anonymous Coward · · Score: 0

    I'm anxiously waiting to see what Wrox's "Python Projects" book might be like... (Not sure I can post links here, but it's easy enough to find.)

  13. Managing dependencies is a key skill... by Narcocide · · Score: 3, Informative

    ... and if that is all that stands between you and every single project that isn't "too easy" for you, then THAT is exactly what you should be working on.

    However, you can learn SDL and fairly easily use it with C and/or C++ and make simple games and graphical apps with no or at least very few additional dependencies.

    1. Re:Managing dependencies is a key skill... by DanielOom · · Score: 1

      Actually, it isn't.

      If you work on an RPM-based Linux system, then you get to install all the dependencies in one fell swoop. Dependencies are not hard, but they can be tedious.

    2. Re:Managing dependencies is a key skill... by Narcocide · · Score: 1

      No, I stand by my statement. You didn't read it carefully enough in your haste to find something with which to disagree. If you use a dependency-tracking distribution (which they ALL do these days, and RPM *or* DEB being immaterial to the discussion) and actually know how to make it automatically do the work of tracing and installing the dependencies for you and not breaking stuff when you need to install something (or even a newer version of something) not in the official repos, then you're ahead of the curve of 90% of the rest of the Linux users out there, and you've come half way to being able to manage including said dependencies into code you write, if not actually making any good use of them. (No, believe it or not neither RPM *or* DEB package management tools will do that part for you in ANY distro.)

      And neither of these things are difficult in the grand scheme of things. I never said that or even suggested it. I merely said that they are "key skills." As in; skills without which, however trivial, you'll never be capable of moving up from projects of trivial scope.

  14. Try a totally different programming language by Anonymous Coward · · Score: 1

    and not just a offshoot, like say C to C++ or C#. Just a completely different one.

    It may make the impossible seem possible. And a bunch of other new insights.

    When all you ever used is a hammer....

  15. Zen by mfh · · Score: 2, Interesting

    Study Zen. Not from a religious standpoint but from a philosophical one. Once you grasp these concepts, you are ready to become a programmer or anything else you want.

    The first lesson is that an object falls into a pond directly. The object splashes directly. The object sinks directly. The sequence out of order is unnatural.

    Okay so this idea informs you about security, and about data flow. More lessons await! :)

    --
    The dangers of knowledge trigger emotional distress in human beings.
    1. Re:Zen by phantomfive · · Score: 1

      I literally have no idea what you are talking about. Explain please?

      --
      "First they came for the slanderers and i said nothing."
    2. Re:Zen by fractoid · · Score: 1

      The first lesson is that an object falls into a pond directly. The object splashes directly. The object sinks directly. The sequence out of order is unnatural.

      Aha! This koan is a warning against multithreading.

      --
      Rampant carbon sequestration destroyed the Dinosaurs' tropical paradise. I'm here to help repair the damage.
    3. Re:Zen by mfh · · Score: 2

      This is an example of a koan.

      What is the Buddha nature of programming? I see this only as to, with heart, effortlessly spawn systems.

      The koan of the pebble as it is tossed into a pool is powerful and yet effortless.

      From a programming standpoint, the server is the pond. The pebble is the data that will connect to and be placed into the server. The person tossing the pebble is the user. Each activity will take the shortest path, perhaps to the farthest depth. The pond can reject pebbles (frozen). :-)

      Systems rely on this koan.

      --
      The dangers of knowledge trigger emotional distress in human beings.
    4. Re:Zen by phantomfive · · Score: 1

      The system doesn't exist.

      --
      "First they came for the slanderers and i said nothing."
    5. Re:Zen by mfh · · Score: 1

      I had never considered that the spoon in the film The Matrix could be also representative of the system itself.

      --
      The dangers of knowledge trigger emotional distress in human beings.
    6. Re:Zen by phantomfive · · Score: 1

      The Zen master writes code that matches reality. There is no 'system' because it is part of the whole.

      --
      "First they came for the slanderers and i said nothing."
    7. Re: Zen by Anonymous Coward · · Score: 0

      Don't listen to this dumb fucker.

  16. checkio and hackerrank by LetterRip · · Score: 3, Informative

    The two sites checkio and hackerrank can probably provide you some challenges. They will force you to learn some algorithms (trees, graphs, etc.) which will provide you with tools you need for more complex projects.

    1. Re:checkio and hackerrank by lllz · · Score: 1

      checkio is a really fun game. For me it was the only place I could find to practice coding with real projects

    2. Re:checkio and hackerrank by SB2020 · · Score: 1

      +1 for checkio, helped me move from 'knowing the syntax' to 'can do useful stuff'.

  17. Make it personal by Anonymous Coward · · Score: 0

    I wrote a torrent-based DVR in python. It was fun and educational because interest and focus was easy to maintain.

    Think of something you want to automate or make easier for you, first.

  18. Games! by paskie · · Score: 1

    Make a game. Or contribute to an existing open source game. You can easily set and adjust the scope and depth of the project so that it's fun and challenging. Chances are, you already play some games you like, and chances are you can get inspired for your own game project there. And perhaps others will even find it fun to play.

    Somehow, when I get playing a game for any period of time, sooner or later I slowly switch to hacking the codebase as it ends up being even more fun. :-) If you're interested in building a non-trivial game, you may find it interesting to take a look at the code of existing open source games and start hacking them. You will find fun and rewarding low-hanging fruit features lying all around. In strategies - Freeciv, OpenTTD, Wesnoth, Widelands..., arcades like Supertux or Stepmania or even FPS like Xonotic. Or UI or computer player for a board game.

    Games are also nice because they are very multi-faceted - you can start by adding simple features, but also work on optimization and better core algorithms, graphics programming, network programming, improve the user interface, porting it to a new platform or have a go at building an AI computer opponent. Hey, try building an AI for OpenTTD, none of them is perfect and they have a nice plugin system. And if you get more involved, imho they look pretty cool on a CV of any programmer.

    --
    It's not the fall that kills you. It's the sudden stop at the end. -Douglas Adams
    1. Re:Games! by i.r.id10t · · Score: 1

      Yup, simple implementations of games you know. I like cards - dealing a poker hand, determining what hand it is, comparing with other hands, determining winner. Then run it in a loop a few thousand times, recording results to a database, or a csv file, or ...

      --
      Don't blame me, I voted for Kodos
  19. math programming? by Anonymous Coward · · Score: 0

    Project Euler is good if you are interested in algorithms.

  20. Relationships by woboyle · · Score: 1, Informative

    Software is all about relationships between different bits of code, structures (classes), and behaviors. There are tools that can take a bunch of code and turn it into graphical models that help understand better how this stuff works together and is related. The modeling language is called UML. One great tool I use is called Enterprise Architect from Sparx Systems (an Australian company). I frequently use it to generate UML models from source code in order to better understand it. It isn't expensive (full professional version for about $200USD), and you can get a full version on a 30-day free evaluation if you want. Go to http://www.sparxsystems.com/ for more information. They also have less expensive versions, student licenses, etc.

    --
    Sometimes, real fast is almost as good as real-time.
    1. Re: Relationships by Walter+Bishop · · Score: 1

      I second the advice to learn UML. You can also add basic design patterns, and the different programming paradigms (object oriented, procedural, ect.)

      If you want to progress to bigger, collaborative projects, you need to be able to plan ahead before you start a project, and produce code that is readable (ie, as clean as possible, and commented) for the people you work with.

      .

      The kind of project you choose depends on your personal interests. For instance, one subject which I find interesting if you're into hard math is computer vision. It has nice algorithms to implement and play with, in addition to providing cool visual results you can show off. You need a basic knowledge of linear algebra / matrix operations to understand what you're doing. There are lots of projects online like manipulating objects on your computer by moving your hands in front of your webcam, HDR photography, face recognition, Kinect hacking, ect. Pretty much all levels of difficulty available. Lots of very nice libraries available. One you might check out is OpenCV, which is available in python and C.

      If you want it to progress beyond a hobby, you'll have to tackle a compiled language with memory management and pointers at some point. Most people do this using C/C++. Many guides teach you this online, but it's not a bad idea to invest in a good textbook like Knut's.

  21. Simulate a microprocessor. by crgrace · · Score: 3, Insightful

    When I was in graduate school I had to write a C program to simulate the operation of a small custom microprocessor. It was a truly fascinating experience (and not terribly difficult). You can start with something really simple like a MIPS variant and go from there. I actually had to write several simulators at different levels of abstraction (one only simulated the instruction set, another simulated down to the microcode, etc). Just simulating a small instruction set is a great way to get started.

    The cool part of this kind of project is it gets you learning so many different things out of necessity. To run assembly code on my C-based microprocessor simulation I had to learn to write assembly language programs. Then I had to learn how to write an assembler (I did it in C but if I were doing it today I would use Perl or Python) to generate object code for my microprocessor simulation.. Then to debug the microprocessor I needed to write a disassembler and so on.

    The microprocessor was microcoded so I also got to learn how to write microcode to verify fine details of the microprocessor. I got some great insight to computer arithmetic and really enjoyed it.

    I can't tell you what a cool experience it is to see a simple assembly code you wrote run on a microprocessor simulation you wrote. This can lead to getting involved in emulation but I didn't do that. I'm in the chip design business now so I write simulations and models of all kinds of analog and digital circuits and it is a blast.

  22. Simple web frontend for a database by Anonymous Coward · · Score: 1

    One small project that also gives you a useful tool is building a really simple web front-end for a database. I'm not talking about anything complex like a CRUD layer, just an HTML form with a multi-line input box where you type your query; then when you submit the form, produce an HTML table with the result rows/columns.

    To get started, you don't need a database server - you can just use SQLite. You also don't need a web framework - you can just do it as a CGI script initially. Then once you have something working there are many directions you could take it ... allow the user to select CSV output rather than HTML; 'port' it to work with a real DB like Postgres or MySQL; reimplement it using a web framework (say bottle); allow the user to save/recall/edit queries; make the UI 'smarter' by having the backend provide a list of tables/views and columns and use JS to make some sort of query builder.

    1. Re:Simple web frontend for a database by jrumney · · Score: 1

      For kicks, enter ;DROP TABLE *; on the end of one of your input fields, and discover why you shouldn't attempt something like this in public without CRUD layers and web frameworks.

    2. Re:Simple web frontend for a database by Anonymous Coward · · Score: 0

      Pffsh. You kids these days can't even write secure web code without the bloat of crappy frameworks? Don't make me laugh.

    3. Re:Simple web frontend for a database by Anonymous Coward · · Score: 0

      ERROR: syntax error at or near "*"
      LINE 1: drop table *;

      Where did the original post suggest putting it in public?

  23. Enhance your old projects by harperska · · Score: 1

    Try adding new features to your existing simple projects. If for example you are a musician, your beginner project might have been a simple metronome app. You could then hone your UI skills by creating a new interface for easier dialing in a tempo rather than the simple text field widget you used initially. Or you could try enhancing it to accent the downbeat for various time signatures (for which you will also need to come up with more advanced UIs). Then you can enhance the beat generation code even further to play custom rhythms rather than a constant beat. Poke around in the audio APIs a bit to allow a choice of what sound is played for each beat. Before you know it, you have built a beatbox app.

    I wouldn't recommend that sort of tinkering on a production app, but for personal projects coming up with new features for existing projects is a great way to hone your skills as you can make each step as big (today I will explore the MIDI APIs) or as little (today I will learn how to use a number spinner widget) as you want.

  24. SICP by jbolden · · Score: 2

    I'd go for the classic medium and I want to get better SICP.

    Online course: http://ocw.mit.edu/courses/ele...

    Online book + problems +... http://mitpress.mit.edu/sicp/

    This book more than any other will take your programming to a new level.

  25. Intermediate Programming by porsche911 · · Score: 1

    If you are really trying to get to an "intermediate" level you could start doing simple data structures and algorithms. Learn the classic sorting routines, linked lists, etc. Once you understand those you can start seeing how they are used in large programs. Look at some of the annotated programs -- the Lion's book on Unix is a good collection of readings to see how an operating system is structured for example. Games are a great way to develop your skills but you may not have enough background yet to get very far. Read the Python source code - you may not understand all of it but you will learn how a language interpreter is put together.

    Welcome to a long and twisty path as a programmer. Something new to learn every day.

    1. Re:Intermediate Programming by Anonymous Coward · · Score: 0

      Read the Python source code - you may not understand all of it but you will learn how a language interpreter is put together.

      Allocate a lot of time if you really want to do that. For a newcomer, the Python interpreter source code probably takes months to grasp, if the plan is to learn something from it.

  26. Easy by Murdoch5 · · Score: 1

    Grab a C compiler like GCC and program a simple game, a torrent defense game us a good challenge, After that grab a micro-controller and write a simple real time operating system.

  27. Learn a framework well by Wrexs0ul · · Score: 1

    You'll learn a ton, many of them no longer suck, and it can definitely speed-up the development time of future projects.

    On the web I work primarily with PHP and for a long time the frameworks weren't any better than reusing my own class libraries. These days there's some very comprehensive ones that do things faster and simpler than I do already, and have been well worth my time to get better at.

    A quick Google search shows there's some mature ones for different use cases of Python as well. Research a few and give them a try. You might just find their automating of the less fun parts of programming to be a huge boost to your development work.

    --
    --- Need web hosting?
  28. Try TopCoder by JMZero · · Score: 1

    Specifically, try doing past algorithm competitions - probably starting with their High School level competitions (that may sound insulting, but there's some very good programmers in that division). Once you've done some TopCoder, the data manipulations and calculations you do in "normal" programming will seem really easy. And they always post good solution explanations (or you can look at other people's solutions) to get you started.

    Algorithm work like this isn't the end and and be all of programming, but getting good at it will make you better at everything else you do - and you'll understand algorithms at a much deeper level once you've used them hands on at your own prompting (rather than using Dijkstra at the end of the chapter on Dijkstra). You'll also be directly prepared to implement the algorithms you need for games, physics simulations, efficient data processing, and all sorts of "heavy lifting" programming work that many experienced programmers fail at.

    --
    Let's not stir that bag of worms...
  29. Never Mind The Blocks by Anonymous Coward · · Score: 0

    Block/Tetris pun intended?

  30. Challenging, but doable projects. by Anonymous Coward · · Score: 0

    Find a simple processor and make your own assembler. Understanding assembly is a great way to appreciate what computers do from a technical level, making a language with a context free grammar delves into computer science, and a wide range of simple data structures like lists and trees are used. It may sound technical, but you if you program in C you only need to be familiar with stdio.h and stdlib.h.

    Alternatively make a simple graphics program. If you take the time to learn basic linear algebra you can make your own 3d graphics engine. The input could be an ascii file defining geometry, and the output could be to some basic format like PPM. This would help you learn linear algebra (arguably the most important math for science and engineering) and develop an intuition for it. And besides graphics are fun.

    Codecs are also fun, be it they for audio or images. They also have the benifit that you can check the functioning of your work by encoding then decoding data and checking if it matches (resembles if lossy) the original.

    I know these sounds like a lot of work, but I'd wager with some effort you'd be able to do it learn some cool useful stuff.

  31. Reimplement something useful: *NIX by Anonymous Coward · · Score: 0

    The best learning experience that you can obtain is by re-implementing individual UNIX commands. Start by reading the manual pages of programs like wc, cut, paste and build basic versions, then add some of their more advanced command line options.

  32. sourceforge by vasilevich · · Score: 0

    Go spelunking at sourceforge!

  33. How about... by Anonymous Coward · · Score: 0

    Game development.

  34. Groovy? by plopez · · Score: 1

    Its a good segue into Java, which is marketable, and advanced OO techniques. The name is unfortunate but it is very useful. It is in fact said it should have been named JavaScript, but the name was taken.

    What does intermediate mean? I am not sure. But I would first ID what sorts of problems interest me and then start chipping away at simpler sub-problems related to those problems or problem domains. The as time went on take on more challenging problems in the same problem domain.

    --
    putting the 'B' in LGBTQ+
  35. low level, high level, and object GUI by raymorris · · Score: 1

    It's really hard to suggest specific projects because "intermediate" is such an imprecise term. Stay away from anything security sensitive, especially WEB FACING security sensitive applications. Web scripts get attacked several times per day.

    Other than that, something that can really teach you a lot in a short time is to become familiar with a low-level language like C (not C++). Even if you don't USE C much, being familiar with it will let you understand your Python code so much better - you'll know WHY sort() is so slow in any language, and how to get the top 10 items much faster, without sorting the entire list. Most languages are themselves written in C, so understanding C will let you understand a bit about how every other language works behind the scenes.

    Learn a high-level language like Perl, PHP 5.3, or in your case Python. The Perl programmer can finish writing the software while the C programmer is still declaring her variables.

    Learn an object-oriented GUI language and subclas one gui element. Microsoft does a great job in this class of languages. (Not printing html, but actually manipulating GUI objects). When you become familiar with VB.NET or C#, and subclass just one gui element you'll "get it" as far as object-oriented programming goes. Python can do objects, Perl can use objects, etc. but they aren't the best way to LEARN objects. The GUI languages let you see objects and by subclassing one you'll understand the power of object-oriented programming.

  36. To the tune: Let it be by AdamColley · · Score: 4, Funny

    When I find my code in tons of trouble,
    Friends and colleagues come to me,
    Speaking words of wisdom:
    "Write in C."

    As the deadline fast approaches,
    And bugs are all that I can see,
    Somewhere, someone whispers:
    "Write in C."

    Write in C, Write in C,
    Write in C, oh, Write in C.
    LOGO's dead and buried,
    Write in C.

    I used to write a lot of FORTRAN,
    For science it worked flawlessly.
    Try using it for graphics!
    Write in C.

    If you've just spent nearly 30 hours
    Debugging some assembly,
    Soon you will be glad to
    Write in C.

    Write in C, Write in C,
    Write in C, yeah, Write in C.
    Only wimps use BASIC.
    Write in C.

    Write in C, Write in C
    Write in C, oh, Write in C.
    Pascal won't quite cut it.
    Write in C.

    Write in C, Write in C,
    Write in C, yeah, Write in C.
    Don't even mention COBOL.
    Write in C.

    1. Re: To the tune: Let it be by Anonymous Coward · · Score: 1

      You misspelled Go.

    2. Re: To the tune: Let it be by AdamColley · · Score: 1

      There is no Go.

      Probably just as well, someone might consider it harmful.

    3. Re: To the tune: Let it be by gmhowell · · Score: 1

      There is no Go.

      Probably just as well, someone might consider it harmful.

      Only v2.

      --
      Jesus was all right but his disciples were thick and ordinary. -John Lennon
    4. Re: To the tune: Let it be by Soft · · Score: 1

      You misspelled Go.

      You mean Brand X?

    5. Re: To the tune: Let it be by Anonymous Coward · · Score: 0

      You misspelled Rust.

    6. Re:To the tune: Let it be by Anonymous Coward · · Score: 0

      The words in this post would have taken 30 seconds to read.

      I took two minutes because I sang it to myself in its entirety.

    7. Re: To the tune: Let it be by Anonymous Coward · · Score: 0

      Whoa! A 6 letter fart of a reply from gmhowell!

  37. Selenium by Billy+the+Mountain · · Score: 1

    Hard to suggest because you don't have a stated goal.

    I think you would be challenged by working with selenium and webdriver to control web browsers for developing web tests. This will involve learning xpath which is recommended knowledge if you don't know it. This skillset is marketable, I might add.

    --
    That was the turning point of my life--I went from negative zero to positive zero.
  38. Make your own text editor by Anonymous Coward · · Score: 0

    A text editor is a project of substance but not too hard. Advantages:

    • It gives real experience in manipulating complex data structures in the language of choice;
    • The data structures are well known, so you don't need to spend time re-inventing them;
    • You don't need to spend time designing graphics etc;
    • You can add features as skills increase;
    • Its repeatable, allowing a comparison of the ease of development of the same program using different languages;
    • Every programmer needs to have invented his own editor, his own language and his own compiler. Just because.
  39. Fix bugs by manu0601 · · Score: 1

    A nice way to learn is to fix bugs in software you use. You will get familiar with the software architecture, and if it is well written, you may get good habits.

  40. Games and ProjectEuler by EmperorOfCanada · · Score: 3, Interesting

    The two bits of advice that I have given to a zillion beginning and intermediate programmers are games and ProjectEuler. First project euler is great because it will exercise your math abilities and problem solving abilities in any given language. Few CS people realize how powerful properly applied mathematics can be. PU will get you in tune with that ability.

    Secondly I recommend making some games. Pacman, space invaders, something 3D. They don't have to be good. But ideally you move onto multi player.

    Basically if you can make a multi-player multi-platform pacman in an isometric view in OpenGL driven 3D with a server(SQL/NoSQL) driven leaderboard with a distrubution/installer module for each platform then you are done. There isn't a whole lot of programming that you can't do.

    Not to mention your friends will think that you are a whole lot cooler making a game than when you try to explain the challanges of problem 132 in Project Euler.

    Many people here are mentioning Arduino (which I love) it is a cool thing to add to your resume but unless you do something fairly strange then it won't expand your programming skills much. Arduino programming is usually fairly straight forward act / react. Although dealing with crappy sensor data and having motors not do exactly what you meant and then having to compensate is both frustrating and oddly satisfying.

  41. Bowling league by tomhath · · Score: 1

    When I moderated a programming forum that had a fair number of beginners I was impressed by how many were implementing systems to keep track of their leagues - Bowling, Golf, Football (soccer), whatever. Pick one and write a system to manage the rosters, schedule, stats, etc.

  42. Grit by jones_supa · · Score: 1

    A really basic and powerful thing to learn: grit! It has helped me tremendously. Continue humbly improving your project, source file after source file, and never give up. Learn to finish a project properly from start to beginning. You will need this skill anyway, when you ultimately delve into the bigger projects, as they tend to get rather complex. But complexity can be managed too, so don't worry about it too much.

  43. Calculator by Charliemopps · · Score: 3, Interesting

    Write a calculator.
    Sounds easy right?
    Good luck.

  44. Different mindset by thatkid_2002 · · Score: 3, Insightful

    Stop thinking in terms of difficulty levels and programming problems. Go out there and just do stuff, easy or hard, with the objective of making something meaningful happen. Have another look at Open Source - maybe you don't grok open source and the ecosystem yet, but give it a bit more time and start with the simplest bugs rather than feature development.

    Something that I have found particularly helpful is having a go at using open source tools and libraries and then when you find something hard to use (and with a lot of swearing, eventually understand it) go and write a tool or a library to make it easier. There's so many rough edges out there that you can smooth out and these problems tend to have a fairly confined complexity in my experience. You've already started this with your scripting so take it to the next level.

  45. Try some classic problems? by rover42 · · Score: 1

    There are a number of problems that are often used as exercises. Textbooks at any level from high school to grad school have examples; here are a few off the top of my head: Games: start with something really easy like tic-tac-toe, then try more interesting games. 8 queens: put 8 queens on a chessboard so that none of them checks any other. The easy version is to just find one solution. It gets a lot harder if you want to do it efficiently and/or find all possible solutions. Doing it in reasonable time for N queens on an N by N board is really hard. Markov chains: Analyze some large sample of text to count how often combinations of words or letters turn up. Then write a program to generate text using those statistics. How long a chain do you need to look at to get more-or-less sensible output?

  46. Camera tracking by digitalhermit · · Score: 1

    I'm trying to do a similar thing. I'm pretty decent with Perl (or at least used to be) and know enough C and Java to get myself in trouble. I'm trying to learn Python now.

    So... my other hobby is video production. One of the things that's expensive to do is to track a camera so that that it can be replayed to CGI software. This allows almost seamless effects. For example, film an object against a green screen as the camera pans. In normal chromakey, it's quite obvious because the background doesn't track the same way as the camera. You can minimize this by choosing distant backgrounds but this limits you quite a bit. Anyhoo, I'm trying to use the positional sensors in a smartphone to track the movement and later replay it to software such as Blender. It hasn't been easy. In the process I am learning a lot about a lot of things.

    What I'm trying to say is that you may learn a lot from complex projects even if you don't succeed in your goal.

  47. Text-scanning programs by rover42 · · Score: 1

    You want to use Python, which is a good language for text manipulation. That suggests various projects based on scanning through text. Take any interesting large piece of open source software. How many switch() statements lack a default: case for error handling? You can get a first approximation with a few lines of shell & grep, but doing it right would need a language like Python and a moderate amount of work. What else would be easy to check? Take text samples from several different news sources. How do their vocabulary choices differ? Does that indicate their political biases? Can you program some of the standard indicators of reading level (see Wikipedia)? Do they get different scores?

  48. Fix other peoples' bugs by Anonymous Coward · · Score: 0

    Find an existing medium-sized project that you use and seems well designed. Look at their bug list. Pick something that seems pretty small, but not completely trivial, then work out how to fix it. This will get your eyeballs on a larger code-base, where you'll see various design patterns in use, and have to work out a clean way to make the fix within that context.

  49. Android root toolkit for Linux? by keith_nt4 · · Score: 1

    You didn't say directly which OS you're programming on but I'm going to infer it's Linux (common I think with python/open source types). Since one thing I did recently was root my galaxy nexus with the windows-only Wug's Nexus Root Toolkit I would suggest creating something similar to this for Linux. It always seemed strange to me that so many Android rooting tools were windows-exclusive. Doesn't have to be for a galaxy or nexus device obviously, any/all models of android/I'll leave that up to you. This particular root toolkit seems like it would be relatively straight forward to re-create/I don't think it would even take that long and it is actually needed...

    I should mention I'm kind of new to android rooting and I have no idea if the equivalent drivers for the various phones exist for Linux as they do for Windows.

    --
    "UNIX is very simple, it just needs a genius to understand its simplicity." -Dennis Ritchie
    1. Re:Android root toolkit for Linux? by geminidomino · · Score: 1

      It always seemed strange to me that so many Android rooting tools were windows-exclusive.

      They're generally just front-ends for adb and fastboot (and possibly curl, if they fetch the files, too), because average windows users are afraid of command lines. The equivalent tool in linux would be little more than a very small shell script.

  50. Not intermediate yet by ranton · · Score: 2

    I would move past writing software for yourself. While "intermediate" is obviously subjective, you are very unlikely to be at that skill level if you have never sold software or written software for money. Writing software for yourself is so much easier. You can change your goals based on what is easier or what skills you already have. You don't have to figure out difficult problems just because that is what the customer wants.

    Since it can be so hard to find work with no experience, and with no academic credentials, a close second is to write software for free for someone else. I started developing software without a degree by writing CRM/ERP software for small companies (not that I even knew what those initials meant at the time). It taught me not only how to write better software, it taught me how to gather requirements and deal with customers. There will probably still be huge gaps in your abilities because of a lack of mentoring from someone in the industry, but it help you prove yourself enough to get a job in the industry.

    Even if you can't find anyone who wants your help with software, a fake web-based CRM/ERP software project is a great way to learn skills that are actually useful in industry. And you will still have something to show employers if they want an example of your work.

    --
    -- All that is necessary for the triumph of evil is that good men do nothing. -- Edmund Burke
  51. don't be afraid by mrzaph0d · · Score: 1

    to start something you're not sure you can finish. i wrote a framework in perl to generate some pdf reports, complete with graphs and automated text. took me quite a while, and a lot of "i'll come back to this part later". i went from the script being used to piece together bash/shell commands, to it doing everything.

    but the point is, i kept at it. taking a little part at a time and futzing around with it till it worked a little better.

    --
    this is just a placeholder till i send back my real sig from the future.
  52. Field mapping with javascript/xml by mveloso · · Score: 1

    If you need an easy problem that quickly turns into a nightmare, try writing a program that allows the user to map one set of database/data structure/XML fields to another set of database/data structure/XML fields.

    For bonus points the user can use javascript to do the transform, as well as using a nice GUI.

  53. Re: Try some of that gay buttsex by aruffino84 · · Score: 1

    That was actually funny .. I think. ok it was. But it's starting to not be. ok now it's gone.

  54. But what do you want to DO? by FuzzNugget · · Score: 2

    You're asking the wrong question. Programming isn't an end in itself, it's a means to an end. Ask yourself what practical application you want to accomplish, then teach yourself the appropriate language.

    Personally, I always liked website development. I like that I can keep my fingers in a few pies that I enjoy -- graphic design, sometimes photography, the occasional copy writing and the code to put it all together. So, naturally, I gravitated towards PHP, JavaScript, HTML and CSS (OK, those last two aren't really programming). I'll admit, I like the instant feedback and gratification of interpreted languages.

    So come up with an end goal that interests you, then do some research to find the best language(s) suited to the task. If it seems too complicated, scale back your ambitions a bit until you find something suitably challenging without being overwhelming, then work your way up. You'll find that many of the skills and principles you learn from one language translate pretty quickly to others.

    1. Re:But what do you want to DO? by flightmaker · · Score: 1

      You're asking the wrong question. Programming isn't an end in itself, it's a means to an end.

      "But what do you want to DO?" THAT is the correct question, IMHO.

      Followed up by the correct statement. Computers are there to quickly and accurately do the repetitive donkey-work that we humans don't have the time or patience to do. Programmers enable computers to do this tiresome work.

      Since I last got made redundant from an engineering job I've busied myself on two little projects for myself, because I've always loved to code and get stuff to work that others would have no idea about, even though I got sick of doing it for others.

      Project 1 - software that gets kicked off by cron on my server every night, to send me by email reminders to do stuff on time. Works really well, the way I want it to.

      Project 2 - to take a (sometimes cleaned up by using gpsprune) GPX format track file from my Garmin and analyse it to determine the exact distance I've walked or cycled, altitude gained and lost, and estimate the calories I burned during the exercise. This one is also working well, but I'm not certain of some of the parameters I built into it so I'm trying to find somebody knowledgeable about exercise science who can advise me on this.

      So, what I'm saying is, find something that you do in everyday life that does or could generate a significant quantity of data to crunch and raises in your mind a "what if" question. Or, as somebody else suggested, do something with an arduino that you're curious about. I've always thought it might be nice to build an accurate outdoor thermometer, possibly using four terminal measurement with a platinum sensor. This would involve the use of hardware timers and interrupt service routines to take readings at regular intervals, and perhaps operate a multiplexed LED display.

      If you find something like this to work on, that interests you in the first place and will perform a useful function after completion, the motivation will be there and success more likely.

  55. Into tabletop RPGs? by Culture20 · · Score: 1

    Make some character generators, weather generators, dungeon generators or the like. Slow or involved number crunching for your games that is drudgery on paper but easy with a program. Mass combat resolution using old D&D WarMachine rules and a spellbook generator were my first mid-range projects outside of school projects (which were much more involved).

  56. do the pretty impossible by frovingslosh · · Score: 1

    Do the pretty impossible ones. It is a lot more fun and you will learn a lot more.

    --
    I'm an American. I love this country and the freedoms that we used to have.
  57. Ruby Warrior by Squiggle · · Score: 2

    If you like Python you might like Ruby too (I love em both). I always wished I had learned Ruby with ruby warrior:
    https://www.bloc.io/ruby-warri...
    https://github.com/ryanb/ruby-...

    --
    Complexity Happens
  58. 30 years ago... by funwithBSD · · Score: 1

    I would suggest writing a DB app to organize your CDs.

    Oh well.

    --
    Never answer an anonymous letter. - Yogi Berra
  59. puzzles and games by Anonymous Coward · · Score: 0

    A few suggestions:

    1) program a sudoku solver.
    2) program a Mastermind game. The computer poses a problem, the user suggests solutions, the program responds with numbers of correct colors and color+positions.
    3) learn Python and tk, and make a graphic interface for #2.

    The behavior of the games above are well-defined, and the goal of playing a game you wrote yourself will keep you engaged.

  60. Good game to try by Horshu · · Score: 1

    How about a Core War simulator? It's essentially writing a very, very simple operating system, so it's easier than a full OS or compiler-level project, it's graphical, so it's got visual feedback, is a game, so it's fun, has TONS of "unit tests" in the form of 30 years of programs.

    1. Re:Good game to try by dataspel · · Score: 1

      I wrote an implementation in C when the Sciam article was first published. Of course, Stomper (a one line program that copies itself to the next higher address) was pretty much unstoppable, until I introduced the ability to capture enemy processes and repurpose them for programs on the allied side. Lots of fun, but I could never get anyone to try it after I explained the game. I think they were afraid of a process "escaping" and overwriting their machine :)

  61. Code? by Anonymous Coward · · Score: 0

    Scripts are usually not referred to as "code".

  62. Jump in by Anonymous Coward · · Score: 0

    A very skilled boss told me once that you can complete any project if you break it into small enough pieces.

    The most gain is with the most pain. If a project feels overwhelming, you're about to learn something. Even if you never finish, it's worth every minute trying to figure out how to find a solution. You'll be surprised how much it comes in handy somewhere else.

    And honestly, solutions are made for problems. Find problems to solve... And start using python to do it.

    And so I don't sound like a douche stargazing, get a github account, a stackoverflow account, download an IntelliJ editor from JetBrains and set a goal.

  63. Do something impossible by Extide · · Score: 1

    When I am learning a new language, I usually try to think of something cool to do, that would be pretty difficult, and then challenge myself to actually do it. Using the many resources available on the web you should be able to figure out any problem you run across. I am personally more into utility type apps, so that's the sort of things I have done, but if you are more into games or whatever you can do that too.

    --
    Technophile
  64. Create a Doubly Linked List by FlyingGuy · · Score: 1

    Write all the parts...:

    • Insertion Function
    • Deletion Function
    • Traversal Function
    • Search Function
    • Sort Function
    • Save to Disk Function
    • Load from Disk Function

    You can do this in C. C comes with EVERY Linux distribution so no additional parts or bits required. If you can do this, you really can do most anything and further more you will understand some of the more advanced concepts of computer programming, one of the most important is Memory Management. Now I know that with languages like Java you are far removed from those concepts bust just understanding what you have to do to manage your memory footprint will help you in those languages as well since you will have a much clearer understanding of what is going on under the hood. If you push a few boundaries you will understand some of less obvious parts of other languages.

    --
    Hey KID! Yeah you, get the fuck off my lawn!
  65. make your own hex dump by bzipitidoo · · Score: 1

    I find a hexadecimal dump utility to be an easy starter project for a new language. You have to learn how that language handles file I/O, the program will be short, probably under 20 lines, and the utility can actually be useful. Can also whip up a program to do the reverse. Occasionally I've worked on bare bones UNIX systems like old versions of HP-UX that didn't have all kinds of handy utility programs, but did at least have a C compiler.

    --
    Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
  66. Not kidding by Anonymous Coward · · Score: 0

    Seriously not kidding here:

    1) Stick with Python; great language. All kinds of cool stuff in it, and then, in the libraries, standard and otherwise

    2) Go after AI. It's the most important problem of our time, you'll learn an astonishing number of things, it'll push you into every corner of Python eventually, which is entirely a good thing. Did I mention it's the most important problem of our time? There are plenty of small things to do on the learning curve. And Python's a great language to probe the idea of associative memory, play with the idea of what *types* of associations, etc.

    You'll either not solve AI (you should prepare for this), or you will, in which case... well, you know. But there is no more fun, or tough, or important, problem out there to work on, learn about, or resolve.

    After a year or so of this, those problems you think are mid-level problems will have turned into small problems. And you'll have built programming chops you can't even imagine right now. Trust me on this.

    1. Re:Not kidding by Anonymous Coward · · Score: 5, Funny

      You should believe him. He's an AI I wrote last year when I was learning to program in Python. Now I'm an excellent programmer.

    2. Re:Not kidding by Anonymous Coward · · Score: 0

      Replying to remove mistake in moderation. I find this funny, not overrated!

    3. Re: Not kidding by I7D · · Score: 1

      Just to be clear, the OP requested a medium level programming project and your suggestion is to tackle artificial intelligence? I'm considering getting into hiking, does Mt. Everest sound like a good choice?

      --
      Neil is that you? Yeah yeah, it's me... Neil...
  67. No Itches? Why, Do Something Useful by Anonymous Coward · · Score: 0

    You don't seem to have any itches to scratch with coding. So why not check one of the open source projects, check their junior jobs list or their bug tracker?
    You ll solve real world problems, get code review and they ll likely help you to improve.
    KDE for example is doing their own season of code (besides having a junior jobs list, bug tracker etc), you get a mentor and do something useful. Unlike googles summer of code you are not getting paid - but you are almost certain to get a spot. Good luck and have fun with coding!

  68. Window manager for X11 by Anonymous Coward · · Score: 0

    Excellent fun! (and no, I'm not kidding)

  69. Try this by Ghjnut · · Score: 1
    --
    MouseClass extends ScrollClass, which extends TabClass, which extends SidebarClass, which extends PowerClass, w
  70. Try Fractals by KingOfBLASH · · Score: 2

    Fractals are complex images generated out of amazingly simple algorithms and math.

    You can quite easily go from easy to sophisticated solution, you'll get exposure to different aspects of programming, and it's something you could spend as little or as much time as you'd like. They literally go on for infinity so in addition to the mandelbrot set and the julia set that you have probably seen a million times before, you can create many amazing different images from them.

    Plus you'll get a "cool man" feeling when you print up a giant psychedelic sized poster and people visiting comment on how awesome it looks.

  71. Try one of the "impossible" projects by Anonymous Coward · · Score: 0

    A good way to increase your skills is to try to do something which is a bit above your current skill set.
    Look at your list of "impossible" projects, and choose one of them, which sounds so "cool" to you that it's guaranteed to keep you motivated for a while. Then, split the project into smaller chunks, which are easier to learn when you start as a complete beginner.
    For instance, suppose you have this great idea about a computer game. Then you split it up:
    -> It will have 3D graphics: you need to learn how to do that
        -> search for programming examples on the internet
        -> make an informed choice on what technology to use (e.g. OpenGL vs. Direct3D)
        -> download and test some tutorial source code, and try to understand it
        -> using chunks of example code, make something that resembles what you'll want in your game
    -> It will have network communication: you need to learn how to do that
        -> search for programming examples on the internet
        -> make an informed choice on what technology to use
        -> download and test some tutorial source code, and try to understand it
        -> using chunks of example code, make something that resembles what you'll want in your game
    -> It will have sound: you need to learn how to do that
        -> etc...
    These are a sort of "mini-projects", which are doable for a beginner. Once you've done these, you're no longer a beginner, and your big, cool project isn't "impossible" anymore.

  72. If you want to learn by sirlark · · Score: 1

    If you are into learning, and don't already have a specific goal you can work towards, I strongly suggest re-inventing the wheel, specifically the file manager wheel, it covers a LOT of ground and will earn you invaluable experience. After writing one you will have solid experience in

    1. File management, and filesystems
    2. GUI coding and almost all of the common widgets
    3. or you could do a text based file manager, up to you
    4. Basics like arrays (lists), mappings (dictionaries), structures (no real equivalent in python, but can be mimicked with classes or dicts
    5. User interface design
    6. program design, this project can be done in a variety of ways, some good, some bad, be prepared to get it wrong throw it out and start again. Also done right, there are lots of small components (e.g. a file copy dialog) that aren't overwhelming to start with. The biggest step in going from beginner to intermediate is learning how to decompose the big problem into lots of little easy to handle small problems... this is the 'art' of computer programming.
    7. A file manager covers a lot of different data structures, and hence the algorithms that use them, vectors, trees, graphs (these three alone get you a LONG way)
    8. Finally, a file manager consists of a LOT of glue code, in fact, most of it is glue code, and writing glue code gives you more practical experience than anything else, because YOU have to figure it out yourself.

    Notably, this lacks some other fundamental stuff to programming: SQL (a little knowledge here goes a long way too), graphics coding (the basics I learnt before openGL have stood me in good stead over the years), and I'm sure there's more. Still, a file manager is a good choice IMHO

  73. Tought myself recently too: lessons learned by Anonymous Coward · · Score: 0

    First, I had to know what I wanted to build. You have to have a project you're passionate about, or the challenges of figuring out layered dependencies will be demotivating. This is probably the hardest step of all: what do you want to achieve.

    Determine the key requirements of your project. For mine it was speed and that it was multi-platform (its an app). Once you've determined the requirements, ask around for the what the best tools are to meet your requirements. In my case: Corona SDK / Lua (for multiplatform), and SQLite for the on-device database.

    With what to build, and the tools in hand, you can start building and learning. Then it doesn't matter if your project is easy or hard.

    My first project is a beast of a project with all kinds of features to figure out. social media integrations, database syncronization between a device and a remote server (this alone required thinking about database design, JSON, and settingup an appropriate webserver with the right components that will eventually also meet the requirements of the back-end). I'm sure an experienced programmer makes these choices without thinking about it, but it took me a year to figure it all out and build v1. But the beta tests are done and its going live next week :)

  74. other challenge sites by jcomeau_ictx · · Score: 1

    besides those already mentioned, codechef.com is good for a beginner; so, I understand, is spoj.com though I haven't tried them. topcoder.com isn't bad either.

  75. C++ Mp3 player? by danknight48 · · Score: 1

    Grab yourself :
    - Qt http://qt-project.org/
    - Bass API http://www.un4seen.com/bass.ht...

    Get coding. Make it a simple MP3 player, or, expand on it until your hearts content.

    Qt is great for making quick apps and learning a bit of C++ in the process.
    The rest of time, you'll be learning "Qt functions", not a bad thing, as it pretty much contains everything you'll need to make a cross platform GUI program. Qt is quick to learn, very simple compared to most things out there.

    If you prefer Visual Studio, or prefer more of a challange (and care about resource use of your program), use that with C++ and MFC, or C if you like.

    Think simple, start simple then expand on your project if your enjoying it. This way, you'll learn quicker and get satisfaction out of doing it.

    Best of luck.

  76. Write your own programming language by Anonymous Coward · · Score: 0

    Python is just the right tool for that.

  77. java servlets by Anonymous Coward · · Score: 0

    If you are at all interested in enterprise java, you could do a lot worse than learning about servlets. Im sure there are equivalent constructs in python. You might like to try programming against a restful api, or even writing your own web services

  78. this by Anonymous Coward · · Score: 0

    Learn You a Haskell for Great Good!
    http://learnyouahaskell.com/chapters

  79. Mazes... by CFBMoo1 · · Score: 1

    And by mazes I mean mazes that can make your Nethack/Rogue happy bits twitch. Out of boredom I started making a cave and dungeon generator like the one Nethack/Rogue has. Here's the resources I used to put together what I have so far in Java.

    Topic in General
    http://www.roguebasin.com/inde...

    Caves
    http://www.roguebasin.com/inde...

    Dungeons
    http://www.roguebasin.com/?tit...

    Procedural Content Generation Wiki
    http://pcg.wikidot.com/

    BSP Dungeon Generation
    http://doryen.eptalys.net/arti...

    Use one of the examples those places provides or do like I did and strike out on your own method to solve the problem of cave and dungeon building. I got a cave screen shot of one test generation.

    My Cave Generator Output
    http://imgur.com/9O9Niae

    --
    ~~ Behold the flying cow with a rail gun! ~~
    1. Re:Mazes... by Anonymous Coward · · Score: 0

      Just to add to this, I got a screen shot of the output of the box room generator I built as well.

      http://imgur.com/leq3XLL

  80. Design Patterns by garryknight · · Score: 1

    "Intermediate" means whatever you think it means, but I'm assuming you know language constructs and data structures. For me, "intermediate" means "knows enough to do some real damage". So at this point I recommend that you learn those things that are common to all programming languages: software design patterns.

    Many people would point you at the book "Head First Design Patterns" and that would be a good choice. But there's also a Dummies book that's written by someone who is an expert in that area. I don't have the details to hand but if you're interested you'll find them easily.

    Once you know the name of a few patterns you'll find that you can do a lot of learning/research on Wikipedia, because they're pretty much all up there. To start you off, you could take a look at the Model View Controller pattern, implemented in Java and other high-level languages, and think about how you might refactor one of your existing projects to incorporate it. And MVC can easily lead you into the parallel study of frameworks.

    A good knowledge of patterns and frameworks will not only keep you out of trouble but also increase your employability, should that be your intention.

    --
    Garry Knight
  81. jump into the deep end by martin-boundary · · Score: 1
    The best way to learn to swim is jumping into the deep end. It forces you to find within you the means to do it, no matter what.

    Same thing with programming. Forget that intermediate stuff bullshit. Jump into the deep end, and learn to code or sink trying. Either way, you'll know what your limits are, fast.

  82. Learn a language with a different paradigm. by Required+Snark · · Score: 1
    Learn a language that is different then other languages that you know.

    Chances are that all of the software you know is written in an imperative language that is derived from C. It's pretty much any language that uses curly brackets: {} Note that even Python and JavaScript share a lot of concepts with C.

    Try a Lisp family language to get exposed to functional programming. Scheme has already been mentioned via SICP. Or go further with functional programming and do ML, Ocaml, Haskell, F#, Scala.

    Prolog. Declarative instead of imperative programming.

    If you've never done assembly get a microprocessor like Arduino and control something in the physical world. Combine C and assembler. Or try x86 assembly. I would do the AVR micro on the Arduino before x86n since it is much more regular and doesn't have all the legacy architectural issues.

    Forth. Low level but not assembler.

    Erlang. Lots of parallelism with a "shared nothing" Actor style of code.

    MATLAB or OCTAVE. Start thinking in terms of vectors and arrays.

    Don't worry about the language being "useful". The point is to expose yourself to a different way of thinking about how to program. It will make whatever you code better.

    --
    Why is Snark Required?
  83. Find FOSS Project that has been in GSOC or GCI by Anonymous Coward · · Score: 0

    Many of the suggestions are good but I don't see anyone mentioning that any FOSS project that has participated in Google Summer of Code (college focused) or Goog!e Code In (high school focused) should be adept at mentoring and will have a list of projects they really would like done. So you could get some practice, have a mentor, and produce code which someone will use and you can point to as experience.

    FWIW RTEMS.org has a number of open projects of varying complexity and length. We are in the process of moving to a Python-based build and testing system and there are lots of useful projects of varying durations.

  84. a treasure trove of small fascinating projects.... by cryptozoologist · · Score: 1

    i would like to recommend 'turing omnibus' and 'the magic machine' by a. k. dewdney. there are some available on amazon right now for $0.01 and $0.35 respectively! it is a collection of topics drawn from the old computer recreations column in scientific american. topics are laid out in pseudocode so it is not tied to any language in particular and thus remain timeless. really, no programmer's library is complete without at least one of these fine books.

  85. Re:Why are you teaching yourself to code? by AdamColley · · Score: 1

    You're an arrogant fool and would be downvoted if I'd not already posted on this article.

    I taught myself programming on Z80 and 6502 machines many years ago and I could lose and find a lot professional programmers these days. University graduates in particular seem to have no idea how the systems work, god knows why, you'd think they'd teach the basics but apparently not everywhere!

    Do you wear a suit to work? You sound like you do.

  86. Contribute to Open Source by 140Mandak262Jamuna · · Score: 1

    Find a open source project that you like. Down load the sources and build. Go through bug reports and start fixing bugs. Pretty soon you will be working on code with tons of dependencies, but most of them are already written and supported. By and by you would end up almost "owning" a serious chunk of code.

    --
    sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
  87. Documentation or QA by Anonymous Coward · · Score: 0

    Why not volunteer to write some documentation? Lots of projects have good code; good documentation is a whole other matter. It would be a chance to go through the code, figure out exactly what all the parts are doing, probably uncover some bugs in the process, and ask lots of interesting questions about the project code base while you're at it.

    Another good project would be test code. Lot's of projects support "make check" (and lots don't), but writing good tests is time consuming and requires some advance planning. An intermediate programmer should know enough to write a test suite that checks whether a portion of the project is doing what it claims even if you don't understand every detail of how the project is doing it.

    -JS

  88. oh the places you'll go... Re:Simulate a micropro by Fubari · · Score: 1


    crgrace: r.e. micoprocessor simulator, that is a smashing idea... it sounds very cool.
    orignal poster (an anonyous reader): Let's assume you're doing this for fun - as a hobby.
    car analogy: I read that you don't need to know how an engine works to drive a car, but a good racers will know something about engines.
    So... if you want to really learn programming, learn some assembler - doesn't have to be a lot, but every little bit you do learn will help you. Simpler chips are probably better to get started with than jumping into contemporary laptop CPU's. Maybe Arduino? Sounds like you an get plenty of online help with that (example: http://stackoverflow.com/questions/14464713/arduino-assembler-programming-nothing-happens), and they have a 8-bit processor that should make a fine research project for you.
    Then learn a compiled language, probably some straight up C.
    Once you understand how a cpu works you'll have a deeper appreciation of what CPython's virtual machine is doing, or what 'just in time compilation' is doing for PyPy.

    othoh, if just coding Python is fun then have fun. Nothing wrong with that; you don't have to learn assembly... but if you can wrap your brain around assembly, it will certainly raise your game.

  89. Common question . . . by Kimomaru · · Score: 1

    I think the best answer is to start off asking yourself the question, "What are you interested in building". Technology and programming languages should be thought about after you figure out what you want to build. It doesn't make sense to think about what kind of building materials your interested in using before you know what kind of house you want to build, right? If you want to build an open source based dynamic web site, for example, then you will need to learn some Apache, PHP (probably), CSS, MySQL (probably), Debian (hopefully), Javascript, some regex, the list goes on (and it can be a long list). You could be spending up to the next 5 months learning how to build a dynamic web site, but the time spent is well worth it because it will teach you lots of other things like whether your interested in front end (like CSS) or back end (like MySQL) tech. You will also learn about cloud servers like Amazon Web Services or whether you would like to build something on a DIY system like Raspberry Pi or, my favorite, Cubieboard. You'll also need a StackOverflow account to ask questions for when you get really stumped.

    So, yeah, just figure out what will keep you interested for a few months then go for it.

  90. Me Too. by Anonymous Coward · · Score: 0

    I found 2 cool pages to check out. Try the python challenge. http://www.pythonchallenge.com/ Also check out code chef. http://www.codechef.com/

  91. SpamBayes by NewWorldDan · · Score: 1

    The SpamBayes email filter hasn't been updated in forever. The actual filtering part works great. The problem that needs solving is that it needs to be updated for Outlook 2013 (using the Ribbon) and for 64 bit platforms. It's open source, and written in Python.

    http://spambayes.sourceforge.n...

  92. Depends on your goal... by Gestahl · · Score: 1

    Are you trying to practice basic coding and logic skills?

    Project Euler, as many have said, or similar sites.

    Are you trying to learn a specific technology?

    Then go through a tutorial. Notice anything stupid/wrong/incomplete/ambiguous about that tutorial? If not, please share this unique example of completely flawless information transfer between humans. Otherwise... rewrite it yourself, in your words. Think about other directions the tutorial could have taken. Tinker and experiment.

    Are you learning programming to accomplish a specific task?

    In that case, you already have your answer. Write what you can. Learn to write the other parts. The code will grow as you grow.

    Think about programming like carpentry. If you want to do a carpentry project, you can choose:

    1) An design that emphasizes core skills, but isn't particularly useful, although it isn't *useless*. In carpentry, that would be a puzzle box, or a birdhouse, or some other small bauble. The goal was to perfect tool usage, not produce something useful. That's like Project Euler stuff.
    2) A design that emphasizes one particular tool, but because of that isn't particularly practical either, and almost completely useless. You know, some complicated, ornate thing that's only meant to really show off a scroll saw, or using a lathe to make a complicated-looking curtain rod. That's like the tutorial option.
    3) You build a simple table... even if it's just four 2x4s screwed to a piece of plywood and doesn't even bear loads well. You work up from there... you learn about cross bracing and railing. The screws are ugly, so you learn about countersinking and hole plugs. You might even have to start from scratch, but that's OK... you'll redo everything twice as fast the second time. Then maybe you route the edges of the table when you learn to use a router so you have a nice beveled edge. Then maybe you buy a lathe, and turn the legs of the table into something more fancy... and then you add scrollworked cross-braces... That's a real world project.

    All three of these will help you become a better carpenter/programmer, but you will never become a master carpenter/programmer until you do option 3.

  93. Don't read through the whole thing by Anonymous Coward · · Score: 0

    Here's a hint for trying to work sizeable free software projects: Don't try to read the whole thing. Especially don't try to read the whole thing with all dependencies. Instead, try to figure out where it does something that you want to modify and look only at as much code as you need to figure it out. Of course you first need to find something you want to change. Looking at lists of open issues or requested features is one way, but those often lead to things that are not very fun to work on (otherwise they would have been done already). Try fixing a bug or adding a feature to scratch your own itch.

    Sure, knowing the whole thing can come in handy and I'm sure it feels good being able to say "I understood project X completely," but for real projects it's often not feasible. Trying to navigate other people's code is also an important skill. You still get to take a fascinating peek into the other programmer's brain, even while just doing this.

    P.S. Stay away from web development. That way lies madness. It's also hard to do securely and getting hacked is not much fun. Maybe if you have an experienced developer to audit your code for you, it would be doable.

  94. It starts and ends with a game by fzammett · · Score: 1

    As someone who's been programming for right around 30 years, more than 20 of it professionally, and has written a number of books along the way, I get asked for advice fairly often. One of the questions I get asked most is a variation on this one... for me, the answer is always the same: WRITE A GAME!

    What developers often don't realize is that few programming projects touch on as wide a range of topics and disciplines as games do. Things like data structures, AI, file handling, input processing, obviously graphics and sound, networking sometimes, performance tuning... all of this comes into play in a game to varying degrees and in many forms. Very few things you'll ever program in a professional setting will be as wide-reaching... in fact, in my 20+ years of professional development I can't think of a single thing that has!

    Even things like usability and UI design, project planning and many other "soft" skills come into play when you're a one-man show.

    The best part about a game project is it can be as challenging as you want and it can grow in complexity over time. Start with a simple Pong clone. That's not too tough. But then, update the code to add more intelligent paddle movement of the computer opponent. Then modify it so you can play against a friend over a network. Then change it to a 3D view. And so on and so forth. Each step of the way increases the challenge and also the learning.

    Plus, of course, being a game that you're making, it tends to be FUN! Both in developing and testing. It also tends to be very demonstrative in terms of progress... you can SEE what's being produced and little changes in the code can make a big difference on the screen, which makes you feel pretty good and that in turn makes the project continue to be fun to work on, which means more opportunity to learn. Hey, I get paid good money to write financial software all day... I even enjoy it most of the time... but it's nowhere near as gratifying as the game programming I do on my own time!

    Game programming is also almost entirely technology-agnostic. There's virtually no language, no platform, no set of new tools or libraries that can't be used to make a game of some sort. That makes it the ideal tool for learning a new set of technologies. Gotta learn HTML/CSS/JavaScript? Write a game! Moving on to Java using Spring and running on Tomcat? A game, sir! Whether you choose a new game concept each time or just keep recycling one (making it a porting exercise, which is a great way to learn a new toolset) it'll work for you.

    Also note that you don't need to write the next 3D masterpiece here... in fact, writing a Zork-style text adventure game can be a huge learning exercise on its own, especially if you write a natural language parser (though, again, it's up to you: you can start with a simple keyword analyzer that you can bang out in an hour at most and grow it from there). Graphics and sound are a great learning experience on their own (I can't tell you how much better at math, always a weak subject of mine, I've gotten by working on games!) but they aren't required for a game... though, I've also gotten pretty adept at working in various graphics editors, which definitely has helped me in my day job (I'm still no artist, but I can manipulate existing graphics quite well now, which will make you a more valuable asset as non-graphic artist developer).

    Whatever the concept, whatever the toolset, whatever the learning goal, a game is the way to go in my opinion. It's how most of us now old-schoolers got started frankly and it has served us very well over the years. Some of us still write games of course because it's fun and we continue to learn from the experience... and also, especially with the rise of mobile devices, there's an opportunity to make money! Look at some of the recent hit games and it's obvious you don't need to write the next Titanfall to make some good coin. It's a secondary benefit to be sure, but it's nice to know it could be one :)

    --
    If a pion (n-) collides with a proton in the woods & noone is there to hear it, does lamdba decay into the source pa
  95. VERY GOOD (Agreed, 110%)... apk by Anonymous Coward · · Score: 0

    See subject-line: Applying it to a problem YOU have = best way (you're right as rain man - keeps you motivated too).

    APK

    P.S.=> I miss when this place had NOTHING but comments like yours (now, it's 1/2 infested with trolling scumbags that are utterly useless, producing nothing of worth in code, let alone decent posts)... apk

  96. Best Python website by Anonymous Coward · · Score: 0

    I would suggest check Python code examples posted in this website by community to everyone:

    http://code.activestate.com/

  97. EasyBuild, it is in Python by kefalonia · · Score: 1

    IFF you have even done wget/tar xvf/patch/make/make install - and wondered,
    if this process could be ever improved and make sense, you have found your project!

    EasyBuild allows you to tame scientific software of the following type:
    * Download and build GROMACS over FFTW/3.3, applying patches X,Y,Z, using CUDA for speed.

    Here is your initial reference: http://hpcugent.github.io/easy...
    And here is the juice: https://github.com/hpcugent/ea...
    The code lives across 3 repos on github, I am sure you will find your way.

  98. Mod parent down! by Anonymous Coward · · Score: 0

    The first mountain I ever hiked was K2. Takes one to know one, tool.

  99. Build Something You Love by Anonymous Coward · · Score: 0

    When I want to learn a new language, I go into my list of ideas for tools, pages, apps, whatever that I think should exist. Even if I'm the only end user, each project is something I think should exist (or should exist in a different format) so my interest in completing it is higher than if I were building someone else's idea.

  100. I've been where you are now by bendarebefore · · Score: 1

    Hello, perhaps I can be of some small use. I learned python3 as my first language. I was not sure what to do. Linux was great, flowers were blooming, and the whole world was friendly and inviting, albeit complex. I choose to learn C, I was and still am, interested in the Linux kernel. Don't you think it's so cool?! Anyways, long story short, I still have not yet made any contributions. It's only been 2 years since I started learning C, and I decided that before I tried contributing to any real Linux project, I had an obligation to see to it that I coded well. You may view my long and arduous task that I've set about as foolish or not so, but in either case, hindsight and a bug in openssl has shown me that I am at least a responsible developer. I have in the mean time created many "pet" projects that have made my life easier. I have learned an enormous amount in doing so. And I am soon to release an alpha version of a secure skype program. Ultimately, you will decide your own destiny, but here is my advice to you, passed down through several generations, "Discover what you're capable of." and another one, more learned from experience than anything else, "If it's complicated or difficult. If it's labeled as `If you don't know what FOO means you don't need it,` learn it; for everyone else is learning the easy stuff, and who shall challenge the clever and the rich, who shall set anew the boundaries of the known universe and pull down the multiplicative verbosity of the fool, if not you, then who, for surly you would not expect more willingness in others then in yourself, O mortal man?" (Please forgive the assumption, I can't really think of a good sounding nondescriptive noun for that sentence.) And, you are welcome.

  101. A puzzle solver by djchristensen · · Score: 1

    I recently had to refresh my C++ skills, so I decided to write a sudoku solver. The neat thing about this particular problem is that it can be as complex as you want it to be. There are a large number of techniques available to solve increasingly difficult puzzles (check the sudoku wiki if you aren't an avid fan of sudoku), and you can implement as many of them as you want as optimizations before resorting to brute force. You can further challenge yourself by setting different requirements. For example, I tend to work in the embedded space where memory resources are not plentiful, so I focused on solutions that were memory efficient.

  102. Write a trivial web server by dataspel · · Score: 1

    Its very handy to have a lightweight web server running on your machine that you control completely. You will immediately start learning about sockets, TCP-IP, and HTTP. You can set up a home page with useful information [e.g. how many cats do I own and what are their names]. Plus if you ever open a port on your router, you will quickly learn lots and lots about why security is important.

  103. Jeopardy by Anonymous Coward · · Score: 0

    Make a jeopardy game. Clearly defined rules and mixes interface, data and logic.

  104. Bukkit by WindowsOverMac · · Score: 1

    If you like Minecraft, you can program server plugins in Java for Bukkit, or perhaps mods for Forge if you can get someone to do the artwork. I love doing this and there is a Bukkit subforum just for plugin requests if your brain runs dry.

  105. how I did it by Anonymous Coward · · Score: 0

    Get a couple of library books, one should be any simple beginners book, e.g. "Complete Idiot's Guide to ...", anything will do, it will teach you the basics of coding and using the IDE, and build your confidence. Next get the most advanced book you can handle, e.g. a Programmers Reference. This will read like an encyclopedia but simply browsing it can provide lots of clues about what is possible in future programs.
    Next find people who need programs, a) at your workplace, b) anywhere else. There's nothing better than walking past offices or cubicles at work and seeing your programs on computer screens. That's a huge confidence builder for a beginner. Decide on the top 3 programs you'd like to build if you could, google for code examples and search PlanetSourceCode, and determine which one you can actually build. Then get started.
    Also if you can, find one person who will help you make the program look good visually, and find one person who will help you with the cli or gui to make it as intuitive as possible. It's hard to anticipate every need, input, or output someone somewhere will want your program to have, so be prepared to make a basic version, then polish and enhance it in the next version. But don't form a committee, get one person who you think has good taste for each department and stick with them. Let them be your beta testers if they are willing to do this, and reward them for their time with beers, pizzas, ... That will keep the process as light and fun as possible.
    Just my 2c.

  106. Well said. by Anonymous Coward · · Score: 0

    And what simple program doesn't have ample opportunities to increase in complexity?

  107. What!? by Anonymous Coward · · Score: 0

    What could possibly be boring in newt farming?

  108. Take on one of your impossible projects by MrResistor · · Score: 1

    Seriously. Every huge, impossible project is made up of a bunch of smaller projects that are totally doable, plus maybe a couple that are actually hard. Divide and conquer is one of the most important skills you can develop as a programmer. Start with the first easy thing you can think of that you'll need to do before you get to the big hard thing, and get some code on the screen. Keep doing that. Pretty soon you'll find you have most of it done.

    And as for the reading thing, you should expect to be spending more time reading than writing code. I think my time is about 50/50 now, and I've been coding professionally for three years, after doing a BS and about 70% of a master's in comp sci.

    --
    Under capitalism man exploits man. Under communism it's the other way around.
  109. Pentomino by Anonymous Coward · · Score: 0

    Write a program to find all solutions to the pentomino puzzle. It will force you to consider algorithms, binary trees, recursion, and data representation. http://en.wikipedia.org/wiki/Pentomino