What are the biggest time wasters for learning programming? [closed]
Asked Answered
S

22

22

I've had several false starts in the past with teaching myself how to program. I've worked through several books (mostly C and Python), and end up just learning the syntax without feeling as though I could sit down and actually write a program for myself. When I try to look through the source trees of a project on Codeplex or Sourceforge, I never seem to know where to start reading the code -- the dependencies seem to go in all directions.

I feel as though I'm not learning programming the way it's done "on the street," so I figured I'd take a different approach to asking how a newbie should learn how to code. If you had to learn programming all over again, what are the things you wouldn't do? What did you spend time doing that you now know wasted you weeks or months?

Sinuosity answered 29/12, 2008 at 2:23 Comment(4)
Asking what not to do is kind of silly. I would not throw myself in front of a bus, for example. The list of things not to do is nearly infinite. I would not try to buy a Bentley. I would not lay naked in the snow overnight.Scrappy
Find some online video tutorials that show you how to create an application from start to finish and follow along. Learning programming is an accumulative exercise. Each time you solve a problem that's another tool in your toolbox you can use to solve future problems, big or small.Nativity
And the good thing about SO is that you can go through all the different sorts of answers and see which is most relevant to your own situation!Groats
The best way to learn to program is to pair program with another person who knows how to program.Dislimn
P
49

Where I see beginners wasting weeks or months is typing at the keyboard. The computer is very responsive and will cheerfully chew up hours of your time in the edit-compile-run cycle. If you are learning you will save many hours if

  • You plan out your design on paper before you approach a computer. It doesn't matter what design method you pick or if you have never heard of a design method. Just write down a plan while your brain is fully engaged and not distracted by the computer.

  • When code will not compile or will not produce the right answer, if you can't fix it in five minutes, walk away from the computer. Go think about what's happening. Print out your code and scribble on it until you believe it's right.

These are just devices for helping to implement the simple but difficult old advice to think before you code.

When I was learning, I solved countless problems on the 15-minute walk from the computing center to my home. Sadly, with modern PCs we don't get that 15 minutes :-) If you can learn to take it anyway, you will become a better programmer, faster.

Propene answered 29/12, 2008 at 2:35 Comment(2)
+1 for finding bugs on the way to (or in) the restroom.Welter
...and realizing what the problem was as soon as the computer is off and you're in bed.Aweather
S
23

I certainly wouldn't start by looking at "real" software projects. Like you say, it's too hard to know where to start. That's largely because large projects are more about their large-scale design than about the individual algorithms or about program flow; for one thing, you're probably looking at a complex GUI application with multi-threading, etc. There isn't really anywhere to "start" looking at the code.

The best way to learn programming is to have a problem you want (need) to solve, and then going about solving it. But most importantly, WRITE CODE. When you read programming books, do ALL the exercises. Make sure you did them right. There's no substitute for writing code. No substitute for screwing up and then fixing it.

Shanelleshaner answered 29/12, 2008 at 2:38 Comment(1)
Perfect... No Substitute for screwing up and then fixing it.. I'm still learning that way.. only thing is it costs many sleepless nights :-)Klopstock
T
20

Stack Over F.. wait no, heh.

The biggest time-sinks for me are generally in respect to "finding the best answer." I often find that I will run into a problem that I know how to solve but feel that there is a better solution and go on the hunt for it. It is only hours/days later that I come to my senses and realize that I have 7 instances of Firefox, each containing at least 5 tabs sprawled out across 46" of monitor space that I realize that I've been caught in the black hole that is the pursuit of endless knowledge.

My advice to you, and myself for that matter, is to become comfortable with notion of refractoring. Essentially what this means (incase you are are not familiar with the term) is you come up with a solution for a problem and go with it, even if there is quite likely a better way of doing it. Once you have finished the problem, or even the program, you can then revisit your methodology, study it, and figure out where you can make changes to improve it.

This concept has always been hard for me to follow. In college I preferred to to write a paper once, print, and turn it in. Writing code can be thought of very similarly to writing a paper. Simply putting the pen to the pad and pushing out whats on your mind may work - but when you look back over it with a fresh pair of eyes you will, without question, see something you will wish you had done differently.

