tags:

views:

1879

answers:

21

Ok, so I've read the tutorials for... everything. I know how to code, in the most abstractest of senses. But, how do you break from the guided rails of tutorial exercise #1-2, to something with a bit more meat on it, without delving into the wild, wooly world of production/open-source code? Something in between smart people spoon-feeding you code, and smart people beating you mercilessly because you're new?

+22  A: 
  • Find something that's interesting for you and not described in those tutorials.
  • Write the code, debug it, test it, play with it
  • Make it into a tutorial. Really. By writing a tutorial yourself you'll learn a lot of things and have good chances for other's feedback.
kender
This is a good point - while doing my degree (in audio engineering) I found it invaluable to teach something I'd learnt to someone else - it helps consolidate what you've learnt and highlights the bits you thought you'd understood.
Skilldrick
+2  A: 

Try to think of a project or something you want to work on. The best way is just to make some applications, even if they never will finish, you learn a lot from that.

Ikke
A: 

Scott Hanselman has been running his "Weekly Source Code" : Available open-source source code which he feels so good for learning-by-reading.

James Curran
+7  A: 

Think of something you'd like to code, and attempt to code it. Try not to be too ambitious, aim for something you think you could manage. If it is easy, pick something you consider harder to do. Keep on going until you find a project you can't manage and then analyse WHY you can't manage it. Then read and learn stuff until you can manage to code it next time.

Once you've done a good few dozen projects like that, you are probably ready to be shouted at for bad coding on real-world projects ;)

workmad3
+3  A: 

Publish your code in an area that smart people will read and critique, but won't beat you between the eyes. Linux kernel would be a bad idea - refactormycode.com is a good one.

Tom Ritter
+1  A: 

Find some university or hiring problems and try to solve them with what you have learned. Then work on what interests you, say your own movie organizer, a personal web site or whatever plays to both your interests and what you are now capable of doing.

Ty
+5  A: 

Ever had some software annoy you because it doesn't work how you want it to or it doesn't exist?

Yes?

Write it.

Who knows, perhaps it will be the next must-have app and you may even make a few quid - or become an open source star.

EDIT:

Try http://stackoverflow.com/questions/208791/what-is-your-most-wanted-non-existent-or-underdeveloped-open-source-project.

BlackWasp
Sounds good. I can always use a few bob.
MrBoJangles
A: 

Write your own website. Build a simple text editor or even tetris game in an windowed environment. Basically, it comes down to having a learning project or two that you build.

My first learning projects were websites I built for myself and my family. I would routinely trash them and start over with a brand new code base every 6 months or so as I learned new techniques and ways of accomplishing things.

Today, my learning project is a windows application as I'm dealing with a number of the issues inherent in that type of app.

Additionally, having that thing you can point to and say "I built this for fun!" is a great thing to be able to do on interviews.

Stephen Wrighton
+1  A: 

There are two ways to continue to advance into production code.

1) Find a Mentor

Find someone who is willing to help you as a reference and as a source of projects. This is not something easy to find. A good mentor is an excellent way to advance beyond the basics. However, it assumes you can find someone with the time to do this for you and has the right skills to help you.

2) Build Something You Need

Find a personal project that means a lot to you, and build it. Start with the design, then write the code. Most importantly, once you have a product (always finish your projects when you can) you should get as many people as possible testing it and a few good programmers that you trust should go over your code and review it.

Marc Reside
A: 

If you dont have any ideas for Applications to create using your new language you can try to answer some questions of the code contests out there (Google Code Jam as instance).

Leonel Martins
I think you mean "Code Jam" unless Google has a new fish-crushing contest coming out of alpha.
Gregg Lind
Yeah, it is "Code Jam". Typo corrected. Thanks.
Leonel Martins
+1  A: 

Tutorial land is fun, really, it's a great place to be.

Write your own snippets, tutorials or just try and answer a few questions here at stackoverflow. A good site I would recommend for people wanting to start making tutorials for other beginners is dream.in.code . The moderators there are kind and active and this very site is how I became a lot better, simply because of code review.

I believe the meat you are looking for really is snippets.

RodgerB
+2  A: 

I didn't "get" programming -- especially practical aspects programming never covered in tutorials or classes -- until I got a job programming. So if you already have a job that will let you program (even if it's just Word or Excel macros), you're in great shape. If you ever touch a computer for work, there are probably opportunities for you to program something to reduce manual overhead.

