1

I am currently nearing the end of my first year of my CS degree and have been disappointed with the lack of coding I have been asked to do (one unit).

I am basically looking for an effective way to gain practical knowledge but am unsure where to look for experience from a near beginner's perspective.

Switchkick
  • 147
  • 4
  • Have you done any programming in addition to the assignments for that one class? (Also, out of curiosity, do you feel like you got your money's worth?) – Greg Hewgill May 24 '12 at 03:34
  • 3
    Seems like the obvious thing to do would be to write some code independently, attempting to apply what you've learned in your non-coding CS classes. – Jerry Coffin May 24 '12 at 03:55
  • @GregHewgill I have a little, basic programs for work. Overall, I honestly don't, yet. – Switchkick May 24 '12 at 06:08
  • 1
    Don't want to make this an answer, since Oleksi (internship) and Demian (oss) already said everything. But wanted to emphasize the importance to get into contact with experienced coders if any possible. Nothing else will help you nearly as much as some advice from people with years of experience. – thorsten müller May 24 '12 at 07:11
  • 2
    If you want to jump in the deep, then write a program that helps your mother doing something. She'll appreciate it, and you will learn a lot while being motivated to actually _do_ it. –  May 24 '12 at 08:33
  • do 2-3 non trivial freelancer or elance projects – tgkprog Apr 15 '13 at 14:02

5 Answers5

8

There's a few things you can do.

  • Look at sites like Project Euler. They have sample problems for your to tackle. This will help you feel more comfortable around code.
  • Think about some small programs that you can write yourself and practice.
  • Apply for internships at local software development shops. This will probably be the best way to get real-life development experience with plenty of experienced people to help you out. However getting an internship without any experience can be tough...
Oleksi
  • 11,874
  • 2
  • 53
  • 54
8

Consider programming a solution for something you want a solution for, something that motivates you to dig into the problem and solve the software development issues and anything else that comes along. Think of something useful/practical for you or someone you know.

It does not have to be complex. And if an experienced programmer would be able to solve it in 15 minutes, who cares. You will learn to decide on programming language to use, set up a working environment for that language, start writing the code, testing, and possible making it usable for someone else.

If you have no experience with coding GUIs, unittesting, databases etc. Leave them out for now. Make a command-line version of your program. Use print statements for tracking what is going on to home in on where things go wrong. Read your data from a plain text, so you can use an editor to create the input for the program.

If you know a bit about electronics: consider doing something with an Arduino. I recently implemented a remote control for a waterpump using SMS with that. I have been coding for 25+ years but it was fun and satisfying to have a program doing something concrete as responding to my phone commands. Fun is a great motivator to finish the project and make it a useful learning experience. Whether the project is simple or not does matter that much.

If you have never used a revision control system, no sweat: make copies of your project (source, data) to backup_00, backup_01 etc. So you can go back to something that worked, once you screwed up (you will).

For any element of software development there is always a better solution, even if you already improved it. Finding the balance on where to stop improving is a thing of experience. For now don't worry about improvements and efficiency, just try to get things done. You will learn to improve along the way.

If you know someone who can and is willing help you when you are stuck, ask them if they are willing to. It is a human evolutionary thing to feel satisfied as a human when you cooperate (and that nicely results in feedback on stackexchange website ). If you don't know anyone, see if there is a lively community online, where there are people that are willing to help.

In the end give some feedback on how things went for you. Here or anywhere you asked for help.

Anthon
  • 228
  • 1
  • 3
  • 9
8

Two answers and someone has yet to mention open source projects.

Github and Bitbucket, notably, have projects that range from tiny scripts to monstrous enterprise applications, in a wide variety of languages, using a wide variety of technologies.

My suggestion is to Just Do It. Get involved with a project that piques your interest (try to find one that's well documented and has a decent community - i.e. active IRC channel - especially if you're a near beginner). Yes, it'll be frustrating and you may think that you're over your head on many occasion. But, it's by far the best way to learn imo (not to mention you'll get exposure to team work and distributed source control).

So get in there, fix some bugs ;)

Demian Brecht
  • 17,555
  • 1
  • 47
  • 81
  • 3
    Most of the open source projects are very hard to understand by a beginner but after gaining some experience, they are one of the best ways to learn from. – Mert Akcakaya May 24 '12 at 08:14
  • @Mart: This might be true, but I do not think that average production code is much easier to understand. ;-) – Giorgio Apr 15 '13 at 12:44
7

I didn't get the whole picture until I took Operating Systems, Database Management Systems, Computer Networks and some programming courses.

Start with learning a programming language of your choice. (I started with C and proceeded to C++, which is very powerful)

Do some simple projects requiring non-trivial algorithms such as the ones at ProjectEuler.

After becoming comfortable with the language and common algorithms, move to GUI programming like Windows Forms, WPF or Qt.

Gain some experience with GUI and event driven applications and learn about cross-platform GUI libraries again such as Qt.

You may want to develop some small games for fun.

Then you want to learn about processes, threads, multi-threading, database programming, network programming and so on. You will learn most of these in your CS courses.

Web development is a great way to expand your skills as it requires both server side development and network information like HTTP.

Just take your time, enjoy coding. Do not get depressed when you see code that you don't understand anything .)

Mert Akcakaya
  • 2,089
  • 1
  • 13
  • 16
1

The one great thing about today's world is access to tonnes of resources over the internet and the fact that you can always get an expert to help you remotely using legitimate tailor made solutions that fit your budget and needs. So whether you're simply seeking help programming or a personal tutor to help you on your course work projects, all you need to know is the right place to go!!

henry
  • 21
  • 2
  • 2
    Welcome to programmers.SE! Can you maybe point the OP to some of those "right places to go" - otherwise your answer is not of any more help than telling them to "google their problem". – Rafael Emshoff May 29 '13 at 06:51
  • Thank you @RafaelCichocki for the heads up, that was a typo. Corrected.. – henry Jun 01 '13 at 03:52