Tanning answered 29/12, 2008 at 3:51 Comment(1)
+6 if I could. An excellent point. The same thing applies to writing stuff for humans to read: Write write write! Don't start to modify until the entire thing is written.Groats
P
13

I just noticed you talked about reading through source trees of other people's projects. Reading other people's code is a wonderful idea, but you must read more selectively. A lot of open-source code is hard to read and not stuff you should emulate anyway. So avoid reading any code that hasn't been recommended by a programmer you respect.

Hint: Jon Bentley, Brian Kernighan, Rob Pike, and P. J. Plauger, who are all programmers I respect, have published a lot of code worth reading. In books.

Propene answered 29/12, 2008 at 2:38 Comment(1)
I prefer READING OTHERS 'bugfixing code'(diff the svn). Then I know what's wrong and what's better.Interrex
B
8

The only way to learn how to program is to write more code. Reading books is great, but writing / fixing code is the best way to learn. You can't learn anything without doing.

Bagman answered 29/12, 2008 at 2:30 Comment(0)
S
3

You might also want to look at this book, How to Design Programs, for more of a perspective on design than details of syntax.

Sarilda answered 29/12, 2008 at 2:37 Comment(0)
B
3

The only thing that I did that wasted weeks or months was worry about whether or not my designs were the best way to implement a particular solution. I know now that this is known as "premature optimization" and we all suffer from it to one degree or another. The right way to learn programming is to solve a problem, measure your solution to make sure it performs good enough, then move on to the next problem. After some time you'll have a pile of problems you've solved, but more importantly, you'll know a programming language.

Butch answered 29/12, 2008 at 2:41 Comment(0)
P
3

There is excellent advice here, in other posts. Here are my thoughts:

1) Learn to type, the reasons are explained in this article by Steve Yegge. It will help more than you can imagine.

2) Reading code is generally considered a hard task. So, it is better to get an open source project, compile it, and start changing it and learn that way, rather than reading and trying to understand.

Prosperity answered 29/12, 2008 at 4:10 Comment(0)
T
3

I can understand the situation you're in. Reading through books, even many will not make you programmer. What you need to do is START PROGRAMMING.

Actually programming is a lot like swimming in my opinion, even if you know only a little syntax and even lesser amount of coding techniques, start coding anyway. Make a small application, a home inventory, an expense catalog, a datesheet, a cd cataloger, anything you fancy.

The idea is to get into the nitty-gritties of it. Once you start programming you'll run into real-world problems and your problem solving skills will develop as you combat them. That's how you become a better programmer everyday.

So get into the thick of it, and swim right through... That's how you'll make it.

Good luck

Teheran answered 29/12, 2008 at 4:45 Comment(0)
G
3

I think this question will have wildly different answers for different people.

For myself, I tried C++ at one point (I was about ten and had already been programming for a while), with a click-and-drag UI builder. I think this was a mistake, and I should have gone straight to C and pointers and such. Because I'm just that kind of person.

In your case, it sounds like you want to be led down the right path by someone and feel a bit timid about jumping in and doing something by yourself. (You've read several books and now you're asking what not to do.)

I'll tell you how I learned: by doing plenty of fun, relatively short projects, steadily growing in difficulty. I began with QBasic (which I think is still a great learning tool) and it was there where I developed most of my programming skills. They have of course been expanded and refined since that time but I was already capable of good design back in those days.

The sorts of projects you could take on depend on your interests; if you're mathematically inclined you might want to try a prime number generator or projecting 3D points onto the screen; if you're interested in game design then you could try cloning pong (easy) or minesweeper (harder); or if you're more of a hacker you might want to make a simple chat program or file encryption software.

Work on these projects on your own, and don't worry about whether you're doing things the "right" way. As long as you get it to work, you've learned many things. Some time after you've completed a project you may want to revisit it and try to do it better, or just see how other people have done that sort of thing.

Given the way you seem to want to be led along, perhaps you should find yourself a mentor.

Groats answered 29/12, 2008 at 4:46 Comment(0)
E
2

