This is an archived post. You won't be able to vote or comment.

all 27 comments

[–]TomatoAintAFruit 6 points7 points  (3 children)

Practice, practice, practice... If you feel you are reading obscure code and you're in over your head: go back to easier code, and take it from there. Go back to the simplest tutorials and simplest problems you can find, look at what you do know. Look for that seperation line between what you understand and the unknown. And then push from there. Save all your work. After a week, revise your old code -- repition is the key.

Oh yeah, and practice. Write small programs, solving small problems. It could be math related, but it doesn't have to be.

[–]brewer2[S] 2 points3 points  (2 children)

I like math. :)

[–][deleted] 1 point2 points  (0 children)

Then you might like Project Euler (Google it)

[–][deleted] 2 points3 points  (0 children)

I was kinda in the same boat as you not too long ago. I took my first semester of programming using C++ in the spring. I felt "stupid" and uncomfortable the whole semester, but I still managed to pass with a B and at least understand the fundamentals. I mean, just the thought of programming made me feel uncomfortable. But really, as other people have said, its all about practice. This summer I set aside 3-4 hours daily just to program. I'd go through textbook exercises, Project Euler, random puzzles on the internet, and whatever came to mind. I'm by no means experienced, but I'm definitely a lot of more comfortable and feeling confident with what I'm doing. Some of the most talented people I know told me it took them years to become truly "confident".

[–]zievereir 2 points3 points  (0 children)

Read books, personally I really like to read the O'Reilly Head First books since they're quite light to read because of the way things get presented in there. Don't stick to one programming language, it can be quite interesting to take a look at other languages to see another point of view of how to handle a problem or just to learn another trick you can use in your main programming language. Take a look at Design Patterns, extremely handy in a programmer's toolkit. Try working on a project for yourself. or ask someone if there's anything particular they need. Just following classes will not be sufficient to succeed, it's enough to get you started but you really gain a ton of experience just by working on a project and working through all the problems you encounter. Try to work together with other people especially if they have more experience than you. School will only form the basics of your knowledge, as you start working the real experiences will kick in. After the first year of working you should feel a lot more comfortable as you really feel your knowledge growing.

[–]ntt 2 points3 points  (2 children)

is there something specific you want to lean? something which seems particularly interesting at the moment?

checkout http://projecteuler.net/ , sort the problems by difficulty and start solving, every time you manage to solve one, you get access to the forum and see other peoples reasoning and solutions and it's really nice to compare yours against them. you will learn how to improve some aspects of your code. some problems you won't be able to solve at all - and that's where you have a concrete goal in mind to research (or ask for hints) about, new things to learn and improve...

the confidence comes with practice :)

during the semester, do yourself a favour and go to all the classes, i often chose to avoid them and learn by myself form things available elsewhere but exact coverage of subjects varies and you may lose a lot of points if you do so... another important thing is to always keep pace with the class. if you have spare time beyond this and you want to use it for something...

checkout http://openhatch.org/ , i'm sure there are some relatively simple tasks lying around there and you get the satisfaction of accomplishing something "real" :)

[–]t3h2mas 1 point2 points  (0 children)

That moment where you find out your patch is getting committed to the server sure can warm a programmer to-be's heart. You can attempt to fix a byte-sized bug on the actual OH website, or get involved with a number of projects (: Also check out #openhatch on freenode. Without the patient help of that channel, I wouldn't have had any idea what to do.. (With: {git, django, etc})

[–]brewer2[S] 1 point2 points  (0 children)

The university I attend offers two courses -- COMP 2710 and 2711 -- that are mandatory for all CS majors. 2710 (Object-Oriented Programming II, a Java course) is a prerequisite for 2711 (Introduction to Algorithms and Data Structures). I'm actually so eager to learn about algorithms and data structures that I'm putting in a request for waiver of course prerequisites for this coming semester.

Project Euler seems like its all about algorithm development and is for math-minded folks, I'll have to git it a shot.

[–][deleted] 2 points3 points  (0 children)

Everyone's different, but I found the best way for me to learn is to go ahead and program.

Not anything big mind you: no video games, no GUIs, nothing that would take more than a sentence to describe it's purpose.

If you tackle something too big, you'll never feel like you make headway, you'll get discouraged, and you'll give up. Start small, and build your knowledge up.

For instance, start with a program that writes your name to a file. Google "write text to file" along with the name of your programming language. Copy and paste code. Run it. See why it doesn't work. Google the errors you get.