At work, make special effort to ensure that you've written the absolute best program that you can. Do extra research on the web or from books about the nuts and bolts of your program -- the libraries it uses, the algorithm it embodies, etc. If you've written something that looks wrong, it probably is.

There is often pressure to just get something out the door no matter how bad it is. That approach has its place, but it's not conducive to really understanding what you're doing.

Steven Huwig
I can't believe you got a job programming without having any real development experience outside of following tutorials.
Kibbee
There were a bunch of guys when I grew up who had no real experience outside some homebrew QBASIC programming, and they got jobs at a small local company. They learned on the job, and all that the owner cared about was that they were smart enough to learn fast.
Adam V
+25  A: 

Really these answers are all on the mark. Get out there and go make something. It doesn't have to be a glorious, full-featured application, or even be well written. Just start. I would suggest starting with simple utilities you may need on the command line. You may already have ways of accomplishing them, but write your own. Some examples of little things I've written as I learned new languages including:

  • A script to find duplicate files in a directory
    • Now make it work based off of file size
    • Now add a module that has an md5sum function, and base hits off of that
  • Automate some process you perform regularly, so that it is one command
    • Backup specific directories
  • Write a simple game or two
    • Hangman
    • Boggle
    • A simple version of nethack, now make the bad guys move
  • And finally, write a program to look at a set of directories containing pictures and resize them, generate thumbnails, generate HTML code to present a "gallery" of each directory and upload it all to your web account.

As you do each of these, also pay attention to things you might improve, and new methods you might try, such as object-orientation, less system calls and more use of libraries, etc.

If you go generate a lot of useful little scripts/programs you'll feel a lot more confident, and learn a lot about design. Also don't be afraid to go back and rewrite something once you learn a much better methodology.

Most of all, have fun and use version control (svn, git, hg)

MattG
all good advice. I especially agree with this comment: "Also don't be afraid to go back and rewrite something once you learn a much better methodology."
levi rosol
A: 

I agree with Kender, except that (and this is too long for a comment).

My only addition would be to not publish the tutorial. Keep the tutorial as a personal journal. Being that you are inexperienced, there is already of an over abundance of tutorials written by inexperienced developers that teach bad habits to other inexperienced developers. Keep a personal journal, online or otherwise (on a computer works better for code), of the things you have learned, and continually update it with any new information you come across.

Kibbee
A: 

Be like Nike, dude.

Just do it.

Either A: Get a job programming for a small business, or B: Write something you want/need.

Riddari
+4  A: 

Also, I found Project Euler, which is full of mathy problems, with definite answers tied to 'em. It's kinda like how MMOs give out quests, but leave the implementation to you. Which I dig. A lot.

d8uv
Absolutely. You'll learn new maths too!
Skilldrick
+1  A: 

I suffer from this problem even as an experienced programmer - constantly reading about interesting problems but never actually getting around to working on them. I think the key thing is just to pick one thing that gets you excited / piques your interest, and start on it. I don't think you should even worry too much about whether you'll be able to finish it at your stage (though this depends on your personality - some people will find it depressing and discouraging to have a slew of unfinished projects). Every line of code you write will give you confidence and fresh insight.

andygeers
A: 

What do you want to do with your newly acquired coding skillz?

Now, pick a very small part of that and create it.

Paul Nathan
+3  A: 

As an alternative to building something from scratch, you could try fixing bugs or adding new features for an existing project? Or maybe even participate in one of the projects in the Apache Commons Incubator or Sandbox?

You could also write (junit & friends) test cases for existing projects.

tunaranch
I second this. You'll learn a lot more by reading other peoples' code and modifying it than by writing all your own stuff from scratch.
Kristopher Johnson
+1  A: 

Sphere Online Judge Classic Problems List

Fantastic site. They have over a thousand programming problems of various difficulty. You can definitely find something to match your skill level.

So how this works is that you select a problem and try to solve it. You can code straight into their text box field, or paste code you made in an editor. the site then compiles it and enters the specified input.

If your code is correct, the site records it along with some other cool information such as time and efficiency.

They also have a ranks system to put some fun and competition into it.

the only problem is that their servers tend to run a little slow since, i think, they are located in Poland.

-Tomek

Tomek
+1  A: 

Most of my personal programming projects come from my other hobbies. For instance, if you scuba dive, write your own logbook program. Ham radio provides a plethora of interesting projects; front-ends for existing software, screen scrapers, parsers, loggers, etc. Ham radio is also a community where everyone shares their talents to contribute to the hobby so if your talent is programming and you want to contribute then that is another driver to push to think of and compete projects for others.

unclerojelio