Do not learn how to use pointers and how to manually manage memory. You mentioned C, and I spent plenty of time trying to fix bugs that were caused by mixing *x and &x. This is evil...

Find some problem to solve, write or draw a sketch of an algorithm solving the problem, then try to write it. Either use Python (which is much more friendly for beginners) or use C with statically allocated memory only. And use books/tutorials. They offer multiple excercises with solutions, so you can compare yours with them and see other approaches.

Once you'll feel that you can actually write something simple, see some book/tutorial for Object Oriented Design. It's not the best the world has to offer, but it might turn out to be intuitive. If not, check the functional programming (like LISP, Scheme or Haskell languages), or programming in logic (like Prolog). Maybe those will suit you better.

Also - find some mate. A person you can talk to about coding, code maintenance and design. Such person is worth even more than a book.

To all C fans: The C language is great, really. It allows memory usage optimization to the extent impossible in high-level languages as Python or Ruby. The compiled code is also very fast, and is the only choice for RTOS, or modern 3D games engine. But this is not a good entry point for a beginner, that's what I believe.

Oh, and good luck to you! And don't be ashamed to ask! If you don't ask, the answer is much harder to find.

Englebert answered 29/12, 2008 at 2:55 Comment(2)
Wrong, wrong, WRONG! Please don't go saying things like "don't learn how to use pointers and manage memory." Memory management is a fundamental part of any non-trivial program, even if it's garbage-collected, and remaining ignorant of how it works leads to bloat and memory leaks.Windham
Sure thing. But the beginner will write only programs that you'll call 'trivial'. So let him use plain arrays, and local variables, so he can become familiar with few most common algorithms and THEN he can go and create optimized code with eliminated tail recursion, bitwise operations, inline functions, macros, references, pointers and all that stuff which makes C code so fast. But starting from full-powered-C-code might be compared to 'premature optimization'. But after all - that's just my personal opinionEnglebert
C
2

Assuming you have decent math skills try http://projecteuler.net/ It presents a series of problems to solve of increasing dificulty that should be solvible by writing short programs. This should give you experience in solving specific problems with out getting lost in the details of open source projects.

Charter answered 29/12, 2008 at 4:32 Comment(0)
S
1

After basic language syntax, you need to learn design. Which is hard. This book may help.

Scrappy answered 29/12, 2008 at 2:30 Comment(1)
I think it's only advertising if there's revenue involved.Scrappy
C
1

I think you should stop thinking you've wasted time so far-- instead I think you're education is just incomplete, and you've taken a step you're not really ready for. It sounds like the books you've read are useful, you're learning the intricacies of the language. It sounds like you're just not accustomed to the tools you'd use then to package that code together so it runs. Some books cover that focus on topics like language syntax, design patterns, algorithms and data structures will never mention the tools you need to actual apply that information. These books are great but if its all you've touched I think it would explain your situation.

What development environment are you using? If you're developing for windows you really should be proficient with creating projects, adding code, running and debugging in Visual Studio. You can download Visual Studio Express for free from Microsoft.

I recommend looking for tutorial like books that actually step you through the UI of development environment you are using. Look for actual screenshots with dropdown menus. Look at what the tutorials walk you through, and if its something you don't know how to do consider buying that book. Preferably it will have code you can copy'n'paste in, not code you write yourself.

I personally don't like these books as I can anticipate how to do new things in VS based on how I'd do other things. But if you're training is incomplete from a tools-usage perspective this could move you in the right direction.

It is probably harder to find these types of tutorial books for Python or C development. There is an overabundance of them for .Net development though.

Coaster answered 29/12, 2008 at 3:3 Comment(2)
And to answer your question directly, my biggest time waster is browsing stackoverflow :)Coaster
I second that, but I can't resist :)Virchow
O
1

As someone who has only been working as a programmer for 6 months, I might not be the best person to help you get going, but since it wasn't that long ago when I knew next to nothing, its quite fresh in my mind.

When I started my current job programming wasn't going to be part of my job description but when the opportunity came up to do some programming on the side, I couldn't pass it up.