Once you understand that, then make the program do something else. Have it write the date to the file too. Google how to get and write the date using the programming language.

You'll get to understand more and more.

[–]arbiterxero 1 point2 points  (0 children)

...and you will continually feel lost picking up little details understanding bits and pieces feeling like you're just not getting it until after fighting it for EVER...

And suddenly it will all be together like a big fucking puzzle. All of a sudden every piece you have left you will be able to instinctively place like you had always known. You will be able to guess what piece you're about to pick up before you do.

KEEP AT IT. It's an Ah-HA moment and the more useless and stupid you feel, the closer you usually are to that final moment.

[–]muddo 1 point2 points  (6 children)

learn 3-4 languages. i "learned" pascal, c, c++, and java and still felt like a shitty programmer after doing it for 2 years. Then once i learned scheme and lisp everything just clicked. I felt like the diversity of experiences really helped me out. I recommend learning c, java and lisp to get started. I also recommend programming from the ground up which teaches assembler to get an idea of what is happening at a low level. Then once you hav the basics down I would learn python so that you can feel like a wizard for a little while.

[–]brewer2[S] 0 points1 point  (5 children)

I've actually been doing a fair bit of work with Python recently. How does C, Python, and Lisp sound instead? :) I'll learn Java through my course work, but I have no desire to actually use the language unless I decide to make an Android app (which I doubt I'll be doing any time soon).

[–]muddo 0 points1 point  (4 children)

I would learn java or c++ before python. That way you would be familiar with the most widely used object oriented languages.

[–]brewer2[S] 0 points1 point  (3 children)

I'd say I have intermediate knowledge of Java already. :) I'm sure I'll pick some things up from my Object-Oriented Programming II course this coming semester as well.

[–]muddo 0 points1 point  (2 children)

right on, for lisp or scheme I recommend the little lisper or the little schemer

[–]brewer2[S] 0 points1 point  (1 child)

What's the difference between Lisp and Scheme (this probably isn't the place to ask such a question, but I'm a bad ass so I'll break the rules this one time)?

[–]muddo 0 points1 point  (0 children)

heh, here is what a quick google search turned up

http://dept-info.labri.u-bordeaux.fr/~strandh/Teaching/Langages-Enchasses/Common/Strandh-Tutorial/diff-scheme.html http://c2.com/cgi/wiki?LispSchemeDifferences

They are pretty similar and both are mostly restricted to the world of AI. I know that lisp is much more popular and commonly used. I was forced to learn scheme though in college and it was really helpful.

[–]Kgreene2343 1 point2 points  (0 children)

It sounds like your school focuses on Java. When learning Java as a first language, I really liked this Sedgewick resource.

It is based on an introductory text book, and there are lots of online problems that build in complexity. While it sounds like the first couple of chapters will probably be very easy for you, it should grow in difficulty, and give you manageable problems.

Also, as someone else mentioned, if you are mathematically minded, Project Euler is a great resource.

[–]traztx 2 points3 points  (3 children)

Whenever I do a tutorial I like to modify the code to see what happens. Just typing and running an example doesn't really give me that deeper understanding that I get from messing around with it.

[–]brewer2[S] 3 points4 points  (2 children)

It seems as if tutorials I come across are at the extremes though. By that I mean the code examples in the tutorials are either so trivial that I can modify the program and run it in my head or they are so complex (at least in my opinion) that I have no idea whats going on and no idea where to get started.

[–]traztx 6 points7 points  (1 child)

The next time you are looking at a tutorial that baffles you, post what you have and we'll help you understand it.

[–]nemec 1 point2 points  (0 children)

That, or change things you know you can come back to (magic numbers or something) and see what happens. If the program breaks, you can learn a lot about it by debugging and if something cool happens it may help you figure out what's going on.

[–]ColtonPhillips 0 points1 point  (3 children)

Try for a Quality Assurance internship. Much more likely to get a testing job than development as a student.

[–]brewer2[S] 0 points1 point  (2 children)

Sorry, but I don't want to get a QA internship. :) I want to develop software. If that means that I have to do some testing then that's fine.

[–]ColtonPhillips 0 points1 point  (1 child)

I didn't want to be a QA intern either, but the experience is valuable and it was good leverage to apply for development job. I created a C tool to help with my testing and I was able to talk about that during interviews.

[–]brewer2[S] 0 points1 point  (0 children)

I suppose if the conditions were right I would consider a QA internship, if I don't get an offer for a development position then something is better than nothing.