Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

As a beginner, I can say that in about six months I grasped very well many basic programming concepts. I began with php, then wen to c, then to java, and I know quite well the procedural and the object oriented concepts. Most important, I really enjoy programming, it's quite a lot a mental challenge than a duty for me. Reality is that I 100% (and more) improved my skills spending lots of time in the project Euler website (and I should be ashamed to say I just solved the first 30 problems, but all by myself without any external help, and I am proud of it).

So I could think I'm in the right track.

But at the moment I feel I'm in a phase when I don't know how and above all what to do then. In these months I also followed two courses, one for webdesigning (I know how to program css and html markups, and also know the basis of graphics processing), I'd setup a basic site easily, and the second course (which will finish on may) is going well meaning I have no problem to learn what the teachers tell me, and sometimes I find better solution than my php teacher (probably php being the language I'm most accustomed I find it easier). But apart from all the basic "garbage", all the simple exercises people do when learning and when beginning, I don't know how I'm supposed to go on.

It's a fact many great coders say that I just have to begin to code, and code, and code, and I know that it is, but what code?

If I should think about a real program, one of that you could be proud of it, I don't believe I know where I should begin. I also tried to read a couple of sources codes, and understanding them is one of the most difficult process I found and definitely depressing, as you think: "omg how much I'm ignorant?"; furthermore, my ideas are not clear; I would like to setup something but don't know how to put together all the things I could think, and I always think I'm forgetting something.

I tried to read some documents and books about object oriented best practices, uml, design patterns, but it seems that, although all those readings make great sense to me, it stops then, I can't use nothing because I have this feeling I am still not enough good to use that and worst I am desperate to find the right track to do it, at the point I think that perhaps I'm not enough intelligent and programming is a too difficult task for me.

Perhaps I should have a real job in some company where "learn" from other more experienced programmers, but companies hire just experienced programmers so what?

Please can you address me in some intermediate-level activity I can take and enjoy in order to overcome this state? thanks.

share|improve this question

closed as not a real question by Robert Harvey, Thomas Owens, Glenn Nelson, Yannis Rizos, Mark Trapp Jan 21 '12 at 2:13

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

It's called experience. See norvig.com/21-days.html –  Robert Harvey Jan 21 '12 at 0:48
Step 1: Focus. It's a long question with a lot of words. Remove all the words but the few that describe the thing you want to know. Then add a few words of background. Focus is hard. Beautiful code is focused. Start practicing now by cleaning up this question. –  S.Lott Jan 21 '12 at 0:52
Hi il_maniscalco, welcome to Programmers! Unfortunately, this is too broad to be a fit for the Stack Exchange style of Q&A: if you have specific questions about software development, feel free to ask those, instead. –  user8 Jan 21 '12 at 2:14
How do you get to Carnegie Hall? en.wikipedia.org/wiki/Carnegie_Hall#Carnegie_Hall_joke –  jfrankcarr Jan 21 '12 at 3:39
add comment

3 Answers 3

"Just begin to code" pretty much sums it up. The way I learned to be a good programmer was to find something I wanted to write and just start writing. I really had no idea what I was doing when I started, and so whenever I found something I needed to do that I didn't know how, I would research and ask questions and experiment until I had learned how to do it. And somewhere along the way, I learned a lot about writing code, and got pretty good at it.

It doesn't really matter what you decide to do, so long as it's something challenging but not impossible. Try building a game. Or your own IM client. Or a way to organize information on a subject you work with a lot in some useful way. Look around yourself, find a need that you can fill, and start writing.

But keep in mind that you're doing it as a personal growth and self-improvement project. You're not out to change the world or create the next Twitter or Starcraft. You're probably never going to make any money off of this project, and other people might never even see it at all. But that's not the point; you're doing it to improve your skills, so that you become capable of building something that you can share with other people and/or make money off of.

It's a stepping-stone, not an end unto itself. I got my first programming job by showing the interviewers my personal project, to demonstrate that I actually knew how to write code and that it's something I was passionate about.

share|improve this answer
add comment

There are many coding standards out there, beauty is in the eye of the beholder. Concentrate on writing code that is robust and works (and remember not to hate your users in the process). Beware of the early career pitfall of focusing so much on the text of the code and not the finished program. It sounds weird (and it is), that some of the most "beautiful" code can be terrible to use, fragile, or a bug-ridden mess.

With regards to writing beautiful code, you need to find out what that means for you. Try writing for 6 months in one coding style, then 6 months in another. The long time period is important since you need to have the experience of writing AND DEBUGGING in a given style. As you use different styles you will discover what's good in one style and not another. This is where it's easy to fail, all too often someone holds up a document or book and says "this guys' standard is the absolute best." (this is sometimes called cargo-cult programming) It's like art or music. The only way to really know it is to deeply study widely different styles.

share|improve this answer
add comment

Practice can start small, and grow to be something larger. If you have the motivation to practice on your own time as well as at work, you're halfway there -- find something with inherent interest to you, which will maintain that motivation.

Look into low-level system things like assembly language, if that kind of thing appeals to you. Reading the Intel and AMD x86 manuals (available online) can help you understand what runs fast on modern architectures, what doesn't, and why. Or, it can help you learn exactly what your operating system is doing behind the scenes. Also, even if you never write a line of assembly, being able to read it can be very helpful in optimizing critical C code.

Try out different kinds of languages. PHP, C, and Java are all imperative languages -- so trying out a functional language like Haskell or Lisp will likely stretch your mind.

If you have not yet looked into algorithms, check out a book and give it a shot.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.