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.

I am going to be a third year computer science student and I have read Head first Java, Head First C, and I am currently reading C++ which is the language that I like the most since it has a good teaching style for people with experience. I am planning to either learn to make software with QT, learn objective-C(for iphone), or read Effective C++.

How can I get experience as a programmer? Do I have the skills to join an open source project or do I need to learn php, mySQL or any other language. I love programming and computer science in general although some classes can be extremely hard (theoretical computer science). I also plan to become a guru in c++ but that's not going to be anytime soon.

share|improve this question

closed as not constructive by gnat, BЈовић, Walter, GrandmasterB, Steve Evers Aug 19 '12 at 1:14

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

Have you written any programs that others use? If not, write one that a loved family member needs, and make it useful to him or her (might take several iterations). The last part is where the true lesson is. –  user1249 Aug 18 '12 at 20:50
How do you get to Carnegie Hall? –  jfrankcarr Aug 19 '12 at 0:33
I'm going to sound like an asshole for a second but... experience - Active participation in events or activities, leading to the accumulation of knowledge or skill. So start actively participating in programming. –  Steve Evers Aug 19 '12 at 1:15
BTW, what is the difference between StackOverflow and Programmers? Is the pattern of closing questions meant to make Programmers just another StackOverflow? What is the point then - just merge the two. We used to be able to ask esoteric questions on Programmers which we could not in StackOverflow. –  Blessed Geek Aug 19 '12 at 6:22

6 Answers 6

ABC - ALWAYS BE CODING. It's really that simple. One of my favorite ways of getting to know a language is to write a toy interpreter for a subset of the language in the language itself or if that's not your thing then maybe a ray tracer or something else that's just big enough to be non-trivial but not so big that it can't be finished in a month or so. The point is to work on something that will force you to look at the standard library and the data abstraction facilities that the language offers. Sometimes the project is a success sometimes it's not but at the end of it I know enough about a language to know what its strengths and weaknesses are and whether I want to continue learning more. If it turns out that I like the language then every time I read an interesting paper or blog post I try to start a project in which I implement some of the ideas that were presented in the paper or the blog post. This way I'm always getting practice and learning new ideas so it sort of becomes a virtuous cycle.

Some projects that have worked really well for me in the past : interpreter for a subset of some language, ray tracer, PEG parser generator, HTTP header parser, simple echo client/server, twitter bot for automatically posting tweets from a queue, amazon product scraper to look for deals.

share|improve this answer
Thank so much, I will try one of those projects –  Anthony Aug 18 '12 at 19:32
+1 You mentioned some really interesting projects, thanks. –  Anthony Aug 19 '12 at 4:49

As nicely explained in Teach Yourself Programming in Ten Years, you should follow next steps :

  • Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in your ten years/10,000 hours.

  • Program. The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.

  • Talk with other programmers; read other programs. This is more important than any book or training course.

  • If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on your own or on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and made enough in stock options to buy his own nightclub.

  • Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you're the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you're the worst, you learn what the masters do, and you learn what they don't like to do (because they make you do it for them).

  • Work on projects after other programmers. Understand a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain them after you.

  • Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).

  • Remember that there is a "computer" in "computer science". Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)

  • Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.

  • Have the good sense to get off the language standardization effort as quickly as possible.

share|improve this answer

I'd suggest you train yourself by effectively writing functional programs. Take a bigger project once you think you've got the basics. Learn the qt framework for software development and keep practicing. The best way to learn to program is by actually writing code.

I'd say reading also plays an important role, you could look for a team of developers who are hosting an open source project (Look for one on github, or other similar sites) because they could offer you valuable team development experience.

share|improve this answer

Sometimes places like sourceforge are a bit daunting at first. A really nice way to find something to do, is trawl through the issue trackers of projects and find a bug/issue you like the sound of fixing.

On some small scale github projects this becomes much more accessible. You effectively have a direction and a purpose in trying to grok the code, instead of wading through it blindly.

share|improve this answer

The samples in the books or the assignments at the university are good starting points to understand how the programming works and they show the possibilities for your future projects.

Work on real projects

But without a real project experience, you tend to forget the things you learned.

Problems are opportunities to show what you can

Additionally you see in are real project how complex the requirements can be and you expreince hard to knock problems. These Problems are opportunities to show what you can. You can see your weak sides that you should improve.

share|improve this answer

do I need to learn php, mySQL or any other language.

Yes sir, please consider the languages of the world wide web. HTML5, CSS3, and JavaScript.

Here is why:

  1. They are quick to learn, and increasingly rich to implement.

  2. They no longer just write web, but os, server and, database as well.

  3. Most Importantly *

    They are now being used to re-define Computer Science 101 - by the creator of jQuery, John Resig.

Don't shoot the messenger, just check this link to khan school academy.

c/c++/c# design patterns transfer to JS there.

Hope that helps.

share|improve this answer
+1 - So wrong that this got downvoted. Information is valid. Link is credible. Source is jQuery Genius John Resig -starting a programming 101 course with JavaScript, and it will work. Check out Khan Academy. Upvote for the potential to advance education; in the least. Thx. –  ClintNash Aug 25 '12 at 5:46

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