I spent about 1 month doing tutorials on About.com's Delphi section. As much as people diss about.com, Zarko Gajic's tutorials were simple to understand and easy to follow. Once I had a basic knack of the language and the IDE, I jumped straight into a project exporting accounting data for a program called "Adept". Took me a while but I got there...

The biggest help for me was taking on a personal project. I developed an IRC bot in Java for a crappy 2D game called Soldat. I learnt a lot by planning out and coding my own project.

Now I'm pretty comfortable with Delphi Pascal, SQL, C# and Java. I think, once you get the hang of one OOP language, you can learn the syntax of another language, and it gets a lot easier to catch on.

Orchidaceous answered 29/12, 2008 at 3:55 Comment(0)
S
1

Perhaps start with a small existing project, and find some thing within it that handles some core part of what it does - then with a debugger, step through it and follow what it's doing from the point where you ask it to do that thing for you.

This helps you in a number of ways. You start to better grasp all of the various things that are touched by the code as it attempts to complete its request. Also, you learn invaluable debugging techniques which it seems like far too many developers lack - while you can often eventually discover what is wrong either with repeated printf() (or equivalent) calls, if you can debug you can solve issues an order of magnitude faster.

I have found that conceptually, a great mental model for understanding programming in the abstract is a pattern of data flow. When a user manipulates data, how is it altered by a program for digestion and storage? How is it transformed to re-present to the user in a form that makes sense to them? Fundamentally code is about transformation of data, and all code can be broken down into constructs of various sizes whose purpose is to alter data in one way or another, bugs forming around the mismatch between what the programmer was expecting from the data, how high level libraries the coder is using treat the data, and how the data actually arrives. Following code with a debugger helps you fully understand this transformation in action by observing changes as they occur.

Shortterm answered 29/12, 2008 at 6:52 Comment(0)
S
0

Standard answer is to make something; picking an easy language to do it in is good, but not essential. It's more the working out stuff in your own head, fixing it because it won't work, that really teaches you. For me, this always happens when I try my eternal dream projects (games) which I never finish but always learn from.

Silicious answered 29/12, 2008 at 2:27 Comment(0)
O
0

I think the thing I would avoid is learning a language in isolated snippets that don't really hang together but just teach various facets of a particular language. As others have said, the really hard and important thing is to learn design. I think the best way to do this is through a tutorial that walks you through creating an actual application, teaching design along the way. That way you can learn why certain decisions are made and learn how to accomplish what's needed to implement the design choices.

For example, I found Agile Web Development with Rails to be a really easy way to learn Ruby on Rails, much better than simply reading a Ruby manual or even poking my way around scattered web tutorials.

Octangle answered 29/12, 2008 at 2:28 Comment(0)
O
0

Another thing that I would avoid is developing code in isolation, that is, not having people look at it as I go along. Getting feedback from a mentor will help keep you on the right track with respect to the choices you are making and the correct use of language idioms.

Octangle answered 29/12, 2008 at 2:48 Comment(0)
A
0

Find a problem in your life or something you do that you just feel could be more efficient and write a small solution to it. It might just be a single script but you will gain much more confidence in your abilities when you start to see useful results of your work. You will also be more motivated to finish it as you are interested in using the solution. Start simple and small and then gradually move up to bigger projects.

And as your working on a small project, focus on building everything with quality. I think this is lost on some programmers who feel that their software is more impressive if it contains a ton of features but usually those features aren't well done or usable. If you focus on building quality solutions to real problems you'll be a fantastic programmer.

Good luck!

Airlike answered 29/12, 2008 at 2:53 Comment(0)
K
0

Work on projects/problems that you already know how to solve partially

Kershner answered 29/12, 2008 at 3:1 Comment(0)
F
0

You should read Mike clark's article : How I Learned Ruby. Essentially, he used the test framework for Ruby to exercise different elemnents of the languages.

I used this technique to learn python and it was very, very helpful. Not only did i learn the language, but I was very proficient in the test framework for Python at the end of the excercise. Once you have the basics you can start reading code and then working on building some larger project.

Flessel answered 29/12, 2008 at 13:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.